bug report about nand flash id table and the way to identify chips

bhsong at augustatek.com bhsong at augustatek.com
Thu Apr 10 01:13:42 EDT 2008


Dear all&Thomas,
There is a bug in the way to identify nand chips.
At the array nand_flash_ids[]  of nand_ids.c, there is a line like that:
 {"NAND 4MiB 3,3V 8-bit",        0xd5, 512, 4, 0x2000, 0},
There is another line like that:
{"NAND 2GiB 3,3V 8-bit",        0xD5, 0, 2048, 0, LP_OPTIONS},
Both Id is 0xd5.
So for  those chip with chip id=0xd5, for example K9LAG08U0,it will be
identified as an  old chip with page size=512 by the nand_get_flash_type()
in nand_base.c like:
         /* Lookup the flash id */
         for (i = 0; nand_flash_ids[i].name != NULL; i++) {
                 if (dev_id == nand_flash_ids[i].id) {
                         type =  &nand_flash_ids[i];
                         break;
                 }
         }

         /* Newer devices have all the information in additional id bytes */
         if (!type->pagesize) {
        ...

        } else {
                 /*
                  * Old devices have chip data hardcoded in the device id
table
                  */
                 mtd->erasesize = type->erasesize;
                 mtd->writesize = type->pagesize;
                 mtd->oobsize = mtd->writesize / 32;
                 busw = type->options & NAND_BUSWIDTH_16;
         }
We should change the way to get page size, block size and so on. For the
beginning some chips in nand_flash_ids[],  it is not always reliable for
us to get all information through only one ID byte.

Thanks
Barry Song









More information about the linux-mtd mailing list