You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openwrt/target/linux/ath79/patches-4.19/403-mtd_fix_cfi_cmdset_0002...

63 lines
1.4 KiB
Diff

--- a/drivers/mtd/chips/cfi_cmdset_0002.c
+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
@@ -1640,7 +1640,7 @@ static int __xipram do_write_oneword(str
}
if (chip_good(map, adr, datum))
- break;
+ goto enable_xip;
/* Latency issues. Drop the lock, wait a while and retry */
UDELAY(map, chip, adr, 1);
@@ -1657,6 +1657,8 @@ static int __xipram do_write_oneword(str
goto retry;
}
}
+
+ enable_xip:
xip_enable(map, chip, adr);
op_done:
if (mode == FL_OTP_WRITE)
@@ -2235,7 +2237,6 @@ static int cfi_amdstd_panic_write(struct
return 0;
}
-
/*
* Handle devices with one erase region, that only implement
* the chip erase command.
@@ -2303,7 +2304,7 @@ static int __xipram do_erase_chip(struct
}
if (chip_good(map, adr, map_word_ff(map)))
- break;
+ goto op_done;
if (time_after(jiffies, timeo)) {
printk(KERN_WARNING "MTD %s(): software timeout\n",
@@ -2327,6 +2328,7 @@ static int __xipram do_erase_chip(struct
}
}
+ op_done:
chip->state = FL_READY;
xip_enable(map, chip, adr);
DISABLE_VPP(map);
@@ -2399,7 +2401,7 @@ static int __xipram do_erase_oneblock(st
}
if (chip_good(map, adr, map_word_ff(map)))
- break;
+ goto op_done;
if (time_after(jiffies, timeo)) {
printk(KERN_WARNING "MTD %s(): software timeout\n",
@@ -2423,6 +2425,7 @@ static int __xipram do_erase_oneblock(st
}
}
+ op_done:
chip->state = FL_READY;
xip_enable(map, chip, adr);
DISABLE_VPP(map);