• Rajasingh Thavamani's avatar
    net: phy: Micrel KSZ8061: link failure after cable connect · 232ba3a5
    Rajasingh Thavamani authored
    With Micrel KSZ8061 PHY, the link may occasionally not come up after
    Ethernet cable connect. The vendor's (Microchip, former Micrel) errata
    sheet 80000688A.pdf descripes the problem and possible workarounds in
    detail, see below.
    The batch implements workaround 1, which permanently fixes the issue.
    
    DESCRIPTION
    Link-up may not occur properly when the Ethernet cable is initially
    connected. This issue occurs more commonly when the cable is connected
    slowly, but it may occur any time a cable is connected. This issue occurs
    in the auto-negotiation circuit, and will not occur if auto-negotiation
    is disabled (which requires that the two link partners be set to the
    same speed and duplex).
    
    END USER IMPLICATIONS
    When this issue occurs, link is not established. Subsequent cable
    plug/unplaug cycle will not correct the issue.
    
    WORk AROUND
    There are four approaches to work around this issue:
    1. This issue can be prevented by setting bit 15 in MMD device address 1,
       register 2, prior to connecting the cable or prior to setting the
       Restart Auto-negotiation bit in register 0h. The MMD registers are
       accessed via the indirect access registers Dh and Eh, or via the Micrel
       EthUtil utility as shown here:
       . if using the EthUtil utility (usually with a Micrel KSZ8061
         Evaluation Board), type the following commands:
         > address 1
         > mmd 1
         > iw 2 b61a
       . Alternatively, write the following registers to write to the
         indirect MMD register:
         Write register Dh, data 0001h
         Write register Eh, data 0002h
         Write register Dh, data 4001h
         Write register Eh, data B61Ah
    2. The issue can be avoided by disabling auto-negotiation in the KSZ8061,
       either by the strapping option, or by clearing bit 12 in register 0h.
       Care must be taken to ensure that the KSZ8061 and the link partner
       will link with the same speed and duplex. Note that the KSZ8061
       defaults to full-duplex when auto-negotiation is off, but other
       devices may default to half-duplex in the event of failed
       auto-negotiation.
    3. The issue can be avoided by connecting the cable prior to powering-up
       or resetting the KSZ8061, and leaving it plugged in thereafter.
    4. If the above measures are not taken and the problem occurs, link can
       be recovered by setting the Restart Auto-Negotiation bit in
       register 0h, or by resetting or power cycling the device. Reset may
       be either hardware reset or software reset (register 0h, bit 15).
    
    PLAN
    This errata will not be corrected in the future revision.
    
    Fixes: 7ab59dc1 ("drivers/net/phy/micrel_phy: Add support for new PHYs")
    Signed-off-by: default avatarAlexander Onnasch <alexander.onnasch@landisgyr.com>
    Signed-off-by: default avatarRajasingh Thavamani <T.Rajasingh@landisgyr.com>
    Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    232ba3a5
micrel.c 29.9 KB