From 74db391601383b4129365b8036676ab2c738183d Mon Sep 17 00:00:00 2001 From: yutaka Date: Fri, 24 Aug 2007 08:07:38 +0000 Subject: [PATCH] support dual header nandfirm image git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/twl_wrapsdk/trunk@252 4ee2a332-4b2b-5046-8439-1ba90f034370 --- .../fatfs/nand_formatter_kmc/ARM7/src/main.c | 50 +++++++++++-------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/build/tests/fatfs/nand_formatter_kmc/ARM7/src/main.c b/build/tests/fatfs/nand_formatter_kmc/ARM7/src/main.c index 6cf4db6..c173d02 100644 --- a/build/tests/fatfs/nand_formatter_kmc/ARM7/src/main.c +++ b/build/tests/fatfs/nand_formatter_kmc/ARM7/src/main.c @@ -53,7 +53,7 @@ static void VBlankIntr(void); /*---------------------------------------------------------------------------* - + *---------------------------------------------------------------------------*/ static u16 path_str[512/sizeof(u16)]; //ロングファイル名 @@ -83,7 +83,7 @@ static BOOL getchar_yes_no_prompt(void) static int pow10( int count) { int i, result; - + result = 1; for( i=0; i= '0')&&(c <= '9')) { kmc_putchar( c); @@ -111,7 +111,7 @@ static int get_number_prompt( void) } } keta = i; - + result_num = 0; for( j=0; j "); // partition_MB_size[INDEX_FAT3_PARTITION] = get_number_prompt(); // DBG_PRINTF( " (%d MBytes)\n\n", partition_MB_size[INDEX_FAT3_PARTITION]); @@ -246,8 +246,8 @@ void TwlSpMain(void) } #endif DBG_PRINTF( "%d FAT Partitions.\n", nand_fat_partition_num); - - + + /*----- nandfirmチェック -----*/ // pc_raw_read( 5, (byte*)block_buf, 1, 1, TRUE); nandRtfsIo( 5, 1, (byte*)block_buf, 1, TRUE); @@ -255,19 +255,25 @@ void TwlSpMain(void) arm9_size = *(u32*)(((u8*)block_buf)+0x2C); arm7_ofs = *(u32*)(((u8*)block_buf)+0x30); arm7_size = *(u32*)(((u8*)block_buf)+0x3C); + if (arm9_ofs == 0x800 || arm7_ofs == 0x800) // there is a duplicate header for mirroring + { + nandRtfsIo( 5, 3, (byte*)block_buf, 1, TRUE); // get header for mirroring image + arm9_ofs = *(u32*)(((u8*)block_buf)+0x20); + arm7_ofs = *(u32*)(((u8*)block_buf)+0x30); + } // DBG_PRINTF( "arm9: 0x%x, 0x%x\n", arm9_ofs, arm9_size); // DBG_PRINTF( "arm7: 0x%x, 0x%x\n", arm7_ofs, arm7_size); if( ((arm9_ofs + arm9_size) == arm7_ofs) && (arm9_ofs < arm7_ofs) && (arm9_size != 0) && (arm7_size != 0)) { - nand_firm_size = arm7_ofs + arm7_size; + nand_firm_size = (arm9_ofs < arm7_ofs ? arm7_ofs + arm7_size : arm9_ofs + arm9_size); DBG_PRINTF( "nandfirm found. (size:0x%x bytes)\n", nand_firm_size); nand_firm_size = (nand_firm_size / 1024 / 1024) + (((nand_firm_size % (1024*1024)) != 0)? 1:0); // DBG_PRINTF( "firm %dMB, raw %dMB\n", nand_firm_size, partition_MB_size[INDEX_RAW_PARTITION]); - + if( nand_firm_size > partition_MB_size[INDEX_RAW_PARTITION]) { - + DBG_PRINTF( "YOUR SETTING WILL ERASE NAND FIRM, OK?(y/n) -> "); if( FALSE == getchar_yes_no_prompt()) { PRINTDEBUG( "o\n"); @@ -283,7 +289,7 @@ void TwlSpMain(void) }else{ DBG_PRINTF( "nandfirm is not found.\n"); } - + NAND_FLASH_FORMAT_START: /*------------------------------*/ @@ -332,8 +338,8 @@ NAND_FLASH_FORMAT_START: PRINTDEBUG( "pc_set_default_drive failed\n"); goto NAND_FLASH_FORMAT_END; } - - + + /**/ // PRINTDEBUG( "pc_check_disk start. please wait.\n"); // pc_check_disk( (byte*)"F:", &dstat, 0, 1, 1); @@ -345,14 +351,14 @@ NAND_FLASH_FORMAT_START: PRINTDEBUG( "Invalid parameter. (size over)\n"); goto NAND_FLASH_FORMAT_END; } - + /**/ if( !pc_format_media( (byte*)path_str, &geometry)) { PRINTDEBUG( "pc_format_media failed\n"); goto NAND_FLASH_FORMAT_END; } PRINTDEBUG( "build MBR success.\n"); - + /*ボリュームフォーマット*/ if( !pc_format_volume( (byte*)path_str, &geometry)) { PRINTDEBUG( "pc_format_volume (p0) failed\n"); @@ -362,7 +368,7 @@ NAND_FLASH_FORMAT_START: /*-------------------------------------------------*/ - + /*マウント(F:p0, G:p1, H:p2, I:p3)*/ for( i=1; i