From 128efed75e781959f12bfae29737e34707a6092c Mon Sep 17 00:00:00 2001 From: shirait Date: Fri, 29 Jun 2007 01:20:48 +0000 Subject: [PATCH] fix nand formatter git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/twl_wrapsdk/trunk@146 4ee2a332-4b2b-5046-8439-1ba90f034370 --- .../fatfs/nand_formatter_kmc/ARM7/src/main.c | 85 +++++++++++++++++-- 1 file changed, 80 insertions(+), 5 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 f8ab818..83dee2b 100644 --- a/build/tests/fatfs/nand_formatter_kmc/ARM7/src/main.c +++ b/build/tests/fatfs/nand_formatter_kmc/ARM7/src/main.c @@ -142,6 +142,10 @@ void TwlSpMain(void) u16 nand_fat_partition_num; //FATパーティション数 u16 partition_MB_size[5]; //パーティション毎の容量 /**/ + u32 block_buf[512/4]; + u32 arm9_ofs, arm9_size, arm7_ofs, arm7_size; + u32 nand_firm_size = 0; + /**/ PCFD fd; CHKDISK_STATS dstat; DEV_GEOMETRY geometry; @@ -245,11 +249,82 @@ 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); + arm9_ofs = *(u32*)(((u8*)block_buf)+0x20); + arm9_size = *(u32*)(((u8*)block_buf)+0x2C); + arm7_ofs = *(u32*)(((u8*)block_buf)+0x30); + arm7_size = *(u32*)(((u8*)block_buf)+0x3C); +// 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) { + nand_firm_size = arm7_ofs + arm7_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"); + DBG_CHAR( '\n'); + DBG_PRINTF( "RAW PARTITION SETTING CHANGED (%dMB->%dMB)\n", + partition_MB_size[INDEX_RAW_PARTITION], nand_firm_size); + partition_MB_size[INDEX_RAW_PARTITION] = nand_firm_size; + goto NAND_FLASH_FORMAT_START; + } + DBG_PRINTF( "es\n"); + DBG_CHAR( '\n'); + } + }else{ + DBG_PRINTF( "nandfirm is not found.\n"); + } + +NAND_FLASH_FORMAT_START: + /*------------------------------*/ + + + /*----- 最終確認 -----*/ + DBG_PRINTF( "\nFAT PARTITIONS : %d\n", nand_fat_partition_num); + DBG_PRINTF( "DETAIL ... (RAW:%dMB)", partition_MB_size[INDEX_RAW_PARTITION]); + for( i=0; i "); + if( FALSE == getchar_yes_no_prompt()) { + PRINTDEBUG( "o\n"); + DBG_CHAR( '\n'); + goto NAND_FLASH_FORMAT_END; + } + DBG_PRINTF( "es\n"); + DBG_CHAR( '\n'); + /*--------------------*/ + + /*パーティション構成をライブラリに要求*/ nandSetFormatRequest( nand_fat_partition_num, partition_MB_size); - - /*マウント*/ if( nandRtfsAttach( 5, 0) == FALSE) { //nandパーティション0をFドライブにする PRINTDEBUG( "nandRtfsAttach failed.\n"); @@ -266,8 +341,8 @@ void TwlSpMain(void) 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); @@ -329,7 +404,7 @@ void TwlSpMain(void) } /*----------------------*/ -#if 1 +#if 0 for( i=0; i