From: Jan Petrous via B4 Relay <devnull+jan.petrous.oss.nxp.com@kernel.org>
To: "Ciprian Marian Costea" <ciprianmarian.costea@oss.nxp.com>,
"NXP S32 Linux Team" <s32@nxp.com>,
"Vinod Koul" <vkoul@kernel.org>,
"Neil Armstrong" <neil.armstrong@linaro.org>,
"Manivannan Sadhasivam" <mani@kernel.org>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>,
"Ghennadi Procopciuc" <ghennadi.procopciuc@nxp.com>,
"Andrew Lunn" <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
"Eric Dumazet" <edumazet@google.com>,
"Jakub Kicinski" <kuba@kernel.org>,
"Paolo Abeni" <pabeni@redhat.com>,
"Geert Uytterhoeven" <geert+renesas@glider.be>,
"Magnus Damm" <magnus.damm@gmail.com>,
"Lorenzo Pieralisi" <lpieralisi@kernel.org>,
"Krzysztof Wilczyński" <kwilczynski@kernel.org>,
"Bjorn Helgaas" <bhelgaas@google.com>,
"Bogdan Hamciuc" <bogdan.hamciuc@nxp.com>,
"Ionut Vicovan" <ionut.vicovan@nxp.com>,
"Andrew Lunn" <andrew@lunn.ch>,
"Heiner Kallweit" <hkallweit1@gmail.com>,
"Russell King" <linux@armlinux.org.uk>,
"Clark Wang" <xiaoning.wang@nxp.com>,
"Philipp Zabel" <p.zabel@pengutronix.de>,
"Maxime Chevallier" <maxime.chevallier@bootlin.com>,
"Maxime Coquelin" <mcoquelin.stm32@gmail.com>,
"Alexandre Torgue" <alexandre.torgue@foss.st.com>,
"Chester Lin" <chester62515@gmail.com>,
"Matthias Brugger" <mbrugger@suse.com>,
"Ghennadi Procopciuc" <ghennadi.procopciuc@oss.nxp.com>,
"Frank Li" <Frank.Li@nxp.com>,
"Sascha Hauer" <s.hauer@pengutronix.de>,
"Pengutronix Kernel Team" <kernel@pengutronix.de>,
"Fabio Estevam" <festevam@gmail.com>,
"Richard Cochran" <richardcochran@gmail.com>
Cc: linux-arm-kernel@lists.infradead.org,
linux-phy@lists.infradead.org, netdev@vger.kernel.org,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-renesas-soc@vger.kernel.org, imx@lists.linux.dev,
linux-pci@vger.kernel.org,
linux-stm32@st-md-mailman.stormreply.com,
Vincent Guittot <vincent.guittot@linaro.org>,
"Jan Petrous (OSS)" <jan.petrous@oss.nxp.com>,
Alexandru-Catalin Ionita <alexandru-catalin.ionita@nxp.com>,
Ionut Vicovan <Ionut.Vicovan@nxp.com>,
Bogdan Roman <bogdan-gabriel.roman@nxp.com>
Subject: [PATCH RFC v3 00/12] Add support for the NXP S32G SerDes subsystem
Date: Sat, 19 Sep 2026 08:54:28 +0200 [thread overview]
Message-ID: <20260919-s32g_serdes-v3-0-9d68868c1e89@oss.nxp.com> (raw)
This series continues the S32G SerDes/XPCS upstreaming started by Vincent
Guittot. The effort has moved in-house at NXP and I am carrying it
forward from his v2 [v2] below, rather than restarting from scratch.
Authorship of the patches originating from his series is preserved
through Co-developed-by and his Signed-off-by; the rest builds on top.
Thanks to Vincent for the v1 -> v2 groundwork.
The S32G SoC family integrates two SerDes subsystems. Each one is built
from a DesignWare PCIe controller, two DesignWare Ethernet XPCS
instances and a shared two-lane combo PHY (PMA). The two lanes are
multiplexed between the PCIe controller and the XPCS instances, so a
given SerDes instance can run PCIe only, SGMII only, or a combination of
both, depending on the selected subsystem working mode.
This series adds the device tree bindings, the SerDes subsystem PHY
driver that owns the shared PMA and sequences the bring-up, a
transport-agnostic XPCS PCS core shared with i.MX, the S32G XPCS glue,
the SGMII support in the dwmac-s32 MAC glue, and the device tree nodes
for S32G2 and S32G3 including two routing variants for the
S32G3-VNP-RDB3 board.
The lane multiplexing is the reason the XPCS is not a self-contained PCS
platform device: in the mixed PCIe+SGMII modes both XPCS instances share
the PMA with the PCIe lane, so the reset and bring-up ordering has to be
driven by the SerDes PHY driver, which owns the shared resources. The
MAC obtains its phylink PCS from the SerDes subsystem through the
standard pcs-handle property.
Only the 1.25 Gbit/s (1000BASE-X / SGMII) working modes are wired up
here. The 2500BASE-X register paths are present in the PCS but are not
enabled, as there is no in-tree consumer yet; they are added by a
follow-up series together with the per-lane capability the binding would
need to describe them.
Tested on an S32G3-VNP-RDB3 board, in SerDes mode 1 (SGMII alongside two
active PCIe root complexes) and in SerDes mode 3.
Compared to v2 this series is rebased onto current mainline master
(see base-commit at the end of this cover letter) instead of the tree
the previous revision was generated against.
Changes since v2:
- Restructured the series: the single "serdes subsystem" driver has been
split into the SerDes PHY driver (drivers/phy/freescale) and the PCS
side (drivers/net/pcs), and the PCS side is further split into a
transport-agnostic XPCS core shared with i.MX plus the S32G-specific
glue. The core operates on regmaps supplied by the platform glue, so
the S32G indirect memory-mapped transport and the i.MX Clause 45 MDIO
transport can share it.
- Binding: dropped the vendor nxp,sys-mode property. The
SS_RW_REG_0[SUBSYS_MODE] value is now derived from the lane child
nodes and the nxp,xpcs-instance routing, since each described working
mode has a unique lane mux. The reference-clock rate is validated
against the derived mode instead of selecting it.
- Binding: S32G2 and S32G3 now use distinct compatibles without
fallback, because the reference-manual mode tables differ per SoC and
per SerDes instance.
- Binding: only the PCIe lane child carries '#phy-cells'; an XPCS lane
is referenced by the MAC through pcs-handle rather than as a generic
PHY provider.
- Documented pcs-handle for nxp,s32-dwmac and fixed the SerDes PHY
phandle in the nxp,s32g-pcie example.
- Added SGMII support to the dwmac-s32 glue (pcs_init / select_pcs) and
fixed the PHY interface selector to handle SGMII, RGMII, RMII and MII.
- Converted the vendor driver busy-waits to read_poll_timeout().
- Added the S32G2/S32G3 SerDes, PCIe and SCMI reset controller DT nodes
and the S32G3-RDB3 SerDes routing overlays.
Link: https://lore.kernel.org/all/20260203161917.1666696-1-vincent.guittot@linaro.org/ [v2]
Signed-off-by: Jan Petrous (OSS) <jan.petrous@oss.nxp.com>
---
Clark Wang (1):
net: pcs: add NXP SerDes XPCS shared core
Jan Petrous (OSS) (8):
dt-bindings: phy: Add NXP S32G SerDes subsystem
dt-bindings: net: nxp,s32-dwmac: Document pcs-handle
dt-bindings: PCI: nxp,s32g-pcie: Fix SerDes PHY phandle in example
net: stmmac: dwmac-s32: Add SGMII support
arm64: dts: s32g: Add SCMI reset controller
arm64: dts: s32g: Add SerDes controller nodes
arm64: dts: s32g: Add PCIe controller nodes
arm64: dts: s32g: Add S32G3-RDB3 SerDes routing variants
Vincent Guittot (3):
net: pcs: Add NXP S32G XPCS driver
phy: freescale: s32g: Add SerDes subsystem PHY
MAINTAINERS: Add NXP S32G SerDes and SerDes xPCS core entries
.../devicetree/bindings/net/nxp,s32-dwmac.yaml | 11 +-
.../devicetree/bindings/pci/nxp,s32g-pcie.yaml | 3 +-
.../devicetree/bindings/phy/nxp,s32g-serdes.yaml | 258 +++++
MAINTAINERS | 23 +
arch/arm64/boot/dts/freescale/Makefile | 6 +
arch/arm64/boot/dts/freescale/s32g2.dtsi | 118 +++
arch/arm64/boot/dts/freescale/s32g3.dtsi | 118 +++
.../dts/freescale/s32g399a-rdb3-serdes-mode1.dtso | 111 ++
.../dts/freescale/s32g399a-rdb3-serdes-mode3.dtso | 60 ++
drivers/net/ethernet/stmicro/stmmac/Kconfig | 6 +
drivers/net/ethernet/stmicro/stmmac/dwmac-s32.c | 74 +-
drivers/net/pcs/Kconfig | 25 +
drivers/net/pcs/Makefile | 2 +
drivers/net/pcs/pcs-nxp-s32g-xpcs.c | 947 ++++++++++++++++++
drivers/net/pcs/pcs-nxp-serdes-xpcs.c | 853 ++++++++++++++++
drivers/phy/freescale/Kconfig | 9 +
drivers/phy/freescale/Makefile | 1 +
drivers/phy/freescale/phy-nxp-s32g-serdes.c | 1057 ++++++++++++++++++++
include/linux/pcs/pcs-nxp-s32g-xpcs.h | 48 +
include/linux/pcs/pcs-nxp-serdes-xpcs.h | 100 ++
include/linux/phy/nxp-s32g-serdes.h | 25 +
21 files changed, 3850 insertions(+), 5 deletions(-)
---
base-commit: 5dd1818b15d98d4a20806cd00b1b40320b06004f
change-id: 20260918-s32g_serdes-7807070de807
Best regards,
--
Jan Petrous (OSS) <jan.petrous@oss.nxp.com>
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
next reply other threads:[~2026-09-19 6:54 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-19 6:54 Jan Petrous via B4 Relay [this message]
2026-09-19 6:54 ` [PATCH RFC v3 01/12] dt-bindings: phy: Add NXP S32G SerDes subsystem Jan Petrous via B4 Relay
2026-09-20 6:54 ` sashiko-bot
2026-09-19 6:54 ` [PATCH RFC v3 02/12] dt-bindings: net: nxp,s32-dwmac: Document pcs-handle Jan Petrous via B4 Relay
2026-09-20 6:54 ` sashiko-bot
2026-09-19 6:54 ` [PATCH RFC v3 03/12] dt-bindings: PCI: nxp,s32g-pcie: Fix SerDes PHY phandle in example Jan Petrous via B4 Relay
2026-09-20 6:54 ` sashiko-bot
2026-09-19 6:54 ` [PATCH RFC v3 04/12] net: pcs: add NXP SerDes XPCS shared core Jan Petrous via B4 Relay
2026-09-19 15:31 ` Maxime Chevallier
2026-09-19 16:31 ` Coia Prant
2026-09-20 6:54 ` sashiko-bot
2026-09-20 18:39 ` Andrew Lunn
2026-09-19 6:54 ` [PATCH RFC v3 05/12] net: pcs: Add NXP S32G XPCS driver Jan Petrous via B4 Relay
2026-09-20 6:54 ` sashiko-bot
2026-09-20 17:07 ` Andrew Lunn
2026-09-19 6:54 ` [PATCH RFC v3 06/12] phy: freescale: s32g: Add SerDes subsystem PHY Jan Petrous via B4 Relay
2026-09-20 6:54 ` sashiko-bot
2026-09-19 6:54 ` [PATCH RFC v3 07/12] net: stmmac: dwmac-s32: Add SGMII support Jan Petrous via B4 Relay
2026-09-19 12:04 ` Maxime Chevallier
2026-09-20 6:54 ` sashiko-bot
2026-09-19 6:54 ` [PATCH RFC v3 08/12] MAINTAINERS: Add NXP S32G SerDes and SerDes xPCS core entries Jan Petrous via B4 Relay
2026-09-19 6:54 ` [PATCH RFC v3 09/12] arm64: dts: s32g: Add SCMI reset controller Jan Petrous via B4 Relay
2026-09-20 6:54 ` sashiko-bot
2026-09-19 6:54 ` [PATCH RFC v3 10/12] arm64: dts: s32g: Add SerDes controller nodes Jan Petrous via B4 Relay
2026-09-20 6:55 ` sashiko-bot
2026-09-19 6:54 ` [PATCH RFC v3 11/12] arm64: dts: s32g: Add PCIe " Jan Petrous via B4 Relay
2026-09-20 6:55 ` sashiko-bot
2026-09-19 6:54 ` [PATCH RFC v3 12/12] arm64: dts: s32g: Add S32G3-RDB3 SerDes routing variants Jan Petrous via B4 Relay
2026-09-20 6:55 ` sashiko-bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260919-s32g_serdes-v3-0-9d68868c1e89@oss.nxp.com \
--to=devnull+jan.petrous.oss.nxp.com@kernel.org \
--cc=Frank.Li@nxp.com \
--cc=alexandre.torgue@foss.st.com \
--cc=alexandru-catalin.ionita@nxp.com \
--cc=andrew+netdev@lunn.ch \
--cc=andrew@lunn.ch \
--cc=bhelgaas@google.com \
--cc=bogdan-gabriel.roman@nxp.com \
--cc=bogdan.hamciuc@nxp.com \
--cc=chester62515@gmail.com \
--cc=ciprianmarian.costea@oss.nxp.com \
--cc=conor+dt@kernel.org \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=edumazet@google.com \
--cc=festevam@gmail.com \
--cc=geert+renesas@glider.be \
--cc=ghennadi.procopciuc@nxp.com \
--cc=ghennadi.procopciuc@oss.nxp.com \
--cc=hkallweit1@gmail.com \
--cc=imx@lists.linux.dev \
--cc=ionut.vicovan@nxp.com \
--cc=jan.petrous@oss.nxp.com \
--cc=kernel@pengutronix.de \
--cc=krzk+dt@kernel.org \
--cc=kuba@kernel.org \
--cc=kwilczynski@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-phy@lists.infradead.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=linux-stm32@st-md-mailman.stormreply.com \
--cc=linux@armlinux.org.uk \
--cc=lpieralisi@kernel.org \
--cc=magnus.damm@gmail.com \
--cc=mani@kernel.org \
--cc=maxime.chevallier@bootlin.com \
--cc=mbrugger@suse.com \
--cc=mcoquelin.stm32@gmail.com \
--cc=neil.armstrong@linaro.org \
--cc=netdev@vger.kernel.org \
--cc=p.zabel@pengutronix.de \
--cc=pabeni@redhat.com \
--cc=richardcochran@gmail.com \
--cc=robh@kernel.org \
--cc=s.hauer@pengutronix.de \
--cc=s32@nxp.com \
--cc=vincent.guittot@linaro.org \
--cc=vkoul@kernel.org \
--cc=xiaoning.wang@nxp.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox