Re: [PATCH net-next 02/12] net: pcs: pcs-xpcs: select operating mode for 10G-baseR capable PCS
From: Daniel Thompson <hidden>
Date: 2026-05-05 15:58:51
Also in:
bpf, linux-arm-msm, linux-gpio, lkml, netdev
On Fri, May 01, 2026 at 06:50:45PM +0200, Andrew Lunn wrote:
quoted
+static int xpcs_config_operating_mode(struct dw_xpcs *xpcs, int an_mode) +{ + int mdio_stat2, ret; + + switch (an_mode) { + case DW_AN_C37_SGMII: + case DW_AN_C37_1000BASEX: + case DW_2500BASEX: + mdio_stat2 = xpcs_read(xpcs, MDIO_MMD_PCS, MDIO_STAT2); + if (mdio_stat2 < 0) + return mdio_stat2; + + /* + * If this XPCS supports 10Gbase-R then it will be the default + * which prevents 1000base-X and slower from working correctly.It would be interesting to know if Toshiba messed up the integration of the PCS, or there is an errata for the licensed IP.
I'm afraid I don't know, but it looks like the issue is not unique to Toshiba! This is a discovery which, rather to my chagrin, I only made after we posted the patches (thanks to a hint from Sashiko): there is similar code in txgbe_xpcs_switch_mode(). I cleary overlooked that when I originally reviewed the existing XPCS code. I suspect I stopped scanning that code path due to the PMA related conditional branch... Regardless of how I missed it, txgbe_xpcs_switch_mode() implements similar logic to this patch. I think it is using MDIO_PCS_CTRL2_10GBX as the Reserved value but otherwise looks similar. There are comments that imply 10Gbase-X isn't implemented by their XPCS which would make MDIO_PCS_CTRL2_10GBX reserved (but are too vague to be 100% sure). Right now it looks like xpcs_switch_interface_mode() and my xpcs_config_operating_mode() are more closely related than I realized so I plan to move my code into xpcs_switch_interface_mode(). I don't think I can unify the Wangxun and Toshiba code (the waits and resets in the Wangxun code make that too high risk) but I'm not yet ready to give up and just make the Toshiba changes into another vendor quirk! Daniel.