・TWLアプリのカードブートができるよう変更。(とりあえずNTRカードでのブートに対応)

・カード抜けチェック対応のため、カード起動時にHW_BOOT_CHECK_INFO_BUFとHW_RED_RESERVEDに現在のカードのカードIDをセットするよう変更。
・カードBでのブートに対応するため、カード起動時にカードスロットA,Bをスワップするよう変更。
・boot.hのヘッダ整理。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@256 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yosiokat 2007-11-26 11:45:32 +00:00
parent dd39d49b2d
commit 692a886831
13 changed files with 100 additions and 75 deletions

View File

@ -62,12 +62,14 @@ SYSMENU_LIBS ?= \
libsettings$(TWL_LIBSUFFIX).a \
libmbloader$(TWL_LIBSUFFIX).a \
libacsign$(TWL_LIBSUFFIX).a \
libboot$(TWL_LIBSUFFIX).a \
# libcardboot$(TWL_LIBSUFFIX).a
else # ($(CODEGEN_PROC),ARM7)
SYSMENU_LIBS ?= \
libmbloader_sp$(TWL_LIBSUFFIX).a \
libboot_sp$(TWL_LIBSUFFIX).a \
libcardboot_sp$(TWL_LIBSUFFIX).a
endif

View File

@ -34,11 +34,7 @@
#include <twl/cdc.h>
#include <twl/aes.h>
#include <twl/mcu.h>
#include <sysmenu/boot/common/boot.h>
#include <sysmenu/sysmenu_lib/common/sysmenu_work.h>
#include <sysmenu/card/common/blowfish.h>
#include <sysmenu/card/common/Card.h>
#include <sysmenu.h>
#include "nvram_sp.h"
/*---------------------------------------------------------------------------*

View File

@ -16,8 +16,7 @@
*---------------------------------------------------------------------------*/
#include <twl.h>
#include <sysmenu/boot/common/boot.h>
#include <sysmenu/memorymap.h>
#include <sysmenu.h>
//#include "loader.h"
//#include "mb_child.h"

View File

@ -16,13 +16,13 @@
*---------------------------------------------------------------------------*/
#include <twl.h>
#include <sysmenu/boot/common/boot.h>
#include <sysmenu.h>
#include "reboot.h"
//#include "loader.h"
//#include "mb_child.h"
// define data-------------------------------------------------------
#define MAINP_SEND_IF 0x2000
#define reg_MI_MC_SWP (*(REGType8v *) ( REG_MC1_ADDR + 1 ) )
// extern data-------------------------------------------------------
@ -50,20 +50,17 @@ BOOL BOOT_WaitStart( void )
SYSM_OWN_ARM7_MMEM_ADDR, SYSM_OWN_ARM7_MMEM_ADDR_END - SYSM_OWN_ARM7_MMEM_ADDR,
SYSM_OWN_ARM9_MMEM_ADDR, SYSM_OWN_ARM9_MMEM_ADDR_END - SYSM_OWN_ARM9_MMEM_ADDR,
SYSM_OWN_ARM7_WRAM_ADDR, SYSM_OWN_ARM7_WRAM_ADDR_END - SYSM_OWN_ARM7_WRAM_ADDR,
// HW_PRV_WRAM_END - 0x600, 0x600,
SYSM_OWN_ARM7_WRAM_ADDR, SYSM_OWN_ARM7_WRAM_ADDR_END - SYSM_OWN_ARM7_WRAM_ADDR,
#ifdef ISDBG_MB_CHILD_
HW_PRV_WRAM_END - 0x600, (HW_PRV_WRAM_END - HW_PRV_WRAM_SYSRV_SIZE) - (HW_PRV_WRAM_END - 0x600),
HW_PRV_WRAM_END - 0x600 + 0x20, HW_PRV_WRAM_END - (HW_PRV_WRAM_END - 0x600 + 0x20),
#endif
//SYSM_BOOTCODE_ARM7_ADDR, ClearMemory - SYSM_BOOTCODE_ARM7_ADDR,
// 0x02fff000, 0x800,
// 0xda0, 0x60,
// 0xf80, 0x80,
HW_MAIN_MEM_SHARED, HW_RED_RESERVED - HW_MAIN_MEM_SHARED,
HW_ARENA_INFO_BUF, HW_ROM_HEADER_BUF - HW_ARENA_INFO_BUF,
HW_PXI_SIGNAL_PARAM_ARM9, HW_MAIN_MEM_SYSTEM_END - HW_PXI_SIGNAL_PARAM_ARM9,
NULL
};
(void)OS_DisableIrq(); // ここで割り込み禁止にしないとダメ。
(void)OS_SetIrqMask(0); // SDKバージョンのサーチに時間がかかると、ARM9がHALTにかかってしまい、ARM7のサウンドスレッドがARM9にFIFOでデータ送信しようとしてもFIFOが一杯で送信できない状態で無限ループに入ってしまう。
/*
@ -74,11 +71,11 @@ BOOL BOOT_WaitStart( void )
InsertWLPatch();
}
*/
BOOTi_ClearREG_RAM(); // ARM7側のメモリレジスタクリア。
reg_MI_MBK9 = 0; // 全WRAMのロック解除
reg_PXI_MAINPINTF = MAINP_SEND_IF | 0x0100; // ARM9に対してブートするようIRQで要求ARM7のステートをにする。
// BOOT_Core(); // never return
// SDK共通リブート
OS_Boot( (void *)*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x34), clr_list );
}
@ -89,11 +86,16 @@ static void BOOTi_ClearREG_RAM( void )
{
int i ;
// SVC_CpuClearFast(0x0000, IPL2_PRV_WRAM_ARENA_LO, RETURN_FROM_MAIN_ARM7_FUNCP - IPL2_PRV_WRAM_ARENA_LO );
// アリーナのクリア
for( i = 0; i <= MI_DMA_MAX_NUM; i++ ) { // DMAの停止
MI_StopDma( (u16)i );
}
#ifdef DEBUG_USED_CARD_SLOT_B_
reg_MI_MC_SWP = 0x80; // カードスロットのスワップ
#endif
*(u32 *)HW_BOOT_CHECK_INFO_BUF = SYSMi_GetWork()->nCardID; // カード抜けチェックバッファにカードIDをセット
*(u32 *)HW_RED_RESERVED = SYSMi_GetWork()->nCardID;
// レジスタのクリア
SVC_CpuClearFast( 0x0000, (void*)(HW_REG_BASE + 0x0b0), (0x13c - 0x0b0) );
// DMA0SAD RCNT1

View File

@ -16,7 +16,7 @@
*---------------------------------------------------------------------------*/
#include <twl.h>
#include <sysmenu/boot/common/boot.h>
#include <sysmenu.h>
//#include <nitro/mb.h>
//#include "IPL2_work.h"
//#include "define.h"

View File

@ -17,12 +17,9 @@
#include <twl.h>
#include <twl/os/common/format_rom.h>
#include <sysmenu/boot/common/boot.h>
#include <sysmenu.h>
#include <firm/format/wram_regs.h>
#include "reboot.h"
//#include <nitro/mb.h>
//#include "IPL2_work.h"
//#include "define.h"
// define data-------------------------------------------------------
@ -38,8 +35,6 @@
static void BOOTi_ClearREG_RAM( void );
static void BOOTi_StartBOOT( void );
static void ResetCP15( void );
// global variables--------------------------------------------------
// static variables--------------------------------------------------
@ -102,12 +97,7 @@ void BOOT_Ready( void )
reg_GX_VRAMCNT_D = pWRAMREGS->main_vrambnk_d;
reg_GX_VRAMCNT_WRAM = pWRAMREGS->main_wrambnk_01;
}
//BOOT_Core(); // never return
// プロテクションユニットの初期化
ResetCP15();
// SDK共通リブート
OS_Boot( (void *)*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x24), clr_list );
}
@ -143,32 +133,3 @@ static void BOOTi_ClearREG_RAM( void )
// クリアしていないレジスタは、VCOUNT, PIFCNT, MC-, EXMEMCNT, IME, RBKCNT1, PAUSE, POWLCDCNT, 全3D系。
}
//-----------------------------------------------------------------------
// システム制御コプロセッサ リセット
//-----------------------------------------------------------------------
#include <twl/code32.h>
asm static void ResetCP15( void )
{
// プロテクションユニットキャッシュITCM無効。DTCMは有効スタックをクリアするため
ldr r0, = C1_DTCM_ENABLE | C1_EXCEPT_VEC_UPPER | C1_SB1_BITSET
mcr p15, 0, r0, c1, c0, 0
// ITCMの割り当てを解除
mov r0, #0
mcr p15, 0, r0, c6, c5, 0
// DTCMの割り当てを解除
// mov r0,#0
// mcr p15, 0, r0, c9, c1, 0
// キャッシュ無効化
mov r0, #0
mcr p15, 0, r0, c7, c5, 0 // 命令キャッシュ
mcr p15, 0, r0, c7, c6, 0 // データキャッシュ
// ライトバッファ エンプティ待ち
mcr p15, 0, r0, c7, c10, 4
bx lr
}
#include <twl/codereset.h>

View File

@ -267,7 +267,9 @@ BOOL Card_Boot(void)
// ※最終的にはカードIDをHW_BOOT_CHECK_INFO_BUFに入れないと、アプリ起動後のカード抜け処理が上手く動作しないので注意。
// 今はスロットBを使用しているので、ーケアでOK.
// *(u32 *)HW_BOOT_CHECK_INFO_BUF = s_cbData.id_gam;
// *(u32 *)HW_RED_RESERVED = s_cbData.id_gam;
SYSMi_GetWork()->nCardID = s_cbData.id_gam;
OS_TPrintf("-----------------------------------------------\n\n");
}
else{

View File

@ -17,7 +17,6 @@
#include <twl.h>
#include <sysmenu.h>
#include <sysmenu/boot/common/boot.h>
#include "sysmenu_define.h"
#include "spi.h"
@ -63,7 +62,71 @@ static TWLBannerFile s_bannerBuf[ LAUNCHER_TITLE_LIST_NUM ] ATTRIBUTE_ALIGN(32);
// const data------------------------------------------------------------------
#if 0
typedef enum RomSegmentName {
ROM_HEADER = 0,
ARM9_STATIC,
ARM7_STATIC,
ARM9_LTD_STATIC,
ARM7_LTD_STATIC
}RomSegmentName;
typedef struct RomSegmentRange {
u32 start;
u32 end;
}RomSegmentRange;
typedef struct RomReloadInfo {
void *pSrc;
void *pDst;
u32 length;
BOOL revCopy;
}RomReloadInfo;
static RomSegmentRange romSegmentRange[] = {
{ HW_TWL_ROM_HEADER_BUF, HW_TWL_ROM_HEADER_BUF_END },
{ SYSM_NTR_ARM9_LOAD_MMEM, SYSM_NTR_ARM9_LOAD_MMEM_END },
{ SYSM_NTR_ARM7_LOAD_MMEM, SYSM_NTR_ARM7_LOAD_MMEM_END },
{ SYSM_TWL_ARM9_LTD_LOAD_MMEM, SYSM_TWL_ARM9_LTD_LOAD_MMEM_END },
{ SYSM_TWL_ARM7_LTD_LOAD_MMEM, SYSM_TWL_ARM7_LTD_LOAD_MMEM_END },
};
static RomReloadInfo romReloadInfo[] = {
};
static BOOL SYSMi_OutOfRangeRomSegment( u32 start, u32 length, RomSegmentRange *pRange, ReloadInfo *pReload )
{
BOOL isReload = FALSE;
u32 end = (u32)start + length;
if( start < pRange->start ) {
if( end <= pRange->start ) {
isReload = TRUE;
pReload->revCopy = FALSE;
}else {
isReload = TRUE;
pReload->revCopy = TRUE;
}
}else if( start <= pRange->end ) {
if( end <= pRange->end ) {
if(u32)( pRange->start + length ) )
}else if( end > pRange->end ) {
isReload = TRUE;
pReload->revCopy = FALSE;
}
}else if( start > pRange->end ) {
isReload = TRUE;
}
if( isReload ) {
pReload->pDst = (void *)start;
pReload->pSrc = (void *)pRange->start;
pReload->length = length;
}
}
#endif
// ============================================================================
//

View File

@ -45,18 +45,17 @@ SRCS_LOGO = logoDemo.c logoData.c
SRCS = main.c launcher.c \
$(addprefix $(LOGO_DIR)/, $(SRCS_LOGO)) \
$(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c \
$(BG_DIR)/BGData_Launcher.c
$(BG_DIR)/BGData_Launcher.c
LINCLUDES = $(MISC_DIR)/include \
$(SRCDIR)/$(LOGO_DIR)
LLIBRARIES += libnam$(TWL_LIBSUFFIX).a \
libese$(TWL_LIBSUFFIX).a \
libboot$(TWL_LIBSUFFIX).a
libese$(TWL_LIBSUFFIX).a
ADDRESS_DTCM = 0x0e000000
DEFAULT_COMP_ARM7 = hyena
DEFAULT_COMP_ARM7 = hyena
MAKEROM_FLAGS += -F -DTITLEID_LO='$(TITLEID_LO)'
@ -69,7 +68,7 @@ INSTALL_DIR = $(SDK_NMENU_DATADIR)
#----------------------------------------------------------------------------
do-build : $(FONT_OBJS) $(TARGETS)
do-build : $(TARGETS)
include $(TWLIPL_ROOT)/build/buildtools/modulerules

View File

@ -28,6 +28,7 @@
#include <sysmenu/sysmenu_lib.h>
#include <sysmenu/banner.h>
#include <sysmenu/boot.h>
#include <sysmenu/settings.h>
#include <sysmenu/memorymap.h>
#include <sysmenu/card.h>

View File

@ -1,6 +1,6 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: boot.h
File: boot_api.h
Copyright 2007 Nintendo. All rights reserved.
@ -16,7 +16,7 @@
*---------------------------------------------------------------------------*/
#if !defined(_SYSMENU_BOOT_H_)
#define _SYSMENU_BOOT_H_
#define _SYSMENU_BOOT_API_H_
#include <sysmenu/memorymap.h>
@ -80,4 +80,4 @@ void BOOT_Ready( void );
}
#endif
#endif /* _SYSMENU_BOOT_H_ */
#endif /* _SYSMENU_BOOT_API_H_ */

View File

@ -115,11 +115,11 @@ typedef struct SYSM_work {
u16 cardHeaderCrc16_bak; // カード検出時に算出したROMヘッダCRC16ARM7側ライブラリでダイレクトに書き換わる側
OSLockWord lockCardRsc; // カードリソース排他制御用
int cloneBootMode;
u32 nCardID; // カードID
ResetParam resetParam;
// NTR-IPL2のレガシー 最終的には消すと思う
u32 nCardID;
BOOL enableCardNormalOnly;
u8 rtcStatus;
}SYSM_work;