From 9e38bae1be22a39ac3af21e3a354f0ab6ad2bc5c Mon Sep 17 00:00:00 2001 From: liYony <941843540@qq.com> Date: Wed, 1 May 2024 22:14:18 +0800 Subject: [PATCH 1/3] fix rt_hw_secondary_cpu_bsp_start() bug --- libcpu/aarch64/common/setup.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/libcpu/aarch64/common/setup.c b/libcpu/aarch64/common/setup.c index 5afcebfe8f3..feb81ec4962 100644 --- a/libcpu/aarch64/common/setup.c +++ b/libcpu/aarch64/common/setup.c @@ -23,6 +23,8 @@ #include #include #include +#include +#include #define SIZE_KB 1024 #define SIZE_MB (1024 * SIZE_KB) @@ -497,7 +499,13 @@ rt_weak void rt_hw_secondary_cpu_bsp_start(void) #ifdef RT_USING_PIC rt_pic_irq_init(); #else - rt_hw_interrupt_init(); + /* initialize vector table */ + rt_hw_vector_init(); + + arm_gic_cpu_init(0, 0); +#ifdef BSP_USING_GICV3 + arm_gic_redist_init(0, 0); +#endif /* BSP_USING_GICV3 */ #endif rt_dm_secondary_cpu_init(); From b89bb43734242e83ec96a1305c970a4bbedf70a6 Mon Sep 17 00:00:00 2001 From: liYony <941843540@qq.com> Date: Wed, 8 May 2024 11:49:03 +0800 Subject: [PATCH 2/3] timer init --- .../drivers/secondary_cpu.c | 46 ------------------- libcpu/aarch64/common/SConscript | 3 ++ libcpu/aarch64/common/setup.c | 9 +++- 3 files changed, 11 insertions(+), 47 deletions(-) delete mode 100644 bsp/qemu-virt64-aarch64/drivers/secondary_cpu.c diff --git a/bsp/qemu-virt64-aarch64/drivers/secondary_cpu.c b/bsp/qemu-virt64-aarch64/drivers/secondary_cpu.c deleted file mode 100644 index ee8afbd23cc..00000000000 --- a/bsp/qemu-virt64-aarch64/drivers/secondary_cpu.c +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2006-2022, RT-Thread Development Team - * - * SPDX-License-Identifier: Apache-2.0 - * - * Change Logs: - * Date Author Notes - */ -#include -#include -#include -#include "gic.h" -#include "interrupt.h" -#include "mmu.h" -#include "gtimer.h" - -#ifdef BSP_USING_GICV3 -#include -#endif - -#ifdef RT_USING_SMP - -extern unsigned long MMUTable[]; - -void rt_hw_secondary_cpu_bsp_start(void) -{ - rt_hw_spin_lock(&_cpus_lock); - - rt_hw_mmu_ktbl_set((unsigned long)MMUTable); - - // interrupt init - rt_hw_vector_init(); - - arm_gic_cpu_init(0, 0); - -#ifdef BSP_USING_GICV3 - arm_gic_redist_init(0, 0); -#endif /* BSP_USING_GICV3 */ - - // local timer init - rt_hw_gtimer_init(); - - rt_system_scheduler_start(); -} - -#endif // SMP diff --git a/libcpu/aarch64/common/SConscript b/libcpu/aarch64/common/SConscript index d66dfc6b0c2..1449e97e6e1 100644 --- a/libcpu/aarch64/common/SConscript +++ b/libcpu/aarch64/common/SConscript @@ -14,6 +14,9 @@ if GetDepend('RT_USING_OFW') == False: if GetDepend('RT_USING_PIC') == True: SrcRemove(src, ['gicv3.c', 'gic.c', 'gtimer.c', 'interrupt.c']) +if GetDepend('RT_HWTIMER_ARM_ARCH') == True: + SrcRemove(src, ['gtimer.c']) + group = DefineGroup('libcpu', src, depend = [''], CPPPATH = CPPPATH) # build for sub-directory diff --git a/libcpu/aarch64/common/setup.c b/libcpu/aarch64/common/setup.c index feb81ec4962..d89244ccdde 100644 --- a/libcpu/aarch64/common/setup.c +++ b/libcpu/aarch64/common/setup.c @@ -415,10 +415,12 @@ void rt_hw_common_setup(void) /* initialize uart */ rt_hw_uart_init(); +#endif +#ifndef RT_HWTIMER_ARM_ARCH /* initialize timer for os tick */ rt_hw_gtimer_init(); -#endif +#endif /* RT_HWTIMER_ARM_ARCH */ #ifdef RT_USING_COMPONENTS_INIT rt_components_board_init(); @@ -508,6 +510,11 @@ rt_weak void rt_hw_secondary_cpu_bsp_start(void) #endif /* BSP_USING_GICV3 */ #endif +#ifndef RT_HWTIMER_ARM_ARCH + /* initialize timer for os tick */ + rt_hw_gtimer_local_enable(); +#endif /* RT_HWTIMER_ARM_ARCH */ + rt_dm_secondary_cpu_init(); rt_hw_interrupt_umask(RT_SCHEDULE_IPI); From 497a9b792c53665cf790062ce618a469cacf78ce Mon Sep 17 00:00:00 2001 From: liYony <941843540@qq.com> Date: Wed, 8 May 2024 13:45:59 +0800 Subject: [PATCH 3/3] comment --- libcpu/aarch64/common/setup.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libcpu/aarch64/common/setup.c b/libcpu/aarch64/common/setup.c index d89244ccdde..c5da0dd482f 100644 --- a/libcpu/aarch64/common/setup.c +++ b/libcpu/aarch64/common/setup.c @@ -420,7 +420,7 @@ void rt_hw_common_setup(void) #ifndef RT_HWTIMER_ARM_ARCH /* initialize timer for os tick */ rt_hw_gtimer_init(); -#endif /* RT_HWTIMER_ARM_ARCH */ +#endif /* !RT_HWTIMER_ARM_ARCH */ #ifdef RT_USING_COMPONENTS_INIT rt_components_board_init(); @@ -513,7 +513,7 @@ rt_weak void rt_hw_secondary_cpu_bsp_start(void) #ifndef RT_HWTIMER_ARM_ARCH /* initialize timer for os tick */ rt_hw_gtimer_local_enable(); -#endif /* RT_HWTIMER_ARM_ARCH */ +#endif /* !RT_HWTIMER_ARM_ARCH */ rt_dm_secondary_cpu_init();