aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mtd
diff options
context:
space:
mode:
authorKyungmin Park <kyungmin.park@samsung.com>2007-12-12 19:39:29 -0500
committerKyungmin Park <kyungmin.park@samsung.com>2008-01-29 03:12:32 -0500
commitb2581be291aa8595eadf3d6933d04d0f1d01b46d (patch)
tree417b79c040ade3b51113d97c67b4e7eef112b2da /drivers/mtd
parente71f04fc9234b14636887ceb5862755f1690642c (diff)
[MTD] [OneNAND] Check the initial bad block using ONENAND_CTRL_ERROR
Some chips don't set the ONENAND_CTRL_LOAD bit. Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Diffstat (limited to 'drivers/mtd')
-rw-r--r--drivers/mtd/onenand/onenand_base.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/drivers/mtd/onenand/onenand_base.c b/drivers/mtd/onenand/onenand_base.c
index cf8009329999..44c327a335e7 100644
--- a/drivers/mtd/onenand/onenand_base.c
+++ b/drivers/mtd/onenand/onenand_base.c
@@ -1119,12 +1119,10 @@ static int onenand_bbt_wait(struct mtd_info *mtd, int state)
1119 interrupt = this->read_word(this->base + ONENAND_REG_INTERRUPT); 1119 interrupt = this->read_word(this->base + ONENAND_REG_INTERRUPT);
1120 ctrl = this->read_word(this->base + ONENAND_REG_CTRL_STATUS); 1120 ctrl = this->read_word(this->base + ONENAND_REG_CTRL_STATUS);
1121 1121
1122 /* Initial bad block case: 0x2400 or 0x0400 */
1122 if (ctrl & ONENAND_CTRL_ERROR) { 1123 if (ctrl & ONENAND_CTRL_ERROR) {
1123 printk(KERN_DEBUG "onenand_bbt_wait: controller error = 0x%04x\n", ctrl); 1124 printk(KERN_DEBUG "onenand_bbt_wait: controller error = 0x%04x\n", ctrl);
1124 /* Initial bad block case */ 1125 return ONENAND_BBT_READ_ERROR;
1125 if (ctrl & ONENAND_CTRL_LOAD)
1126 return ONENAND_BBT_READ_ERROR;
1127 return ONENAND_BBT_READ_FATAL_ERROR;
1128 } 1126 }
1129 1127
1130 if (interrupt & ONENAND_INT_READ) { 1128 if (interrupt & ONENAND_INT_READ) {