• Florian Fainelli's avatar
    net: mdio: mdio-bcm-unimac: Manage clock around I/O accesses · ee975351
    Florian Fainelli authored
    Up until now we have managed not to have the mdio-bcm-unimac manage its
    clock except during probe and suspend/resume. This works most of the
    time, except where it does not.
    
    With a fully modular build, we can get into a situation whereby the
    GENET driver is fully registered, and so is the mdio-bcm-unimac driver,
    however the Ethernet PHY driver is not yet, because it depends on a
    resource that is not yet available (e.g.: GPIO provider). In that state,
    the network device is not usable yet, and so to conserve power, the
    GENET driver will have turned off its "main" clock which feeds its MDIO
    controller.
    
    When the PHY driver finally probes however, we make an access to the PHY
    registers to e.g.: disable interrupts, and this causes a bus error
    within the MDIO controller space because the MDIO controller clock(s)
    are turned off.
    
    To remedy that, we manage the clock around all of the I/O accesses to
    the hardware which are done exclusively during read, write and clock
    divider configuration.
    
    This ensures that the register space is accessible, and this also
    ensures that there are not unnecessarily elevated reference counts
    keeping the clocks active when the network device is administratively
    turned off. It would be the case with the previous way of managing the
    clock.
    Reviewed-by: default avatarJacob Keller <jacob.e.keller@intel.com>
    Signed-off-by: default avatarFlorian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    ee975351
mdio-bcm-unimac.c 8.93 KB