diff --git a/target/linux/generic/backport-6.12/419-01-v6.18-mtd-spinand-add-support-for-FudanMicro-FM25S01A.patch b/target/linux/generic/backport-6.12/419-01-v6.18-mtd-spinand-add-support-for-FudanMicro-FM25S01A.patch deleted file mode 100644 index cd44634fd1..0000000000 --- a/target/linux/generic/backport-6.12/419-01-v6.18-mtd-spinand-add-support-for-FudanMicro-FM25S01A.patch +++ /dev/null @@ -1,123 +0,0 @@ -From 5f284dc15ca8695d0394414045ac64616a3b0e69 Mon Sep 17 00:00:00 2001 -From: Tianling Shen -Date: Mon, 25 Aug 2025 01:00:13 +0800 -Subject: [PATCH] mtd: spinand: add support for FudanMicro FM25S01A - -Add support for FudanMicro FM25S01A SPI NAND. -Datasheet: http://eng.fmsh.com/nvm/FM25S01A_ds_eng.pdf - -Signed-off-by: Tianling Shen -Signed-off-by: Miquel Raynal ---- - drivers/mtd/nand/spi/Makefile | 2 +- - drivers/mtd/nand/spi/core.c | 1 + - drivers/mtd/nand/spi/fmsh.c | 74 +++++++++++++++++++++++++++++++++++ - include/linux/mtd/spinand.h | 1 + - 4 files changed, 77 insertions(+), 1 deletion(-) - create mode 100644 drivers/mtd/nand/spi/fmsh.c - ---- a/drivers/mtd/nand/spi/Makefile -+++ b/drivers/mtd/nand/spi/Makefile -@@ -1,4 +1,4 @@ - # SPDX-License-Identifier: GPL-2.0 --spinand-objs := core.o alliancememory.o ato.o esmt.o foresee.o gigadevice.o macronix.o -+spinand-objs := core.o alliancememory.o ato.o esmt.o fmsh.o foresee.o gigadevice.o macronix.o - spinand-objs += micron.o paragon.o toshiba.o winbond.o xtx.o - obj-$(CONFIG_MTD_SPI_NAND) += spinand.o ---- a/drivers/mtd/nand/spi/core.c -+++ b/drivers/mtd/nand/spi/core.c -@@ -943,6 +943,7 @@ static const struct spinand_manufacturer - &alliancememory_spinand_manufacturer, - &ato_spinand_manufacturer, - &esmt_c8_spinand_manufacturer, -+ &fmsh_spinand_manufacturer, - &foresee_spinand_manufacturer, - &gigadevice_spinand_manufacturer, - ¯onix_spinand_manufacturer, ---- /dev/null -+++ b/drivers/mtd/nand/spi/fmsh.c -@@ -0,0 +1,74 @@ -+// SPDX-License-Identifier: GPL-2.0 -+/* -+ * Copyright (c) 2020-2021 Rockchip Electronics Co., Ltd. -+ * -+ * Author: Dingqiang Lin -+ */ -+ -+#include -+#include -+#include -+ -+#define SPINAND_MFR_FMSH 0xA1 -+ -+static SPINAND_OP_VARIANTS(read_cache_variants, -+ SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 2, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_DUALIO_OP(0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_X2_OP(0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_OP(true, 0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_OP(false, 0, 1, NULL, 0)); -+ -+static SPINAND_OP_VARIANTS(write_cache_variants, -+ SPINAND_PROG_LOAD_X4(true, 0, NULL, 0), -+ SPINAND_PROG_LOAD(true, 0, NULL, 0)); -+ -+static SPINAND_OP_VARIANTS(update_cache_variants, -+ SPINAND_PROG_LOAD_X4(false, 0, NULL, 0), -+ SPINAND_PROG_LOAD(false, 0, NULL, 0)); -+ -+static int fm25s01a_ooblayout_ecc(struct mtd_info *mtd, int section, -+ struct mtd_oob_region *region) -+{ -+ return -ERANGE; -+} -+ -+static int fm25s01a_ooblayout_free(struct mtd_info *mtd, int section, -+ struct mtd_oob_region *region) -+{ -+ if (section) -+ return -ERANGE; -+ -+ region->offset = 2; -+ region->length = 62; -+ -+ return 0; -+} -+ -+static const struct mtd_ooblayout_ops fm25s01a_ooblayout = { -+ .ecc = fm25s01a_ooblayout_ecc, -+ .free = fm25s01a_ooblayout_free, -+}; -+ -+static const struct spinand_info fmsh_spinand_table[] = { -+ SPINAND_INFO("FM25S01A", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xE4), -+ NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1), -+ NAND_ECCREQ(1, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&fm25s01a_ooblayout, NULL)), -+}; -+ -+static const struct spinand_manufacturer_ops fmsh_spinand_manuf_ops = { -+}; -+ -+const struct spinand_manufacturer fmsh_spinand_manufacturer = { -+ .id = SPINAND_MFR_FMSH, -+ .name = "Fudan Micro", -+ .chips = fmsh_spinand_table, -+ .nchips = ARRAY_SIZE(fmsh_spinand_table), -+ .ops = &fmsh_spinand_manuf_ops, -+}; ---- a/include/linux/mtd/spinand.h -+++ b/include/linux/mtd/spinand.h -@@ -263,6 +263,7 @@ struct spinand_manufacturer { - extern const struct spinand_manufacturer alliancememory_spinand_manufacturer; - extern const struct spinand_manufacturer ato_spinand_manufacturer; - extern const struct spinand_manufacturer esmt_c8_spinand_manufacturer; -+extern const struct spinand_manufacturer fmsh_spinand_manufacturer; - extern const struct spinand_manufacturer foresee_spinand_manufacturer; - extern const struct spinand_manufacturer gigadevice_spinand_manufacturer; - extern const struct spinand_manufacturer macronix_spinand_manufacturer; diff --git a/target/linux/generic/backport-6.12/419-02-v6.18-mtd-spinand-fmsh-remove-QE-bit-for-FM25S01A-flash.patch b/target/linux/generic/backport-6.12/419-02-v6.18-mtd-spinand-fmsh-remove-QE-bit-for-FM25S01A-flash.patch deleted file mode 100644 index ecaeff3919..0000000000 --- a/target/linux/generic/backport-6.12/419-02-v6.18-mtd-spinand-fmsh-remove-QE-bit-for-FM25S01A-flash.patch +++ /dev/null @@ -1,27 +0,0 @@ -From a1d3bc606bf5c3b3ea811cc2019df6285d75b00f Mon Sep 17 00:00:00 2001 -From: Mikhail Kshevetskiy -Date: Mon, 3 Nov 2025 04:01:48 +0300 -Subject: [PATCH] mtd: spinand: fmsh: remove QE bit for FM25S01A flash - -According to datasheet (http://eng.fmsh.com/nvm/FM25S01A_ds_eng.pdf) -there is no QE (Quad Enable) bit for FM25S01A flash, so remove it. - -Fixes: 5f284dc15ca86 ("mtd: spinand: add support for FudanMicro FM25S01A") -Signed-off-by: Mikhail Kshevetskiy -Tested-by: Tianling Shen -Signed-off-by: Miquel Raynal ---- - drivers/mtd/nand/spi/fmsh.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- a/drivers/mtd/nand/spi/fmsh.c -+++ b/drivers/mtd/nand/spi/fmsh.c -@@ -58,7 +58,7 @@ static const struct spinand_info fmsh_sp - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, - &write_cache_variants, - &update_cache_variants), -- SPINAND_HAS_QE_BIT, -+ 0, - SPINAND_ECCINFO(&fm25s01a_ooblayout, NULL)), - }; - diff --git a/target/linux/mediatek/patches-6.12/341-mtd-spinand-Support-dosilicon.patch b/target/linux/mediatek/patches-6.12/341-mtd-spinand-Support-dosilicon.patch index 272b9dcab8..dc37149337 100644 --- a/target/linux/mediatek/patches-6.12/341-mtd-spinand-Support-dosilicon.patch +++ b/target/linux/mediatek/patches-6.12/341-mtd-spinand-Support-dosilicon.patch @@ -30,9 +30,9 @@ Signed-off-by: Jon Lin &alliancememory_spinand_manufacturer, &ato_spinand_manufacturer, + &dosilicon_spinand_manufacturer, + &esmt_8c_spinand_manufacturer, &esmt_c8_spinand_manufacturer, &etron_spinand_manufacturer, - &fmsh_spinand_manufacturer, --- /dev/null +++ b/drivers/mtd/nand/spi/dosilicon.c @@ -0,0 +1,278 @@ @@ -321,6 +321,6 @@ Signed-off-by: Jon Lin extern const struct spinand_manufacturer alliancememory_spinand_manufacturer; extern const struct spinand_manufacturer ato_spinand_manufacturer; +extern const struct spinand_manufacturer dosilicon_spinand_manufacturer; + extern const struct spinand_manufacturer esmt_8c_spinand_manufacturer; extern const struct spinand_manufacturer esmt_c8_spinand_manufacturer; extern const struct spinand_manufacturer etron_spinand_manufacturer; - extern const struct spinand_manufacturer fmsh_spinand_manufacturer; diff --git a/target/linux/mediatek/patches-6.12/343-mtd-spinand-gsto-Add-code.patch b/target/linux/mediatek/patches-6.12/343-mtd-spinand-gsto-Add-code.patch index e8e8af9c7a..51f9e0a5b2 100644 --- a/target/linux/mediatek/patches-6.12/343-mtd-spinand-gsto-Add-code.patch +++ b/target/linux/mediatek/patches-6.12/343-mtd-spinand-gsto-Add-code.patch @@ -26,7 +26,7 @@ Signed-off-by: Jon Lin obj-$(CONFIG_MTD_SPI_NAND) += spinand.o --- a/drivers/mtd/nand/spi/core.c +++ b/drivers/mtd/nand/spi/core.c -@@ -1165,6 +1165,7 @@ static const struct spinand_manufacturer +@@ -1166,6 +1166,7 @@ static const struct spinand_manufacturer &fmsh_spinand_manufacturer, &foresee_spinand_manufacturer, &gigadevice_spinand_manufacturer, @@ -176,7 +176,7 @@ Signed-off-by: Jon Lin +}; --- a/include/linux/mtd/spinand.h +++ b/include/linux/mtd/spinand.h -@@ -268,6 +268,7 @@ extern const struct spinand_manufacturer +@@ -269,6 +269,7 @@ extern const struct spinand_manufacturer extern const struct spinand_manufacturer fmsh_spinand_manufacturer; extern const struct spinand_manufacturer foresee_spinand_manufacturer; extern const struct spinand_manufacturer gigadevice_spinand_manufacturer; diff --git a/target/linux/mediatek/patches-6.12/435-drivers-mtd-spinand-Add-calibration-support-for-spin.patch b/target/linux/mediatek/patches-6.12/435-drivers-mtd-spinand-Add-calibration-support-for-spin.patch index c33931ebc7..dc4dad4262 100644 --- a/target/linux/mediatek/patches-6.12/435-drivers-mtd-spinand-Add-calibration-support-for-spin.patch +++ b/target/linux/mediatek/patches-6.12/435-drivers-mtd-spinand-Add-calibration-support-for-spin.patch @@ -11,7 +11,7 @@ Signed-off-by: SkyLake.Huang --- a/drivers/mtd/nand/spi/core.c +++ b/drivers/mtd/nand/spi/core.c -@@ -1201,6 +1201,56 @@ static int spinand_manufacturer_match(st +@@ -1202,6 +1202,56 @@ static int spinand_manufacturer_match(st return -EOPNOTSUPP; } @@ -68,7 +68,7 @@ Signed-off-by: SkyLake.Huang static int spinand_id_detect(struct spinand_device *spinand) { u8 *id = spinand->id.data; -@@ -1452,6 +1502,10 @@ static int spinand_init(struct spinand_d +@@ -1453,6 +1503,10 @@ static int spinand_init(struct spinand_d if (!spinand->scratchbuf) return -ENOMEM; diff --git a/target/linux/mediatek/patches-6.12/436-drivers-mtd-spi-nor-Add-calibration-support-for-spi-.patch b/target/linux/mediatek/patches-6.12/436-drivers-mtd-spi-nor-Add-calibration-support-for-spi-.patch index bcef0c1701..2c0ddcafd1 100644 --- a/target/linux/mediatek/patches-6.12/436-drivers-mtd-spi-nor-Add-calibration-support-for-spi-.patch +++ b/target/linux/mediatek/patches-6.12/436-drivers-mtd-spi-nor-Add-calibration-support-for-spi-.patch @@ -12,7 +12,7 @@ Signed-off-by: SkyLake.Huang --- a/drivers/mtd/nand/spi/core.c +++ b/drivers/mtd/nand/spi/core.c -@@ -1242,7 +1242,10 @@ static int spinand_cal_read(void *priv, +@@ -1243,7 +1243,10 @@ static int spinand_cal_read(void *priv, if (ret) return ret; diff --git a/target/linux/mediatek/patches-6.12/733-net-phy-realtek-add-led-link-select-for-RTL8221.patch b/target/linux/mediatek/patches-6.12/733-net-phy-realtek-add-led-link-select-for-RTL8221.patch index ad51b9695f..ce379fa6c1 100644 --- a/target/linux/mediatek/patches-6.12/733-net-phy-realtek-add-led-link-select-for-RTL8221.patch +++ b/target/linux/mediatek/patches-6.12/733-net-phy-realtek-add-led-link-select-for-RTL8221.patch @@ -18,7 +18,7 @@ Signed-off-by: Yangyu Chen --- a/drivers/net/phy/realtek/realtek_main.c +++ b/drivers/net/phy/realtek/realtek_main.c -@@ -160,6 +160,12 @@ +@@ -166,6 +166,12 @@ #define RTL8221B_PHYCR1_ALDPS_EN BIT(2) #define RTL8221B_PHYCR1_ALDPS_XTAL_OFF_EN BIT(12) @@ -31,7 +31,7 @@ Signed-off-by: Yangyu Chen #define RTL8366RB_POWER_SAVE 0x15 #define RTL8366RB_POWER_SAVE_ON BIT(12) -@@ -1196,6 +1202,45 @@ static int rtl822x_config_init(struct ph +@@ -1349,6 +1355,45 @@ static int rtl822x_config_init(struct ph return rtl822x_set_serdes_option_mode(phydev, true); } @@ -77,7 +77,7 @@ Signed-off-by: Yangyu Chen static int rtl822xb_config_init(struct phy_device *phydev) { return rtl822x_set_serdes_option_mode(phydev, false); -@@ -1316,7 +1361,7 @@ static int rtl822x_read_status(struct ph +@@ -1469,7 +1514,7 @@ static int rtl822x_read_status(struct ph mii_10gbt_stat_mod_linkmode_lpa_t(phydev->lp_advertising, lpadv); diff --git a/target/linux/mediatek/patches-6.12/960-asus-hack-u-boot-ignore-mtdparts.patch b/target/linux/mediatek/patches-6.12/960-asus-hack-u-boot-ignore-mtdparts.patch index 70ff4dd5b6..2922cff467 100644 --- a/target/linux/mediatek/patches-6.12/960-asus-hack-u-boot-ignore-mtdparts.patch +++ b/target/linux/mediatek/patches-6.12/960-asus-hack-u-boot-ignore-mtdparts.patch @@ -29,7 +29,7 @@ Signed-off-by: Daniel Golle --- a/drivers/mtd/nand/spi/core.c +++ b/drivers/mtd/nand/spi/core.c -@@ -1669,6 +1669,7 @@ static int spinand_remove(struct spi_mem +@@ -1670,6 +1670,7 @@ static int spinand_remove(struct spi_mem static const struct spi_device_id spinand_ids[] = { { .name = "spi-nand" }, @@ -37,7 +37,7 @@ Signed-off-by: Daniel Golle { /* sentinel */ }, }; MODULE_DEVICE_TABLE(spi, spinand_ids); -@@ -1676,6 +1677,7 @@ MODULE_DEVICE_TABLE(spi, spinand_ids); +@@ -1677,6 +1678,7 @@ MODULE_DEVICE_TABLE(spi, spinand_ids); #ifdef CONFIG_OF static const struct of_device_id spinand_of_ids[] = { { .compatible = "spi-nand" },