|
@@ -2294,12 +2294,13 @@ static int __xipram do_erase_chip(struct map_info *map, struct flchip *chip)
|
|
|
chip->erase_suspended = 0;
|
|
|
}
|
|
|
|
|
|
- if (chip_ready(map, adr))
|
|
|
+ if (chip_good(map, adr, map_word_ff(map)))
|
|
|
break;
|
|
|
|
|
|
if (time_after(jiffies, timeo)) {
|
|
|
printk(KERN_WARNING "MTD %s(): software timeout\n",
|
|
|
__func__);
|
|
|
+ ret = -EIO;
|
|
|
break;
|
|
|
}
|
|
|
|
|
@@ -2307,15 +2308,15 @@ static int __xipram do_erase_chip(struct map_info *map, struct flchip *chip)
|
|
|
UDELAY(map, chip, adr, 1000000/HZ);
|
|
|
}
|
|
|
/* Did we succeed? */
|
|
|
- if (!chip_good(map, adr, map_word_ff(map))) {
|
|
|
+ if (ret) {
|
|
|
/* reset on all failures. */
|
|
|
map_write(map, CMD(0xF0), chip->start);
|
|
|
/* FIXME - should have reset delay before continuing */
|
|
|
|
|
|
- if (++retry_cnt <= MAX_RETRIES)
|
|
|
+ if (++retry_cnt <= MAX_RETRIES) {
|
|
|
+ ret = 0;
|
|
|
goto retry;
|
|
|
-
|
|
|
- ret = -EIO;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
chip->state = FL_READY;
|
|
@@ -2388,7 +2389,7 @@ static int __xipram do_erase_oneblock(struct map_info *map, struct flchip *chip,
|
|
|
chip->erase_suspended = 0;
|
|
|
}
|
|
|
|
|
|
- if (chip_ready(map, adr)) {
|
|
|
+ if (chip_good(map, adr, map_word_ff(map))) {
|
|
|
xip_enable(map, chip, adr);
|
|
|
break;
|
|
|
}
|
|
@@ -2397,6 +2398,7 @@ static int __xipram do_erase_oneblock(struct map_info *map, struct flchip *chip,
|
|
|
xip_enable(map, chip, adr);
|
|
|
printk(KERN_WARNING "MTD %s(): software timeout\n",
|
|
|
__func__);
|
|
|
+ ret = -EIO;
|
|
|
break;
|
|
|
}
|
|
|
|
|
@@ -2404,15 +2406,15 @@ static int __xipram do_erase_oneblock(struct map_info *map, struct flchip *chip,
|
|
|
UDELAY(map, chip, adr, 1000000/HZ);
|
|
|
}
|
|
|
/* Did we succeed? */
|
|
|
- if (!chip_good(map, adr, map_word_ff(map))) {
|
|
|
+ if (ret) {
|
|
|
/* reset on all failures. */
|
|
|
map_write(map, CMD(0xF0), chip->start);
|
|
|
/* FIXME - should have reset delay before continuing */
|
|
|
|
|
|
- if (++retry_cnt <= MAX_RETRIES)
|
|
|
+ if (++retry_cnt <= MAX_RETRIES) {
|
|
|
+ ret = 0;
|
|
|
goto retry;
|
|
|
-
|
|
|
- ret = -EIO;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
chip->state = FL_READY;
|