[PATCH RFC 00/24] ARM: zte: Add support for Sanechips ZX279128S and ZTE ZXHN H3600

From: Navid Ghahremani

Date: Sat Oct 10 2026 - 09:00:42 EST


This series introduces mainline Linux support for the Sanechips (ZTE)
ZX279128S SoC and the ZTE ZXHN H3600 Wi-Fi 6 router.

The ZX279128S is a dual-core ARM Cortex-A9 network SoC with an ARM PL310 /
L2C-310 outer cache controller, dual PCIe interfaces, a 5-port Gigabit
Ethernet switch with hardware packet classification and flow offload,
SPI-NAND flash controller, and DWC3 USB 2.0 host.

This submission establishes Navid Ghahremani as the maintainer for
ARM/ZTE ZX279128S SOC SUPPORT in MAINTAINERS.

Series breakdown:
- Patches 01-03: Outer cache read serialization mechanism to prevent
bus deadlock between outstanding PCIe device reads and L2C-310 cache
sync operations.
- Patches 04-05: SoC platform integration, SMP CPU hotplug trampoline,
and MAINTAINERS entry.
- Patches 06-11: Core peripheral drivers: CRM clock/reset controller,
GPIO, pinctrl-single bindings, and syscon.
- Patches 12-13: DesignWare PCIe host controller driver for the dual
MT7915 Wi-Fi links with shared reset sequencing.
- Patches 14-18: Networking: MDIO bus controller, ZX5201 Gigabit PHY,
and Gigabit Ethernet switch driver with switchdev and hardware flow
offload integration.
- Patches 19-20: SPI flash controller driver using the Linux SPI-MEM
framework.
- Patches 21-22: Synopsys DWC3 USB platform glue binding and enablement.
- Patches 23-24: Device tree descriptions for the ZX279128S SoC and
ZTE ZXHN H3600 board.

Hardware testing:
- Validated on physical ZTE ZXHN H3600 hardware via U-Boot TFTP boot.
- Dual-core SMP, CPU hotplug, and thermal sensors operational.
- Dual-band MT7915 2.4/5 GHz Wi-Fi links initialized and stable.
- Gigabit Ethernet switch verified at line-rate 1 Gbps forwarding.
- SPI-NAND flash persistence and USB 2.0 host verified.

Independent prerequisites sent separately:
- MTD: heyangtek bad block marker reserve byte fix.
- NVMEM: fixed-layout mac-base consumer offset support.

Navid Ghahremani (24):
dt-bindings: cache: l2c2x0: Describe ZTE device-read serialization
ARM: l2c: Serialize device reads with cache maintenance when requested
wifi: mt76: Serialize MMIO reads with outer cache maintenance
dt-bindings: arm: Add ZTE ZX279128S platform descriptions
ARM: zte: Add ZX279128S platform and CPU hotplug support
dt-bindings: clock: Add ZTE ZX279128S CRM clocks and resets
clk: zte: Add ZX279128S CRM clock and reset driver
dt-bindings: gpio: Add ZTE ZX279128S GPIO controller
gpio: Add ZTE ZX279128S GPIO driver
dt-bindings: pinctrl: pinctrl-single: Add ZTE ZX279128S pin mux
dt-bindings: mfd: syscon: Add ZX279128S system controller
dt-bindings: PCI: Add ZTE ZX279128S host controller
PCI: dwc: Add ZTE ZX279128S host controller driver
dt-bindings: net: Add ZTE ZX279128S MDIO controller
net: mdio: Add ZTE ZX279128S MDIO controller
net: phy: Add Sanechips ZX5201 PHY support
dt-bindings: net: Add ZTE ZX279128S Ethernet switch
net: ethernet: zte: Add ZX279128S Ethernet switch driver
dt-bindings: spi: Add ZTE ZX279128S SPI flash controller
spi: Add ZTE ZX279128S SPI flash controller
dt-bindings: usb: Add ZTE ZX279128S DWC3 controller
usb: dwc3: generic-plat: Add ZTE ZX279128S
ARM: dts: zte: Add ZX279128S SoC description
ARM: dts: zte: Add ZTE ZXHN H3600 board

.../devicetree/bindings/arm/cpus.yaml | 1 +
.../devicetree/bindings/arm/zte.yaml | 8 +-
.../devicetree/bindings/cache/l2c2x0.yaml | 9 +
.../bindings/clock/zte,zx279128s-crm.yaml | 141 ++
.../bindings/gpio/zte,zx279128s-gpio.yaml | 53 +
.../devicetree/bindings/mfd/syscon.yaml | 1 +
.../bindings/net/zte,zx279128s-gmac.yaml | 108 ++
.../bindings/net/zte,zx279128s-mdio.yaml | 67 +
.../bindings/pci/zte,zx279128s-pcie.yaml | 97 ++
.../bindings/pinctrl/pinctrl-single.yaml | 1 +
.../bindings/spi/zte,zx279128s-spifc.yaml | 69 +
.../devicetree/bindings/sram/sram.yaml | 1 +
.../bindings/usb/zte,zx279128s-dwc3.yaml | 76 +
MAINTAINERS | 22 +
arch/arm/boot/dts/zte/Makefile | 2 +
.../boot/dts/zte/zx279128s-zte-zxhn-h3600.dts | 361 ++++
arch/arm/boot/dts/zte/zx279128s.dtsi | 397 +++++
arch/arm/include/asm/outercache.h | 22 +
arch/arm/mach-zte/Kconfig | 17 +
arch/arm/mach-zte/Makefile | 4 +
arch/arm/mach-zte/platsmp-zx279128s.c | 173 ++
arch/arm/mach-zte/zx279128s.c | 19 +
arch/arm/mm/Kconfig | 14 +
arch/arm/mm/cache-l2x0.c | 81 +
drivers/clk/Kconfig | 1 +
drivers/clk/Makefile | 1 +
drivers/clk/zte/Kconfig | 14 +
drivers/clk/zte/Makefile | 2 +
drivers/clk/zte/clk-zx279128s.c | 460 +++++
drivers/gpio/Kconfig | 12 +
drivers/gpio/Makefile | 1 +
drivers/gpio/gpio-zx279128s.c | 78 +
drivers/net/ethernet/zte/Kconfig | 13 +
drivers/net/ethernet/zte/Makefile | 3 +
drivers/net/ethernet/zte/zx279128s-eth.h | 385 +++++
drivers/net/ethernet/zte/zx279128s-main.c | 1485 +++++++++++++++++
drivers/net/ethernet/zte/zx279128s-ppe.c | 803 +++++++++
drivers/net/ethernet/zte/zx279128s-switch.c | 339 ++++
drivers/net/mdio/Kconfig | 11 +
drivers/net/mdio/Makefile | 1 +
drivers/net/mdio/mdio-zx279128s.c | 158 ++
drivers/net/phy/Kconfig | 8 +
drivers/net/phy/Makefile | 1 +
drivers/net/phy/sanechips.c | 153 ++
drivers/net/wireless/mediatek/mt76/dma.h | 2 +-
drivers/net/wireless/mediatek/mt76/mmio.c | 6 +-
drivers/net/wireless/mediatek/mt76/mt76.h | 23 +
.../net/wireless/mediatek/mt76/mt76x02_mmio.c | 2 +-
.../net/wireless/mediatek/mt76/mt7915/pci.c | 2 +-
drivers/pci/controller/dwc/Kconfig | 12 +
drivers/pci/controller/dwc/Makefile | 1 +
drivers/pci/controller/dwc/pcie-zx279128s.c | 322 ++++
drivers/spi/Kconfig | 13 +
drivers/spi/Makefile | 1 +
drivers/spi/spi-zx279128s-spifc.c | 353 ++++
drivers/usb/dwc3/Kconfig | 2 +-
drivers/usb/dwc3/dwc3-generic-plat.c | 1 +
include/dt-bindings/clock/zte,zx279128s-crm.h | 55 +
58 files changed, 6460 insertions(+), 8 deletions(-)
create mode 100644 Documentation/devicetree/bindings/clock/zte,zx279128s-crm.yaml
create mode 100644 Documentation/devicetree/bindings/gpio/zte,zx279128s-gpio.yaml
create mode 100644 Documentation/devicetree/bindings/net/zte,zx279128s-gmac.yaml
create mode 100644 Documentation/devicetree/bindings/net/zte,zx279128s-mdio.yaml
create mode 100644 Documentation/devicetree/bindings/pci/zte,zx279128s-pcie.yaml
create mode 100644 Documentation/devicetree/bindings/spi/zte,zx279128s-spifc.yaml
create mode 100644 Documentation/devicetree/bindings/usb/zte,zx279128s-dwc3.yaml
create mode 100644 arch/arm/boot/dts/zte/zx279128s-zte-zxhn-h3600.dts
create mode 100644 arch/arm/boot/dts/zte/zx279128s.dtsi
create mode 100644 arch/arm/mach-zte/platsmp-zx279128s.c
create mode 100644 arch/arm/mach-zte/zx279128s.c
create mode 100644 drivers/clk/zte/Kconfig
create mode 100644 drivers/clk/zte/Makefile
create mode 100644 drivers/clk/zte/clk-zx279128s.c
create mode 100644 drivers/gpio/gpio-zx279128s.c
create mode 100644 drivers/net/ethernet/zte/zx279128s-eth.h
create mode 100644 drivers/net/ethernet/zte/zx279128s-main.c
create mode 100644 drivers/net/ethernet/zte/zx279128s-ppe.c
create mode 100644 drivers/net/ethernet/zte/zx279128s-switch.c
create mode 100644 drivers/net/mdio/mdio-zx279128s.c
create mode 100644 drivers/net/phy/sanechips.c
create mode 100644 drivers/pci/controller/dwc/pcie-zx279128s.c
create mode 100644 drivers/spi/spi-zx279128s-spifc.c
create mode 100644 include/dt-bindings/clock/zte,zx279128s-crm.h

--
2.55.0