Skip to content

pmdomain: opt-in T6000/T8112 PMP and T8112 AVD VMAX (rebased) - #1064

Closed
RyanTheTide wants to merge 11 commits into
integration/aurorafrom
pmp/t5403-t6000-t8112
Closed

RyanTheTide wants to merge 11 commits into
integration/aurorafrom
pmp/t5403-t6000-t8112

Conversation

@RyanTheTide

@RyanTheTide RyanTheTide commented Nov 7, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Enable opt-in T6000/T8112 PMP boot inputs and qualify the T8112 AVD VMAX vote. Normal board DTs keep PMP disabled; J413 baseline decode keeps its physical-only domain. With APPLE_USE_PMP, AVD uses physical core plus PMP performance domains, requests floor 2 only while active, and releases the floor before residency.

This replaces conflicting #1020 without rewriting its branch. Rebased onto integration/aurora 68db611bf7e3a2010eaa87be2b4b7043e27f4019; the binding conflict preserves integrated T6020/T6030/T6031/T8122 compatibles plus T8112. Six commits are patch-identical. Candidate: 8c8afadf412cb35695149c7dd4491ffeda7fe25f. Paired boot-data change: aurora-silicon/aura#88. #933 is complementary and does not supply these boot inputs.

Validation

New-head buildbox receipts: h-49539 rc=0 integration Image, complete matching modules and 5/5 DT profiles; h-49541 rc=0, 32/32 arm64 QEMU PMP KUnit. Paired Aura h-49547 rc=0 synthetic suite and compact Stage 2 (supported EXTRA_CFLAGS=-Oz, linker guard intact). h-49556 rc=0, complete-history host registry 195/195, with 1,509,666 reachable commits in a non-shallow source, historical controls present and all 195 per-job logs retained. Buildbox diff and 7/7 commit-trailer checks passed. Hashes and retained failures are in the receipt comment below.

Earlier receipts apply to the original #1020 head only: h-48338 KUnit, h-48345 DT profiles and h-48576 Image/modules. Missing-source and default-build failures are preserved. The requested integration config lacks SELinux support; PWR must build/receipt an enforcing qualification config before AVC checks.

Hardware gate — do not merge

Keep this PR draft with Aura #88 until PWR independently qualifies M2 J413/T8112 and M1 Pro J316s/T6000 through controller-approved RAM-only one-shots with bootguard fallback.

Require fresh PMP/RTKit startup, running state and ordinary ACKs; M2 bit-exact H.264/HEVC decode with measured uplift, active floor-2 plus residency ACK, and idle floor-0/release including error unwind; matched before/after idle-power measurements on both devices; 0 new boot-log warnings and SELinux enforcing with 0 AVC denials; verified rollback with unchanged persistent payload hashes and read-only xART ledger. M1 Pro does not inherit the T8112 vote qualification.

Latest merge check against integration/aurora 6ea4729159cc is clean; the tested head stays unchanged, as requested. No target hardware was used for this integration refresh. The old RAM-only kit remains incomplete and unqualified and must be refreshed against these exact heads before any trial. Never stop/unbind a running PMP: recover through the unchanged fallback boot.

Admit the T8112 fallback compatible, distinguish required runtime ADT identifiers from static DTS data, and allow the existing T600x PIO address/size arrays.

Signed-off-by: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com>
Assisted-by: LLM
Enable PMP with the existing APPLE_USE_PMP consumer graph and expose running status on report providers without sensors. Keep baseline DTs disabled pending hardware qualification. Document every fallback-path input and the original transport configuration, test both board graphs and the distinct t-4501 loader profile, and execute the report-validation KUnit vectors on the host.

Signed-off-by: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com>
Assisted-by: LLM
T8112 AVD uses the PMP-v2 SOC-DEV-DVFS entry 0xb0, with a default floor
of 2 requesting SOC VMAX. Qualify only that entry in the update aperture.
Require a running, non-deferred PMP and acknowledged residency before
raising the floor, and withdraw the floor before residency on power-off.

Keep a locked, provider-owned whole-word shadow so changing the default
floor preserves the other request classes without reading a request entry.
Expose the host shadow, residency ACK and the T8112 SOC achieved-state
edge packet for safe runtime verification. No request-entry readback is used.

Exercise encoding, range limits, other-class preservation, stopped and
deferred PMP rejection, ACK timeout and release in arm64 KUnit emulation.

Signed-off-by: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com>
Assisted-by: LLM
Constrain the qualified T8112 PMP device DVFS request to entry 0xb0 and
floor 2. Document whole-word ownership of the other request classes.

Signed-off-by: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com>
Assisted-by: LLM
Attach the existing bit-10 AVD report domain beside the physical core
and request SOC VMAX through SOC-DEV-DVFS entry 0xb0. The report's physical
parent retains the existing ancestry. Runtime PM releases the performance
floor before withdrawing residency, without enabling global PMP domains.

Signed-off-by: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com>
Assisted-by: LLM
The report provider now writes provider-owned whole-word DVFS shadows.
Mirror those members and GENMASK_ULL in the host boundary so the extracted
write function compiles. Extract the DVFS validator when present so newer
report entry probes compile too, while retaining older source support.

Keep the graph assertions and mutation compilation/runtime checks intact.

Signed-off-by: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com>
Assisted-by: LLM
Keep the existing physical AVD domain when APPLE_USE_PMP is absent. The opt-in profile adds the PMP report domain as the performance domain, so a stopped or disabled PMP cannot block ordinary baseline decode.

Teach the combined T6000/T8112 profile test about the T8112 core/perf graph and delete the performance-domain name in the legacy loader profile.

Signed-off-by: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com>
Assisted-by: LLM

RyanTheTide commented Nov 7, 2026 •

Copy link
Copy Markdown
Contributor Author

t-5403 software receipt refresh for Linux 8c8afadf412cb35695149c7dd4491ffeda7fe25f (replacement draft #1064) and Aura a0201cd605b8b2317868b2033f0d91c52f6f8bae (#88). Linux #1020 is superseded by #1064 and preserved for comparison; the conflicting series was rebased on a new branch without force-pushing. Aura merges cleanly and was not rebased.

Gate Controller receipt Result
arm64 QEMU PMP KUnit h-49541 rc=0, 32/32, zero skips: startup 14, T8112 DVFS 4, report 14
Integration Image + complete matching modules h-49539 rc=0, release 7.3.0-g8c8afadf412c; Clang 22.1.6, Rust 1.97.1, bindgen 0.73.2
Five baseline/PMP/legacy-loader DT profiles h-49539 5/5 PASS, regenerated at the rebased head
Aura synthetic PMP suite + bare Stage 2 h-49547 rc=0, supported EXTRA_CFLAGS=-Oz compact build; original linker boundary retained
Complete-history host registry h-49556 rc=0, 195/195 PASS; non-shallow history, 1,509,666 reachable commits, historical controls present, 195 per-job logs retained

SHA256 receipts:

  • Image: d32261c2a51b82ac629c56fca47ae19bb6b6a4fc0a72af6a50976031ea035169
  • Complete modules archive: a9925c3b8a71edcf763ddae82e17c76afb64307c65d6a2efc0367b6ee39d2352
  • Integration config: 23c3008c4fe93f2b218163633645e2ef8018338fa5fd68b719d04b4cf3f5e69e
  • Aura binary: d4bd1a4318ab74d5bf34f885fedcfd30b0856427ad1d3141a30e8782fdf62832
  • Kernel build log: 086b9b5cb9f61a7ae572eb8dfcbc150bb969f44bb6cb9e60e8c89d64e1f1b460
  • Aura build log: 890ff8ceba7ace36c482b07e4b02a21bbf1bcd4e2f98e7813caecd7b548df53e
  • Host suite summary: a27285f84fb8853249dcd2c4f0ce048f7a5668af968ce76e4d40f70fd981064d
  • All host-test logs archive: 144ff62ab24369125a51f687a4bbc0b6bd542d7f7a5d5d240b0fc90ab29d1d09
  • KUnit test log: cb661a9bda1e389598779a0fcc056cd656004c321646f1d796d3b7227cfd48df

The Aura build uses USE_CLANG=1 ARCH=aarch64-linux-gnu- RELEASE=1 CHAINLOADING=1 ESP_STAGE2=1 BUILTIN_LOGO=aurora EXTRA_CFLAGS=-Oz. Symbols prove _file_vital_end=0x11a9e8 < _file_limit=0x120000. All requested kernel/Aura/KUnit artifacts returned, and local hashes of Image, modules and Aura binary match the controller receipts.

Retained failures: h-48570 source bundle missing; h-48573 source lacked a Makefile; h-49537 synthetic suite passed but default -Os raw link hit the DCP buffer boundary; h-49540 stopped before suite execution because the source checkout had no origin URL (fixed in h-49556). The old h-48576 kernel receipt was green for the original #1020 head only. No failed/queued job is represented as a pass. Default-build base control h-49555 rc=2 reproduced the same DCP boundary failure at original Aura base 8e7c2f5631a9 with the same toolchain, proving this observed default-build problem predates the PMP patch. The compact build is a documented setting difference, not a claimed default-build pass. git diff --check and 7/7 Linux commit-trailer checks passed on the buildbox.

Latest fetched base tips integration/aurora 6ea4729159cc and Aura main dd82cf960e86 both merge cleanly with the unchanged tested heads. No force push, ready-for-review transition or merge was performed.

PWR hardware gate remains. Independently qualify M2 J413/T8112 and M1 Pro J316s/T6000 via controller-approved RAM-only one-shots with bootguard fallback and active speaker protection. Require fresh PMP startup/running/ACKs; matched baseline/candidate/post-decode idle-power measurements on both devices; M2 bit-exact H.264/HEVC with measured uplift, active floor 2/residency ACK and idle floor 0/release including unwind; 0 new boot-log warnings; and SELinux enforcing, active audit collection, 0 AVC denials. The integration receipt's config lacks SELinux: PWR must rebuild/receipt the matching enforcing configuration before AVC qualification and use that identical config on both sides of the DT comparison. Verify unchanged persistent hashes and read-only xART ledger after fallback rollback. No reference hardware was used here; both active PRs stay draft. The old kit remains incomplete/unqualified until refreshed against the new source/artifact manifest.

Picks up the tools/aurora-sep source-check fix (c60537c) and the
current release branch, so CI runs against today's base.

Signed-off-by: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com>
Assisted-by: LLM
@RyanTheTide

Copy link
Copy Markdown
Contributor Author

M2 (J413, T8112) hardware result, 2026-11-08: the vote works, but decode gets slower. Keeping this in draft.

I tested on the tethered M2 with a one-shot aura-try Stage 2 and a one-shot kernel, restoring production after each trial. Nothing was committed and Stage 1 was not touched.

  • Kernel 7.3.0-aurora-fleet30avdcap: integration/aurora 50d5865e + this PR's head 22b95dcb, local merge. One conflict, in tools/asahi/run-host-tests.py: integration has since added the wrong-control/maverick-event/stowe-offset pmu-rtc mutations. I kept those and added pmp-validation-tests.py. t6000-t8112-pmp-dt-tests.py and pmp-validation-tests.py pass on the merge.
  • Stage 2: the M2's production aura v1.0.0b5 plus aura#88 (13ae7e6c, CI release build). The only change from the live boot.bin is the j413 DTB: either the PMP-off build or the APPLE_USE_PMP build from this tree.
  • avd-bench: Q16, 3 passes per clip, per-frame hashes. fps below.
Boot H.264 1080p HEVC 1080p H.264 4K HEVC 4K Q1 H.264 bit-exact
production fleet30, PMP off 1707-1726 1920-1942 440-446 485-490 473 yes
this PR + aura#88, PMP off 1708-1727 1910-1931 438-443 488-490 457 yes
this PR + aura#88, APPLE_USE_PMP 1107-1111 1231-1242 284-286 314-315 314 yes

What works:

  • PMP starts under Linux on the M2. RTKit comes up, the report shows running: 1, and the AVD binds with the core + perf domains.
  • The vote behaves as designed. I sampled at 10 Hz through a 40-pass H.264 4K decode:
    • While decoding: pmp-avd-sys is on, bit 10 is set in both requests_on (0x590) and acknowledged (0x105b0), and dvfs_request@b0: 2.
    • At idle: the domain is off, bit 10 is clear in both, and the request is back to 0.
  • No DART faults, no AVC denials (SELinux enforcing), no kernel errors.

What fails:

  • With PMP running, every codec decodes 36% slower than with PMP off.
  • Holding floor 2 doesn't recover it: the long 4K run stayed at 283-287 fps.
  • soc_dvfs_state read 0x0 for the whole run.

So starting the PMP drops the AVD/SoC below the state the boot firmware leaves behind, and the 0xb0/level-2 request doesn't raise it. The M2's clock cap (66% of macOS) stays as it was, and turning on APPLE_USE_PMP on the M2 today would add a 36% regression on top. Normal DTs keep PMP off, so the PMP-off rows above are what a merge alone would change: nothing measurable.

Next step: find which SOC-DEV-DVFS entry and level macOS raises on T8112 during AVD decode. I'm not guessing entry/level values against live PMP firmware. M1 Pro (T6000) was not tested.

Idle power wasn't a matched comparison (different uptimes at sampling, battery charging), so I don't claim an idle-power result.

One unrelated note: one warm reboot of the production fleet30 boot hung after journald stopped. A VDM reboot debugusb over the tether recovered it, and every later reboot was clean.

Add an explicit request-class binding and place the T8112 AVD floor in bits 51:48 while retaining the legacy low-five-bit encoding when the property is absent. Report the full provider shadow and cover VMAX, VNOM, release, lane preservation and ordering in KUnit.

Signed-off-by: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com>

Assisted-by: LLM
@RyanTheTide

Copy link
Copy Markdown
Contributor Author

t-5739 follow-up is now in 4df84108fc39: T8112 AVD keeps entry 0xb0/level 2 but selects request class 0x25, so active VMAX is 0x2002000000000000 (bits 51:48), VNOM is 0x2001000000000000, and idle release is 0x2000000000000000. The absent-property path retains the legacy bits 4:0 encoding; debugfs now reports the complete sent shadow word. No M2 DT enables PMP.

Buildbox receipts (controller-retained logs): h-50964 rc=0 full arm64 W=1 Image/modules plus 5/5 PMP DT profiles (build log SHA256 f83cb027942a4114078d5ee2119b26cb82ece6d4e24437c8e390664fb15db53e); h-50947 rc=0, 32/32 arm64 QEMU PMP KUnit (test log f3088aaa76e6621880d86c97deb9b4bccf7a15619c92b932fcec0f9b755ab438); h-50950 rc=0, 27/27 extracted-provider graph cases; h-50966 rc=0 binding schema/example validation. Retained pre-fix failures h-50943/h-50944 caught the discarded dynamic bitfield mask; h-50948 completed the same W=1 compile before its optional schema phase found the buildbox tool absent, corrected by isolated h-50966.

t-5740 remains the hardware gate: controller-approved RAM-only M2 J413 one-shot with bootguard fallback, require class-25 shadow only while AVD is runtime-active, SOC state toward 2 (or document an already-high state), recovery toward the AVDCAP PMP-off decode baselines with bit-exact H.264/HEVC output, clean idle/error-unwind release, and unchanged persistent hashes/read-only xART after fallback. No target hardware was used here.

@RyanTheTide

Copy link
Copy Markdown
Contributor Author

M2 (J413) hardware qualification of 4df8410 (class 0x25 AVD vote): the vote works, the cap stays

Same-kernel A/B on the M2, 2026-11-09. Kernel: integration/aurora f611d92 + this branch 4df8410 (local merge; the only conflict is tools/asahi/run-host-tests.py, resolved by keeping integration's pmu-rtc mutations and adding pmp-validation-tests.py). PMP-off row: that kernel on the production boot chain (j413 DT with PMP disabled). PMP-on row: one-shot Stage 2 trial with aura#88 on aura v1.0.0b8 and only the j413 DTB rebuilt with APPLE_USE_PMP. Nothing was committed. Method: avd-bench Q16, 1 stream, 3 passes per clip, every frame hash-checked against software decode; Q1 h264 1080p; macsmc power at 2 Hz, idle after at least 4 min uptime. A 10 Hz debugfs/genpd probe ran during a 40-pass 4K decode.

h264 1080p hevc 1080p h264 4K hevc 4K Q1 h264 idle system mW
PMP off 1722-1724 1922-1940 439-446 486-490 470 3778
PMP on (this head) 1103-1108 1236-1244 285-286 313-315 315 3812
  • The PMP starts and reports running. Every frame is bit-exact. There are 0 DART faults, 0 AVC denials (enforcing), 0 kernel errors, and no new warnings.
  • The vote mechanics are correct. While decoding (262 samples), pmp-avd-sys is on, requests_on is 0x590, acknowledged is 0x105b0, and dvfs_request@b0 is 0x2002000000000000 (VMAX). At idle (186 samples) the word is 0x2000000000000000, bit 10 is clear, and both domains are off.
  • Decode with PMP on is still 36% slower on every clip, the same as with the old encoding. soc_dvfs_state stayed 0x0 in all 448 samples, and idle power did not improve.

Result: this PR stays draft. No M2 DT should enable PMP. The class-0x25 word on its own does not raise the AVD/SoC performance state once the PMP owns it. The next step is to find which other request or acknowledgement macOS makes before soc_dvfs_state moves. M1 Pro (T6000) is not tested yet.

T8112 does not accept device DVFS constraints until the SOC achieved-state report has been published. Prime that report through its PTD update entry when it is still zero, wait for readiness, and only then send the AVD floor.

Record every residency, state-prime and DVFS store in debugfs, and cover the ready, timeout, rollback and retry paths with emulated-MMIO KUnit.

Signed-off-by: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com>

Assisted-by: LLM
@RyanTheTide

Copy link
Copy Markdown
Contributor Author

t-5806 follow-up is in d62d3ebbd1ce: before the first T8112 device-DVFS constraint, Linux now makes the SOC achieved-state report ready. If entry 0x9 is still zero, it writes prime word 1 at update offset 0x10048, waits for a nonzero SOC state, and only then writes AVD class-0x25 VMAX at entry 0xb0. A readiness failure withdraws AVD residency and sends no floor. Debugfs reports the complete residency, state-prime and DVFS offsets/words. No M2 DT enables PMP.

Buildbox receipts (controller-retained logs): h-51002 rc=0 full arm64 W=1 Image/modules and 5/5 DT profiles (log SHA256 75bece27e572bd2a5b9c04a12e5bd660c8cf611dab90e7abdc1d37f818372eb5, Image 21153813ec1d6d3a72dad442f23b01349cdf2036a0596fb1de05196322763279); h-51004 rc=0, 33/33 arm64 QEMU PMP KUnit (test log 57b26aeee18cc845129640d03c113a09424ec48139aa4bddb31180b16ed2fe76); h-51003 rc=0, 27/27 extracted-provider graph cases (run log 9bad294cd88f579561d212c0aaa31f312197d7ccbfc7cfdf6b34f7d3ac7e9e22); h-51005 rc=0 dt-schema binding/example validation (log 107d1d5b2c87e46626a4e840822b63eccd2de3169ce22f61e64ac6a57c0de17c). The PR branch was fast-forwarded; no force push.

Exact M2 trial for MEDIA-AVD: refresh kits/test/20261108-pmp1064a as release 7.3.0-aurora-pmp1064b with this pushed head, matching modules, and only the one-shot J413 APPLE_USE_PMP DTB. Remove the old kit's night()/timer/activity checks; display/backlight-off is best-effort only. Under the M2 lock, run mt.sh install, nopmp, pmp, then back. Repeat the same Q16 three-pass H.264/HEVC 1080p/4K plus Q1 control and 10 Hz probe. Require dvfs_state_prime@9 offset 0x10048, word 1, sent: 1 ready: 1; nonzero soc_dvfs_state; bit-10 residency ACK; class-25 word 0x2002000000000000 at 0x10580; bit-exact output; and PMP-on speed at least PMP-off. Also require clean release/unwind, no new warnings/DART faults/AVCs, bootguard fallback, unchanged persistent hashes, and the read-only xART ledger. Stage 1 and macOS/xART remain untouched.

@RyanTheTide

Copy link
Copy Markdown
Contributor Author

M1 Pro (J316s, T6000) first hardware rows (same kernel, aura#88 on b8, j316s rebuilt with APPLE_USE_PMP, one-shot trial)

h264 1080p hevc 1080p h264 4K idle system mW decode system mW (h264 1080p)
PMP off 1052-1085 1226-1233 284-286 6394 7866
PMP on 1084-1098 1175-1203 not reached 5500 6769
  • The PMP starts ("PMP manages fabric and DCS p-states", report running) and every frame is bit-exact. There are 0 DART faults and 0 kernel errors, SELinux is enforcing, and the AVC count is unchanged from the PMP-off boot.
  • Idle power is 0.9 W lower (-14%) and decode power is 1.1 W lower. H.264 decode is equal. HEVC 1080p is 3% lower (3 passes each), which needs a longer rerun.
  • The bench timeout cut the 4K and Q1 rows. The T6000 half is therefore promising but not qualified yet. This PR stays draft.

@RyanTheTide

Copy link
Copy Markdown
Contributor Author

Hardware rows for d62d3eb (SOC DVFS-state prime): the prime is sent and ready, the cap stays at 64%

Kernel: integration/aurora 6cf0ab0 (fleet36) + this branch d62d3eb, local merge (same run-host-tests.py resolution as before). Same-kernel A/B, one-shot trial Stage 2: aura b8 + aura#88, and the Mac's live production DTB with only this PR's APPLE_USE_PMP delta applied. Nothing was committed. Method unchanged: avd-bench Q16 ×3 per clip, every frame hash-checked, Q1 control, macsmc power, 10 Hz debugfs probe during a 40-pass 4K decode.

M2 (J413)

h264 1080p hevc 1080p h264 4K hevc 4K Q1 h264 idle system mW
PMP off 1708-1730 1909-1942 438-447 486-490 473 4345
PMP on (d62d3eb) 1103-1109 1228-1236 283-287 313-315 314 3764
  • In all 450 samples: dvfs_state_prime@9: offset 0x10048 word 0x1 sent: 1 ready: 1.
  • While decoding: requests_on 0x480, acknowledged 0x104b0, dvfs_request@b0 at 0x10580 = 0x2002000000000000. At idle the word is 0x2000000000000000 and the domains are off.
  • soc_dvfs_state stayed 0x0 in every sample. Decode is still 64% of PMP-off on every clip, the same as 4df8410.
  • Every frame is bit-exact. There are 0 DART faults, 0 AVC denials and 0 kernel errors.

M1 Pro (J316s, T6000; no AVD vote)

h264 1080p hevc 1080p h264 4K hevc 4K Q1 h264 idle system mW
PMP off 1088-1093 1200-1231 284-286 313-315 300 6004
PMP on 1078-1097 1166-1206 not run not run 285 5507

The 4K PMP-on rows were cut to keep the shared-machine lock near its limit. PMP-on is not at least PMP-off on every row (HEVC -2%, Q1 -5%), although idle power is 8% lower.

Result: this PR stays draft and no DT enables PMP. On the M2 the "ready" condition is reached while soc_dvfs_state reads 0. Either the ready check accepts a value that does not mean the SoC state moved, or the PMP needs another input before it applies the AVD floor.

The T8112 DVFS ready handshake uses range base entry 8. Entry 9 is the separate SOC achieved-state report and cannot qualify the range.

Prime entry 8 when needed, retain the nonzero achieved word which admitted device constraints, and expose both the gate result and live SOC report through debugfs.

Assisted-by: LLM
Signed-off-by: Ryan Murray <81541646+RyanTheTide@users.noreply.github.com>
@RyanTheTide

Copy link
Copy Markdown
Contributor Author

t-5835 follow-up is in a650b81c7187. The prior gate added the SOC domain index to the DVFS-STATE range base. T8112 readiness instead belongs to base entry 8: report offset 0x80, with optional prime word 1 at update offset 0x10040. Entry 9 at 0x90 is the separate live SOC achieved-state report.

The provider now requires and retains the nonzero entry-8 achieved word before sending the first device constraint. Debugfs reports the complete residency write, optional entry-8 prime, retained entry-8 achieved word, class-0x25 AVD write, and live entry-9 SOC state. KUnit proves that a nonzero entry 9 cannot satisfy a zero entry-8 gate, including timeout/rollback and later recovery. No DT change was made; no production DT enables PMP. The branch was fast-forwarded from d62d3eb; no force push.

Buildbox receipts (controller-retained logs): h-51025 rc=0, full arm64 W=1 Image/modules plus 5/5 PMP DT profiles (build log SHA256 16cc936c40561015e6d064a40f281e85df1fa66d835476eee5bc8d0769d8510c, Image 09bc82dc984b7787aaf23444891f45a6b21ef2b954e5461ca21321950d68e1ec); h-51022 rc=0, 33/33 arm64 QEMU PMP KUnit (test log 4f1603db06d3ae4918aab98c3d2bf3d1c160912eda4f5b18c3e39c78ae8f65d2); h-51024 rc=0, 27/27 extracted provider/start/graph cases under -Wall -Wextra -Werror plus ASan/UBSan (run log 9bad294cd88f579561d212c0aaa31f312197d7ccbfc7cfdf6b34f7d3ac7e9e22); h-51023 rc=0 dt-schema binding/example validation (build log 9220078e014bc014558d46be59809123f943f1540f3513265e3daa5787ce1680).

Exact M2 trial for MEDIA-AVD:

  1. Reuse kits/test/20261108-pmp1064a as a fresh pmp1064c release: kernel release 7.3.0-aurora-pmp1064c, pushed head a650b81, matching modules, and a distinct traces/codec/20261109-avd-pmp1064c output directory. Refresh only the one-shot J413 trial DTB from the live production DT plus the existing APPLE_USE_PMP delta using work/media/MEDIA-20261108/avd/j413-pmp-patch.py/DTOVR. Do not alter the production DT.
  2. Remove the old kit's night() calls and every timer/activity/display/session/playback gate before use. Display/backlight-off is best-effort only. Keep the MEDIA M2 ownership lock, speakerguardd, one-shot bootguard fallback, and read-only macOS/xART handling.
  3. Under the M2 lock, run LV=pmp1064c MAC=m2 bash mt.sh compose, then install, nopmp, pmp, and back with the same environment.
  4. Same-kernel A/B: three Q16 passes each of H.264/HEVC 1080p/4K, Q1 H.264 1080p, and the 10 Hz debugfs/genpd probe during the long 4K run. Keep every-frame software-reference hash checks and power capture.
  5. PMP-on admission must show AVD residency bit 10 acknowledged; dvfs_ready_achieved@8: offset: 0x80 with a retained nonzero word and ready: 1; and class-0x25 VMAX 0x2002000000000000 at 0x10580. If entry 8 began at zero, also require dvfs_ready_prime@8: offset: 0x10040 word: 0x1 sent: 1; an already nonzero entry 8 may legitimately show sent: 0.
  6. During decode require entry-9 soc_dvfs_state at offset 0x90 to become nonzero/state 2 and PMP-on throughput to be at least the PMP-off row for every clip. At idle/error unwind require class-0x25 release 0x2000000000000000 before residency clear. Require bit-exact output and no new kernel warnings, DART faults, or AVC denials.
  7. back must exercise bootguard fallback and leave persistent hashes plus the read-only xART ledger unchanged. Stage 1 and the macOS/xART volumes remain untouched.

No target hardware was used for this change; MEDIA-AVD owns the M2 qualification.

@RyanTheTide

Copy link
Copy Markdown
Contributor Author

M2 (J413) hardware rows for a650b81 (entry-8 ready gate): the gate passes, and the SoC state still never rises

Kernel: integration/aurora 5e1fc5c + this branch a650b81, merged locally (same run-host-tests.py resolution as before). The A/B uses one kernel and a one-shot aura-try RAM trial: aura b8 + aura#88, with only the J413 DTB swapped. PMP off is the live DTB plus this PR's inert report@a properties. PMP on adds APPLE_USE_PMP (the full profile, plus report@4 pmp-gfx apple,always-on). Nothing was committed.

PMP off PMP on change
AVD Q16 h264 / hevc 1080p (fps) 1701-1730 / 1906-1928 1105-1111 / 1226-1232 -36%
AVD Q16 h264 / hevc 4K (fps) 440-447 / 485-489 284-287 / 313-314 -36%
AVD Q1 h264 1080p (fps) 466 311 -33%
glmark2 (3 runs) 9637 / 9623 / 9645 7311 / 7145 / 7180 -25%
JPEG encode 1080p / 4K (fps) 456-496 / 143-144 390-424 / 120 -14% / -17%
ANE (H14 ane-run) p50 (us) 132 170 +29%
single-thread memcpy (GB/s) 33.7 9.3 -72%
idle system power 1.38-1.55 W 0.98-1.12 W -0.4 W
  • dvfs_ready_achieved@8: offset 0x80 word 0x1 ready: 1. While decoding, requests_on is 0x590 and acknowledged 0x105b0, and dvfs_request@b0 is 0x2002000000000000; at idle it is released to 0x2000000000000000. soc_dvfs_state at 0x90 read 0x0 in all 408 probe samples.
  • Every frame is bit-exact, with 0 DART faults, 0 AVC denials and no new kernel warnings.
  • The fall is the same for CPU memory bandwidth, the GPU, AVD, JPEG and the ANE. So with the PMP running, the whole SoC's memory/fabric state stays at its idle level. The AVD request alone cannot lift it, and the GPU bit (asserted the whole boot) does not either. The request word matches what the protocol analysis expects, so the missing piece is SoC-wide, not another AVD PTD class. Follow-up research is in progress.
  • This PR stays draft. No J413 DT enables the PMP.

Raw data: traces/perf/20261109-pmpm2 on the lab disk.

@RyanTheTide

Copy link
Copy Markdown
Contributor Author

Replaced by #1637: the T8112 parts were reworked in #1571 and carried there.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant