mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
・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:
parent
143a61fbd7
commit
7b7a3f0265
@ -193,6 +193,19 @@ TwlSpMain(void)
|
|||||||
// Hot/Coldスタート判定およびリセットパラメータのリード
|
// Hot/Coldスタート判定およびリセットパラメータのリード
|
||||||
static void ReadResetParameter( void )
|
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スタート判定
|
// Hot/Coldスタート判定
|
||||||
#ifdef SDK_FINALROM
|
#ifdef SDK_FINALROM
|
||||||
if( SYSMi_GetMCUFreeRegisterValue() == 0 ) // マイコンフリーレジスタ値が"0"ならColdスタート
|
if( SYSMi_GetMCUFreeRegisterValue() == 0 ) // マイコンフリーレジスタ値が"0"ならColdスタート
|
||||||
@ -201,7 +214,7 @@ static void ReadResetParameter( void )
|
|||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
u8 data = 1;
|
u8 data = 1;
|
||||||
MCU_SetFreeRegisters( 0, &data, 1 ); // マイコンフリーレジスタにホットスタートフラグをセット
|
MCU_SetFreeRegisters( 0, &data, 1 );
|
||||||
SYSMi_GetWork()->isHotStart = FALSE;
|
SYSMi_GetWork()->isHotStart = FALSE;
|
||||||
}else {
|
}else {
|
||||||
SYSMi_GetWork()->isHotStart = TRUE;
|
SYSMi_GetWork()->isHotStart = TRUE;
|
||||||
@ -210,7 +223,7 @@ static void ReadResetParameter( void )
|
|||||||
SYSM_RESET_PARAM_MAGIC_CODE,
|
SYSM_RESET_PARAM_MAGIC_CODE,
|
||||||
SYSM_RESET_PARAM_MAGIC_CODE_LEN ) == 0 ) &&
|
SYSM_RESET_PARAM_MAGIC_CODE_LEN ) == 0 ) &&
|
||||||
( SYSMi_GetResetParamAddr()->header.bodyLength > 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) );
|
MI_CpuCopy32 ( SYSMi_GetResetParamAddr(), &SYSMi_GetWork()->resetParam, sizeof(ResetParam) );
|
||||||
|
|||||||
@ -77,7 +77,8 @@ BOOL BOOT_WaitStart( void )
|
|||||||
HW_PXI_SIGNAL_PARAM_ARM9, HW_MAIN_MEM_SYSTEM_END - HW_PXI_SIGNAL_PARAM_ARM9,
|
HW_PXI_SIGNAL_PARAM_ARM9, HW_MAIN_MEM_SYSTEM_END - HW_PXI_SIGNAL_PARAM_ARM9,
|
||||||
NULL
|
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;
|
return FALSE;
|
||||||
|
|||||||
@ -102,7 +102,8 @@ void BOOT_Ready( void )
|
|||||||
//HW_DTCM, HW_DTCM_SIZE,
|
//HW_DTCM, HW_DTCM_SIZE,
|
||||||
NULL
|
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 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -182,6 +182,19 @@ void MachineSettingInit( void )
|
|||||||
g_pNowProcess = MachineSettingMain;
|
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 )
|
int MachineSettingMain( void )
|
||||||
@ -206,11 +219,10 @@ int MachineSettingMain( void )
|
|||||||
tp_select = SelectMenuByTP( &s_csr, &s_settingParam );
|
tp_select = SelectMenuByTP( &s_csr, &s_settingParam );
|
||||||
DrawMenu( s_csr, &s_settingParam );
|
DrawMenu( s_csr, &s_settingParam );
|
||||||
|
|
||||||
#if 0
|
|
||||||
if( pad.trg & PAD_BUTTON_START ) {
|
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( ( pad.trg & PAD_BUTTON_A ) || ( tp_select ) ) { // メニュー項目への分岐
|
||||||
if( s_settingPos[ s_csr ].enable ) {
|
if( s_settingPos[ s_csr ].enable ) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user