]> git.ipfire.org Git - thirdparty/openwrt.git/commitdiff
generic: mxl862xx: allow CPU/SerDes ports to probe on firmware < 1.0.84 23664/head
authorAliaksandr Babrykovich <abobrikovich@gmail.com>
Fri, 5 Jun 2026 08:16:44 +0000 (10:16 +0200)
committerDaniel Golle <daniel@makrotopia.org>
Fri, 12 Jun 2026 13:06:04 +0000 (14:06 +0100)
The firmware-version gate in mxl862xx_phylink_get_caps() leaves
config->supported_interfaces empty for the CPU/SerDes ports (9, 13) when
the switch runs firmware older than 1.0.84. phylink rejects an empty
supported_interfaces bitmap, so the switch fails to probe at all:

  mxl862xx mdio-bus:10: switch ready after 2480ms, firmware 1.0.70 (build 70)
  mxl862xx mdio-bus:10: phylink: error: empty supported_interfaces
  error creating PHYLINK: -22
  mxl862xx mdio-bus:10: probe with driver mxl862xx failed with error -22

This regresses boards still shipping the older vendor firmware (e.g. the
BananaPi BPi-R4 Pro 8X, which ships 1.0.70) where all LAN ports disappear.

Ungate only the CPU/SerDes ports (9, 13) so the switch probes and the user
can update the firmware; ports 10..12 and 14..16 stay gated as they are
genuinely unsupported by the old firmware.

Tested on a BPi-R4 Pro 8X with switch firmware 1.0.70 (kernel 6.18); the
6.12 patch receives the identical change for parity.

Fixes: 028dc3f57a6f ("generic: 6.18: update MxL862xx DSA switch driver")
Fixes: 5b69e6a4a658 ("generic: 6.12: update MxL862xx DSA switch driver")
Signed-off-by: Aliaksandr Babrykovich <abobrikovich@gmail.com>
[refreshed patches]
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
target/linux/generic/pending-6.12/760-04-net-dsa-mxl862xx-add-support-for-SerDes-ports.patch
target/linux/generic/pending-6.12/760-05-net-dsa-mxl862xx-add-SerDes-ethtool-statistics.patch
target/linux/generic/pending-6.12/760-18-DO-NOT-SUBMIT-net-dsa-mxl862xx-legacy-SFP-API-fallba.patch
target/linux/generic/pending-6.18/760-04-net-dsa-mxl862xx-add-support-for-SerDes-ports.patch
target/linux/generic/pending-6.18/760-05-net-dsa-mxl862xx-add-SerDes-ethtool-statistics.patch
target/linux/generic/pending-6.18/760-18-DO-NOT-SUBMIT-net-dsa-mxl862xx-legacy-SFP-API-fallba.patch

index d2974b2d48cad042d784ec0f35d7a30367c270eb..063829552277221a380290d285908d606c1a5778 100644 (file)
@@ -372,7 +372,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  #endif /* __MXL862XX_CMD_H */
 --- a/drivers/net/dsa/mxl862xx/mxl862xx-phylink.c
 +++ b/drivers/net/dsa/mxl862xx/mxl862xx-phylink.c
-@@ -7,20 +7,371 @@
+@@ -7,20 +7,369 @@
   * Copyright (C) 2025 Daniel Golle <daniel@makrotopia.org>
   */
  
@@ -403,8 +403,6 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
 +              break;
 +      case 9:
 +      case 13:
-+              if (!MXL862XX_FW_VER_MIN(priv, 1, 0, 84))
-+                      break;
 +              __set_bit(PHY_INTERFACE_MODE_SGMII, config->supported_interfaces);
 +              __set_bit(PHY_INTERFACE_MODE_1000BASEX, config->supported_interfaces);
 +              __set_bit(PHY_INTERFACE_MODE_2500BASEX, config->supported_interfaces);
@@ -746,7 +744,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  }
  
  static void mxl862xx_phylink_mac_config(struct phylink_config *config,
-@@ -48,4 +399,5 @@ const struct phylink_mac_ops mxl862xx_ph
+@@ -48,4 +397,5 @@ const struct phylink_mac_ops mxl862xx_ph
        .mac_config = mxl862xx_phylink_mac_config,
        .mac_link_down = mxl862xx_phylink_mac_link_down,
        .mac_link_up = mxl862xx_phylink_mac_link_up,
index d420a5af92f6e8fc9039b9bd0791a5db00ed676e..d83fa328db03b592ab4c0e36c1139c11cb29be75 100644 (file)
@@ -130,7 +130,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  
 --- a/drivers/net/dsa/mxl862xx/mxl862xx-phylink.c
 +++ b/drivers/net/dsa/mxl862xx/mxl862xx-phylink.c
-@@ -401,3 +401,100 @@ const struct phylink_mac_ops mxl862xx_ph
+@@ -399,3 +399,100 @@ const struct phylink_mac_ops mxl862xx_ph
        .mac_link_up = mxl862xx_phylink_mac_link_up,
        .mac_select_pcs = mxl862xx_phylink_mac_select_pcs,
  };
index 97be58fe731017a11b4c1c955b0b79504e3406c5..dd01d35a022a3e891fa47da29df9ccad7fa322c7 100644 (file)
@@ -301,7 +301,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  #define MXL862XX_XPCS_PCS_GET_STATE   (MXL862XX_XPCS_MAGIC + 0x2)
 --- a/drivers/net/dsa/mxl862xx/mxl862xx-phylink.c
 +++ b/drivers/net/dsa/mxl862xx/mxl862xx-phylink.c
-@@ -62,6 +62,152 @@ static struct mxl862xx_pcs *pcs_to_mxl86
+@@ -60,6 +60,152 @@ static struct mxl862xx_pcs *pcs_to_mxl86
        return container_of(pcs, struct mxl862xx_pcs, pcs);
  }
  
@@ -454,7 +454,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  static int mxl862xx_xpcs_if_mode(phy_interface_t interface)
  {
        switch (interface) {
-@@ -351,7 +497,10 @@ void mxl862xx_setup_pcs(struct mxl862xx_
+@@ -349,7 +495,10 @@ void mxl862xx_setup_pcs(struct mxl862xx_
        pcs->slot = MXL862XX_SERDES_SLOT(port);
        pcs->interface = PHY_INTERFACE_MODE_NA;
  
@@ -466,7 +466,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
        pcs->pcs.poll = true;
  }
  
-@@ -363,9 +512,6 @@ mxl862xx_phylink_mac_select_pcs(struct p
+@@ -361,9 +510,6 @@ mxl862xx_phylink_mac_select_pcs(struct p
        struct mxl862xx_priv *priv = dp->ds->priv;
        int port = dp->index;
  
index 6b7599c9257745b07514ba327f2065a71b313927..28c8f646eebf571122ace76eeb01232cd3a8007b 100644 (file)
@@ -372,7 +372,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  #endif /* __MXL862XX_CMD_H */
 --- a/drivers/net/dsa/mxl862xx/mxl862xx-phylink.c
 +++ b/drivers/net/dsa/mxl862xx/mxl862xx-phylink.c
-@@ -7,20 +7,384 @@
+@@ -7,20 +7,382 @@
   * Copyright (C) 2025 Daniel Golle <daniel@makrotopia.org>
   */
  
@@ -403,8 +403,6 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
 +              break;
 +      case 9:
 +      case 13:
-+              if (!MXL862XX_FW_VER_MIN(priv, 1, 0, 84))
-+                      break;
 +              __set_bit(PHY_INTERFACE_MODE_SGMII, config->supported_interfaces);
 +              __set_bit(PHY_INTERFACE_MODE_1000BASEX, config->supported_interfaces);
 +              __set_bit(PHY_INTERFACE_MODE_2500BASEX, config->supported_interfaces);
@@ -759,7 +757,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  }
  
  static void mxl862xx_phylink_mac_config(struct phylink_config *config,
-@@ -48,4 +412,5 @@ const struct phylink_mac_ops mxl862xx_ph
+@@ -48,4 +410,5 @@ const struct phylink_mac_ops mxl862xx_ph
        .mac_config = mxl862xx_phylink_mac_config,
        .mac_link_down = mxl862xx_phylink_mac_link_down,
        .mac_link_up = mxl862xx_phylink_mac_link_up,
index c96032be48e16c6ac540c7480ed6e961847e35ef..084f74cb386eeb381aba6416310fdee31d6afe60 100644 (file)
@@ -130,7 +130,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  
 --- a/drivers/net/dsa/mxl862xx/mxl862xx-phylink.c
 +++ b/drivers/net/dsa/mxl862xx/mxl862xx-phylink.c
-@@ -414,3 +414,100 @@ const struct phylink_mac_ops mxl862xx_ph
+@@ -412,3 +412,100 @@ const struct phylink_mac_ops mxl862xx_ph
        .mac_link_up = mxl862xx_phylink_mac_link_up,
        .mac_select_pcs = mxl862xx_phylink_mac_select_pcs,
  };
index 10d920e79d69eecd04e867dcbeb405543ef0bdfc..81a6a16b83742e7ebd8f5cf948bbbf1ed6f069dd 100644 (file)
@@ -301,7 +301,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  #define MXL862XX_XPCS_PCS_GET_STATE   (MXL862XX_XPCS_MAGIC + 0x2)
 --- a/drivers/net/dsa/mxl862xx/mxl862xx-phylink.c
 +++ b/drivers/net/dsa/mxl862xx/mxl862xx-phylink.c
-@@ -62,6 +62,153 @@ static struct mxl862xx_pcs *pcs_to_mxl86
+@@ -60,6 +60,153 @@ static struct mxl862xx_pcs *pcs_to_mxl86
        return container_of(pcs, struct mxl862xx_pcs, pcs);
  }
  
@@ -455,7 +455,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
  static int mxl862xx_xpcs_if_mode(phy_interface_t interface)
  {
        switch (interface) {
-@@ -352,7 +499,10 @@ void mxl862xx_setup_pcs(struct mxl862xx_
+@@ -350,7 +497,10 @@ void mxl862xx_setup_pcs(struct mxl862xx_
        pcs->slot = MXL862XX_SERDES_SLOT(port);
        pcs->interface = PHY_INTERFACE_MODE_NA;
  
@@ -467,7 +467,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
        pcs->pcs.poll = true;
  
        __set_bit(PHY_INTERFACE_MODE_QSGMII, pcs->pcs.supported_interfaces);
-@@ -376,9 +526,6 @@ mxl862xx_phylink_mac_select_pcs(struct p
+@@ -374,9 +524,6 @@ mxl862xx_phylink_mac_select_pcs(struct p
        struct mxl862xx_priv *priv = dp->ds->priv;
        int port = dp->index;