source: rtems-docs/user/bsps/bsps-riscv.rst @ 9d0f454

Last change on this file since 9d0f454 was 9d0f454, checked in by Hesham Almatary <heshamelmatary@…>, on 10/25/22 at 15:01:12

bsp/riscv: Add a section about running on QEMU

  • Property mode set to 100644
File size: 7.4 KB
Line 
1.. SPDX-License-Identifier: CC-BY-SA-4.0
2
3.. Copyright (C) 2018 embedded brains GmbH
4
5riscv (RISC-V)
6**************
7
8riscv
9=====
10
11This BSP offers 15 variants:
12
13* rv32i
14
15* rv32iac
16
17* rv32im
18
19* rv32imac
20
21* rv32imafc
22
23* rv32imafd
24
25* rv32imafdc
26
27* rv64imac
28
29* rv64imac_medany
30
31* rv64imafd
32
33* rv64imafd_medany
34
35* rv64imafdc
36
37* rv64imafdc_medany
38
39* frdme310arty
40
41* mpfs64imafdc
42
43Each variant corresponds to a GCC multilib.  A particular variant reflects an
44ISA with ABI and code model choice.
45
46The BSP must be started im machine mode.
47
48The reference platform for this BSP is the QEMU `virt` machine.
49
50The reference platform for the mpfs64imafdc BSP variant is the Microchip
51PolarFire SoC Icicle Kit.
52
53Build Configuration Options
54---------------------------
55
56The following options can be used in the BSP section of the ``waf``
57configuration INI file. The ``waf`` defaults can be used to inspect the values.
58
59``BSP_PRESS_KEY_FOR_RESET``
60    If defined to a non-zero value, then print a message and wait until pressed
61    before resetting board when application terminates.
62
63``BSP_RESET_BOARD_AT_EXIT``
64    If defined to a non-zero value, then reset the board when the application
65    terminates.
66
67``BSP_PRINT_EXCEPTION_CONTEXT``
68    If defined to a non-zero value, then print the exception context when an
69    unexpected exception occurs.
70
71``BSP_FDT_BLOB_SIZE_MAX``
72    The maximum size of the device tree blob in bytes (default is 65536).
73
74``BSP_DTB_IS_SUPPORTED``
75    If defined to a non-zero value, then the device tree blob is embedded in
76    the BSP.
77
78``BSP_DTB_HEADER_PATH``
79    The path to the header file containing the device tree blob.
80
81``BSP_CONSOLE_BAUD``
82    The default baud for console driver devices (default 115200).
83
84``RISCV_MAXIMUM_EXTERNAL_INTERRUPTS``
85     The maximum number of external interrupts supported by the BSP (default
86     64).
87
88``RISCV_ENABLE_HTIF_SUPPORT``
89     Enables the HTIF support if defined to a non-zero value, otherwise it is
90     disabled (disabled by default).
91
92``RISCV_CONSOLE_MAX_NS16550_DEVICES``
93     The maximum number of NS16550 devices supported by the console driver (2
94     by default).
95
96``RISCV_RAM_REGION_BEGIN``
97     The begin of the RAM region for linker command file (default is 0x70000000
98     for 64-bit with -mcmodel=medlow and 0x80000000 for all other).
99
100``RISCV_RAM_REGION_SIZE``
101     The size of the RAM region for linker command file (default 64MiB).
102
103``RISCV_ENABLE_FRDME310ARTY_SUPPORT``
104     Enables support sifive Freedom E310 Arty board if defined to a non-zero
105     value,otherwise it is disabled (disabled by default)
106
107``RISCV_ENABLE_MPFS_SUPPORT``
108     Enables support Microchip PolarFire SoC if defined to a non-zero
109     value, otherwise it is disabled (disabled by default).
110
111``RISCV_BOOT_HARTID``
112     The boot hartid (processor number) of risc-v cpu by default 0.
113
114Interrupt Controller
115--------------------
116
117Exactly one Core Local Interruptor (CLINT) and exactly one Platform-Level
118Interrupt Controller (PLIC) are supported.  The maximum number of external
119interrupts supported by the BSP is defined by the
120``RISCV_MAXIMUM_EXTERNAL_INTERRUPTS`` BSP option.
121
122Clock Driver
123------------
124
125The clock driver uses the CLINT timer.
126
127Console Driver
128--------------
129
130The console driver supports devices compatible to
131
132* "ucb,htif0" (depending on the ``RISCV_ENABLE_HTIF_SUPPORT`` BSP option),
133
134* "ns16550a" (see ``RISCV_CONSOLE_MAX_NS16550_DEVICES`` BSP option), and
135
136* "ns16750" (see ``RISCV_CONSOLE_MAX_NS16550_DEVICES`` BSP option).
137
138* "sifive,uart0" (see ``RISCV_ENABLE_FRDME310ARTY_SUPPORT`` BSP option).
139
140They are initialized according to the device tree.  The console driver does not
141configure the pins or peripheral clocks.  The console device is selected
142according to the device tree "/chosen/stdout-path" property value.
143
144QEMU
145----
146
147All of the BSP variants that start with rv can be run on QEMU's virt machine.
148For instance, to run the ``rv64imafdc_medany`` BSP with the following
149"config.ini" file:
150
151.. code-block:: none
152    [riscv/rv64imafdc_medany]
153
154Run the following QEMU command:
155
156.. code-block:: shell
157    $ qemu-system-riscv64 -M virt -nographic -bios $RTEMS_EXE
158
159Microchip PolarFire SoC
160-----------------------
161
162The PolarFire SoC is the 4x 64-bit RISC-V U54 cores and a 64-bit RISC-V
163E51 monitor core SoC from the Microchip.
164
165The ``mpfs64imafdc`` BSP variant supports the U54 cores but not the E51 because
166the E51 monitor core is reserved for the first stage bootloader
167(Hart Software Services). In order to boot from the first U54 core,
168``RISCV_BOOT_HARTID`` is set to 1 by default.
169
170The device tree blob is embedded in the ``mpfs64imafdc`` BSP variant by default
171with the ``BSP_DTB_IS_SUPPORTED`` enabled and the DTB header path
172``BSP_DTB_HEADER_PATH`` is set to bsp/mpfs-dtb.h.
173
174**SMP test procedure for the Microchip PolarFire Icicle Kit:**
175
176The "config.ini" file.
177
178.. code-block:: none
179
180    [riscv/mpfs64imafdc]
181    BUILD_TESTS = True
182    RTEMS_POSIX_API=True
183    RTEMS_SMP = True
184    BSP_START_COPY_FDT_FROM_U_BOOT=False
185    BSP_VERBOSE_FATAL_EXTENSION = False
186
187Build RTEMS.
188
189.. code-block:: shell
190
191    $ ./waf configure --prefix=$HOME/rtems-start/rtems/6
192    $ ./waf
193
194Convert .exe to .elf file.
195
196.. code-block:: shell
197
198    $ riscv-rtems6-objcopy build/riscv/mpfs64imafdc/testsuites/smptests/smp01.exe build/riscv/mpfs64imafdc/testsuites/smptests/smp01.elf
199
200Generate a payload for the `smp01.elf` using the `hss-payload-generator <https://github.com/polarfire-soc/hart-software-services/blob/master/tools/hss-payload-generator>`_.
201
202* Copy `smp01.elf` file to the HSS/tools/hss-payload-generator/test directory.
203
204* Go to hss-payload-generator source directory.
205
206.. code-block:: shell
207
208    $ cd hart-software-services/tools/hss-payload-generator
209
210* Edit test/uboot.yaml file for the hart entry points and correct name of the
211  binary file.
212
213.. code-block:: none
214
215    set-name: 'PolarFire-SoC-HSS::RTEMS'
216    hart-entry-points: {u54_1: '0x1000000000', u54_2: '0x1000000000', u54_3: '0x1000000000', u54_4: '0x1000000000'}
217    payloads:
218     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}
219
220* Generate payload
221
222.. code-block:: shell
223
224    $ ./hss-payload-generator -c test/uboot.yaml payload.bin
225
226Once the payload binary is generated, it should be copied to the eMMC/SD.
227
228`FPGA design with HSS programming file <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>`_.
229
230Program the eMMC/SD with the payload binary.
231
232* Power Cycle the Microchip PolarFire Icicle Kit and stop at the HSS.
233
234* type "mmc" and then "usbdmsc" on the HSS terminal(UART0).
235
236* Load the payload.bin from the Host PC.
237
238.. code-block:: shell
239
240    $ sudo dd if=payload.bin of=/dev/sdb bs=512
241
242Reset the Microchip PolarFire SoC Icicle Kit.
243
244Serial terminal UART1 displays the SMP example messages
245
246.. code-block:: none
247
248    *** BEGIN OF TEST SMP 1 ***
249    *** TEST VERSION: 6.0.0.ef33f861e16de9bf4190a36e4d18062c7300986c
250    *** TEST STATE: EXPECTED_PASS
251    *** TEST BUILD: RTEMS_POSIX_API RTEMS_SMP
252    *** TEST TOOLS: 12.1.1 20220622 (RTEMS 6, RSB 3cb78b0b815ba05d17f5c6
253                5865d246a8333aa087, Newlib ea99f21)
254
255    CPU 3 start task TA0
256    CPU 2 running Task TA0
257    CPU 3 start task TA1
258    CPU 1 running Task TA1
259    CPU 3 start task TA2
260    CPU 0 running Task TA2
261
262    *** END OF TEST SMP 1 ***
263
264griscv
265======
266
267This RISC-V BSP supports chips using the
268`GRLIB <https://www.gaisler.com/products/grlib/grlib.pdf>`_.
Note: See TracBrowser for help on using the repository browser.