[openwrt/openwrt] lantiq: kernel: xway-nand: Move ECC engine setting to new DT binding

LEDE Commits lede-commits at lists.infradead.org
Sat Oct 2 08:40:28 PDT 2021


hauke pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/ca1874437c8bceff1c34f3ea69c5ebf573d45c45

commit ca1874437c8bceff1c34f3ea69c5ebf573d45c45
Author: Daniel Kestrel <kestrel1974 at t-online.de>
AuthorDate: Sat Aug 7 09:28:24 2021 +0200

    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 at 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 <kestrel1974 at t-online.de>
---
 .../mips/boot/dts/lantiq/ar9_bt_homehub-v3a.dts    |  2 ++
 .../mips/boot/dts/lantiq/danube_bt_homehub-v2b.dts |  2 ++
 .../dts/lantiq/vr9_avm_fritz3370-rev2-hynix.dts    |  2 +-
 .../dts/lantiq/vr9_avm_fritz3370-rev2-micron.dts   |  4 ++--
 .../mips/boot/dts/lantiq/vr9_avm_fritz3390.dts     |  4 ++--
 .../mips/boot/dts/lantiq/vr9_avm_fritz7362sl.dts   |  4 ++--
 .../mips/boot/dts/lantiq/vr9_avm_fritz7412.dts     |  2 ++
 .../mips/boot/dts/lantiq/vr9_avm_fritz7430.dts     |  2 ++
 .../mips/boot/dts/lantiq/vr9_bt_homehub-v5a.dts    |  1 +
 .../boot/dts/lantiq/vr9_lantiq_easy80920-nand.dts  |  2 ++
 .../boot/dts/lantiq/vr9_zyxel_p-2812hnu-f1.dts     |  2 ++
 .../boot/dts/lantiq/vr9_zyxel_p-2812hnu-f3.dts     |  2 ++
 .../0019-MTD-nand-support-new-dt-bindings.patch    | 28 ++++++++++++++++++++++
 13 files changed, 50 insertions(+), 7 deletions(-)

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 61a39f9955..71b32b62f5 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 0147b3ffd1..85536b0082 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 e1d0851dab..d1bbd0532a 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 2a98a12acb..16cf76cef3 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 at 1 {
+	flash1: flash at 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 c4b92f9f91..17be2729f9 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 at 1 {
+	flash1: flash at 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 b1423e5dea..4d86bf5542 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 at 1 {
+	flash1: flash at 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 a9d20915ea..11f318db5d 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 3be20e1ff0..7bc64b76e7 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 e24ee787f1..76cf69335b 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 475d5a59d7..82f72022c9 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 0e029d1995..4a7f63b177 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 12280241a5..376cdaeb61 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 at 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 0000000000..b4aa5b9093
--- /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]))



More information about the lede-commits mailing list