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>
#define STUPi_HW_DTCM |Image$$DTCM$$Base|
void stupInitMMUTable( void );
/*---------------------------------------------------------------------------*
Name: i_stupStartHandler

View File

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

View File

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

View File

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

View File

@ -56,7 +56,7 @@ void osInitException( void )
Returns: None
*---------------------------------------------------------------------------*/
ASM void i_osUndefInstHandler( void )
asm void i_osUndefInstHandler( void )
{
// change into system mode
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
}
ASM void i_osUndefInstHandlerVFP( void )
asm void i_osUndefInstHandlerVFP( void )
{
// VFP enable
fmrx r12, fpexc
@ -152,7 +152,7 @@ LSYM(1)
bx lr
}
ASM void i_osUndefInstTerminate( void )
asm void i_osUndefInstTerminate( void )
{
LSYM(1)
b BSYM(1)

View File

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

View File

@ -32,7 +32,7 @@
Returns: CPU processor mode (field 0x10-0x1f)
*---------------------------------------------------------------------------*/
#include <brom/code32.h>
ASM OSProcMode osGetProcMode( void )
asm OSProcMode osGetProcMode( void )
{
mrs r0, cpsr
and r0, r0, #HW_PSR_CPU_MODE_MASK
@ -54,7 +54,7 @@ ASM OSProcMode osGetProcMode( void )
Returns: None
*---------------------------------------------------------------------------*/
#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
LSYM(1)
@ -96,7 +96,7 @@ void osTerminate(void)
Returns: None
*---------------------------------------------------------------------------*/
ASM void osHalt( void )
asm void osHalt( void )
{
#ifdef SDK_ARM11
wfi
@ -118,8 +118,7 @@ ASM void osHalt( void )
Returns: None
*---------------------------------------------------------------------------*/
ASM void osHaltUntilEvent( void )
asm void osHaltUntilEvent( void )
{
wfe
bx lr

View File

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