diff options
author | Thomas Gleixner <tglx@cruncher.tec.linutronix.de> | 2006-05-29 18:37:34 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@cruncher.tec.linutronix.de> | 2006-05-29 18:37:34 -0400 |
commit | f1a28c02843efcfcc41982149880bac3ac180234 (patch) | |
tree | b15ca1a140e463ef3cde6b9a8591e7be172ee1f1 /drivers/mtd/nand/nand_bbt.c | |
parent | 9a1fcdfd4bee27c418424cac47abf7c049541297 (diff) |
[MTD] NAND Expose the new raw mode function and status info to userspace
The raw read/write access to NAND (without ECC) has been changed in the
NAND rework. Expose the new way - setting the file mode via ioctl - to
userspace. Also allow to read out the ecc statistics information so userspace
tools can see that bitflips happened and whether errors where correctable
or not. Also expose the number of bad blocks for the partition, so nandwrite
can check if the data fits into the parition before writing to it.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'drivers/mtd/nand/nand_bbt.c')
-rw-r--r-- | drivers/mtd/nand/nand_bbt.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/mtd/nand/nand_bbt.c b/drivers/mtd/nand/nand_bbt.c index 480c3cbf9bf9..a612c4ea8194 100644 --- a/drivers/mtd/nand/nand_bbt.c +++ b/drivers/mtd/nand/nand_bbt.c | |||
@@ -176,6 +176,7 @@ static int read_bbt(struct mtd_info *mtd, uint8_t *buf, int page, int num, | |||
176 | printk(KERN_DEBUG "nand_read_bbt: Reserved block at 0x%08x\n", | 176 | printk(KERN_DEBUG "nand_read_bbt: Reserved block at 0x%08x\n", |
177 | ((offs << 2) + (act >> 1)) << this->bbt_erase_shift); | 177 | ((offs << 2) + (act >> 1)) << this->bbt_erase_shift); |
178 | this->bbt[offs + (act >> 3)] |= 0x2 << (act & 0x06); | 178 | this->bbt[offs + (act >> 3)] |= 0x2 << (act & 0x06); |
179 | mtd->ecc_stats.bbtblocks++; | ||
179 | continue; | 180 | continue; |
180 | } | 181 | } |
181 | /* Leave it for now, if its matured we can move this | 182 | /* Leave it for now, if its matured we can move this |
@@ -187,6 +188,7 @@ static int read_bbt(struct mtd_info *mtd, uint8_t *buf, int page, int num, | |||
187 | this->bbt[offs + (act >> 3)] |= 0x3 << (act & 0x06); | 188 | this->bbt[offs + (act >> 3)] |= 0x3 << (act & 0x06); |
188 | else | 189 | else |
189 | this->bbt[offs + (act >> 3)] |= 0x1 << (act & 0x06); | 190 | this->bbt[offs + (act >> 3)] |= 0x1 << (act & 0x06); |
191 | mtd->ecc_stats.badblocks++; | ||
190 | } | 192 | } |
191 | } | 193 | } |
192 | totlen -= len; | 194 | totlen -= len; |
@@ -431,6 +433,7 @@ static int create_bbt(struct mtd_info *mtd, uint8_t *buf, | |||
431 | this->bbt[i >> 3] |= 0x03 << (i & 0x6); | 433 | this->bbt[i >> 3] |= 0x03 << (i & 0x6); |
432 | printk(KERN_WARNING "Bad eraseblock %d at 0x%08x\n", | 434 | printk(KERN_WARNING "Bad eraseblock %d at 0x%08x\n", |
433 | i >> 1, (unsigned int)from); | 435 | i >> 1, (unsigned int)from); |
436 | mtd->ecc_stats.badblocks++; | ||
434 | } | 437 | } |
435 | 438 | ||
436 | i += 2; | 439 | i += 2; |