[PATCH v2 0/5] powerpc, mpc83xx: add DM_ETH support

Rasmus Villemoes rasmus.villemoes at prevas.dk
Tue Sep 22 16:34:36 CEST 2020


Hi Heiko

I'm struggling somewhat with getting our mpc8309-derived board converted
to DM_ETH. I just get

Net:   No ethernet found.

where I used to get

Net:   UEC0, UEC1, UEC2

and there's no errors or other diagnostics printed (I've also tried
adding #define DEBUG 1 to the .c files under drivers/net/qe/, still
nothing).

The board already used OF_CONTROL, so I've tried extending the
device-tree based partly on you changes for the km boards, partly from
our linux device tree - the two mostly agree:

@@ -25,6 +25,8 @@
 		i2c0 = &i2c0;
 		i2c1 = &i2c1;
 		spi0 = &spi0;
+		ethernet0 = &enet0;
+		ethernet2 = &enet2;
 	};

 	chosen {
@@ -315,6 +317,95 @@
 			clocks = <&clocks MPC83XX_CLK_SDHC>;
 			clock-names = "per";
 		};
+
+		ipic: pic at 700 {
+			compatible = "fsl,ipic";
+			interrupt-controller;
+			#address-cells = <0>;
+			#interrupt-cells = <2>;
+			reg = <0x700 0x100>;
+			device_type = "ipic";
+		};
 	};
-};

+	qe: qe at e0100000 {
+		#address-cells = <1>;
+		#size-cells = <1>;
+		device_type = "qe";
+		compatible = "fsl,qe";
+		ranges = <0x0 0xe0100000 0x00100000>;
+		reg = <0xe0100000 0x480>;
+		brg-frequency = <0>;
+		bus-frequency = <396000000>;
+
+		muram at 10000 {
+			#address-cells = <1>;
+			#size-cells = <1>;
+			compatible = "fsl,qe-muram", "fsl,cpm-muram";
+			ranges = <0x0 0x00010000 0x00004000>;
+
+			data-only at 0 {
+				compatible = "fsl,qe-muram-data",
+					     "fsl,cpm-muram-data";
+				reg = <0x0 0x4000>;
+			};
+		};
+
+		qeic: interrupt-controller at 80 {
+			interrupt-controller;
+			compatible = "fsl,qe-ic";
+			#address-cells = <0>;
+			#interrupt-cells = <1>;
+			reg = <0x80 0x80>;
+			big-endian;
+			interrupts = <32 8 33 8>;
+			interrupt-parent = <&ipic>;
+		};
+
+		enet0: ethernet at 2000 {
+			device_type = "network";
+			compatible = "ucc_geth";
+			cell-index = <1>;
+			reg = <0x2000 0x200>;
+			interrupts = <32>;
+			interrupt-parent = <&qeic>;
+			local-mac-address = [ 00 00 00 00 00 00 ];
+			rx-clock-name = "clk9";
+			tx-clock-name = "clk10";
+			fixed-link = <1 1 100 0 0>;
+		};
+
+		enet2: ethernet at 2200 {
+			device_type = "network";
+			compatible = "ucc_geth";
+			cell-index = <3>;
+			reg = <0x2200 0x200>;
+			interrupts = <34>;
+			interrupt-parent = <&qeic>;
+			local-mac-address = [ 00 00 00 00 00 00 ];
+			rx-clock-name = "clk11";
+			tx-clock-name = "clk12";
+			phy-handle = <&phy1>;
+			phy-connection-type = "mii";
+		};
+
+		mdio0: mdio at 2120 {
+			#address-cells = <1>;
+			#size-cells = <0>;
+			reg = <0x2120 0x18>;
+			compatible = "fsl,ucc-mdio";
+
+			phy0: ethernet-phy at 00 {
+				reg = <0x01>;
+				device_type = "ethernet-phy";
+			};
+			phy1: ethernet-phy at 01 {
+				reg = <0x02>;
+				device_type = "ethernet-phy";
+			};
+		};
+
+
+	};
+
+};

The defconfig is updated with

 CONFIG_MTD_UBI_FASTMAP_AUTOCONVERT=1
 CONFIG_PHYLIB=y
 CONFIG_PHY_MARVELL=y
+CONFIG_DM_ETH=y
+CONFIG_DM_MDIO=y
+CONFIG_DM_ETH_PHY=y
 CONFIG_MII=y
+CONFIG_QE_UEC=y

and finally I've removed the UEC_ETH definitions from the board config
header:

-/*
- * Ethernet setup
- */
-
-/* enable uec ethernet */
-#define CONFIG_UEC_ETH
-
-/* eth1 */
-#define CONFIG_UEC_ETH1
-#define CONFIG_SYS_UEC1_UCC_NUM		0
-#define CONFIG_SYS_UEC1_RX_CLK		QE_CLK9
-#define CONFIG_SYS_UEC1_TX_CLK		QE_CLK10
-#define CONFIG_SYS_UEC1_ETH_TYPE	FAST_ETH
-#define CONFIG_SYS_UEC1_PHY_ADDR	0x11
-#define CONFIG_SYS_UEC1_INTERFACE_TYPE	PHY_INTERFACE_MODE_MII
-#define CONFIG_SYS_UEC1_INTERFACE_SPEED	100
-
-/* eth2 */
-#define CONFIG_UEC_ETH2
-#define CONFIG_SYS_UEC2_UCC_NUM		1
-#define CONFIG_SYS_UEC2_RX_CLK		QE_CLK7
-#define CONFIG_SYS_UEC2_TX_CLK		QE_CLK8
-#define CONFIG_SYS_UEC2_ETH_TYPE	FAST_ETH
-#define CONFIG_SYS_UEC2_PHY_ADDR	0x13
-#define CONFIG_SYS_UEC2_INTERFACE_TYPE	PHY_INTERFACE_MODE_MII
-#define CONFIG_SYS_UEC2_INTERFACE_SPEED	100
-
-/* eth3 */
-#define CONFIG_UEC_ETH3
-#define CONFIG_SYS_UEC3_UCC_NUM		2
-#define CONFIG_SYS_UEC3_RX_CLK		QE_CLK11
-#define CONFIG_SYS_UEC3_TX_CLK		QE_CLK12
-#define CONFIG_SYS_UEC3_ETH_TYPE	FAST_ETH
-#define CONFIG_SYS_UEC3_PHY_ADDR	0x12
-#define CONFIG_SYS_UEC3_INTERFACE_TYPE	PHY_INTERFACE_MODE_MII
-#define CONFIG_SYS_UEC3_INTERFACE_SPEED	100
-

I only define two ethernet devices in DT above - the third (middle one)
is used for ethercat and irrelevant in U-Boot.

I have not set CONFIG_PINCTRL{,_QE} since our qe_iop_conf_tab is just

const qe_iop_conf_t qe_iop_conf_tab[] = {
       {0,  0, 0, 0, QE_IOP_TAB_END}, /* END of table */
};

so config_qe_ioports() should be a no-op.

Can you see something obviously wrong with the above, and/or do you have
some hints as for what I can do to figure out why the drivers apparently
do not pick up the devices from DT? 'dm drivers' does list

ucc_geth                  033 eth                  <none>
qe_uec_mdio               051 mdio                 <none>

Thanks,
Rasmus


More information about the U-Boot mailing list