Repository navigation
Conversation
Some 16-inch M3 Pro (J516S) units on the 14.7 boot chain load a B0 GPU firmware image whose TEXT digest differs from the pinned J516S row: TEXT 0x5c000, DATA 0x114000, GKTS marker 0x58e88 and TEXT sha256 cd05af6a828b52e4c2fed20086d3d18a7db42e03a8fd6f8354f9f06e0a61363e. The build is refused with "loaded GFX TEXT identity mismatch", so there is no render node and the compositor falls back to llvmpipe. The GPU only starts with the g15_accept_text_prefix bring-up override. Add this build as a J516S-only row. Rows still pin on the machine they name; nothing changes on the J514S or on other machines. Extend the maintained-handoff host test to check the new row and refresh the zero-words golden pins for hw.rs and the T6030 module, which change by exactly this one row. Measured on a J516S (apple,j516s apple,t6030; os-fw 14.7, system-fw 15.5, iBoot2 iBoot-10151.140.19.700.2) with linux-aurora 7.2.11.aurora14-1 and the override: the admission line reports the identical sizes, marker and digest, and the GPU reaches READY with renderD128 present. Link: omacom#247 Link: omacom/omarchy#17739 Signed-off-by: joel cristobal <joelcristobal97@gmail.com>
9c47fac to
f800dce
Compare
|
Boot-tested this PR on the J516S, with no override. Kernel: this PR's head Machine: MacBook Pro 16" M3 Pro, Before (packaged With this PR: The build was admitted through the new row; there are no Caveats:
|
scottjones
left a comment
There was a problem hiding this comment.
Thanks for this one, it looks good. The new J516S row matches the J514S cd05 row from #366 byte for byte apart from the machine, it's scoped to apple,j516s only, and the da26 rows and the J514C/J516C tables are untouched. The golden pins were refreshed correctly: g15-zero-words-tests.py and g15-maintained-handoff-tests.py pass with and without --mutations, and removing or altering the row makes them fail. Thanks too for the no-override boot test showing the GPU came up via the new row.
One landing note: #366 (same cd05 build on the 14-inch J514S) should land first, and then #390 needs a small rebase: keep both cd05 rows (J516S at index 4), BUILDS.len() goes from 4 to 5 and BUILDS[3] becomes BUILDS[4] in the handoff test, #366's j516s Refused assertion becomes Pinned(4), and both golden pins get refreshed again. Happy to help with that rebase if it's useful.
Optional: the 411833a7 build from #247 is still unpinned on both boards, so a follow-up for that would be welcome.
|
The same TEXT build also turns up on the 14-inch J514S, so the row in this PR could cover it too. It is limited to Machine
Without the overrideThe digest matches the J516S row in this PR byte for byte ( With
|
|
Thanks for testing this, and for the full digest. Knowing the J514S loads exactly the same cd05 build as the J516S row here is really useful. The J514S side is already covered: #366 by javanoo6 adds a cd05 row for the J514S with this same build, alongside this PR's J516S row. The two are meant to land together, so nothing needs to change in #390. Nobody has booted #366's pinned row with the override removed yet. Would you be up for trying it on your machine?
If you have time, results from a sustained GPU load and a suspend/resume would be a bonus. To go back afterwards, |
Hey @scottjones thanks for looking into this one. I dont mind doing the rebase once #366 lands. |
|
Boot-tested #366's pinned J514S row successfully, with the prefix override removed.
Relevant lines from this boot (timestamps omitted): There is no Follow-up: load and suspend testingGPU load: completed a 300-second local offscreen EGL/OpenGL ES shader workload on Suspend: unsuccessful before entering sleep. So this is not a successful suspend/resume cycle. I have not compared that failure against the released kernel and cannot attribute it to #366. The machine remained on the same boot; Released-kernel comparisonRestored the released Repeating suspend after confirming DPMS off produces the same |
On a 16-inch M3 Pro (
apple,j516s, T6030), the shipped kernel refuses GPU firmware TEXTcd05af6a828b52e4c2fed20086d3d18a7db42e03a8fd6f8354f9f06e0a61363e, so there's no render node and Hyprland falls back to llvmpipe. This adds a J516S-only row to the T6030 firmware table with the complete measured digest, sizes and marker, so the existing exact lookup admits it withoutg15_accept_text_prefix.Rows still pin only on the machine they name, so nothing changes on the J514S or on other machines. #366 pins the same digest on the J514S, and its regression explicitly rejects it on the J516S. This PR covers that J516S case. Both PRs add a row to the same table and refresh the same golden pins, so whichever merges second needs a rebase and one more golden refresh.
Related: #247 (TEXT varies per unit on the same boot chain), omacom/omarchy#17739 (the user-facing report of this exact J516S failure).
Hardware evidence
apple,j516s apple,t6030asahi,os-fw-versionasahi,system-fw-versionasahi,iboot1-version/iboot2-versionlinux-aurora 7.2.11.aurora14-1,m1n1-aurora 1.6.1.aurora22-1,mesa-aurora 26.3.0_devel.20261031, Hyprland 0.56.2Without the override (every boot):
/dev/drihad onlycard1, Aquamarine loggedCDRMRenderer(drm): Can't create renderer, no matching devices found, and Hyprland sat at about 750% CPU.With
options asahi g15_accept_text_prefix=0xcd05af6a828b52e4(in the UKI vialimine-mkinitcpio):renderD128appeared, Aquamarine loggedCDRMRenderer(drm): Using device /dev/dri/card0, and Hyprland dropped to about 2–4% CPU on eDP-1 at 3456×2234@120. After 7 minutes of uptime there were no asahi/G15 errors, faults, timeouts or recoveries in the kernel log. These are short observations, not a benchmark.Testing
tools/asahi/g15-maintained-handoff-tests.py --mutations(rustc 1.85.0): the actual variant passes, and all five existing mutations fail with their intended messages. The new assertions check the J516S cd05 row's machine, sizes, marker and full digest.hw.rsand the updated test, the test fails (BUILDS.len()left 3, right 4), so it guards the new row.tools/asahi/g15-zero-words-tests.py --mutationspasses with the refreshed pins. Before refreshing, I confirmed the oldhw.rspin (e9b80be9…) matched the unmodified file. The new pins derive from exactly this 18-line insertion.git diff --checkis clean.Not tested