From: Daniel Kestrel Date: Sat, 7 Aug 2021 07:28:24 +0000 (+0200) Subject: lantiq: kernel: xway-nand: Move ECC engine setting to new DT binding X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=ca1874437c8bceff1c34f3ea69c5ebf573d45c45;p=openwrt%2Fstaging%2Fblogic.git lantiq: kernel: xway-nand: Move ECC engine setting to new DT binding When trying to add support for another device with Micron NAND chips, it was discovered that the default setting in the kernel source does not work with Micron Chips, since the device trees setting is overwritten and hard coded by the kernel xway_nand driver. This was the original reason for this PR. A kernel patch sets the default ECC mode to soft without overwriting the device tree settings and the device tree for devices using it are updated with new parameters because the old ones are deprecated by torvalds/linux@533af69. A patch for kernel 5.4 is provided to support the new settings because kernel 5.4 does not support it. Signed-off-by: Daniel Kestrel --- diff --git a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/ar9_bt_homehub-v3a.dts b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/ar9_bt_homehub-v3a.dts index 61a39f995521..71b32b62f5ab 100644 --- a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/ar9_bt_homehub-v3a.dts +++ b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/ar9_bt_homehub-v3a.dts @@ -130,6 +130,8 @@ pinctrl-0 = <&nand_pins>, <&nand_cs1_pins>; pinctrl-names = "default"; + nand-use-soft-ecc-engine; + partitions { compatible = "fixed-partitions"; #address-cells = <1>; diff --git a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/danube_bt_homehub-v2b.dts b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/danube_bt_homehub-v2b.dts index 0147b3ffd1de..85536b0082a5 100644 --- a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/danube_bt_homehub-v2b.dts +++ b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/danube_bt_homehub-v2b.dts @@ -183,6 +183,8 @@ pinctrl-0 = <&nand_pins>, <&nand_cs1_pins>; pinctrl-names = "default"; + nand-use-soft-ecc-engine; + partitions { compatible = "fixed-partitions"; #address-cells = <1>; diff --git a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_avm_fritz3370-rev2-hynix.dts b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_avm_fritz3370-rev2-hynix.dts index e1d0851dab0c..d1bbd0532a05 100644 --- a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_avm_fritz3370-rev2-hynix.dts +++ b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_avm_fritz3370-rev2-hynix.dts @@ -14,7 +14,7 @@ pinctrl-0 = <&nand_pins>, <&nand_cs1_pins>; pinctrl-names = "default"; - nand-ecc-mode = "soft"; + nand-use-soft-ecc-engine; nand-ecc-strength = <3>; nand-ecc-step-size = <256>; diff --git a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_avm_fritz3370-rev2-micron.dts b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_avm_fritz3370-rev2-micron.dts index 2a98a12acb00..16cf76cef343 100644 --- a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_avm_fritz3370-rev2-micron.dts +++ b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_avm_fritz3370-rev2-micron.dts @@ -6,7 +6,7 @@ }; &localbus { - flash@1 { + flash1: flash@1 { compatible = "lantiq,nand-xway"; bank-width = <2>; reg = <1 0x0 0x2000000>; @@ -14,7 +14,7 @@ pinctrl-0 = <&nand_pins>, <&nand_cs1_pins>; pinctrl-names = "default"; - nand-ecc-mode = "on-die"; + nand-ecc-engine = <&flash1>; partitions { compatible = "fixed-partitions"; diff --git a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_avm_fritz3390.dts b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_avm_fritz3390.dts index c4b92f9f910b..17be2729f938 100644 --- a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_avm_fritz3390.dts +++ b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_avm_fritz3390.dts @@ -231,7 +231,7 @@ }; &localbus { - flash@1 { + flash1: flash@1 { compatible = "lantiq,nand-xway"; bank-width = <1>; reg = <1 0x0 0x2000000>; @@ -239,7 +239,7 @@ pinctrl-0 = <&nand_pins>; pinctrl-names = "default"; - nand-ecc-mode = "on-die"; + nand-ecc-engine = <&flash1>; partitions { compatible = "fixed-partitions"; diff --git a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_avm_fritz7362sl.dts b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_avm_fritz7362sl.dts index b1423e5dea4c..4d86bf5542d6 100644 --- a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_avm_fritz7362sl.dts +++ b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_avm_fritz7362sl.dts @@ -46,7 +46,7 @@ }; &localbus { - flash@1 { + flash1: flash@1 { compatible = "lantiq,nand-xway"; lantiq,cs1 = <1>; bank-width = <1>; @@ -55,7 +55,7 @@ pinctrl-0 = <&nand_pins>, <&nand_cs1_pins>; pinctrl-names = "default"; - nand-ecc-mode = "on-die"; + nand-ecc-engine = <&flash1>; partitions { compatible = "fixed-partitions"; diff --git a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_avm_fritz7412.dts b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_avm_fritz7412.dts index a9d20915ea3c..11f318db5de7 100644 --- a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_avm_fritz7412.dts +++ b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_avm_fritz7412.dts @@ -91,6 +91,8 @@ pinctrl-0 = <&nand_pins>, <&nand_cs1_pins>; pinctrl-names = "default"; + nand-use-soft-ecc-engine; + partitions { compatible = "fixed-partitions"; #address-cells = <1>; diff --git a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_avm_fritz7430.dts b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_avm_fritz7430.dts index 3be20e1ff048..7bc64b76e7c8 100644 --- a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_avm_fritz7430.dts +++ b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_avm_fritz7430.dts @@ -103,6 +103,8 @@ pinctrl-0 = <&nand_pins>, <&nand_cs1_pins>; pinctrl-names = "default"; + nand-use-soft-ecc-engine; + partitions { compatible = "fixed-partitions"; #address-cells = <1>; diff --git a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_bt_homehub-v5a.dts b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_bt_homehub-v5a.dts index e24ee787f131..76cf69335b91 100644 --- a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_bt_homehub-v5a.dts +++ b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_bt_homehub-v5a.dts @@ -216,6 +216,7 @@ nand-on-flash-bbt; nand-ecc-strength = <3>; nand-ecc-step-size = <256>; + nand-use-soft-ecc-engine; partitions { compatible = "fixed-partitions"; diff --git a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_lantiq_easy80920-nand.dts b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_lantiq_easy80920-nand.dts index 475d5a59d750..82f72022c99b 100644 --- a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_lantiq_easy80920-nand.dts +++ b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_lantiq_easy80920-nand.dts @@ -19,6 +19,8 @@ pinctrl-0 = <&nand_pins>; pinctrl-names = "default"; + nand-use-soft-ecc-engine; + partitions { compatible = "fixed-partitions"; #address-cells = <1>; diff --git a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_zyxel_p-2812hnu-f1.dts b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_zyxel_p-2812hnu-f1.dts index 0e029d199566..4a7f63b177c4 100644 --- a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_zyxel_p-2812hnu-f1.dts +++ b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_zyxel_p-2812hnu-f1.dts @@ -30,6 +30,8 @@ pinctrl-0 = <&nand_pins>, <&nand_cs1_pins>; pinctrl-names = "default"; + nand-use-soft-ecc-engine; + partitions { compatible = "fixed-partitions"; #address-cells = <1>; diff --git a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_zyxel_p-2812hnu-f3.dts b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_zyxel_p-2812hnu-f3.dts index 12280241a593..376cdaeb61eb 100644 --- a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_zyxel_p-2812hnu-f3.dts +++ b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/vr9_zyxel_p-2812hnu-f3.dts @@ -51,6 +51,8 @@ #address-cells = <1>; #size-cells = <1>; + nand-use-soft-ecc-engine; + partition@0 { label = "kernel"; reg = <0x0 0x200000>; diff --git a/target/linux/lantiq/patches-5.4/0019-MTD-nand-support-new-dt-bindings.patch b/target/linux/lantiq/patches-5.4/0019-MTD-nand-support-new-dt-bindings.patch new file mode 100644 index 000000000000..b4aa5b90932a --- /dev/null +++ b/target/linux/lantiq/patches-5.4/0019-MTD-nand-support-new-dt-bindings.patch @@ -0,0 +1,28 @@ +The nand-ecc-mode DT binding is depracated but the new bindings are +not supported by kernel 5.4. Based on a fix in the kernel to not +overwrite the DT ECC settings, the DT needs to be updated and moves +to the new DT binding. +Since the DT is shared between kernel 5.4 and 5.10, this patch is +an interim solution to allow to use the new DT bindings in kernel 5.4. +It should be removed when moving away from kernel 5.4. +--- a/drivers/mtd/nand/raw/nand_base.c ++++ b/drivers/mtd/nand/raw/nand_base.c +@@ -4851,10 +4851,17 @@ static int of_get_nand_ecc_mode(struct d + { + const char *pm; + int err, i; ++ struct device_node *eng_np; + + err = of_property_read_string(np, "nand-ecc-mode", &pm); +- if (err < 0) ++ if (err < 0) { ++ if (of_property_read_bool(np, "nand-use-soft-ecc-engine")) ++ return NAND_ECC_SOFT; ++ eng_np = of_parse_phandle(np, "nand-ecc-engine", 0); ++ if (eng_np && (eng_np == np)) ++ return NAND_ECC_ON_DIE; + return err; ++ } + + for (i = 0; i < ARRAY_SIZE(nand_ecc_modes); i++) + if (!strcasecmp(pm, nand_ecc_modes[i]))