Thanks Alan! It Looks good to me. I'd appreciate your help with running on the simulator. I followed your documentation in this patch, but ticker seems to fatal error as follows:
"*** FATAL *** fatal source: 6 (RTEMS_FATAL_SOURCE_BSP) CPU: 0 fatal code: 3342 (0x00000d0e) RTEMS version: 6.0.0.4021b87e002a094fb0d8ddd099cb8483d6986c8b RTEMS tools: 12.2.1 20221121 (RTEMS 6, RSB 65f83cf973d6f1f8974ea1818e653753b83eaea8-modified, Newlib b9898fc) executing thread ID: 0x09010001 executing thread name: IDLE" This is the log from Renode: 22:28:53.3268 [INFO] Loaded monitor commands from: /home/hesham/Downloads/renode_portable/scripts/monitor.py 22:28:58.0077 [INFO] Including script: /home/hesham/Downloads/renode_portable/scripts/single-node/kendryte_k210.resc 22:28:58.0181 [INFO] System bus created. 22:28:58.8437 [INFO] sysbus: Loading segment of 68760 bytes length at 0x80000000. 22:28:58.8568 [INFO] sysbus: Loading segment of 4096 bytes length at 0x80010C98. 22:28:58.8571 [INFO] sysbus: Loading segment of 6217728 bytes length at 0x80012000. 22:28:58.8783 [INFO] cpu1: Setting PC value to 0x80000000. 22:28:58.8793 [INFO] cpu2: Setting PC value to 0x80000000. 22:28:58.9003 [INFO] machine-0: Machine started. 22:28:58.9704 [WARNING] plic: Unhandled write to offset 0x200000, value 0x0. 22:28:58.9790 [WARNING] sysbus: [cpu1: 0x80009FE0] (tag: 'SYSCTL/clk_sel0') ReadDoubleWord from non existing peripheral at 0x50440020, returning 0x00000000. On Sat, 1 Apr 2023 at 21:22, Alan Cudmore <alan.cudm...@gmail.com> wrote: > > Hi Hesham, > I applied your suggestions and sent a v3 patch. > Thanks for the review, > Alan > > > On Sat, Apr 1, 2023 at 1:43 PM Hesham Almatary <heshamelmat...@gmail.com> > wrote: >> >> On Fri, 31 Mar 2023 at 17:15, Alan Cudmore <alan.cudm...@gmail.com> 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:** >> > >> We should probably remove the number as it changes and what we have in >> RTEMS might not be an exact match. i.e., "This BSP corresponds to >> multilib variants, with different RISC-V standard extensions" or >> something. >> >> > * 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. >> > + >> QEMU and Spike. >> >> > +**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) >> > + >> np: SiFive. >> >> > ``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 >> > ==== >> > >> > -- >> > 2.25.1 >> > >> > _______________________________________________ >> > devel mailing list >> > devel@rtems.org >> > http://lists.rtems.org/mailman/listinfo/devel >> >> >> >> -- >> Regards, >> Hesham -- Regards, Hesham _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel