<div dir="ltr">Hi Padmarao,<div>Thanks for reviewing the changes. I agree with your suggestions and will send out a V2 patch soon.</div><div>Thanks,</div><div>Alan</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Mar 30, 2023 at 11:28 AM <<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">Hi Alan,<br>
<br>
> On Wed, 2023-03-29 at 10:32 -0400, Alan Cudmore wrote:<br>
> <br>
> This patch adds the documentation for building and running RTEMS on<br>
> the Kendryte K210 RISC-V SoC. The generic riscv introducion<br>
> was re-arranged to list the multilib variants then the specific<br>
> hardware targets. In addition a couple of errors were fixed for<br>
> the generic QEMU commands.<br>
> <br>
> Closes #4876<br>
> ---<br>
>  user/bsps/bsps-riscv.rst | 105 ++++++++++++++++++++++++++++++++++---<br>
> --<br>
>  1 file changed, 92 insertions(+), 13 deletions(-)<br>
> <br>
> diff --git a/user/bsps/bsps-riscv.rst b/user/bsps/bsps-riscv.rst<br>
> index 41f369f..14055d0 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 12 variants:<br>
> +**This BSP offers 10 variants, each corresponding to a GCC<br>
> multilib:**<br>
> <br>
>  * rv32i<br>
> <br>
> @@ -30,23 +30,22 @@ This BSP offers 12 variants:<br>
> <br>
>  * rv64imafdc<br>
> <br>
> -* frdme310arty<br>
> -<br>
> -* mpfs64imafdc<br>
> -<br>
> -Each rv* variant corresponds to a GCC multilib.  A particular<br>
> variant reflects an<br>
> -ISA with ABI and code model choice. All rv64 BSPs have medany code<br>
> model by<br>
> +Each variant reflects an ISA with ABI and code model choice. All<br>
> rv64 BSPs have medany code model by<br>
>  default, while rv32 BSPs are medlow. The reason is that RV32 medlow<br>
> can access<br>
>  the entire 32-bit address space, while RV64 medlow can only access<br>
> addresses<br>
>  below 0x80000000. With RV64 medany, it's possible to perform<br>
> accesses above<br>
> -0x80000000.<br>
> +0x80000000. The BSP must be started im machine mode.<br>
I think, it is "in machine mode" not "im" <br>
> +<br>
> +The reference platform for the rv* variants is the QEMU `virt`<br>
> machine.<br>
> +<br>
> +**The BSP also provides the following 3 variants for specific<br>
> hardware targets:**<br>
> <br>
> -The BSP must be started im machine mode.<br>
> +* frdme310arty - The reference platform for this variant is the Arty<br>
> FPGA board with the Sifive Freedom E310 reference design.<br>
> <br>
> -The reference platform for this BSP is the QEMU `virt` machine.<br>
> +* mpfs64imafdc - The reference platform for this variant is the<br>
> Microchip PolarFire SoC Icicle Kit.<br>
> +<br>
> +* kendrytek210 - The reference platform for this variant is the<br>
> Kendryte K210 SoC on the Sipeed MAiX Bit or MAiXDuino board.<br>
> <br>
> -The reference platform for the mpfs64imafdc BSP variant is the<br>
> Microchip<br>
> -PolarFire SoC Icicle Kit.<br>
> <br>
>  Build Configuration Options<br>
>  ---------------------------<br>
> @@ -90,6 +89,9 @@ configuration INI file. The ``waf`` defaults can be<br>
> used to inspect the values.<br>
>       The maximum number of NS16550 devices supported by the console<br>
> driver (2<br>
>       by default).<br>
> <br>
> +``RISCV_ENABLE_SIFIVE_UART_SUPPORT``<br>
> +     Enable the Sifive console UART (disabled by default)<br>
> +<br>
>  ``RISCV_RAM_REGION_BEGIN``<br>
>       The begin of the RAM region for linker command file (default is<br>
> 0x80000000).<br>
> <br>
> @@ -104,6 +106,10 @@ configuration INI file. The ``waf`` defaults can<br>
> be used to inspect the values.<br>
>       Enables support Microchip PolarFire SoC if defined to a non-<br>
> zero<br>
>       value, otherwise it is disabled (disabled by default).<br>
> <br>
> +``RISCV_ENABLE_KENDRYTE_K210_SUPPORT``<br>
> +     Enables support for the Kendtryte K210 SoC if defined to a non-<br>
> 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>
> @@ -131,7 +137,7 @@ The console driver supports devices compatible to<br>
> <br>
>  * "ns16750" (see ``RISCV_CONSOLE_MAX_NS16550_DEVICES`` BSP option).<br>
> <br>
> -* "sifive,uart0" (see ``RISCV_ENABLE_FRDME310ARTY_SUPPORT`` BSP<br>
> option).<br>
> +* "sifive,uart0" (see ``RISCV_ENABLE_SIFIVE_UART_SUPPORT`` BSP<br>
> option). This console driver is used by the frdme310arty and<br>
> kendrytek210 BSP variants.<br>
> <br>
>  They are initialized according to the device tree.  The console<br>
> driver does not<br>
>  configure the pins or peripheral clocks.  The console device is<br>
> selected<br>
> @@ -145,11 +151,13 @@ and spike machines. For instance, to run the<br>
> ``rv64imafdc`` BSP with the<br>
>  following "config.ini" file.<br>
> <br>
>  .. code-block:: none<br>
> +<br>
>      [riscv/rv64imafdc]<br>
> <br>
>  Run the following QEMU command.<br>
> <br>
>  .. code-block:: shell<br>
> +<br>
>      $ qemu-system-riscv64 -M virt -nographic -bios $RTEMS_EXE<br>
>      $ qemu-system-riscv64 -M spike -nographic -bios $RTEMS_EXE<br>
> <br>
> @@ -160,11 +168,13 @@ For instance, to run the ``rv64imafdc`` BSP<br>
> with the following<br>
>  "config.ini" file.<br>
> <br>
>  .. code-block:: none<br>
> +<br>
>      [riscv/rv64imafdc]<br>
> <br>
>  Run the following Spike command.<br>
> <br>
>  .. code-block:: shell<br>
> +<br>
>      $ spike --isa=rv64imafdc $RTEMS_EXE<br>
> <br>
>  Unlike QEMU, Spike supports enabling/disabling a subset of the<br>
> imafdc extensions<br>
> @@ -277,6 +287,75 @@ Serial terminal UART1 displays the SMP example<br>
> messages<br>
> <br>
>      *** END OF TEST SMP 1 ***<br>
> <br>
> +Kendryte K210<br>
> +-------------<br>
> +<br>
> +The Kendryte K210 SoC is a dual core 64-bit RISC-V SoC with an AI<br>
> NPU,<br>
> +built in SRAM, and a variety of peripherals. Currently just the<br>
> console UART, interrupt controller, and timer are supported.<br>
> +<br>
> +The device tree blob is embedded in the ``kendrytek210`` BSP variant<br>
> by default.<br>
> +When the kendrytek210 BSP variant is selected,<br>
> ``BSP_DTB_IS_SUPPORTED`` enabled and the DTB header path<br>
> +``BSP_DTB_HEADER_PATH`` is set to bsp/kendryte-k210-dtb.h.<br>
> +<br>
> +The ``kendrytek210`` BSP variant has been tested on the following<br>
> simulator and boards:<br>
> +<br>
> +* Renode.io simulator using the Kendrtye k210 model<br>
> +* Sipeed MAix BiT board<br>
> +* Sipeed MaixDuino board<br>
> +<br>
> +**Building the Kendryte K210 BSP**<br>
> +<br>
> +Configuration file ``config.ini``:<br>
> +<br>
> +.. code-block:: none<br>
> +<br>
> +    [riscv/kendrytek210]<br>
> +    RTEMS_SMP = True<br>
> +<br>
> +Build RTEMS:<br>
> +<br>
> +.. code-block:: shell<br>
> +<br>
> +    $ ./waf configure --prefix=$HOME/rtems-start/rtems/6<br>
> +    $ ./waf<br>
> +<br>
> +**Flash an executable to the Sipeed MAix BiT or MAixDuino board**<br>
> +<br>
> +Binary images can be flashed to the Sipeed boards through the USB<br>
> port using the kflash.py utility available from the python pip<br>
> utility.<br>
> +<br>
> +.. code-block:: shell<br>
> +<br>
> +    $ riscv-rtems6-objcopy -Obinary ticker.exe ticker.bin<br>
> +    $ kflash.py --uart /dev/ttyUSB0 ticker.bin<br>
> +<br>
> +After the image is flashed, the RTEMS image will automatically boot.<br>
> It will also run when the board is reset or powered through the USB<br>
> cable. The USB port provides the power and console UART. Plug the USB<br>
> cable into a host PC and bring up a terminal emulator at 115k baud,<br>
> 8N1. On linux the UART device is often ``/dev/ttyUSB0``.<br>
> <br>
May be like this: "at 115200 baud, 8 data bits, 1 stop bit, no parity,<br>
and no flow control. On Linux the UART device is often<br>
``/dev/ttyUSB0``."<br>
<br>
> +<br>
> +**Run a RTEMS application on the Renode.io simulator**<br>
> +<br>
> +RTEMS executables compiled with the kendrytek210 BSP can run on the<br>
> <a href="http://renode.io" rel="noreferrer" target="_blank">renode.io</a> simulator using the built-in K210 model. The simulator<br>
> currently supports the console UART, interrupt controller, and timer.<br>
> +<br>
> +To install <a href="http://renode.io" rel="noreferrer" target="_blank">renode.io</a> please refer to the instructions on the<br>
> website.<br>
Can we name the website with hyperlink or share the installation link "<br>
<a href="https://github.com/renode/renode#installation" rel="noreferrer" target="_blank">https://github.com/renode/renode#installation</a>"<br>
<br>
Regards<br>
Padmarao<br>
>  Once installed make a local copy of the ``kendryte_k210.resc``<br>
> script from the ``renode/scripts/single-node`` directory to a local<br>
> directory where it can be edited. Edit the script and change the line<br>
> that loads the Linux image to load a RTEMS elf image instead. The<br>
> default extension for the RTEMS sample ELF images is ``.exe``.<br>
> +<br>
> +.. code-block:: shell<br>
> +<br>
> +    sysbus LoadELF ticker.exe<br>
> +<br>
> +After editing the script, start renode and load the<br>
> kendryte_k210.resc script to start the emulation.<br>
> +<br>
> +.. code-block:: shell<br>
> +<br>
> +    (monitor) s @kendryte_k210.resc<br>
> +<br>
> +**Generating the Device Tree Header**<br>
> +<br>
> +The kendrytek210 BSP uses a built in device tree blob. If additional<br>
> peripheral support is added to the BSP, the device tree may need to<br>
> be updated. After editing the device tree source, compile it to a<br>
> device tree blob with the following command:<br>
> +<br>
> +.. code-block:: shell<br>
> +<br>
> +    $ dtc -O dtb -b 0 -o kendryte-k210.dtb kendryte-k210.dts<br>
> +<br>
> +The dtb file can then be converted to a C array using the rtems-<br>
> bin2c tool. The data for the device tree binary can then replace the<br>
> existing device tree binary data in the ``kendryte-k210-dtb.h``<br>
> header file.<br>
> +<br>
>  noel<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>