• Doug Berger's avatar
    net: bcmgenet: keep MAC in reset until PHY is up · 88f6c8bf
    Doug Berger authored
    As noted in commit 28c2d1a7 ("net: bcmgenet: enable loopback
    during UniMAC sw_reset") the UniMAC must be clocked at least 5
    cycles while the sw_reset is asserted to ensure a clean reset.
    
    That commit enabled local loopback to provide an Rx clock from the
    GENET sourced Tx clk. However, when connected in MII mode the Tx
    clk is sourced by the PHY so if an EPHY is not supplying clocks
    (e.g. when the link is down) the UniMAC does not receive the
    necessary clocks.
    
    This commit extends the sw_reset window until the PHY reports that
    the link is up thereby ensuring that the clocks are being provided
    to the MAC to produce a clean reset.
    
    One consequence is that if the system attempts to enter a Wake on
    LAN suspend state when the PHY link has not been active the MAC
    may not have had a chance to initialize cleanly. In this case, we
    remove the sw_reset and enable the WoL reception path as normal
    with the hope that the PHY will provide the necessary clocks to
    drive the WoL blocks if the link becomes active after the system
    has entered suspend.
    
    Fixes: 1c1008c7 ("net: bcmgenet: add main driver file")
    Signed-off-by: default avatarDoug Berger <opendmb@gmail.com>
    Acked-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    88f6c8bf
bcmgenet.c 99.3 KB