#ifdef SDK_SUPPORT_PMIC_2 忘れ

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@845 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yutaka 2008-03-07 02:25:04 +00:00
parent 2baabefc33
commit 4c9d8c4105

View File

@ -37,7 +37,7 @@ void (*SYSMi_Free )( void *ptr );
#define SYSM_DEBUG_ #define SYSM_DEBUG_
#ifdef SYSM_DEBUG_ #ifdef SYSM_DEBUG_
SYSM_work *pSysm; // デバッガでのSYSMワークのウォッチ用 SYSM_work *pSysm; // デバッガでのSYSMワークのウォッチ用
ROM_Header_Short *pRomHeader; ROM_Header_Short *pRomHeader;
#endif #endif
// static variable------------------------------------------------------------- // static variable-------------------------------------------------------------
@ -56,67 +56,67 @@ static TitleProperty s_bootTitleBuf;
void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) ) void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) )
{ {
#ifdef SYSM_DEBUG_ #ifdef SYSM_DEBUG_
pSysm = SYSMi_GetWork(); pSysm = SYSMi_GetWork();
pRomHeader = (ROM_Header_Short *)0x027fc000; pRomHeader = (ROM_Header_Short *)0x027fc000;
#endif /* SYSM_DEBUG_ */ #endif /* SYSM_DEBUG_ */
// ARM7で使用する分の鍵を渡す // ARM7で使用する分の鍵を渡す
SYSMi_SendKeysToARM7(); SYSMi_SendKeysToARM7();
// ランチャーのマウント情報セット // ランチャーのマウント情報セット
SYSMi_SetLauncherMountInfo(); SYSMi_SetLauncherMountInfo();
// ARM7コンポーネント用プロテクションユニット領域変更 // ARM7コンポーネント用プロテクションユニット領域変更
OS_SetProtectionRegion( 2, SYSM_OWN_ARM7_MMEM_ADDR, 512KB ); OS_SetProtectionRegion( 2, SYSM_OWN_ARM7_MMEM_ADDR, 512KB );
SYSM_SetAllocFunc( pAlloc, pFree ); SYSM_SetAllocFunc( pAlloc, pFree );
// PXI_SetFifoRecvCallback( SYSMENU_PXI_FIFO_TAG, SYSMi_PXIFifoRecvCallback ); // PXI_SetFifoRecvCallback( SYSMENU_PXI_FIFO_TAG, SYSMi_PXIFifoRecvCallback );
reg_OS_PAUSE |= REG_OS_PAUSE_CHK_MASK; // PAUSEレジスタのチェックフラグのセット reg_OS_PAUSE |= REG_OS_PAUSE_CHK_MASK; // PAUSEレジスタのチェックフラグのセット
} }
// アリーナ再設定 // アリーナ再設定
void SYSM_SetArena( void ) void SYSM_SetArena( void )
{ {
// ARM9用ブートコード配置のため、アリーナHi位置を下げる // ARM9用ブートコード配置のため、アリーナHi位置を下げる
OS_SetMainArenaHi( (void *)SYSM_OWN_ARM9_MMEM_ADDR_END ); OS_SetMainArenaHi( (void *)SYSM_OWN_ARM9_MMEM_ADDR_END );
} }
// システムメニューライブラリ用メモリアロケータの設定 // システムメニューライブラリ用メモリアロケータの設定
void SYSM_SetAllocFunc( void *(*pAlloc)(u32), void (*pFree)(void*) ) void SYSM_SetAllocFunc( void *(*pAlloc)(u32), void (*pFree)(void*) )
{ {
SYSMi_Alloc = pAlloc; SYSMi_Alloc = pAlloc;
SYSMi_Free = pFree; SYSMi_Free = pFree;
} }
// メモリAlloc // メモリAlloc
void *SYSM_Alloc( u32 size ) void *SYSM_Alloc( u32 size )
{ {
void *p = SYSMi_Alloc( size ); void *p = SYSMi_Alloc( size );
OS_TPrintf( "SYSM_Alloc : %08x %xbytes\n", p, size ); OS_TPrintf( "SYSM_Alloc : %08x %xbytes\n", p, size );
return p; return p;
} }
// メモリFree // メモリFree
void SYSM_Free( void *ptr ) void SYSM_Free( void *ptr )
{ {
OS_TPrintf( "SYSM_Free : %08x\n", ptr ); OS_TPrintf( "SYSM_Free : %08x\n", ptr );
SYSMi_Free( ptr ); SYSMi_Free( ptr );
} }
// ARM7で使用する分の鍵を渡す // ARM7で使用する分の鍵を渡す
void SYSMi_SendKeysToARM7( void ) void SYSMi_SendKeysToARM7( void )
{ {
MI_SetWramBank(MI_WRAM_ARM9_ALL); MI_SetWramBank(MI_WRAM_ARM9_ALL);
// DS互換BlowfishテーブルをARM7へ渡す // DS互換BlowfishテーブルをARM7へ渡す
MI_CpuCopyFast( &((OSFromFirm9Buf *)HW_FIRM_FROM_FIRM_BUF)->ds_blowfish, (void *)HW_WRAM_0, sizeof(BLOWFISH_CTX) ); MI_CpuCopyFast( &((OSFromFirm9Buf *)HW_FIRM_FROM_FIRM_BUF)->ds_blowfish, (void *)HW_WRAM_0, sizeof(BLOWFISH_CTX) );
MI_SetWramBank(MI_WRAM_ARM7_ALL); MI_SetWramBank(MI_WRAM_ARM7_ALL);
} }
@ -129,166 +129,168 @@ void SYSMi_SendKeysToARM7( void )
// パラメータリード // パラメータリード
TitleProperty *SYSM_ReadParameters( void ) TitleProperty *SYSM_ReadParameters( void )
{ {
TitleProperty *pBootTitle = NULL; TitleProperty *pBootTitle = NULL;
u8 brightness = LCFG_TWL_BACKLIGHT_LEVEL_MAX; u8 brightness = LCFG_TWL_BACKLIGHT_LEVEL_MAX;
// ARM7のリセットパラメータ取得が完了するのを待つ // ARM7のリセットパラメータ取得が完了するのを待つ
while( !SYSMi_GetWork()->flags.common.isARM9Start ) { while( !SYSMi_GetWork()->flags.common.isARM9Start ) {
SVC_WaitByLoop( 0x1000 ); SVC_WaitByLoop( 0x1000 );
} }
//#ifdef DEBUG_USED_CARD_SLOT_B_ //#ifdef DEBUG_USED_CARD_SLOT_B_
// ARM7のカードチェック完了を待つ // ARM7のカードチェック完了を待つ
while( !SYSMi_GetWork()->flags.hotsw.is1stCardChecked ) { while( !SYSMi_GetWork()->flags.hotsw.is1stCardChecked ) {
SVC_WaitByLoop( 0x1000 ); SVC_WaitByLoop( 0x1000 );
} }
//#endif //#endif
//----------------------------------------------------- //-----------------------------------------------------
// リセットパラメータの判定リセットパラメータが有効かどうかは、ARM7でやってくれている // リセットパラメータの判定リセットパラメータが有効かどうかは、ARM7でやってくれている
//----------------------------------------------------- //-----------------------------------------------------
{ {
if( SYSM_GetLauncherParamBody()->v1.flags.isLogoSkip || // ロゴデモスキップ? if( SYSM_GetLauncherParamBody()->v1.flags.isLogoSkip || // ロゴデモスキップ?
SYSMi_IsDebuggerBannerViewMode() ) { SYSMi_IsDebuggerBannerViewMode() ) {
SYSM_SetLogoDemoSkip( TRUE ); SYSM_SetLogoDemoSkip( TRUE );
} }
if( SYSM_GetLauncherParamBody()->v1.bootTitleID ) { // アプリ直接起動の指定があったらロゴデモを飛ばして指定アプリ起動 if( SYSM_GetLauncherParamBody()->v1.bootTitleID ) { // アプリ直接起動の指定があったらロゴデモを飛ばして指定アプリ起動
s_bootTitleBuf.titleID = SYSM_GetLauncherParamBody()->v1.bootTitleID; s_bootTitleBuf.titleID = SYSM_GetLauncherParamBody()->v1.bootTitleID;
s_bootTitleBuf.flags = SYSM_GetLauncherParamBody()->v1.flags; s_bootTitleBuf.flags = SYSM_GetLauncherParamBody()->v1.flags;
s_bootTitleBuf.pBanner = (TWLBannerFile *)(*(TWLBannerFile **)(SYSM_GetLauncherParamBody()->v1.rsv)); s_bootTitleBuf.pBanner = (TWLBannerFile *)(*(TWLBannerFile **)(SYSM_GetLauncherParamBody()->v1.rsv));
pBootTitle = &s_bootTitleBuf; pBootTitle = &s_bootTitleBuf;
} }
} }
//----------------------------------------------------- //-----------------------------------------------------
// 量産工程用ショートカットキー or // 量産工程用ショートカットキー or
// 検査カード起動 // 検査カード起動
//----------------------------------------------------- //-----------------------------------------------------
if( pBootTitle == NULL ) { if( pBootTitle == NULL ) {
pBootTitle = SYSMi_CheckShortcutBoot(); pBootTitle = SYSMi_CheckShortcutBoot();
} }
//----------------------------------------------------- //-----------------------------------------------------
// HW情報のリード // HW情報のリード
//----------------------------------------------------- //-----------------------------------------------------
// ノーマル情報リード // ノーマル情報リード
if( !LCFG_ReadHWNormalInfo() ) { if( !LCFG_ReadHWNormalInfo() ) {
OS_TPrintf( "HW Normal Info Broken!\n" ); OS_TPrintf( "HW Normal Info Broken!\n" );
SYSMi_GetWork()->flags.common.isBrokenHWNormalInfo = TRUE; SYSMi_GetWork()->flags.common.isBrokenHWNormalInfo = TRUE;
SYSMi_GetWork()->flags.common.isFatalError = TRUE; SYSMi_GetWork()->flags.common.isFatalError = TRUE;
} }
// セキュア情報リード // セキュア情報リード
if( !LCFG_ReadHWSecureInfo() ) { if( !LCFG_ReadHWSecureInfo() ) {
OS_TPrintf( "HW Secure Info Broken!\n" ); OS_TPrintf( "HW Secure Info Broken!\n" );
SYSMi_GetWork()->flags.common.isBrokenHWSecureInfo = TRUE; SYSMi_GetWork()->flags.common.isBrokenHWSecureInfo = TRUE;
SYSMi_GetWork()->flags.common.isFatalError = TRUE; SYSMi_GetWork()->flags.common.isFatalError = TRUE;
} }
//----------------------------------------------------- //-----------------------------------------------------
// 本体設定データのリード※必ずHWSecureInforリード後に実行すること。LanguageBitmapを判定に使うため // 本体設定データのリード※必ずHWSecureInforリード後に実行すること。LanguageBitmapを判定に使うため
//----------------------------------------------------- //-----------------------------------------------------
{ {
u8 *pBuffer = SYSM_Alloc( LCFG_READ_TEMP ); u8 *pBuffer = SYSM_Alloc( LCFG_READ_TEMP );
if( pBuffer == NULL ) { if( pBuffer == NULL ) {
SYSMi_GetWork()->flags.common.isFatalError = TRUE; SYSMi_GetWork()->flags.common.isFatalError = TRUE;
}else if( LCFG_ReadTWLSettings( (u8 (*)[LCFG_READ_TEMP])pBuffer ) ) { // NANDからTWL本体設定データをリード }else if( LCFG_ReadTWLSettings( (u8 (*)[LCFG_READ_TEMP])pBuffer ) ) { // NANDからTWL本体設定データをリード
SYSM_CaribrateTP(); // 読み出したTWL本体設定データをもとにTPキャリブレーション。 SYSM_CaribrateTP(); // 読み出したTWL本体設定データをもとにTPキャリブレーション。
if ( SYSMi_GetMcuVersion() <= 1 )
{
// X2ボード以前だけ輝度読み込み
brightness = (u8)LCFG_TSD_GetBacklightBrightness();
}
}else {
SYSMi_GetWork()->flags.common.isInitialSettings = TRUE; // リード失敗なら初回起動シーケンスへ
}
if( pBuffer ) {
SYSM_Free( pBuffer );
}
}
//-----------------------------------------------------
// 各種デバイス設定
//-----------------------------------------------------
// バックライト輝度設定
#ifdef SDK_SUPPORT_PMIC_2 #ifdef SDK_SUPPORT_PMIC_2
if ( SYSMi_GetMcuVersion() <= 1 ) if ( SYSMi_GetMcuVersion() <= 1 )
{ {
// X2ボード以前だけ輝度設定する // X2ボード以前だけ輝度読み込み
SYSM_SetBackLightBrightness( brightness ); brightness = (u8)LCFG_TSD_GetBacklightBrightness();
} }
#endif // SDK_SUPPORT_PMIC_2 #endif // SDK_SUPPORT_PMIC_2
// RTC補正 }else {
SYSMi_WriteAdjustRTC(); SYSMi_GetWork()->flags.common.isInitialSettings = TRUE; // リード失敗なら初回起動シーケンスへ
// RTC値のチェック }
SYSMi_CheckRTC(); if( pBuffer ) {
SYSM_Free( pBuffer );
}
}
LCFG_VerifyAndRecoveryNTRSettings(); // NTR設定データを読み出して、TWL設定データとベリファイし、必要ならリカバリ //-----------------------------------------------------
// 各種デバイス設定
//-----------------------------------------------------
// バックライト輝度設定
#ifdef SDK_SUPPORT_PMIC_2
if ( SYSMi_GetMcuVersion() <= 1 )
{
// X2ボード以前だけ輝度設定する
SYSM_SetBackLightBrightness( brightness );
}
#endif // SDK_SUPPORT_PMIC_2
// RTC補正
SYSMi_WriteAdjustRTC();
// RTC値のチェック
SYSMi_CheckRTC();
//NAMの初期化 LCFG_VerifyAndRecoveryNTRSettings(); // NTR設定データを読み出して、TWL設定データとベリファイし、必要ならリカバリ
NAM_Init( SYSM_Alloc, SYSM_Free );
return pBootTitle; //NAMの初期化
NAM_Init( SYSM_Alloc, SYSM_Free );
return pBootTitle;
} }
// ショートカット起動のチェック // ショートカット起動のチェック
static TitleProperty *SYSMi_CheckShortcutBoot( void ) static TitleProperty *SYSMi_CheckShortcutBoot( void )
{ {
static TitleProperty s_bootTitle; static TitleProperty s_bootTitle;
MI_CpuClear8( &s_bootTitle, sizeof(TitleProperty) ); MI_CpuClear8( &s_bootTitle, sizeof(TitleProperty) );
//----------------------------------------------------- //-----------------------------------------------------
// ISデバッガ起動 or // ISデバッガ起動 or
// 量産工程用ショートカットキー or // 量産工程用ショートカットキー or
// 検査カード起動 // 検査カード起動
//----------------------------------------------------- //-----------------------------------------------------
if( SYSM_IsExistCard() ) { if( SYSM_IsExistCard() ) {
if( ( SYSMi_GetWork()->flags.hotsw.isOnDebugger && // ISデバッガが有効かつJTAGがまだ有効でない時 if( ( SYSMi_GetWork()->flags.hotsw.isOnDebugger && // ISデバッガが有効かつJTAGがまだ有効でない時
!( *(u8 *)( HW_SYS_CONF_BUF + HWi_WSYS09_OFFSET ) & HWi_WSYS09_JTAG_CPUJE_MASK ) ) || !( *(u8 *)( HW_SYS_CONF_BUF + HWi_WSYS09_OFFSET ) & HWi_WSYS09_JTAG_CPUJE_MASK ) ) ||
SYSM_IsInspectCard() || SYSM_IsInspectCard() ||
( ( PAD_Read() & SYSM_PAD_PRODUCTION_SHORTCUT_CARD_BOOT ) == ( ( PAD_Read() & SYSM_PAD_PRODUCTION_SHORTCUT_CARD_BOOT ) ==
SYSM_PAD_PRODUCTION_SHORTCUT_CARD_BOOT ) SYSM_PAD_PRODUCTION_SHORTCUT_CARD_BOOT )
) { ) {
s_bootTitle.flags.isAppRelocate = TRUE; s_bootTitle.flags.isAppRelocate = TRUE;
s_bootTitle.flags.isAppLoadCompleted = TRUE; s_bootTitle.flags.isAppLoadCompleted = TRUE;
s_bootTitle.flags.isInitialShortcutSkip = TRUE; // 初回起動シーケンスを飛ばす s_bootTitle.flags.isInitialShortcutSkip = TRUE; // 初回起動シーケンスを飛ばす
s_bootTitle.flags.isLogoSkip = TRUE; // ロゴデモを飛ばす s_bootTitle.flags.isLogoSkip = TRUE; // ロゴデモを飛ばす
s_bootTitle.flags.bootType = LAUNCHER_BOOTTYPE_ROM; s_bootTitle.flags.bootType = LAUNCHER_BOOTTYPE_ROM;
s_bootTitle.flags.isValid = TRUE; s_bootTitle.flags.isValid = TRUE;
// ROMヘッダバッファのコピー // ROMヘッダバッファのコピー
{ {
u16 id = (u16)OS_GetLockID(); u16 id = (u16)OS_GetLockID();
(void)OS_LockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM7と排他制御する (void)OS_LockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM7と排他制御する
(void)SYSMi_CopyCardRomHeader(); (void)SYSMi_CopyCardRomHeader();
(void)OS_UnlockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM7と排他制御する (void)OS_UnlockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM7と排他制御する
OS_ReleaseLockID( id ); OS_ReleaseLockID( id );
} }
s_bootTitle.titleID = *(u64 *)( &SYSM_GetCardRomHeader()->titleID_Lo ); s_bootTitle.titleID = *(u64 *)( &SYSM_GetCardRomHeader()->titleID_Lo );
SYSM_SetLogoDemoSkip( s_bootTitle.flags.isLogoSkip ); SYSM_SetLogoDemoSkip( s_bootTitle.flags.isLogoSkip );
return &s_bootTitle; return &s_bootTitle;
} }
} }
//----------------------------------------------------- //-----------------------------------------------------
// TWL設定データ未入力時の初回起動シーケンス起動 // TWL設定データ未入力時の初回起動シーケンス起動
//----------------------------------------------------- //-----------------------------------------------------
#if 0 #if 0
#ifdef ENABLE_INITIAL_SETTINGS_ #ifdef ENABLE_INITIAL_SETTINGS_
if( !LCFG_TSD_IsSetTP() || if( !LCFG_TSD_IsSetTP() ||
!LCFG_TSD_IsSetLanguage() || !LCFG_TSD_IsSetLanguage() ||
!LCFG_TSD_IsSetDateTime() || !LCFG_TSD_IsSetDateTime() ||
!LCFG_TSD_IsSetUserColor() || !LCFG_TSD_IsSetUserColor() ||
!LCFG_TSD_IsSetNickname() ) { !LCFG_TSD_IsSetNickname() ) {
s_bootTitle.titleID = TITLE_ID_MACHINE_SETTINGS; s_bootTitle.titleID = TITLE_ID_MACHINE_SETTINGS;
s_bootTitle.flags.bootType = LAUNCHER_BOOTTYPE_NAND; s_bootTitle.flags.bootType = LAUNCHER_BOOTTYPE_NAND;
s_bootTitle.flags.isValid = TRUE; s_bootTitle.flags.isValid = TRUE;
return &s_bootTitle; return &s_bootTitle;
} }
#endif // ENABLE_INITIAL_SETTINGS_ #endif // ENABLE_INITIAL_SETTINGS_
#endif #endif
return NULL; // 「ブート内容未定」でリターン return NULL; // 「ブート内容未定」でリターン
} }
@ -296,19 +298,19 @@ static TitleProperty *SYSMi_CheckShortcutBoot( void )
static void SYSMi_CheckCardCloneBoot( void ) static void SYSMi_CheckCardCloneBoot( void )
{ {
#if 0 #if 0
u8 *buffp = (u8 *)&pTempBuffer; u8 *buffp = (u8 *)&pTempBuffer;
u32 total_rom_size = SYSM_GetCardRomHeader()->rom_valid_size ? SYSM_GetCardRomHeader()->rom_valid_size : 0x01000000; u32 total_rom_size = SYSM_GetCardRomHeader()->rom_valid_size ? SYSM_GetCardRomHeader()->rom_valid_size : 0x01000000;
u32 file_offset = total_rom_size & 0xFFFFFE00; u32 file_offset = total_rom_size & 0xFFFFFE00;
DC_FlushRange( buffp, BNR_IMAGE_SIZE ); DC_FlushRange( buffp, BNR_IMAGE_SIZE );
CARD_ReadRom( 4, (void *)file_offset, buffp, BNR_IMAGE_SIZE ); CARD_ReadRom( 4, (void *)file_offset, buffp, BNR_IMAGE_SIZE );
buffp += total_rom_size & 0x000001FF; buffp += total_rom_size & 0x000001FF;
if( *buffp++ == 'a' && *buffp == 'c' ) { if( *buffp++ == 'a' && *buffp == 'c' ) {
SYSMi_GetWork()->flags.common.cloneBootMode = CLONE_BOOT_MODE; SYSMi_GetWork()->flags.common.cloneBootMode = CLONE_BOOT_MODE;
}else { }else {
SYSMi_GetWork()->flags.common.cloneBootMode = OTHER_BOOT_MODE; SYSMi_GetWork()->flags.common.cloneBootMode = OTHER_BOOT_MODE;
} }
#endif #endif
} }