ブートの調整。

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 #! make -f
#---------------------------------------------------------------------------- #----------------------------------------------------------------------------
# Project: TwlSDK - components - hyena.TWL # Project: TwlIPL
# File: Makefile # File: Makefile
# #
# Copyright 2007 Nintendo. All rights reserved. # Copyright 2007 Nintendo. All rights reserved.
@ -41,7 +41,10 @@ include $(TWLIPL_ROOT)/build/buildtools/commondefs
#MACRO_FLAGS += -DSDK_ARM7COMP_LTD #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)' MAKELCF_FLAGS += -DISDBG_LIBS='$(ISDBG_LIBS)'
#-------------------------------- #--------------------------------

View File

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

View File

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

View File

@ -83,7 +83,14 @@ TwlSpMain(void)
PrintDebugInfo(); 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(); heapHandle = InitializeAllocateSystem();
// ボタン入力サーチ初期化 // ボタン入力サーチ初期化

View File

@ -53,17 +53,20 @@ static void _ISDbgLib_OnLoadChildBinary( void );
static asm void ClearMemory( void ) static asm void ClearMemory( void )
{ {
mov r11, lr mov r11, lr
#if 0
// ldr r0, = IPL2_ADDR_TOP // IPL2-ARM9 & ARM7プログラムのクリア ldr r0, = 0x02280000 // SYSMENU-ARM7 MMEMのクリア
// ldr r1, = MB_BSSDESC_ADDRESS ldr r1, = 0x02380000
// bl CpuClear32Byte
ldr r0, = HW_WRAM // ARM7WRAMのクリア
ldr r1, = RETURN_FROM_MAIN_ARM7_FUNCP
bl CpuClear32Byte 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 add r1, r2, #0x800
bl CpuClear32Byte bl CpuClear32Byte
#ifndef ISDBG_MB_CHILD_ add r0, r2, #0xda0 // HW_ARENA_INFO_BUF (アリーナ情報構造体) ※デバッガモニタ用ハンドラはクリアしない。
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 r1, r0, #0x60 add r1, r0, #0x60
bl CpuClear32Byte bl CpuClear32Byte
#endif // ISDBG_MB_CHILD_
add r0, r2, #0xf80 add r0, r2, #0xf80
add r1, r0, #0x80 add r1, r0, #0x80
@ -156,6 +153,30 @@ asm void BOOT_Core( void )
//--------------------------------------- //---------------------------------------
bl ClearMemory 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 ldr r1, =REG_MAINPINTF_ADDR
mov r0, #0x0100 mov r0, #0x0100
strh r0, [r1] // メインプロセッサインターフェースレジスタ strh r0, [r1] // メインプロセッサインターフェースレジスタ
@1 ldrh r0, [r1] @3 ldrh r0, [r1]
and r0, r0, #0x000f and r0, r0, #0x000f
cmp r0, #0x0001 cmp r0, #0x0001
bne @1 bne @3
//--------------------------------------- //---------------------------------------
// ISデバッガでのDL子機プログラムのデバッグ情報設定 // ISデバッガでのDL子機プログラムのデバッグ情報設定
@ -201,9 +222,9 @@ asm void BOOT_Core( void )
ldr r1, =REG_MAINPINTF_ADDR ldr r1, =REG_MAINPINTF_ADDR
mov r0, #0 mov r0, #0
strh r0, [r1] // メインプロセッサインターフェースレジスタ strh r0, [r1] // メインプロセッサインターフェースレジスタ
@2 ldrh r0, [r1] @4 ldrh r0, [r1]
cmp r0, #0x0001 cmp r0, #0x0001
beq @2 beq @4
//--------------------------------------- //---------------------------------------
// R11の値をもとにブートアドレス取得 // R11の値をもとにブートアドレス取得

View File

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

View File

@ -56,13 +56,7 @@ static void _ISDbgLib_OnLoadChildBinary(void);
asm void BOOT_Core( void ) asm void BOOT_Core( void )
{ {
//--------------------------------------- //---------------------------------------
// データキャッシュを全て無効に。DC_InvalidateAllを抜き出して実装 // ARM7との同期をとるsubp_stateが2になるのを待って、mainp_stateを2にする)
//---------------------------------------
mov r0, #0
mcr p15, 0, r0, c7, c6, 0
//---------------------------------------
// ARM7との同期をとるsubp_stateが2になるのを待って、mainp_stateを2にする。
//--------------------------------------- //---------------------------------------
ldr r1, =REG_SUBPINTF_ADDR ldr r1, =REG_SUBPINTF_ADDR
@0 ldrh r0, [r1] @0 ldrh r0, [r1]
@ -72,6 +66,40 @@ asm void BOOT_Core( void )
mov r0, #0x0200 mov r0, #0x0200
strh r0, [r1] 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デバッガ動作フラグの格納 // ISデバッガ動作フラグの格納
//--------------------------------------- //---------------------------------------
@ -84,10 +112,10 @@ asm void BOOT_Core( void )
// ARM7との同期をとるsubp_stateが1になるのを待って、mainp_stateを1にする。 // ARM7との同期をとるsubp_stateが1になるのを待って、mainp_stateを1にする。
//--------------------------------------- //---------------------------------------
ldr r1, =REG_SUBPINTF_ADDR ldr r1, =REG_SUBPINTF_ADDR
@1 ldrh r0, [r1] @3 ldrh r0, [r1]
and r0, r0, #0x000f and r0, r0, #0x000f
cmp r0, #0x0001 cmp r0, #0x0001
bne @1 bne @3
mov r0, #0x0100 mov r0, #0x0100
strh r0, [r1] strh r0, [r1]
@ -115,10 +143,10 @@ asm void BOOT_Core( void )
// ARM7との最終同期をとる(subp_stateが0になるのを待って、mainp_stateを0にする // ARM7との最終同期をとる(subp_stateが0になるのを待って、mainp_stateを0にする
//--------------------------------------- //---------------------------------------
ldr r1, =REG_SUBPINTF_ADDR ldr r1, =REG_SUBPINTF_ADDR
@2 ldrh r0, [r1] @4 ldrh r0, [r1]
and r0, r0, #0x000f and r0, r0, #0x000f
cmp r0, #0x0001 cmp r0, #0x0001
beq @2 beq @4
mov r0, #0 mov r0, #0
strh r0, [r1] strh r0, [r1]

View File

@ -16,7 +16,9 @@
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
#include <twl.h> #include <twl.h>
#include <twl/os/common/format_rom.h>
#include <sysmenu/boot/common/boot.h> #include <sysmenu/boot/common/boot.h>
#include <firm/format/wram_regs.h>
//#include <nitro/mb.h> //#include <nitro/mb.h>
//#include "IPL2_work.h" //#include "IPL2_work.h"
//#include "define.h" //#include "define.h"
@ -76,6 +78,15 @@ void BOOT_Ready( void )
(void)OS_SetIrqMask( 0 ); (void)OS_SetIrqMask( 0 );
(void)OS_ResetRequestIrqMask( (u16)~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 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); (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(); BOOT_Ready();

View File

@ -16,7 +16,9 @@
# $Author: $ # $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_FIRM = SYSTEMMENU
TARGET_PLATFORM = TWL TARGET_PLATFORM = TWL
TWL_ARCHGEN = LIMITED #TWL_ARCHGEN = LIMITED
TARGET_BIN = main.srl TARGET_BIN = main.srl

View File

@ -167,6 +167,12 @@ int MachineSettingMain( void )
} }
tp_select = SelectMenuByTP( &s_csr, &s_settingParam ); tp_select = SelectMenuByTP( &s_csr, &s_settingParam );
DrawMenu( 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( ( pad.trg & PAD_BUTTON_A ) || ( tp_select ) ) { // メニュー項目への分岐
if( s_settingPos[ s_csr ].enable ) { if( s_settingPos[ s_csr ].enable ) {

Binary file not shown.

View File

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