From 5575e4a97f119f682223a090c4a78c0913f906f5 Mon Sep 17 00:00:00 2001 From: Aliaksandr Babrykovich Date: Fri, 5 Jun 2026 10:16:44 +0200 Subject: [PATCH] generic: mxl862xx: allow CPU/SerDes ports to probe on firmware < 1.0.84 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 [refreshed patches] Signed-off-by: Daniel Golle --- ...0-04-net-dsa-mxl862xx-add-support-for-SerDes-ports.patch | 6 ++---- ...-05-net-dsa-mxl862xx-add-SerDes-ethtool-statistics.patch | 2 +- ...-NOT-SUBMIT-net-dsa-mxl862xx-legacy-SFP-API-fallba.patch | 6 +++--- ...0-04-net-dsa-mxl862xx-add-support-for-SerDes-ports.patch | 6 ++---- ...-05-net-dsa-mxl862xx-add-SerDes-ethtool-statistics.patch | 2 +- ...-NOT-SUBMIT-net-dsa-mxl862xx-legacy-SFP-API-fallba.patch | 6 +++--- 6 files changed, 12 insertions(+), 16 deletions(-) diff --git a/target/linux/generic/pending-6.12/760-04-net-dsa-mxl862xx-add-support-for-SerDes-ports.patch b/target/linux/generic/pending-6.12/760-04-net-dsa-mxl862xx-add-support-for-SerDes-ports.patch index d2974b2d48c..06382955227 100644 --- a/target/linux/generic/pending-6.12/760-04-net-dsa-mxl862xx-add-support-for-SerDes-ports.patch +++ b/target/linux/generic/pending-6.12/760-04-net-dsa-mxl862xx-add-support-for-SerDes-ports.patch @@ -372,7 +372,7 @@ Signed-off-by: Daniel Golle #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 */ @@ -403,8 +403,6 @@ Signed-off-by: Daniel Golle + 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 } 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, diff --git a/target/linux/generic/pending-6.12/760-05-net-dsa-mxl862xx-add-SerDes-ethtool-statistics.patch b/target/linux/generic/pending-6.12/760-05-net-dsa-mxl862xx-add-SerDes-ethtool-statistics.patch index d420a5af92f..d83fa328db0 100644 --- a/target/linux/generic/pending-6.12/760-05-net-dsa-mxl862xx-add-SerDes-ethtool-statistics.patch +++ b/target/linux/generic/pending-6.12/760-05-net-dsa-mxl862xx-add-SerDes-ethtool-statistics.patch @@ -130,7 +130,7 @@ Signed-off-by: Daniel Golle --- 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, }; diff --git a/target/linux/generic/pending-6.12/760-18-DO-NOT-SUBMIT-net-dsa-mxl862xx-legacy-SFP-API-fallba.patch b/target/linux/generic/pending-6.12/760-18-DO-NOT-SUBMIT-net-dsa-mxl862xx-legacy-SFP-API-fallba.patch index 97be58fe731..dd01d35a022 100644 --- a/target/linux/generic/pending-6.12/760-18-DO-NOT-SUBMIT-net-dsa-mxl862xx-legacy-SFP-API-fallba.patch +++ b/target/linux/generic/pending-6.12/760-18-DO-NOT-SUBMIT-net-dsa-mxl862xx-legacy-SFP-API-fallba.patch @@ -301,7 +301,7 @@ Signed-off-by: Daniel Golle #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 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 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; diff --git a/target/linux/generic/pending-6.18/760-04-net-dsa-mxl862xx-add-support-for-SerDes-ports.patch b/target/linux/generic/pending-6.18/760-04-net-dsa-mxl862xx-add-support-for-SerDes-ports.patch index 6b7599c9257..28c8f646eeb 100644 --- a/target/linux/generic/pending-6.18/760-04-net-dsa-mxl862xx-add-support-for-SerDes-ports.patch +++ b/target/linux/generic/pending-6.18/760-04-net-dsa-mxl862xx-add-support-for-SerDes-ports.patch @@ -372,7 +372,7 @@ Signed-off-by: Daniel Golle #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 */ @@ -403,8 +403,6 @@ Signed-off-by: Daniel Golle + 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 } 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, diff --git a/target/linux/generic/pending-6.18/760-05-net-dsa-mxl862xx-add-SerDes-ethtool-statistics.patch b/target/linux/generic/pending-6.18/760-05-net-dsa-mxl862xx-add-SerDes-ethtool-statistics.patch index c96032be48e..084f74cb386 100644 --- a/target/linux/generic/pending-6.18/760-05-net-dsa-mxl862xx-add-SerDes-ethtool-statistics.patch +++ b/target/linux/generic/pending-6.18/760-05-net-dsa-mxl862xx-add-SerDes-ethtool-statistics.patch @@ -130,7 +130,7 @@ Signed-off-by: Daniel Golle --- 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, }; diff --git a/target/linux/generic/pending-6.18/760-18-DO-NOT-SUBMIT-net-dsa-mxl862xx-legacy-SFP-API-fallba.patch b/target/linux/generic/pending-6.18/760-18-DO-NOT-SUBMIT-net-dsa-mxl862xx-legacy-SFP-API-fallba.patch index 10d920e79d6..81a6a16b837 100644 --- a/target/linux/generic/pending-6.18/760-18-DO-NOT-SUBMIT-net-dsa-mxl862xx-legacy-SFP-API-fallba.patch +++ b/target/linux/generic/pending-6.18/760-18-DO-NOT-SUBMIT-net-dsa-mxl862xx-legacy-SFP-API-fallba.patch @@ -301,7 +301,7 @@ Signed-off-by: Daniel Golle #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 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 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; -- 2.47.3