kernel: backport phylink changes from mainline Linux
[openwrt/openwrt.git] / target / linux / generic / backport-6.1 / 715-28-v6.4-net-pcs-xpcs-use-Autoneg-bit-rather-than-an_enabled.patch
diff --git a/target/linux/generic/backport-6.1/715-28-v6.4-net-pcs-xpcs-use-Autoneg-bit-rather-than-an_enabled.patch b/target/linux/generic/backport-6.1/715-28-v6.4-net-pcs-xpcs-use-Autoneg-bit-rather-than-an_enabled.patch
new file mode 100644 (file)
index 0000000..3dd22d2
--- /dev/null
@@ -0,0 +1,55 @@
+From 459fd2f11204c962e3153020f4f56748e0e10afb Mon Sep 17 00:00:00 2001
+From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
+Date: Tue, 21 Mar 2023 15:58:49 +0000
+Subject: [PATCH] net: pcs: xpcs: use Autoneg bit rather than an_enabled
+
+The Autoneg bit in the advertising bitmap and state->an_enabled are
+always identical. Thus, we will be removing state->an_enabled.
+
+Use the Autoneg bit in the advertising bitmap to indicate whether
+autonegotiation should be used, rather than using the an_enabled
+member which will be going away.
+
+Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
+Reviewed-by: Simon Horman <simon.horman@corigine.com>
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+---
+ drivers/net/pcs/pcs-xpcs.c | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/pcs/pcs-xpcs.c
++++ b/drivers/net/pcs/pcs-xpcs.c
+@@ -931,6 +931,7 @@ static int xpcs_get_state_c73(struct dw_
+                             struct phylink_link_state *state,
+                             const struct xpcs_compat *compat)
+ {
++      bool an_enabled;
+       int ret;
+       /* Link needs to be read first ... */
+@@ -948,11 +949,13 @@ static int xpcs_get_state_c73(struct dw_
+               return xpcs_do_config(xpcs, state->interface, MLO_AN_INBAND, NULL);
+       }
+-      if (state->an_enabled && xpcs_aneg_done_c73(xpcs, state, compat)) {
++      an_enabled = linkmode_test_bit(ETHTOOL_LINK_MODE_Autoneg_BIT,
++                                     state->advertising);
++      if (an_enabled && xpcs_aneg_done_c73(xpcs, state, compat)) {
+               state->an_complete = true;
+               xpcs_read_lpa_c73(xpcs, state);
+               xpcs_resolve_lpa_c73(xpcs, state);
+-      } else if (state->an_enabled) {
++      } else if (an_enabled) {
+               state->link = 0;
+       } else if (state->link) {
+               xpcs_resolve_pma(xpcs, state);
+@@ -1007,7 +1010,8 @@ static int xpcs_get_state_c37_1000basex(
+ {
+       int lpa, bmsr;
+-      if (state->an_enabled) {
++      if (linkmode_test_bit(ETHTOOL_LINK_MODE_Autoneg_BIT,
++                            state->advertising)) {
+               /* Reset link state */
+               state->link = false;