summaryrefslogtreecommitdiff
path: root/libcpu/aarch64/common/setup.c
diff options
context:
space:
mode:
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);