Repository navigation
soc: apple: clpc: give dense light GPU work the T8140 GPU floor (stacked on #270) - #271
Open
DjDeveloperr wants to merge 2 commits into
Open
DjDeveloperr wants to merge 2 commits into
DjDeveloperr wants to merge 2 commits into
Conversation
On T8140 the GPU floor (DCS 4, fabric 3) follows graphics power: work that keeps graphics powered for 64 ms streams and gets it, while frame-paced loads power graphics up and down and leave it down. Light submissions a few milliseconds apart also let graphics power off between them, so they never stream, yet each of them waits on the fabric, which with the panel off nothing else holds up. Count the GPU driver's submissions through its activity input, and give the floor to work with two or more submissions in each of four sampling periods in a row (16 ms, one 60 Hz frame). A frame-paced load leaves a quieter period in every frame and stays below. The floor keeps the PMP back-off and the vote hold of streaming work. A publication does not trigger a sample of its own. One taken at the start of each frame of video playback finds the CPUs busy and holds the DCS up through their vote. debugfs counts the samples that applied the floor for streaming and for dense work. The T8140 GPU node now links its CLPC. Device trees without that link still find the single T8140 CLPC, as a hint the GPU probes without. (cherry picked from commit 264558d) [DjDeveloperr: without the T6040 host demand, the debugfs reason bits and the floor release counters, which this tree does not have; the sampler has no wake on a cold publication here, so there is none to skip] Signed-off-by: DjDeveloperr <hey@djdev.me>
DjDeveloperr
requested review from
chriskearney,
maralcbr and
scottjones
as code owners
October 29, 2026 01:19
This was referenced Oct 29, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #270, which adds the GPU activity input this counts submissions through and is itself stacked on #244 → #229.
Mirror of aurora-silicon#563 (commit 264558d, merged there as 50eb52d), cherry-picked with
-x.On the Neo (J700, T8140), light GPU submissions a few milliseconds apart never got the GPU floor (DCS 4, fabric 3). Graphics powers off between them, so they never count as streaming. Each submission then waits on a low fabric, which nothing else holds up while the panel is off. gpubench
idle.wakeat a 2 ms gap shows it: 192 µs, against 153 µs on macOS.This gives such work the floor:
apple,clpc = <&clpc>;). Device trees without that link still find the single T8140 CLPC, as a hint the GPU probes without.Conflicts resolved against omacom's
clpc.comacom has none of the aurora code below, so it is left out:
apple,t6041-clpcprovider and lookup;last_vote … reason_bitsline, and thereason |= 4/8bits;apple_clpc_gpu_floor_count(), as it does in aurora; I'll rebase whichever lands second;The
gpu floor samples: streaming … dense …debugfs line sits in the existinggpu:block. The dense logic, the threshold, the T8140 table entry, the DT fallback and the KUnit case are AsahiLinux#563's, unchanged.Results
Measured on the Neo on the aurora tree, comparing aurora integration d266c70 with and without this change. That tree also has the 100 ms PMP hand-back from #245 and the counters from #263. Boots strictly alternated, ×2 each, 4 rounds of each row per boot. Panel off except the power legs and the "panel on" row.
The G17 glue (#270) is the same as aurora's at d266c70, so the dense threshold sees the same counts.
Testing on this branch
asahi.config:drivers/soc/apple/and asahi compile, andasahi.olinks.compile-check.py --per-commit(W=1): pass, 0 new W=1 warnings.check-commits.py: signed off, checkpatch clean.dt-check.py: pass, 0 new problems; the one affected T8140 DTB validates against the binding from soc: apple: clpc: take GPU activity reports from the G17 driver (stacked on #244) #270.apple-clpc-gpu(arm64 QEMU, 16K pages): 3/3 (apple_clpc_gpu_dense_testplus the two lifetime cases from soc: apple: clpc: take GPU activity reports from the G17 driver (stacked on #244) #270). Aurora's fourth case covers the cold-publication wake, which isn't carried.448fc2cfe0f7: run 40799683469. package, KUnit (omacom'saurora.kunitconfig), boot, host tests and the CI self-test pass. A dispatched run skips commits, compile and device trees, so those three were run locally (results above).