・LCFGデータのメインメモリへの展開処理を修正。

・TWL本体設定データのリード&リカバリ処理の修正。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/branches/20080626_SDK500fc_plus5_branch@1742 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yosiokat 2008-06-27 09:01:49 +00:00
parent 4cc2b8dbf7
commit 3c0cde169d

View File

@ -29,7 +29,8 @@ extern void LCFG_VerifyAndRecoveryNTRSettings( void );
// function's prototype------------------------------------------------------- // function's prototype-------------------------------------------------------
void _start_AutoloadDoneCallback(void* argv[]); void _start_AutoloadDoneCallback(void* argv[]);
static void SYSMi_CopyLCFGData( u32 dst_addr ); static void SYSMi_CopyLCFGDataHWInfo( u32 dst_addr );
static void SYSMi_CopyLCFGDataSettings( void );
static TitleProperty *SYSMi_CheckDebuggerBannerViewModeBoot( void ); static TitleProperty *SYSMi_CheckDebuggerBannerViewModeBoot( void );
static TitleProperty *SYSMi_CheckShortcutBoot1( void ); static TitleProperty *SYSMi_CheckShortcutBoot1( void );
static TitleProperty *SYSMi_CheckShortcutBoot2( void ); static TitleProperty *SYSMi_CheckShortcutBoot2( void );
@ -186,21 +187,34 @@ TitleProperty *SYSM_ReadParameters( void )
UTL_SetFatalError( FATAL_ERROR_HWINFO_SECURE ); UTL_SetFatalError( FATAL_ERROR_HWINFO_SECURE );
} }
//-----------------------------------------------------
// システム領域にHWInfoをコピー
//----------------------------------------------------- //-----------------------------------------------------
// NTRカードアプリARM9コードのロード領域とメモリがかち合うが、先頭0x4000はセキュア領域で別バッファに格納されるので、
// ここでこれらのパラメータをロードしても大丈夫。
SYSMi_CopyLCFGDataHWInfo( (u32)s_lcfgBuffer );
//-----------------------------------------------------
// 本体設定データのリード※必ずHWSecureInforリード後に実行すること。LanguageBitmapを判定に使うため // 本体設定データのリード※必ずHWSecureInforリード後に実行すること。LanguageBitmapを判定に使うため
//----------------------------------------------------- //-----------------------------------------------------
{ {
u8 *pBuffer = SYSM_Alloc( LCFG_READ_TEMP ); u8 *pBuffer = SYSM_Alloc( LCFG_READ_TEMP );
if( pBuffer ) { if( pBuffer ) {
if( !LCFG_ReadTWLSettings( (u8 (*)[LCFG_READ_TEMP])pBuffer ) ) { // NANDからTWL本体設定データをリード // NANDからTWL本体設定データをリード
// リード失敗時は、ファイルをリカバリ BOOL isRead = LCFG_ReadTWLSettings( (u8 (*)[LCFG_READ_TEMP])pBuffer );
if( LCFG_RecoveryTWLSettings() ) {
// リカバリ成功時は、フラッシュ壊れシーケンスへ // リード失敗ファイルが存在する場合は、ファイルをリカバリ
// 関数内で、LCFGのisBrokenTWLSettingsフラグがセットされる。 if( LCFG_RecoveryTWLSettings() ) {
if( isRead ) {
// ミラーデータのうち、一方がリードできていたなら何もしない。
}else { }else {
// リカバリ失敗時は、FALTALエラー // リードに完全に失敗していた場合は、フラッシュ壊れシーケンスへ。
UTL_SetFatalError( FATAL_ERROR_TWLSETTINGS ); LCFG_TSD_SetFlagFinishedBrokenTWLSettings( FALSE );
(void)LCFG_WriteTWLSettings( (u8 (*)[ LCFG_WRITE_TEMP ] )pBuffer ); // LCFG_READ_TEMP > LCFG_WRITE_TEMP なので、pBufferをそのまま流用
} }
}else {
// リカバリ失敗時は、FALTALエラー
UTL_SetFatalError( FATAL_ERROR_TWLSETTINGS );
} }
SYSM_Free( pBuffer ); SYSM_Free( pBuffer );
}else { }else {
@ -211,11 +225,11 @@ TitleProperty *SYSM_ReadParameters( void )
} }
//----------------------------------------------------- //-----------------------------------------------------
// システム領域に本体設定などをコピー // システム領域に本体設定をコピー
//----------------------------------------------------- //-----------------------------------------------------
// NTRカードアプリARM9コードのロード領域とメモリがかち合うが、先頭0x4000はセキュア領域で別バッファに格納されるので、 // NTRカードアプリARM9コードのロード領域とメモリがかち合うが、先頭0x4000はセキュア領域で別バッファに格納されるので、
// ここでこれらのパラメータをロードしても大丈夫。 // ここでこれらのパラメータをロードしても大丈夫。
SYSMi_CopyLCFGData( (u32)s_lcfgBuffer ); SYSMi_CopyLCFGDataSettings();
//----------------------------------------------------- //-----------------------------------------------------
// 無線ON/OFFフラグをもとに、LEDを設定する。 // 無線ON/OFFフラグをもとに、LEDを設定する。
@ -328,8 +342,8 @@ TitleProperty *SYSM_ReadParameters( void )
} }
// 本体設定データなどのメモリ展開。 // HWInfoのメモリ展開。
static void SYSMi_CopyLCFGData( u32 dst_addr ) static void SYSMi_CopyLCFGDataHWInfo( u32 dst_addr )
{ {
// HotStart時にも保持する必要のあるデータをランチャー用に移動するプリロードパラメータバッファにコピー。 // HotStart時にも保持する必要のあるデータをランチャー用に移動するプリロードパラメータバッファにコピー。
MI_CpuCopy8( (void *)HW_PARAM_WIRELESS_FIRMWARE_DATA, (void *)(dst_addr + HW_PARAM_TWL_SETTINGS_DATA_SIZE), MI_CpuCopy8( (void *)HW_PARAM_WIRELESS_FIRMWARE_DATA, (void *)(dst_addr + HW_PARAM_TWL_SETTINGS_DATA_SIZE),
@ -338,10 +352,17 @@ static void SYSMi_CopyLCFGData( u32 dst_addr )
// プリロードパラメータアドレスをランチャー向けに変更。 // プリロードパラメータアドレスをランチャー向けに変更。
*(u32 *)HW_PRELOAD_PARAMETER_ADDR = dst_addr; *(u32 *)HW_PRELOAD_PARAMETER_ADDR = dst_addr;
// 本体設定データ、HWーマル情報、HWセキュア情報をメモリに展開しておく // HWーマル情報、HWセキュア情報をメモリに展開しておく
MI_CpuCopyFast( LCFGi_GetTSD(), (void *)HW_PARAM_TWL_SETTINGS_DATA, sizeof(LCFGTWLSettingsData) );
MI_CpuCopyFast( LCFGi_GetHWN(), (void *)HW_PARAM_TWL_HW_NORMAL_INFO, sizeof(LCFGTWLHWNormalInfo) ); MI_CpuCopyFast( LCFGi_GetHWN(), (void *)HW_PARAM_TWL_HW_NORMAL_INFO, sizeof(LCFGTWLHWNormalInfo) );
MI_CpuCopyFast( LCFGi_GetHWS(), (void *)HW_HW_SECURE_INFO, HW_HW_SECURE_INFO_END - HW_HW_SECURE_INFO ); MI_CpuCopyFast( LCFGi_GetHWS(), (void *)HW_HW_SECURE_INFO, HW_HW_SECURE_INFO_END - HW_HW_SECURE_INFO );
}
// 本体設定データのメモリ展開。
static void SYSMi_CopyLCFGDataSettings( void )
{
// 本体設定データ
MI_CpuCopyFast( LCFGi_GetTSD(), (void *)HW_PARAM_TWL_SETTINGS_DATA, sizeof(LCFGTWLSettingsData) );
// 本体設定データのLauncherStatus部分をクリアしておく // 本体設定データのLauncherStatus部分をクリアしておく
{ {