|
@@ -427,8 +427,9 @@ static int nand_block_bad(struct mtd_info *mtd, loff_t ofs, int getchip)
|
|
|
struct nand_chip *this = mtd->priv;
|
|
|
u16 bad;
|
|
|
|
|
|
+ page = (int)(ofs >> this->page_shift) & this->pagemask;
|
|
|
+
|
|
|
if (getchip) {
|
|
|
- page = (int)(ofs >> this->page_shift);
|
|
|
chipnr = (int)(ofs >> this->chip_shift);
|
|
|
|
|
|
/* Grab the lock and see if the device is available */
|
|
@@ -436,18 +437,17 @@ static int nand_block_bad(struct mtd_info *mtd, loff_t ofs, int getchip)
|
|
|
|
|
|
/* Select the NAND device */
|
|
|
this->select_chip(mtd, chipnr);
|
|
|
- } else
|
|
|
- page = (int) ofs;
|
|
|
+ }
|
|
|
|
|
|
if (this->options & NAND_BUSWIDTH_16) {
|
|
|
- this->cmdfunc (mtd, NAND_CMD_READOOB, this->badblockpos & 0xFE, page & this->pagemask);
|
|
|
+ this->cmdfunc (mtd, NAND_CMD_READOOB, this->badblockpos & 0xFE, page);
|
|
|
bad = cpu_to_le16(this->read_word(mtd));
|
|
|
if (this->badblockpos & 0x1)
|
|
|
bad >>= 1;
|
|
|
if ((bad & 0xFF) != 0xff)
|
|
|
res = 1;
|
|
|
} else {
|
|
|
- this->cmdfunc (mtd, NAND_CMD_READOOB, this->badblockpos, page & this->pagemask);
|
|
|
+ this->cmdfunc (mtd, NAND_CMD_READOOB, this->badblockpos, page);
|
|
|
if (this->read_byte(mtd) != 0xff)
|
|
|
res = 1;
|
|
|
}
|