・起動時にカードが挿入されていた場合の1発目の活線挿抜処理内でカードリージョンチェックを

行う際に、ARM9側でまだ本体リージョンのリードが完了していないタイミングがあり、リージョン
 不一致でも、カードが認識されることがあったのを修正。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2218 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yosiokat 2008-08-21 08:05:43 +00:00
parent 1a008364d7
commit a5e39e68c5
3 changed files with 22 additions and 26 deletions

View File

@ -28,6 +28,7 @@ TARGET_BIN ?= $(TARGET_FIRM_BIN)
#
override TARGET_PLATFORM := TWL
override TWL_ARCHGEN := LIMITED
override TWL_CODEGEN := ARM
override TWL_MEMSIZE := 16M
#----------------------------------------------------------------------------

View File

@ -433,16 +433,6 @@ static HotSwState LoadCardData(void)
}
if(s_cbData.pBootSegBuf->rh.s.platform_code & PLATFORM_CODE_FLAG_TWL){
// デバッガでリージョン違いのアプリを読んだ場合、正常に動作しなくなるのを回避するため
u64 card_title_id = s_cbData.pBootSegBuf->rh.s.titleID;
u64 my_title_id = ((ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF)->titleID;
if(!s_debuggerFlg || card_title_id != my_title_id){
// リージョンチェック
if( !UTL_CheckAppRegion( s_cbData.pBootSegBuf->rh.s.card_region_bitmap ) ) {
retval = (retval == HOTSW_SUCCESS) ? HOWSW_REGION_CHECK_ERROR : retval;
}
}
s_cbData.twlFlg = TRUE;
}

View File

@ -288,6 +288,7 @@ TitleProperty *SYSM_GetCardTitleList( BOOL *changed )
if( SYSMi_GetWork()->flags.hotsw.isCardStateChanged ) {
u16 id = (u16)OS_GetLockID();
const ROM_Header_Short *pROMH_bak = (ROM_Header_Short *)SYSM_CARD_ROM_HEADER_BAK;
MI_CpuClear32( pTitleList_Card, sizeof(TitleProperty) );
@ -295,23 +296,27 @@ TitleProperty *SYSM_GetCardTitleList( BOOL *changed )
// ROMヘッダバッファのコピー
if( SYSM_IsExistCard() ) {
// ROMヘッダのリード
(void)SYSMi_CopyCardRomHeader();
// バナーデータのリード
(void)SYSMi_CopyCardBanner();
pTitleList_Card->pBanner = &s_card_bannerBuf;
AMN_stepBannerAnime(0, TRUE); // バナーカウンタセットしなおし
pTitleList_Card->flags.isValid = TRUE;
pTitleList_Card->flags.isAppLoadCompleted = FALSE;
pTitleList_Card->flags.isAppRelocate = TRUE;
MI_CpuCopy8( SYSM_GetCardRomHeader(), AMN_getRomHeaderList(), sizeof(ROM_Header_Short) );
if( ( pROMH_bak->platform_code & PLATFORM_CODE_FLAG_TWL ) && !UTL_CheckAppRegion( pROMH_bak->card_region_bitmap ) ) {
// TWLアプリでカードリージョンが本体と一致しないものは、カードを認識しない。
OS_TPrintf( "Region Check NG : %llx\n", pROMH_bak->titleID );
MI_CpuClearFast( (void *)SYSM_APP_ROM_HEADER_BUF, SYSM_APP_ROM_HEADER_SIZE ); // ROMヘッダのクリア
MI_CpuClearFast( &s_card_bannerBuf, sizeof(TWLBannerFile) ); // バナーデータのクリア
}else {
// ROMヘッダのリード
(void)SYSMi_CopyCardRomHeader();
// バナーデータのリード
(void)SYSMi_CopyCardBanner();
pTitleList_Card->pBanner = &s_card_bannerBuf;
AMN_stepBannerAnime(0, TRUE); // バナーカウンタセットしなおし
pTitleList_Card->flags.isValid = TRUE;
pTitleList_Card->flags.isAppLoadCompleted = FALSE;
pTitleList_Card->flags.isAppRelocate = TRUE;
MI_CpuCopy8( SYSM_GetCardRomHeader(), AMN_getRomHeaderList(), sizeof(ROM_Header_Short) );
}
}else {
// ROMヘッダのクリア
MI_CpuClearFast( (void *)SYSM_APP_ROM_HEADER_BUF, SYSM_APP_ROM_HEADER_SIZE );
// バナーデータのクリア
MI_CpuClearFast( &s_card_bannerBuf, sizeof(TWLBannerFile) );
MI_CpuClearFast( (void *)SYSM_APP_ROM_HEADER_BUF, SYSM_APP_ROM_HEADER_SIZE ); // ROMヘッダのクリア
MI_CpuClearFast( &s_card_bannerBuf, sizeof(TWLBannerFile) ); // バナーデータのクリア
}
SYSMi_GetWork()->flags.hotsw.isCardStateChanged = FALSE; // カード情報更新フラグを落とす