Skip to content

Commit 8bf5c27

Browse files
authored
Merge pull request #5090 from GuEe-GUI/master
Merge AArch64 libcpu and add some drivers for their bsps
2 parents f44f4df + 740cd9d commit 8bf5c27

Some content is hidden

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

71 files changed

+6121
-1884
lines changed

bsp/qemu-virt64-aarch64/.config

Lines changed: 64 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ CONFIG_RT_ALIGN_SIZE=4
1414
CONFIG_RT_THREAD_PRIORITY_32=y
1515
# CONFIG_RT_THREAD_PRIORITY_256 is not set
1616
CONFIG_RT_THREAD_PRIORITY_MAX=32
17-
CONFIG_RT_TICK_PER_SECOND=1000
17+
CONFIG_RT_TICK_PER_SECOND=100
1818
CONFIG_RT_USING_OVERFLOW_CHECK=y
1919
CONFIG_RT_USING_HOOK=y
2020
CONFIG_RT_USING_IDLE_HOOK=y
@@ -29,6 +29,7 @@ CONFIG_RT_TIMER_THREAD_STACK_SIZE=2048
2929
#
3030
# CONFIG_RT_KSERVICE_USING_STDLIB is not set
3131
# CONFIG_RT_KSERVICE_USING_TINY_SIZE is not set
32+
# CONFIG_RT_USING_ASM_MEMCPY is not set
3233
CONFIG_RT_DEBUG=y
3334
CONFIG_RT_DEBUG_COLOR=y
3435
# CONFIG_RT_DEBUG_INIT_CONFIG is not set
@@ -97,19 +98,19 @@ CONFIG_RT_MAIN_THREAD_PRIORITY=10
9798
# Command shell
9899
#
99100
CONFIG_RT_USING_FINSH=y
101+
CONFIG_RT_USING_MSH=y
102+
CONFIG_FINSH_USING_MSH=y
100103
CONFIG_FINSH_THREAD_NAME="tshell"
104+
CONFIG_FINSH_THREAD_PRIORITY=20
105+
CONFIG_FINSH_THREAD_STACK_SIZE=4096
101106
CONFIG_FINSH_USING_HISTORY=y
102107
CONFIG_FINSH_HISTORY_LINES=5
103108
CONFIG_FINSH_USING_SYMTAB=y
109+
CONFIG_FINSH_CMD_SIZE=80
110+
CONFIG_MSH_USING_BUILT_IN_COMMANDS=y
104111
CONFIG_FINSH_USING_DESCRIPTION=y
105112
# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set
106-
CONFIG_FINSH_THREAD_PRIORITY=20
107-
CONFIG_FINSH_THREAD_STACK_SIZE=4096
108-
CONFIG_FINSH_CMD_SIZE=80
109113
# CONFIG_FINSH_USING_AUTH is not set
110-
CONFIG_FINSH_USING_MSH=y
111-
CONFIG_FINSH_USING_MSH_DEFAULT=y
112-
CONFIG_FINSH_USING_MSH_ONLY=y
113114
CONFIG_FINSH_ARG_MAX=10
114115

115116
#
@@ -121,7 +122,28 @@ CONFIG_DFS_FILESYSTEMS_MAX=2
121122
CONFIG_DFS_FILESYSTEM_TYPES_MAX=2
122123
CONFIG_DFS_FD_MAX=16
123124
# CONFIG_RT_USING_DFS_MNTTABLE is not set
124-
# CONFIG_RT_USING_DFS_ELMFAT is not set
125+
CONFIG_RT_USING_DFS_ELMFAT=y
126+
127+
#
128+
# elm-chan's FatFs, Generic FAT Filesystem Module
129+
#
130+
CONFIG_RT_DFS_ELM_CODE_PAGE=437
131+
CONFIG_RT_DFS_ELM_WORD_ACCESS=y
132+
# CONFIG_RT_DFS_ELM_USE_LFN_0 is not set
133+
# CONFIG_RT_DFS_ELM_USE_LFN_1 is not set
134+
# CONFIG_RT_DFS_ELM_USE_LFN_2 is not set
135+
CONFIG_RT_DFS_ELM_USE_LFN_3=y
136+
CONFIG_RT_DFS_ELM_USE_LFN=3
137+
CONFIG_RT_DFS_ELM_LFN_UNICODE_0=y
138+
# CONFIG_RT_DFS_ELM_LFN_UNICODE_1 is not set
139+
# CONFIG_RT_DFS_ELM_LFN_UNICODE_2 is not set
140+
# CONFIG_RT_DFS_ELM_LFN_UNICODE_3 is not set
141+
CONFIG_RT_DFS_ELM_LFN_UNICODE=0
142+
CONFIG_RT_DFS_ELM_MAX_LFN=255
143+
CONFIG_RT_DFS_ELM_DRIVES=2
144+
CONFIG_RT_DFS_ELM_MAX_SECTOR_SIZE=512
145+
# CONFIG_RT_DFS_ELM_USE_ERASE is not set
146+
CONFIG_RT_DFS_ELM_REENTRANT=y
125147
CONFIG_RT_USING_DFS_DEVFS=y
126148
# CONFIG_RT_USING_DFS_ROMFS is not set
127149
# CONFIG_RT_USING_DFS_RAMFS is not set
@@ -180,7 +202,7 @@ CONFIG_RT_USING_POSIX=y
180202
# CONFIG_RT_USING_POSIX_GETLINE is not set
181203
# CONFIG_RT_USING_POSIX_AIO is not set
182204
# CONFIG_RT_USING_MODULE is not set
183-
CONFIG_RT_LIBC_FIXED_TIMEZONE=8
205+
CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8
184206

185207
#
186208
# Network
@@ -312,6 +334,8 @@ CONFIG_RT_LIBC_FIXED_TIMEZONE=8
312334
# CONFIG_PKG_USING_AGILE_MODBUS is not set
313335
# CONFIG_PKG_USING_AGILE_FTP is not set
314336
# CONFIG_PKG_USING_EMBEDDEDPROTO is not set
337+
# CONFIG_PKG_USING_RT_LINK_HW is not set
338+
# CONFIG_PKG_USING_HM is not set
315339

316340
#
317341
# security packages
@@ -328,6 +352,7 @@ CONFIG_RT_LIBC_FIXED_TIMEZONE=8
328352
# CONFIG_PKG_USING_LUA is not set
329353
# CONFIG_PKG_USING_JERRYSCRIPT is not set
330354
# CONFIG_PKG_USING_MICROPYTHON is not set
355+
# CONFIG_PKG_USING_PIKASCRIPT is not set
331356

332357
#
333358
# multimedia packages
@@ -438,6 +463,9 @@ CONFIG_RT_LIBC_FIXED_TIMEZONE=8
438463
# CONFIG_PKG_USING_LPM is not set
439464
# CONFIG_PKG_USING_TLSF is not set
440465
# CONFIG_PKG_USING_EVENT_RECORDER is not set
466+
# CONFIG_PKG_USING_ARM_2D is not set
467+
# CONFIG_PKG_USING_WCWIDTH is not set
468+
# CONFIG_PKG_USING_MCUBOOT is not set
441469

442470
#
443471
# peripheral libraries and drivers
@@ -508,6 +536,9 @@ CONFIG_RT_LIBC_FIXED_TIMEZONE=8
508536
# CONFIG_PKG_USING_KOBUKI is not set
509537
# CONFIG_PKG_USING_ROSSERIAL is not set
510538
# CONFIG_PKG_USING_MICRO_ROS is not set
539+
# CONFIG_PKG_USING_MCP23008 is not set
540+
# CONFIG_PKG_USING_BLUETRUM_SDK is not set
541+
# CONFIG_PKG_USING_MISAKA_AT24CXX is not set
511542

512543
#
513544
# AI packages
@@ -525,6 +556,27 @@ CONFIG_RT_LIBC_FIXED_TIMEZONE=8
525556
#
526557
# miscellaneous packages
527558
#
559+
560+
#
561+
# samples: kernel and components samples
562+
#
563+
# CONFIG_PKG_USING_KERNEL_SAMPLES is not set
564+
# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set
565+
# CONFIG_PKG_USING_NETWORK_SAMPLES is not set
566+
# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set
567+
568+
#
569+
# entertainment: terminal games and other interesting software packages
570+
#
571+
# CONFIG_PKG_USING_CMATRIX is not set
572+
# CONFIG_PKG_USING_SL is not set
573+
# CONFIG_PKG_USING_CAL is not set
574+
# CONFIG_PKG_USING_ACLOCK is not set
575+
# CONFIG_PKG_USING_THREES is not set
576+
# CONFIG_PKG_USING_2048 is not set
577+
# CONFIG_PKG_USING_SNAKE is not set
578+
# CONFIG_PKG_USING_TETRIS is not set
579+
# CONFIG_PKG_USING_DONUT is not set
528580
# CONFIG_PKG_USING_LIBCSV is not set
529581
# CONFIG_PKG_USING_OPTPARSE is not set
530582
# CONFIG_PKG_USING_FASTLZ is not set
@@ -542,35 +594,18 @@ CONFIG_RT_LIBC_FIXED_TIMEZONE=8
542594
# CONFIG_PKG_USING_DIGITALCTRL is not set
543595
# CONFIG_PKG_USING_UPACKER is not set
544596
# CONFIG_PKG_USING_UPARAM is not set
545-
546-
#
547-
# samples: kernel and components samples
548-
#
549-
# CONFIG_PKG_USING_KERNEL_SAMPLES is not set
550-
# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set
551-
# CONFIG_PKG_USING_NETWORK_SAMPLES is not set
552-
# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set
553597
# CONFIG_PKG_USING_HELLO is not set
554598
# CONFIG_PKG_USING_VI is not set
555599
# CONFIG_PKG_USING_KI is not set
556600
# CONFIG_PKG_USING_ARMv7M_DWT is not set
557601
# CONFIG_PKG_USING_VT100 is not set
558602
# CONFIG_PKG_USING_UKAL is not set
559603
# CONFIG_PKG_USING_CRCLIB is not set
560-
561-
#
562-
# entertainment: terminal games and other interesting software packages
563-
#
564-
# CONFIG_PKG_USING_THREES is not set
565-
# CONFIG_PKG_USING_2048 is not set
566-
# CONFIG_PKG_USING_SNAKE is not set
567-
# CONFIG_PKG_USING_TETRIS is not set
568-
# CONFIG_PKG_USING_DONUT is not set
569-
# CONFIG_PKG_USING_ACLOCK is not set
570604
# CONFIG_PKG_USING_LWGPS is not set
571605
# CONFIG_PKG_USING_STATE_MACHINE is not set
572606
# CONFIG_PKG_USING_MCURSES is not set
573607
# CONFIG_PKG_USING_COWSAY is not set
608+
# CONFIG_PKG_USING_TERMBOX is not set
574609
CONFIG_SOC_VIRT64_AARCH64=y
575610

576611
#
@@ -579,5 +614,6 @@ CONFIG_SOC_VIRT64_AARCH64=y
579614
CONFIG_BSP_SUPPORT_FPU=y
580615
CONFIG_BSP_USING_UART=y
581616
CONFIG_RT_USING_UART0=y
617+
CONFIG_BSP_USING_VIRTIO_BLK=y
618+
CONFIG_RT_USING_VIRTIO_BLK0=y
582619
CONFIG_BSP_USING_GIC=y
583-
CONFIG_BSP_USING_GIC390=y

bsp/qemu-virt64-aarch64/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,5 @@ msh />
4949

5050
| Driver | Condition | Remark |
5151
| ------ | --------- | ------ |
52-
| UART | Support | UART0 |
52+
| UART | Support | UART0 |
53+
| VIRTIO BLK | Support | VIRTIO BLK0 |

bsp/qemu-virt64-aarch64/README_zh.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,5 @@ msh />
5050

5151
| 驱动 | 支持情况 | 备注 |
5252
| ------ | ---- | :------: |
53-
| UART | 支持 | UART0 |
53+
| UART | 支持 | UART0 |
54+
| VIRTIO BLK | 支持 | VIRTIO BLK0 |

bsp/qemu-virt64-aarch64/SConstruct

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ env = Environment(tools = ['mingw'],
1717
AR = rtconfig.AR, ARFLAGS = '-rc',
1818
LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS)
1919
env.PrependENVPath('PATH', rtconfig.EXEC_PATH)
20+
env['ASCOM'] = env['ASPPCOM']
21+
env['LINKCOM'] = '$LINK -o $TARGET $LINKFLAGS $__RPATH $SOURCES $_LIBDIRFLAGS -Wl,--start-group $_LIBFLAGS -Wl,--end-group'
2022

2123
Export('RTT_ROOT')
2224
Export('rtconfig')
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*
2+
* Copyright (c) 2006-2021, RT-Thread Development Team
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*
6+
* Change Logs:
7+
* Date Author Notes
8+
* 2017-5-30 bernard the first version
9+
*/
10+
11+
#include <rtthread.h>
12+
13+
#ifdef RT_USING_DFS
14+
#include <dfs_fs.h>
15+
16+
int mnt_init(void)
17+
{
18+
if(rt_device_find("virtio-blk0"))
19+
{
20+
/* mount virtio-blk as root directory */
21+
if (dfs_mount("virtio-blk0", "/", "elm", 0, RT_NULL) == 0)
22+
{
23+
rt_kprintf("file system initialization done!\n");
24+
}
25+
}
26+
27+
return 0;
28+
}
29+
INIT_ENV_EXPORT(mnt_init);
30+
#endif

bsp/qemu-virt64-aarch64/driver/Kconfig

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,17 @@ menu "AARCH64 qemu virt64 configs"
1515
default y
1616
endif
1717

18-
config BSP_USING_GIC
19-
bool
20-
default y
18+
menuconfig BSP_USING_VIRTIO_BLK
19+
bool "Using VirtIO BLK"
20+
default y
2121

22-
config BSP_USING_GIC390
22+
if BSP_USING_VIRTIO_BLK
23+
config RT_USING_VIRTIO_BLK0
24+
bool "Enabel VirtIO BLK 0"
25+
default y
26+
endif
27+
28+
config BSP_USING_GIC
2329
bool
2430
default y
2531
endmenu

bsp/qemu-virt64-aarch64/driver/SConscript

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,17 @@
33
from building import *
44

55
cwd = GetCurrentDir()
6-
src = Split('''
7-
board.c
8-
drv_uart.c
9-
''')
6+
src = Glob('*.c')
7+
list = os.listdir(cwd)
108
CPPPATH = [cwd]
9+
objs = []
1110

1211
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH)
1312

14-
Return('group')
13+
for d in list:
14+
path = os.path.join(cwd, d)
15+
if os.path.isfile(os.path.join(path, 'SConscript')):
16+
objs = objs + SConscript(os.path.join(d, 'SConscript'))
17+
objs = objs + group
18+
19+
Return('objs')

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

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
* Date Author Notes
88
* 2019-07-29 zdzn first version
99
* 2021-07-31 GuEe-GUI config the memory/io address map
10+
* 2021-09-11 GuEe-GUI remove do-while in rt_hw_timer_isr
1011
*/
1112

1213
#include <rthw.h>
@@ -18,38 +19,34 @@
1819

1920
void rt_hw_vector_init(void);
2021

21-
static uint64_t tickval = 0;
22+
static uint64_t timer_val;
23+
static uint64_t timer_step;
2224

2325
void rt_hw_timer_isr(int vector, void *parameter)
2426
{
25-
uint64_t cntvct_el0;
26-
27-
do
28-
{
29-
tickval += 0xF424;
30-
__asm__ volatile ("msr CNTV_CVAL_EL0, %0"::"r"(tickval));
31-
__asm__ volatile ("mrs %0, CNTVCT_EL0":"=r"(cntvct_el0));
32-
}
33-
while (cntvct_el0 >= tickval);
27+
timer_val += timer_step;
28+
__asm__ volatile ("msr CNTV_CVAL_EL0, %0"::"r"(timer_val));
29+
__asm__ volatile ("isb":::"memory");
3430

3531
rt_tick_increase();
3632
}
3733

38-
int rt_hw_timer_init()
34+
int rt_hw_timer_init(void)
3935
{
40-
uint64_t val;
41-
4236
rt_hw_interrupt_install(27, rt_hw_timer_isr, RT_NULL, "tick");
4337
rt_hw_interrupt_umask(27);
4438

45-
val = 0;
46-
__asm__ volatile ("msr CNTV_CTL_EL0, %0"::"r"(val));
47-
val = 0x03B9ACA0;
48-
__asm__ volatile ("msr CNTFRQ_EL0, %0"::"r"(val));
49-
tickval += 0xF424;
50-
__asm__ volatile ("msr CNTV_CVAL_EL0, %0"::"r"(tickval));
51-
val = 1;
52-
__asm__ volatile ("msr CNTV_CTL_EL0, %0"::"r"(val));
39+
__asm__ volatile ("msr CNTV_CTL_EL0, %0"::"r"(0));
40+
41+
__asm__ volatile ("isb 0xf":::"memory");
42+
__asm__ volatile ("mrs %0, CNTFRQ_EL0" : "=r" (timer_step));
43+
timer_step /= RT_TICK_PER_SECOND;
44+
timer_val = timer_step;
45+
__asm__ volatile ("dsb 0xf":::"memory");
46+
47+
__asm__ volatile ("msr CNTV_CVAL_EL0, %0"::"r"(timer_val));
48+
__asm__ volatile ("msr CNTV_CTL_EL0, %0"::"r"(1));
49+
5350
return 0;
5451
}
5552

@@ -73,6 +70,8 @@ void rt_hw_board_init(void)
7370
cont >>= 21;
7471
/* memory location */
7572
armv8_map_2M(0x40000000, 0x40000000, cont, MEM_ATTR_MEMORY);
73+
/* virtio blk0 */
74+
armv8_map_2M(VIRTIO_MMIO_BLK0_BASE, VIRTIO_MMIO_BLK0_BASE, 0x1, MEM_ATTR_IO);
7675
/* uart location*/
7776
armv8_map_2M(PL011_UART0_BASE, PL011_UART0_BASE, 0x1, MEM_ATTR_IO);
7877
/* gic location*/

0 commit comments

Comments
 (0)