DP83867IR: IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready

Part Number: DP83867IR

Hi,

We are trying to get ethernet working on a custom AM5729-based board. 

Our dmesg logs associated with eth/phy/mdio etc. are:

[   0.000000] Booting Linux on physical CPU 0x0
[   0.000000] arch_timer: cp15 timer(s) running at 6.14MHz (phys).
[   1.040813] libphy: Fixed MDIO Bus: probed
[   1.081249] davinci_mdio 48485000.mdio: davinci mdio revision 1.6, bus freq 1000000
[   1.081261] libphy: 48485000.mdio: probed
[   1.097189] davinci_mdio 48485000.mdio: phy[0]: device 48485000.mdio:00, driver TI DP83867
[   1.097788] cpsw 48484000.ethernet: Detected MACID = 20:d7:78:16:84:28
[   1.097858] cpsw 48484000.ethernet: initialized cpsw ale version 1.4
[   1.097867] cpsw 48484000.ethernet: ALE Table size 1024
[   1.097901] cpsw 48484000.ethernet: cpts: overflow check period 1250 (jiffies)
[   7.611714] net eth0: initializing cpsw version 1.15 (0)
[   7.665105] TI DP83867 48485000.mdio:00: attached PHY driver [TI DP83867] (mii_bus:phy_addr=48485000.mdio:00, irq=POLL)
[   7.675516] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[   7.675527] 8021q: adding VLAN 0 to HW filter on device eth0

Our associated device tree entires:

&davinci_mdio {
    // note: compatible entries changed to suit DP83867IRRGZR
    phy0: ethernet-phy@0 {
        reg = <0>;
        ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
        ti,tx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
        ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_4_B_NIB>;
    };
};

&cpsw_emac0 {
    phy-handle = <&phy0>;
    phy-mode = "rgmii-id";
};

&mac {
    slaves = <1>;
    status = "okay";
};

We are able to see clock and data signals on MDIO and MDCLK lines. However, we cannot get the eth0 link to be ready.


Any advice would be greatly appreciated.

  • Hi Alexander,

    Thanks for reaching out. Some questions to help isolate the issue:

    • Which PHY + SoC are being used as the link partner?
    • What is the output log for "ethtool -s eth0" ?
    • Can the register dump be shared? Ethtool, mdio-tools, or phytool can help with this.
      • ethtool -d|--register-dump devname [raw on|off] [hex on|off]

    Link failure is typically a PHY-level configuration issue, so I recommend confirming the configurations between [DP83867] and [Link Partner] are compatible, relative to:

    • Auto-negotiation enabled / disabled
      • If disabled, are both PHYs set to force the same speed?
      • If enabled, do both PHYs advertise the same speeds? Register dump will confirm which advertisements were received remotely during auto-neg process.

    Thank you,
    Evan

  • Hi Evan,

    - It's connected to a standard gigabit ethernet switch (NETGEAR Prosafe plus 8-port GS108E gigabit ethernet switch
    - "ethtool -s eth0" returns no output
    - sudo ethtool -d eth0 yields the following (from 0x0070 to 0x2ff0 is 0s). We are operating in Mode 1 (or at least intend to):

    Offset          Values
    ------          ------
    0x0000:         00 00 00 00 d7 20 00 10 28 84 16 78 0c 00 00 00
    0x0010:         ff ff 00 d0 ff ff ff ff 00 00 00 00 00 00 00 20
    0x0020:         07 06 07 07 1c 00 00 00 33 33 00 10 01 00 00 00
    0x0030:         1c 00 00 00 00 01 00 10 01 00 00 5e 1c 00 00 00
    0x0040:         00 01 00 10 fb 00 00 5e 00 00 00 00 00 00 00 00
    0x0050:         00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    0x0060:         00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    0x0070:         00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    ...
    0x2ff0:         00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

    - "ethtool eth0" yields the following:
    Settings for eth0:
            Supported ports: [ TP MII ]
            Supported link modes:   10baseT/Half 10baseT/Full
                                    100baseT/Half 100baseT/Full
                                    1000baseT/Half 1000baseT/Full
            Supported pause frame use: Symmetric Receive-only
            Supports auto-negotiation: Yes
            Supported FEC modes: Not reported
            Advertised link modes:  1000baseT/Full
            Advertised pause frame use: No
            Advertised auto-negotiation: Yes
            Advertised FEC modes: Not reported
            Speed: 10Mb/s
            Duplex: Half
            Port: MII
            PHYAD: 0
            Transceiver: external
            Auto-negotiation: on
    Cannot get wake-on-lan settings: Operation not permitted
            Current message level: 0x00000000 (0)
            Link detected: no

    We will also be testing if we are getting auto-negotiation pulses tomorrow as per the troubleshooting guide (https://www.ti.com/lit/an/snla246c/snla246c.pdf?ts=1770688800414&ref_url=https%253A%252F%252Fe2e.ti.com%252F).

    Thank you for your help.

  • Hi Alexander,

    Thanks for sharing. The format of this ethtool dump doesn't seem to correspond to 16bit readouts of each reg - can't confirm default constant PHYID values in 0x2/0x3. Please try phytool to read individual registers 0x0 - 0x1F:

    https://github.com/wkz/phytool

    [FAQ] How to read and write Ethernet PHY registers using a Linux terminal?

    After validating register access, I recommend these checks:

    • 0x1[2] to check link status
    • 0x5 & 0x6 to verify if advertisements were received by link partner
      • Write 0x0[9] = '1' to restart auto-neg and check link status / advertisements received again
    • If registers do not expect to intended configuration set by straps, read out registers 0x6E and 0x6F to confirm. May require extended method:

    Thank you,
    Evan

  • Hi Evan,

    This ended up being a problem with the hardware which we have now resolved. Thank you for your help regardless!