<div dir="ltr">
<div>I was able to test the rtems hello-world example and ticker example on the polarfire soc icicle kit. <br></div><div><br></div><div>A little background about Polarfire SoC ICICLE Kit.</div><div>
The PolarFire SoC Icicle kit is a low-cost development platform that enables the evaluation of the five-core Linux capable RISC-V microprocessor subsystem. It includes</div><div>



</div><ul><li>SiFive E51 Monitor core (1 x RV64IMAC)</li><li>SiFive U54 Application cores (4 x RV64GC)</li></ul><div>More info is available at the link below:<br></div><div><a href="https://www.microsemi.com/existing-parts/parts/152514">https://www.microsemi.com/existing-parts/parts/152514</a></div><div><br></div><div>There were few changes I had to make in the rtems source code to make it work, as mentioned below.</div><div><br></div><div>1.
 In the startup code the bsp_fdt_copy copies the device tree blob from 
the address from #a1 register to the .rodata section. This is followed by a memset operation for the bss section. <br></div><div>The problem was the call to a memset function was clearing the device tree blob copied in the bsp_fdt_copy() operation. <br></div><div>To fix this I performed the memset first and then bsp_fdt_copy operation.</div><div><br></div><div>2.
 The riscv_console_probe() will try to read the console_node from the device tree. The original code provided for ns16550 UART was not able to read the console node from the device tree correctly. <br>To fix this I used the sifive code to read the console node. The sifive code was limited to only sifive-uart.</div><div><br></div><div>3.
 RTEMS uses -O2 as default optimization settings. With these settings, 
we were facing a trap while trying to perform the open call on the 
console device after mounting the file system.</div><div>To fix this I changed the optimization to -O0 and it resolved the issue.</div><div>I need to debug this more to find the exact cause.<br></div><div><br></div><div>4. The default clock driver simply assumes that the code is running on hart0. This was breaking the ticker example testing.</div><div><div>To fix this I updated the clock driver to read the hart ID and then configure the<br>mtimecmp register accordingly.</div><div><br></div><div>Let me know if these changes are valid. <br></div><div><br></div><div>Regards,</div><div>Somesh<br></div><div><br></div><div><br></div></div>

</div>