summaryrefslogtreecommitdiff
path: root/libcpu
diff options
context:
space:
mode:
authorliYangYang <[email protected]>2024-05-08 19:48:17 +0800
committerGitHub <[email protected]>2024-05-08 19:48:17 +0800
commitdbf8a26e6c9a8770b2cf708a24e080a81db4f07c (patch)
tree890a7a4e95abddfd4bd7625c1ec754e5c6dd1798 /libcpu
parent73153ac06a07a574627b49c9a86ac2d57c298cd0 (diff)
[libcpu][aarch64] Fixed the rt_hw_secondary_cpu_bsp_start() bug (#8898)
* fix rt_hw_secondary_cpu_bsp_start() bug * timer init * comment
Diffstat (limited to 'libcpu')
-rw-r--r--libcpu/aarch64/common/SConscript3
-rw-r--r--libcpu/aarch64/common/setup.c19
2 files changed, 20 insertions, 2 deletions
diff --git a/libcpu/aarch64/common/SConscript b/libcpu/aarch64/common/SConscript
index d66dfc6b0c..1449e97e6e 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 27c647bc6e..e0c4247bf3 100644
--- a/libcpu/aarch64/common/setup.c
+++ b/libcpu/aarch64/common/setup.c
@@ -23,6 +23,8 @@
#include <stdlib.h>
#include <ioremap.h>
#include <rtdevice.h>
+#include <gic.h>
+#include <gicv3.h>
#define SIZE_KB 1024
#define SIZE_MB (1024 * SIZE_KB)
@@ -456,10 +458,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();
@@ -540,9 +544,20 @@ 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
+#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);