Skip to content

arm64: dts: apple: t8132-j604: enable the internal DCP - #1179

Merged
DjDeveloperr merged 3 commits into
integration/aurorafrom
dts/t8132-j604-dcp
Nov 7, 2026
Merged

DjDeveloperr merged 3 commits into
integration/aurorafrom
dts/t8132-j604-dcp

Conversation

@DjDeveloperr

Copy link
Copy Markdown
Contributor

Enables the internal DCP path in the J604 (MacBook Pro 14-inch, M4) tree the way the J713/J715 trees enable it, so the M4 DCP driver can adopt the J604 panel once aura#110 hands it over on 26.6.2. Two small driver fixes come first. Without them the J604 would refuse its own boot framebuffer, and on firmware other than 26.6.2 the generic DART probe could reset the live DCP firmware DART.

Commits

  1. iommu/apple-dart: leave the M4 internal display DARTs alone off the qualified firmware. On the firmware path (apple_t8132_firmware_path()), apple_dart_probe() keeps off 0x30a300000/0x30a340000. Off that path it would treat them as ordinary DARTs and run apple_dart_hw_reset() unless iBoot locked them. No tree hits this today, because only the Airs enable dcp_dart and they're always on the path. Once the J604 enables dcp_dart, a J604 booted with any other OS firmware would. With this commit the probe refuses both DARTs on every M4 Mac off the qualified firmware, as the disabled nodes did before.

  2. drm/apple: m4: take the boot framebuffer's notch rows from the profile. dcp_m4_boot_framebuffer_check() hard-coded the Airs' 64 notch rows. aura cuts the J604's 3024x1964 framebuffer to 16:10, which is 3024x1890 (74 rows), so the J604 profile from drm/apple: m4: adopt the J604 internal panel (preferred 120 Hz mode) #1178 refused it unless asahi,show-notch=1. Each profile now carries notch_rows: 64 for J713/J715, 74 for J604.

  3. arm64: dts: apple: t8132-j604: enable the internal DCP. Moves the parts J713/J715 had in their family file into t8132-laptop.dtsi:

    • the disp0_piodma alias;
    • status = "okay" on dcp_mbox, dcp_dart and dcp;
    • apple,j713-native-piodma and apple,j713-native-scanout, the requests aura#110 reads before it validates and enables disp0_dart, piodma and the display subsystem.

    The panel size stays per board. The J604's full 3024x1964 panel at the ADT's dot pitch (254.6 ppi) is 302 x 196 mm (apple,panel-width-mm/-height-mm on &dcp, as on J713/J715). fb_panel keeps describing the 3024x1890 below-notch framebuffer (302 x 189 mm), as on the Airs.

J604 ADT check

I compared /arm-io/disp0, dcp, dcp/iop-dcp-nub, dart-dcp, dart-disp0 and its mappers between the J713 (26.5.1) ADT and the J604 26.6.2 and 27.0 ADTs. reg, interrupts, power and clock gates, compatible, sid, vm-size-*, remap and instance all match. Only dart-id, the dot pitch and the color-accuracy index differ, and the DT uses none of them. So the J604 needs no address overrides.

dtb diffs (VM kbuild, base f5fa539 vs head)

J713, J715, J623, J624 and J773g: byte-identical.

J604, under dtc -I dtb -O dts -s:

@@ aliases
 		disp0 = "/soc/display-subsystem";
+		disp0_piodma = "/soc/dcp@30ae00000/piodma";
 		gpu = "/soc/gpu@302600000";
@@ dcp@30ae00000
+			apple,j713-native-piodma;
+			apple,j713-native-scanout;
+			apple,panel-height-mm = <0xc4>;
+			apple,panel-width-mm = <0x12e>;
 			compatible = "apple,t8132-dcp";
-			status = "disabled";
+			status = "okay";
@@ iommu@30a340000 (dcp_dart)
-			status = "disabled";
+			status = "okay";
@@ mailbox@30ae08000 (dcp_mbox)
-			status = "disabled";
+			status = "okay";

Warnings

  • dtc, default flags: no warnings on any T8132 board, at base or head.
  • dtc, W=1: the J604 gains one warning, alias_paths for disp0_piodma. J713 and J715 already have it. On J713/J715 only the "also defined at" line numbers move. J623/J624/J773g don't change.
  • CHECK_DTBS: stock dtschema 2026.9, the one CI installs, still crashes with KeyError: 'uint8-array' on every T8132 dtb, so CI sees the same single line at base and head. I patched that crash locally and validated for real. J713, J715, J623, J624 and J773g are unchanged. The J604 gains one line: aliases: 'disp0_piodma' does not match any of the regexes. J713 and J715 already carry the same line. The underscore can't go: aura#110 (dt_set_j713_display_maps()) and the kernel (iomfb_m4.c, apple-dart-dcp.h) both look up disp0_piodma by that name. The newly enabled dcp, dcp_mbox and dcp_dart nodes validate clean.

Tests

  • tools/testing/selftests/drivers/gpu/apple-dcp/run.py: 87/87.
  • checkpatch.pl --strict: clean on all three commits.
  • build kernel --profile asahi -- W=1 drivers/iommu/apple-dart.o drivers/gpu/drm/apple/: builds with no warnings, with CONFIG_APPLE_DART_J713_DCP=y and CONFIG_DRM_APPLE_DCP_T8132=y. A full Image modules did not finish. The first run died on compiler segfaults in unrelated files (iwlwifi, emac, uniphier_thermal) while the shared VM's guest disk was 100% full, and a full asahi output (~9 GB) doesn't fit in what's left. I pruned only this branch's own output and built the objects the series changes.
  • dtbs (asahi profile, VM): builds; W=1 results below.
  • m4-dart-boot-contract-test.py and selftests/drivers/apple/bcm4377-radio-sids.py fail the same way at base and head. Their source slices are stale (undeclared j713_dcpext, and a missing } else if (!dart->locked anchor). This series doesn't cause either failure.
  • No hardware run. The DCP handoff on a J604 still needs aura#110 and a boot on 26.6.2.

Not done here

  • J604 framebuffer0 power domains. The J713/J715 file deletes the framebuffer's power-domains, because the M4 PMGR policy disables ps_dptx_phy. Since M4: take the PMP, PMGR, display and GPU paths on the 26.6.2 firmware on every M4 Mac #1171 the J604 runs that policy on 26.6.2 too, so its simpledrm probably waits out the deferred-probe timeout there. I left it alone. Off 26.6.2 the policy doesn't run, and dropping the reference would let genpd turn ps_dptx_phy off as unused.

  • DCP firmware UUID. aura only maps the J604's PIODMA if its DCP firmware UUID is the J713's (81BAF476-...). drm/apple: m4: adopt the J604 internal panel (preferred 120 Hz mode) #1178 says the J604 runs the Airs' 26.6.2 image, but the J604 ADT dump here redacts the UUID, so I couldn't confirm it.

  • iMacs (J623/J624). These still keep the DCP disabled. They need:

    • an ADT, to confirm /arm-io/disp0 has no external property and the DCP and DART addresses match;
    • macOS's TimingElements report for the 4480x2520 panel;
    • the DCP firmware UUID on 26.6.2;
    • a dcp_m4_profile: 4480x2520, notch_rows = 0, boot_stride = 17920 if the stride is unpadded, plus the timing and brightness range;
    • the DT block from t8132-laptop.dtsi, plus the panel size, in t8132-j623-j624.dtsi. It can't go in t8132-desktop.dtsi, because the J773g's disp0 is external.

    The DART target-type list already admits J623/J624.

  • Request property names. apple,j713-native-* now applies to every M4 laptop. Renaming it has to happen together with aura.

🤖 Generated with Claude Code

…ualified firmware

The internal display DARTs at 0x30a300000 (disp0) and 0x30a340000 (DCP
firmware) carry the running DCP's mappings. On the M4 firmware path the
probe leaves them untouched until userspace opts in. On any other
firmware it takes them as ordinary DARTs and resets them unless iBoot
locked them, which cuts the DCP off from its own firmware.

No tree reaches that today: the Airs are on the firmware path with any
firmware, and the other M4 trees keep both DARTs disabled. The J604 tree
is about to enable dcp_dart as the Airs do, and a J604 can boot an OS
firmware other than 26.6.2, where nothing hands its display over.

Refuse both DARTs on every M4 Mac off the qualified firmware, as their
disabled nodes did. The Airs, and every M4 Mac on 26.6.2, are unchanged.

Signed-off-by: Diljit Singh <hey@djdev.me>
dcp_m4_boot_framebuffer_check() accepts a boot framebuffer of the full
panel height or 64 rows less, the Airs' notch. A boot loader hiding the
notch cuts the framebuffer to 16:10, which on the J604's 3024x1964 panel
is 3024x1890, 74 rows less. The J604 profile therefore refused its own
boot framebuffer unless the loader kept the notch rows.

Give each profile its notch rows (64 on the J713 and J715, 74 on the
J604) and check against them. The Airs are unchanged.

Signed-off-by: Diljit Singh <hey@djdev.me>
The J713/J715 file enables the internal DCP, its mailbox and firmware
DART, names the PIODMA node with the disp0_piodma alias, and asks the
boot loader to validate the inherited PIODMA and scanout streams
(apple,j713-native-piodma and apple,j713-native-scanout). The loader
then enables disp0_dart, piodma and the display subsystem.

None of this is the Airs' own. The J604's 26.6.2 ADT has disp0, dcp,
dart-dcp and dart-disp0 at the J713's addresses, with the same
interrupts, power gates, stream IDs and remap tables, and the boot
loader hands the DCP over on every M4 Mac with an internal panel on
26.6.2. Move it to t8132-laptop.dtsi, so the J604 gets it too. Each
board still gives its panel's size: the J604's 3024x1964 panel at the
ADT's 254.6 ppi is 302 x 196 mm.

On 26.6.2 the M4 PMGR policy gives ps_disp_cpu to the firmware, so the
DCP and its mailbox can probe. On other firmware that domain stays
disabled and they do not, and the DART driver leaves dcp_dart alone.

The J713, J715, J623, J624 and J773g dtbs are byte-identical. The J604
dtb gains the alias, status "okay" on dcp, dcp_mbox and dcp_dart, the
two request properties and the panel size.

Signed-off-by: Diljit Singh <hey@djdev.me>
@DjDeveloperr
DjDeveloperr merged commit 57c6874 into integration/aurora Nov 7, 2026
2 checks passed
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