• Alexandru Ardelean's avatar
    net: phy: adin: disable diag clock & disable standby mode in config_aneg · 85ba75bb
    Alexandru Ardelean authored
    When the PHY powers up, the diagnostics clock isn't enabled (bit 2 in
    register PHY_CTRL_1 (0x0012)).
    Also, the PHY is not in standby mode, so bit 13 in PHY_CTRL_3 (0x0017) is
    always set at power up.
    
    The standby mode and the diagnostics clock are both meant to be for the
    cable diagnostics feature of the PHY (in phylib this would be equivalent to
    the cable-test support), and for the frame-generator feature of the PHY.
    
    In standby mode, the PHY doesn't negotiate links or manage links.
    
    To use the cable diagnostics/test (or frame-generator), the PHY must be
    first set in standby mode, so that the link operation doesn't interfere.
    Then, the diagnostics clock must be enabled.
    
    For the cable-test feature, when the operation finishes, the PHY goes into
    PHY_UP state, and the config_aneg hook is called.
    
    For the ADIN PHY, we need to make sure that during autonegotiation
    configuration/setup the PHY is removed from standby mode and the
    diagnostics clock is disabled, so that normal operation is resumed.
    
    This change does that by moving the set of the ADIN1300_LINKING_EN bit (2)
    in the config_aneg (to disable standby mode).
    Previously, this was set in the downshift setup, because the downshift
    retry value and the ADIN1300_LINKING_EN are in the same register.
    
    And the ADIN1300_DIAG_CLK_EN bit (13) is cleared, to disable the
    diagnostics clock.
    Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
    Signed-off-by: default avatarAlexandru Ardelean <alexandru.ardelean@analog.com>
    Link: https://lore.kernel.org/r/20201103074436.93790-1-alexandru.ardelean@analog.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    85ba75bb
adin.c 18.7 KB