From 80f6d66ef98231813c19e9fce92ff4766becbd1f Mon Sep 17 00:00:00 2001 From: nakasima Date: Fri, 19 Dec 2008 11:02:31 +0000 Subject: [PATCH] =?UTF-8?q?stupInitExceptions=E8=BF=BD=E5=8A=A0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@136 b871894f-2f95-9b40-918c-086798483c85 --- .../build/libraries/init/ARM11/crt0_secure.c | 6 +- .../build/libraries/init/common/crt0_excp.c | 55 ++++++++++++++++--- .../build/libraries/os/common/os_interrupt.c | 1 - trunk/bootrom/include/brom/init/stup.h | 11 ++++ 4 files changed, 62 insertions(+), 11 deletions(-) diff --git a/trunk/bootrom/build/libraries/init/ARM11/crt0_secure.c b/trunk/bootrom/build/libraries/init/ARM11/crt0_secure.c index 6cc8ea3..8e0cc39 100644 --- a/trunk/bootrom/build/libraries/init/ARM11/crt0_secure.c +++ b/trunk/bootrom/build/libraries/init/ARM11/crt0_secure.c @@ -36,7 +36,8 @@ asm void i_stupStartHandler( void ) { PRESERVE8 - INASM_EXTERN( i_stupHW_DTCM ) + INASM_EXTERN( STUPi_HW_DTCM ) + INASM_EXTERN( stupInitExceptions ) INASM_EXTERN( BromMain ) INASM_EXTERN( main ) @@ -58,6 +59,9 @@ asm void i_stupStartHandler( void ) ldr r0, =HW_BROM_SYS_STACK_END mov sp, r0 + //---- initialize exceptions + bl stupInitExceptions + //---- disable cp15 bl stupDisableCP15 diff --git a/trunk/bootrom/build/libraries/init/common/crt0_excp.c b/trunk/bootrom/build/libraries/init/common/crt0_excp.c index d325bac..a477bef 100644 --- a/trunk/bootrom/build/libraries/init/common/crt0_excp.c +++ b/trunk/bootrom/build/libraries/init/common/crt0_excp.c @@ -18,6 +18,42 @@ #include #include + +/*---------------------------------------------------------------------------* + Name: stupInitExceptions + + Description: Initialize Exceptions + + Arguments: None + + Returns: None + *---------------------------------------------------------------------------*/ +ASM void stupInitExceptions( void ) +{ + ldr r3, =HW_SWI_VENEER_BUF + ldr r2, =i_stupSwiVeneerCode + ldm r2, {r0-r1} + stm r3, {r0-r1} + bx lr + + LTORG +} + +/*---------------------------------------------------------------------------* + Name: i_osIrqVeneer + + Description: Interrupt Vevver + + Arguments: None + + Returns: None + *---------------------------------------------------------------------------*/ +ASM void i_stupSwiVeneerCode( void ) +{ + ldr pc, =i_stupSwiHandler + LTORG +} + /*---------------------------------------------------------------------------* Name: i_stupDbgHandler @@ -27,7 +63,7 @@ Returns: None. *---------------------------------------------------------------------------*/ -asm void i_stupDbgHandler( void ) +ASM void i_stupDbgHandler( void ) { mrs sp, cpsr // IRQ/FIQ•s‹–‰Â orr sp, sp, #HW_PSR_IRQ_DISABLE | HW_PSR_FIQ_DISABLE @@ -48,7 +84,7 @@ dbg_m Returns: None. *---------------------------------------------------------------------------*/ -asm void i_stupIrqVeneer( void ) +ASM void i_stupIrqVeneer( void ) { ldr pc, =HW_INTR_VENEER_BUF @@ -64,7 +100,7 @@ asm void i_stupIrqVeneer( void ) Returns: None. *---------------------------------------------------------------------------*/ -asm void i_stupFiqVeneer( void ) +ASM void i_stupFiqVeneer( void ) { ldr pc, =HW_FIQ_VENEER_BUF @@ -80,7 +116,7 @@ asm void i_stupFiqVeneer( void ) Returns: None. *---------------------------------------------------------------------------*/ -asm void i_stupPrefetchAbortVeneer( void ) +ASM void i_stupPrefetchAbortVeneer( void ) { ldr pc, =HW_IABT_VENEER_BUF @@ -96,7 +132,7 @@ asm void i_stupPrefetchAbortVeneer( void ) Returns: None. *---------------------------------------------------------------------------*/ -asm void i_stupDataAbortVeneer( void ) +ASM void i_stupDataAbortVeneer( void ) { ldr pc, =HW_DABT_VENEER_BUF @@ -112,7 +148,7 @@ asm void i_stupDataAbortVeneer( void ) Returns: None. *---------------------------------------------------------------------------*/ -asm void i_stupUndefInstVeneer( void ) +ASM void i_stupUndefInstVeneer( void ) { ldr pc, =HW_UDEF_VENEER_BUF @@ -128,13 +164,14 @@ asm void i_stupUndefInstVeneer( void ) Returns: None. *---------------------------------------------------------------------------*/ -asm void i_stupSwiVeneer( void ) +ASM void i_stupSwiVeneer( void ) { ldr pc, =HW_SWI_VENEER_BUF LTORG } + /*---------------------------------------------------------------------------* Name: i_stupSwiHandler @@ -144,14 +181,14 @@ asm void i_stupSwiVeneer( void ) Returns: None. *---------------------------------------------------------------------------*/ -asm void i_stupSwiSemihosting( void ) +ASM void i_stupSwiSemihosting( void ) { ldmfd sp!, {r11, r12, lr} semi_vector movs pc, lr } -asm void i_stupSwiHandler( void ) +ASM void i_stupSwiHandler( void ) { INASM_EXTERN( _start ) diff --git a/trunk/bootrom/build/libraries/os/common/os_interrupt.c b/trunk/bootrom/build/libraries/os/common/os_interrupt.c index 5295058..7bd5184 100644 --- a/trunk/bootrom/build/libraries/os/common/os_interrupt.c +++ b/trunk/bootrom/build/libraries/os/common/os_interrupt.c @@ -109,7 +109,6 @@ asm void i_osIrqVeneer( void ) ldr pc, =osIrqHandler LTORG } - #include /*---------------------------------------------------------------------------* diff --git a/trunk/bootrom/include/brom/init/stup.h b/trunk/bootrom/include/brom/init/stup.h index f6ac352..2dd7d75 100644 --- a/trunk/bootrom/include/brom/init/stup.h +++ b/trunk/bootrom/include/brom/init/stup.h @@ -21,6 +21,17 @@ extern "C" { #endif +/*---------------------------------------------------------------------------* + Name: stupInitExcptions + + Description: Initialize Excptions + + Arguments: None + + Returns: None + *---------------------------------------------------------------------------*/ +void stupInitExcptions( void ); + #ifdef SDK_ARM11 void i_stupPostMappingWram( void ); void i_stupNotifyToARM9( u32 id );