--- a/drivers/mtd/chips/cfi_cmdset_0002.c
+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
-@@ -2693,6 +2693,8 @@ static int __maybe_unused cfi_ppb_unlock
+@@ -2683,6 +2683,8 @@ static int __maybe_unused cfi_ppb_unlock
i++;
if (adr >> cfi->chipshift) {
+++ /dev/null
-From 45f75b8a919a4255f52df454f1ffdee0e42443b2 Mon Sep 17 00:00:00 2001
-From: Tokunori Ikegami <ikegami@allied-telesis.co.jp>
-Date: Wed, 30 May 2018 18:32:28 +0900
-Subject: mtd: cfi_cmdset_0002: Change erase functions to retry for error
-
-From: Tokunori Ikegami <ikegami@allied-telesis.co.jp>
-
-commit 45f75b8a919a4255f52df454f1ffdee0e42443b2 upstream.
-
-For the word write functions it is retried for error.
-But it is not implemented to retry for the erase functions.
-To make sure for the erase functions change to retry as same.
-
-This is needed to prevent the flash erase error caused only once.
-It was caused by the error case of chip_good() in the do_erase_oneblock().
-Also it was confirmed on the MACRONIX flash device MX29GL512FHT2I-11G.
-But the error issue behavior is not able to reproduce at this moment.
-The flash controller is parallel Flash interface integrated on BCM53003.
-
-Signed-off-by: Tokunori Ikegami <ikegami@allied-telesis.co.jp>
-Reviewed-by: Joakim Tjernlund <Joakim.Tjernlund@infinera.com>
-Cc: Chris Packham <chris.packham@alliedtelesis.co.nz>
-Cc: Brian Norris <computersforpeace@gmail.com>
-Cc: David Woodhouse <dwmw2@infradead.org>
-Cc: Boris Brezillon <boris.brezillon@free-electrons.com>
-Cc: Marek Vasut <marek.vasut@gmail.com>
-Cc: Richard Weinberger <richard@nod.at>
-Cc: Cyrille Pitchen <cyrille.pitchen@wedev4u.fr>
-Cc: linux-mtd@lists.infradead.org
-Cc: stable@vger.kernel.org
-Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/mtd/chips/cfi_cmdset_0002.c | 10 ++++++++++
- 1 file changed, 10 insertions(+)
-
---- a/drivers/mtd/chips/cfi_cmdset_0002.c
-+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
-@@ -2239,6 +2239,7 @@ static int __xipram do_erase_chip(struct
- unsigned long int adr;
- DECLARE_WAITQUEUE(wait, current);
- int ret = 0;
-+ int retry_cnt = 0;
-
- adr = cfi->addr_unlock1;
-
-@@ -2256,6 +2257,7 @@ static int __xipram do_erase_chip(struct
- 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_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(st
- 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(st
- 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);
-@@ -2403,6 +2410,9 @@ static int __xipram do_erase_oneblock(st
- map_write( map, CMD(0xF0), chip->start );
- /* FIXME - should have reset delay before continuing */
-
-+ if (++retry_cnt <= MAX_RETRIES)
-+ goto retry;
-+
- ret = -EIO;
- }
-
--- a/drivers/mtd/chips/cfi_cmdset_0002.c
+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
-@@ -2543,7 +2543,7 @@ static int cfi_atmel_unlock(struct mtd_i
+@@ -2533,7 +2533,7 @@ static int cfi_atmel_unlock(struct mtd_i
struct ppb_lock {
struct flchip *chip;
int locked;
};
-@@ -2679,7 +2679,7 @@ static int __maybe_unused cfi_ppb_unlock
+@@ -2669,7 +2669,7 @@ static int __maybe_unused cfi_ppb_unlock
*/
if ((adr < ofs) || (adr >= (ofs + len))) {
sect[sectors].chip = &cfi->chips[chipnum];
sect[sectors].locked = do_ppb_xxlock(
map, &cfi->chips[chipnum], adr, 0,
DO_XXLOCK_ONEBLOCK_GETLOCK);
-@@ -2723,7 +2723,7 @@ static int __maybe_unused cfi_ppb_unlock
+@@ -2713,7 +2713,7 @@ static int __maybe_unused cfi_ppb_unlock
*/
for (i = 0; i < sectors; i++) {
if (sect[i].locked)
--- a/drivers/mtd/chips/cfi_cmdset_0002.c
+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
-@@ -2677,7 +2677,7 @@ static int __maybe_unused cfi_ppb_unlock
+@@ -2667,7 +2667,7 @@ static int __maybe_unused cfi_ppb_unlock
* sectors shall be unlocked, so lets keep their locking
* status at "unlocked" (locked=0) for the final re-locking.
*/
--- a/drivers/mtd/chips/cfi_cmdset_0002.c
+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
-@@ -2561,8 +2561,9 @@ static int __maybe_unused do_ppb_xxlock(
+@@ -2551,8 +2551,9 @@ static int __maybe_unused do_ppb_xxlock(
unsigned long timeo;
int ret;
if (ret) {
mutex_unlock(&chip->mutex);
return ret;
-@@ -2580,8 +2581,8 @@ static int __maybe_unused do_ppb_xxlock(
+@@ -2570,8 +2571,8 @@ static int __maybe_unused do_ppb_xxlock(
if (thunk == DO_XXLOCK_ONEBLOCK_LOCK) {
chip->state = FL_LOCKING;
} else if (thunk == DO_XXLOCK_ONEBLOCK_UNLOCK) {
/*
* Unlocking of one specific sector is not supported, so we
-@@ -2619,7 +2620,7 @@ static int __maybe_unused do_ppb_xxlock(
+@@ -2609,7 +2610,7 @@ static int __maybe_unused do_ppb_xxlock(
map_write(map, CMD(0x00), chip->start);
chip->state = FL_READY;
powerpc-fadump-unregister-fadump-on-kexec-down-path.patch
arm-8764-1-kgdb-fix-numregbytes-so-that-gdb_regs-is-the-correct-size.patch
mtd-cfi_cmdset_0002-change-write-buffer-to-check-correct-value.patch
-mtd-cfi_cmdset_0002-change-erase-functions-to-retry-for-error.patch
mtd-cfi_cmdset_0002-use-right-chip-in-do_ppb_xxlock.patch
mtd-cfi_cmdset_0002-fix-segv-unlocking-multiple-chips.patch
mtd-cfi_cmdset_0002-fix-unlocking-requests-crossing-a-chip-boudary.patch
--- a/drivers/mtd/chips/cfi_cmdset_0002.c
+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
-@@ -2693,6 +2693,8 @@ static int __maybe_unused cfi_ppb_unlock
+@@ -2683,6 +2683,8 @@ static int __maybe_unused cfi_ppb_unlock
i++;
if (adr >> cfi->chipshift) {
+++ /dev/null
-From 45f75b8a919a4255f52df454f1ffdee0e42443b2 Mon Sep 17 00:00:00 2001
-From: Tokunori Ikegami <ikegami@allied-telesis.co.jp>
-Date: Wed, 30 May 2018 18:32:28 +0900
-Subject: mtd: cfi_cmdset_0002: Change erase functions to retry for error
-
-From: Tokunori Ikegami <ikegami@allied-telesis.co.jp>
-
-commit 45f75b8a919a4255f52df454f1ffdee0e42443b2 upstream.
-
-For the word write functions it is retried for error.
-But it is not implemented to retry for the erase functions.
-To make sure for the erase functions change to retry as same.
-
-This is needed to prevent the flash erase error caused only once.
-It was caused by the error case of chip_good() in the do_erase_oneblock().
-Also it was confirmed on the MACRONIX flash device MX29GL512FHT2I-11G.
-But the error issue behavior is not able to reproduce at this moment.
-The flash controller is parallel Flash interface integrated on BCM53003.
-
-Signed-off-by: Tokunori Ikegami <ikegami@allied-telesis.co.jp>
-Reviewed-by: Joakim Tjernlund <Joakim.Tjernlund@infinera.com>
-Cc: Chris Packham <chris.packham@alliedtelesis.co.nz>
-Cc: Brian Norris <computersforpeace@gmail.com>
-Cc: David Woodhouse <dwmw2@infradead.org>
-Cc: Boris Brezillon <boris.brezillon@free-electrons.com>
-Cc: Marek Vasut <marek.vasut@gmail.com>
-Cc: Richard Weinberger <richard@nod.at>
-Cc: Cyrille Pitchen <cyrille.pitchen@wedev4u.fr>
-Cc: linux-mtd@lists.infradead.org
-Cc: stable@vger.kernel.org
-Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/mtd/chips/cfi_cmdset_0002.c | 10 ++++++++++
- 1 file changed, 10 insertions(+)
-
---- a/drivers/mtd/chips/cfi_cmdset_0002.c
-+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
-@@ -2239,6 +2239,7 @@ static int __xipram do_erase_chip(struct
- unsigned long int adr;
- DECLARE_WAITQUEUE(wait, current);
- int ret = 0;
-+ int retry_cnt = 0;
-
- adr = cfi->addr_unlock1;
-
-@@ -2256,6 +2257,7 @@ static int __xipram do_erase_chip(struct
- 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_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(st
- 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(st
- 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);
-@@ -2403,6 +2410,9 @@ static int __xipram do_erase_oneblock(st
- map_write( map, CMD(0xF0), chip->start );
- /* FIXME - should have reset delay before continuing */
-
-+ if (++retry_cnt <= MAX_RETRIES)
-+ goto retry;
-+
- ret = -EIO;
- }
-
--- a/drivers/mtd/chips/cfi_cmdset_0002.c
+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
-@@ -2543,7 +2543,7 @@ static int cfi_atmel_unlock(struct mtd_i
+@@ -2533,7 +2533,7 @@ static int cfi_atmel_unlock(struct mtd_i
struct ppb_lock {
struct flchip *chip;
int locked;
};
-@@ -2679,7 +2679,7 @@ static int __maybe_unused cfi_ppb_unlock
+@@ -2669,7 +2669,7 @@ static int __maybe_unused cfi_ppb_unlock
*/
if ((adr < ofs) || (adr >= (ofs + len))) {
sect[sectors].chip = &cfi->chips[chipnum];
sect[sectors].locked = do_ppb_xxlock(
map, &cfi->chips[chipnum], adr, 0,
DO_XXLOCK_ONEBLOCK_GETLOCK);
-@@ -2723,7 +2723,7 @@ static int __maybe_unused cfi_ppb_unlock
+@@ -2713,7 +2713,7 @@ static int __maybe_unused cfi_ppb_unlock
*/
for (i = 0; i < sectors; i++) {
if (sect[i].locked)
--- a/drivers/mtd/chips/cfi_cmdset_0002.c
+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
-@@ -2677,7 +2677,7 @@ static int __maybe_unused cfi_ppb_unlock
+@@ -2667,7 +2667,7 @@ static int __maybe_unused cfi_ppb_unlock
* sectors shall be unlocked, so lets keep their locking
* status at "unlocked" (locked=0) for the final re-locking.
*/
--- a/drivers/mtd/chips/cfi_cmdset_0002.c
+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
-@@ -2561,8 +2561,9 @@ static int __maybe_unused do_ppb_xxlock(
+@@ -2551,8 +2551,9 @@ static int __maybe_unused do_ppb_xxlock(
unsigned long timeo;
int ret;
if (ret) {
mutex_unlock(&chip->mutex);
return ret;
-@@ -2580,8 +2581,8 @@ static int __maybe_unused do_ppb_xxlock(
+@@ -2570,8 +2571,8 @@ static int __maybe_unused do_ppb_xxlock(
if (thunk == DO_XXLOCK_ONEBLOCK_LOCK) {
chip->state = FL_LOCKING;
} else if (thunk == DO_XXLOCK_ONEBLOCK_UNLOCK) {
/*
* Unlocking of one specific sector is not supported, so we
-@@ -2619,7 +2620,7 @@ static int __maybe_unused do_ppb_xxlock(
+@@ -2609,7 +2610,7 @@ static int __maybe_unused do_ppb_xxlock(
map_write(map, CMD(0x00), chip->start);
chip->state = FL_READY;
ib-isert-fix-for-lib-dma_debug-check_sync-warning.patch
rdma-mlx4-discard-unknown-sqp-work-requests.patch
mtd-cfi_cmdset_0002-change-write-buffer-to-check-correct-value.patch
-mtd-cfi_cmdset_0002-change-erase-functions-to-retry-for-error.patch
mtd-cfi_cmdset_0002-use-right-chip-in-do_ppb_xxlock.patch
mtd-cfi_cmdset_0002-fix-segv-unlocking-multiple-chips.patch
mtd-cfi_cmdset_0002-fix-unlocking-requests-crossing-a-chip-boudary.patch