Skip to content

Commit f587a55

Browse files
authored
[libcpu/aarch64] add gicv3 support and bsp/rockchip/rk3568 (#5722)
* [libcpu/aarch64] add smp support * [libcpu/aarch64] rt_hw_trap_irq get irq instead of iar when using gicv2 * [libcpu/aarch64] disable irq/fiq when switch thread * [libcpu/aarch64] add gtimer frq set and stack align * [libcpu/aarch64] add gicv3 support and bsp/rockchip/rk3568
1 parent d23493d commit f587a55

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+4107
-920
lines changed

.github/workflows/action.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ jobs:
167167
- {RTT_BSP: "qemu-virt64-aarch64", RTT_TOOL_CHAIN: "sourcery-aarch64"}
168168
- {RTT_BSP: "raspberry-pi/raspi3-64", RTT_TOOL_CHAIN: "sourcery-aarch64"}
169169
- {RTT_BSP: "raspberry-pi/raspi4-64", RTT_TOOL_CHAIN: "sourcery-aarch64"}
170+
- {RTT_BSP: "rockchip/rk3568", RTT_TOOL_CHAIN: "sourcery-aarch64"}
170171
steps:
171172
- uses: actions/checkout@v2
172173
- name: Set up Python

bsp/qemu-virt64-aarch64/.config

Lines changed: 23 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -96,17 +96,8 @@ CONFIG_RT_USING_USER_MAIN=y
9696
CONFIG_RT_MAIN_THREAD_STACK_SIZE=8192
9797
CONFIG_RT_MAIN_THREAD_PRIORITY=10
9898
# CONFIG_RT_USING_LEGACY is not set
99-
100-
#
101-
# C++ features
102-
#
103-
# CONFIG_RT_USING_CPLUSPLUS is not set
104-
105-
#
106-
# Command shell
107-
#
108-
CONFIG_RT_USING_FINSH=y
10999
CONFIG_RT_USING_MSH=y
100+
CONFIG_RT_USING_FINSH=y
110101
CONFIG_FINSH_USING_MSH=y
111102
CONFIG_FINSH_THREAD_NAME="tshell"
112103
CONFIG_FINSH_THREAD_PRIORITY=20
@@ -120,10 +111,6 @@ CONFIG_FINSH_USING_DESCRIPTION=y
120111
# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set
121112
# CONFIG_FINSH_USING_AUTH is not set
122113
CONFIG_FINSH_ARG_MAX=10
123-
124-
#
125-
# Device virtual file system
126-
#
127114
CONFIG_RT_USING_DFS=y
128115
CONFIG_DFS_USING_POSIX=y
129116
CONFIG_DFS_USING_WORKDIR=y
@@ -157,12 +144,15 @@ CONFIG_RT_DFS_ELM_MUTEX_TIMEOUT=3000
157144
CONFIG_RT_USING_DFS_DEVFS=y
158145
# CONFIG_RT_USING_DFS_ROMFS is not set
159146
# CONFIG_RT_USING_DFS_RAMFS is not set
147+
# CONFIG_RT_USING_FAL is not set
160148

161149
#
162150
# Device Drivers
163151
#
164152
CONFIG_RT_USING_DEVICE_IPC=y
165-
# CONFIG_RT_USING_SYSTEM_WORKQUEUE is not set
153+
CONFIG_RT_USING_SYSTEM_WORKQUEUE=y
154+
CONFIG_RT_SYSTEM_WORKQUEUE_STACKSIZE=2048
155+
CONFIG_RT_SYSTEM_WORKQUEUE_PRIORITY=23
166156
CONFIG_RT_USING_SERIAL=y
167157
CONFIG_RT_USING_SERIAL_V1=y
168158
# CONFIG_RT_USING_SERIAL_V2 is not set
@@ -202,7 +192,7 @@ CONFIG_RT_USING_ALARM=y
202192
# CONFIG_RT_USING_USB_DEVICE is not set
203193

204194
#
205-
# POSIX layer and C standard library
195+
# C/C++ and POSIX layer
206196
#
207197
CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8
208198

@@ -226,36 +216,16 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8
226216
#
227217
# Socket is in the 'Network' category
228218
#
219+
# CONFIG_RT_USING_CPLUSPLUS is not set
229220

230221
#
231222
# Network
232223
#
233-
234-
#
235-
# Socket abstraction layer
236-
#
237224
# CONFIG_RT_USING_SAL is not set
238-
239-
#
240-
# Network interface device
241-
#
242225
# CONFIG_RT_USING_NETDEV is not set
243-
244-
#
245-
# light weight TCP/IP stack
246-
#
247226
# CONFIG_RT_USING_LWIP is not set
248-
249-
#
250-
# AT commands
251-
#
252227
# CONFIG_RT_USING_AT is not set
253228

254-
#
255-
# VBUS(Virtual Software BUS)
256-
#
257-
# CONFIG_RT_USING_VBUS is not set
258-
259229
#
260230
# Utilities
261231
#
@@ -264,6 +234,7 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8
264234
# CONFIG_RT_USING_UTEST is not set
265235
# CONFIG_RT_USING_VAR_EXPORT is not set
266236
# CONFIG_RT_USING_RT_LINK is not set
237+
# CONFIG_RT_USING_VBUS is not set
267238

268239
#
269240
# RT-Thread Utestcases
@@ -277,6 +248,7 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8
277248
#
278249
# IoT - internet of things
279250
#
251+
# CONFIG_PKG_USING_LWIP is not set
280252
# CONFIG_PKG_USING_LORAWAN_DRIVER is not set
281253
# CONFIG_PKG_USING_PAHOMQTT is not set
282254
# CONFIG_PKG_USING_UMQTT is not set
@@ -293,6 +265,7 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8
293265
# CONFIG_PKG_USING_FREEMODBUS is not set
294266
# CONFIG_PKG_USING_LJSON is not set
295267
# CONFIG_PKG_USING_EZXML is not set
268+
# CONFIG_PKG_USING_SIMPLE_XML is not set
296269
# CONFIG_PKG_USING_NANOPB is not set
297270

298271
#
@@ -332,6 +305,7 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8
332305
# CONFIG_PKG_USING_JOYLINK is not set
333306
# CONFIG_PKG_USING_EZ_IOT_OS is not set
334307
# CONFIG_PKG_USING_NIMBLE is not set
308+
# CONFIG_PKG_USING_LLSYNC_SDK_ADAPTER is not set
335309
# CONFIG_PKG_USING_OTA_DOWNLOADER is not set
336310
# CONFIG_PKG_USING_IPMSG is not set
337311
# CONFIG_PKG_USING_LSSDP is not set
@@ -539,7 +513,8 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8
539513
# CONFIG_PKG_USING_ARM_2D is not set
540514
# CONFIG_PKG_USING_MCUBOOT is not set
541515
# CONFIG_PKG_USING_TINYUSB is not set
542-
# CONFIG_PKG_USING_USB_STACK is not set
516+
# CONFIG_PKG_USING_CHERRYUSB is not set
517+
# CONFIG_PKG_USING_KMULTI_RTIMER is not set
543518

544519
#
545520
# peripheral libraries and drivers
@@ -563,6 +538,7 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8
563538
# CONFIG_PKG_USING_WM_LIBRARIES is not set
564539
# CONFIG_PKG_USING_KENDRYTE_SDK is not set
565540
# CONFIG_PKG_USING_INFRARED is not set
541+
# CONFIG_PKG_USING_MULTI_INFRARED is not set
566542
# CONFIG_PKG_USING_AGILE_BUTTON is not set
567543
# CONFIG_PKG_USING_AGILE_LED is not set
568544
# CONFIG_PKG_USING_AT24CXX is not set
@@ -619,6 +595,7 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8
619595
# CONFIG_PKG_USING_SOFT_SERIAL is not set
620596
# CONFIG_PKG_USING_MB85RS16 is not set
621597
# CONFIG_PKG_USING_CW2015 is not set
598+
# CONFIG_PKG_USING_RFM300 is not set
622599

623600
#
624601
# AI packages
@@ -637,6 +614,10 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8
637614
# miscellaneous packages
638615
#
639616

617+
#
618+
# project laboratory
619+
#
620+
640621
#
641622
# samples: kernel and components samples
642623
#
@@ -669,6 +650,7 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8
669650
# CONFIG_PKG_USING_CANFESTIVAL is not set
670651
# CONFIG_PKG_USING_ZLIB is not set
671652
# CONFIG_PKG_USING_MINIZIP is not set
653+
# CONFIG_PKG_USING_HEATSHRINK is not set
672654
# CONFIG_PKG_USING_DSTR is not set
673655
# CONFIG_PKG_USING_TINYFRAME is not set
674656
# CONFIG_PKG_USING_KENDRYTE_DEMO is not set
@@ -686,6 +668,7 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8
686668
# CONFIG_PKG_USING_DESIGN_PATTERN is not set
687669
# CONFIG_PKG_USING_CONTROLLER is not set
688670
# CONFIG_PKG_USING_PHASE_LOCKED_LOOP is not set
671+
# CONFIG_PKG_USING_MFBD is not set
689672
CONFIG_SOC_VIRT64_AARCH64=y
690673

691674
#
@@ -696,5 +679,6 @@ CONFIG_RT_USING_UART0=y
696679
CONFIG_BSP_USING_RTC=y
697680
CONFIG_BSP_USING_ALARM=y
698681
CONFIG_BSP_USING_VIRTIO_BLK=y
699-
CONFIG_RT_USING_VIRTIO_BLK0=y
700682
CONFIG_BSP_USING_GIC=y
683+
CONFIG_BSP_USING_GICV2=y
684+
# CONFIG_BSP_USING_GICV3 is not set

bsp/qemu-virt64-aarch64/README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ Enter directory `rt-thread/bsp/qemu-virt64-aarch64` and input:
1919
scons
2020
```
2121

22-
## 2. Execution
22+
## 3. Execution
2323

24-
The project execution tool is `qemu-system-aarch64`
24+
The project execution tool is `qemu-system-aarch64`, the project can be configured to `Cortex-A53/A57/A72`, GIC supports `V2/V3` version, and `V2` of GIC can use 8 processors max.
2525

2626
Download Windows platform from website:
2727
```
@@ -33,7 +33,7 @@ sudo apt update
3333
sudo apt install qemu-system-arm
3434
```
3535

36-
Run qemu.bat or qemu.sh in terminal:
36+
Please fixup the exec scripts if modify the default configuration of the project. Run qemu.bat or qemu.sh in terminal:
3737
```
3838
heap: [0x40042aa0 - 0x40142aa0]
3939
@@ -45,10 +45,10 @@ Hi, this is RT-Thread!!
4545
msh />
4646
```
4747

48-
## 3. Condition
48+
## 4. Condition
4949

5050
| Driver | Condition | Remark |
5151
| ------ | --------- | ------ |
5252
| UART | Support | UART0 |
5353
| RTC | Support | - |
54-
| VIRTIO BLK | Support | VIRTIO BLK0 |
54+
| VIRTIO BLK | Support | - |

bsp/qemu-virt64-aarch64/README_zh.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ scons
2222

2323
## 3. 执行
2424

25-
本工程执行环境为`qemu-system-aarch64`模拟器
25+
本工程执行环境为`qemu-system-aarch64`模拟器,工程可配置为使用`Cortex-A53/A57/A72`等芯片,GIC支持`V2/V3`版本,其中`V2`最多可配置8个处理器。
2626

2727
Windows平台下,可以在此获取到QEMU:
2828
```
@@ -34,7 +34,7 @@ sudo apt update
3434
sudo apt install qemu-system-arm
3535
```
3636

37-
在终端执行qemu.bat或qemu.sh可以看到程序运行:
37+
工程默认配置修改后请注意修改运行脚本。在终端执行qemu.bat或qemu.sh可以看到程序运行:
3838
```
3939
heap: [0x40042aa0 - 0x40142aa0]
4040
@@ -52,4 +52,4 @@ msh />
5252
| ------ | ---- | :------: |
5353
| UART | 支持 | UART0 |
5454
| RTC | 支持 | - |
55-
| VIRTIO BLK | 支持 | VIRTIO BLK0 |
55+
| VIRTIO BLK | 支持 | - |

bsp/qemu-virt64-aarch64/driver/Kconfig

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,19 @@ menu "AARCH64 qemu virt64 configs"
2828
bool "Using VirtIO BLK"
2929
default y
3030

31-
if BSP_USING_VIRTIO_BLK
32-
config RT_USING_VIRTIO_BLK0
33-
bool "Enabel VirtIO BLK 0"
34-
default y
35-
endif
36-
3731
config BSP_USING_GIC
3832
bool
3933
default y
34+
35+
choice
36+
prompt "GIC Version"
37+
default BSP_USING_GICV2
38+
39+
config BSP_USING_GICV2
40+
bool "GICv2"
41+
42+
config BSP_USING_GICV3
43+
bool "GICv3"
44+
endchoice
45+
4046
endmenu

bsp/qemu-virt64-aarch64/driver/board.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "board.h"
1818
#include <mmu.h>
1919
#include <gic.h>
20+
#include <gicv3.h>
2021
#include <psci.h>
2122
#include <gtimer.h>
2223
#include <cpuport.h>
@@ -29,8 +30,14 @@ struct mem_desc platform_mem_desc[] =
2930
{0x40000000, 0x80000000, 0x40000000, NORMAL_MEM},
3031
{PL031_RTC_BASE, PL031_RTC_BASE + 0x1000, PL031_RTC_BASE, DEVICE_MEM},
3132
{PL011_UART0_BASE, PL011_UART0_BASE + 0x1000, PL011_UART0_BASE, DEVICE_MEM},
32-
{VIRTIO_MMIO_BLK0_BASE, VIRTIO_MMIO_BLK0_BASE + 0x1000, VIRTIO_MMIO_BLK0_BASE, DEVICE_MEM},
33+
{VIRTIO_MMIO_BASE, VIRTIO_MMIO_BASE + VIRTIO_MAX_NR * VIRTIO_MMIO_SIZE, VIRTIO_MMIO_BASE, DEVICE_MEM},
34+
#ifdef BSP_USING_GICV2
3335
{GIC_PL390_DISTRIBUTOR_PPTR, GIC_PL390_DISTRIBUTOR_PPTR + 0x1000, GIC_PL390_DISTRIBUTOR_PPTR, DEVICE_MEM},
36+
#endif
37+
#ifdef BSP_USING_GICV3
38+
{GIC_PL500_DISTRIBUTOR_PPTR, GIC_PL500_DISTRIBUTOR_PPTR + 0x1000, GIC_PL500_DISTRIBUTOR_PPTR, DEVICE_MEM},
39+
{GIC_PL500_REDISTRIBUTOR_PPTR, GIC_PL500_REDISTRIBUTOR_PPTR + 0xf60000, GIC_PL500_REDISTRIBUTOR_PPTR, DEVICE_MEM},
40+
#endif
3441
};
3542

3643
const rt_uint32_t platform_mem_desc_size = sizeof(platform_mem_desc)/sizeof(platform_mem_desc[0]);
@@ -58,7 +65,7 @@ void rt_hw_board_init(void)
5865
rt_hw_gtimer_init();
5966
rt_thread_idle_sethook(idle_wfi);
6067

61-
arm_psci_init(RT_NULL, RT_NULL);
68+
arm_psci_init(PSCI_METHOD_HVC, RT_NULL, RT_NULL);
6269

6370
#if defined(RT_USING_CONSOLE) && defined(RT_USING_DEVICE)
6471
/* set console device */
@@ -113,6 +120,9 @@ void secondary_cpu_c_start(void)
113120
rt_hw_spin_lock(&_cpus_lock);
114121

115122
arm_gic_cpu_init(0, platform_get_gic_cpu_base());
123+
#ifdef BSP_USING_GICV3
124+
arm_gic_redist_init(0, platform_get_gic_redist_base());
125+
#endif
116126
rt_hw_vector_init();
117127
rt_hw_gtimer_local_enable();
118128
arm_gic_umask(0, IRQ_ARM_IPI_KICK);

0 commit comments

Comments
 (0)