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