mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
デバイス依存のアライメントに対応
メインメモリチェックルーチンにチップタイプとJTAGのチェックコードを追加 (しかしこのルーチン自体呼んでいない) ARM7側だけオートロードルーチンを呼んでいたのでコメントアウト リセットチェックルーチンのコメントアウト git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@71 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
1978d0fde1
commit
9774cca464
@ -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;
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user