Thanks Alan for investigating this issue and following up with the updates. It's fine to leave it for now, perhaps even report it to Renode if we think it's a problem with their simulator or something.
On Sun, 2 Apr 2023 at 17:22, Alan Cudmore <alan.cudm...@gmail.com> wrote: > > I submitted a v4 patch for the user/bsps/bsps-riscv.rst page. > I improved the instructions for running on Renode by providing a .resc file > that would work, rather than modifying an existing script that was used to > run Linux. > > This should work until I have some time to figure out why the > 'SetSerialExecution True' keeps ticker from working. Given that defining > CLOCK_DRIVER_USE_ONLY_BOOT_PROCESSOR also works, this seems like a race > condition between RTEMS and renode. I don't notice this on any of the > physical boards I have tested. > I don't understand the implications of telling the clock driver to only use > the boot CPU, so I would prefer to leave that alone for now. > > Thanks, > Alan > > > On Sat, Apr 1, 2023 at 11:05 PM Alan Cudmore <alan.cudm...@gmail.com> wrote: >> >> Update on K210/ticker on Renode: >> If I define CLOCK_DRIVER_USE_ONLY_BOOT_PROCESSOR in the RISC-V BSP, ticker >> works on the unmodified .resc file. >> Alan >> >> On Sat, Apr 1, 2023 at 8:17 PM Alan Cudmore <alan.cudm...@gmail.com> wrote: >>> >>> Hi Hesham, >>> I found a difference between the .resc file I use to run single tests and >>> the .resc file that the renode-test uses. >>> The resc file where ticker.exe fails has this extra statement: >>> $ex='machine SetSerialExecution True' >>> If I comment that out, ticker runs on Renode. >>> I couldn't find that in the documentation, so I'm going to have to search >>> the renode code to see what it does. I'm pretty sure I used to run >>> ticker.exe by itself without commenting out that line. >>> It's odd because a number of other examples work with the statement like >>> smp08.exe, unlimited.exe, hello.exe. >>> >>> For reference, my renode-test setup for the K210 is here: >>> https://github.com/alanc98/k210-rtems-test >>> Note that if you run this, the rki test will fail unless you remove the >>> last test or build an RKI image for the k210: >>> https://github.com/alanc98/rki2/tree/rtems6 >>> >>> Alan >>> >>> >>> On Sat, Apr 1, 2023 at 6:13 PM Alan Cudmore <alan.cudm...@gmail.com> wrote: >>>> >>>> Interesting - I get the same error when I run ticker on renode now. I just >>>> tried it on a board and it works. >>>> It also still passes the renode-test that I run, which includes ticker >>>> ticker along with a dozen other tests. I'll look into why this does not >>>> work right now. >>>> Thanks, >>>> Alan >>>> >>>> >>>> On Sat, Apr 1, 2023 at 5:32 PM Hesham Almatary <heshamelmat...@gmail.com> >>>> wrote: >>>>> >>>>> 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 -- Regards, Hesham _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel