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

Reply via email to