Identity
| Part | Rockchip RK3399S (voltage-locked variant of RK3399) |
| Role | Application processor; 2x Cortex-A72 + 4x Cortex-A53, Mali-T860 MP4, all on-SoC peripherals (CRU, pinctrl, GPIO, I2C/SPI/UART/I2S, USB2/USB3, VOP, DSI, ISP, IOMMU) |
| Bus / address | on-SoC; per-block MMIO ranges across 0xff000000-0xff9fffff and 0xfe000000-0xfe9fffff |
| GPIO / IRQ | 5 banks, 32 pins each (GPIO0-GPIO4); GIC-400 interrupt controller |
| Datasheet | Rockchip wiki — RK3399, TRM Part 1 |
| Pine64 wiki | PinePhone Pro main page |
| Schematic | sheet 1 (CPU core), sheet 2 (DDR), sheet 3 (clocking) |
Status — ● working
All six cores boot from SD via FreeBSD stable/15 arm64 with the Rockchip clock, reset, pinctrl, GPIO, I2C, PWM, SD/MMC, USB, and DRM pieces layered by the mise patch pipeline. Display, GPU, USB networking, native WiFi, Bluetooth A2DP, audio playback, sensors, buttons, and LEDs all work. The S variant differs from the plain RK3399 in that several voltage rails are pre-selected by Rockchip fuse settings rather than software-programmable.
Driver
- Our tree: the RK3399S as a whole is brought up by a constellation of drivers under
src/sys/arm64/rockchip/andsrc/sys/dev/clk/rockchip/— each on-SoC block has its own component page in this appendix. - Linux mainline:
arch/arm64/boot/dts/rockchip/rk3399.dtsiand the per-subsystem drivers underdrivers/{clk,pinctrl,gpio,iommu,...}/rockchip/. - FreeBSD upstream:
sys/arm64/rockchip/— covers RK3328/RK3399/RK3568 in stable/15 and main.
The S variant boots fine on the standard rk3399.dtsi tree because
the differences are voltage-rail constraints, not register-map
changes. Our DT pulls in rk3399-pinephone-pro.dts from the Linux
device-tree subtree at sys/contrib/device-tree/src/arm64/rockchip/.
The big remaining divergence from a clean port is the cluster of
write-blocking patches around the CRU, where we forbid writes to PLLs
that the early port found capable of crashing the SoC — see bb92c4f cru: allow CPLL/GPLL/NPLL/VPLL, only block CPU PLLs (LPLL/BPLL) and DDR (DPLL) and c985e63 audio: use RT5640 internal PLL from BCLK, restore full CRU PLL block .
Open work
- CPU OPP/DVFS validation: confirm the operating-points-v2 table from the Linux DTS lines up with what
cpufreqactually runs. - Thermal throttling: TSADC readout is verified; bench comparator IRQ/TShut behavior, then connect it to cpufreq throttle policy.
- S2RAM / suspend-to-RAM: blocked on a power-domain driver and PMU low-power sequencing.
- Upstream-cleanup of the CRU write-blocking band-aids; the current allow-list is empirical, not principled.
Related
- Boot from SD — first six-core boot.
- Building from source — kernel build expectations for RK3399.
- Build environment — host toolchain.
- Cross-driver audit 2026-04-30 — current state of every Rockchip driver.
- Hardware reference — full chip manifest.