[PATCH RFC net-next 0/9] net: introduce Qualcomm XPCS support and add Nord Ethernet plumbing
Zhangfei Gao
zhangfei.gao at oss.qualcomm.com
Wed Sep 23 01:50:36 PDT 2026
On Wed, Sep 23, 2026 at 9:08 AM Mohd Ayaan Anwar
<mohd.anwar at oss.qualcomm.com> wrote:
>
> 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/
>
> 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 at 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 <mohd.anwar at oss.qualcomm.com>
>
Good Job, Mohd
Tested-by: Zhangfei Gao <zhangfei.gao at oss.qualcomm.com>
Tested on both IQ10 RRD and Ride
Full test patch is in the git
https://github.com/zhangfei-gao/kernel-topics/tree/next-9.23
More information about the linux-arm-kernel
mailing list