Author: titmuss
Date: Thu Jan 24 04:36:23 2008
New Revision: 1603
URL: http://svn.slimdevices.com?rev=1603&root=Jive&view=rev
Log:
Bug: N/A
Description:
Added new commands to the bootloader for verification of bad blocks.
nandbb <block> <numblocks> # prints out any blocks with bad block mark
nandmb <block> # marks the block as a bad block
nande <block> <bytes> # not new, but can be used to remove a bad block mark
For example:
JIVE# nandbb 80 580
StartBlock 128 (0x80) : NumBlock 1408 (0x580)
[block 804 (0x324) has been marked as a bad block(0)]
JIVE# nandmb 322
Mark block 802 (0x322) as BAD
[block 802 (0x322) is marked as a bad block]
[block 802 (0x322) has been marked as a bad block(44)]
JIVE# nandbb 80 580
StartBlock 128 (0x80) : NumBlock 1408 (0x580)
[block 802 (0x322) has been marked as a bad block(44)]
[block 804 (0x324) has been marked as a bad block(0)]
JIVE# nande 322 4096
StartBlock 802 (0x322) : Size 16534 (0x4096)
Total Erase Blocks 1 (0x1)
JIVE# nandbb 80 580
StartBlock 128 (0x80) : NumBlock 1408 (0x580)
[block 804 (0x324) has been marked as a bad block(0)]
Modified:
trunk/squeezeboxJive/src/bootloader/s3c24x0_uboot/common/cmd_nand_s3c2413.c
Modified:
trunk/squeezeboxJive/src/bootloader/s3c24x0_uboot/common/cmd_nand_s3c2413.c
URL:
http://svn.slimdevices.com/trunk/squeezeboxJive/src/bootloader/s3c24x0_uboot/common/cmd_nand_s3c2413.c?rev=1603&root=Jive&r1=1602&r2=1603&view=diff
==============================================================================
--- trunk/squeezeboxJive/src/bootloader/s3c24x0_uboot/common/cmd_nand_s3c2413.c
(original)
+++ trunk/squeezeboxJive/src/bootloader/s3c24x0_uboot/common/cmd_nand_s3c2413.c
Thu Jan 24 04:36:23 2008
@@ -186,14 +186,14 @@
while(1) {
#if BAD_CHECK
if(NF_IsBadBlock(blockIndex)) { // 1:bad 0:good
- printf("Skipping Bad Block %d\n",blockIndex);
+ printf("Skipping Bad Block %d
(0x%x)\n",blockIndex,blockIndex);
blockIndex++;
continue;
}
#endif
for(i=0; i< cpages_in_block ;i++) {
if(!NF_ReadPage(blockIndex,i,dstPt)) {
- printf("Error in Reading Block %d Page
%d\n",blockIndex,i);
+ printf("Error in Reading Block %d (0x%x) Page
%d\n",blockIndex,blockIndex,i);
}
dstPt += cpage_size;
if((u32)dstPt >= (dstAddress+readSize)) // Check end of
buffer
@@ -232,7 +232,7 @@
#endif
if(!NF_EraseBlock(blockIndex)) {
blockIndex++; // for next block
- printf(" Error-> Erase Block %d \n",(int)blockIndex);
+ printf(" Error-> Erase Block %d (0x%x)
\n",(int)blockIndex,blockIndex);
continue;
}
@@ -300,15 +300,31 @@
printf("StartBlock %d (0x%x) : NumBlock %d (0x%x)
\n",startblk,startblk,numblks, numblks);
for (i=startblk; i<startblk+numblks; i++) {
- if(NF_IsBadBlock(i)) { // 1:bad 0:good
- printf("B");
- }
- else {
- printf(".");
- }
- if (!( i % 16 )) printf("\n");
- }
- printf("\n");
+ NF_IsBadBlock(i); // prints bad blocks
+ }
+
+ return 0;
+}
+
+
+int do_nandmb(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+ int blk;
+
+ if ( argc != 2 ){
+ printf ("Usage:\n%s\n", cmdtp->usage);
+ return 1;
+ }
+ blk = simple_strtoul(argv[1], NULL, 16);
+ printf("Mark block %d (0x%x) as BAD\n", blk, blk);
+
+ NF_Init();
+ NF_Reset();
+
+ NF_MarkBadBlock(blk, NF_BB_ON);
+ NF_IsBadBlock(blk);
+
+ return 0;
}
@@ -453,6 +469,13 @@
"nandbb HEX: targetblock numblocks \n",
"\n - SMDK24X0 NAND Flash Bad Block Check\n" \
"nandbb targetblock numblocks \n" \
+);
+
+U_BOOT_CMD(
+ nandmb, 4, 1, do_nandmb,
+ "nandmb HEX: targetblock \n",
+ "\n - SMDK24X0 NAND Flash Mark Bad Block\n" \
+ "nandmb targetblock \n" \
);
U_BOOT_CMD(
@@ -545,9 +568,9 @@
NF_nFCE_H();
}
if ( mark_flag == NF_BB_ON) {
- printf("[block 0x%x is marked as a bad block]\n",block);
+ printf("[block %d (0x%x) is marked as a bad
block]\n",block,block);
} else {
- printf("[block 0x%x is marked as a good block]\n",block);
+ printf("[block %d (0x%x) is marked as a good
block]\n",block,block);
}
return 1;
}
@@ -654,7 +677,7 @@
if (status & 0x1) {// Page write error
NF_nFCE_H();
- printf("[PROGRAM_ERROR:block#=%d]\n",block);
+ printf("[PROGRAM_ERROR:block#=%d (0x%x)]\n",block,block);
NF_MarkBadBlock(block, NF_BB_ON);
return FAIL;
} else {
@@ -808,7 +831,7 @@
if (NFDATA8 & 0x1) {
NF_nFCE_H();
- printf("[ERASE_ERROR:block#=%d]\n",block);
+ printf("[ERASE_ERROR:block#=%d (0x%x)]\n",block,block);
NF_MarkBadBlock(block,NF_BB_ON);
return FAIL;
}
@@ -822,7 +845,7 @@
{
int i;
unsigned int blockPage;
- u16 data;
+ u16 data = 0;
blockPage = block * cpages_in_block;
@@ -858,7 +881,7 @@
}
NF_nFCE_H();
if (i != (coob_size/2)) {
- printf("[block %d is bad block(%x)]\n",block,data);
+ printf("[block %d (0x%x) is bad block(%x)]\n",block,block,data);
return 1;
}
return 0;
@@ -911,7 +934,7 @@
if(data != 0xff)
{
- printf("[block %d has been marked as a bad
block(%x)]\n",block,data);
+ printf("[block %d (0x%x) has been marked as a bad
block(%x)]\n",block,block,data);
return 1;
}
return 0;
_______________________________________________
Jive-checkins mailing list
[email protected]
http://lists.slimdevices.com/cgi-bin/mailman/listinfo/jive-checkins