aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux
diff options
context:
space:
mode:
authorMauri Sandberg <sandberg@mailfence.com>2020-09-14 22:45:15 +0300
committerPetr Štetiar <ynezz@true.cz>2021-03-22 09:23:10 +0100
commit8cc0fa8faceadac85353bb1a96e074518ef124e2 (patch)
treefb9aeb39f1089dd63b452cc0fc23673e9296ed39 /target/linux
parent6a6f9e73dd65f9201bee911d2fae8595f86c093b (diff)
downloadupstream-8cc0fa8faceadac85353bb1a96e074518ef124e2.tar.gz
upstream-8cc0fa8faceadac85353bb1a96e074518ef124e2.tar.bz2
upstream-8cc0fa8faceadac85353bb1a96e074518ef124e2.zip
ath79: cfi: cmdset_0002: amd chip 0x2201 - write words
Generally, in upstream CFI flash memory driver uses buffers for write operations. That does not work with AMD chip with id 0x2201 and we must resort to writing word sized chunks only. That is, to not apply general buffer write functionality for this given chip. Without the patch kernel logs will be flooded with entries like below: MTD do_erase_oneblock(): ERASE 0x01fa0000 MTD do_write_buffer(): WRITE 0x01fa0000(0x00001985) MTD do_erase_oneblock(): ERASE 0x01f80000 MTD do_write_buffer(): WRITE 0x01f80000(0x00001985) MTD do_write_buffer_wait(): software timeout, address:0x01f8000a. jffs2: Write clean marker to block at 0x01a60000 failed: -5 MTD do_erase_oneblock(): ERASE 0x01f60000 MTD do_write_buffer(): WRITE 0x01f60000(0x00001985) MTD do_write_buffer_wait(): software timeout, address:0x01f6000a. jffs2: Write clean marker to block at 0x01a40000 failed: -5 References: http://patchwork.ozlabs.org/project/linux-mtd/patch/20210309174859.362060-1-sandberg@mailfence.com/ Signed-off-by: Mauri Sandberg <sandberg@mailfence.com> [added link to usptream fix submission] Signed-off-by: Petr Štetiar <ynezz@true.cz>
Diffstat (limited to 'target/linux')
-rw-r--r--target/linux/ath79/patches-5.4/471-mtd-cfi_cmdset_0002-AMD-chip-0x2201-write-words.patch58
1 files changed, 58 insertions, 0 deletions
diff --git a/target/linux/ath79/patches-5.4/471-mtd-cfi_cmdset_0002-AMD-chip-0x2201-write-words.patch b/target/linux/ath79/patches-5.4/471-mtd-cfi_cmdset_0002-AMD-chip-0x2201-write-words.patch
new file mode 100644
index 0000000000..3c80872ef4
--- /dev/null
+++ b/target/linux/ath79/patches-5.4/471-mtd-cfi_cmdset_0002-AMD-chip-0x2201-write-words.patch
@@ -0,0 +1,58 @@
+From f1f811410af297c848e9ec17eaa280d190fdce10 Mon Sep 17 00:00:00 2001
+From: Mauri Sandberg <sandberg@mailfence.com>
+Date: Tue, 23 Feb 2021 18:09:31 +0200
+Subject: [PATCH] mtd: cfi_cmdset_0002: AMD chip 0x2201 - write words
+
+Buffer writes do not work with AMD chip 0x2201. The chip in question
+is a AMD/Spansion/Cypress Semiconductor S29GL256N and datasheet [1]
+talks about writing buffers being possible. While waiting for a neater
+solution resort to writing word-sized chunks only.
+
+Without the patch kernel logs will be flooded with entries like below:
+
+jffs2_scan_eraseblock(): End of filesystem marker found at 0x0
+jffs2_build_filesystem(): unlocking the mtd device...
+done.
+jffs2_build_filesystem(): erasing all blocks after the end marker...
+MTD do_write_buffer_wait(): software timeout, address:0x01ec000a.
+jffs2: Write clean marker to block at 0x01920000 failed: -5
+MTD do_write_buffer_wait(): software timeout, address:0x01e2000a.
+jffs2: Write clean marker to block at 0x01880000 failed: -5
+MTD do_write_buffer_wait(): software timeout, address:0x01e0000a.
+jffs2: Write clean marker to block at 0x01860000 failed: -5
+MTD do_write_buffer_wait(): software timeout, address:0x01dc000a.
+jffs2: Write clean marker to block at 0x01820000 failed: -5
+MTD do_write_buffer_wait(): software timeout, address:0x01da000a.
+jffs2: Write clean marker to block at 0x01800000 failed: -5
+...
+
+Tested on a Buffalo wzr-hp-g300nh running kernel 5.10.16.
+
+[1] https://www.cypress.com/file/219941/download
+or https://datasheetspdf.com/pdf-file/565708/SPANSION/S29GL256N/1
+
+Signed-off-by: Mauri Sandberg <sandberg@mailfence.com>
+---
+ drivers/mtd/chips/cfi_cmdset_0002.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/drivers/mtd/chips/cfi_cmdset_0002.c b/drivers/mtd/chips/cfi_cmdset_0002.c
+index a1f3e1031c3d..28b6f3583f8a 100644
+--- a/drivers/mtd/chips/cfi_cmdset_0002.c
++++ b/drivers/mtd/chips/cfi_cmdset_0002.c
+@@ -272,6 +272,10 @@ static void fixup_use_write_buffers(struct mtd_info *mtd)
+ {
+ struct map_info *map = mtd->priv;
+ struct cfi_private *cfi = map->fldrv_priv;
++
++ if ((cfi->mfr == CFI_MFR_AMD) && (cfi->id == 0x2201))
++ return;
++
+ if (cfi->cfiq->BufWriteTimeoutTyp) {
+ pr_debug("Using buffer write method\n");
+ mtd->_write = cfi_amdstd_write_buffers;
+
+base-commit: 5de15b610f785f0e188fefb707f0b19de156968a
+--
+2.25.1
+