summaryrefslogtreecommitdiff
path: root/libcpu/aarch64/common/setup.c
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/aarch64/common/setup.c
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/aarch64/common/setup.c')
-rw-r--r--libcpu/aarch64/common/setup.c19
1 files changed, 17 insertions, 2 deletions
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);