Skip to content

WIP: Implement DCP 14.7 ABI - #562

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

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

Conversation

@chadmed

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)

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 freeto 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

@chadmed