ddc11c3932
In commitfec8fe8069
("kernel: bump 4.9 to 4.9.116") [1], the following patch for removed: - 403-mtd_fix_cfi_cmdset_0002_status_check.patch This patch contained fixes for both write and erase functions. While the chip-detects for erase got fixed upstream [2], some modifications are still required, even with the fixes applied. While at it, also apply the same fix for target ath79, which suffers the same issue. Not doing so results in following errors seen: Collected errors: * pkg_write_filelist: Failed to open //usr/lib/opkg/info/luci-lib-ip.list: I/O error. * opkg_install_pkg: Failed to extract data files for luci-lib-ip. Package debris may remain! * opkg_install_cmd: Cannot install package luci-ssl. * opkg_conf_write_status_files: Can't open status file //usr/lib/opkg/status: I/O error. [ 0.780920] jffs2: version 2.2 (NAND) (SUMMARY) (LZMA) (RTIME) (CMODE_PRIORITY) (c) 2001-2006 Red Hat, Inc. [ 8.406396] jffs2: notice: (415) jffs2_build_xattr_subsystem: complete building xattr subsystem, 0 of xdatum (0 unchecked, 0 orphan) and 0 of xref (0 dead, 0 orphan) found. [ 8.423476] mount_root: switching to jffs2 overlay [ 270.902671] jffs2: Write of 1989 bytes at 0x005ce6f8 failed. returned -5, retlen 962 [ 270.931965] jffs2: Write of 1989 bytes at 0x005ceec0 failed. returned -5, retlen 0 [ 270.939631] jffs2: Not marking the space at 0x005ceec0 as dirty because the flash driver returned retlen zero [ 270.950397] jffs2: Write of 68 bytes at 0x005ceec0 failed. returned -5, retlen 0 [ 270.957838] jffs2: Not marking the space at 0x005ceec0 as dirty because the flash driver returned retlen zero [ 270.968584] jffs2: Write of 68 bytes at 0x005ceec0 failed. returned -5, retlen 0 [ 270.976027] jffs2: Not marking the space at 0x005ceec0 as dirty because the flash driver returned retlen zero [ 270.986735] jffs2: Write of 68 bytes at 0x005ceec0 failed. returned -5, retlen 0 [ 270.994225] jffs2: Not marking the space at 0x005ceec0 as dirty because the flash driver returned retlen zero [1] https://git.openwrt.org/?p=openwrt/openwrt.git;a=commit;h=fec8fe806963c96a6506c2aebc3572d3a11f285f [2] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v4.9.133&id=a0239d83e1cb60de5e78452d4708c083b9e3dcbe Fixes:fec8fe8069
("kernel: bump 4.9 to 4.9.116") Signed-off-by: Fabio Bettoni <fbettoni@gmail.com> Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
61 lines
1.9 KiB
Diff
61 lines
1.9 KiB
Diff
--- a/drivers/mtd/chips/cfi_cmdset_0002.c
|
|
+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
|
|
@@ -40,7 +40,7 @@
|
|
#include <linux/mtd/xip.h>
|
|
|
|
#define AMD_BOOTLOC_BUG
|
|
-#define FORCE_WORD_WRITE 0
|
|
+#define FORCE_WORD_WRITE 1
|
|
|
|
#define MAX_RETRIES 3
|
|
|
|
@@ -51,7 +51,9 @@
|
|
|
|
static int cfi_amdstd_read (struct mtd_info *, loff_t, size_t, size_t *, u_char *);
|
|
static int cfi_amdstd_write_words(struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
|
|
+#if !FORCE_WORD_WRITE
|
|
static int cfi_amdstd_write_buffers(struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
|
|
+#endif
|
|
static int cfi_amdstd_erase_chip(struct mtd_info *, struct erase_info *);
|
|
static int cfi_amdstd_erase_varsize(struct mtd_info *, struct erase_info *);
|
|
static void cfi_amdstd_sync (struct mtd_info *);
|
|
@@ -202,6 +204,7 @@ static void fixup_amd_bootblock(struct m
|
|
}
|
|
#endif
|
|
|
|
+#if !FORCE_WORD_WRITE
|
|
static void fixup_use_write_buffers(struct mtd_info *mtd)
|
|
{
|
|
struct map_info *map = mtd->priv;
|
|
@@ -211,6 +214,7 @@ static void fixup_use_write_buffers(stru
|
|
mtd->_write = cfi_amdstd_write_buffers;
|
|
}
|
|
}
|
|
+#endif /* !FORCE_WORD_WRITE */
|
|
|
|
/* Atmel chips don't use the same PRI format as AMD chips */
|
|
static void fixup_convert_atmel_pri(struct mtd_info *mtd)
|
|
@@ -1794,6 +1798,7 @@ static int cfi_amdstd_write_words(struct
|
|
/*
|
|
* FIXME: interleaved mode not tested, and probably not supported!
|
|
*/
|
|
+#if !FORCE_WORD_WRITE
|
|
static int __xipram do_write_buffer(struct map_info *map, struct flchip *chip,
|
|
unsigned long adr, const u_char *buf,
|
|
int len)
|
|
@@ -1922,7 +1927,6 @@ static int __xipram do_write_buffer(stru
|
|
return ret;
|
|
}
|
|
|
|
-
|
|
static int cfi_amdstd_write_buffers(struct mtd_info *mtd, loff_t to, size_t len,
|
|
size_t *retlen, const u_char *buf)
|
|
{
|
|
@@ -1997,6 +2001,7 @@ static int cfi_amdstd_write_buffers(stru
|
|
|
|
return 0;
|
|
}
|
|
+#endif /* !FORCE_WORD_WRITE */
|
|
|
|
/*
|
|
* Wait for the flash chip to become ready to write data
|