• Vladimir Oltean's avatar
    net: dsa: sja1105: always keep RGMII ports in the MAC role · f41fad3c
    Vladimir Oltean authored
    In SJA1105, the xMII Mode Parameters Table field called PHY_MAC denotes
    the 'role' of the port, be it a PHY or a MAC. This makes a difference in
    the MII and RMII protocols, but RGMII is symmetric, so either PHY or MAC
    settings result in the same hardware behavior.
    
    The SJA1110 is different, and the RGMII ports only work when configured
    in MAC mode, so keep the port roles in MAC mode unconditionally.
    
    Why we had an RGMII port in the PHY role in the first place was because
    we wanted to have a way in the driver to denote whether RGMII delays
    should be applied based on the phy-mode property or not. This is already
    done in sja1105_parse_rgmii_delays() based on an intermediary
    struct sja1105_dt_port (which contains the port role). So it is a
    logical fallacy to use the hardware configuration as a scratchpad for
    driver data, it isn't necessary.
    
    We can also remove the gating condition for applying RGMII delays only
    for ports in the PHY role. The .setup_rgmii_delay() method looks at
    the priv->rgmii_rx_delay[port] and priv->rgmii_tx_delay[port] properties
    which are already populated properly (in the case of a port in the MAC
    role they are false). Removing this condition generates a few more SPI
    writes for these ports (clearing the RGMII delays) which are perhaps
    useless for SJA1105P/Q/R/S, where we know that the delays are disabled
    by default. But for SJA1110, the firmware on the embedded microcontroller
    might have done something funny, so it's always a good idea to clear the
    RGMII delays if that's what Linux expects.
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    f41fad3c
sja1105_clocking.c 21.5 KB