Skip to content

pmdomain: apple: IRQ-safe PMP report entries - #436

Closed
fbalazsy wants to merge 2 commits into
aurora-silicon:integration/aurorafrom
fbalazsy:apple/pmdomain-no-auto-pm-irq-safe
Closed

fbalazsy wants to merge 2 commits into
aurora-silicon:integration/aurorafrom
fbalazsy:apple/pmdomain-no-auto-pm-irq-safe

Conversation

@fbalazsy

@fbalazsy fbalazsy commented Oct 24, 2026 •

Copy link
Copy Markdown

A PMP device-state entry that parents PMGR power states must be IRQ safe, because the PMGR states are (genpd_add_subdomain() WARNs: "Parent ... of subdomain ... must be IRQ safe"). Setting the entry's state takes a spinlock and polls the acknowledgment atomically, so the entry can run with interrupts disabled; apple,irq-safe opts an entry in.

Commits. dt-bindings: power: apple: add apple,irq-safe to the PMP report entries, pmdomain: apple: pmp-report: IRQ-safe entries. No behaviour change without the property.

Rebased onto integration/aurora a1b269f as requested: apple,no-auto-pm is dropped, since #395 covers it.

How tested (MacBook Pro M4 Pro, J616s): the DISPEXT0 and DISPEXT1 PMP device-state entries (apple,irq-safe) parent the dispext0/dispext1 PMGR chains; they power on and off through genpd with no WARN, and the HDMI and USB-C DisplayPort controllers run on them. pmp-report.o builds on the rebased branch; make dt_binding_check on apple,t8140-pmp-report.yaml is clean.

@RyanTheTide RyanTheTide left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I checked the no-auto-PM policy and the PMP report path through its RCU lookup, spinlock and atomic acknowledgement poll. The IRQ-safe opt-in is scoped to entries that declare it.

I pushed Ryan fixup 753f110cfb17. An already-active domain could inherit AUTO_ENABLE from the loader; skipping the probe-time enable did not clear it. The fix clears it for an explicitly marked domain, checks the register update result, and preserves the firmware-owned and inherited-on ownership gates. Your original commits are unchanged.

The original commits 54147fe5dd80, eaf5e7b2eefd and 4d003c4c9f45 still need your Signed-off-by. Please provide your sign-off for them.

The combined tree has passed the apple-dcp host tests, 63/63, and the Asahi KUnit tests, 86/86. The first defconfig plus asahi.config WERROR build passed; the shipping-config build is still running. The final fixup tree also needs the approved M1 Pro and M2 one-shot checks. This is not merge-ready while those gates and the contributor sign-offs remain outstanding.

@RyanTheTide

Copy link
Copy Markdown
Contributor

Final software gates now pass on the combined tree containing these heads and the proposed common config correction in #438. Both defconfig plus asahi.config and the Fedora-base recipe build Image, modules and DTBs with WERROR enabled. The Fedora recipe also covers KUNIT=m. Every requested asahi.config setting survives resolution. Asahi KUnit passes 86/86 and apple-dcp host tests pass 63/63. The targeted J713/J616s binding and DTB checks have no diagnostics.

I also pushed Ryan fixup 3523465e20f97 so the new auto-PM update does not replay the sampled hardware-owned BUSY value. The original three commits still need contributor sign-offs. The M1 Pro/M2 candidate boots and #438 review remain outstanding, so this is not merge-ready.

@RyanTheTide

Copy link
Copy Markdown
Contributor

M2 no-regression qualification now passes with this head in the combined source tree 031f7dec92a1bef6b72509b08c5c597f50474adb. The approved one-shot ran 7.3.0-aurora-t3028. A native Apple GPU compute/readback check verified all 4096 words, the checked kernel fault counters stayed at zero, and device counts, active services and SELinux enforcing matched the baseline. This uses the installed system Mesa to exercise the candidate kernel.

The machine is back on 73w, where the same check passes again. The test kernel, its GRUB entry and fallback units have been removed. The saved default, boot.bin and pinned DTB setting are unchanged.

The M1 Pro candidate check, the three original contributor sign-offs and the #438 common-config review are still outstanding, so this remains not merge-ready.

@RyanTheTide

Copy link
Copy Markdown
Contributor

Final qualification for 3523465e20f973b26d86a02d1f2646753eed4691. The combined test source is 031f7dec92a1bef6b72509b08c5c597f50474adb, tree 36854d3a72e4efdf2c352166498ab436adaf3c48.

Both defconfig plus asahi.config and the Fedora-base shipping recipe pass the full Image/modules/DTB build with WERROR enabled. Every requested fragment value survives olddefconfig. Asahi KUnit passes 86/86, apple-dcp host tests pass 63/63, and targeted J713/J616s binding/DTB checks have no diagnostics. Strict source-style checks pass; commit sign-offs are checked separately. The attribution audit found no new material Gravity implementation blocks. Existing GPL-2.0-only Cody Ho and Niklas Sheth credit is preserved.

The same candidate image passed approved M1 Pro and M2 one-shot smoke checks against fresh normal baselines. Native GPU compute/readback verified all 4096 words on each device, kernel fault counters stayed at zero, and baseline devices, active services and SELinux enforcing were preserved. Both machines are back on 73w with the checks passing again. Test kernels, task GRUB entries and fallback units are removed. The saved defaults, stock boot.bin files and pinned DTB setting are unchanged.

Ryan fixups 753f110cfb17b and 3523465e20f97 clear inherited automatic PM for explicitly marked active domains without replaying the hardware-owned BUSY bit. Code review and shared runtime checks pass. The three original commits still lack contributor Signed-off-by. Not merge-ready until those sign-offs and the #438 review are resolved.

@fbalazsy
fbalazsy force-pushed the apple/pmdomain-no-auto-pm-irq-safe branch from 3523465 to f7bfba3 Compare October 25, 2026 06:53
@fbalazsy

Copy link
Copy Markdown
Author

Added my Signed-off-by to the three original commits (now a7b4330, 926f161, 26a3ce3). Your two fixups are carried unchanged with their authorship and sign-off. The new head f7bfba3 has the same tree as the qualified 3523465e20f97 (3f4e2d369f8532583a2a14b864eba6dcb10edb5f); only commit messages changed.

@RyanTheTide RyanTheTide left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The sign-offs are in, and the trees match what was qualified.

Gates on integration/aurora 653c489 with #394, #435, #436, #446 (the carried #445), #427 and #428 merged (test tree 4582b72703d5), without #438:

  • Universal recipe (Fedora asahi base, asahi.config, olddefconfig, LLVM=1, CONFIG_DRM_WERROR=y): Image, modules and DTBs build with no warnings, and all 130 asahi.config settings survive.
  • KUnit asahi 84/84, drm/apple display set 212/212.
  • apple-dcp host selftests 62/63, the same as the base (dwc3-teardown fails there too).
  • dt_binding_check and CHECK_DTBS clean for the touched bindings and the J616s, J713, J700, M1 and M2 DTBs.

J616s (M4 Pro, 26.6.2 firmware): this kernel boots like the daily one. Wi-Fi, Bluetooth, audio devices, PMP, NVMe, cpufreq and cpuidle all match, with no DART faults or SErrors and no IRQ-safe genpd warnings. With the T6041 display handoff it also drives the internal panel. The Neo smoke boot of the same image is queued.

@RyanTheTide RyanTheTide left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, one more round on this one. #395 merged into integration/aurora an hour ago and brought its own apple,no-auto-pm: the binding entry, ps->no_auto_pm in pmgr-pwrstate.c with the power-on and probe paths, and KUnit tests in pmgr-pwrstate-test.c. On an already active domain its probe path also clears the bootloader's auto-PM bit, which is what the fixups here added.

So this branch now conflicts in pmgr-pwrstate.c, and the binding merges into a duplicate apple,no-auto-pm key in apple,pmgr-pwrstate.yaml, which dt_binding_check will reject.

Could you rebase onto the current integration/aurora and keep only the parts the tree doesn't have yet: apple,irq-safe in the PMP report binding and the IRQ-safe pmp-report entries? The pmgr-pwrstate and no-auto-pm binding commits, and the two fixups on top, can go, since the tree covers them now. If the DISPEXT domains need anything the in-tree version doesn't do, say so and we'll add it on top of that. The approval above was for the old base, so I'll re-run the gates on the rebased branch.

apple,irq-safe on a PMP report entry marks an entry that parents the
IRQ-safe PMGR power states of a coprocessor: genpd requires the parent
of an IRQ-safe subdomain to be IRQ safe as well.

Signed-off-by: František Balázsy <frantisekbalazsy@gmail.com>
A PMP device-state entry that parents PMGR power states (which are IRQ
safe) must be IRQ safe too, or genpd refuses the subdomain. Setting the
state takes a spinlock and polls the acknowledgment atomically, so the
entry may run with interrupts disabled. Opt in with apple,irq-safe.

Tested on a MacBook Pro M4 Pro (J616s): the DISPEXT0 and DISPEXT1
device-state entries parent the dispext0/1 PMGR chains that power the
HDMI and USB-C DisplayPort controllers.

Signed-off-by: František Balázsy <frantisekbalazsy@gmail.com>
@fbalazsy
fbalazsy force-pushed the apple/pmdomain-no-auto-pm-irq-safe branch from f7bfba3 to c254057 Compare October 25, 2026 16:28
@fbalazsy fbalazsy changed the title pmdomain: apple: apple,no-auto-pm power states and IRQ-safe PMP report entries pmdomain: apple: IRQ-safe PMP report entries Oct 25, 2026
@fbalazsy

Copy link
Copy Markdown
Author

Rebased onto integration/aurora a1b269f as requested. Only apple,irq-safe is left (PMP report binding + pmp-report entries); the pmgr-pwrstate and no-auto-pm binding commits and the two fixups are dropped since #395 covers them. The DISPEXT domains work with the in-tree apple,no-auto-pm, so nothing is needed on top of it. dt_binding_check on apple,t8140-pmp-report.yaml is clean.

@fbalazsy

Copy link
Copy Markdown
Author

Folded into #451: the two commits (the binding and the pmp-report entries, rebased as in the last push here) are now part of that series, which the display gate that enables the DISPEXT domains depends on. Closing this one in favour of #451.

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.

2 participants