Identity
| Part | Rockchip IOMMU (six instances on RK3399) |
| Role | DMA-address translation and isolation for the display, ISP, RGA, and VPU masters; protects the rest of the system from buggy/hostile DMA |
| Bus / address | per-master MMIO; for example VOP-L IOMMU at 0xff8f3f00 sitting just above the VOP-Lit register bank; ISP0/1, RGA, VPU-L/R each have their own |
| GPIO / IRQ | one GIC SPI per IOMMU instance |
| Datasheet | RK3399 TRM Part 1 chapter 12 (IOMMU) |
| Pine64 wiki | PinePhone Pro main page |
| Schematic | on-SoC (no external schematic) |
Status — · not started
There is no Rockchip IOMMU driver in the FreeBSD tree. The PinePhone Pro currently runs without it: VOP and panfrost issue DMA against physical addresses, which works on this SoC because the masters can address all of DDR directly. The cost is loss of isolation — a panfrost job-shader bug can scribble anywhere in physical memory — and lack of scatter-gather support for buffers that the GPU/VPU would otherwise have to refuse. Mainline Linux requires the IOMMU for the upstream panfrost path; we currently sit in a panfrost mode that bypasses it.
Driver
- Our tree: no driver in tree. A port would implement the IOMMU page-table walker against FreeBSD’s
bus_dma/IOMMU framework. It is a self-contained body of work — the register surface is small and the algorithm is a single-page-table walker, no SVA or nested translation. - Linux mainline:
drivers/iommu/rockchip-iommu.c— single ~1200-line file. - FreeBSD upstream: none — no Rockchip IOMMU driver exists.
The Linux IOMMU framework is significantly different in shape from FreeBSD’s, so the port is not a line-for-line translation; the hardware sequencing is direct, but the consumer API mapping is where the work is.
Open work
- Port the driver. Order: VOP-Lit IOMMU (most-exercised, simplest path), then panfrost-side validation, then VPU/RGA when those subsystems come up.
- Decide whether to expose IOMMU domains via FreeBSD’s
bus_dmaBUS_DMA_NOCACHEpath or via a newiommu(9)API. Linux’siommu_domainabstraction does not map cleanly to either. - Required by camera/V4L2 work eventually — RK ISP1 will not function without IOMMU.
Related
- What’s next — gap roadmap.
- Cross-driver audit 2026-04-30 — Rockchip driver audit.
- Component: Mali-T860 (panfrost) — current GPU runs without IOMMU.