From 195fbb2d50dd73699211bbd96b524fb94b34bb09 Mon Sep 17 00:00:00 2001 From: Jonathan Goyvaerts Date: Mon, 2 Nov 2026 01:46:40 -0300 Subject: [PATCH] drm/asahi: g17: accept ray traversal on 25G83 Ray-traversal work is refused on the M4 Pro's 25G83 firmware because a stalled traversal was thought to wedge the GPU with no firmware recovery. That does not reproduce. A BLAS overwritten with a node cycle got a firmware reason-0 recovery in 1.76 s from a compute shader and 0.12 s from a fragment shader, with no MMU fault, and the GPU worked afterwards. Valid traversals are not cut off: one ray that must visit every leaf ran correctly for 31 s in compute and 14 s in fragment, and 16,384 of them finished in a 5 s fragment job. A compute job stops at the driver's own 38 s limit in timeout.rs, and only that client fails. The Vulkan ray tracing CTS lists, 74,833 cases, gave 49,711 Pass, 25,122 NotSupported, 0 Fail and 0 GPU recoveries with the Mesa fixes in aurora-silicon/mesa#139. Two limits remain. A recovery can still fail a running render of another client, as with any GPU hang. And all render work waits behind a fragment job, so a fragment traversal of many seconds freezes the desktop, and past about 24 s the compositor fails with ETIMEDOUT. Signed-off-by: Jonathan Goyvaerts Assisted-by: LLM --- drivers/gpu/drm/asahi/g17/fw/variant.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/gpu/drm/asahi/g17/fw/variant.rs b/drivers/gpu/drm/asahi/g17/fw/variant.rs index 39c8cfcd77a2a..03d5bfccafeca 100644 --- a/drivers/gpu/drm/asahi/g17/fw/variant.rs +++ b/drivers/gpu/drm/asahi/g17/fw/variant.rs @@ -126,8 +126,7 @@ pub(crate) const V25G83: Variant = Variant { mcache: false, // A fragment stage with the few-primitives flag hangs. few_primitives: false, - // A stalled ray traversal wedges the GPU without a firmware recovery. - ray_traversal: false, + ray_traversal: true, // When a tiling pass runs out of memory with this set, the firmware resumes it without // adding memory and the tiler stops silently; macOS always writes 0. fragment_busy: false,