・MachineSetting.cにリセット処理を暫定的に追加(動作正常化後に別途ライブラリ化予定)

・bootAPI.cを最新版rebootライブラリに対応(古いrebootライブラリではビルド通りません)
・hyenaのHot/Coldスタート判定の最初でマイコンフリーレジスタの値を取得しにいくように変更

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@278 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yoshida_teruhisa 2007-11-28 01:38:08 +00:00
parent 143a61fbd7
commit 7b7a3f0265
4 changed files with 34 additions and 7 deletions

View File

@ -193,6 +193,19 @@ TwlSpMain(void)
// Hot/Coldスタート判定およびリセットパラメータのリード
static void ReadResetParameter( void )
{
MCU_GetFreeRegisters( 0, (u8 *)HW_RESET_PARAMETER_BUF, 1 );
/*
// ダイレクトブート用設定のテストコード
u8 data = 1;
SYSMi_GetMCUFreeRegisterValue() = data; // マイコンフリーレジスタ取得場所にホットスタートフラグをセット
SYSMi_GetResetParamAddr()->body.v1.bootTitleID = 0x000100015445534d;
SYSMi_GetResetParamAddr()->body.v1.flags = (BootFlags){TRUE, 0, TRUE, FALSE, FALSE, FALSE, 0};
MI_CpuCopyFast( SYSM_RESET_PARAM_MAGIC_CODE, (char *)&SYSMi_GetResetParamAddr()->header.magicCode, SYSM_RESET_PARAM_MAGIC_CODE_LEN);
SYSMi_GetResetParamAddr()->header.bodyLength = sizeof(ResetParamBody);
SYSMi_GetResetParamAddr()->header.crc16 = SVC_GetCRC16( 65535, &SYSMi_GetResetParamAddr()->body, SYSMi_GetResetParamAddr()->header.bodyLength );
*/
// Hot/Coldスタート判定
#ifdef SDK_FINALROM
if( SYSMi_GetMCUFreeRegisterValue() == 0 ) // マイコンフリーレジスタ値が"0"ならColdスタート
@ -201,7 +214,7 @@ static void ReadResetParameter( void )
#endif
{
u8 data = 1;
MCU_SetFreeRegisters( 0, &data, 1 ); // マイコンフリーレジスタにホットスタートフラグをセット
MCU_SetFreeRegisters( 0, &data, 1 );
SYSMi_GetWork()->isHotStart = FALSE;
}else {
SYSMi_GetWork()->isHotStart = TRUE;
@ -210,7 +223,7 @@ static void ReadResetParameter( void )
SYSM_RESET_PARAM_MAGIC_CODE,
SYSM_RESET_PARAM_MAGIC_CODE_LEN ) == 0 ) &&
( SYSMi_GetResetParamAddr()->header.bodyLength > 0 ) &&
( SVC_GetCRC16( 65535, &SYSMi_GetResetParamAddr()->body, SYSMi_GetResetParamAddr()->header.bodyLength ) )
( SYSMi_GetResetParamAddr()->header.crc16 == SVC_GetCRC16( 65535, &SYSMi_GetResetParamAddr()->body, SYSMi_GetResetParamAddr()->header.bodyLength ) )
) {
// リセットパラメータが有効なら、ワークに退避
MI_CpuCopy32 ( SYSMi_GetResetParamAddr(), &SYSMi_GetWork()->resetParam, sizeof(ResetParam) );

View File

@ -77,7 +77,8 @@ BOOL BOOT_WaitStart( void )
HW_PXI_SIGNAL_PARAM_ARM9, HW_MAIN_MEM_SYSTEM_END - HW_PXI_SIGNAL_PARAM_ARM9,
NULL
};
OS_Boot( (void *)*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x34), clr_list );
// [TODO]起動するターゲットの種類を指定する必要あり
OS_Boot( (void *)*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x34), clr_list, REBOOT_TARGET_NAND_APP);
}
}
return FALSE;

View File

@ -102,7 +102,8 @@ void BOOT_Ready( void )
//HW_DTCM, HW_DTCM_SIZE,
NULL
};
OS_Boot( (void *)*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x24), clr_list );
// [TODO]起動するターゲットの種類を指定する必要あり
OS_Boot( (void *)*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x24), clr_list, REBOOT_TARGET_NAND_APP );
}
}

View File

@ -182,6 +182,19 @@ void MachineSettingInit( void )
g_pNowProcess = MachineSettingMain;
}
static void ResetHardware( NAMTitleId id, BootFlags *flag)
{
// リセットパラメータの設定
SYSMi_GetResetParamAddr()->body.v1.bootTitleID = id;
//SYSMi_GetResetParamAddr()->body.v1.flags = *flag;
SYSMi_GetResetParamAddr()->body.v1.flags = (BootFlags){TRUE, 0, TRUE, FALSE, FALSE, FALSE, 0};
MI_CpuCopyFast( SYSM_RESET_PARAM_MAGIC_CODE, (char *)&SYSMi_GetResetParamAddr()->header.magicCode, SYSM_RESET_PARAM_MAGIC_CODE_LEN);
SYSMi_GetResetParamAddr()->header.bodyLength = sizeof(ResetParamBody);
SYSMi_GetResetParamAddr()->header.crc16 = SVC_GetCRC16( 65535, &SYSMi_GetResetParamAddr()->body, SYSMi_GetResetParamAddr()->header.bodyLength );
// リセット命令発行
PM_ForceToResetHardware();
}
// メインメニュー
int MachineSettingMain( void )
@ -206,11 +219,10 @@ int MachineSettingMain( void )
tp_select = SelectMenuByTP( &s_csr, &s_settingParam );
DrawMenu( s_csr, &s_settingParam );
#if 0
if( pad.trg & PAD_BUTTON_START ) {
PM_ForceToResetHardware();
BootFlags tempflag = {TRUE, 0, TRUE, FALSE, FALSE, FALSE, 0};
ResetHardware(NULL, &tempflag);
}
#endif
if( ( pad.trg & PAD_BUTTON_A ) || ( tp_select ) ) { // メニュー項目への分岐
if( s_settingPos[ s_csr ].enable ) {