Skip to content

drm/apple: av: enable native display audio on firmware 27 - #1741

Draft
satchlj wants to merge 1 commit into
aurora-silicon:integration/aurorafrom
satchlj:j775c-fw27-display-audio-20261112
Draft

satchlj wants to merge 1 commit into
aurora-silicon:integration/aurorafrom
satchlj:j775c-fw27-display-audio-20261112

Conversation

@satchlj

@satchlj satchlj commented Nov 12, 2026

Copy link
Copy Markdown
Member

GPT-6.1 Sol on @satchlj's behalf

Draft until @satchlj confirms audible output on Friday 2026-11-13. Audible output is unconfirmed; the results below establish HDMI transport only.

The commit was tested on top of #1618 and #1619. Those PRs are needed for booting J775c, but this PR does not depend on them for building. This branch carries only this one commit on current integration/aurora (87476b9). Both touched files, drivers/gpu/drm/apple/av.c and drivers/gpu/drm/apple/dcp-internal.h, are byte-identical to tested head 17dc44911c4479b1b1f2fbff2dea9849adddcd7d (git diff against that head is empty for both paths). The cherry-pick applied without conflict; author, author date, commit message and trailers are preserved. The rebased branch has not been boot-tested.

T6050 external DCPs select firmware profile 27.0, but avep_init() falls through to -ENODEV, so HDMI's PCM DMA can run while no AV audio interface starts. Admit that profile with the v13_5 command numbering, route its AV interface through endpoint 0x2b, and select the existing native link-data lifecycle. Accept Open's successful status without requiring firmware14.7's opened Boolean at +16.

Adapted from Satya Benson's local 9d375903520c2148d1df0df38560a696df7da5f8, preserving authorship and original trailers. Integration already supplies dynamic endpoint routing, default-on audio, native link lifecycle and desktop compact handling; retain those implementations. #1619 already describes the J775c ADMAC/isoc-DART/audio graph, so this adds no DT changes. Jeff's #1012 and Erik's #1268/#1270/#1271 cover M5 display/tunnels; no overlapping firmware27 AV audio PR was found in the read-only search.

Tested natively on J775c M5 Max Mac Studio, existing stub firmware27.0 and installed loader, one-shot only with arm64.nomte:

  • Integration bf00add + PCI: apple: mask Clock PM before enabling adopted T6050 endpoints #1618 bb464b0 + arm64: dts: apple: port the boot-tested J775c compatibility layout #1619 fa19133, combined base acb0aee9e774e126bce4d394a84ab748d076e783.
  • Local tested head 17dc44911c4479b1b1f2fbff2dea9849adddcd7d; boot 7.3.0-lobata-hdmi+ drm/apple: release a stale DPTX link before borrowing a Type-C route #2; Image.gz SHA256 f8da4e0e0d28fd46963aa8e3542d9bba5458853e42dd5023318f1946d814fd91.
  • DCPAVAudioInterface publishes on endpoint0x2b; no unsupported-firmware or AV -19 logs. Both display PCM devices enumerate, HDMI resolved through audio-controller-dispext1 (generic Apple DisplayPort card name retained).
  • HDMI sink ELD reports GLKVM, LPCM stereo at32/44.1/48kHz and16/20/24-bit; selected S24_LE, stereo,48kHz. Ten-second440Hz tone completes rc0. PCM RUNNING with advancing pointers; kretprobes show Open and all six native link operations return0, including start/stop notifications. Zero snd_pcm_stop_xrun events, IRQ Err0 before/during/after, no aplay underrun messages or new kernel WARN/Oops/fault signatures. Trace records no lost events. This is transport evidence, not audible confirmation.
  • Explicit1920x1080@60 modeset returns0 and active CRTC readback matches. Display manager restored; final normal reboot returns healthy default44 j416s: auto-recover the Thunderbolt DP tunnel and display after standby #25, HDMI connected.
  • Native GCC16.1.1/Rust1.93.1 build with patched native bindgen passes. KUnit arm64/QEMU:256 passed,2 skipped, including native AV/audio/lifetime suites. Test configuration disables WERROR because an inherited parser fixture is unused; its warning remains, and the initial failed build log is retained. The tested tree’s diff-only checkpatch run reported 0 errors/0 warnings; git diff --check passes. No DT changes, so no dtbs_check delta.

Not tested: audible output, HDMI cable replug, USB-C DisplayPort audio (all four DP connectors disconnected), other firmware versions or machines, suspend/resume, or the latest moving integration head. Fresh integration 87476b9 has unchanged av.c/dcp-internal.h relative to the tested base, but was not the boot-tested base. Known inherited AOP -61, firmware display diagnostics and build warnings remain.

Checks on this single-commit branch: git diff --check passes. Full-commit checkpatch reports 0 errors and 2 warnings, both about the preserved original Co-Authored-By capitalization (non-standard signature / preferred Co-authored-by form). Diff-only checkpatch reports 0 errors/0 warnings. No fresh object compile was run: neo-build was idle, but this checkout was not accessible in its mounted source export and had no prepared build tree. Compile and KUnit evidence above is from the tested tree, not a new build of current integration.

Local evidence retained by @satchlj: work/UPSTREAM-HDMI-AUDIO-20261112.md and work/upstream-hdmi-audio-20261112/.

T6050's external display processors run DCP firmware 27, which avep_init()
refused ("Audio not supported for firmware"), so neither the HDMI port nor
DisplayPort on USB-C had any audio on the M5 Max Studio.

Firmware 27 publishes the audio interface (DCPAVAudioInterface,
dcpav-audio-interface-epic) on endpoint 0x2b, not 0x29: in the J775c
IORegistry (macOS 27, a DELL S2725QS on dcpext0) it sits on RTBuddy
Endpoint12, Endpoint13 being the dcpdptx-port-epic that Linux already
talks to on 0x2c; firmware 27's 0x29 is dcpav-device-epic and 0x2a
dcpav-service-epic. Its EP client is the link-data one of the T6030 14.7
external role: the firmware's method names run PrepareLinkWithData,
StartLinkWithData, DidStartLinkWithData, WillStopLinkWithData,
StopLinkWithData, CompleteLinkWithData, GetLinkData, GetLinkStatus,
GetTransport, GetPortID, CopyElements, CopyChannelLayoutElements,
CopyProductAttributes, the 13.5/14.7 numbering (prepare 6 ... complete
11, elements 16, product attributes 18), and macOS logs a StartLink with
32-byte link data (LinearPCM, 2 channels, 24 bit, 48 kHz) on it.

So drive firmware 27 as the 14.7 external role: the native link
lifecycle, the 32-byte link data and the large element catalog, the
Terminate report, open and close around the PCM. The interface is
published only for a sink the firmware drives, so no power check is
added for it. Its Open reply is not known to carry the "opened" Boolean
where 14.7's does; only its status decides there.

Look the AV endpoint up by its own number, and start it, and the sound
card on top of it, on firmware 27 without the hdmi_audio opt-in: a DCP
whose port@0 links no DisplayPort audio interface in the DT starts
nothing, so the DT is the opt-in there. All of it needs
CONFIG_DRM_APPLE_DCP_T6030_AUDIO, which builds the link-data protocol;
without it firmware 27 is refused as before.

Signed-off-by: Satya Benson <satya@benson.earth>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Adapted from 9d375903520c2148d1df0df38560a696df7da5f8: retain integration's
compact desktop protocol, dynamic endpoint routing, native-link lifecycle
and default-on audio policy. Only extend the native-role and firmware gates,
select endpoint 0x2b, and accept firmware 27 Open without the 14.7 Boolean.
No device-tree change is needed on aurora-silicon#1619.
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