Pineport · FreeBSD mobile bring-up

FreeBSD on Pine64 mobile hardware.

A source-built FreeBSD bring-up notebook for the RK3399S PinePhone Pro and RK3566 PineTab2: kernel patches, repeatable builds, and board-specific support maps.

This is not a product page pretending the hard parts are easy. It is a working engineering notebook for two open Pine64 mobile devices. The PinePhone Pro is the active FreeBSD 15 phone target, booted from SD, built from source, documented at the patch level, and paired with the omfreebdy phone shell. The PineTab2 is the RK3566 tablet target now split into its own hardware and component maps.

Current bench state · 2026-04-27

Enough hardware works to use the phone as a real FreeBSD target.

The bring-up line has moved from "can it boot?" to "which phone subsystem should become boring next?" Boot, USB networking, touchscreen, display, native WiFi, Bluetooth A2DP, loudspeaker audio, volume keys, RGB LED, Sway, and omfreebdy menus are all live on the hardware. Modem, battery policy, camera, and suspend are still open.

Kernel FreeBSD 15 stable/15, aarch64, built repeatably on honor
Network USB + WiFi CDC-Ethernet lifeline plus native BCM43455 WPA2/DHCP
Desktop Sway phone shell touch, gestures, fuzzel menus, wvkbd, themed OSD
Hardware Audio, LEDs, buttons RT5640, gpioled, SARADC keys, power-screen toggle

What you can actually do with it

The useful split is driver work versus phone-shell work. Kernel and device-tree changes live here. The pocket-computer UI lives in omfreebdy and is installed on the phone like any other userland package.

Bootable FreeBSD phone image

● working

SD-first U-Boot, EFI framebuffer, FreeBSD 15 kernel, USB gadget networking, and a mise pipeline that rebuilds on honor instead of hand-editing a device.

Build recipe

Native phone networking

◐ partial

USB-C management stays available while the AP6255/BCM43455 SDIO WiFi path scans, associates to WPA2, completes EAPOL, and binds DHCP on wlan0.

WiFi status

Touch-first Wayland userland

● working

omfreebdy supplies the Sway session, fuzzel menus, volume OSD, theme switching, gestures, LED helpers, and power-button screen control.

Open omfreebdy

Panel, GPU, audio, controls

◐ partial

MIPI DSI panel, Panfrost-backed Sway, RT5640 loudspeaker playback, SARADC volume keys, GPIO power key, RGB notification LED, and raw sensor sysctls are all on hardware.

Hardware map

Two board tracks

The phone and tablet now have separate reference paths. PinePhone Pro stays as the active, bench-proven mobile target. PineTab2 gets its own hardware and component maps so RK3566 work can move without rewriting phone status pages.

RK3399S phone, active bench target

PinePhone Pro

The phone has the live bring-up narrative: SD boot, USB gadget networking, display, touch, WiFi, Bluetooth audio, loudspeaker audio, buttons, LEDs, sensors, USB-PD, and modem first light.

RK3566 tablet, Quartz64-based next target

PineTab2

The tablet now has its own reference shelf: RK3566 first-boot spine, micro-HDMI-first display plan, RK817 power path, Goodix touch, SC7A20 sensor, and the explicit BES2600 skip.

The phone, on six themes

Every shot below was captured live from the running phone over USB-Ethernet via tools/phone-shots.sh — Sway, swaybg, swaybar, wvkbd-mobintl, fuzzel, mako, and the omfreebdy theme switcher. The wallpaper changes, the keyboard recolors, the OSD follows, and the same shell runs on the phone.

Read the journey

Each essay is one focused war story — the bug, the patch, the recipe. Read in order for the narrative; jump straight to a subsystem via the header nav.

  1. 01 01 · framing Why FreeBSD on a phone ● working
  2. 02 02 · boot Boot from SD with Honeyguide ● working
  3. 03 03 · build Building from source on honor ● working
  4. 04 04 · network USB-Ethernet up: SSH over USB-C ● working
  5. 05 05 · usb DWC3 gadget from scratch ● working
  6. 06 06 · touch Goodix and the PIC methods that didn't exist ● working
  7. 07 07 · display Display from black ◐ partial
  8. 08 08 · gpu GPU under load: making Panfrost usable ◐ partial
  9. 09 09 · bluetooth Bluetooth attached: BCM4345C5 firmware load ● working
  10. 10 10 · bluetooth The HOST_WAKE IRQ saga ◐ partial
  11. 11 11 · bluetooth SSP, Secure Connections, and the Murata firmware swap ● working
  12. 12 12 · bluetooth A2DP audio playing ● working
  13. 13 13 · audio On-device audio: I2S + RT5640 ● working
  14. 14 14 · status Where we are now ● working
  15. 15 15 · next What's next: finish WiFi polish, then modem ▸ next
  16. 16 16 · usb-pd fusb302: a USB-PD sink that works ● working
  17. 17 17 · usb DWC3 runtime role swap ● working

Status snapshot

Subsystem-by-subsystem, derived from the most-recent essay touching each one. The full breakdown lives in essay 14 — where we are now.

Recent commits

Live from the project repository — the last twenty commits, each one linked back to GitLab.

2026-05-10 849f01e Revert "fusb302: wait for chip BMC ACTIVITY=0 before TX_START"
2026-05-10 0388510 fusb302: wait for chip BMC ACTIVITY=0 before TX_START
2026-05-10 fed4a17 fusb302: TX_FLUSH before each TX to clear post-auto-GoodCRC latch
2026-05-10 749c4f2 fusb302: restore CONTROL0.TX_START write, OR with HOST_CUR_DEF
2026-05-10 cdde9b8 fusb302: drop CONTROL0.TX_START write, clear INT_MASK on source attach
2026-05-10 b6fd0bb fusb302: preserve POWERROLE/DATAROLE on rev-downgrade in source mode
2026-05-10 e6761b0 fusb302: defer first Source_Cap + reset PD session state on source-attach
2026-05-10 1256a8c fusb302: unmask TX/RX completion IRQs on source-attach
2026-05-10 05a091f site: essay 17 — DWC3 runtime role swap
2026-05-10 5fdec51 dwc3: drop role_swap diagnostic printfs (root cause fixed)
2026-05-10 8d886ad dwc3: release gadget IRQ in quiesce so xhci can claim it
2026-05-10 7cda476 dwc3: tighter instrumentation — print before AND after each call
2026-05-10 ecedc69 dwc3: instrument role_swap so the next wedge tells us where it hangs
2026-05-10 5db9a9c dwc3: park gadget before chip soft-reset on role swap
2026-05-09 75485c6 dwc3: hw.dwc3.role_swap sysctl — attempt runtime gadget→host alongside
2026-05-09 14a9677 dwc3: hw.dwc3.prtcap sysctl for live PRTCAPDIR toggle (no child re-attach)
2026-05-09 a05ac29 cdn_dp: DPTX_READ_LINK_STAT is 10 bytes on firmware ver 0x0475
2026-05-09 ac9fa97 cdn_dp: force_train sysctl — DPTX_TRAINING_CONTROL without HPD
2026-05-09 8251d00 cdn_dp: event_config is fire-and-forget on this firmware
2026-05-09 388e88c cdn_dp: M4.5 — HPD/EDID/DPCD probe via sysctl + event enable

Reference

The appendix shelf is grouped by board first, then shared build recipes, audits, patches, and research.