[PATCH 20/24] spi: Add ZTE ZX279128S SPI flash controller

Navid Ghahremani ghahramani.navid at gmail.com
Wed Oct 14 00:07:58 PDT 2026


Hi Stefan,

Thank you for pointing me to your spi-zx.c driver and for the detailed
explanation of the PIO vs IRQ vs DMA trade-offs!

I tested your driver directly on the ZTE ZXHN H3600 (ZX279128S) hardware
running Linux 6.18.55, and it works flawlessly in PIO mode:

  zx-qspi 94406000.spi: ZX QSPI Controller driver initializing
  zx-qspi 94406000.spi: Cannot get RX DMA, using PIO
  zx-qspi 94406000.spi: Cannot get TX DMA, using PIO
  spi-nand spi0.0: HeYangTek SPI NAND was found.
  spi-nand spi0.0: 128 MiB, block size: 128 KiB, page size: 2048, OOB size: 64
  10 fixed-partitions partitions found on MTD device spi0.0
  UBIFS (ubi0:1): UBIFS: mounted UBI device 0, volume 1, name "rootfs_data"

MTD partitioning, UBI attachment, and UBIFS read/write operations all
completed cleanly with zero transfer errors or ECC faults.

To ensure the driver works seamlessly across both the ZX29 (100 MHz bus)
and ZX279128S (125 MHz bus), I updated the clock divider calculation to
dynamically query the controller clock rate via clk_get_rate(spifc->clk)
rather than assuming a fixed input frequency.

In v2, I have replaced my separate SPI driver with your unified spi-zx.c
under drivers/spi/spi-zx.c, and updated the DT binding schema to describe
both "zte,zx297520-spifc" and "zte,zx279128s-spifc".

All other items you raised (splitting CRM DT schemas, simple-mfd reboot
child, logical reset enum IDs, synchronizing clock/reset locking, and
isolating the PCIe SerDes into a Generic PHY driver) are also
implemented and verified in v2.

Thank you again for your collaboration and support.

Best regards,
Navid



More information about the linux-arm-kernel mailing list