net: mvneta: program 1ms autonegotiation clock divisor
authorRussell King <rmk+kernel@armlinux.org.uk>
Tue, 30 Nov 2021 14:54:05 +0000 (14:54 +0000)
committerJakub Kicinski <kuba@kernel.org>
Thu, 2 Dec 2021 03:01:36 +0000 (19:01 -0800)
Program the 1ms autonegotiation clock divisor according to the clocking
rate of neta - without this, the 1ms clock ticks at about 660us on
Armada 38x configured for 250MHz. Bring this into correct specification.

Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
Reviewed-by: Marek BehĂșn <kabel@kernel.org>
Link: https://lore.kernel.org/r/E1ms4WD-00EKLK-Ld@rmk-PC.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/marvell/mvneta.c

index 2368ae3..ce810fc 100644 (file)
@@ -3948,7 +3948,7 @@ static void mvneta_mac_config(struct phylink_config *config, unsigned int mode,
        } else if (state->interface == PHY_INTERFACE_MODE_SGMII) {
                /* SGMII mode receives the state from the PHY */
                new_ctrl2 |= MVNETA_GMAC2_INBAND_AN_ENABLE;
-               new_clk |= MVNETA_GMAC_1MS_CLOCK_ENABLE;
+               new_clk = MVNETA_GMAC_1MS_CLOCK_ENABLE;
                new_an = (new_an & ~(MVNETA_GMAC_FORCE_LINK_DOWN |
                                     MVNETA_GMAC_FORCE_LINK_PASS |
                                     MVNETA_GMAC_CONFIG_MII_SPEED |
@@ -3960,7 +3960,7 @@ static void mvneta_mac_config(struct phylink_config *config, unsigned int mode,
        } else {
                /* 802.3z negotiation - only 1000base-X */
                new_ctrl0 |= MVNETA_GMAC0_PORT_1000BASE_X;
-               new_clk |= MVNETA_GMAC_1MS_CLOCK_ENABLE;
+               new_clk = MVNETA_GMAC_1MS_CLOCK_ENABLE;
                new_an = (new_an & ~(MVNETA_GMAC_FORCE_LINK_DOWN |
                                     MVNETA_GMAC_FORCE_LINK_PASS |
                                     MVNETA_GMAC_CONFIG_MII_SPEED)) |
@@ -3973,6 +3973,10 @@ static void mvneta_mac_config(struct phylink_config *config, unsigned int mode,
                        new_an |= MVNETA_GMAC_AN_FLOW_CTRL_EN;
        }
 
+       /* Set the 1ms clock divisor */
+       if (new_clk == MVNETA_GMAC_1MS_CLOCK_ENABLE)
+               new_clk |= clk_get_rate(pp->clk) / 1000;
+
        /* Armada 370 documentation says we can only change the port mode
         * and in-band enable when the link is down, so force it down
         * while making these changes. We also do this for GMAC_CTRL2