Appendix · recipe

PineTab2 first-boot recipe

Stage the PINETAB2 kernel, install the FreeBSD DTB, and prepare the SD card before hardware arrives.

This is the operational path for the first real PineTab2 boot. It assumes the source tree has already been pushed and the build host has run the PineTab2 patch/build tasks.

Build Status

◐ partial The PINETAB2 DTB and kernel config now have a bounded compile path against FreeBSD stable/15. The first-boot DTB intentionally disables nonessential tablet paths so the first bench session is not debugging DSI, cameras, audio, PCIe, GPU, or internal SDIO WiFi before storage, USB, HDMI, and I2C are known-good. The remaining unknown is hardware behavior on the tablet: UART visibility, firmware handoff, storage, USB host power, HDMI, and I2C device enumeration.

Build

╞═ build the PineTab2 artifacts ═╡
git push origin master

# On the FreeBSD build host path:
mise run check-dtb:pinetab2
mise run build-dtb:pinetab2
mise run build-kernel:pinetab2

# If honor is unavailable, the compile proof path is:
COPPICE_KERNCONF=PINETAB2 \
COPPICE_BUILD_DTB=1 \
COPPICE_FULL_KERNEL=1 \
mise run coppice:build-smoke

The honor path leaves the kernel and DTB at:

~/pine64-freebsd/honeyguide/obj.clang/home/jadams/pine64-freebsd/honeyguide/freebsd-src/arm64.aarch64/sys/PINETAB2/kernel
~/pine64-freebsd/honeyguide/dtb.pinetab2/rk3566-pinetab2-v2.0-freebsd.dtb

Stage

╞═ stage a local first-boot bundle ═╡
mise run stage:pinetab2

The bundle lands under artifacts/pinetab2-firstboot/<timestamp>/ and contains:

kernel
rk3566-pinetab2-v2.0-freebsd.dtb
loader.conf.pinetab2
INSTALL.md
MANIFEST

loader.conf.pinetab2 sets:

boot_serial="YES"
console="comconsole,efi"
comconsole_speed="1500000"
fdt_file="rockchip/rk3566-pinetab2-v2.0-freebsd.dtb"

Install

╞═ install onto a mounted SD-card root ═╡
sudo mise run install:pinetab2:sd -- artifacts/pinetab2-firstboot/<timestamp> /mnt

The installer writes:

Bundle fileTarget path
kernel/boot/kernel/kernel
rk3566-pinetab2-v2.0-freebsd.dtb/boot/dtb/rockchip/rk3566-pinetab2-v2.0-freebsd.dtb
loader.conf.pinetab2marked block in /boot/loader.conf

If /boot/kernel/kernel already exists, it is copied to /boot/kernel/kernel.prev-pinetab2 before replacement.

First Power-On

Use the PineTab2 UART dongle at 1500000 baud, connect micro-HDMI, and bring a USB Ethernet or USB WiFi adapter. The internal BES2600 WiFi is not part of the first boot success criteria.

╞═ capture the first boot receipt ═╡
# Start before applying power.
mise run bench:pinetab2:firstboot -- start --name first-power

# After the boot attempt has finished, stop the UART capture.
mise run bench:pinetab2:firstboot -- status
mise run bench:pinetab2:firstboot -- stop

# Run only after the tablet has a reachable FreeBSD SSH path.
mise run bench:pinetab2:firstboot -- collect --ssh pinetab2
mise run bench:pinetab2:firstboot -- analyze

The serial log is the primary receipt. The SSH collection step is a post-boot add-on for the first time USB Ethernet, USB WiFi, or another network path comes up; it records uname, FDT evidence, storage, USB, network, focused devinfo, sysctls, and a filtered dmesg into the same logs/pinetab2-firstboot/<timestamp>-<name>/ bundle.

The first receipt should answer only these questions:

  1. Does U-Boot load the FreeBSD loader from the SD card?
  2. Does loader use rockchip/rk3566-pinetab2-v2.0-freebsd.dtb?
  3. Does the kernel reach serial login or framebuffer output?
  4. Do sdhci, sdmmc0, USB host, and HDMI attach?
  5. Do the I2C buses see RK817, Goodix GT911, and SC7A20 at their DTS addresses?
  6. Does the disabled set stay quiet: sdmmc1, DSI/panel, camera CSI, audio/I2S, PCIe, and GPU?

For the touch controller, the useful post-boot proof is:

dmesg | grep -i goodix
sysctl dev.goodix.0

dev.goodix.0.i2c_addr_7bit should be 93 (0x5d), config_addr should be 32839 (0x8047), and config_len should be 186.

For the RK817 PMIC, start with the read-only monitor:

dmesg | grep -i rk817
sysctl dev.rk8xx.0 | grep rk817
sysctl dev.rk8xx.0.rk817_dump=1

The first useful values are rk817_present=1, rk817_res_div=1, a plausible rk817_voltage_uv, and rk817_chrg_sts / rk817_sys_sts changing when USB-C power is connected or removed.

Only after those are boring should DSI, touch policy, battery policy, and Type-C role work move onto the bench.