<div dir="ltr"><div>Hi Padmarao,</div><div>The docs look good to me. I have a couple of minor comments inline.</div><div>I'm really glad to see this BSP in RTEMS.</div><div>Thanks,</div><div>Alan</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Sep 28, 2022 at 4:07 PM Padmarao Begari <<a href="mailto:padmarao.begari@microchip.com">padmarao.begari@microchip.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Update the riscv documentation for the Microchip PolarFire SoC<br>
BSP variant including information about SMP test procedure<br>
for the Microchip PolarFire Icicle Kit.<br>
---<br>
 user/bsps/bsps-riscv.rst | 114 ++++++++++++++++++++++++++++++++++++++-<br>
 1 file changed, 113 insertions(+), 1 deletion(-)<br>
<br>
diff --git a/user/bsps/bsps-riscv.rst b/user/bsps/bsps-riscv.rst<br>
index 5faa87b..be65a68 100644<br>
--- a/user/bsps/bsps-riscv.rst<br>
+++ b/user/bsps/bsps-riscv.rst<br>
@@ -8,7 +8,7 @@ riscv (RISC-V)<br>
 riscv<br>
 =====<br>
<br>
-This BSP offers 13 variants:<br>
+This BSP offers 15 variants:<br>
<br>
 * rv32i<br>
<br>
@@ -38,6 +38,8 @@ This BSP offers 13 variants:<br>
<br>
 * frdme310arty<br>
<br>
+* mpfs64imafdc<br>
+<br>
 Each variant corresponds to a GCC multilib.  A particular variant reflects an<br>
 ISA with ABI and code model choice.<br>
<br>
@@ -47,6 +49,9 @@ be started im machine mode.<br>
<br>
 The reference platform for this BSP is the Qemu `virt` machine.<br>
<br>
+The reference platform for the mpfs64imafdc BSP variant is the Microchip<br>
+PolarFire SoC Icicle Kit.<br>
+<br>
 Build Configuration Options<br>
 ---------------------------<br>
<br>
@@ -94,6 +99,13 @@ configuration INI file. The ``waf`` defaults can be used to inspect the values.<br>
      Enables support sifive Freedom E310 Arty board if defined to a non-zero<br>
      value,otherwise it is disabled (disabled by default)<br>
<br>
+``RISCV_ENABLE_MPFS_SUPPORT``<br>
+     Enables support Microchip PolarFire SoC if defined to a non-zero<br>
+     value, otherwise it is disabled (disabled by default).<br>
+<br>
+``RISCV_BOOT_HARTID``<br>
+     The boot hartid (processor number) of risc-v cpu by default 0.<br>
+<br>
 Interrupt Controller<br>
 --------------------<br>
<br>
@@ -124,6 +136,106 @@ They are initialized according to the device tree.  The console driver does not<br>
 configure the pins or peripheral clocks.  The console device is selected<br>
 according to the device tree "/chosen/stdout-path" property value.<br>
<br>
+Microchip PolarFire SoC<br>
+-----------------------<br>
+<br>
+The PolarFire SoC is the 4x 64-bit RISC-V U54 cores and a 64-bit RISC-V<br>
+E51 monitor core SoC from the Microchip.<br>
+<br>
+The ``mpfs64imafdc`` BSP variant supports the U54 cores not the E51 because<br>
+the E51 monitor core is reserved for first stage bootloader<br>
+(Hart Software Services) and default ``RISCV_BOOT_HARTID`` is 1.<br></blockquote><div>I would suggest "... BSP variant supports the U54 cores but not the E51 because the E51 monitor core is reserved for the first stage bootloader (Hart Software Services). In order to boot from the first U54 core, ``RISCV_BOOT_HARTID`` is set to 1 by default. </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
+<br>
+**SMP test procedure for the Microchip PolarFire Icicle Kit:**<br>
+<br>
+The "config.ini" file.<br>
+<br>
+.. code-block:: none<br>
+<br>
+    [riscv/mpfs64imafdc]<br>
+    BUILD_TESTS = True<br>
+    RTEMS_POSIX_API=True<br>
+    RTEMS_SMP = True<br>
+    BSP_START_COPY_FDT_FROM_U_BOOT=False<br>
+    BSP_VERBOSE_FATAL_EXTENSION = False<br>
+<br>
+Build RTEMS.<br>
+<br>
+.. code-block:: shell<br>
+<br>
+    $ ./waf configure --prefix=$HOME/rtems-start/rtems/6<br>
+    $ ./waf<br>
+<br>
+Convert .exe to .elf file.<br>
+<br>
+.. code-block:: shell<br>
+<br>
+    $ riscv-rtems6-objcopy build/riscv/mpfs64imafdc/testsuites/smptests/smp01.exe build/riscv/mpfs64imafdc/testsuites/smptests/smp01.elf<br></blockquote><div>I believe the .exe file is already .elf, so the file can be renamed or used as is. Probably OK to leave this since it makes it clear that the elf file format is needed for the next step. </div><div><br></div><div>Also, is it worth mentioning that the DTB is embedded in the BSP rather than loaded from the eMMC/SD card?</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
+<br>
+Generate a payload for the `smp01.elf` using the `hss-payload-generator <<a href="https://github.com/polarfire-soc/hart-software-services/blob/master/tools/hss-payload-generator" rel="noreferrer" target="_blank">https://github.com/polarfire-soc/hart-software-services/blob/master/tools/hss-payload-generator</a>>`_.<br>
+<br>
+* Copy `smp01.elf` file to the HSS/tools/hss-payload-generator/test directory.<br>
+<br>
+* Go to hss-payload-generator source directory.<br>
+<br>
+.. code-block:: shell<br>
+<br>
+    $ cd hart-software-services/tools/hss-payload-generator<br>
+<br>
+* Edit test/uboot.yaml file for the hart entry points and correct name of the<br>
+  binary file.<br>
+<br>
+.. code-block:: none<br>
+<br>
+    set-name: 'PolarFire-SoC-HSS::RTEMS'<br>
+    hart-entry-points: {u54_1: '0x1000000000', u54_2: '0x1000000000', u54_3: '0x1000000000', u54_4: '0x1000000000'}<br>
+    payloads:<br>
+     test/smp01.elf: {exec-addr: '0x1000000000', owner-hart: u54_1, secondary-hart: u54_2, secondary-hart: u54_3, secondary-hart: u54_4, priv-mode: prv_m, skip-opensbi: true}<br>
+<br>
+* Generate payload<br>
+<br>
+.. code-block:: shell<br>
+<br>
+    $ ./hss-payload-generator -c test/uboot.yaml payload.bin<br>
+<br>
+Once the payload binary is generated, it should be copied to the eMMC/SD.<br>
+<br>
+`FPGA design with HSS programming file <<a href="https://github.com/polarfire-soc/polarfire-soc-documentation/blob/master/boards/mpfs-icicle-kit-es/updating-icicle-kit/updating-icicle-kit-design-and-linux.md" rel="noreferrer" target="_blank">https://github.com/polarfire-soc/polarfire-soc-documentation/blob/master/boards/mpfs-icicle-kit-es/updating-icicle-kit/updating-icicle-kit-design-and-linux.md</a>>`_.<br>
+<br>
+Program the eMMC/SD with the payload binary.<br>
+<br>
+* Power Cycle the Microchip PolarFire Icicle Kit and stop at the HSS.<br>
+<br>
+* type "mmc" and then "usbdmsc" on the HSS terminal(UART0).<br>
+<br>
+* Load the payload.bin from the Host PC.<br>
+<br>
+.. code-block:: shell<br>
+<br>
+    $ sudo dd if=payload.bin of=/dev/sdb bs=512<br>
+<br>
+Reset the Microchip PolarFire SoC Icicle Kit.<br>
+<br>
+Serial terminal UART1 displays the SMP example messages<br>
+<br>
+.. code-block:: none<br>
+<br>
+    *** BEGIN OF TEST SMP 1 ***<br>
+    *** TEST VERSION: 6.0.0.ef33f861e16de9bf4190a36e4d18062c7300986c<br>
+    *** TEST STATE: EXPECTED_PASS<br>
+    *** TEST BUILD: RTEMS_POSIX_API RTEMS_SMP<br>
+    *** TEST TOOLS: 12.1.1 20220622 (RTEMS 6, RSB 3cb78b0b815ba05d17f5c6<br>
+               5865d246a8333aa087, Newlib ea99f21)<br>
+<br>
+    CPU 3 start task TA0<br>
+    CPU 2 running Task TA0<br>
+    CPU 3 start task TA1<br>
+    CPU 1 running Task TA1<br>
+    CPU 3 start task TA2<br>
+    CPU 0 running Task TA2<br>
+<br>
+    *** END OF TEST SMP 1 ***<br>
+<br>
 griscv<br>
 ======<br>
<br>
-- <br>
2.25.1<br>
<br>
_______________________________________________<br>
devel mailing list<br>
<a href="mailto:devel@rtems.org" target="_blank">devel@rtems.org</a><br>
<a href="http://lists.rtems.org/mailman/listinfo/devel" rel="noreferrer" target="_blank">http://lists.rtems.org/mailman/listinfo/devel</a><br>
</blockquote></div></div>