From 587e50dc1cfa87ec9e972055ef396cf0cdbd60b3 Mon Sep 17 00:00:00 2001 From: bigmagic Date: Wed, 3 Jun 2020 23:58:34 +0800 Subject: [PATCH 1/3] fix raspi2 timer --- bsp/raspberry-pi/raspi2/cpu/cp15.h | 1 + bsp/raspberry-pi/raspi2/cpu/interrupt.c | 6 ++++++ bsp/raspberry-pi/raspi2/driver/board.c | 5 +++-- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/bsp/raspberry-pi/raspi2/cpu/cp15.h b/bsp/raspberry-pi/raspi2/cpu/cp15.h index ebea3f0fe3..141a22a675 100644 --- a/bsp/raspberry-pi/raspi2/cpu/cp15.h +++ b/bsp/raspberry-pi/raspi2/cpu/cp15.h @@ -6,6 +6,7 @@ unsigned long rt_cpu_get_smp_id(void); void rt_cpu_mmu_disable(void); void rt_cpu_mmu_enable(void); void rt_cpu_tlb_set(volatile unsigned long*); +void rt_hw_vector_init(void); void rt_cpu_vector_set_base(unsigned int addr); diff --git a/bsp/raspberry-pi/raspi2/cpu/interrupt.c b/bsp/raspberry-pi/raspi2/cpu/interrupt.c index d502977c3e..93513f3da3 100644 --- a/bsp/raspberry-pi/raspi2/cpu/interrupt.c +++ b/bsp/raspberry-pi/raspi2/cpu/interrupt.c @@ -29,8 +29,14 @@ rt_uint32_t rt_interrupt_from_thread; rt_uint32_t rt_interrupt_to_thread; rt_uint32_t rt_thread_switch_interrupt_flag; +extern void rt_cpu_vector_set_base(unsigned int addr); extern int system_vectors; +void rt_hw_vector_init(void) +{ + rt_cpu_vector_set_base((unsigned int)&system_vectors); +} + static void default_isr_handler(int vector, void *param) { rt_kprintf("unhandled irq: %d\n", vector); diff --git a/bsp/raspberry-pi/raspi2/driver/board.c b/bsp/raspberry-pi/raspi2/driver/board.c index 30f8cd93a1..78cac6ba4d 100644 --- a/bsp/raspberry-pi/raspi2/driver/board.c +++ b/bsp/raspberry-pi/raspi2/driver/board.c @@ -26,6 +26,7 @@ #include "board.h" #include "drv_uart.h" +#include "cp15.h" void rt_hw_timer_isr(int vector, void *parameter) { @@ -65,7 +66,7 @@ void rt_hw_board_init(void) { /* initialize hardware interrupt */ rt_hw_interrupt_init(); - vector_copy(); + rt_hw_vector_init(); /* initialize uart */ rt_hw_uart_init(); @@ -82,7 +83,7 @@ void rt_hw_board_init(void) #endif /* initialize timer for os tick */ - // rt_hw_timer_init(); + rt_hw_timer_init(); #ifdef RT_USING_COMPONENTS_INIT rt_components_board_init(); From 92ab0fd59347d2f484e33c34802f88b4d4d71b80 Mon Sep 17 00:00:00 2001 From: bigmagic Date: Thu, 4 Jun 2020 00:03:07 +0800 Subject: [PATCH 2/3] fix startup code address relative jump --- libcpu/arm/cortex-a/start_gcc.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libcpu/arm/cortex-a/start_gcc.S b/libcpu/arm/cortex-a/start_gcc.S index a8f3a36630..2e99db7218 100644 --- a/libcpu/arm/cortex-a/start_gcc.S +++ b/libcpu/arm/cortex-a/start_gcc.S @@ -62,7 +62,7 @@ _reset: b continue overHyped: /* Get out of HYP mode */ - ldr r1, =continue + adr r1, continue msr ELR_hyp, r1 mrs r1, cpsr_all and r1, r1, #0x1f ;@ CPSR_MODE_MASK From 266716a959348dea4ce182555e27b890bf9e6e29 Mon Sep 17 00:00:00 2001 From: bigmagic Date: Thu, 4 Jun 2020 00:04:16 +0800 Subject: [PATCH 3/3] remove unnecessary code --- bsp/raspberry-pi/raspi3-32/driver/board.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/bsp/raspberry-pi/raspi3-32/driver/board.c b/bsp/raspberry-pi/raspi3-32/driver/board.c index a1b3d603c8..9cd929662e 100644 --- a/bsp/raspberry-pi/raspi3-32/driver/board.c +++ b/bsp/raspberry-pi/raspi3-32/driver/board.c @@ -73,10 +73,6 @@ void ipi_handler() rt_scheduler_ipi_handler(0,RT_NULL); } #endif -void vector_copy(void) -{ - rt_memcpy((void*)0x0, (void*)0x8000, 64); -} void idle_wfi(void) { @@ -87,7 +83,6 @@ void rt_hw_board_init(void) { /* initialize hardware interrupt */ rt_hw_interrupt_init(); - vector_copy(); rt_hw_vector_init(); /* initialize uart */ rt_hw_uart_init();