Appendix · reference

ARM PL330 DMA controller

Two DMA engines feeding I2S, SPI, UART, and SD

Identity

PartARM PL330 DMA controller, two instances
RoleDMA acceleration for I2S, SPI, UART, and crypto; would relieve I2S0 PIO traffic for audio playback
Bus / addressMMIO 0xff6d0000 (dmac_bus, 32 channels) and 0xff6e0000 (dmac_peri, 32 channels)
GPIO / IRQGIC SPI 5/6 (dmac_bus abort + event), GIC SPI 7/8 (dmac_peri abort + event)
DatasheetARM PrimeCell DMA-330 (PL330) TRM
Pine64 wikiPinePhone Pro main page
Schematicon-SoC (no external schematic)

Status — ◐ partial

Both PL330 instances should attach as of 2026-04-30: the FreeBSD xDMA-framework PL330 driver lives at sys/dev/xdma/controller/pl330.c and matches compatible = "arm,pl330" exactly; the RK3399 device tree that ships in sys/contrib/device-tree/src/arm64/rockchip/rk3399-base.dtsi already declares both dmac_bus@ff6d0000 and dmac_peri@ff6e0000 with that compatible string, two GIC SPIs each, and #dma-cells = <1>. The only missing piece was the kernel config — neither device pl330 nor device xdma was in PINEPHONE_PRO, so the driver was being built into GENERIC kernels but not ours. Adding both lines is enough to bring up the controllers; consumer drivers are still TODO.

Driver

The FreeBSD probe does not currently call clk_get_by_ofw_name(dev, "apb_pclk", ...) to enable the AMBA PCLK that the upstream Linux binding documents under clock-names. On RK3399 the ACLK_DMAC0_PERILP and ACLK_DMAC1_PERILP gates default to enabled by U-Boot, so attach should still succeed; if a future U-Boot ever leaves them gated the controller will probe but transfers will hang silently. That gap is upstream’s, not ours, but worth noting before any I2S DMA work lands.

Open work

Parity verification

Bench predicate is the dmesg attach line. After a kernel built with device xdma + device pl330 boots:

pl330_0: <ARM PrimeCell DMA Controller (PL330)> mem 0xff6d0000-0xff6d3fff irq 0,1 on simplebus0
pl330_1: <ARM PrimeCell DMA Controller (PL330)> mem 0xff6e0000-0xff6e3fff irq 0,1 on simplebus0

Falsifiers: