Skip to content

M4: take the PMP, PMGR, display and GPU paths on the 26.6.2 firmware on every M4 Mac - #1171

Merged
DjDeveloperr merged 6 commits into
integration/aurorafrom
soc/t8132-m4-desktop-gates
Nov 7, 2026
Merged

DjDeveloperr merged 6 commits into
integration/aurorafrom
soc/t8132-m4-desktop-gates

Conversation

@DjDeveloperr

@DjDeveloperr DjDeveloperr commented Nov 7, 2026 •

Copy link
Copy Markdown
Contributor

The M4 PMP bridge, PMGR policy, PMP report, telemetry and thermal, the display handoff and the G16 GPU path were gated on the M4 Airs (apple_t8132_air(), J713/J715). What they depend on is the firmware. This gates them on the SoC and the qualified OS firmware, 26.6.2, so the J604, J773g, J623 and J624 take the same path as the J713. Board data, such as panel timing and which USB-C ports exist, stays in the board trees and profiles.

The gate

apple_t8132_qualified_firmware() is true on apple,t8132 with /chosen/asahi,os-fw-version = "26.6.2", which aura publishes (iBoot mBoot-18000.161.10). apple_t8132_firmware_path() is that, or an Air. The Air term keeps the J713 and J715 exactly as they are on any firmware. It can go once the Airs only ever run 26.6.2.

Evidence

From work/adt/:

  • The J604 ADT as iBoot hands it over on 26.6.2 has the J713's PMP: iop,ascwrap-v6, iop-version 1, interrupts 878/877/880/879, and the same iop-pmp-nub sochot-sensors and lts-ctrl-loop. It has the same gfx-tvm, and sgx and gfx-asc at the J713's addresses. Values over 256 bytes are cut from that dump.
  • The J604's 27.0 ADT and the J773g's 26.6.2 ADT carry the J713's soc-device table byte for byte: 34 records, AGX at 12 and DISP at 15, which the bridge checks itself. They also have the same temp-sensor and controller records, and PMGR devices, ps-regs, pwrgate-regs, power-domains and gfx-tvm.
  • Only lts-config, lts-clpc-voltage and the J773g's dvfs-disp-min-state differ. aura hands each Mac's own values to the PMP firmware.
  • The GPU DVFS tables have the shape G16 qualifies: perf-state-count 16, one table, 15 GPU states. Top clocks differ, and the driver keeps each Mac's own values.

Where a board difference is real

I compiled every M4 tree and checked the PMGR policy against what each board's enabled devices use. The J713 policy differs from the other boards in exactly two places:

  • The Airs wire only ATC0/ATC1, so the policy disables the ATC2/ATC3 common, usb and usb_aon domains. The J604 uses ATC3's, and the J773g and J624 use both ports'. Those boards now state these domains okay, as the policy does for ATC0/ATC1.
  • The J773g has no camera, and its tree keeps the ISP domains disabled.

The platform handoff now keeps a non-Air tree's explicit status, except on domains the policy gives the firmware (firmware-owned or inherited-on), such as the DCP CPU domains the SoC tree marks "Locked, don't touch it". After the handoff, every M4 tree ends up with the J713's domain states apart from those two differences, and no enabled device sits on a disabled domain. On the Airs the handoff still overrides any status, as the original J713 loader tree needs.

Panel timing stays per board in dcp-m4-profile.h, which has only the J713 and J715. The J604 and the iMacs need their own profiles before their internal displays are adopted. The J773g has no internal panel. The GPU doesn't wait for a display the loader didn't hand over (#1170).

Commits

  1. PMP bridge (and with it G16's board check), telemetry, thermal and report readiness on the firmware path. The host harnesses model no /chosen.
  2. J604, J773g, J624: state the ATC2/ATC3 domains they wire.
  3. PMGR policy handoff and the pmgr-pwrstate check on the firmware path.
  4. Display DARTs, dcpext routes and external output sleep handling on the firmware path; the retained display ADT check accepts every M4 target-type. Each still acts only on what the loader hands over.
  5. rtkit-helper: the legacy live-MTP path follows apple_t8132_live_mtp(), which includes the J604.
  6. t8132-gpu.dtsi: describe the GPU, mailbox and TVM gate for every M4 Mac, with the TVM parent, apple,sleep-retained on ps_gfx and the PMP report link, and drop the J713/J715 copies.

Still Air-only: the PCIe identity-domain default in apple-dart, which isn't firmware-bound and changes working PCIe on other boards.

Testing

Base

Rebased on integration/aurora 72b828e, after #1166. The GPU, mailbox, TVM parent, sleep-retained and PMP report link move from t8132-j713-j715.dtsi into the shared t8132-gpu.dtsi. The J713/J715 dtbs then differ only by three status = "okay" lines that were the default anyway.

🤖 Generated with Claude Code

…ied firmware

The PMP power-vote bridge, its telemetry, the PMP thermal driver and the
T8132 report readiness were gated on the Airs, so the G16 GPU, which
needs the AGX vote and PMP cooling, could not come up on the J604, J773g
or the iMacs. What these paths depend on is the PMP firmware, not the
board.

The J604's ADT as iBoot hands it over on OS firmware 26.6.2 (iBoot
mBoot-18000.161.10), the firmware the J713 path is qualified on, has the
J713's PMP: iop,ascwrap-v6, iop-version 1, the same interrupts, and the
same iop-pmp-nub sochot-sensors and lts-ctrl-loop. Its 27.0 ADT and the
J773g's 26.6.2 ADT carry the J713's soc-device table byte for byte (34
records, AGX at 12 and DISP at 15, which the bridge checks itself), the
same temp-sensor and controller records, and the same PMGR devices,
ps-regs, pwrgate-regs, power-domains and gfx-tvm. Only lts-config,
lts-clpc-voltage and the J773g's dvfs-disp-min-state differ; the boot
loader hands each Mac's own values to the PMP firmware.

Add apple_t8132_qualified_firmware(), true on T8132 with the boot
loader's /chosen/asahi,os-fw-version "26.6.2", and
apple_t8132_firmware_path(), which also keeps the Airs on any firmware
as before, and use it for the bridge (and so the G16 board check), the
telemetry, the thermal driver and the report. J713 and J715 behave as
before. The host harnesses model no /chosen.

Signed-off-by: Diljit Singh <hey@djdev.me>
On the M4 firmware path the PMGR policy disables ATC2 and ATC3, which
the Airs do not wire. The J604 wires ATC3 and the J773g and J624 wire
both; their USB devices sit in those ports' common, USB and USB AON
domains. State those domains okay, as the policy does for ATC0/ATC1, so
the policy keeps them.

Signed-off-by: Diljit Singh <hey@djdev.me>
Which PMGR domains Linux may touch, and which the firmware owns, follows
from the firmware: the J604 and J773g ADTs have the J713's PMGR devices,
ps-regs, pwrgate-regs and power-domains. The platform handoff and the
pmgr-pwrstate check that enforce that policy ran on the Airs only.

Run them on the M4 firmware path. On the Airs nothing changes: the
policy still overrides any status, as the original J713 loader tree
needs. Other trees state what their board wires, so the handoff keeps
their explicit status, except on domains the policy gives the firmware
(firmware-owned or inherited-on), such as the DCP CPU domains the SoC
tree leaves disabled; domains without a status take the policy's.

Compiled and checked against the J713 policy, every M4 tree then ends
up with the J713's domain states except the ports it wires beyond
ATC0/ATC1 (ATC3 on the J604, ATC2 and ATC3 on the J773g and J624) and
the J773g's ISP domains (no camera). No enabled device is left on a
disabled domain.

Signed-off-by: Diljit Singh <hey@djdev.me>
…fied firmware

The retained internal display DARTs, the handed-over dcpext routes,
external output sleep handling and the dcpext and dispext DARTs were
gated on the Airs. They depend on the 26.6.2 display firmware and on the
SoC's DCP and DART layout, which every M4 tree describes the same way
(t8132-dcp.dtsi, t8132-dcpext.dtsi); the J604 26.6.2 and J773g ADTs
place the disp0 and DCP DARTs' page-table regions as the J713's does.

Use apple_t8132_firmware_path() for those gates and accept every M4
target-type in the retained display handoff's ADT check. Each path still
acts only on what the boot loader hands over, so a board whose loader
hands nothing over is unchanged; J713 and J715 are unchanged. Panel
timing stays per board in the M4 DCP profiles, and the PCIe
identity-domain default stays with the Airs.

Signed-off-by: Diljit Singh <hey@djdev.me>
The legacy inherited-helper path served only the Airs, but it is about
the live MTP keyboard and trackpad, which the J604 has as well
(apple_t8132_live_mtp()). Use that predicate. J713 and J715 are
unchanged; the J773g and the iMacs have no MTP.

Signed-off-by: Diljit Singh <hey@djdev.me>
t8132.dtsi gives every M4 Mac the J713's GPU, mailbox and GFX TVM gate,
disabled until "a board's firmware and board data are qualified"; only
the J713/J715 tree enabled them, with the TVM parent of the GFX domain
and the PMP report. All of it follows the 26.6.2 firmware: the J604
(26.6.2) and J773g ADTs place the sgx and gfx-asc at the J713's
addresses with the same interrupts and gfx-tvm, and the boot loader
checks those again and fills or disables the GPU. A Mac's DVFS table
comes from its own ADT, which the driver qualifies by shape (16 source
states on all three).

Describe them in t8132-gpu.dtsi for every M4 Mac and drop the J713/J715
copies; those boards keep their explicit ps_gfx status. Their dtbs
differ only in three status = "okay" lines that were already the
default; no M4 dtb gains a dt-validate warning.

Signed-off-by: Diljit Singh <hey@djdev.me>
@DjDeveloperr
DjDeveloperr merged commit 38b2b8b into integration/aurora Nov 7, 2026
4 checks passed
RyanTheTide pushed a commit to rolotrealanis98/linux that referenced this pull request Nov 8, 2026
Picks up aurora-silicon#1170 (G15/G16 on by default) and aurora-silicon#1171 (T8132 display, PMP and
GPU gates on SoC plus firmware 26.6.2). No conflicts.

Signed-off-by: Diljit Singh <hey@djdev.me>
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