• Timur Tabi's avatar
    net: qcom/emac: do not use hardware mdio automatic polling · 3e857aaa
    Timur Tabi authored
    commit 24609669 upstream.
    
    Use software polling (PHY_POLL) to check for link state changes instead
    of relying on the EMAC's hardware polling feature.  Some PHY drivers
    are unable to get a functioning link because the HW polling is not
    robust enough.
    
    The EMAC is able to poll the PHY on the MDIO bus looking for link state
    changes (via the Link Status bit in the Status Register at address 0x1).
    When the link state changes, the EMAC triggers an interrupt and tells the
    driver what the new state is.  The feature eliminates the need for
    software to poll the MDIO bus.
    
    Unfortunately, this feature is incompatible with phylib, because it
    ignores everything that the PHY core and PHY drivers are trying to do.
    In particular:
    
    1. It assumes a compatible register set, so PHYs with different registers
       may not work.
    
    2. It doesn't allow for hardware errata that have work-arounds implemented
       in the PHY driver.
    
    3. It doesn't support multiple register pages. If the PHY core switches
       the register set to another page, the EMAC won't know the page has
       changed and will still attempt to read the same PHY register.
    
    4. It only checks the copper side of the link, not the SGMII side.  Some
       PHY drivers (e.g. at803x) may also check the SGMII side, and
       report the link as not ready during autonegotiation if the SGMII link
       is still down.  Phylib then waits for another interrupt to query
       the PHY again, but the EMAC won't send another interrupt because it
       thinks the link is up.
    Tested-by: default avatarManoj Iyer <manoj.iyer@canonical.com>
    Signed-off-by: default avatarTimur Tabi <timur@codeaurora.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    3e857aaa
emac-mac.c 43.1 KB