デバイス依存のアライメントに対応

メインメモリチェックルーチンにチップタイプとJTAGのチェックコードを追加 (しかしこのルーチン自体呼んでいない)
ARM7側だけオートロードルーチンを呼んでいたのでコメントアウト
リセットチェックルーチンのコメントアウト


git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@71 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yutaka 2007-10-29 07:30:30 +00:00
parent 1978d0fde1
commit 9774cca464
4 changed files with 67 additions and 21 deletions

View File

@ -29,6 +29,10 @@
*/
//#define PROFILE_ENABLE
#define MODULE_ALIGNMENT 0x10 // 16バイト単位で読み込む
//#define MODULE_ALIGNMENT 0x200 // 512バイト単位で読み込む
#define RoundUpModuleSize(value) (((value) + MODULE_ALIGNMENT - 1) & -MODULE_ALIGNMENT)
#ifdef SDK_FINALROM // FINALROMで無効化
#undef PROFILE_ENABLE
#endif
@ -43,7 +47,7 @@ extern u32 pf_cnt;
#define PXI_FIFO_TAG_DATA PXI_FIFO_TAG_USER_0
static ROM_Header* const rh= (ROM_Header*)(HW_MAIN_MEM_SYSTEM_END - 0x2000);
static ROM_Header* const rh= (ROM_Header*)HW_TWL_ROM_HEADER_BUF;
static int menu_fd = -1;
/*---------------------------------------------------------------------------*
@ -124,6 +128,14 @@ BOOL FATFS_OpenSpecifiedSrl( const char* menufile )
SRLファイルを読み込む場合はROMヘッダを参照できれば十分です
(ROMヘッダ部分は元から知っているはず)
:
ARM7/ARM9側で歩調を合わせられることを
()
PXIコールバック
APIがデータをWRAMに格納した後
destとsizeを通知するという形でOKではないか
()
Arguments: offset offset of the file to load (512 bytes alignment)
size size to load
@ -285,15 +297,15 @@ static AESCounter* FATFSi_GetCounter( u32 offset )
makerom.TWLまたはIPLの使用に依存します
Arguments: offset offset of region from head of ROM_Header
size size of region
size size of region (for check only)
Returns: counter
*---------------------------------------------------------------------------*/
static void FATFSi_SetupAES( u32 offset, u32 size )
{
if ( rh->s.enable_aes &&
offset >= rh->s.aes_target_rom_offset &&
offset + size <= rh->s.aes_target_rom_offset + rh->s.aes_target_size )
u32 aes_end = rh->s.aes_target_rom_offset + RoundUpModuleSize(rh->s.aes_target_size);
u32 arg_end = offset + RoundUpModuleSize(size);
if ( rh->s.enable_aes && offset >= rh->s.aes_target_rom_offset && arg_end <= aes_end )
{
AESi_WaitKey();
if (rh->s.developer_encrypt)
@ -326,6 +338,9 @@ static void FATFSi_SetupAES( u32 offset, u32 size )
APIを呼び出す前にROMヘッダが
ARM9側と異なり
()
Arguments: None
Returns: TRUE if success
@ -335,6 +350,7 @@ BOOL FATFS_LoadStatic( void )
// load ARM9 static region without AES
if ( rh->s.main_size > 0 )
{
u32 aligned = RoundUpModuleSize(rh->s.main_size);
#ifdef PROFILE_ENABLE
// 30: before PXI
pf_cnt = 0x30;
@ -342,8 +358,8 @@ BOOL FATFS_LoadStatic( void )
profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_LOAD_ARM9_STATIC; // checkpoint
#endif
PXI_NotifyID( FIRM_PXI_ID_LOAD_ARM9_STATIC );
FATFSi_SetupAES( rh->s.main_rom_offset, rh->s.main_size );
if ( !FATFS_LoadBuffer( rh->s.main_rom_offset, rh->s.main_size ) ||
FATFSi_SetupAES( rh->s.main_rom_offset, aligned );
if ( !FATFS_LoadBuffer( rh->s.main_rom_offset, aligned ) ||
PXI_RecvID() != FIRM_PXI_ID_AUTH_ARM9_STATIC )
{
return FALSE;
@ -357,6 +373,7 @@ BOOL FATFS_LoadStatic( void )
// load ARM7 static region without AES
if ( rh->s.sub_size > 0 )
{
u32 aligned = RoundUpModuleSize(rh->s.sub_size);
#ifdef PROFILE_ENABLE
// 50: before PXI
pf_cnt = 0x50;
@ -364,8 +381,8 @@ BOOL FATFS_LoadStatic( void )
profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_LOAD_ARM7_STATIC; // checkpoint
#endif
PXI_NotifyID( FIRM_PXI_ID_LOAD_ARM7_STATIC );
FATFSi_SetupAES( rh->s.sub_rom_offset, rh->s.sub_size );
if ( !FATFS_LoadBuffer( rh->s.sub_rom_offset, rh->s.sub_size ) ||
FATFSi_SetupAES( rh->s.sub_rom_offset, aligned );
if ( !FATFS_LoadBuffer( rh->s.sub_rom_offset, aligned ) ||
PXI_RecvID() != FIRM_PXI_ID_AUTH_ARM7_STATIC )
{
return FALSE;
@ -379,6 +396,7 @@ BOOL FATFS_LoadStatic( void )
// load ARM9 extended static region with AES
if ( rh->s.main_ltd_size > 0 )
{
u32 aligned = RoundUpModuleSize(rh->s.main_ltd_size);
#ifdef PROFILE_ENABLE
// 70: before PXI
pf_cnt = 0x70;
@ -386,8 +404,8 @@ BOOL FATFS_LoadStatic( void )
profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_LOAD_ARM9_LTD_STATIC; // checkpoint
#endif
PXI_NotifyID( FIRM_PXI_ID_LOAD_ARM9_LTD_STATIC );
FATFSi_SetupAES( rh->s.main_ltd_rom_offset, rh->s.main_ltd_size );
if ( !FATFS_LoadBuffer( rh->s.main_ltd_rom_offset, rh->s.main_ltd_size ) ||
FATFSi_SetupAES( rh->s.main_ltd_rom_offset, aligned );
if ( !FATFS_LoadBuffer( rh->s.main_ltd_rom_offset, aligned ) ||
PXI_RecvID() != FIRM_PXI_ID_AUTH_ARM9_LTD_STATIC )
{
return FALSE;
@ -401,6 +419,7 @@ BOOL FATFS_LoadStatic( void )
// load ARM7 extended static region with AES
if ( rh->s.sub_ltd_size > 0 )
{
u32 aligned = RoundUpModuleSize(rh->s.sub_ltd_size);
#ifdef PROFILE_ENABLE
// 90: before PXI
pf_cnt = 0x90;
@ -408,8 +427,8 @@ BOOL FATFS_LoadStatic( void )
profile[pf_cnt++] = (u32)PROFILE_PXI_SEND | FIRM_PXI_ID_LOAD_ARM7_LTD_STATIC; // checkpoint
#endif
PXI_NotifyID( FIRM_PXI_ID_LOAD_ARM7_LTD_STATIC );
FATFSi_SetupAES( rh->s.sub_ltd_rom_offset, rh->s.sub_ltd_size );
if ( !FATFS_LoadBuffer( rh->s.sub_ltd_rom_offset, rh->s.sub_ltd_size ) ||
FATFSi_SetupAES( rh->s.sub_ltd_rom_offset, aligned );
if ( !FATFS_LoadBuffer( rh->s.sub_ltd_rom_offset, aligned ) ||
PXI_RecvID() != FIRM_PXI_ID_AUTH_ARM7_LTD_STATIC )
{
return FALSE;

View File

@ -86,7 +86,7 @@ SDK_WEAK_SYMBOL asm void _start( void )
mov r0, #HW_PSR_SYS_MODE
msr cpsr_csfx, r0
sub sp, r1, #4 // 4byte for stack check code
#if 0 // not used in FIRM
//---- read reset flag from pmic
#ifdef TWL_PLATFORM_TS
mov r0, #REG_PMIC_SW_FLAGS_ADDR
@ -98,7 +98,7 @@ SDK_WEAK_SYMBOL asm void _start( void )
mov r0, #FIRM_PXI_ID_INIT_MMEM
bl PXI_WaitByIntf
#endif // TWL_PLATFORM_TS
#endif
//---- wait for main memory mode into burst mode
ldr r3, =REG_EXMEMCNT_L_ADDR
mov r1, #REG_MI_EXMEMCNT_L_ECE2_MASK
@ -127,7 +127,7 @@ SDK_WEAK_SYMBOL asm void _start( void )
#endif
//---- load autoload block and initialize bss
bl do_autoload
//bl do_autoload
//---- fill static static bss with 0
ldr r0, =_start_ModuleParams
@ -139,7 +139,7 @@ SDK_WEAK_SYMBOL asm void _start( void )
bcc @2
//---- detect main memory size
// bl detect_main_memory_size // shared memory will be cleared
//bl detect_main_memory_size
//---- set interrupt vector
ldr r1, =HW_INTR_VECTOR_BUF
@ -266,6 +266,7 @@ SDK_WEAK_SYMBOL asm void _start_AutoloadDoneCallback( void* argv[] )
static asm void detect_main_memory_size( void )
{
#if 0 // NITRO hardware is not supported
mov r0, #OS_CONSOLE_SIZE_4MB
mov r1, #0
@ -292,7 +293,9 @@ static asm void detect_main_memory_size( void )
tst r12, #REG_SCFG_CLK_WRAMHCLK_MASK
moveq r0, #OS_CONSOLE_SIZE_8MB
beq @4
#else
ldr r2, =HW_MMEMCHECKER_SUB
#endif
//---- 16MB or 32MB
mov r1, #0
add r3, r2, #OSi_IMAGE_DIFFERENCE2
@ -310,6 +313,21 @@ static asm void detect_main_memory_size( void )
mov r0, #OS_CONSOLE_SIZE_16MB
@4:
strh r0, [r2]
//---- detect chiptype
ldr r2, =REG_OP_ADDR
ldrh r0, [r2]
and r0, r0, #REG_SCFG_OP_OPT_MASK
//---- detect jtag
ldr r2, =REG_JTAG_ADDR
ldrh r1, [r2]
and r1, r1, #REG_SCFG_JTAG_CPUJE_MASK
orr r0, r0, r1, LSL #1
ldr r2, =HW_CHIPTYPE_FLAG
strb r0, [r2]
bx lr
}

View File

@ -89,14 +89,15 @@ SDK_WEAK_SYMBOL asm void _start( void )
mov r0, #HW_PSR_SYS_MODE
msr cpsr_csfx, r0
sub sp, r1, #4 // 4byte for stack check code
//---- read reset flag from pmic
//---- read reset flag from pmic
#ifdef TWL_PLATFORM_TS
#if 0
@0: bl PXI_RecvByIntf
cmp r0, #FIRM_PXI_ID_COLDBOOT
cmpne r0, #FIRM_PXI_ID_WARMBOOT
bne @0
#endif
//---- initialize Main Memory
cmp r0, #FIRM_PXI_ID_COLDBOOT
moveq r0, #TRUE

View File

@ -145,6 +145,14 @@ static BOOL CheckRomCertificate( SVCSignHeapContext* pool, const RomCertificate
SRLファイルを読み込む場合はROMヘッダを参照できれば十分です
(ROMヘッダ部分は元から知っているはず)
:
ARM7/ARM9側で歩調を合わせられることを
()
PXIコールバック
APIがデータをWRAMに格納した後
destとsizeを通知するという形でOKではないか
()
Arguments: dest destination address for received data
size size to load
ctx context for SHA1 if execute SVC_SHA1Update
@ -178,8 +186,8 @@ static BOOL MI_LoadBuffer(u8* dest, u32 size, SVCSHA1Context *ctx)
u8* s = src + done;
u8* d = dest + done;
u32 u = unit < done + HASH_UNIT ? unit - done : HASH_UNIT;
SVC_SHA1Update( ctx, s, u );
MI_CpuCopyFast( s, d, u );
SVC_SHA1Update( ctx, s, u );
}
}
else