diff --git a/trunk/bootrom/build/libraries/init/ARM11/crt0.c b/trunk/bootrom/build/libraries/init/ARM11/crt0.c index a735555..5a02c85 100644 --- a/trunk/bootrom/build/libraries/init/ARM11/crt0.c +++ b/trunk/bootrom/build/libraries/init/ARM11/crt0.c @@ -50,8 +50,16 @@ reserve b reserve irq b STUPi_IrqVeneer fiq b STUPi_FiqVeneer + INASM_EXTERN( STUPi_SwiHandler ) + + DCD STUPi_SwiHandler + stupStartHandlerVeneer + // NULLジャンプ時のデータアボート有効時はここで発生 + mov r12, #0 + ldr r12, [r12] + //---- check CPU ID mrc p15,0, r0, c0, c0, 5 tst r0, #HW_C0_AP_CPU_ID_MASK @@ -68,15 +76,25 @@ stupStartHandlerVeneer ldr r3, =REG_IDR_CNT_ADDR mov r0, #REG_OS_IDR_CNT_E_MASK str r0, [r3] + ldr r3, =REG_IDR_CLR_PND0_ADDR + ldr r1, =REG_OS_IDR_CLR_PND0_IPI_ALL_MASK + mov r0, #~0 + str r0, [r3] LSYM(10) - wfi + ldr r0, [r3] + tst r0, r1 + wfieq nop - b BSYM(10) + beq BSYM(10) + ldr lr, =HW_START_VECTOR1_PTR + bx lr core0_start INASM_EXTERN( STUPi_StartHandler ) b STUPi_StartHandler + + LTORG } diff --git a/trunk/bootrom/build/libraries/init/ARM9/crt0.c b/trunk/bootrom/build/libraries/init/ARM9/crt0.c index e8f5f7c..229624a 100644 --- a/trunk/bootrom/build/libraries/init/ARM9/crt0.c +++ b/trunk/bootrom/build/libraries/init/ARM9/crt0.c @@ -50,16 +50,19 @@ reserve b reserve irq b STUPi_IrqVeneer fiq b STUPi_FiqVeneer + INASM_EXTERN( STUPi_SwiHandler ) + + DCD STUPi_SwiHandler + + INASM_EXTERN( |Image$$SVC_RW$$Base| ) + INASM_EXTERN( |Load$$SVC_RW$$Base| ) + + DCD |Image$$SVC_RW$$Base| + DCD |Load$$SVC_RW$$Base| + stupStartHandlerVeneer INASM_EXTERN( STUPi_StartHandler ) b STUPi_StartHandler - DCD 0 - - INASM_EXTERN( |Image$$SVC_RW$$Base| ) - INASM_EXTERN( |Load$$SVC_RW$$Base| ) - - DCD |Image$$SVC_RW$$Base| - DCD |Load$$SVC_RW$$Base| } diff --git a/trunk/include/ctr/hw/ARM11/mmap_axi_wram.h b/trunk/include/ctr/hw/ARM11/mmap_axi_wram.h index 04487a0..58da7bb 100644 --- a/trunk/include/ctr/hw/ARM11/mmap_axi_wram.h +++ b/trunk/include/ctr/hw/ARM11/mmap_axi_wram.h @@ -36,6 +36,7 @@ extern "C" { #define HW_AXI_WRAM_SYSRV_OFS_UDEF_VENEER 0x18 #define HW_AXI_WRAM_SYSRV_OFS_IABT_VENEER 0x20 #define HW_AXI_WRAM_SYSRV_OFS_DABT_VENEER 0x28 +#define HW_AXI_WRAM_SYSRV_OFS_START_VECTOR1 0x54 #define HW_AXI_WRAM_SYSRV_OFS_INTR_CHECK0 0x58 #define HW_AXI_WRAM_SYSRV_OFS_INTR_CHECK1 0x5c @@ -46,6 +47,7 @@ extern "C" { #define HW_IABT_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_IABT_VENEER) #define HW_DABT_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_DABT_VENEER) #define HW_UDEF_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_UDEF_VENEER) +#define HW_START_VECTOR1_PTR (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_START_VECTOR1) #define HW_INTR_CHECK0_PTR (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_INTR_CHECK0) #define HW_INTR_CHECK1_PTR (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_INTR_CHECK1)