New Xiaomi 4C cannot install OpenWrt - flash chip changed to EN25QX128A

Hi, all, this issue will related ALL routers using a new flash chip.

The old 4C, flash chip is GD25Q128C or W25Q128......
In new 4C, changed to EN25QX128A.

Install openwrt on new, got auto-reboot loop:

[    0.327741] spi-mt7621 10000b00.spi: sys_freq: 191666666
[    0.343163] spi-nor spi0.0: unrecognized JEDEC id bytes: 1c 71 18 1c 71 18
[    0.350243] spi-nor: probe of spi0.0 failed with error -2
.....

here kernel rejects to create MTD partitions, because unrecognized flash chip!

......

[    0.439562] VFS: Cannot open root device "(null)" or unknown-block(0,0): error -6
[    0.447165] Please append a correct "root=" boot option; here are the available partitions:
[    0.455649] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
[    0.464028] Rebooting in 1 seconds..

temp solution:

mod this file:
476-mtd-spi-nor-add-eon-en25q128.patch

for master or 2203 branch, kernel 5.10:

From: Piotr Dymacz <pepe2k@gmail.com>
Subject: kernel/mtd: add support for EON EN25Q128

Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
---
 drivers/mtd/spi-nor/spi-nor.c | 1 +
 1 file changed, 1 insertion(+)

--- a/drivers/mtd/spi-nor/eon.c
+++ b/drivers/mtd/spi-nor/eon.c
@@ -15,6 +15,8 @@ static const struct flash_info eon_parts
 	{ "en25q32b",   INFO(0x1c3016, 0, 64 * 1024,   64, 0) },
 	{ "en25p64",    INFO(0x1c2017, 0, 64 * 1024,  128, 0) },
 	{ "en25q64",    INFO(0x1c3017, 0, 64 * 1024,  128, SECT_4K) },
+	{ "en25q128",   INFO(0x1c3018, 0, 64 * 1024,  256, SECT_4K) },
+	{ "en25qx128a",	INFO(0x1c7118, 0, 64 * 1024,  256, SECT_4K) },
 	{ "en25q80a",   INFO(0x1c3014, 0, 64 * 1024,   16,
 			     SECT_4K | SPI_NOR_DUAL_READ) },
 	{ "en25qh16",   INFO(0x1c7015, 0, 64 * 1024,   32,

then, clean and re-make all.

for v21.02.2 or older, kernel 5.4, the patch file is different:

From: Piotr Dymacz <pepe2k@gmail.com>
Subject: kernel/mtd: add support for EON EN25Q128

Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
---
 drivers/mtd/spi-nor/spi-nor.c | 1 +
 1 file changed, 1 insertion(+)

--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
@@ -2179,6 +2179,8 @@ static const struct flash_info spi_nor_i
 	{ "en25q32b",   INFO(0x1c3016, 0, 64 * 1024,   64, 0) },
 	{ "en25p64",    INFO(0x1c2017, 0, 64 * 1024,  128, 0) },
 	{ "en25q64",    INFO(0x1c3017, 0, 64 * 1024,  128, SECT_4K) },
+	{ "en25q128",   INFO(0x1c3018, 0, 64 * 1024,  256, SECT_4K) },
+	{ "en25qx128a",	INFO(0x1c7118, 0, 64 * 1024,  256, SECT_4K) },
 	{ "en25q80a",   INFO(0x1c3014, 0, 64 * 1024,   16,
 			SECT_4K | SPI_NOR_DUAL_READ) },
 	{ "en25qh32",   INFO(0x1c7016, 0, 64 * 1024,   64, 0) },

Attached a working build link for the EN25QX128A flash IC:
https://github.com/openwrt/openwrt/files/8589845/Xiaomi4C-OpenWrt.zip

2 Likes

fwiw, same new Eon chip used in R4A gigabit edition
https://github.com/openwrt/openwrt/issues/9442

1 Like

Hi @bill888 , my above temp solution, also affect xiaomi 4A gigabit in software.
I cannot find EN25QX128 datasheet, only EN25QX128A datasheet on internet.

This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.