mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
NVRAM の NORファーム予約領域は今まで NANDファーム起動フラグのみを書き換えていましたが、ページ単位で書き換えるように変更しました。(フラグ以外は0埋め)
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1053 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
f98ce59f2f
commit
4da69ae12e
@ -52,9 +52,13 @@
|
||||
#define FILE_NUM_MAX 16
|
||||
|
||||
#define NAND_BLOCK_BYTE 0x200
|
||||
#define NAND_BOOT_FLAG_ADDRESS 0x2ff
|
||||
#define NAND_FIRM_START_OFFSET 0x200
|
||||
|
||||
#define NVRAM_PAGE_SIZE 0x100
|
||||
#define NVRAM_NORFIRM_RESERVED_ADDRESS 0x200
|
||||
#define NVRAM_NORFIRM_NANDBOOT_FLAG_OFFSET 0xff
|
||||
#define NVRAM_NORFIRM_NANDBOOT_FLAG 0x80
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
内部変数定義
|
||||
*---------------------------------------------------------------------------*/
|
||||
@ -62,7 +66,7 @@
|
||||
static s32 sMenuSelectNo;
|
||||
static char sFilePath[FILE_NUM_MAX][FS_ENTRY_LONGNAME_MAX];
|
||||
static u8 sFileNum;
|
||||
static u8 sNandBootFlag = 0xff;
|
||||
static u8 sNorFirmReservedData[NVRAM_PAGE_SIZE]; // ARM7からアクセスするためスタックでは駄目
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
内部関数宣言
|
||||
@ -306,6 +310,7 @@ static BOOL WriteNandfirm(char* file_name)
|
||||
{
|
||||
FSFile file;
|
||||
char full_path[FS_ENTRY_LONGNAME_MAX+6];
|
||||
|
||||
BOOL open_is_ok;
|
||||
BOOL read_is_ok;
|
||||
u8* pTempBuf;
|
||||
@ -315,7 +320,8 @@ static BOOL WriteNandfirm(char* file_name)
|
||||
BOOL result = TRUE;
|
||||
u16 crc_w1, crc_w2;
|
||||
u16 crc_r1, crc_r2;
|
||||
|
||||
u16 crc_norfirm_reserved_area_w, crc_norfirm_reserved_area_r;
|
||||
|
||||
// .nandのフルパスを作成
|
||||
MakeFullPathForSD(file_name, full_path);
|
||||
|
||||
@ -392,12 +398,39 @@ static BOOL WriteNandfirm(char* file_name)
|
||||
}
|
||||
|
||||
// nandfirm 起動フラグを立てる
|
||||
if (kamiNvramWrite(NAND_BOOT_FLAG_ADDRESS, &sNandBootFlag, 1) == KAMI_RESULT_SEND_ERROR)
|
||||
MI_CpuClear8( sNorFirmReservedData, NVRAM_PAGE_SIZE );
|
||||
sNorFirmReservedData[NVRAM_NORFIRM_NANDBOOT_FLAG_OFFSET] = NVRAM_NORFIRM_NANDBOOT_FLAG;
|
||||
|
||||
// NORファームリザーブ領域の書き込みデータのCRCを計算
|
||||
crc_norfirm_reserved_area_w = SVC_GetCRC16( 0xffff, sNorFirmReservedData, NVRAM_PAGE_SIZE );
|
||||
|
||||
DC_FlushRange( sNorFirmReservedData, NVRAM_PAGE_SIZE );
|
||||
if (kamiNvramWrite(NVRAM_NORFIRM_RESERVED_ADDRESS, sNorFirmReservedData, NVRAM_PAGE_SIZE) == KAMI_RESULT_SEND_ERROR)
|
||||
{
|
||||
kamiFontPrintfConsoleEx(1, "Fail kamiNvramWrite()\n");
|
||||
result = FALSE;
|
||||
}
|
||||
|
||||
// CRCを計算するので念のためにクリアしてからリードする
|
||||
MI_CpuFill8( sNorFirmReservedData, 0xee, NVRAM_PAGE_SIZE );
|
||||
if (kamiNvramRead(NVRAM_NORFIRM_RESERVED_ADDRESS, sNorFirmReservedData, NVRAM_PAGE_SIZE) == KAMI_RESULT_SEND_ERROR)
|
||||
{
|
||||
kamiFontPrintfConsoleEx(1, "Fail kamiNvramRead()\n");
|
||||
result = FALSE;
|
||||
}
|
||||
|
||||
// 読み込みはARM7が直接メモリに書き出すため
|
||||
DC_InvalidateRange(sNorFirmReservedData, NVRAM_PAGE_SIZE);
|
||||
// 書き込み後のCRCを計算
|
||||
crc_norfirm_reserved_area_r = SVC_GetCRC16( 0xffff, sNorFirmReservedData, NVRAM_PAGE_SIZE );
|
||||
|
||||
// NORファームリザーブ領域のCRC比較
|
||||
if ( crc_norfirm_reserved_area_w != crc_norfirm_reserved_area_r )
|
||||
{
|
||||
kamiFontPrintfConsoleEx(1, "Fail! Norfirm Reserved Area CRC check %x!=%x\n", crc_norfirm_reserved_area_w, crc_norfirm_reserved_area_r);
|
||||
result = FALSE;
|
||||
}
|
||||
|
||||
kamiFontPrintfConsoleEx(0, "NAND Firm Import Start!\n");
|
||||
|
||||
// NAND書き込み
|
||||
|
||||
Loading…
Reference in New Issue
Block a user