
Hi Rasmus,
Am 22.09.2020 um 16:34 schrieb Rasmus Villemoes:
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
:-(
Ok, I currently have no access to the hardware, I wait for the customer to give me access, will take until next week ... so I can only review currently code changes...
BTW: I hope to get daily access, so I can add at least one board to my daily U-Boot tbot tests, see:
http://xeidos.ddns.net/ubtestresults/home
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@700 {
compatible = "fsl,ipic";
interrupt-controller;
#address-cells = <0>;
#interrupt-cells = <2>;
reg = <0x700 0x100>;
device_type = "ipic";
};};
-};
- qe: qe@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@10000 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "fsl,qe-muram", "fsl,cpm-muram";
ranges = <0x0 0x00010000 0x00004000>;
data-only@0 {
compatible = "fsl,qe-muram-data",
"fsl,cpm-muram-data";
reg = <0x0 0x4000>;
};
};
qeic: interrupt-controller@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@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@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@2120 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0x2120 0x18>;
compatible = "fsl,ucc-mdio";
phy0: ethernet-phy@00 {
reg = <0x01>;
device_type = "ethernet-phy";
};
phy1: ethernet-phy@01 {
reg = <0x02>;
device_type = "ethernet-phy";
};
};
- };
+};
Does this work with linux? If so, it should be OK....
I miss something like:
https://gitlab.denx.de/u-boot/u-boot/-/commit/7bdfe8592956439743cad3c2d3ff5f...
Important here:
&qe { compatible = "fsl,qe", "simple-bus"; };
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
Looks good...
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.
Okay...
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>
Here from an old log (mpc8360 based):
=> dm tree^M Class Index Probed Driver Name^M -----------------------------------------------------------^M root 0 [ + ] root_driver root_driver^M simple_bus 0 [ + ] generic_simple_bus |-- soc8360@e0000000^M serial 0 [ + ] ns16550_serial | |-- serial@4500^M pinctrl 0 [ + ] par-io-pinctrl | |-- par_io@1400^M simple_bus 1 [ + ] generic_simple_bus | `-- qe@100000^M eth 0 [ ] ucc_geth | |-- ucc@2000^M eth 1 [ ] ucc_geth | |-- ucc@3000^M eth 2 [ + ] ucc_geth | |-- ucc@3200^M eth 3 [ ] ucc_geth | |-- ucc@2400^M eth 4 [ ] ucc_geth | |-- ucc@3400^M eth 5 [ ] ucc_geth | |-- ucc@2600^M eth 6 [ ] ucc_geth | `-- ucc@3600^M simple_bus 2 [ ] generic_simple_bus `-- localbus@e0005000^M =>
Hmm... hard to say, you may enable debug output in ./drivers/core/root.c
bye, Heiko