mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
バックライトをつける前にINIフラグをチェックするようにした
PM_InitFIRMの最適化 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@68 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
b708a5bca5
commit
9db3977a8c
@ -18,12 +18,13 @@
|
||||
#include <firm/pm.h>
|
||||
#include <twl/spi/common/pm_common.h>
|
||||
|
||||
#define OS_MSEC_TO_CPUCYC( msec ) ((u32)( ((HW_CPU_CLOCK/1000) * (u32)(msec)) ))
|
||||
static OSTick tickINI = 0;
|
||||
static BOOL doneBackLight = FALSE;
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: PM_InitFIRM
|
||||
|
||||
Description: power B/L on
|
||||
Description: set default parameters
|
||||
|
||||
Arguments: None
|
||||
|
||||
@ -31,6 +32,8 @@
|
||||
*---------------------------------------------------------------------------*/
|
||||
void PM_InitFIRM( void )
|
||||
{
|
||||
PM_CheckINIFlag();
|
||||
|
||||
// LED
|
||||
PMi_ResetFlags( REG_PMIC_LED_CTL_ADDR, PMIC_LED_CTL_AUTO_BLINK | PMIC_LED_CTL_BLINK_BY_SLEEP );
|
||||
PMi_SetParams( REG_PMIC_LVL4_BRT_ADDR,
|
||||
@ -53,9 +56,62 @@ void PM_InitFIRM( void )
|
||||
// LCD ON
|
||||
PMi_SetFlags( REG_PMIC_CTL2_ADDR, PMIC_CTL2_VDD50 );
|
||||
|
||||
// back light ON
|
||||
// back light
|
||||
PMi_SetParams( REG_PMIC_BL_BRT_A_ADDR, PMIC_BACKLIGHT_BRIGHT_MAX, PMIC_BL_BRT_A_MASK ); // TODO: less brightness
|
||||
PMi_SetParams( REG_PMIC_BL_BRT_B_ADDR, PMIC_BACKLIGHT_BRIGHT_MAX, PMIC_BL_BRT_B_MASK ); // TODO: less brightness
|
||||
OS_SpinWaitCpuCycles( OS_MSEC_TO_CPUCYC( 17*4 ) );
|
||||
PMi_SetFlags( REG_PMIC_CTL2_ADDR, PMIC_CTL2_BACK_LIGHT_1 | PMIC_CTL2_BACK_LIGHT_2 );
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: PM_CheckINIFlag
|
||||
|
||||
Description: Check INI in GX_DISPSTAT (able to call before PM_InitFIRM)
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
void PM_CheckINIFlag(void)
|
||||
{
|
||||
if ( !tickINI )
|
||||
{
|
||||
if ( reg_GX_DISPSTAT & REG_GX_DISPSTAT_INI_MASK )
|
||||
{
|
||||
tickINI = OS_GetTick();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: PM_BackLightOn
|
||||
|
||||
Description: power B/L on if not set yet
|
||||
|
||||
Arguments: force TRUE: wait until valid condition
|
||||
FALSE not set unless valid condition
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
void PM_BackLightOn( BOOL force )
|
||||
{
|
||||
if ( doneBackLight )
|
||||
{
|
||||
return; // have already set
|
||||
}
|
||||
PM_CheckINIFlag();
|
||||
//OS_TPrintf("PM_BackLightOn: %d msec\n", (u32)OS_TicksToMilliSeconds(OS_GetTick()-tickINI));
|
||||
if ( force )
|
||||
{
|
||||
while ((u32)OS_TicksToMilliSeconds(OS_GetTick()-tickINI) < 34)
|
||||
{
|
||||
}
|
||||
PMi_SetFlags( REG_PMIC_CTL2_ADDR, PMIC_CTL2_BACK_LIGHT_1 | PMIC_CTL2_BACK_LIGHT_2 );
|
||||
doneBackLight = TRUE;
|
||||
//OS_TPrintf("PM_BackLightOn: Done\n");
|
||||
}
|
||||
else if ((u32)OS_TicksToMilliSeconds(OS_GetTick()-tickINI) >= 34)
|
||||
{
|
||||
PMi_SetFlags( REG_PMIC_CTL2_ADDR, PMIC_CTL2_BACK_LIGHT_1 | PMIC_CTL2_BACK_LIGHT_2 );
|
||||
doneBackLight = TRUE;
|
||||
//OS_TPrintf("PM_BackLightOn: Done\n");
|
||||
}
|
||||
}
|
||||
|
||||
@ -42,7 +42,7 @@ static u8 step = 0x80;
|
||||
Profile
|
||||
*/
|
||||
#ifndef SDK_FINALROM
|
||||
#define PRFILE_MAX 128
|
||||
#define PRFILE_MAX 0x100
|
||||
u32 profile[PRFILE_MAX];
|
||||
u32 pf_cnt = 0;
|
||||
#endif
|
||||
@ -94,12 +94,14 @@ void TwlSpMain( void )
|
||||
I2Ci_WriteRegister(I2C_SLAVE_DEBUG_LED, 0x01, ++step);
|
||||
|
||||
// 0: before PXI
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSecondsBROM(OS_GetTick());
|
||||
#endif
|
||||
|
||||
OS_InitFIRM();
|
||||
OS_EnableIrq(); // PMでOS_InitTick()を使っているので (他でも使ってる?)
|
||||
|
||||
#ifndef SDK_FINALROM
|
||||
//OS_EnableIrq();
|
||||
// 1: after PXI
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
#endif
|
||||
@ -107,6 +109,7 @@ void TwlSpMain( void )
|
||||
OS_SetDebugLED(++step);
|
||||
|
||||
PM_InitFIRM();
|
||||
PM_BackLightOn( FALSE );
|
||||
|
||||
#ifndef SDK_FINALROM
|
||||
// 2: after PM
|
||||
@ -115,7 +118,8 @@ void TwlSpMain( void )
|
||||
|
||||
OS_SetDebugLED(++step);
|
||||
|
||||
/* FATFSライブラリ用にカレントヒープに設定 */
|
||||
/* FATFSライブラリ用にカレントヒープを設定 */
|
||||
/* WRAM上のfatfsHeapをメインメモリヒープとして登録している */
|
||||
{
|
||||
OSHeapHandle hh;
|
||||
u8 *lo = (u8*)fatfsHeap;
|
||||
@ -135,6 +139,7 @@ void TwlSpMain( void )
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
#endif
|
||||
OS_SetDebugLED(++step);
|
||||
PM_BackLightOn( FALSE );
|
||||
|
||||
if ( FATFS_MountDriveFirm( DRIVE_NO, BOOT_DEVICE, PARTITION_NO ) )
|
||||
{
|
||||
@ -144,6 +149,7 @@ void TwlSpMain( void )
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
#endif
|
||||
OS_SetDebugLED(++step);
|
||||
PM_BackLightOn( FALSE );
|
||||
|
||||
switch ( PAD_Read() & PAD_KEYPORT_MASK )
|
||||
{
|
||||
@ -175,6 +181,7 @@ void TwlSpMain( void )
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
#endif
|
||||
OS_SetDebugLED(++step);
|
||||
PM_BackLightOn( FALSE );
|
||||
|
||||
if ( FATFS_LoadHeader() && FATFS_LoadStatic() )
|
||||
{
|
||||
@ -184,6 +191,7 @@ void TwlSpMain( void )
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
#endif
|
||||
OS_SetDebugLED(++step);
|
||||
PM_BackLightOn( TRUE );
|
||||
|
||||
FATFS_Boot();
|
||||
}
|
||||
|
||||
@ -39,7 +39,7 @@ static SVCSignHeapContext acPool;
|
||||
Profile
|
||||
*/
|
||||
#ifndef SDK_FINALROM
|
||||
#define PRFILE_MAX 128
|
||||
#define PRFILE_MAX 0x100
|
||||
u32 profile[PRFILE_MAX];
|
||||
u32 pf_cnt = 0;
|
||||
#endif
|
||||
@ -49,6 +49,8 @@ u32 pf_cnt = 0;
|
||||
|
||||
FromBootの対応をまとめる&メインメモリの初期化
|
||||
OS_Init前なので注意
|
||||
MI_LoadHeader前にかなり(数100msec)時間があるので、可能なら
|
||||
OS_Init後にいろいろ処理したい!
|
||||
***************************************************************/
|
||||
static void PreInit(void)
|
||||
{
|
||||
@ -70,6 +72,23 @@ static void PreInit(void)
|
||||
MIi_CpuClearFast( 0, (void*)OSi_GetFromBromAddr(), sizeof(OSFromBromBuf) );
|
||||
}
|
||||
|
||||
/***************************************************************
|
||||
PostInit
|
||||
|
||||
MI_LoadHeader前にかなり(数100msec)時間があるので、可能なら
|
||||
OS_Init後にいろいろ処理したい!
|
||||
メインメモリの初期化
|
||||
***************************************************************/
|
||||
static void PostInit(void)
|
||||
{
|
||||
/*
|
||||
メインメモリ関連 (ARM9用の領域を全クリア)
|
||||
*/
|
||||
|
||||
MIi_CpuClearFast( 0, (void*)HW_DELIVER_ARG_BUF_END, HW_TWL_MAIN_MEM_MAIN_SIZE-HW_DELIVER_ARG_BUF_SIZE );
|
||||
DC_FlushAll();
|
||||
}
|
||||
|
||||
/***************************************************************
|
||||
CheckHeader
|
||||
|
||||
@ -101,11 +120,12 @@ void TwlMain( void )
|
||||
|
||||
#ifndef SDK_FINALROM
|
||||
// 0: before PXI
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSecondsBROM(OS_GetTick());
|
||||
#endif
|
||||
|
||||
OS_InitFIRM();
|
||||
#ifndef SDK_FINALROM
|
||||
OS_EnableIrq();
|
||||
OS_InitTick();
|
||||
// 1: after PXI
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
@ -113,6 +133,13 @@ void TwlMain( void )
|
||||
|
||||
SVC_InitSignHeap( &acPool, acHeap, sizeof(acHeap) );
|
||||
|
||||
PostInit();
|
||||
|
||||
#ifndef SDK_FINALROM
|
||||
// 2: after PostInit
|
||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||
#endif
|
||||
|
||||
// load menu
|
||||
if ( MI_LoadHeader( &acPool, RSA_KEY_ADDR ) && CheckHeader() && MI_LoadStatic() )
|
||||
{
|
||||
|
||||
@ -33,6 +33,29 @@ extern "C" {
|
||||
*---------------------------------------------------------------------------*/
|
||||
void PM_InitFIRM( void );
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: PM_CheckINIFlag
|
||||
|
||||
Description: Check INI in GX_DISPSTAT (able to call before PM_InitFIRM)
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
void PM_CheckINIFlag(void);
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: PM_BackLightOn
|
||||
|
||||
Description: power B/L on if not set yet
|
||||
|
||||
Arguments: force TRUE: wait until valid condition
|
||||
FALSE not set unless valid condition
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
void PM_BackLightOn( BOOL force );
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
Loading…
Reference in New Issue
Block a user