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 <firm/pm.h>
|
||||||
#include <twl/spi/common/pm_common.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
|
Name: PM_InitFIRM
|
||||||
|
|
||||||
Description: power B/L on
|
Description: set default parameters
|
||||||
|
|
||||||
Arguments: None
|
Arguments: None
|
||||||
|
|
||||||
@ -31,6 +32,8 @@
|
|||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
void PM_InitFIRM( void )
|
void PM_InitFIRM( void )
|
||||||
{
|
{
|
||||||
|
PM_CheckINIFlag();
|
||||||
|
|
||||||
// LED
|
// LED
|
||||||
PMi_ResetFlags( REG_PMIC_LED_CTL_ADDR, PMIC_LED_CTL_AUTO_BLINK | PMIC_LED_CTL_BLINK_BY_SLEEP );
|
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,
|
PMi_SetParams( REG_PMIC_LVL4_BRT_ADDR,
|
||||||
@ -53,9 +56,62 @@ void PM_InitFIRM( void )
|
|||||||
// LCD ON
|
// LCD ON
|
||||||
PMi_SetFlags( REG_PMIC_CTL2_ADDR, PMIC_CTL2_VDD50 );
|
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_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
|
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
|
Profile
|
||||||
*/
|
*/
|
||||||
#ifndef SDK_FINALROM
|
#ifndef SDK_FINALROM
|
||||||
#define PRFILE_MAX 128
|
#define PRFILE_MAX 0x100
|
||||||
u32 profile[PRFILE_MAX];
|
u32 profile[PRFILE_MAX];
|
||||||
u32 pf_cnt = 0;
|
u32 pf_cnt = 0;
|
||||||
#endif
|
#endif
|
||||||
@ -94,12 +94,14 @@ void TwlSpMain( void )
|
|||||||
I2Ci_WriteRegister(I2C_SLAVE_DEBUG_LED, 0x01, ++step);
|
I2Ci_WriteRegister(I2C_SLAVE_DEBUG_LED, 0x01, ++step);
|
||||||
|
|
||||||
// 0: before PXI
|
// 0: before PXI
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSecondsBROM(OS_GetTick());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
OS_InitFIRM();
|
OS_InitFIRM();
|
||||||
|
OS_EnableIrq(); // PMでOS_InitTick()を使っているので (他でも使ってる?)
|
||||||
|
|
||||||
#ifndef SDK_FINALROM
|
#ifndef SDK_FINALROM
|
||||||
|
//OS_EnableIrq();
|
||||||
// 1: after PXI
|
// 1: after PXI
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||||
#endif
|
#endif
|
||||||
@ -107,6 +109,7 @@ void TwlSpMain( void )
|
|||||||
OS_SetDebugLED(++step);
|
OS_SetDebugLED(++step);
|
||||||
|
|
||||||
PM_InitFIRM();
|
PM_InitFIRM();
|
||||||
|
PM_BackLightOn( FALSE );
|
||||||
|
|
||||||
#ifndef SDK_FINALROM
|
#ifndef SDK_FINALROM
|
||||||
// 2: after PM
|
// 2: after PM
|
||||||
@ -115,7 +118,8 @@ void TwlSpMain( void )
|
|||||||
|
|
||||||
OS_SetDebugLED(++step);
|
OS_SetDebugLED(++step);
|
||||||
|
|
||||||
/* FATFSライブラリ用にカレントヒープに設定 */
|
/* FATFSライブラリ用にカレントヒープを設定 */
|
||||||
|
/* WRAM上のfatfsHeapをメインメモリヒープとして登録している */
|
||||||
{
|
{
|
||||||
OSHeapHandle hh;
|
OSHeapHandle hh;
|
||||||
u8 *lo = (u8*)fatfsHeap;
|
u8 *lo = (u8*)fatfsHeap;
|
||||||
@ -135,6 +139,7 @@ void TwlSpMain( void )
|
|||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||||
#endif
|
#endif
|
||||||
OS_SetDebugLED(++step);
|
OS_SetDebugLED(++step);
|
||||||
|
PM_BackLightOn( FALSE );
|
||||||
|
|
||||||
if ( FATFS_MountDriveFirm( DRIVE_NO, BOOT_DEVICE, PARTITION_NO ) )
|
if ( FATFS_MountDriveFirm( DRIVE_NO, BOOT_DEVICE, PARTITION_NO ) )
|
||||||
{
|
{
|
||||||
@ -144,6 +149,7 @@ void TwlSpMain( void )
|
|||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||||
#endif
|
#endif
|
||||||
OS_SetDebugLED(++step);
|
OS_SetDebugLED(++step);
|
||||||
|
PM_BackLightOn( FALSE );
|
||||||
|
|
||||||
switch ( PAD_Read() & PAD_KEYPORT_MASK )
|
switch ( PAD_Read() & PAD_KEYPORT_MASK )
|
||||||
{
|
{
|
||||||
@ -175,6 +181,7 @@ void TwlSpMain( void )
|
|||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||||
#endif
|
#endif
|
||||||
OS_SetDebugLED(++step);
|
OS_SetDebugLED(++step);
|
||||||
|
PM_BackLightOn( FALSE );
|
||||||
|
|
||||||
if ( FATFS_LoadHeader() && FATFS_LoadStatic() )
|
if ( FATFS_LoadHeader() && FATFS_LoadStatic() )
|
||||||
{
|
{
|
||||||
@ -184,6 +191,7 @@ void TwlSpMain( void )
|
|||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||||
#endif
|
#endif
|
||||||
OS_SetDebugLED(++step);
|
OS_SetDebugLED(++step);
|
||||||
|
PM_BackLightOn( TRUE );
|
||||||
|
|
||||||
FATFS_Boot();
|
FATFS_Boot();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -39,7 +39,7 @@ static SVCSignHeapContext acPool;
|
|||||||
Profile
|
Profile
|
||||||
*/
|
*/
|
||||||
#ifndef SDK_FINALROM
|
#ifndef SDK_FINALROM
|
||||||
#define PRFILE_MAX 128
|
#define PRFILE_MAX 0x100
|
||||||
u32 profile[PRFILE_MAX];
|
u32 profile[PRFILE_MAX];
|
||||||
u32 pf_cnt = 0;
|
u32 pf_cnt = 0;
|
||||||
#endif
|
#endif
|
||||||
@ -49,6 +49,8 @@ u32 pf_cnt = 0;
|
|||||||
|
|
||||||
FromBootの対応をまとめる&メインメモリの初期化
|
FromBootの対応をまとめる&メインメモリの初期化
|
||||||
OS_Init前なので注意
|
OS_Init前なので注意
|
||||||
|
MI_LoadHeader前にかなり(数100msec)時間があるので、可能なら
|
||||||
|
OS_Init後にいろいろ処理したい!
|
||||||
***************************************************************/
|
***************************************************************/
|
||||||
static void PreInit(void)
|
static void PreInit(void)
|
||||||
{
|
{
|
||||||
@ -70,6 +72,23 @@ static void PreInit(void)
|
|||||||
MIi_CpuClearFast( 0, (void*)OSi_GetFromBromAddr(), sizeof(OSFromBromBuf) );
|
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
|
CheckHeader
|
||||||
|
|
||||||
@ -101,11 +120,12 @@ void TwlMain( void )
|
|||||||
|
|
||||||
#ifndef SDK_FINALROM
|
#ifndef SDK_FINALROM
|
||||||
// 0: before PXI
|
// 0: before PXI
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSecondsBROM(OS_GetTick());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
OS_InitFIRM();
|
OS_InitFIRM();
|
||||||
#ifndef SDK_FINALROM
|
#ifndef SDK_FINALROM
|
||||||
|
OS_EnableIrq();
|
||||||
OS_InitTick();
|
OS_InitTick();
|
||||||
// 1: after PXI
|
// 1: after PXI
|
||||||
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||||
@ -113,6 +133,13 @@ void TwlMain( void )
|
|||||||
|
|
||||||
SVC_InitSignHeap( &acPool, acHeap, sizeof(acHeap) );
|
SVC_InitSignHeap( &acPool, acHeap, sizeof(acHeap) );
|
||||||
|
|
||||||
|
PostInit();
|
||||||
|
|
||||||
|
#ifndef SDK_FINALROM
|
||||||
|
// 2: after PostInit
|
||||||
|
profile[pf_cnt++] = (u32)OS_TicksToMicroSeconds(OS_GetTick());
|
||||||
|
#endif
|
||||||
|
|
||||||
// load menu
|
// load menu
|
||||||
if ( MI_LoadHeader( &acPool, RSA_KEY_ADDR ) && CheckHeader() && MI_LoadStatic() )
|
if ( MI_LoadHeader( &acPool, RSA_KEY_ADDR ) && CheckHeader() && MI_LoadStatic() )
|
||||||
{
|
{
|
||||||
|
|||||||
@ -33,6 +33,29 @@ extern "C" {
|
|||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
void PM_InitFIRM( void );
|
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
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user