Skip to content

arm64: dts: apple: Describe J716c GPU and internal-panel handoff - #1276

Merged
RyanTheTide merged 4 commits into
integration/aurorafrom
ewb/j716c-public-gpu-display-dt
Nov 12, 2026
Merged

RyanTheTide merged 4 commits into
integration/aurorafrom
ewb/j716c-public-gpu-display-dt

Conversation

@erikwb

@erikwb erikwb commented Nov 9, 2026 •

Copy link
Copy Markdown
Contributor

J716c's public device tree does not yet describe the GPU resources and internal-panel connections needed for the loader handoff. Add the one-die GPU layout, GFX/GFX1 mailboxes, six memory reservations and power tables, and connect the internal DCP to its clocks, bandwidth scratch, panel and scanout DART.

The loader fills the runtime data and enables these devices after validating the handoff. The source device tree keeps them disabled. Reuse the existing hardware inventory and place it on the J716c SoC bus so loader path lookups resolve unambiguously.

The source prerequisites are merged: #1012 (c54454de, firmware-27 GPU/display code) and #1275 (22cbd86f, physical GPU mailbox profile). Runtime deployment still requires the matching validated loader/DT handoff described below. It does not depend on the USB4 PRs. The dependent board PR #1273 extends the display master's scanout list while preserving the internal panel first. This PR remains independent of USB4.

Validation: J716c, J716s and J775D DTBs compile. The three changed binding documents validate. Focused GPU, DCP, display-master, mailbox, DART, power and clock checks pass for the source DT and for a modeled handoff populated with captured values from the working system. Static resource checks match the working GPU and internal-panel layout. The complete proposed USB4 stack builds Image.gz, modules and the J716c DTB; its 20 affected schema documents and focused DT checks pass. Full-registry validation retains the existing unrelated tunable-type collision.

Hardware validation: the complete public stack booted. Aura accepted the GPU and internal-display handoffs; the G17C driver initialized, matching public Mesa enumerated the Apple M5 Max Vulkan device, and Hyprland used the internal panel at 3456x2234@120. The earlier mailbox-address and shared-PMC failures are resolved. The later complete public stack passed a user-confirmed rear-left-attached TS5 reboot with the internal screen, both external monitors, keyboard/mouse and Ethernet working without unplugging.

The GPU node is "apple,agx-g17c", "apple,agx-g17s": the M5 Max name with the family fallback the driver matches. The binding takes that pair, and the J716c tree validates against it. A boot loader that hands the GPU over must accept the apple,agx-g17c name; on J716c the tree boots with one that does (GPU driver bound, 18,427-case sample of the Vulkan default list unchanged).

A further commit links the J716c GPU node to the CLPC, as the generic T6050 GPU node is, so the DRAM and fabric floors rise while GPU work is in flight. On J716c a GPU memory read test goes from 89 GB/s to 292 GB/s with it, and an 18,427-case sample of the Vulkan default list is unchanged (9,694 passes; only the two driver-ID/conformance metadata failures).

Created with GPT-6 Astra in Codex and Claude Opus 5.5 in T3 Code.

@DjDeveloperr DjDeveloperr 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.

J716c-only DT, reviewed from the 14-inch M5 Pro (J714sAP, T6050) side, which shares this GPU and display hardware.

  • Build: t6050-j716c, j716s, j714s and j775d DTBs build at this head.
  • Bindings: apple,agx.yaml, apple,dcp.yaml, apple,display-subsystem.yaml and apple,ascwrap-v6.yaml pass dt-doc-validate.
  • dt-validate vs. base (#1012's branch): J714s, J716s and J775D are unchanged (0 lines). J716c gains:
    • two apple,t6050-j775d-ascwrap-v6 "failed to match any schema" lines, which go away with #1275 merged (checked on a merge of the two);
    • opp-table-gpu-afr / opp-table-gpu-cs don't match ^opp-table(-[a-z0-9]+)?$. t602x-common.dtsi and t6031-gpu.dtsi already use the same names, so this has precedent. Not blocking.
  • Against the J714sAP ADT: the GFX/GFX1 mailbox nodes match exactly (wrappers 0x2302600000/0x2302e00000, iop-vbar 0x2302050000/0x2302850000, IRQs 2797/2800 and 2801/2804). On J714s hardware those exact nodes with #1275's profile bind, the G17S firmware (26A428) starts on both roles and DRM registers (see #1275).
  • Bus placement: moving J716c's inventory off the bare /soc bus also fixes the camera aliases from #1254, which don't resolve under libfdt without it (see my note there). The two PRs conflict trivially in t6050-j716c.dts.

Not covered: the J716c GPU node layout and the internal-panel graph, which I can't boot here. The M5 Pro's own GPU and panel handoff currently uses the kit's node layout with aura's J714s handoff, so a J714s in-tree equivalent should follow once the two T6050 loader handoffs agree on one layout.

@DjDeveloperr

Copy link
Copy Markdown
Contributor

Leaving this open: it is based on #1012 (funkzy/t6050-gpu-on-integration) and needs its firmware-27 display/GPU code, and #1012 isn't being merged in this round. It can be retargeted to integration/aurora once #1012 is in.

🤖 Generated with Claude Code

Distinguish the coprocessor-driven T6050 GPU from its raw disabled
inventory node with the G17 family fallback. Describe both mailboxes,
the six reserved memory regions and loader-filled power data.

Accept the existing mini-LED panel compatible and the named boot
framebuffer reservation supplied to the display subsystem.

Developed with Claude Code.
Signed-off-by: Erik Bourget <erik@ebourget.net>
Supply the one-die GPU resource layout, GFX/GFX1 mailboxes, six memory
reservations and fourteen operating points with four cluster voltage
lanes. Put its existing PMGR resources under the GPU aperture and replace
the raw disabled GPU inventory nodes. Keep the J716c inventory on its
existing SoC bus so loader path lookups are unambiguous.

Connect the internal DCP to its bandwidth scratch, clocks and mini-LED
panel, with display scanout through disp0 SID 0. Reuse the existing DCP,
DART, mailbox and PMC definitions.

The GPU, its power states and mailboxes, memory reservations and internal
display remain disabled until the loader validates and fills the handoff.

Developed with Claude Code.
Signed-off-by: Erik Bourget <erik@ebourget.net>
The J716c GPU node replaces the generic T6050 one, which gained
apple,clpc after this node was written. Without it the GPU driver finds
no CLPC and never raises the DRAM and fabric floors while GPU work is in
flight. Link it here too.

Developed with Claude Code.
Signed-off-by: Erik Bourget <erik@ebourget.net>
@erikwb
erikwb force-pushed the ewb/j716c-public-gpu-display-dt branch from dddc6e8 to 49b0a5b Compare November 10, 2026 02:34
@RyanTheTide
RyanTheTide changed the base branch from funkzy/t6050-gpu-on-integration to integration/aurora November 10, 2026 12:23
Preserve the original handoff commits and all newer target changes. Retain USB4/DROM and ISP includes alongside GPU/panel; keep the newer SPMI board exclusion with the original J716c guard. No driver or safety-policy changes.

@DjDeveloperr DjDeveloperr 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.

Codex (GPT-6.1 Sol), reviewing on @DjDeveloperr’s behalf.

No remaining blocking source findings in the reviewed/integrated net change. The runtime dependencies1012/1275 are merged. Integration preserves original author ancestry, newer J716c USB4/DROM/camera includes and the narrowed shared peripheral exclusions; no older shared nodes were restored. Four DTBs compile, and J714s/J716s/J775d match the pre-change base byte-for-byte. Owner's J716c public-stack GPU/internal-panel/Vulkan evidence is retained as attributed evidence. Fresh DT/host CI on this exact head must pass before merge; a source merge does not install a matched loader/DT bundle.

Approval does not waive pending CI, dependency order, hardware-safety gates or source-versus-release qualification. No source merge is an installed-loader write or a new hardware test.

@RyanTheTide
RyanTheTide merged commit c31d580 into integration/aurora Nov 12, 2026
2 of 5 checks passed

@DjDeveloperr DjDeveloperr 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 remaining conditions of approval5861286905 are now satisfied. Verified exact-head Host43049264316/job130702920772 and DT43049263986/job130974333060: actual host tests, CHECK_DTBS/binding checks and ADT comparison steps all passed. Earlier apt/DNS failures are superseded; no retry is needed. Both source prerequisites are merged (#1012 c54454d, #1275 22cbd86).

The GitHub merge preview retains the same six-file GPU/panel/peripheral net change alongside current-main bindings and guards. Changes from that preview's main5cfcc01a to current9fb90b40 do not overlap the six files. No additional branch update or build is necessary. Existing exact-head source approval and the attributed J716c public-stack GPU/internal-panel/Vulkan/CLPC evidence remain accepted at their stated scope.

Proceeding with the expected-head normal source merge. This does not install a loader/DT bundle, qualify a new complete integrated hardware boot or mark unrelated device-support rows Working.

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.

3 participants