Repository navigation
arm64: dts: apple: t6050-j714s: Run the PMP and report the GPU to it - #1376
Conversation
Enable the PMP on J714s with its boot arguments and firmware properties (J714sAP ADT), its report, and the PMC's agent 0, which the PMC now honours once the PMP runs. Add the GPU's request (AGX, soc-device 16) to the T6050 report on the GPU's power state, and let the GPU take it as its domain, as T6041 does; the GPU and the report are enabled together so the GPU never waits on a disabled report. With the report the PMP drops iBoot's static vote (DCS 5, fabric 1) to 0 and acknowledges every request. Told the GPU is on, it votes DCS 5 and the fabric 1-3 while the GPU works and 0 when it idles; the PMC takes the higher of its vote and the CLPC's. Signed-off-by: Diljit Singh <hey@djdev.me>
…string
The ADT's iop-pmp nub carries segment-names as a NUL-terminated string
("__TEXT;__DATA" on J813, "__TEXT;__DATA;__ETEXT" on J714s). A DTB has
no types, so dt-validate decodes those bytes as a string and the
uint8-array pattern rejects them on every board that carries the value
(t8142-j813 today). Give the property its own string type and keep it
out of the opaque-bytes pattern; the bytes in the DTB do not change.
Signed-off-by: Diljit Singh <hey@djdev.me>
The binding requires reg-names when a DART has a second region. The ADT dart-pmp0 instance list names them DART and DAPF (it also carries dapf-instance-0), so call them "dart" and "dapf". No driver looks them up by name. Signed-off-by: Diljit Singh <hey@djdev.me>
|
Merging: validated on the M5 Pro (J714sAP) with CI green (dt-checks, host-tests). Hardware evidence (2026-11-09):
The M5's default set stays 🤖 Generated with Claude Code |
…C port (#1391) * arm64: dts: apple: t6050-j714c: Run the PMP and report the GPU to it Enable the PMP on the M5 Max 14-inch the way the J714s does since #1376: the PMP with its boot arguments, mailbox, DART and power states, the PMP report, the PMC's agent 0 and the GPU's request in the report. They stay enabled together, so the GPU never waits on a disabled report. The CLPC keeps its vote; the PMC takes the higher of the two. The values come from ADTs of the same silicon, not from a J714c unit: - apple,board-id is 10, the J714c's board ID (0x0a; the N1 platform ID above has it too). - apple,dram-vendor-id is 255 and pmc/pmc-pmgr are 1/63, as a J716c reports them. They are only fallbacks: the boot loader copies /chosen and the PMGR's values over them. - t6050-max-pmp-tunables.dtsi is the 173 iop-pmp0-nub properties of a J716cAP 27.0 ADT, raw bytes, in the format of the J714s file. The J714cAP and J716cAP firmware ADTs have identical PMP nodes (props and all 29 variant sub-nodes), and the h17c-family variant tables of that firmware ADT reproduce 166 of the 173 values; the other seven (the AGX DVFS voltages, the segment ranges and names, pre-loaded and three variant picks) are runtime values iBoot fills in. Not run on a J714c. * arm64: dts: apple: t6050-j716c: Move the right USB-C port into t6050-max-atc2.dtsi The J714cAP and J716cAP firmware ADTs carry identical nodes for the right USB-C port: the HPM on nub-spmi-a1, ATC2's PHY, USB controller and DARTs, the USB4/Thunderbolt router and the PCIe tunnel. Move the J716c's description of them into t6050-max-atc2.dtsi so the J714c can include it instead of a second copy. The host DROM (apple,thunderbolt-drom) stays in the board file: this J716c unit's DROM carries a router UUID from an earlier boot. No change to the J716c: its DTB is byte-identical before and after, and so are the other ten T6050 board DTBs. * arm64: dts: apple: t6050-j714c: Enable the right USB-C port Include t6050-max-atc2.dtsi on the J714c: the right USB-C port's PD controller (nub-spmi-a1, hpm2), ATC2's PHY, USB controller and DARTs, the USB4/Thunderbolt router and the PCIe tunnel. The J714cAP firmware ADT describes them with the same values as the J716cAP one. The ADT also has the PD controllers hpm0 and hpm1 on nub-spmi-a0 and an hpm5; this commit does not describe them or the ports behind them (ATC0, ATC1, ATC3). The nodes the J714c board did not reach are now in t6050-max.dtsi's J714c-and-J716c blocks (ATC2, ACIO2, APCIEC2 and nub-spmi-a1), and t6050-peripherals.dtsi stops adding its own staged nub-spmi-a1 and apciec2_dart for the J714c. apple,thunderbolt-drom is the template value of the J714cAP ADT, not a unit's UUID; the boot loader replaces it. Not run on a J714c. Checked offline: all 11 T6050 board DTBs build with dtc, and the ten other than the J714c are byte-identical to the base tree. dt-validate of the J714c DTB has one warning, the PCIe "port0" in the apciec2 node, which the J716c DTB has already; the J714c had none before.
Runs the PMP on the M5 Pro (J714s) and tells it when the GPU is on, so the PMP votes DRAM (DCS) and fabric performance for GPU load as it does under macOS. Follows #1324 and #1326, which added the PMC, CLPC, PMP and PMP-report support for T6050 with everything disabled on the boards.
One commit,
arm64: dts: apple: t6050-j714s: Run the PMP and report the GPU to it:t6050-peripherals.dtsi: the GPU's request in the PMP report (AGX, soc-device 16, so
report@f), on the GPU's own power state (ps_gfx), as T6041 does. The PMP is told the GPU is on only while it is powered. A request with the GPU off crashes the T6041 PMP.t6050-j714s.dts: enables these together:
/chosenboard-id 8, dram-vendor-id 255,/arm-io/pmgrpmc 1, pmc-pmgr 0x3f), its mailbox, DART and power states;apple,static-voters = <0 1 3>,apple,pmpso the PMC waits for the PMP);sgxtaking the report entry as its power domain.Because they are enabled together, the GPU can't wait on a disabled report. The CLPC keeps its vote; the PMC takes the higher of the two.
t6050-j714s-pmp-tunables.dtsi (new): the 148
iop-pmp0-nubfirmware properties from the J714sAP 27.0 ADT, raw bytes, ast8142-j813-pmp-tunables.dtsidoes for J813.Two follow-ups for the first dt-checks run, which found three new warnings on t6050-j714s.dtb:
dt-bindings: soc: apple: pmp: Type the firmware's segment names as a string. The ADT value is a NUL-terminated string. A DTB has no types, so dt-validate decodes it as a string and the uint8-arrayapple,tunable-pattern rejected it, already on t8142-j813 in the base run. The property now has its own string type and is kept out of the bytes pattern. The DTB bytes don't change.arm64: dts: apple: t6050: Name the PMP DART's regions:"dart", "dapf", from the ADTdart-pmp0instance list (DART, then DAPF; the node also carriesdapf-instance-0). No driver looks them up by name.Results on J714sAP
Default SSD boot with this DT (2026-11-09; the 7.3.0-m5-merge kernel with only the DTB from this commit; installed over SSH, then rolled back to the default
7.3.0-m5-argb):apple_pmp: io.cpp:61: PMP started; the GPU binds throughpmp-gfx(genpdgfx->pmp-gfx, both on).apple-pmp-report 284240000.pmp-report: PMP running (status 0x1), requests 0x100004f000: MACC0/1, PACC, DISPINT, ANS and now AGX. SOC-DEV-PS-ACK reads back the same 0x4f000 / 0x10.Timings and SMC power are unchanged, as expected: with both voting the PMC takes the CLPC's higher DCS 6.
PMP alone (RAM-boot kit, same DT content; the CLPC's PMC enable bits cleared for one test): the PMC honours the PMP's DCS 5 / fabric 3. Bandwidth-bound compute runs at 541.3 µs and 27.4 W, against 486.1 µs and 29.8 W with the CLPC's DCS 6. A 12-thread CPU memcpy gets no PMP vote: the PMP follows the GPU, not CPU memory traffic. Without the GPU's request the PMP acknowledges the other requests and drops iBoot's static vote to 0, but never votes for GPU load.
Testing
simple_bus_regonpmp@284e00000).make CHECK_DTBS=y apple/t6050-j714s.dtb apple/t8142-j813.dtb: no schema warnings on J714s; J813 drops its two segment-names lines and keeps only its existing ones.make dt_binding_check DT_SCHEMA_FILES=soc/apple/apple,pmp.yaml: clean.power-domains, the PMP's board properties, and the PMC'sapple,pmp.apple,dram-vendor-idis this unit's ADT value, like J813's; a loader that copies/chosenoverrides it.🤖 Generated with Claude Code