[PATCH RFC net-next 0/9] net: introduce Qualcomm XPCS support and add Nord Ethernet plumbing
From: Mohd Ayaan Anwar <mohd.anwar@oss.qualcomm.com>
Date: 2026-09-23 01:08:18
Also in:
linux-arm-msm, linux-devicetree, lkml, netdev
Hi, This is an early RFC which adds the XPCS and ETHQOS plumbing required to enable 10 Gigabit Ethernet on the Qualcomm Nord SoC. This is the first time USXGMII together with an external PCS is being supported by the dwmac-qcom-ethqos driver. This platform was somewhat tricky to work on, with several new pieces having to come together across the MAC, XPCS and SerDes layers. Any feedback would be appreciated, particularly around the XPCS modelling and the generic stmmac register-layout changes. The overall hardware path looks like this: +------------------+ +------------------+ +------------------+ +------------------+ | DW25GMAC | ---> | Synopsys XPCS | ---> | QCOM SGMII PHY | ===> | Ext PHY / Switch | | + QCOM ETHQOS | | + QCOM wrapper | | (SerDes) | | USX/10GBASE-R | +------------------+ +------------------+ +------------------+ +------------------+ The series can be broadly divided into two areas: 1. Qualcomm XPCS support Nord integrates a Synopsys DesignWare XPCS, but exposes the PCS, PMA/PMD and MII MMD register regions through separate direct-MMIO windows instead of the standard contiguous or indirect XPCS mappings. Patches 1 through 5 add the binding, generic platform register-access hooks, the Qualcomm MMD-to-MMIO translation, and the runtime-PM handling needed for the CSR clock. The XPCS also uses Clause 37 control and status for USXGMII, while the generic XPCS support currently handles USXGMII using Clause 73. Patch 2 adds the required Clause 37 USXGMII configuration and link-state path. Using a small Qualcomm-specific access layer around the existing XPCS core was the most straightforward way I could find to model this IP. The core already uses synthetic IDs for the NXP integrations and has vendor-specific hooks for other XPCS implementations, so this series follows a similar approach. I am very much open to suggestions if there is a cleaner way to represent the non-standard register mapping. 2. DW25GMAC and Qualcomm ETHQOS support Patches 6 through 9 add the Nord ETHQOS binding and driver support. The Nord integration has sparse, platform-specific MTL queue and DMA channel addresses, as well as a relocated timestamp register bank. The series therefore adds optional XGMAC register-layout data while preserving the standard layout for existing platforms. The ETHQOS driver then selects the XPCS provided through pcs-handle and adds the Nord wrapper programming required for USXGMII, including the EEE clock vote needed for PCS link-up and the platform-specific SerDes loopback control. This series has an obvious dependency on Jitendra Vegiraju's DW25GMAC work: https://lore.kernel.org/netdev/20260402213629.1996133-1-jitendra.vegiraju@broadcom.com/ (local) I understand that a v10 of that series is planned. While bringing up Nord, I also needed a few fixes on top of the DW25GMAC series. Those are not included here; I will share them separately with Jitendra in case they are useful for the next revision. Testing: Initial testing was done on the Nord Ride SX platform, where both Ethernet ports connect to the on-board MV-Q6223 switch using fixed-link USXGMII at 10 Gbps. The testing tree included the DW25GMAC dependency and the additional fixups mentioned above. Signed-off-by: Mohd Ayaan Anwar <mohd.anwar@oss.qualcomm.com> --- Mohd Ayaan Anwar (9): dt-bindings: net: pcs: add Qualcomm Nord XPCS net: pcs: xpcs: add USXGMII Clause 37 autoneg support net: pcs: xpcs: add custom platform register accessors net: pcs: xpcs: add Qualcomm Nord platform support net: pcs: xpcs: initialize runtime PM as suspended dt-bindings: net: qcom,ethqos: add Qualcomm Nord net: stmmac: support custom XGMAC register layouts net: stmmac: qcom-ethqos: support external PCS net: stmmac: qcom-ethqos: add Qualcomm Nord support .../devicetree/bindings/net/pcs/snps,dw-xpcs.yaml | 17 +++ .../devicetree/bindings/net/qcom,ethqos.yaml | 57 ++++++-- .../devicetree/bindings/net/snps,dwmac.yaml | 2 + drivers/net/ethernet/stmicro/stmmac/common.h | 1 + .../ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c | 162 ++++++++++++++++++++- .../net/ethernet/stmicro/stmmac/dwmac-socfpga.c | 2 +- drivers/net/ethernet/stmicro/stmmac/dwxgmac2.h | 94 ++++++++---- .../net/ethernet/stmicro/stmmac/dwxgmac2_core.c | 34 +++-- drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c | 128 +++++++++------- drivers/net/ethernet/stmicro/stmmac/hwif.c | 5 +- .../net/ethernet/stmicro/stmmac/stmmac_ethtool.c | 5 +- drivers/net/ethernet/stmicro/stmmac/stmmac_fpe.c | 15 +- drivers/net/pcs/Makefile | 3 +- drivers/net/pcs/pcs-xpcs-plat.c | 47 +++++- drivers/net/pcs/pcs-xpcs-qcom.c | 86 +++++++++++ drivers/net/pcs/pcs-xpcs-qcom.h | 16 ++ drivers/net/pcs/pcs-xpcs.c | 126 ++++++++++++++++ drivers/net/pcs/pcs-xpcs.h | 15 ++ include/linux/pcs/pcs-xpcs.h | 2 + include/linux/stmmac.h | 11 ++ 20 files changed, 707 insertions(+), 121 deletions(-) --- base-commit: 6598456d72e48d779445bfec8f72114747f8b8d7 change-id: 20260923-qcom_xpcs_nord_emac-bf296eb48e4b Best regards, -- Mohd Ayaan Anwar [off-list ref]