ブートの調整。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@131 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yosiokat 2007-11-09 02:21:43 +00:00
parent ce18a42739
commit 6fc039c857
15 changed files with 132 additions and 42 deletions

View File

@ -1,6 +1,6 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlSDK - components - hyena.TWL
# Project: TwlIPL
# File: Makefile
#
# Copyright 2007 Nintendo. All rights reserved.
@ -41,7 +41,10 @@ include $(TWLIPL_ROOT)/build/buildtools/commondefs
#MACRO_FLAGS += -DSDK_ARM7COMP_LTD
MAKELCF_FLAGS += -DADDRESS_LTDWRAM='0x037c0000' -DCRT0_O='$(CRT0_O)'
MAKELCF_FLAGS += -DADDRESS_LTDWRAM='0x037c0000' \
-DADDRESS_FLXMAIN='0x02280000' \
-DADDRESS_BOOTCORE='0x0380f100' \
-DCRT0_O='$(CRT0_O)'
MAKELCF_FLAGS += -DISDBG_LIBS='$(ISDBG_LIBS)'
#--------------------------------

View File

@ -1,6 +1,6 @@
#---------------------------------------------------------------------------
# Project: TwlSDK - components - racoon.TWL
# File: racoon.lcf.template
# Project: TwlIPL
# File: hyena.lcf.template
#
# Copyright 2007 Nintendo. All rights reserved.
#

View File

@ -1,6 +1,6 @@
#----------------------------------------------------------------------------
# Project: TwlSDK - components - racoon.TWL
# File: racoon.lsf
# Project: TwlIPL
# File: hyena.lsf
#
# Copyright 2007 Nintendo. All rights reserved.
#
@ -20,7 +20,7 @@
#--------
Static $(TARGET_NAME)
{
Address 0x02280000
Address $(ADDRESS_FLXMAIN)
Library $(CRT0_O)
StackSize 1024 1024
}
@ -55,8 +55,7 @@ Autoload WRAM
librtc_sp.TWL$(CODEGEN).a \
libwvr_sp.TWL$(CODEGEN).a \
libaes_sp.TWL$(CODEGEN).a \
libboot_sp.TWL$(CODEGEN).a \
$(ISDBG_LIBS)
$(ISTD_LIBS)
Library libsdio_hcd_twl.TWL$(CODEGEN).a \
libsdio_busdriver.TWL$(CODEGEN).a \
@ -68,6 +67,13 @@ Autoload WRAM
Object $(OBJDIR)/main.o
}
Autoload BOOT_CORE
{
Address $(ADDRESS_BOOTCORE)
Library libboot_sp.TWL$(CODEGEN).a
}
#--------
Ltdautoload LTDMAIN
{

View File

@ -83,7 +83,14 @@ TwlSpMain(void)
PrintDebugInfo();
// ヒープ領域設定
OS_SetSubPrivArenaHi( (void*)0x02380000 ); // メモリ配置をいじっているので、アリーナHiも変更しないとダメ
{
void *wram = OS_GetWramSubPrivArenaHi();
void *mmem = OS_GetSubPrivArenaHi();
OS_SetSubPrivArenaHi( (void*)0x02380000 ); // メモリ配置をいじっているので、アリーナHiも変更しないとダメ
OS_SetWramSubPrivArenaHi( (void*)BOOTCORE_ARM7_ADDR );
OS_TPrintf( "MMEM SUBPRV ARENA HI : %08x -> %08x\n", mmem, OS_GetSubPrivArenaHi() );
OS_TPrintf( "WRAM SUBPRV ARENA HI : %08x -> %08x\n", wram, OS_GetWramSubPrivArenaHi() );
}
heapHandle = InitializeAllocateSystem();
// ボタン入力サーチ初期化

View File

@ -53,17 +53,20 @@ static void _ISDbgLib_OnLoadChildBinary( void );
static asm void ClearMemory( void )
{
mov r11, lr
// ldr r0, = IPL2_ADDR_TOP // IPL2-ARM9 & ARM7プログラムのクリア
// ldr r1, = MB_BSSDESC_ADDRESS
// bl CpuClear32Byte
ldr r0, = HW_WRAM // ARM7WRAMのクリア
ldr r1, = RETURN_FROM_MAIN_ARM7_FUNCP
#if 0
ldr r0, = 0x02280000 // SYSMENU-ARM7 MMEMのクリア
ldr r1, = 0x02380000
bl CpuClear32Byte
// ldr r0, = 0x02800000 // SYSMENU-ARM9 MMEMのクリア
// ldr r1, = 0x02e80000
// bl CpuClear32Byte
@1 bx r11
ldr r0, = HW_WRAM_A_LTD // ARM7-WRAMのクリア( LTDのマッピング )
ldr r1, = BOOTCORE_ARM7_ADDR
bl CpuClear32Byte
#endif
bx r11
}
@ -117,15 +120,9 @@ static asm void ClearBankREG_Stack( void )
add r1, r2, #0x800
bl CpuClear32Byte
#ifndef ISDBG_MB_CHILD_
add r0, r2, #0xd80 // HW_BIOS_EXCP_STACK_MAIN (MAINPデバッガモニタ例外ハンドラ)
add r1, r0, #0x80
bl CpuClear32Byte
#else // ISDBG_MB_CHILD_
add r0, r2, #0xda0 // HW_ARENA_INFO_BUF (アリーナ情報構造体) ※mb_childビルド時には、デバッガモニタ用ハンドラはクリアしない。
add r0, r2, #0xda0 // HW_ARENA_INFO_BUF (アリーナ情報構造体) ※デバッガモニタ用ハンドラはクリアしない。
add r1, r0, #0x60
bl CpuClear32Byte
#endif // ISDBG_MB_CHILD_
add r0, r2, #0xf80
add r1, r0, #0x80
@ -156,6 +153,30 @@ asm void BOOT_Core( void )
//---------------------------------------
bl ClearMemory
//---------------------------------------
// ARM9との同期をとるsubp_stateを3にしてから、mainp_stateが3になるのを待つ。
//---------------------------------------
ldr r1, =REG_MAINPINTF_ADDR
mov r0, #0x0300
strh r0, [r1] // メインプロセッサインターフェースレジスタ
@1 ldrh r0, [r1]
and r0, r0, #0x000f
cmp r0, #0x0003
bne @1
//---------------------------------------
// ARM7 WRAMバンク設定 MBK6-MBK9 ※ARM7がMBK9でWRAMロックをする前にARM9でWRAM設定を済ませておく必要がある。
//---------------------------------------
ldr r0, =HW_TWL_ROM_HEADER_BUF
add r10, r0, #0x1a0 // rom_header->s.sub_wram_config_data
// r10- => r9-r2
ldr r9, =REG_MBK6_ADDR
add r2, r9, #15
@2 ldr r3, [r10], #4
str r3, [r9], #4
cmp r9, r2
blt @2
//---------------------------------------
// 無線マルチブート用ローダー起動
//---------------------------------------
@ -176,10 +197,10 @@ asm void BOOT_Core( void )
ldr r1, =REG_MAINPINTF_ADDR
mov r0, #0x0100
strh r0, [r1] // メインプロセッサインターフェースレジスタ
@1 ldrh r0, [r1]
@3 ldrh r0, [r1]
and r0, r0, #0x000f
cmp r0, #0x0001
bne @1
bne @3
//---------------------------------------
// ISデバッガでのDL子機プログラムのデバッグ情報設定
@ -201,9 +222,9 @@ asm void BOOT_Core( void )
ldr r1, =REG_MAINPINTF_ADDR
mov r0, #0
strh r0, [r1] // メインプロセッサインターフェースレジスタ
@2 ldrh r0, [r1]
@4 ldrh r0, [r1]
cmp r0, #0x0001
beq @2
beq @4
//---------------------------------------
// R11の値をもとにブートアドレス取得

View File

@ -55,6 +55,7 @@ BOOL BOOT_WaitStart( void )
}
*/
BOOTi_ClearREG_RAM(); // ARM7側のメモリレジスタクリア。
reg_MI_MBK9 = 0; // 全WRAMのロック解除
reg_PXI_MAINPINTF = MAINP_SEND_IF | 0x0100; // ARM9に対してブートするようIRQで要求ARM7のステートをにする。
BOOT_Core(); // never return
}
@ -78,6 +79,7 @@ static void BOOTi_ClearREG_RAM( void )
reg_GX_DISPSTAT = 0;
reg_SPI_SPICNT = 0;
reg_PXI_MAINP_FIFO_CNT = 0x4008;
// クリアしていないレジスタは、VCOUNT, JOY, PIFCNT, MC-, EXMEMCNT, IME, PAUSE, POWLCDCNT, 他セキュリティ系です。
(void)OS_ResetRequestIrqMask((u16)~0);
}

View File

@ -56,13 +56,7 @@ static void _ISDbgLib_OnLoadChildBinary(void);
asm void BOOT_Core( void )
{
//---------------------------------------
// データキャッシュを全て無効に。DC_InvalidateAllを抜き出して実装
//---------------------------------------
mov r0, #0
mcr p15, 0, r0, c7, c6, 0
//---------------------------------------
// ARM7との同期をとるsubp_stateが2になるのを待って、mainp_stateを2にする。
// ARM7との同期をとるsubp_stateが2になるのを待って、mainp_stateを2にする)
//---------------------------------------
ldr r1, =REG_SUBPINTF_ADDR
@0 ldrh r0, [r1]
@ -72,6 +66,40 @@ asm void BOOT_Core( void )
mov r0, #0x0200
strh r0, [r1]
//---------------------------------------
// データキャッシュを全て無効に。DC_InvalidateAllを抜き出して実装
//---------------------------------------
mov r0, #0
mcr p15, 0, r0, c7, c6, 0
//---------------------------------------
// ARM7との同期をとるsubp_stateが3になるのを待つ)
//---------------------------------------
ldr r1, =REG_SUBPINTF_ADDR
@1 ldrh r0, [r1]
and r0, r0, #0x000f
cmp r0, #0x0003
bne @1
//---------------------------------------
// ARM9 WRAMバンクの設定 MBK1-MBK8 ※WRAMバンクの設定をする時には、ARM7はARM7専用WRAMのBOOT_Coreにいる必要がある。
//---------------------------------------
ldr r0, =HW_TWL_ROM_HEADER_BUF
add r0, r0, #0x180 // rom_header->s.main_wram_config_data
// r0- => r9-r2
ldr r9, =REG_MBK1_ADDR
add r2, r9, #32
@2 ldr r3, [r0], #4
str r3, [r9], #4
cmp r9, r2
blt @2
//---------------------------------------
// ARM7との同期をとるmainp_stateを3にする。
//---------------------------------------
mov r0, #0x0300
strh r0, [r1]
//---------------------------------------
// ISデバッガ動作フラグの格納
//---------------------------------------
@ -84,10 +112,10 @@ asm void BOOT_Core( void )
// ARM7との同期をとるsubp_stateが1になるのを待って、mainp_stateを1にする。
//---------------------------------------
ldr r1, =REG_SUBPINTF_ADDR
@1 ldrh r0, [r1]
@3 ldrh r0, [r1]
and r0, r0, #0x000f
cmp r0, #0x0001
bne @1
bne @3
mov r0, #0x0100
strh r0, [r1]
@ -115,10 +143,10 @@ asm void BOOT_Core( void )
// ARM7との最終同期をとる(subp_stateが0になるのを待って、mainp_stateを0にする
//---------------------------------------
ldr r1, =REG_SUBPINTF_ADDR
@2 ldrh r0, [r1]
@4 ldrh r0, [r1]
and r0, r0, #0x000f
cmp r0, #0x0001
beq @2
beq @4
mov r0, #0
strh r0, [r1]

View File

@ -16,7 +16,9 @@
*---------------------------------------------------------------------------*/
#include <twl.h>
#include <twl/os/common/format_rom.h>
#include <sysmenu/boot/common/boot.h>
#include <firm/format/wram_regs.h>
//#include <nitro/mb.h>
//#include "IPL2_work.h"
//#include "define.h"
@ -76,6 +78,15 @@ void BOOT_Ready( void )
(void)OS_SetIrqMask( 0 );
(void)OS_ResetRequestIrqMask( (u16)~0 );
// WRAM̔zu
{
ROM_Header_Short *pROMH = (ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF;
MIHeader_WramRegs *pWRAMREGS = (MIHeader_WramRegs *)pROMH->main_wram_config_data;
reg_GX_VRAMCNT_C = pWRAMREGS->main_vrambnk_c;
reg_GX_VRAMCNT_D = pWRAMREGS->main_vrambnk_d;
reg_GX_VRAMCNT_WRAM = pWRAMREGS->main_wrambnk_01;
}
BOOT_Core(); // never return
}

View File

@ -469,6 +469,9 @@ OS_TPrintf("RebootSystem failed: cant read file(%d, %d)\n", source[i], len);
(void)FS_CloseFile(file);
}
// ROMヘッダバッファをコピー
MI_CpuCopy32( (void *)HW_TWL_ROM_HEADER_BUF, (void *)HW_ROM_HEADER_BUF, HW_ROM_HEADER_BUF_END - HW_ROM_HEADER_BUF );
// 起動。
BOOT_Ready();

View File

@ -16,7 +16,9 @@
# $Author: $
#----------------------------------------------------------------------------
SUBDIRS =
SUBDIRS = ../../../libraries_sysmenu/sysmenu \
../../../libraries_sysmenu/boot \
../../../components/hyena.TWL
#----------------------------------------------------------------------------

View File

@ -22,7 +22,7 @@ SUBDIRS = ../../../libraries_sysmenu/sysmenu
TARGET_FIRM = SYSTEMMENU
TARGET_PLATFORM = TWL
TWL_ARCHGEN = LIMITED
#TWL_ARCHGEN = LIMITED
TARGET_BIN = main.srl

View File

@ -167,6 +167,12 @@ int MachineSettingMain( void )
}
tp_select = SelectMenuByTP( &s_csr, &s_settingParam );
DrawMenu( s_csr, &s_settingParam );
#if 0
if( pad.trg & PAD_BUTTON_START ) {
PM_ForceToResetHardware();
}
#endif
if( ( pad.trg & PAD_BUTTON_A ) || ( tp_select ) ) { // メニュー項目への分岐
if( s_settingPos[ s_csr ].enable ) {

Binary file not shown.

View File

@ -25,6 +25,7 @@ extern "C" {
/*---------------------------------------------------------------------------*
Type definition
*---------------------------------------------------------------------------*/
#define BOOTCORE_ARM7_ADDR 0x0380f100
/*---------------------------------------------------------------------------*
functions