Part Number: AM62L
Hello,
We are developing a custom board based on the AM62L32 SoC (SDK 11.00.15.05). The board uses a DP83822 Ethernet PHY in RMII mode. The PHY works correctly from the Linux kernel, but in U-Boot we are encountering an auto-negotiation/configuration failure when the cable is not connected at boot.
Below are the relevant device-tree nodes and the observed U-Boot log and behavior.
rmii1_pins_default: rgmii1-default-pins {
pinctrl-single,pins = <
AM62LX_IOPAD(0x011c, PIN_INPUT, 1) /* (W11) RMII1_CRS_DV */
AM62LX_IOPAD(0x0134, PIN_INPUT, 1) /* (Y7) RMII1_REF_CLK */
AM62LX_IOPAD(0x0138, PIN_INPUT, 1) /* (Y8) RMII1_RXD0 */
AM62LX_IOPAD(0x013c, PIN_INPUT, 1) /* (AA6) RMII1_RXD1 */
AM62LX_IOPAD(0x0130, PIN_INPUT, 1) /* (Y6) RMII1_RX_ER */
AM62LX_IOPAD(0x0120, PIN_OUTPUT, 1) /* (AC10) RMII1_TXD0 */
AM62LX_IOPAD(0x0124, PIN_OUTPUT, 1) /* (W13) RMII1_TXD1 */
AM62LX_IOPAD(0x0118, PIN_OUTPUT, 1) /* (AB11) RMII1_TX_EN */
>;
};
mdio1_pins_default: mdio1-default-pins {
pinctrl-single,pins = <
AM62LX_IOPAD(0x014c, PIN_OUTPUT, 0) /* (AC15) MDIO0_MDC */
AM62LX_IOPAD(0x0148, PIN_INPUT, 0) /* (AC13) MDIO0_MDIO */
>;
};
wkup_gpio0_pins_default: wkup-gpio0-default-pins {
pinctrl-single,pins = <
AM62LX_IOPAD(0x000c, PIN_OUTPUT_PULLUP, 7) /* (W22) WKUP_GPIO0_3 */
>;
};
&wkup_gpio0 {
status = "okay";
};
&cpsw3g {
pinctrl-names = "default";
pinctrl-0 = <&rmii1_pins_default>;
};
&cpsw_port1 {
phy-mode = "rmii";
phy-handle = <&cpsw3g_phy1>;
};
&cpsw_port2 {
status = "disabled";
};
&cpsw3g_mdio {
pinctrl-names = "default";
pinctrl-0 = <&mdio1_pins_default>;
status = "okay";
cpsw3g_phy1: ethernet-phy@31 {
reg = <31>;
ti,rmii-mode = "master";
pinctrl-names = "default";
pinctrl-0 = <&wkup_gpio0_pins_default>;
reset-gpios = <&wkup_gpio0 3 GPIO_ACTIVE_LOW>;
reset-assert-us = <100>;
reset-deassert-us = <500>;
};
};
If the PHY is not connected at boot, we see the following when attempting to ping (or when U-Boot tries to bring up the interface):
=> ping 192.168.27.86
ethernet@8000000port@1 Waiting for PHY auto negotiation to complete......... TIMEOUT !
am65_cpsw_nuss_port ethernet@8000000port@1: phy_startup failed
am65_cpsw_nuss_port ethernet@8000000port@1: am65_cpsw_start end error
Using ethernet@8000000port@1 device
ARP Retry count exceeded; starting again
am65_cpsw_nuss_port ethernet@8000000port@1: phy_config failed: -110
am65_cpsw_nuss_port ethernet@8000000port@1: am65_cpsw_start end error
ping failed; host 192.168.27.86 is not alive
After physically plugging in the cable and retrying:
=> ping 192.168.27.86
am65_cpsw_nuss_port ethernet@8000000port@1: phy_config failed: -110
am65_cpsw_nuss_port ethernet@8000000port@1: am65_cpsw_start end error
Using ethernet@8000000port@1 device
ARP Retry count exceeded; starting again
am65_cpsw_nuss_port ethernet@8000000port@1: phy_config failed: -110
am65_cpsw_nuss_port ethernet@8000000port@1: am65_cpsw_start end error
ping failed; host 192.168.27.86 is not alive
The same device-tree in the Linux kernel results in a working Ethernet link , so the hardware wiring, PHY ID and configuration appear correct at the kernel level.
The PHY auto-negotiation / configuration in U-Boot times out when the cable is not connected at boot; once the cable is connected later, U-Boot still fails to configure the PHY (-110 timeout). We need guidance for resolving the issue.
Thanks,
Nilesh