blueline-screen-toggle does not exist here so the blank no-ops, and Dim is an absolute that reads as off on a 2047-step backlight. Lit-forever or black-forever, nothing between, until eb0292c ships.
7.7 KiB
d10 — iPhone 7 (A1660, iPhone9,1, T8010)
Second body. Bring-up, not daily use. The argument and the evidence live in
../../docs/tasks/63-d10-second-body.md;
this page is the per-capability state and the commands.
Reboot it freely — Casey, 2026-08-09: "I'm happy to reboot it… idgaf, reboot it whenever." Nothing is flashed and every boot re-runs checkm8.
Boot
~/Projects/hoolock/boot.sh # all stages, newest staged kernel
~/Projects/hoolock/boot.sh -l # what is staged
~/Projects/hoolock/boot.sh -k touch # a specific variant
DFU is buttons and only buttons: power off, Vol-Down + Power 8s, release Power,
keep Vol-Down ~10s. The script waits for it. Stage 2 always ends in a
SerialException — the proxy drops when the kernel takes the machine, and
kboot refuses the jump if PCIe init failed, so reaching that disconnect is the
success signal.
Cmdline carries initcall_blacklist=simpledrm_platform_driver_init. Without it
simpledrm claims the panel first, udev names it the primary GPU, and viewtop
composites through the fenceless framebuffer while ADP holds the same hardware —
two writers, one panel. Disabling framebuffer0 in the DT does not work;
m1n1's kboot fills and re-enables /chosen/framebuffer itself.
What runs
| kernel | Pauli1Go/HoolockLinux + local commits; config hoolock/config-d10-full-16k |
| pages | 16K. The 4K config builds and does not boot |
| display | simpledrm by default. ADP binds and scans out but the panel stays dark — see below |
| backlight | two: 20e200080.backlight (DWI) and 206600000.dsi.0 (panel, over DCS) |
| storage | nvme0n1p1 ext4; nvme0n3 is SysCfg, 131072 bytes, read-only |
| link | NCM usb0 172.16.43.1/24; no wifi, no modem, no battery node populated |
| session | greetd → souveraine-session-viewtop as casey, real seat0/tty1 |
Per-capability
works — storage, USB gadget, both backlights, session authority, SSH, display through simpledrm.
partial
-
the display pipe. ADP binds, and everything measurable says it is working:
[drm] Initialized adp 0.1.0 for 206200000.display-pipe on minor 1, connectorcard0-DSI-1connected + enabled, CRTCactive=1withfb=43and the plane at750x1334+0+0, viewtop's EGL up on that card. The panel is dark anyway. Both backlights are raised, so it is content and not brightness. Two candidates, neither tested:- the mode timings are invented. m1n1 programmed Apple's real timings and
ADP re-modesets with porches I made up (
750 758 774 790 / 1334 1338 1346 1354, 64179 kHz). Nothing in the ADT gave a raster, so they were guessed — which is the one thing in this whole port that is not derived. panel-summitsends no DCS display-on. It has noprepare/enableat all, by design: on a Touch Bar the loader leaves the panel running. It also never setsdsi->lanes/format/mode_flags, and D10's ADT says#lanes = 2. Ifadp-mipireprograms the host from those defaults, the link comes up wrong.
boot.sh -ais the ADP-only boot; without it simpledrm stays and the screen works. Do not make ADP the default until a pixel is seen. - the mode timings are invented. m1n1 programmed Apple's real timings and
ADP re-modesets with porches I made up (
-
touch.
apple_z2binds onspi0.0, firmware loads,firmware ready IRQ received, surface geometry reads back off the part (5850×10405, 13 units/mm), "report initialization complete", and the gen2 report-enable answers. Then the IRQ never moves for a finger. It did work once — 2407 events, 270SYN_REPORT, 13 balanced down/up, X 53..735, Y 107..1333 — on the first boot after the rails were fixed, and has not since. Ruled out by test: the driver changes (the original kernel is equally dead), and the rails (forced power cycle at probe, no change; a rebind cleanly re-inits). The untested difference is the display path — that first boot was the last one where simpledrm drove the panel. Apple's touch controllers sync to display scan;t8010-ipad7.dtsigives its touchscreendisplay-sync-gpios, and D10'sdisp0carriesfunction-lcd_enable. Next test is one boot: the originaltouchvariant without the simpledrm blacklist, which restores the exact conditions of the working run. -
lock surface.
touchKeypadis answered from the environment now (SOUVERAINE_TOUCH_KEYPAD=1, set in/etc/environmentand the shell unit drop-in), becausePersistentPropertiesonly carries the choice through a reload and the d10 always starts cold. Unverified on glass.
built, never run — bluetooth (node inherited), charging (SN2400 + BQ27540 in
DT and kernel), ambient light (CT821 → TSL2583), audio (SND_SOC_APPLE_MCA),
suspend, buttons (gpio-keys reports KEY_MUTE/VOLUMEDOWN/VOLUMEUP/
KEY_POWER, and viewtop already classifies the last three — nothing routes them
on this body).
absent — GPU (no render node; llvmpipe, GALLIUM_DRIVER set in
/etc/environment and it must never be set on blueline), wifi (BCM4350
needs a driver; the node is deliberately kept out of the DT because declaring it
stalls PCI pwrctrl and takes the host bridge and NVMe down with it), modem,
camera, sensor reporters.
Traps this body has already cost
/dev/memon live display registers wedged it into recovery, twice. Do not probe MMIO to identify a register window. A wrongregin a DT node is safe by comparison — the driver maps what it is told and fails to probe.- Warm re-exploit is not a cold boot. Rails, clocks and controller state survive it. The one boot where touch worked was the one following a true power-off.
config_16kis the bare upstream reference — noPCIE_APPLE_H9P, noAPPLE_SIO, noTOUCHSCREEN_APPLE_Z2. Building d10 from it produces a kernel with no storage and no touch. Useconfig-d10-full-16k.- Firmware must be
CONFIG_EXTRA_FIRMWARE. The disk-boot blob has no initramfs, soapple-sio'srequest_firmwareloses the race to rootfs: 60 s-ETIMEDOUT, then the SPI bus never probes and touch cannot exist. pgrep -fmatches your own ssh command line. It has killed a session and produced two false "phone is down" readings in one night.
The panel cannot sleep on this body
Both ends of the blank are blueline-shaped, so there is no idle path that ends with a dark, powered-down panel:
Blank/Unblankshell out toblueline-screen-toggle, which does not exist here and ships only inrootfs-overlay/. The trail recordspanel-off … No such file or directory— the actuator no-ops.Dimis the only thing that changes the panel, and on the shipped sessiond it isbrightnessctl set 10— an absolute, 0.5% of 2047, indistinguishable from off.
So the device offers lit-forever or black-forever and nothing between, until
souveraine eb0292c lands by package. Meanwhile the timed policy is widened
(dim_grace_secs 600, lock_blank_after_secs 1800) rather than left at 15 s.
To park it by hand:
for d in /sys/class/backlight/*/; do echo 0 > $d/brightness; echo 4 > $d/bl_power; done
This is TASK-63's parity fix. viewtop owns the CRTC, has power.rs with the
EBUSY deferral, and runs on both bodies — the blank belongs there as a verb, and
then neither phone needs a script named after the other one.
Owed
caseystill has password123456, which is also the lock PIN.- Buttons are unrouted.
sessiond eb0292c(dim by percent) needs a CI build andpacman -Syuto reach the device; until then the panel dims to black atset 10and the idle policy is widened as a stopgap.- The kernel work lives as a patch at
../../PAF/evidence/d10-adp-touch-2026-08-09.patchbecausehoolock/is not a repository. It wants a real home.