MMUテーブルアドレスを引数で渡す仕様に。

git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@214 b871894f-2f95-9b40-918c-086798483c85
This commit is contained in:
nakasima 2009-01-27 03:01:52 +00:00
parent 1181bb8629
commit 88a1531191
8 changed files with 42 additions and 49 deletions

View File

@ -18,11 +18,6 @@
#include <brom/os.h> #include <brom/os.h>
#define STUPi_HW_DTCM |Image$$DTCM$$Base|
void stupInitMMUTable( void );
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
Name: i_stupStartHandler Name: i_stupStartHandler

View File

@ -61,6 +61,8 @@ asm void _start( void )
bl stupDisableCP15 bl stupDisableCP15
//---- initialize MMU //---- initialize MMU
ldr r0, =HW_BROM_MMU_T1
ldr r1, =HW_BROM_MMU_T2
bl stupInitMMU bl stupInitMMU
//---- enable cp15 //---- enable cp15

View File

@ -17,7 +17,7 @@
#include <brom/code32.h> #include <brom/code32.h>
#include <brom/os.h> #include <brom/os.h>
void stupInitMMUTable( void ); void stupInitMMUTable( u32* t1Base, u32* t2Base );
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
Name: stupDisableCP15 Name: stupDisableCP15
@ -138,33 +138,31 @@ asm void stupEnableCP15( void )
Returns: None Returns: None
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
asm void stupInitMMU( void ) asm void stupInitMMU( u32* t1Base, u32* t2Base )
{ {
stmfd sp!, {r4, lr} // stack requires 8byte alignment stmfd sp!, {r4, lr} // stack requires 8byte alignment
// Invalidate ITLB DTLB // Invalidate ITLB DTLB
mov r0, #0 mov r3, #0
mcr p15, 0, r0, c8, c5, 0 mcr p15, 0, r3, c8, c5, 0
mcr p15, 0, r0, c8, c6, 0 mcr p15, 0, r3, c8, c6, 0
ldr r0, =HW_BROM_MMU_T1
mov r2, #HW_C2_V5_T1_BOUNBARY_16KB mov r2, #HW_C2_V5_T1_BOUNBARY_16KB
// MMU L1 Table Base // MMU L1 Table Base
ldr r1, =HW_C2_0_T1_BASE_MASK_MIN ldr r3, =HW_C2_0_T1_BASE_MASK_MIN
mov r1, r1, ASR r2 mov r3, r3, ASR r2
and r1 ,r1, r0 and r3 ,r3, r0
orr r1, r1, #(HW_C2_WALK_L2C_CA_NC << HW_C2_WALK_L2C_CA_SFT) \ orr r3, r3, #(HW_C2_WALK_L2C_CA_NC << HW_C2_WALK_L2C_CA_SFT) \
| HW_C2_WALK_ON_SHARED_MEM | HW_C2_WALK_ON_SHARED_MEM
mcr p15, 0, r1, c2, c0, 0 mcr p15, 0, r3, c2, c0, 0
ldr r1, =HW_C2_1_T1_BASE_MASK ldr r3, =HW_C2_1_T1_BASE_MASK
and r1 ,r1, r0 and r3 ,r3, r0
orr r1, r1, #(HW_C2_WALK_L2C_CA_NC << HW_C2_WALK_L2C_CA_SFT) \ orr r3, r3, #(HW_C2_WALK_L2C_CA_NC << HW_C2_WALK_L2C_CA_SFT) \
| HW_C2_WALK_ON_SHARED_MEM | HW_C2_WALK_ON_SHARED_MEM
mcr p15, 0, r1, c2, c0, 1 mcr p15, 0, r3, c2, c0, 1
// MMU L1 Table Boundary // MMU L1 Table Boundary
@ -172,9 +170,9 @@ asm void stupInitMMU( void )
// Domain Access Permission // Domain Access Permission
#if 1 // miya #if 1 // miya
ldr r1, =0x00000001 ldr r3, =0x00000001
#else #else
ldr r1, = HW_C3_DOMAIN_PACK( \ ldr r3, = HW_C3_DOMAIN_PACK( \
HW_C3_DM_AP_CLIENT, \ HW_C3_DM_AP_CLIENT, \
HW_C3_DM_AP_CLIENT, \ HW_C3_DM_AP_CLIENT, \
HW_C3_DM_AP_CLIENT, \ HW_C3_DM_AP_CLIENT, \
@ -195,13 +193,13 @@ asm void stupInitMMU( void )
#endif #endif
mcr p15, 0, r1, c3, c0, 0 mcr p15, 0, r3, c3, c0, 0
// VFP Access Permission // VFP Access Permission
ldr r1, =HW_C1_VFP_AP_PACK( \ ldr r3, =HW_C1_VFP_AP_PACK( \
HW_C1_AP_PRIV, HW_C1_AP_PRIV ) HW_C1_AP_PRIV, HW_C1_AP_PRIV )
mcr p15, 0, r1, c1, c0, 2 mcr p15, 0, r3, c1, c0, 2
// Initialize MMU Table // Initialize MMU Table
@ -220,11 +218,8 @@ asm void stupInitMMU( void )
Returns: None Returns: None
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
void stupInitMMUTable( void ) void stupInitMMUTable( u32* t1Base, u32* t2Base )
{ {
u32* t1Base = (u32* )HW_BROM_MMU_T1;
u32* t2Base = (u32* )HW_BROM_MMU_T2;
u32* table; u32* table;
u32 paddr = (u32 )NULL; u32 paddr = (u32 )NULL;

View File

@ -65,6 +65,8 @@ asm void i_stupStartHandler( void )
bl stupDisableCP15 bl stupDisableCP15
//---- initialize MMU //---- initialize MMU
ldr r0, =HW_BROM_MMU_T1
ldr r1, =HW_BROM_MMU_T2
bl stupInitMMU bl stupInitMMU
//---- enable cp15 //---- enable cp15

View File

@ -56,7 +56,7 @@ void osInitException( void )
Returns: None Returns: None
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
ASM void i_osUndefInstHandler( void ) asm void i_osUndefInstHandler( void )
{ {
// change into system mode // change into system mode
msr cpsr_fsxc, #HW_PSR_SYS_MODE | HW_PSR_IRQ_DISABLE | HW_PSR_FIQ_DISABLE msr cpsr_fsxc, #HW_PSR_SYS_MODE | HW_PSR_IRQ_DISABLE | HW_PSR_FIQ_DISABLE
@ -128,7 +128,7 @@ i_osUndefCPHandlerTable
DCD i_osUndefInstTerminate // CP 15 DCD i_osUndefInstTerminate // CP 15
} }
ASM void i_osUndefInstHandlerVFP( void ) asm void i_osUndefInstHandlerVFP( void )
{ {
// VFP enable // VFP enable
fmrx r12, fpexc fmrx r12, fpexc
@ -152,7 +152,7 @@ LSYM(1)
bx lr bx lr
} }
ASM void i_osUndefInstTerminate( void ) asm void i_osUndefInstTerminate( void )
{ {
LSYM(1) LSYM(1)
b BSYM(1) b BSYM(1)

View File

@ -248,7 +248,7 @@ OSIntrMode osRestoreInterrupts_IrqAndFiq( OSIntrMode state )
Returns: last state of HW_PSR_IRQ_DISABLE Returns: last state of HW_PSR_IRQ_DISABLE
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
ASM OSIntrMode osEnableIrq( void ) asm OSIntrMode osEnableIrq( void )
{ {
mrs r0, cpsr mrs r0, cpsr
@ -271,7 +271,7 @@ ASM OSIntrMode osEnableIrq( void )
Returns: last state of HW_PSR_IRQ_DISABLE Returns: last state of HW_PSR_IRQ_DISABLE
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
ASM OSIntrMode osDisableIrq( void ) asm OSIntrMode osDisableIrq( void )
{ {
mrs r0, cpsr mrs r0, cpsr
@ -295,7 +295,7 @@ ASM OSIntrMode osDisableIrq( void )
Returns: last state of HW_PSR_IRQ_DISABLE Returns: last state of HW_PSR_IRQ_DISABLE
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
ASM OSIntrMode osRestoreIrq( OSIntrMode state ) asm OSIntrMode osRestoreIrq( OSIntrMode state )
{ {
mrs r1, cpsr mrs r1, cpsr
bic r2, r1, #HW_PSR_IRQ_DISABLE bic r2, r1, #HW_PSR_IRQ_DISABLE
@ -315,7 +315,7 @@ ASM OSIntrMode osRestoreIrq( OSIntrMode state )
Returns: last state of HW_PSR_FIQ_DISABLE Returns: last state of HW_PSR_FIQ_DISABLE
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
ASM OSIntrMode osEnableFiq( void ) asm OSIntrMode osEnableFiq( void )
{ {
mrs r0, cpsr mrs r0, cpsr
@ -339,7 +339,7 @@ ASM OSIntrMode osEnableFiq( void )
Returns: last state of HW_PSR_FIQ_DISABLE Returns: last state of HW_PSR_FIQ_DISABLE
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
ASM OSIntrMode osDisableFiq( void ) asm OSIntrMode osDisableFiq( void )
{ {
mrs r0, cpsr mrs r0, cpsr
@ -363,7 +363,7 @@ ASM OSIntrMode osDisableFiq( void )
Returns: last state of HW_PSR_FIQ_DISABLE Returns: last state of HW_PSR_FIQ_DISABLE
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
ASM OSIntrMode osRestoreFiq( OSIntrMode state ) asm OSIntrMode osRestoreFiq( OSIntrMode state )
{ {
mrs r1, cpsr mrs r1, cpsr
bic r2, r1, #HW_PSR_FIQ_DISABLE bic r2, r1, #HW_PSR_FIQ_DISABLE
@ -383,7 +383,7 @@ ASM OSIntrMode osRestoreFiq( OSIntrMode state )
Returns: last state of HW_PSR_IRQ_DISABLE & HW_PSR_FIQ_DISABLE Returns: last state of HW_PSR_IRQ_DISABLE & HW_PSR_FIQ_DISABLE
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
ASM OSIntrMode osEnableIrqAndFiq( void ) asm OSIntrMode osEnableIrqAndFiq( void )
{ {
mrs r0, cpsr mrs r0, cpsr
@ -407,7 +407,7 @@ ASM OSIntrMode osEnableIrqAndFiq( void )
Returns: last state of HW_PSR_IRQ_DISABLE & HW_PSR_FIQ_DISABLE Returns: last state of HW_PSR_IRQ_DISABLE & HW_PSR_FIQ_DISABLE
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
ASM OSIntrMode osDisableIrqAndFiq( void ) asm OSIntrMode osDisableIrqAndFiq( void )
{ {
mrs r0, cpsr mrs r0, cpsr
@ -431,7 +431,7 @@ ASM OSIntrMode osDisableIrqAndFiq( void )
Returns: last state of HW_PSR_IRQ_DISABLE & HW_PSR_FIQ_DISABLE Returns: last state of HW_PSR_IRQ_DISABLE & HW_PSR_FIQ_DISABLE
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
ASM OSIntrMode osRestoreIrqAndFiq( OSIntrMode state ) asm OSIntrMode osRestoreIrqAndFiq( OSIntrMode state )
{ {
mrs r1, cpsr mrs r1, cpsr
bic r2, r1, #HW_PSR_IRQ_FIQ_DISABLE bic r2, r1, #HW_PSR_IRQ_FIQ_DISABLE

View File

@ -32,7 +32,7 @@
Returns: CPU processor mode (field 0x10-0x1f) Returns: CPU processor mode (field 0x10-0x1f)
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
#include <brom/code32.h> #include <brom/code32.h>
ASM OSProcMode osGetProcMode( void ) asm OSProcMode osGetProcMode( void )
{ {
mrs r0, cpsr mrs r0, cpsr
and r0, r0, #HW_PSR_CPU_MODE_MASK and r0, r0, #HW_PSR_CPU_MODE_MASK
@ -54,7 +54,7 @@ ASM OSProcMode osGetProcMode( void )
Returns: None Returns: None
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
#include <brom/code32.h> #include <brom/code32.h>
ASM void i_osWaitCpuCycles( OSCpuCycle cycle ) asm void i_osWaitCpuCycles( OSCpuCycle cycle )
{ {
sub r0, r0, #(6-2) // subtract call-return overhead and add the margin of 2 cycles sub r0, r0, #(6-2) // subtract call-return overhead and add the margin of 2 cycles
LSYM(1) LSYM(1)
@ -96,7 +96,7 @@ void osTerminate(void)
Returns: None Returns: None
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
ASM void osHalt( void ) asm void osHalt( void )
{ {
#ifdef SDK_ARM11 #ifdef SDK_ARM11
wfi wfi
@ -118,8 +118,7 @@ ASM void osHalt( void )
Returns: None Returns: None
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
asm void osHaltUntilEvent( void )
ASM void osHaltUntilEvent( void )
{ {
wfe wfe
bx lr bx lr

View File

@ -315,7 +315,7 @@ void osStopTimer64( void )
Returns: count Returns: count
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
ASM u32 osGetPerfMonitor( OSMoniter mon ) asm u32 osGetPerfMonitor( OSMoniter mon )
{ {
cmp r0, #__cpp(OS_MONITOR_1) cmp r0, #__cpp(OS_MONITOR_1)
beq FSYM(1) beq FSYM(1)
@ -342,7 +342,7 @@ LSYM(3)
Returns: previous count Returns: previous count
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
ASM u32 osSetPerfMonitor( OSMoniter mon, u32 count ) asm u32 osSetPerfMonitor( OSMoniter mon, u32 count )
{ {
cmp r0, #__cpp(OS_MONITOR_1) cmp r0, #__cpp(OS_MONITOR_1)
beq FSYM(1) beq FSYM(1)