|
@@ -2240,6 +2240,7 @@ static int __xipram do_erase_chip(struct map_info *map, struct flchip *chip)
|
|
|
unsigned long int adr;
|
|
|
DECLARE_WAITQUEUE(wait, current);
|
|
|
int ret = 0;
|
|
|
+ int retry_cnt = 0;
|
|
|
|
|
|
adr = cfi->addr_unlock1;
|
|
|
|
|
@@ -2257,6 +2258,7 @@ static int __xipram do_erase_chip(struct map_info *map, struct flchip *chip)
|
|
|
ENABLE_VPP(map);
|
|
|
xip_disable(map, chip, adr);
|
|
|
|
|
|
+ retry:
|
|
|
cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
|
|
|
cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);
|
|
|
cfi_send_gen_cmd(0x80, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
|
|
@@ -2310,6 +2312,9 @@ static int __xipram do_erase_chip(struct map_info *map, struct flchip *chip)
|
|
|
map_write(map, CMD(0xF0), chip->start);
|
|
|
/* FIXME - should have reset delay before continuing */
|
|
|
|
|
|
+ if (++retry_cnt <= MAX_RETRIES)
|
|
|
+ goto retry;
|
|
|
+
|
|
|
ret = -EIO;
|
|
|
}
|
|
|
|
|
@@ -2329,6 +2334,7 @@ static int __xipram do_erase_oneblock(struct map_info *map, struct flchip *chip,
|
|
|
unsigned long timeo = jiffies + HZ;
|
|
|
DECLARE_WAITQUEUE(wait, current);
|
|
|
int ret = 0;
|
|
|
+ int retry_cnt = 0;
|
|
|
|
|
|
adr += chip->start;
|
|
|
|
|
@@ -2346,6 +2352,7 @@ static int __xipram do_erase_oneblock(struct map_info *map, struct flchip *chip,
|
|
|
ENABLE_VPP(map);
|
|
|
xip_disable(map, chip, adr);
|
|
|
|
|
|
+ retry:
|
|
|
cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
|
|
|
cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);
|
|
|
cfi_send_gen_cmd(0x80, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
|
|
@@ -2402,6 +2409,9 @@ static int __xipram do_erase_oneblock(struct map_info *map, struct flchip *chip,
|
|
|
map_write(map, CMD(0xF0), chip->start);
|
|
|
/* FIXME - should have reset delay before continuing */
|
|
|
|
|
|
+ if (++retry_cnt <= MAX_RETRIES)
|
|
|
+ goto retry;
|
|
|
+
|
|
|
ret = -EIO;
|
|
|
}
|
|
|
|