Skip to content

WIP: Implement DCP 14.7 ABI - #562

Draft
chadmed wants to merge 36 commits into
AsahiLinux:asahi-wipfrom
chadmed:dcp/14.8.3
Draft

WIP: Implement DCP 14.7 ABI#562
chadmed wants to merge 36 commits into
AsahiLinux:asahi-wipfrom
chadmed:dcp/14.8.3

Conversation

@chadmed

@chadmed chadmed commented Aug 2, 2026

Copy link
Copy Markdown
Member

Depends on #520

Implements the macOS 14.7 EPIC IPC interface for DCP and drops 12.x (partially, WIP). Required for M3 series (excluding Ultra).

Draft until below is addressed

TODO:

  • Start RTKit
  • Start IOMFB
  • Modesetting
  • Single IOSurface
  • Multiple IOSurfaces
  • ARGB8888
  • ARGB2101010
  • Semiplanar Y'UV
  • Premultiplied alpha on surface 0
  • Clear empty/null surfaces (!! currently DCP still tries to read the destroyed framebuffer causing IOVA faults)
  • Backlight on laptops
  • Set colour transformation matrix
  • Get ColorElements and TimingElements
  • Start dcpext
  • Start AVService/s (looks like it initialises properly but never does anything)
  • Handle hotplug
  • Enumerate modes
  • Modeset external display
  • Output on external display
  • HDMI audio (AVService commands don't look like they've changed but service never responds)
  • Get EDID (as above)

@chadmed
chadmed force-pushed the dcp/14.8.3 branch 2 times, most recently from 31c49fc to 974d5b6 Compare August 8, 2026 05:56
jannau and others added 27 commits August 11, 2026 15:19
Certain Broadcom bluetooth chips (bcm4377/bcm4378/bcm438) need ACL
streams carrying audio to be set as "high priority" using a vendor
specific command to prevent 10-ish second-long dropouts whenever
something does a device scan. This patch sends the command when the
socket priority is set to TC_PRIO_INTERACTIVE, as BlueZ does for audio.

Signed-off-by: Sasha Finkelstein <fnkl.kernel@gmail.com>
The current approach of silently disabling all rust drivers if the
toolchain is missing results in users that try to compile their own
kernels getting a "successful" build and then being confused about where
did their drivers go. In comparison, missing openssl results in a build
failure, not a disappearance of everything that depends on it.

This also means that allyesconfig will depend on rust, but since the
rust experiment concluded with "rust is here to stay", i believe that
allyesconfig should be building rust drivers too.

Signed-off-by: Sasha Finkelstein <k@chaosmail.tech>
Apple M3 Pro and Max devices are using 'gp00' keys for GPIO in addition
to 'gP00' keys. Add a second compatible to handle this keys with an
additional macsmc-gpio instance.

Signed-off-by: Janne Grunau <j@jannau.net>
Add support for SMC GPIO keys with a lower letter 'p' via the
"apple,smc-low-gpio" compatible. This adds support for a second
macsmc-gpio controller using 'gp00' keys.
These keys are used on Apple M3 Pro and Max MacBooks in the controller
for keyboard and trackpad and for the built-in DisplayPort to HDMI
converter.

Signed-off-by: Janne Grunau <j@jannau.net>
Apple M3 Pro and Max devices are using 'gp00' keys for GPIO in addition
to 'gP00' keys. These keys are handled by an additional macsmc-gpio
instance using the "apple,smc-low-gpio" compatible.

Signed-off-by: Janne Grunau <j@jannau.net>
Signed-off-by: James Calligeros <jcalligeros99@gmail.com>
This firmware version was only ever used for extremely early alpha
installs based on ALARM (so basically just for developers testing things).
Remove support for it to make way for a new target ABI for M3 machines.

Signed-off-by: James Calligeros <jcalligeros99@gmail.com>
Asahi Linux will target the firmware ABI from macOS 14.8.3
for i/mBoot-loaded firmware on M3 series machines. This
version identifies itself as v14.7, so add it as such to
the DCP driver.

Most things are working, except for EDID retrieval for external
displays and audio over HDMI/DisplayPort. There is also an issue
where DCP will try to read destroyed/invisible framebuffers for
some reason or another, causing IOVA faults. We will need to
figure out how to get the new firmware to clear surfaces and
stop reading the nonexistent framebuffers at the very least before
shipping.

Signed-off-by: James Calligeros <jcalligeros99@gmail.com>
Signed-off-by: James Calligeros <jcalligeros99@gmail.com>
Signed-off-by: James Calligeros <jcalligeros99@gmail.com>
Signed-off-by: James Calligeros <jcalligeros99@gmail.com>
Because we have not yet figured out how to clear surfaces, freeing old
framebuffer references crashes DCP with IOVA errors. Don't destroy them
for now so that we can continue working.

Signed-off-by: James Calligeros <jcalligeros99@gmail.com>
Some of this is 0xaa padding, some of it is zeroes, and
there is a conspicuous empty byte at the end.

Signed-off-by: James Calligeros <jcalligeros99@gmail.com>
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