Question regarding Linux-6.3.5 and Sunxi A20 NAND/NFC support

Fawad Lateef <[email protected]>
Newsgroups org.kernelnewbies.kernelnewbies,org.kernel.vger.linux-kernel
Message-ID <CAGgoGu7Vim82Hu1JKc+m6cPkcn7+WWDFwK5P_YE6grFQS9E21Q@mail.gmail.com>
Hi,

I am trying to make Linux-6.3.5 working on Olimex/Sunxi A20 SOM with NAND.

Found that the Sunxi A20 NAND is supported in mainline kernel
(drivers/mtd/nand/raw/sunxi_nand.c) and following the guidelines here
(https://linux-sunxi.org/Mainline_NAND_Howto); I added the NFC chip
pin information in sunxi-a20.dtsi and defined/enabled the nfc
controller in the sunxi-a20-olinuxino-micro.dts files.

The changes I made are below. Problem is when I define the nfc node
entry in dts file "without" pinctrl entry (pinctrl-0 = <&nand_pins_a>,
<&nand_cs0_pins_a>, <&nand_rb0_pins_a>;), the sunxi_nfc_probe function
is called (though the No NAND chip is detected).

And if I define the pinctrl-0  in the nfc node, all I see related to
NAND/sunxi in the kernel boot log is this line:  platform
1c03000.nand-controller: deferred probe pending.

Can someone please guide me why the deferred probe is pending but
never call the sunxi_nfc_probe function?  And without pinctrl-0 entry
why probe function is being called?

Seems like I am missing something basic here and any pointers to debug
this will be appreciated.


--- linux-6.3.5.orig/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts
2023-05-30 14:17:29.000000000 +0100
+++ linux-6.3.5/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts
2023-08-13 23:27:22.405058025 +0100
@@ -56,7 +56,7 @@

  aliases {
  serial0 = &uart0;
- serial1 = &uart6;
+ serial1 = &uart2;
  serial2 = &uart7;
  spi0 = &spi1;
  spi1 = &spi2;
@@ -66,17 +66,6 @@
  stdout-path = "serial0:115200n8";
  };

- hdmi-connector {
- compatible = "hdmi-connector";
- type = "a";
-
- port {
- hdmi_con_in: endpoint {
- remote-endpoint = <&hdmi_out_con>;
- };
- };
- };
-
  leds {
  compatible = "gpio-leds";
  pinctrl-names = "default";
@@ -90,16 +79,55 @@
  };
 };

-&ahci {
- target-supply = <&reg_ahci_5v>;
+&nfc {
+ pinctrl-names = "default";
+ pinctrl-0 = <&nand_pins_a>, <&nand_cs0_pins_a>, <&nand_rb0_pins_a>;
  status = "okay";
+
+ nand@0 {
+ #address-cells = <2>;
+ #size-cells = <2>;
+ reg = <0>;
+ allwinner,rb = <0>;
+
+ nand-ecc-mode = "hw";
+ nand-on-flash-bbt;
+ };
+
+ boot0@0 {
+ label = "boot0";
+ reg = /bits/ 64 <0x0 0x200000>;
+ };
+
+ boot0-rescue@200000 {
+ label = "boot0-rescue";
+ reg = /bits/ 64 <0x200000 0x200000>;
+ };
+
+ uboot@400000 {
+ label = "uboot";
+ reg = /bits/ 64 <0x400000 0x200000>;
+ };
+
+ uboot-rescue@600000 {
+ label = "uboot-rescue";
+ reg = /bits/ 64 <0x600000 0x200000>;
+ };
+
+ main@800000 {
+ label = "main";
+ reg = /bits/ 64 <0x800000 0xff800000>;
+ };
+
 };

-&codec {
+&ahci {
+ target-supply = <&reg_ahci_5v>;
  status = "okay";
 };

 &cpu0 {
+ clock-frequency = <900000000>;
  cpu-supply = <&reg_dcdc2>;
 };

@@ -123,34 +151,24 @@
  status = "okay";
 };

-&hdmi {
- status = "okay";
-};
-
-&hdmi_out {
- hdmi_out_con: endpoint {
- remote-endpoint = <&hdmi_con_in>;
- };
-};
-
 &i2c0 {
- status = "okay";
+        status = "okay";

- axp209: pmic@34 {
- reg = <0x34>;
- interrupt-parent = <&nmi_intc>;
- interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
- };
+        axp209: pmic@34 {
+                reg = <0x34>;
+                interrupt-parent = <&nmi_intc>;
+                interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
+        };
 };

 &i2c1 {
- status = "okay";
+        status = "okay";

- eeprom: eeprom@50 {
- compatible = "atmel,24c16";
- reg = <0x50>;
- pagesize = <16>;
- };
+        eeprom: eeprom@50 {
+                compatible = "atmel,24c16";
+                reg = <0x50>;
+                pagesize = <16>;
+        };
 };

 &i2c2 {
@@ -160,55 +178,6 @@
 &lradc {
  vref-supply = <&reg_vcc3v0>;
  status = "okay";
-
- button-191 {
- label = "Volume Up";
- linux,code = <KEY_VOLUMEUP>;
- channel = <0>;
- voltage = <191274>;
- };
-
- button-392 {
- label = "Volume Down";
- linux,code = <KEY_VOLUMEDOWN>;
- channel = <0>;
- voltage = <392644>;
- };
-
- button-601 {
- label = "Menu";
- linux,code = <KEY_MENU>;
- channel = <0>;
- voltage = <601151>;
- };
-
- button-795 {
- label = "Search";
- linux,code = <KEY_SEARCH>;
- channel = <0>;
- voltage = <795090>;
- };
-
- button-987 {
- label = "Home";
- linux,code = <KEY_HOMEPAGE>;
- channel = <0>;
- voltage = <987387>;
- };
-
- button-1184 {
- label = "Esc";
- linux,code = <KEY_ESC>;
- channel = <0>;
- voltage = <1184678>;
- };
-
- button-1398 {
- label = "Enter";
- linux,code = <KEY_ENTER>;
- channel = <0>;
- voltage = <1398804>;
- };
 };

 &gmac_mdio {
@@ -239,10 +208,6 @@
  status = "okay";
 };

-&otg_sram {
- status = "okay";
-};
-
 &pio {
  gmac_txerr: gmac-txerr-pin {
  pins = "PA17";
@@ -323,9 +288,9 @@
  status = "okay";
 };

-&uart6 {
+&uart2 {
  pinctrl-names = "default";
- pinctrl-0 = <&uart6_pi_pins>;
+ pinctrl-0 = <&uart2_pi_pins>;
  status = "okay";
 };

@@ -352,3 +317,28 @@
  usb2_vbus-supply = <&reg_usb2_vbus>;
  status = "okay";
 };
+
+&fe0 {
+ status = "disabled";
+};
+
+&fe1 {
+ status = "disabled";
+};
+
+&be0 {
+ status = "disabled";
+};
+
+&be1 {
+ status = "disabled";
+};
+
+&tcon0 {
+ status = "disabled";
+};
+
+&tcon1 {
+ status = "disabled";
+};
+


--- linux-6.3.5.orig/arch/arm/boot/dts/sun7i-a20.dtsi 2023-05-30
14:17:29.000000000 +0100
+++ linux-6.3.5/arch/arm/boot/dts/sun7i-a20.dtsi 2023-08-08
00:30:04.689288733 +0100
@@ -345,6 +345,58 @@
  #size-cells = <0>;
  };

+ nand_pins_a: nand_base0@0 {
+ allwinner,pins = "PC0", "PC1", "PC2",
+ "PC5", "PC8", "PC9", "PC10",
+ "PC11", "PC12", "PC13", "PC14",
+ "PC15", "PC16";
+ allwinner,function = "nand0";
+ allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+ allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+ };
+
+ nand_cs0_pins_a: nand_cs@0 {
+ allwinner,pins = "PC4";
+ allwinner,function = "nand0";
+ allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+ allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+ };
+
+ nand_cs1_pins_a: nand_cs@1 {
+ allwinner,pins = "PC3";
+ allwinner,function = "nand0";
+ allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+ allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+ };
+
+ nand_cs2_pins_a: nand_cs@2 {
+ allwinner,pins = "PC17";
+ allwinner,function = "nand0";
+ allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+ allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+ };
+
+ nand_cs3_pins_a: nand_cs@3 {
+ allwinner,pins = "PC18";
+ allwinner,function = "nand0";
+ allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+ allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+ };
+
+ nand_rb0_pins_a: nand_rb@0 {
+ allwinner,pins = "PC6";
+ allwinner,function = "nand0";
+ allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+ allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+ };
+
+ nand_rb1_pins_a: nand_rb@1 {
+ allwinner,pins = "PC7";
+ allwinner,function = "nand0";
+ allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+ allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+ };
+
  spi0: spi@1c05000 {
  compatible = "allwinner,sun4i-a10-spi";
  reg = <0x01c05000 0x1000>;


Thanks and regards,

-- Fawad Lateef

_______________________________________________
Kernelnewbies mailing list
[email protected]
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
sun7i-a20-olinuxino-micro.dts.patch (text/x-patch, 3.9 KB)
--- linux-6.3.5.orig/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts	2023-05-30 14:17:29.000000000 +0100
+++ linux-6.3.5/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts	2023-08-13 23:27:22.405058025 +0100
@@ -56,7 +56,7 @@
 
 	aliases {
 		serial0 = &uart0;
-		serial1 = &uart6;
+		serial1 = &uart2;
 		serial2 = &uart7;
 		spi0 = &spi1;
 		spi1 = &spi2;
@@ -66,17 +66,6 @@
 		stdout-path = "serial0:115200n8";
 	};
 
-	hdmi-connector {
-		compatible = "hdmi-connector";
-		type = "a";
-
-		port {
-			hdmi_con_in: endpoint {
-				remote-endpoint = <&hdmi_out_con>;
-			};
-		};
-	};
-
 	leds {
 		compatible = "gpio-leds";
 		pinctrl-names = "default";
@@ -90,16 +79,55 @@
 	};
 };
 
-&ahci {
-	target-supply = <&reg_ahci_5v>;
+&nfc {
+	pinctrl-names = "default";
+	pinctrl-0 = <&nand_pins_a>, <&nand_cs0_pins_a>, <&nand_rb0_pins_a>;
 	status = "okay";
+
+	nand@0 {
+		#address-cells = <2>;
+		#size-cells = <2>;
+		reg = <0>;
+		allwinner,rb = <0>;
+
+		nand-ecc-mode = "hw";
+		nand-on-flash-bbt;
+	};
+
+	boot0@0 {
+		label = "boot0";
+		reg = /bits/ 64 <0x0 0x200000>;
+	};
+
+	boot0-rescue@200000 {
+		label = "boot0-rescue";
+		reg = /bits/ 64 <0x200000 0x200000>;
+	};
+
+	uboot@400000 {
+		label = "uboot";
+		reg = /bits/ 64 <0x400000 0x200000>;
+	};
+
+	uboot-rescue@600000 {
+		label = "uboot-rescue";
+		reg = /bits/ 64 <0x600000 0x200000>;
+	};
+
+	main@800000 {
+		label = "main";
+		reg = /bits/ 64 <0x800000 0xff800000>;
+	};
+
 };
 
-&codec {
+&ahci {
+	target-supply = <&reg_ahci_5v>;
 	status = "okay";
 };
 
 &cpu0 {
+	clock-frequency = <900000000>;
 	cpu-supply = <&reg_dcdc2>;
 };
 
@@ -123,34 +151,24 @@
 	status = "okay";
 };
 
-&hdmi {
-	status = "okay";
-};
-
-&hdmi_out {
-	hdmi_out_con: endpoint {
-		remote-endpoint = <&hdmi_con_in>;
-	};
-};
-
 &i2c0 {
-	status = "okay";
+        status = "okay";
 
-	axp209: pmic@34 {
-		reg = <0x34>;
-		interrupt-parent = <&nmi_intc>;
-		interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
-	};
+        axp209: pmic@34 {
+                reg = <0x34>;
+                interrupt-parent = <&nmi_intc>;
+                interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
+        };
 };
 
 &i2c1 {
-	status = "okay";
+        status = "okay";
 
-	eeprom: eeprom@50 {
-		compatible = "atmel,24c16";
-		reg = <0x50>;
-		pagesize = <16>;
-	};
+        eeprom: eeprom@50 {
+                compatible = "atmel,24c16";
+                reg = <0x50>;
+                pagesize = <16>;
+        };
 };
 
 &i2c2 {
@@ -160,55 +178,6 @@
 &lradc {
 	vref-supply = <&reg_vcc3v0>;
 	status = "okay";
-
-	button-191 {
-		label = "Volume Up";
-		linux,code = <KEY_VOLUMEUP>;
-		channel = <0>;
-		voltage = <191274>;
-	};
-
-	button-392 {
-		label = "Volume Down";
-		linux,code = <KEY_VOLUMEDOWN>;
-		channel = <0>;
-		voltage = <392644>;
-	};
-
-	button-601 {
-		label = "Menu";
-		linux,code = <KEY_MENU>;
-		channel = <0>;
-		voltage = <601151>;
-	};
-
-	button-795 {
-		label = "Search";
-		linux,code = <KEY_SEARCH>;
-		channel = <0>;
-		voltage = <795090>;
-	};
-
-	button-987 {
-		label = "Home";
-		linux,code = <KEY_HOMEPAGE>;
-		channel = <0>;
-		voltage = <987387>;
-	};
-
-	button-1184 {
-		label = "Esc";
-		linux,code = <KEY_ESC>;
-		channel = <0>;
-		voltage = <1184678>;
-	};
-
-	button-1398 {
-		label = "Enter";
-		linux,code = <KEY_ENTER>;
-		channel = <0>;
-		voltage = <1398804>;
-	};
 };
 
 &gmac_mdio {
@@ -239,10 +208,6 @@
 	status = "okay";
 };
 
-&otg_sram {
-	status = "okay";
-};
-
 &pio {
 	gmac_txerr: gmac-txerr-pin {
 		pins = "PA17";
@@ -323,9 +288,9 @@
 	status = "okay";
 };
 
-&uart6 {
+&uart2 {
 	pinctrl-names = "default";
-	pinctrl-0 = <&uart6_pi_pins>;
+	pinctrl-0 = <&uart2_pi_pins>;
 	status = "okay";
 };
 
@@ -352,3 +317,28 @@
 	usb2_vbus-supply = <&reg_usb2_vbus>;
 	status = "okay";
 };
+
+&fe0 {
+	status = "disabled";
+};
+
+&fe1 {
+	status = "disabled";
+};
+
+&be0 {
+	status = "disabled";
+};
+
+&be1 {
+	status = "disabled";
+};
+
+&tcon0 {
+	status = "disabled";
+};
+
+&tcon1 {
+	status = "disabled";
+};
+
sun7i-a20.dtsi.patch (text/x-patch, 1.7 KB)
--- linux-6.3.5.orig/arch/arm/boot/dts/sun7i-a20.dtsi	2023-05-30 14:17:29.000000000 +0100
+++ linux-6.3.5/arch/arm/boot/dts/sun7i-a20.dtsi	2023-08-08 00:30:04.689288733 +0100
@@ -345,6 +345,58 @@
 			#size-cells = <0>;
 		};
 
+		nand_pins_a: nand_base0@0 {
+			allwinner,pins = "PC0", "PC1", "PC2",
+					"PC5", "PC8", "PC9", "PC10",
+					"PC11", "PC12", "PC13", "PC14",
+					"PC15", "PC16";
+			allwinner,function = "nand0";
+			allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+			allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+		};
+
+		nand_cs0_pins_a: nand_cs@0 {
+			allwinner,pins = "PC4";
+			allwinner,function = "nand0";
+			allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+			allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+		};
+
+		nand_cs1_pins_a: nand_cs@1 {
+			allwinner,pins = "PC3";
+			allwinner,function = "nand0";
+			allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+			allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+		};
+
+		nand_cs2_pins_a: nand_cs@2 {
+			allwinner,pins = "PC17";
+			allwinner,function = "nand0";
+			allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+			allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+		};
+
+		nand_cs3_pins_a: nand_cs@3 {
+			allwinner,pins = "PC18";
+			allwinner,function = "nand0";
+			allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+			allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+		};
+
+		nand_rb0_pins_a: nand_rb@0 {
+			allwinner,pins = "PC6";
+			allwinner,function = "nand0";
+			allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+			allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+		};
+
+		nand_rb1_pins_a: nand_rb@1 {
+			allwinner,pins = "PC7";
+			allwinner,function = "nand0";
+			allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+			allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+		};
+
 		spi0: spi@1c05000 {
 			compatible = "allwinner,sun4i-a10-spi";
 			reg = <0x01c05000 0x1000>;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.