From 2a4baf3e79ad58db44097198ce32ecc8e8d69d06 Mon Sep 17 00:00:00 2001
From: Felix Fietkau <nbd@nbd.name>
Date: Mon, 13 Mar 2017 12:33:07 +0100
Subject: [PATCH] ipq806x: fix NAND support for linux 4.9

Signed-off-by: Felix Fietkau <nbd@nbd.name>
---
 .../arch/arm/boot/dts/qcom-ipq8064-ap148.dts  |  12 +-
 .../arch/arm/boot/dts/qcom-ipq8064-d7800.dts  | 128 ++++++-----
 .../arch/arm/boot/dts/qcom-ipq8064-ea8500.dts | 217 +++++++++---------
 .../arch/arm/boot/dts/qcom-ipq8064-r7500.dts  | 120 +++++-----
 .../arm/boot/dts/qcom-ipq8064-r7500v2.dts     | 132 ++++++-----
 .../arch/arm/boot/dts/qcom-ipq8064.dtsi       |   5 +-
 .../arch/arm/boot/dts/qcom-ipq8065-r7800.dts  | 126 +++++-----
 7 files changed, 397 insertions(+), 343 deletions(-)

diff --git a/target/linux/ipq806x/files-4.9/arch/arm/boot/dts/qcom-ipq8064-ap148.dts b/target/linux/ipq806x/files-4.9/arch/arm/boot/dts/qcom-ipq8064-ap148.dts
index 99c556819e..fa4f05bdbe 100644
--- a/target/linux/ipq806x/files-4.9/arch/arm/boot/dts/qcom-ipq8064-ap148.dts
+++ b/target/linux/ipq806x/files-4.9/arch/arm/boot/dts/qcom-ipq8064-ap148.dts
@@ -175,10 +175,16 @@
 			pinctrl-0 = <&nand_pins>;
 			pinctrl-names = "default";
 
-			nand-ecc-strength = <4>;
-			nand-bus-width = <8>;
+			cs0 {
+				reg = <0>;
+				compatible = "qcom,nandcs";
+
+				nand-ecc-strength = <4>;
+				nand-bus-width = <8>;
+				nand-ecc-step-size = <512>;
 
-			linux,part-probe = "qcom-smem";
+				linux,part-probe = "qcom-smem";
+			};
 		};
 
 		mdio0: mdio {
diff --git a/target/linux/ipq806x/files-4.9/arch/arm/boot/dts/qcom-ipq8064-d7800.dts b/target/linux/ipq806x/files-4.9/arch/arm/boot/dts/qcom-ipq8064-d7800.dts
index 1610a75d32..c1a4c82a28 100644
--- a/target/linux/ipq806x/files-4.9/arch/arm/boot/dts/qcom-ipq8064-d7800.dts
+++ b/target/linux/ipq806x/files-4.9/arch/arm/boot/dts/qcom-ipq8064-d7800.dts
@@ -201,67 +201,79 @@
 			pinctrl-0 = <&nand_pins>;
 			pinctrl-names = "default";
 
-			nand-ecc-strength = <4>;
-			nand-bus-width = <8>;
-
 			#address-cells = <1>;
 			#size-cells = <1>;
 
-			qcadata@0 {
-				label = "qcadata";
-				reg = <0x0000000 0x0c80000>;
-				read-only;
-			};
-
-			APPSBL@c80000 {
-				label = "APPSBL";
-				reg = <0x0c80000 0x0500000>;
-				read-only;
-			};
-
-			APPSBLENV@1180000 {
-				label = "APPSBLENV";
-				reg = <0x1180000 0x0080000>;
-				read-only;
-			};
-
-			art: art@1200000 {
-				label = "art";
-				reg = <0x1200000 0x0140000>;
-				read-only;
-			};
-
-			artbak: art@1340000 {
-				label = "artbak";
-				reg = <0x1340000 0x0140000>;
-				read-only;
-			};
-
-			kernel@1480000 {
-				label = "kernel";
-				reg = <0x1480000 0x0200000>;
-			};
-
-			ubi@1680000 {
-				label = "ubi";
-				reg = <0x1680000 0x1E00000>;
-			};
-
-			netgear@3480000 {
-				label = "netgear";
-				reg = <0x3480000 0x4480000>;
-				read-only;
-			};
-
-			reserve@7900000 {
-				label = "reserve";
-				reg = <0x7900000 0x0700000>;
-				read-only;
-			};
-
-			firmware@1480000 {
-				label = "firmware";
-				reg = <0x1480000 0x2000000>;
+			cs0 {
+				reg = <0>;
+				compatible = "qcom,nandcs";
+
+				nand-ecc-strength = <4>;
+				nand-bus-width = <8>;
+				nand-ecc-step-size = <512>;
+
+				partitions {
+					compatible = "fixed-partitions";
+					#address-cells = <1>;
+					#size-cells = <1>;
+
+					qcadata@0 {
+						label = "qcadata";
+						reg = <0x0000000 0x0c80000>;
+						read-only;
+					};
+
+					APPSBL@c80000 {
+						label = "APPSBL";
+						reg = <0x0c80000 0x0500000>;
+						read-only;
+					};
+
+					APPSBLENV@1180000 {
+						label = "APPSBLENV";
+						reg = <0x1180000 0x0080000>;
+						read-only;
+					};
+
+					art: art@1200000 {
+						label = "art";
+						reg = <0x1200000 0x0140000>;
+						read-only;
+					};
+
+					artbak: art@1340000 {
+						label = "artbak";
+						reg = <0x1340000 0x0140000>;
+						read-only;
+					};
+
+					kernel@1480000 {
+						label = "kernel";
+						reg = <0x1480000 0x0200000>;
+					};
+
+					ubi@1680000 {
+						label = "ubi";
+						reg = <0x1680000 0x1E00000>;
+					};
+
+					netgear@3480000 {
+						label = "netgear";
+						reg = <0x3480000 0x4480000>;
+						read-only;
+					};
+
+					reserve@7900000 {
+						label = "reserve";
+						reg = <0x7900000 0x0700000>;
+						read-only;
+					};
+
+					firmware@1480000 {
+						label = "firmware";
+						reg = <0x1480000 0x2000000>;
+					};
+				};
 			};
 		};
 
diff --git a/target/linux/ipq806x/files-4.9/arch/arm/boot/dts/qcom-ipq8064-ea8500.dts b/target/linux/ipq806x/files-4.9/arch/arm/boot/dts/qcom-ipq8064-ea8500.dts
index 591e535df7..761fa43179 100644
--- a/target/linux/ipq806x/files-4.9/arch/arm/boot/dts/qcom-ipq8064-ea8500.dts
+++ b/target/linux/ipq806x/files-4.9/arch/arm/boot/dts/qcom-ipq8064-ea8500.dts
@@ -176,110 +176,119 @@
 			pinctrl-0 = <&nand_pins>;
 			pinctrl-names = "default";
 
-			nand-ecc-strength = <4>;
-			nand-bus-width = <8>;
-
-			#address-cells = <1>;
-			#size-cells = <1>;
-
-			SBL1@0 {
-				label = "SBL1";
-				reg = <0x0000000 0x0040000>;
-				read-only;
-			};
-
-			MIBIB@40000 {
-				label = "MIBIB";
-				reg = <0x0040000 0x0140000>;
-				read-only;
-			};
-
-			SBL2@180000 {
-				label = "SBL2";
-				reg = <0x0180000 0x0140000>;
-				read-only;
-			};
-
-			SBL3@2c0000 {
-				label = "SBL3";
-				reg = <0x02c0000 0x0280000>;
-				read-only;
-			};
-
-			DDRCONFIG@540000 {
-				label = "DDRCONFIG";
-				reg = <0x0540000 0x0120000>;
-				read-only;
-			};
-
-			SSD@660000 {
-				label = "SSD";
-				reg = <0x0660000 0x0120000>;
-				read-only;
-			};
-
-			TZ@780000 {
-				label = "TZ";
-				reg = <0x0780000 0x0280000>;
-				read-only;
-			};
-
-			RPM@a00000 {
-				label = "RPM";
-				reg = <0x0a00000 0x0280000>;
-				read-only;
-			};
-
-			art: art@c80000 {
-				label = "art";
-				reg = <0x0c80000 0x0140000>;
-				read-only;
-			};
-
-			APPSBL@dc0000 {
-				label = "APPSBL";
-				reg = <0x0dc0000 0x0100000>;
-				read-only;
-			};
-
-			u_env@ec0000 {
-				label = "u_env";
-				reg = <0x0ec0000 0x0040000>;
-			};
-
-			s_env@f00000 {
-				label = "s_env";
-				reg = <0x0f00000 0x0040000>;
-			};
-
-			devinfo@f40000 {
-				label = "devinfo";
-				reg = <0x0f40000 0x0040000>;
-			};
-
-			linux@f80000 { 
-				label = "kernel1";
-				reg = <0x0f80000 0x2800000>;  /* 3 MB spill to rootfs*/
-			};
-
-			rootfs@1280000 {
-				label = "rootfs1";
-				reg = <0x1280000 0x2500000>;
-			};
-
-			linux2@3780000 {
-				label = "kernel2";
-				reg = <0x3780000 0x2800000>;
-			};
-
-			rootfs2@3a80000 {
-				label = "rootfs2";
-				reg = <0x3a80000 0x2500000>;
-			};
-
-			syscfg@5f80000 {
-				label = "syscfg";
-				reg = <0x5f80000 0x2080000>;
+			cs0 {
+				reg = <0>;
+				compatible = "qcom,nandcs";
+
+				nand-ecc-strength = <4>;
+				nand-bus-width = <8>;
+				nand-ecc-step-size = <512>;
+
+				partitions {
+					compatible = "fixed-partitions";
+					#address-cells = <1>;
+					#size-cells = <1>;
+
+					SBL1@0 {
+						label = "SBL1";
+						reg = <0x0000000 0x0040000>;
+						read-only;
+					};
+
+					MIBIB@40000 {
+						label = "MIBIB";
+						reg = <0x0040000 0x0140000>;
+						read-only;
+					};
+
+					SBL2@180000 {
+						label = "SBL2";
+						reg = <0x0180000 0x0140000>;
+						read-only;
+					};
+
+					SBL3@2c0000 {
+						label = "SBL3";
+						reg = <0x02c0000 0x0280000>;
+						read-only;
+					};
+
+					DDRCONFIG@540000 {
+						label = "DDRCONFIG";
+						reg = <0x0540000 0x0120000>;
+						read-only;
+					};
+
+					SSD@660000 {
+						label = "SSD";
+						reg = <0x0660000 0x0120000>;
+						read-only;
+					};
+
+					TZ@780000 {
+						label = "TZ";
+						reg = <0x0780000 0x0280000>;
+						read-only;
+					};
+
+					RPM@a00000 {
+						label = "RPM";
+						reg = <0x0a00000 0x0280000>;
+						read-only;
+					};
+
+					art: art@c80000 {
+						label = "art";
+						reg = <0x0c80000 0x0140000>;
+						read-only;
+					};
+
+					APPSBL@dc0000 {
+						label = "APPSBL";
+						reg = <0x0dc0000 0x0100000>;
+						read-only;
+					};
+
+					u_env@ec0000 {
+						label = "u_env";
+						reg = <0x0ec0000 0x0040000>;
+					};
+
+					s_env@f00000 {
+						label = "s_env";
+						reg = <0x0f00000 0x0040000>;
+					};
+
+					devinfo@f40000 {
+						label = "devinfo";
+						reg = <0x0f40000 0x0040000>;
+					};
+
+					linux@f80000 { 
+						label = "kernel1";
+						reg = <0x0f80000 0x2800000>;  /* 3 MB spill to rootfs*/
+					};
+
+					rootfs@1280000 {
+						label = "rootfs1";
+						reg = <0x1280000 0x2500000>;
+					};
+
+					linux2@3780000 {
+						label = "kernel2";
+						reg = <0x3780000 0x2800000>;
+					};
+
+					rootfs2@3a80000 {
+						label = "rootfs2";
+						reg = <0x3a80000 0x2500000>;
+					};
+
+					syscfg@5f80000 {
+						label = "syscfg";
+						reg = <0x5f80000 0x2080000>;
+					};
+				};
 			};
 		};
 
diff --git a/target/linux/ipq806x/files-4.9/arch/arm/boot/dts/qcom-ipq8064-r7500.dts b/target/linux/ipq806x/files-4.9/arch/arm/boot/dts/qcom-ipq8064-r7500.dts
index f64948d879..1c26343d93 100644
--- a/target/linux/ipq806x/files-4.9/arch/arm/boot/dts/qcom-ipq8064-r7500.dts
+++ b/target/linux/ipq806x/files-4.9/arch/arm/boot/dts/qcom-ipq8064-r7500.dts
@@ -169,63 +169,71 @@
 			pinctrl-0 = <&nand_pins>;
 			pinctrl-names = "default";
 
-			nand-ecc-strength = <4>;
-			nand-bus-width = <8>;
-
-			#address-cells = <1>;
-			#size-cells = <1>;
-
-			qcadata@0 {
-				label = "qcadata";
-				reg = <0x0000000 0x0c80000>;
-				read-only;
-			};
-
-			APPSBL@c80000 {
-				label = "APPSBL";
-				reg = <0x0c80000 0x0500000>;
-				read-only;
-			};
-
-			APPSBLENV@1180000 {
-				label = "APPSBLENV";
-				reg = <0x1180000 0x0080000>;
-				read-only;
-			};
-
-			art: art@1200000 {
-				label = "art";
-				reg = <0x1200000 0x0140000>;
-				read-only;
-			};
-
-			kernel@1340000 {
-				label = "kernel";
-				reg = <0x1340000 0x0200000>;
-			};
-
-			ubi@1540000 {
-				label = "ubi";
-				reg = <0x1540000 0x1800000>;
-			};
-
-			netgear@2d40000 {
-				label = "netgear";
-				reg = <0x2d40000 0x0c00000>;
-				read-only;
-			};
-
-			reserve@3940000 {
-				label = "reserve";
-				reg = <0x3940000 0x46c0000>;
-				read-only;
-			};
-
-			firmware@1340000 {
-				label = "firmware";
-				reg = <0x1340000 0x1a00000>;
+			cs0 {
+				reg = <0>;
+				compatible = "qcom,nandcs";
+
+				nand-ecc-strength = <4>;
+				nand-bus-width = <8>;
+				nand-ecc-step-size = <512>;
+
+				partitions {
+					compatible = "fixed-partitions";
+					#address-cells = <1>;
+					#size-cells = <1>;
+
+					qcadata@0 {
+						label = "qcadata";
+						reg = <0x0000000 0x0c80000>;
+						read-only;
+					};
+
+					APPSBL@c80000 {
+						label = "APPSBL";
+						reg = <0x0c80000 0x0500000>;
+						read-only;
+					};
+
+					APPSBLENV@1180000 {
+						label = "APPSBLENV";
+						reg = <0x1180000 0x0080000>;
+						read-only;
+					};
+
+					art: art@1200000 {
+						label = "art";
+						reg = <0x1200000 0x0140000>;
+						read-only;
+					};
+
+					kernel@1340000 {
+						label = "kernel";
+						reg = <0x1340000 0x0200000>;
+					};
+
+					ubi@1540000 {
+						label = "ubi";
+						reg = <0x1540000 0x1800000>;
+					};
+
+					netgear@2d40000 {
+						label = "netgear";
+						reg = <0x2d40000 0x0c00000>;
+						read-only;
+					};
+
+					reserve@3940000 {
+						label = "reserve";
+						reg = <0x3940000 0x46c0000>;
+						read-only;
+					};
+
+					firmware@1340000 {
+						label = "firmware";
+						reg = <0x1340000 0x1a00000>;
+					};
+				};
 			};
-
 		};
 
 		mdio0: mdio {
diff --git a/target/linux/ipq806x/files-4.9/arch/arm/boot/dts/qcom-ipq8064-r7500v2.dts b/target/linux/ipq806x/files-4.9/arch/arm/boot/dts/qcom-ipq8064-r7500v2.dts
index ccf215ccde..a21cf18bee 100644
--- a/target/linux/ipq806x/files-4.9/arch/arm/boot/dts/qcom-ipq8064-r7500v2.dts
+++ b/target/linux/ipq806x/files-4.9/arch/arm/boot/dts/qcom-ipq8064-r7500v2.dts
@@ -206,69 +206,77 @@
 			pinctrl-0 = <&nand_pins>;
 			pinctrl-names = "default";
 
-			nand-ecc-strength = <4>;
-			nand-bus-width = <8>;
-
-			#address-cells = <1>;
-			#size-cells = <1>;
-
-			qcadata@0 {
-				label = "qcadata";
-				reg = <0x0000000 0x0c80000>;
-				read-only;
-			};
-
-			APPSBL@c80000 {
-				label = "APPSBL";
-				reg = <0x0c80000 0x0500000>;
-				read-only;
-			};
-
-			APPSBLENV@1180000 {
-				label = "APPSBLENV";
-				reg = <0x1180000 0x0080000>;
-				read-only;
-			};
-
-			art: art@1200000 {
-				label = "art";
-				reg = <0x1200000 0x0140000>;
-				read-only;
-			};
-
-			artbak: art@1340000 {
-				label = "artbak";
-				reg = <0x1340000 0x0140000>;
-				read-only;
-			};
-
-			kernel@1480000 {
-				label = "kernel";
-				reg = <0x1480000 0x0200000>;
-			};
-
-			ubi@1680000 {
-				label = "ubi";
-				reg = <0x1680000 0x1E00000>;
-			};
-
-			netgear@3480000 {
-				label = "netgear";
-				reg = <0x3480000 0x4480000>;
-				read-only;
-			};
-
-			reserve@7900000 {
-				label = "reserve";
-				reg = <0x7900000 0x0700000>;
-				read-only;
-			};
-
-			firmware@1480000 {
-				label = "firmware";
-				reg = <0x1480000 0x2000000>;
+			cs0 {
+				reg = <0>;
+				compatible = "qcom,nandcs";
+
+				nand-ecc-strength = <4>;
+				nand-bus-width = <8>;
+				nand-ecc-step-size = <512>;
+
+				partitions {
+					compatible = "fixed-partitions";
+					#address-cells = <1>;
+					#size-cells = <1>;
+
+					qcadata@0 {
+						label = "qcadata";
+						reg = <0x0000000 0x0c80000>;
+						read-only;
+					};
+
+					APPSBL@c80000 {
+						label = "APPSBL";
+						reg = <0x0c80000 0x0500000>;
+						read-only;
+					};
+
+					APPSBLENV@1180000 {
+						label = "APPSBLENV";
+						reg = <0x1180000 0x0080000>;
+						read-only;
+					};
+
+					art: art@1200000 {
+						label = "art";
+						reg = <0x1200000 0x0140000>;
+						read-only;
+					};
+
+					artbak: art@1340000 {
+						label = "artbak";
+						reg = <0x1340000 0x0140000>;
+						read-only;
+					};
+
+					kernel@1480000 {
+						label = "kernel";
+						reg = <0x1480000 0x0200000>;
+					};
+
+					ubi@1680000 {
+						label = "ubi";
+						reg = <0x1680000 0x1E00000>;
+					};
+
+					netgear@3480000 {
+						label = "netgear";
+						reg = <0x3480000 0x4480000>;
+						read-only;
+					};
+
+					reserve@7900000 {
+						label = "reserve";
+						reg = <0x7900000 0x0700000>;
+						read-only;
+					};
+
+					firmware@1480000 {
+						label = "firmware";
+						reg = <0x1480000 0x2000000>;
+					};
+				};
 			};
-
 		};
 
 		mdio0: mdio {
diff --git a/target/linux/ipq806x/files-4.9/arch/arm/boot/dts/qcom-ipq8064.dtsi b/target/linux/ipq806x/files-4.9/arch/arm/boot/dts/qcom-ipq8064.dtsi
index 8509c83320..cfd4a79c4e 100644
--- a/target/linux/ipq806x/files-4.9/arch/arm/boot/dts/qcom-ipq8064.dtsi
+++ b/target/linux/ipq806x/files-4.9/arch/arm/boot/dts/qcom-ipq8064.dtsi
@@ -913,7 +913,7 @@
 		};
 
 		nand@1ac00000 {
-			compatible = "qcom,ebi2-nandc";
+			compatible = "qcom,ipq806x-nand";
 			reg = <0x1ac00000 0x800>;
 
 			clocks = <&gcc EBI2_CLK>,
@@ -926,6 +926,9 @@
 			qcom,data-crci = <3>;
 
 			status = "disabled";
+
+			#address-cells = <1>;
+			#size-cells = <0>;
 		};
 
 		nss_common: syscon@03000000 {
diff --git a/target/linux/ipq806x/files-4.9/arch/arm/boot/dts/qcom-ipq8065-r7800.dts b/target/linux/ipq806x/files-4.9/arch/arm/boot/dts/qcom-ipq8065-r7800.dts
index bf2fb9619f..403054cc97 100644
--- a/target/linux/ipq806x/files-4.9/arch/arm/boot/dts/qcom-ipq8065-r7800.dts
+++ b/target/linux/ipq806x/files-4.9/arch/arm/boot/dts/qcom-ipq8065-r7800.dts
@@ -313,68 +313,76 @@
 			pinctrl-0 = <&nand_pins>;
 			pinctrl-names = "default";
 
-			nand-ecc-strength = <4>;
-			nand-ecc-step-size = <512>;
-			nand-bus-width = <8>;
-
-			#address-cells = <1>;
-			#size-cells = <1>;
-
-			qcadata@0 {
-				label = "qcadata";
-				reg = <0x0000000 0x0c80000>;
-				read-only;
-			};
-
-			APPSBL@c80000 {
-				label = "APPSBL";
-				reg = <0x0c80000 0x0500000>;
-				read-only;
-			};
-
-			APPSBLENV@1180000 {
-				label = "APPSBLENV";
-				reg = <0x1180000 0x0080000>;
-				read-only;
-			};
-
-			art: art@1200000 {
-				label = "art";
-				reg = <0x1200000 0x0140000>;
-				read-only;
-			};
-
-			artbak: art@1340000 {
-				label = "artbak";
-				reg = <0x1340000 0x0140000>;
-				read-only;
-			};
-
-			kernel@1480000 {
-				label = "kernel";
-				reg = <0x1480000 0x0200000>;
-			};
+			cs0 {
+				reg = <0>;
+				compatible = "qcom,nandcs";
 
-			ubi@1680000 {
-				label = "ubi";
-				reg = <0x1680000 0x1E00000>;
-			};
+				nand-ecc-strength = <4>;
+				nand-bus-width = <8>;
+				nand-ecc-step-size = <512>;
 
-			netgear@3480000 {
-				label = "netgear";
-				reg = <0x3480000 0x4480000>;
-				read-only;
-			};
-
-			reserve@7900000 {
-				label = "reserve";
-				reg = <0x7900000 0x0700000>;
-				read-only;
-			};
+				partitions {
+					compatible = "fixed-partitions";
+					#address-cells = <1>;
+					#size-cells = <1>;
 
-			firmware@1480000 {
-				label = "firmware";
-				reg = <0x1480000 0x2000000>;
+					qcadata@0 {
+						label = "qcadata";
+						reg = <0x0000000 0x0c80000>;
+						read-only;
+					};
+
+					APPSBL@c80000 {
+						label = "APPSBL";
+						reg = <0x0c80000 0x0500000>;
+						read-only;
+					};
+
+					APPSBLENV@1180000 {
+						label = "APPSBLENV";
+						reg = <0x1180000 0x0080000>;
+						read-only;
+					};
+
+					art: art@1200000 {
+						label = "art";
+						reg = <0x1200000 0x0140000>;
+						read-only;
+					};
+
+					artbak: art@1340000 {
+						label = "artbak";
+						reg = <0x1340000 0x0140000>;
+						read-only;
+					};
+
+					kernel@1480000 {
+						label = "kernel";
+						reg = <0x1480000 0x0200000>;
+					};
+
+					ubi@1680000 {
+						label = "ubi";
+						reg = <0x1680000 0x1E00000>;
+					};
+
+					netgear@3480000 {
+						label = "netgear";
+						reg = <0x3480000 0x4480000>;
+						read-only;
+					};
+
+					reserve@7900000 {
+						label = "reserve";
+						reg = <0x7900000 0x0700000>;
+						read-only;
+					};
+
+					firmware@1480000 {
+						label = "firmware";
+						reg = <0x1480000 0x2000000>;
+					};
+				};
 			};
 		};
 
-- 
GitLab