diff --git a/build/components/hyena.TWL/src/main.c b/build/components/hyena.TWL/src/main.c index 62b08e50..f1987024 100644 --- a/build/components/hyena.TWL/src/main.c +++ b/build/components/hyena.TWL/src/main.c @@ -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) ); diff --git a/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c b/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c index c16893fd..857af23c 100644 --- a/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c +++ b/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c @@ -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; diff --git a/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c b/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c index 51680990..c16b1cfb 100644 --- a/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c +++ b/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c @@ -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 ); } } diff --git a/build/systemMenu_RED/MachineSettings/ARM9/src/MachineSetting.c b/build/systemMenu_RED/MachineSettings/ARM9/src/MachineSetting.c index eb85d350..9e8d7a7d 100644 --- a/build/systemMenu_RED/MachineSettings/ARM9/src/MachineSetting.c +++ b/build/systemMenu_RED/MachineSettings/ARM9/src/MachineSetting.c @@ -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 ) {