‹ projects

reverb-m1

Native wired VR on Apple silicon: Reverb G1 display bring-up and stereo demo
git clone https://umhau.org/code/reverb-m1.git
Log | Files | Refs

commit be6076811f712b9b9c84cceca072e3cd2dedafd8
parent d6819e416cad05b4ffa564aa3a03ac1c516dedd9
Author: umhau <umhau@example.invalid>
Date:   Wed, 21 Oct 2026 12:00:08 +0000

verify.sh: boot-args + log summaries only (no ioreg/system_profiler); link-rate cap encoding verified

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Diffstat:
MNOTES.md | 7++++---
MSETUP.md | 3++-
Mtools/verify.sh | 18+++---------------
3 files changed, 9 insertions(+), 19 deletions(-)

diff --git a/NOTES.md b/NOTES.md @@ -22,8 +22,7 @@ From disassembling this machine's arm64 kernelcache (macOS 15.6.1): sessions, 0 while video was visibly running in others); do not infer refresh from it. ## After reboot -Run `tools/verify.sh` (passive, launches nothing). Success = HDCP TX Protocols=() and headset display online; panel lit -must still be confirmed physically. +Run `tools/verify.sh` (boot-args + log summaries only; no ioreg/system_profiler). Panel lit must be confirmed physically. ## Link reliability (2026-10-20, vr1 + vr0) - Periodic ~70-80 s drops ([time redacted]-[time redacted]) happened while `ioreg -c IOPortTransportStateDisplayPort` was polled at 1 Hz and a @@ -37,7 +36,9 @@ must still be confirmed physically. - DCP firmware has per-port link limits (max_link_rate, max_link_rate_4_lanes, min_link_rate, max_lane_count) read from boot-args with default prefix "appledptx" (format strings "%s-%s" present, so likely `appledptx-max_link_rate=`); name format VERIFIED (DCP fw 0x708b0: snprintf(key[0]=='-' ? "-%s%s" : "%s-%s", prefix, key)) => boot-arg is exactly - `appledptx-max_link_rate`; value is 1 byte (encoding not yet verified). Would need a reboot. + `appledptx-max_link_rate`; value is 1 byte in DisplayPort link-rate codes (VERIFIED: min_link_rate defaults to 6 = + RBR at DCP fw 0x56914; compared against the logged linkRate at 0x52a7c). HBR2 cap = `appledptx-max_link_rate=0x14` + (hex vs decimal parsing of the value not verified; 20 = 0x14). Untested; needs a reboot. - Stuck state (headset display gone, adapter reports HPD=0 to the Mac): **recoverable in software** with a USB-PD Data Reset on port 2's controller: `sudo tools/hpmctl 1 cmd DRST` (4CC passed big-endian, see tools/kernel/HPM_RE.md section 8). First success: display back 2.2 s after the command, no replug. diff --git a/SETUP.md b/SETUP.md @@ -35,6 +35,7 @@ After the reboot, verify (no headset needed): ```sh sysctl -n kern.bootargs # -> amfi_get_out_of_my_way=1 hdcp-fuse-mask=0 ioreg -l -w0 | grep '"HDCPTXCapabilities"' # every line should show {"Protocols"=()} +# (one-off setup check only; never run ioreg while the headset is live or in a loop) ``` Before the fix these show `{"Protocols"=(1,2)}` (HDCP 1.x and 2.x). The `HDCPCapabilityMask` field does NOT change (still 2/3); that's expected and harmless. @@ -88,5 +89,5 @@ reports `05 01 01 01 01 ...` (panel on), with no further `05 00` and no drops. - `displaywatch`: passively logs display add/remove (CoreGraphics callbacks). - Never poll `ioreg -c IOPortTransportStateDisplayPort` (the old `linkwatch.sh` did; removed). - `testpattern`: red LEFT / blue RIGHT fullscreen pattern on the headset. -- `verify.sh`: passive one-shot check (boot-args, HDCP TX capability, display online, log summaries). Launches nothing. +- `verify.sh`: passive one-shot check (boot-args + summaries of existing logs). No ioreg/system_profiler/HID. Launches nothing. - `hpmctl` / `recovery_trials.py` / the app's LinkRecovery helper: see NOTES.md "Link reliability" (vr0 owns these). diff --git a/tools/verify.sh b/tools/verify.sh @@ -1,8 +1,7 @@ #!/bin/zsh -# Passive, one-shot health check. It launches, kills, wakes and polls NOTHING: -# - never reads USB-C/DisplayPort port state (ioreg IOPortTransportStateDisplayPort) — polling it destabilised the link -# - never sends HID commands or port-controller (hpmctl) commands -# It reports boot-args, HDCP transmit capability (one registry read), and summarises existing passive logs. +# Passive, one-shot health check. It launches, kills, wakes and queries NOTHING on the hardware side: +# - no ioreg (even a one-off `ioreg -l` walks the port nodes), no system_profiler, no HID, no hpmctl. +# It only reports boot-args and summarises existing passive logs. cd "$(dirname "$0")" echo "kern.bootargs: $(sysctl -n kern.bootargs)" @@ -11,17 +10,6 @@ case " $(sysctl -n kern.bootargs) " in *) echo " PROBLEM: hdcp-fuse-mask=0 not active; the headset will blank (see SETUP.md)" ;; esac -# Expect {"Protocols"=()} on every channel when HDCP is off. -echo "HDCP transmit capabilities:" -ioreg -l -w0 | grep '"HDCPTXCapabilities"' | sort | uniq -c | sed 's/^/ /' - -# Headset display currently online? (CoreGraphics view, no port access) -if system_profiler SPDisplaysDataType 2>/dev/null | grep -q "4320 x 2160"; then - echo "headset display: online" -else - echo "headset display: not online" -fi - # Summaries of passive logs, if an observer is already running (start tools/displaywatch yourself if wanted). [ -f displaywatch.log ] && { echo "--- last display events (displaywatch.log):"; grep -E "ADD|REMOVE" displaywatch.log | tail -5; } [ -f hmdwake.log ] && { echo "--- last headset 0x05 reports (hmdwake.log):"; grep status hmdwake.log | tail -3; }