summaryrefslogtreecommitdiff
path: root/include/linux/platform_data/serial-sccnxp.h
diff options
context:
space:
mode:
authorJakub Kicinski <kuba@kernel.org>2026-07-22 09:37:43 -0700
committerJakub Kicinski <kuba@kernel.org>2026-07-22 09:37:43 -0700
commitfcaf2221b9703af2f2285fad1a13a4171b8368dd (patch)
tree7f7b01f5361423df90a4d179b6ede12e70d93740 /include/linux/platform_data/serial-sccnxp.h
parentf5cfb576ce39ba5647024c6d6eeb5b7a822fab6e (diff)
parent987137345f3312fd68cc9c11bd46b754bfb0046f (diff)
downloadlinux-next-fcaf2221b9703af2f2285fad1a13a4171b8368dd.tar.gz
linux-next-fcaf2221b9703af2f2285fad1a13a4171b8368dd.zip
Merge branch 'net-dsa-realtek-rtl8365mb-add-sgmii-hsgmii-support-for-rtl8367s'
Johan Alvarado says: ==================== net: dsa: realtek: rtl8365mb: add SGMII/HSGMII support for RTL8367S The RTL8367S is a 5+2 port switch from the same family as the RTL8365MB-VC already supported by this driver. Its chip info table entry declares SGMII and HSGMII on external interface 1, but the driver so far only implements RGMII, leaving boards that wire the switch to the CPU over the SerDes without a working CPU port. This series implements both modes. The configuration sequence and the SerDes tuning parameters are derived from the GPL-licensed Realtek rtl8367c vendor driver, as distributed in the Mercusys MR80X GPL code drop, and cross-checked against the real register sequence captured at runtime by chainloading a custom U-Boot ahead of the stock firmware and logging the live SerDes accesses on hardware. The vendor driver brings up the SerDes by loading firmware into the switch's embedded DW8051 microcontroller. Analysis of that firmware (by Luiz Angelo Daros de Luca) showed it only performs a SerDes data-path reset right after the SerDes reset is deasserted, and then runs a link-polling loop that writes the external interface force registers -- duplicating, and racing with, the link management phylink already performs. This series therefore keeps the DW8051 disabled and performs the one necessary action (the data-path reset via the SerDes BMCR register) directly in the driver, avoiding both the race and a dependency on a redistributable firmware blob. The SerDes is modelled as a phylink PCS: mac_select_pcs() hands the SerDes interfaces to a phylink_pcs whose pcs_config()/pcs_link_up() ops own the SerDes register sequence, keeping it out of the MAC operations. In-band autonegotiation is not implemented; the link is forced (fixed-link or conventional PHY), as for RGMII, and the PCS reports this to phylink through pcs_inband_caps(). Patch 1 adds the SerDes indirect access helpers, the PCS and SGMII (1 Gbps) support. Patch 2 extends the PCS to HSGMII (2.5 Gbps), which phylink represents as 2500base-x. Tested on a Mercusys MR80X v2.20 (RTL8367S wired to the SoC over the SerDes), in both SGMII and HSGMII modes with a fixed-link device tree description: link bring-up verified across cold boots, warm reboots, module reloads and link down/up cycles, with sustained traffic and no CRC/symbol errors. The SerDes pause enables were verified by driving congestion toward a 100M user port and observing pause frame emission on the CPU port (dot3OutPauseFrames) toggle with the SDS_MISC TXFC/RXFC bits. The port 6 rate limiters were verified to be live by lowering them to 100 Mbps at runtime and observing iperf3 throughput across the CPU port clamp accordingly in each direction, recovering once the maximum was restored. The HSGMII link is confirmed running at 2.5G at the register level (SoC uniphy mode and gmac clocks); per-direction throughput could not be pushed past ~1 Gbps on this board because the SoC side is driven by the IPQ5018 SSDK and the user-facing PHY is 1G, so full 2.5G line-rate throughput remains unverified on my hardware. Independently, >1 Gbps aggregate HSGMII throughput (~2 Gbps with multiple clients) has been observed on an RTL8367S-based Mercusys MR85X running an OpenWrt backport of this series with the rate limiters raised (see patch 2). The RTL8367SB also declares SGMII and HSGMII in its chip info entry and therefore gains both modes as well. The vendor driver drives the two chips through the same code path, keyed only on the chip option register (both report chip id 0x6367), so this is expected to work there too, but I have no RTL8367SB hardware to confirm it. ==================== Link: https://patch.msgid.link/20260711-rtl8367s-sgmii-v6-0-88f7944ddca7@c127.dev Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'include/linux/platform_data/serial-sccnxp.h')
0 files changed, 0 insertions, 0 deletions