SCFG_Initを呼ぶようにした、

ランチャーのタイトルIDをHWSecureInfoから取得するようにした(失敗するとLNCRでリトライ)、
プロファイル周りの修正

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@519 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yutaka 2008-01-25 08:18:54 +00:00
parent 4a3fc13fca
commit 256dd85977
11 changed files with 219 additions and 157 deletions

View File

@ -154,26 +154,28 @@ void TwlSpMain( void )
{
int fd; // menu file descriptor
#ifdef PROFILE_ENABLE
// 0: bootrom
profile[pf_cnt++] = OS_TicksToMicroSecondsBROM32(OS_GetTick());
#endif
InitDebugLED();
SetDebugLED(++step); // 0x81
PreInit();
// 0: before PXI
// 1: after PreInit
PUSH_PROFILE();
SetDebugLED(++step); // 0x82
OS_InitFIRM();
OS_EnableIrq();
OS_EnableInterrupts();
// 1: after PXI
// 2: after OS_InitFIRM
PUSH_PROFILE();
SetDebugLED(++step); // 0x83
PostInit();
// 2: after PM_InitFIRM
// 3: after PostInit
PUSH_PROFILE();
SetDebugLED(++step); // 0x84
@ -185,8 +187,7 @@ void TwlSpMain( void )
OS_TPrintf("Failed to call FATFS_Init().\n");
goto end;
}
// 3: after FS_Init
// 4: after FATFS_Init
PUSH_PROFILE();
SetDebugLED(++step); // 0x85
@ -197,8 +198,7 @@ void TwlSpMain( void )
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_SET_PATH).\n");
goto end;
}
// 4: after PXI
// 5: after PXI
PUSH_PROFILE();
SetDebugLED(++step); // 0x86
@ -209,8 +209,7 @@ void TwlSpMain( void )
OS_TPrintf("Failed to call FS_OpenSrl().\n");
goto end;
}
// 5: after FS_OpenSrl
// 6: after FS_OpenSrl
PUSH_PROFILE();
SetDebugLED(++step); // 0x87
@ -221,8 +220,7 @@ void TwlSpMain( void )
OS_TPrintf("Failed to call FS_LoadHeader().\n");
goto end;
}
// 6: after FS_LoadHeader
// 7: after FS_LoadHeader
PUSH_PROFILE();
SetDebugLED(++step); // 0x88
@ -233,8 +231,7 @@ void TwlSpMain( void )
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_DONE_HEADER).\n");
goto end;
}
// 7: after PXI
// 8: after PXI
PUSH_PROFILE();
SetDebugLED(++step); // 0x89
@ -242,8 +239,7 @@ void TwlSpMain( void )
AESi_InitKeysFIRM();
AESi_RecvSeed( rh->s.developer_encrypt );
// 8: after AESi_RecvSeed
// 9: after AESi_RecvSeed
PUSH_PROFILE();
SetDebugLED(++step); // 0x8a
@ -254,8 +250,7 @@ void TwlSpMain( void )
OS_TPrintf("Failed to call FS_LoadStatic().\n");
goto end;
}
// 9: after FS_LoadStatic
// 10: after FS_LoadStatic
PUSH_PROFILE();
SetDebugLED(++step); // 0x8b
@ -266,9 +261,9 @@ void TwlSpMain( void )
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_DONE_STATIC).\n");
goto end;
}
// 10: after PXI
// 11: after PXI
PUSH_PROFILE();
#ifdef PROFILE_ENABLE
{
int i;

View File

@ -207,10 +207,16 @@ static void EraseAll(void)
void TwlMain( void )
{
PreInit();
#ifdef PROFILE_ENABLE
// 0: bootrom
profile[pf_cnt++] = OS_TicksToMicroSecondsBROM32(OS_GetTick());
#endif
// 0: before PXI
PUSH_PROFILE();
PreInit();
#ifdef PROFILE_ENABLE
// 1: before OS_InitFIRM
profile[pf_cnt++] = OS_TicksToMicroSecondsBROM32(OS_GetTick());
#endif
OS_InitFIRM();
OS_EnableIrq();
@ -219,22 +225,19 @@ void TwlMain( void )
#ifdef PROFILE_ENABLE
OS_InitTick();
#endif
// 1: after PXI
// 2: after OS_InitTick
PUSH_PROFILE();
PostInit();
// 2: after PostInit
// 3: after PostInit
PUSH_PROFILE();
STD_CopyString((char*)HW_TWL_FS_BOOT_SRL_PATH_BUF, MENU_FILE);
// 3: after FS_ResolveSrl
// 4: after STD_CopyString
PUSH_PROFILE();
PXI_NotifyID( FIRM_PXI_ID_SET_PATH );
// 4: after PXI
// 5: after PXI
PUSH_PROFILE();
if ( !FS_LoadHeader(&acPool, RSA_KEY_ADDR ) || !CheckHeader() )
@ -242,19 +245,16 @@ void TwlMain( void )
OS_TPrintf("Failed to call FS_LoadHeader() and/or CheckHeader().\n");
goto end;
}
// 5: after FS_LoadHeader
// 6: after FS_LoadHeader
PUSH_PROFILE();
PXI_NotifyID( FIRM_PXI_ID_DONE_HEADER );
// 6: after PXI
// 7: after PXI
PUSH_PROFILE();
AESi_SendSeed( FS_GetAesKeySeed() );
FS_DeleteAesKeySeed();
// 7: after AESi_SendSeed
// 8: after AESi_SendSeed
PUSH_PROFILE();
if ( !FS_LoadStatic() )
@ -262,14 +262,13 @@ void TwlMain( void )
OS_TPrintf("Failed to call FS_LoadStatic().\n");
goto end;
}
// 8: after FS_LoadStatic
// 9: after FS_LoadStatic
PUSH_PROFILE();
PXI_NotifyID( FIRM_PXI_ID_DONE_STATIC );
// 9: after PXI
// 10: after PXI
PUSH_PROFILE();
#ifdef PROFILE_ENABLE
{
int i;

View File

@ -91,6 +91,14 @@ void OS_InitFIRM(void)
//---- Init Card
#ifndef SDK_SMALL_BUILD
// CARD_Init();
#endif
//---- init System config
#ifdef SDK_TWL
// if (OS_IsRunOnTwl() == TRUE)
// {
SCFG_Init();
// }
#endif
//---- Init Power Manager
@ -142,6 +150,14 @@ void OS_InitFIRM(void)
//---- Init Cartridge
#ifndef SDK_TEG
// CTRDG_Init();
#endif
//---- init System config
#ifdef SDK_TWL
// if (OS_IsRunOnTwl() == TRUE)
// {
SCFG_Init();
// }
#endif
#endif // SDK_ARM9

View File

@ -162,22 +162,19 @@ void TwlSpMain( void )
SetDebugLED(++step); // 0x81
PreInit();
// 1: before PXI
// 1: after PreInit
PUSH_PROFILE();
SetDebugLED(++step); // 0x82
OS_InitFIRM();
OS_EnableIrq();
OS_EnableInterrupts();
// 2: after PXI
// 2: after OS_InitFIRM
PUSH_PROFILE();
SetDebugLED(++step); // 0x83
PostInit();
// 3: after PM_InitFIRM
// 3: after PostInit
PUSH_PROFILE();
SetDebugLED(++step); // 0x84
@ -189,8 +186,7 @@ void TwlSpMain( void )
OS_TPrintf("Failed to call FATFS_Init().\n");
goto end;
}
// 4: after FS_Init
// 4: after FATFS_Init
PUSH_PROFILE();
SetDebugLED(++step); // 0x85
@ -201,7 +197,6 @@ void TwlSpMain( void )
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_SET_PATH).\n");
goto end;
}
// 5: after PXI
PUSH_PROFILE();
SetDebugLED(++step); // 0x86
@ -213,7 +208,6 @@ void TwlSpMain( void )
OS_TPrintf("Failed to call FS_OpenSrl().\n");
goto end;
}
// 6: after FS_OpenSrl
PUSH_PROFILE();
SetDebugLED(++step); // 0x87
@ -225,7 +219,6 @@ void TwlSpMain( void )
OS_TPrintf("Failed to call FS_LoadHeader().\n");
goto end;
}
// 7: after FS_LoadHeader
PUSH_PROFILE();
SetDebugLED(++step); // 0x88
@ -237,7 +230,6 @@ void TwlSpMain( void )
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_DONE_HEADER).\n");
goto end;
}
// 8: after PXI
PUSH_PROFILE();
SetDebugLED(++step); // 0x89
@ -246,7 +238,6 @@ void TwlSpMain( void )
AESi_InitKeysFIRM();
AESi_RecvSeed( rh->s.developer_encrypt );
// 9: after AESi_RecvSeed
PUSH_PROFILE();
SetDebugLED(++step); // 0x8a
@ -258,7 +249,6 @@ void TwlSpMain( void )
OS_TPrintf("Failed to call FS_LoadStatic().\n");
goto end;
}
// 10: after FS_LoadStatic
PUSH_PROFILE();
SetDebugLED(++step); // 0x8b
@ -270,9 +260,9 @@ void TwlSpMain( void )
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_DONE_STATIC).\n");
goto end;
}
// 11: after PXI
PUSH_PROFILE();
#ifdef PROFILE_ENABLE
{
int i;

View File

@ -47,6 +47,7 @@ LLIBRARIES += libes.TWL$(ARCHGEN_TYPE).a libboc.TWL$(ARCHGEN_TYPE).a
else
LLIBRARIES += ../Release/libes.TWL$(ARCHGEN_TYPE).a ../Release/libboc.TWL$(ARCHGEN_TYPE).a
endif
LLIBRARIES += liblcfg$(TWL_LIBSUFFIX).a
#----------------------------------------------------------------------------

View File

@ -15,6 +15,7 @@
$Author$
*---------------------------------------------------------------------------*/
#include <firm.h>
#include <twl/lcfg.h>
#ifndef FIRM_USE_TWLSDK_KEYS
#define RSA_KEY_ADDR OSi_GetFromFirmAddr()->rsa_pubkey[0] // 鍵管理.xls参照
@ -39,7 +40,9 @@ static const u8 rsa_key[128] =
static u8 acHeap[RSA_HEAP_SIZE] __attribute__ ((aligned (32)));
static SVCSignHeapContext acPool;
#define MENU_TITLE_ID 0x000300074c4e4352ULL
#define MENU_TITLE_ID_HI 0x00030007ULL
#define MENU_TITLE_ID_LO 0x4c4e4352ULL
#define MENU_TITLE_ID (MENU_TITLE_ID_HI << 32 | MENU_TITLE_ID_LO)
/*
PROFILE_ENABLE
@ -122,6 +125,48 @@ static void PostInit(void)
FS_InitFIRM();
}
/***************************************************************
TryResolveSrl
NANDに格納された情報からランチャーSRLを解決する
***************************************************************/
static BOOL TryResolveSrl(void)
{
u64 titleId = MENU_TITLE_ID_HI << 32;
if ( !LCFG_ReadHWSecureInfo() )
{
OS_TPrintf("Failed to load HWSecureInfo.\n");
return FALSE;
}
LCFG_THW_GetLauncherGameCode( (u8*)&titleId );
// 4: after LCFG_ReadHWSecureInfo
PUSH_PROFILE();
if ( !FS_ResolveSrl( titleId ) )
{
OS_TPrintf("Failed to call FS_ResolveSrl( 0x%016llx ).\n", titleId);
return FALSE;
}
OS_TPrintf("Launcher Title ID: 0x%016llx\n", titleId);
return TRUE;
}
/***************************************************************
RetryResolveSrl
SRLを解決する
***************************************************************/
static BOOL RetryResolveSrl(void)
{
if ( !FS_ResolveSrl( MENU_TITLE_ID ) )
{
OS_TPrintf("Failed to call FS_ResolveSrl( 0x%016llx ).\n", MENU_TITLE_ID);
return FALSE;
}
OS_TPrintf("Launcher Title ID: 0x%016llx\n", MENU_TITLE_ID);
return TRUE;
}
/***************************************************************
CheckHeader
@ -208,11 +253,12 @@ void TwlMain( void )
// 0: bootrom
profile[pf_cnt++] = OS_TicksToMicroSecondsBROM32(OS_GetTick());
#endif
PreInit();
// 1: before PXI
PUSH_PROFILE();
#ifdef PROFILE_ENABLE
// 1: before OS_InitFIRM
profile[pf_cnt++] = OS_TicksToMicroSecondsBROM32(OS_GetTick());
#endif
OS_InitFIRM();
OS_EnableIrq();
OS_EnableInterrupts();
@ -224,22 +270,18 @@ void TwlMain( void )
PUSH_PROFILE();
PostInit();
// 3: after PostInit
PUSH_PROFILE();
if ( !FS_ResolveSrl( MENU_TITLE_ID ) )
if ( !TryResolveSrl() && !RetryResolveSrl() )
{
OS_TPrintf("Failed to call FS_ResolveSrl( 0x%016llx ).\n", MENU_TITLE_ID);
goto end;
}
// 4: after FS_ResolveSrl
// 5: after FS_ResolveSrl
PUSH_PROFILE();
PXI_NotifyID( FIRM_PXI_ID_SET_PATH );
// 5: after PXI
// 6: after PXI
PUSH_PROFILE();
if ( !FS_LoadHeader(&acPool, RSA_KEY_ADDR ) || !CheckHeader() )
@ -247,19 +289,16 @@ void TwlMain( void )
OS_TPrintf("Failed to call FS_LoadHeader() and/or CheckHeader().\n");
goto end;
}
// 6: after FS_LoadHeader
// 7: after FS_LoadHeader
PUSH_PROFILE();
PXI_NotifyID( FIRM_PXI_ID_DONE_HEADER );
// 7: after PXI
// 8: after PXI
PUSH_PROFILE();
AESi_SendSeed( FS_GetAesKeySeed() );
FS_DeleteAesKeySeed();
// 8: after AESi_SendSeed
// 9: after AESi_SendSeed
PUSH_PROFILE();
if ( !FS_LoadStatic() )
@ -267,14 +306,13 @@ void TwlMain( void )
OS_TPrintf("Failed to call FS_LoadStatic().\n");
goto end;
}
// 9: after FS_LoadStatic
// 10: after FS_LoadStatic
PUSH_PROFILE();
PXI_NotifyID( FIRM_PXI_ID_DONE_STATIC );
// 10: after PXI
// 11: after PXI
PUSH_PROFILE();
#ifdef PROFILE_ENABLE
{
int i;

View File

@ -160,22 +160,19 @@ void TwlSpMain( void )
SetDebugLED(++step); // 0x81
PreInit();
// 1: before PXI
// 1: after PreInit
PUSH_PROFILE();
SetDebugLED(++step); // 0x82
OS_InitFIRM();
OS_EnableIrq();
OS_EnableInterrupts();
// 2: after PXI
PUSH_PROFILE();
SetDebugLED(++step); // 0x83
PostInit();
// 3: after PM_InitFIRM
// 3: after PostInit
PUSH_PROFILE();
SetDebugLED(++step); // 0x84
@ -187,25 +184,21 @@ void TwlSpMain( void )
OS_TPrintf("Failed to call FATFS_Init().\n");
goto end;
}
// 4: after FS_Init
// 4: after FATFS_Init
PUSH_PROFILE();
SetDebugLED(++step); // 0x85
PM_BackLightOn( FALSE );
// 5:
PUSH_PROFILE();
SetDebugLED(++step); // 0x86
//PM_BackLightOn( FALSE );
// 6:
PUSH_PROFILE();
SetDebugLED(++step); // 0x87
//PM_BackLightOn( FALSE );
// 7:
PUSH_PROFILE();
SetDebugLED(++step); // 0x88
@ -217,7 +210,6 @@ void TwlSpMain( void )
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_DONE_HEADER).\n");
goto end;
}
// 8: after PXI
PUSH_PROFILE();
SetDebugLED(++step); // 0x89
@ -226,13 +218,11 @@ void TwlSpMain( void )
AESi_InitKeysFIRM();
AESi_RecvSeed( rh->s.developer_encrypt );
// 9: after AESi_RecvSeed
PUSH_PROFILE();
SetDebugLED(++step); // 0x8a
PM_BackLightOn( FALSE );
// 10:
PUSH_PROFILE();
SetDebugLED(++step); // 0x8b
@ -244,9 +234,9 @@ void TwlSpMain( void )
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_DONE_STATIC).\n");
goto end;
}
// 11: after PXI
PUSH_PROFILE();
#ifdef PROFILE_ENABLE
{
int i;

View File

@ -45,6 +45,7 @@ LLIBRARIES += libes.TWL$(ARCHGEN_TYPE).a libboc.TWL$(ARCHGEN_TYPE).a
else
LLIBRARIES += ../Release/libes.TWL$(ARCHGEN_TYPE).a ../Release/libboc.TWL$(ARCHGEN_TYPE).a
endif
LLIBRARIES += liblcfg$(TWL_LIBSUFFIX).a
#----------------------------------------------------------------------------

View File

@ -16,6 +16,7 @@
*---------------------------------------------------------------------------*/
#include <firm.h>
#include <twl/aes.h>
#include <twl/lcfg.h>
#ifndef FIRM_USE_TWLSDK_KEYS
#define RSA_KEY_ADDR OSi_GetFromFirmAddr()->rsa_pubkey[0] // 鍵管理.xls参照
@ -40,7 +41,9 @@ static const u8 rsa_key[128] =
static u8 acHeap[RSA_HEAP_SIZE] __attribute__ ((aligned (32)));
static SVCSignHeapContext acPool;
#define MENU_TITLE_ID 0x000300074c4e4352ULL
#define MENU_TITLE_ID_HI 0x00030007ULL
#define MENU_TITLE_ID_LO 0x4c4e4352ULL
#define MENU_TITLE_ID (MENU_TITLE_ID_HI << 32 | MENU_TITLE_ID_LO)
/*
PROFILE_ENABLE
@ -123,6 +126,47 @@ static void PostInit(void)
FS_InitFIRM();
}
/***************************************************************
TryResolveSrl
NANDに格納された情報からランチャーSRLを解決する
***************************************************************/
static BOOL TryResolveSrl(void)
{
u64 titleId = MENU_TITLE_ID_HI << 32;
if ( !LCFG_ReadHWSecureInfo() )
{
OS_TPrintf("Failed to load HWSecureInfo.\n");
return FALSE;
}
LCFG_THW_GetLauncherGameCode( (u8*)&titleId );
// 4: after LCFG_ReadHWSecureInfo
PUSH_PROFILE();
if ( !FS_ResolveSrl( titleId ) )
{
OS_TPrintf("Failed to call FS_ResolveSrl( 0x%016llx ).\n", titleId);
return FALSE;
}
OS_TPrintf("Launcher Title ID: 0x%016llx\n", titleId);
return TRUE;
}
/***************************************************************
RetryResolveSrl
SRLを解決する
***************************************************************/
static BOOL RetryResolveSrl(void)
{
if ( !FS_ResolveSrl( MENU_TITLE_ID ) )
{
OS_TPrintf("Failed to call FS_ResolveSrl( 0x%016llx ).\n", MENU_TITLE_ID);
return FALSE;
}
OS_TPrintf("Launcher Title ID: 0x%016llx\n", MENU_TITLE_ID);
return TRUE;
}
/***************************************************************
CheckHeader
@ -211,10 +255,12 @@ void TwlMain( void )
// 0: bootrom
profile[pf_cnt++] = OS_TicksToMicroSecondsBROM32(OS_GetTick());
#endif
PreInit();
// 1: before PXI
PUSH_PROFILE();
PreInit();
#ifdef PROFILE_ENABLE
// 1: before OS_InitFIRM
profile[pf_cnt++] = OS_TicksToMicroSecondsBROM32(OS_GetTick());
#endif
OS_InitFIRM();
OS_EnableIrq();
@ -223,21 +269,18 @@ void TwlMain( void )
#ifdef PROFILE_ENABLE
OS_InitTick();
#endif
// 2: after PXI
// 2: after OS_InitTick
PUSH_PROFILE();
PostInit();
// 3: after PostInit
PUSH_PROFILE();
if ( !FS_ResolveSrl( MENU_TITLE_ID ) )
if ( !TryResolveSrl() && !RetryResolveSrl() )
{
OS_TPrintf("Failed to call FS_ResolveSrl( 0x%016llx ).\n", MENU_TITLE_ID);
goto end;
}
// 4: after FS_ResolveSrl
// 5: after FS_ResolveSrl
PUSH_PROFILE();
if ( !FS_OpenSrl( &file ) )
@ -245,8 +288,7 @@ void TwlMain( void )
OS_TPrintf("Failed to call FS_OpenSrl().\n");
goto end;
}
// 5: after FS_OpenSrl
// 6: after FS_OpenSrl
PUSH_PROFILE();
if ( !FS_LoadSrlHeader( &file, &acPool, RSA_KEY_ADDR ) || !CheckHeader() )
@ -254,18 +296,15 @@ void TwlMain( void )
OS_TPrintf("Failed to call FS_LoadSrlHeader() and/or CheckHeader().\n");
goto end;
}
// 6: after FS_LoadSrlHeader
// 7: after FS_LoadSrlHeader
PUSH_PROFILE();
PXI_NotifyID( FIRM_PXI_ID_DONE_HEADER );
// 7: after PXI
// 8: after PXI
PUSH_PROFILE();
AESi_SendSeed( FS_GetAesKeySeed() );
// 8: after AESi_SendSeed
// 9: after AESi_SendSeed
PUSH_PROFILE();
if ( !FS_LoadSrlStatic( &file ) )
@ -273,14 +312,13 @@ void TwlMain( void )
OS_TPrintf("Failed to call FS_LoadSrlStatic().\n");
goto end;
}
// 9: after FS_LoadSrlStatic
// 10: after FS_LoadSrlStatic
PUSH_PROFILE();
PXI_NotifyID( FIRM_PXI_ID_DONE_STATIC );
// 10: after PXI
// 11: after PXI
PUSH_PROFILE();
#ifdef PROFILE_ENABLE
{
int i;

View File

@ -153,26 +153,28 @@ void TwlSpMain( void )
{
int fd; // menu file descriptor
#ifdef PROFILE_ENABLE
// 0: bootrom
profile[pf_cnt++] = OS_TicksToMicroSecondsBROM32(OS_GetTick());
#endif
InitDebugLED();
SetDebugLED(++step); // 0x81
PreInit();
// 0: before PXI
// 1: after PreInit
PUSH_PROFILE();
SetDebugLED(++step); // 0x82
OS_InitFIRM();
OS_EnableIrq();
OS_EnableInterrupts();
// 1: after PXI
// 2: after OS_InitFIRM
PUSH_PROFILE();
SetDebugLED(++step); // 0x83
PostInit();
// 2: after PM_InitFIRM
// 3: after PostInit
PUSH_PROFILE();
SetDebugLED(++step); // 0x84
@ -184,8 +186,7 @@ void TwlSpMain( void )
OS_TPrintf("Failed to call FATFS_Init().\n");
goto end;
}
// 3: after FS_Init
// 4: after FATFS_Init
PUSH_PROFILE();
SetDebugLED(++step); // 0x85
@ -196,8 +197,7 @@ void TwlSpMain( void )
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_SET_PATH).\n");
goto end;
}
// 4: after PXI
// 5: after PXI
PUSH_PROFILE();
SetDebugLED(++step); // 0x86
@ -208,8 +208,7 @@ void TwlSpMain( void )
OS_TPrintf("Failed to call FS_OpenSrl().\n");
goto end;
}
// 5: after FS_OpenSrl
// 6: after FS_OpenSrl
PUSH_PROFILE();
SetDebugLED(++step); // 0x87
@ -220,8 +219,7 @@ void TwlSpMain( void )
OS_TPrintf("Failed to call FS_LoadHeader().\n");
goto end;
}
// 6: after FS_LoadHeader
// 7: after FS_LoadHeader
PUSH_PROFILE();
SetDebugLED(++step); // 0x88
@ -232,8 +230,7 @@ void TwlSpMain( void )
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_DONE_HEADER).\n");
goto end;
}
// 7: after PXI
// 8: after PXI
PUSH_PROFILE();
SetDebugLED(++step); // 0x89
@ -241,8 +238,7 @@ void TwlSpMain( void )
AESi_InitKeysFIRM();
AESi_RecvSeed( rh->s.developer_encrypt );
// 8: after AESi_RecvSeed
// 9: after AESi_RecvSeed
PUSH_PROFILE();
SetDebugLED(++step); // 0x8a
@ -253,8 +249,7 @@ void TwlSpMain( void )
OS_TPrintf("Failed to call FS_LoadStatic().\n");
goto end;
}
// 9: after FS_LoadStatic
// 10: after FS_LoadStatic
PUSH_PROFILE();
SetDebugLED(++step); // 0x8b
@ -265,9 +260,9 @@ void TwlSpMain( void )
OS_TPrintf("PXI_RecvID() was received invalid value (!=FIRM_PXI_ID_DONE_STATIC).\n");
goto end;
}
// 10: after PXI
// 11: after PXI
PUSH_PROFILE();
#ifdef PROFILE_ENABLE
{
int i;

View File

@ -211,10 +211,16 @@ static void EraseAll(void)
void TwlMain( void )
{
PreInit();
#ifdef PROFILE_ENABLE
// 0: bootrom
profile[pf_cnt++] = OS_TicksToMicroSecondsBROM32(OS_GetTick());
#endif
// 0: before PXI
PUSH_PROFILE();
PreInit();
#ifdef PROFILE_ENABLE
// 1: before Init
profile[pf_cnt++] = OS_TicksToMicroSecondsBROM32(OS_GetTick());
#endif
OS_InitFIRM();
OS_EnableIrq();
@ -223,12 +229,11 @@ void TwlMain( void )
#ifdef PROFILE_ENABLE
OS_InitTick();
#endif
// 1: after PXI
// 2: after OS_InitTick
PUSH_PROFILE();
PostInit();
// 2: after PostInit
// 3: after PostInit
PUSH_PROFILE();
switch ( PAD_Read() & PAD_KEYPORT_MASK )
@ -252,13 +257,11 @@ void TwlMain( void )
OS_TPrintf("Unknown pad pattern (%X).\n", PAD_Read() & PAD_KEYPORT_MASK);
goto end;
}
// 3: after FS_ResolveSrl
// 4: after FS_ResolveSrl
PUSH_PROFILE();
PXI_NotifyID( FIRM_PXI_ID_SET_PATH );
// 4: after PXI
// 5: after PXI
PUSH_PROFILE();
if ( !FS_LoadHeader(&acPool, RSA_KEY_ADDR ) || !CheckHeader() )
@ -266,19 +269,16 @@ void TwlMain( void )
OS_TPrintf("Failed to call FS_LoadHeader() and/or CheckHeader().\n");
goto end;
}
// 5: after FS_LoadHeader
// 6: after FS_LoadHeader
PUSH_PROFILE();
PXI_NotifyID( FIRM_PXI_ID_DONE_HEADER );
// 6: after PXI
// 7: after PXI
PUSH_PROFILE();
AESi_SendSeed( FS_GetAesKeySeed() );
FS_DeleteAesKeySeed();
// 7: after AESi_SendSeed
// 8: after AESi_SendSeed
PUSH_PROFILE();
if ( !FS_LoadStatic() )
@ -286,14 +286,13 @@ void TwlMain( void )
OS_TPrintf("Failed to call FS_LoadStatic().\n");
goto end;
}
// 8: after FS_LoadStatic
// 9: after FS_LoadStatic
PUSH_PROFILE();
PXI_NotifyID( FIRM_PXI_ID_DONE_STATIC );
// 9: after PXI
// 10: after PXI
PUSH_PROFILE();
#ifdef PROFILE_ENABLE
{
int i;