net: pcs: xpcs: remove double-read of link state when using AN
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Wed, 15 Mar 2023 14:46:43 +0000 (14:46 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 17 Mar 2023 08:19:03 +0000 (08:19 +0000)
Phylink does not want the current state of the link when reading the
PCS link state - it wants the latched state. Don't double-read the
MII status register. Phylink will re-read as necessary to capture
transient link-down events as of dbae3388ea9c ("net: phylink: Force
retrigger in case of latched link-fail indicator").

The above referenced commit is a dependency for this change, and thus
this change should not be backported to any kernel that does not
contain the above referenced commit.

Fixes: fcb26bd2b6ca ("net: phy: Add Synopsys DesignWare XPCS MDIO module")
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/pcs/pcs-xpcs.c

index bc428a816719d69a7e4a102fca987f3d3ffec204..04a68535304189d93c107ded1e75925115f0e1f8 100644 (file)
@@ -321,7 +321,7 @@ static int xpcs_read_fault_c73(struct dw_xpcs *xpcs,
        return 0;
 }
 
-static int xpcs_read_link_c73(struct dw_xpcs *xpcs, bool an)
+static int xpcs_read_link_c73(struct dw_xpcs *xpcs)
 {
        bool link = true;
        int ret;
@@ -333,15 +333,6 @@ static int xpcs_read_link_c73(struct dw_xpcs *xpcs, bool an)
        if (!(ret & MDIO_STAT1_LSTATUS))
                link = false;
 
-       if (an) {
-               ret = xpcs_read(xpcs, MDIO_MMD_AN, MDIO_STAT1);
-               if (ret < 0)
-                       return ret;
-
-               if (!(ret & MDIO_STAT1_LSTATUS))
-                       link = false;
-       }
-
        return link;
 }
 
@@ -935,7 +926,7 @@ static int xpcs_get_state_c73(struct dw_xpcs *xpcs,
        int ret;
 
        /* Link needs to be read first ... */
-       state->link = xpcs_read_link_c73(xpcs, state->an_enabled) > 0 ? 1 : 0;
+       state->link = xpcs_read_link_c73(xpcs) > 0 ? 1 : 0;
 
        /* ... and then we check the faults. */
        ret = xpcs_read_fault_c73(xpcs, state);