From 12dcde5fdf1c78f418251c3e290494b6cd3024ea Mon Sep 17 00:00:00 2001 From: nakasima Date: Wed, 24 Dec 2008 05:37:14 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BE=8B=E5=A4=96=E3=83=8F=E3=83=B3=E3=83=89?= =?UTF-8?q?=E3=83=A9=E3=81=AE=E6=9A=AB=E5=AE=9A=E7=99=BB=E9=8C=B2=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@137 b871894f-2f95-9b40-918c-086798483c85 --- .../build/libraries/init/ARM11/crt0_secure.c | 7 ++-- .../libraries/init/ARM9/crt0_secure_sp.c | 10 +++-- .../build/libraries/init/common/crt0_excp.c | 41 ++++++++++++++++--- .../include/brom/os/common/interrupt.h | 1 + trunk/include/ctr/hw/ARM11/mmap_axi_wram.h | 5 ++- trunk/include/ctr/hw/ARM9/mmap_prv_wram.h | 5 ++- 6 files changed, 54 insertions(+), 15 deletions(-) diff --git a/trunk/bootrom/build/libraries/init/ARM11/crt0_secure.c b/trunk/bootrom/build/libraries/init/ARM11/crt0_secure.c index 8e0cc39..5363e7c 100644 --- a/trunk/bootrom/build/libraries/init/ARM11/crt0_secure.c +++ b/trunk/bootrom/build/libraries/init/ARM11/crt0_secure.c @@ -36,7 +36,6 @@ asm void i_stupStartHandler( void ) { PRESERVE8 - INASM_EXTERN( STUPi_HW_DTCM ) INASM_EXTERN( stupInitExceptions ) INASM_EXTERN( BromMain ) INASM_EXTERN( main ) @@ -63,13 +62,13 @@ asm void i_stupStartHandler( void ) bl stupInitExceptions //---- disable cp15 - bl stupDisableCP15 + bl stupDisableCP15 //---- initialize MMU - bl stupInitMMU + bl stupInitMMU //---- enable cp15 - bl stupEnableCP15 + bl stupEnableCP15 //---- clear wram // 1KB diff --git a/trunk/bootrom/build/libraries/init/ARM9/crt0_secure_sp.c b/trunk/bootrom/build/libraries/init/ARM9/crt0_secure_sp.c index 49f3ff2..8c6086f 100644 --- a/trunk/bootrom/build/libraries/init/ARM9/crt0_secure_sp.c +++ b/trunk/bootrom/build/libraries/init/ARM9/crt0_secure_sp.c @@ -35,6 +35,7 @@ asm void i_stupStartHandler( void ) PRESERVE8 INASM_EXTERN( STUPi_HW_DTCM ) + INASM_EXTERN( stupInitExceptions ) INASM_EXTERN( BromSpMain ) INASM_EXTERN( main ) @@ -47,9 +48,6 @@ asm void i_stupStartHandler( void ) #endif // BROM_ENABLE_BOOTROM_WRITE - //---- initialize cp15 - bl i_stupInitCP15 - //---- initialize stack pointer // SVC mode mov r0, #HW_PSR_SVC_MODE @@ -68,6 +66,12 @@ asm void i_stupStartHandler( void ) ldr r0, =HW_BROM_SYS_STACK_END mov sp, r0 + //---- initialize exceptions + bl stupInitExceptions + + //---- initialize cp15 + bl i_stupInitCP15 + //---- clear wram // DTCM (16KB) mov r0, #0 diff --git a/trunk/bootrom/build/libraries/init/common/crt0_excp.c b/trunk/bootrom/build/libraries/init/common/crt0_excp.c index a477bef..93a4fd4 100644 --- a/trunk/bootrom/build/libraries/init/common/crt0_excp.c +++ b/trunk/bootrom/build/libraries/init/common/crt0_excp.c @@ -30,19 +30,48 @@ *---------------------------------------------------------------------------*/ ASM void stupInitExceptions( void ) { - ldr r3, =HW_SWI_VENEER_BUF - ldr r2, =i_stupSwiVeneerCode - ldm r2, {r0-r1} - stm r3, {r0-r1} + adr r2, i_stupExcpVennerCode + ldr r3, =HW_EXCP_VENEER_BUF + add r12, r3, #HW_EXCP_VENEER_BUF_SIZE +LSYM(0) + ldr r0, [r2], #4 + ldm r0, {r0-r1} + stm r3!,{r0-r1} + cmp r3, r12 + blt BSYM(0) bx lr +i_stupExcpVennerCode + DCD i_stupSwiVeneerCode + DCD i_stupExcpTerminateCode + DCD i_stupSwiVeneerCode + DCD i_stupExcpTerminateCode + DCD i_stupExcpTerminateCode + DCD i_stupExcpTerminateCode + LTORG } /*---------------------------------------------------------------------------* - Name: i_osIrqVeneer + Name: i_stupExcpTerminateCode - Description: Interrupt Vevver + Description: exception Veneer + + Arguments: None + + Returns: None + *---------------------------------------------------------------------------*/ +ASM void i_stupExcpTerminateCode( void ) +{ +LSYM(0) + b BSYM(0) + LTORG +} + +/*---------------------------------------------------------------------------* + Name: i_stupSwiVeneerCode + + Description: SWI Veneer Arguments: None diff --git a/trunk/bootrom/include/brom/os/common/interrupt.h b/trunk/bootrom/include/brom/os/common/interrupt.h index 2b9f0e4..12e115f 100644 --- a/trunk/bootrom/include/brom/os/common/interrupt.h +++ b/trunk/bootrom/include/brom/os/common/interrupt.h @@ -53,6 +53,7 @@ OSFiqMode; //---- interrupt handler type //typedef IRQ void (*OSIntrHandler) (void); +typedef void (*OSExcpHandler) (void); typedef void (*OSIntrHandler) (void); typedef void (*OSIntrFunction) (void); diff --git a/trunk/include/ctr/hw/ARM11/mmap_axi_wram.h b/trunk/include/ctr/hw/ARM11/mmap_axi_wram.h index 8ad19c9..e6d3453 100644 --- a/trunk/include/ctr/hw/ARM11/mmap_axi_wram.h +++ b/trunk/include/ctr/hw/ARM11/mmap_axi_wram.h @@ -41,12 +41,15 @@ extern "C" { #define HW_AXI_WRAM_SYSRV_OFS_INTR_CHECK0 0x50 //---- system reserved area +#define HW_EXCP_VENEER_BUF (HW_INTR_VENEER_BUF) +#define HW_EXCP_VENEER_BUF_END (HW_EXCP_VENEER_BUF + HW_EXCP_VENEER_BUF_SIZE) +#define HW_EXCP_VENEER_BUF_SIZE (8 * 6) #define HW_INTR_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_INTR_VENEER) #define HW_FIQ_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_FIQ_VENEER) #define HW_SWI_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_SWI_VENEER) +#define HW_UDEF_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_UDEF_VENEER) #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_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_START_VECTOR1) #define HW_INTR_CHECK0_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_INTR_CHECK0) #define HW_INTR_CHECK1_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_INTR_CHECK1) diff --git a/trunk/include/ctr/hw/ARM9/mmap_prv_wram.h b/trunk/include/ctr/hw/ARM9/mmap_prv_wram.h index c4ff89d..d0e6d88 100644 --- a/trunk/include/ctr/hw/ARM9/mmap_prv_wram.h +++ b/trunk/include/ctr/hw/ARM9/mmap_prv_wram.h @@ -38,12 +38,15 @@ extern "C" { #define HW_PRV_WRAM_SYSRV_OFS_INTR_CHECK 0x3c //---- system reserved area +#define HW_EXCP_VENEER_BUF (HW_INTR_VENEER_BUF) +#define HW_EXCP_VENEER_BUF_END (HW_EXCP_VENEER_BUF + HW_EXCP_VENEER_BUF_SIZE) +#define HW_EXCP_VENEER_BUF_SIZE (8 * 6) #define HW_INTR_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_INTR_VENEER) #define HW_FIQ_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_FIQ_VENEER) #define HW_SWI_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_SWI_VENEER) +#define HW_UDEF_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_UDEF_VENEER) #define HW_IABT_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_IABT_VENEER) #define HW_DABT_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_DABT_VENEER) -#define HW_UDEF_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_UDEF_VENEER) #define HW_INTR_CHECK_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_INTR_CHECK)