diff --git a/build/libraries/init/ARM7/crt0_firm.c b/build/libraries/init/ARM7/crt0_firm.c index 97b8e0af..862ec6ca 100644 --- a/build/libraries/init/ARM7/crt0_firm.c +++ b/build/libraries/init/ARM7/crt0_firm.c @@ -87,6 +87,26 @@ SDK_WEAK_SYMBOL asm void _start( void ) msr cpsr_csfx, r0 sub sp, r1, #4 // 4byte for stack check code + //---- read reset flag from pmic +#ifdef TWL_PLATFORM_TS + mov r0, #REG_PMIC_SW_FLAGS_ADDR + bl PMi_GetRegister + ands r0, r0, #PMIC_SW_FLAGS_WARMBOOT + movne r0, #FIRM_PXI_ID_WARMBOOT + moveq r0, #FIRM_PXI_ID_COLDBOOT + bl PXI_SendByIntf + mov r0, #FIRM_PXI_ID_INIT_MMEM + bl PXI_WaitByIntf +#endif // TWL_PLATFORM_TS + + //---- wait for main memory mode into burst mode + ldr r3, =REG_EXMEMCNT_L_ADDR + mov r1, #REG_MI_EXMEMCNT_L_ECE2_MASK +@1: + ldrh r2, [r3] + tst r2, r1 + beq @1 + #if 0 // move parameters from IPL's work memory to shared area ldr r0, =IPL_PARAM_CARD_ROM_HEADER @@ -106,14 +126,6 @@ SDK_WEAK_SYMBOL asm void _start( void ) bmi @1_2 #endif - //---- wait for main memory mode into burst mode - ldr r3, =REG_EXMEMCNT_L_ADDR - mov r1, #REG_MI_EXMEMCNT_L_ECE2_MASK -@1: - ldrh r2, [r3] - tst r2, r1 - beq @1 - //---- load autoload block and initialize bss bl do_autoload diff --git a/build/libraries/init/ARM9/crt0_firm.c b/build/libraries/init/ARM9/crt0_firm.c index 56ed70d4..a334f3b1 100644 --- a/build/libraries/init/ARM9/crt0_firm.c +++ b/build/libraries/init/ARM9/crt0_firm.c @@ -64,12 +64,6 @@ SDK_WEAK_SYMBOL asm void _start( void ) mov r12, #HW_REG_BASE str r12, [r12, #REG_IME_OFFSET] - //---- initialize Main Memory - bl MIi_InitMainMemCR - - //---- initialize cp15 - bl init_cp15 - //---- initialize stack pointer // SVC mode mov r0, #HW_PSR_SVC_MODE @@ -94,6 +88,29 @@ SDK_WEAK_SYMBOL asm void _start( void ) mov r0, #HW_PSR_SYS_MODE msr cpsr_csfx, r0 sub sp, r1, #4 // 4byte for stack check code + //---- read reset flag from pmic + +#ifdef TWL_PLATFORM_TS +@0: bl PXI_RecvByIntf + cmp r0, #FIRM_PXI_ID_COLDBOOT + cmpne r0, #FIRM_PXI_ID_WARMBOOT + bne @0 + + //---- initialize Main Memory + cmp r0, #FIRM_PXI_ID_COLDBOOT + bleq MIi_InitMainMemCR + + mov r0, #FIRM_PXI_ID_INIT_MMEM + bl PXI_SendByIntf + +#else // TWL_PLATFORM_BB + //---- initialize Main Memory + bl MIi_InitMainMemCR + +#endif // TWL_PLATFORM_BB + + //---- initialize cp15 + bl init_cp15 //---- clear memory // DTCM (16KB) diff --git a/include/firm/pxi/common/misc.h b/include/firm/pxi/common/misc.h index 18376131..f70e6fd8 100644 --- a/include/firm/pxi/common/misc.h +++ b/include/firm/pxi/common/misc.h @@ -28,22 +28,24 @@ extern "C" { typedef enum { // from ARM7 - FIRM_PXI_ID_INIT_ARM7 = 3, - FIRM_PXI_ID_LOAD_HEADER = 8, + FIRM_PXI_ID_COLDBOOT = 1, + FIRM_PXI_ID_WARMBOOT = 2, + + FIRM_PXI_ID_INIT_ARM7 = 7, + FIRM_PXI_ID_LOAD_HEADER = 6, FIRM_PXI_ID_LOAD_ARM9_STATIC = 5, - FIRM_PXI_ID_LOAD_ARM7_STATIC = 6, - FIRM_PXI_ID_LOAD_ARM9_LTD_STATIC = 9, - FIRM_PXI_ID_LOAD_ARM7_LTD_STATIC = 10, - FIRM_PXI_ID_LOAD_PIRIOD = 11, + FIRM_PXI_ID_LOAD_ARM7_STATIC = 4, + FIRM_PXI_ID_LOAD_ARM9_LTD_STATIC = 3, + FIRM_PXI_ID_LOAD_ARM7_LTD_STATIC = 2, + FIRM_PXI_ID_LOAD_PIRIOD = 1, // from ARM9 - FIRM_PXI_ID_INIT_ARM9 = 1, - FIRM_PXI_ID_AUTH_HEADER = 8, - FIRM_PXI_ID_AUTH_ARM9_STATIC = 5, - FIRM_PXI_ID_AUTH_ARM7_STATIC = 6, - FIRM_PXI_ID_AUTH_ARM9_LTD_STATIC = 9, - FIRM_PXI_ID_AUTH_ARM7_LTD_STATIC = 10, - FIRM_PXI_ID_DONE_WRAM_SETTING = 11, + FIRM_PXI_ID_INIT_ARM9 = 9, + FIRM_PXI_ID_AUTH_HEADER = 10, + FIRM_PXI_ID_AUTH_ARM9_STATIC = 11, + FIRM_PXI_ID_AUTH_ARM7_STATIC = 12, + FIRM_PXI_ID_AUTH_ARM9_LTD_STATIC = 13, + FIRM_PXI_ID_AUTH_ARM7_LTD_STATIC = 14, // from both of ARM9 and ARM7 FIRM_PXI_ID_NULL = 0,