Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
5fd10fa
Add qualified Alder Lake-S topology and HDMI adapter primitives
b00t0x Oct 22, 2026
9faee75
Wire guarded ADL-S admission, shared probe and Combo PHY initialization
b00t0x Oct 22, 2026
53a211f
Adapt ADL-S HDMI clock indices while preserving native power sequencing
b00t0x Oct 22, 2026
6abb1de
Qualify ADL-S MMIO mappings and admit the wired GMBUS9 pin
b00t0x Oct 22, 2026
5e98435
Preserve ADL-S TC1 lane power alongside native pipe consumers
b00t0x Oct 22, 2026
09f5e27
Support qualified Alder Lake-S fixed DisplayPort on Combo C
b00t0x Oct 23, 2026
b7b9c4a
Preserve fixed Combo DP mode on Alder Lake-S hotplug
b00t0x Oct 23, 2026
0ee6bc2
Derive Alder Lake-S display routes from VBT
b00t0x Oct 23, 2026
47e533f
Hold display power for VBT-routed Alder Lake-S AUX A
b00t0x Oct 23, 2026
10ebd2d
Enable qualified Alder Lake-S on supported host macOS versions
b00t0x Oct 23, 2026
85284fe
Admit Safari App Cryptex GPU service to fixed Data driver access
b00t0x Oct 23, 2026
66743b9
Identify WebKit GPU by kernel signing identity across supported macOS
b00t0x Oct 23, 2026
17a06d2
Unify Display12 SST transport and power contracts
b00t0x Oct 23, 2026
2f73638
Own lane and pipe power throughout SST training
b00t0x Oct 23, 2026
26d4feb
Separate Combo electrical policy from physical port programming
b00t0x Oct 23, 2026
4b97b60
Clear Combo loadgen at HBR3 link rates
b00t0x Oct 23, 2026
1a9a4d7
Select TGL panel signal policy from physical subplatform and link rate
b00t0x Oct 23, 2026
8b65032
Close display startup dependencies over qualified output routes
b00t0x Oct 23, 2026
85d8ddf
Derive stale AGDC port exclusion from immutable wiring
b00t0x Oct 23, 2026
4b30a8b
Verify Combo loadgen state along with electrical coefficients
b00t0x Oct 23, 2026
9a576e8
Exercise shared SST lifecycle across transport, pipe and inherited state
b00t0x Oct 23, 2026
d18283b
Include native AUX and panel prerequisites in Combo startup closure
b00t0x Oct 23, 2026
a5ce33b
Compose firmware-wired TGL Combo DP with shared SST operations
b00t0x Oct 23, 2026
9a19cab
Use standard panel coefficients when HOBL retry is unavailable
b00t0x Oct 23, 2026
6193904
Compose VBT panel delays with native PPS sequencing
b00t0x Oct 23, 2026
2dee88c
Compose ADL-S native eDP with VBT panel and PWM policy
b00t0x Oct 23, 2026
b8be5a7
Separate physical Combo resources from donor clock capacity
b00t0x Oct 23, 2026
f98b17b
Separate Display13 output protocols from resource selection
b00t0x Oct 23, 2026
83da874
Apply Combo PLL fractional workaround on Display13
b00t0x Oct 23, 2026
ad8994b
refactor(display): separate SST programming from platform power
b00t0x Oct 23, 2026
84f45fb
feat(display13): bind Combo signal and SST programming to power leases
b00t0x Oct 23, 2026
21d4c49
feat(display13): retain AUX power across Combo DP link lifetime
b00t0x Oct 23, 2026
bbd1890
Guard Display13 AUX commands and propagate power failures
b00t0x Oct 23, 2026
6e98864
Compose Display13 DP probe capabilities and startup requirements
b00t0x Oct 23, 2026
e14adae
Preserve DP source state while parking mixed Display13 GOPs
b00t0x Oct 23, 2026
76ccc2c
Share Display13 DP source inspection with plane bootstrap
b00t0x Oct 23, 2026
2d48d9f
Reinitialize Display13 DP planes while preserving source and power state
b00t0x Oct 23, 2026
449c846
Hold DP GOP AUX power through native port ownership handoff
b00t0x Oct 23, 2026
01ac1b5
Separate shared Display adapter selection from product qualification
b00t0x Oct 23, 2026
48da4c3
Separate Render qualification from Display12 startup and port dispatch
b00t0x Oct 23, 2026
65498e5
Dispatch existing Display13 backend independently of Render selection
b00t0x Oct 23, 2026
54e642d
Separate Display boot certificates from Render preflight
b00t0x Oct 23, 2026
af31948
Share desktop D0 GT admission across Alder Lake-S and Raptor Lake-S
b00t0x Oct 23, 2026
e0689ca
Select implemented GPU families independently of revision test coverage
b00t0x Oct 23, 2026
427d61b
Wait for PG2 through PG4 power well fuse readiness
b00t0x Oct 23, 2026
3374212
Use a millisecond fuse wait budget for Display 13
b00t0x Oct 23, 2026
5cf64f8
Add bounded hotplug and training completion diagnostics
b00t0x Oct 24, 2026
2cec523
Cover all Display 12 pipe and DDI control registers in traces
b00t0x Oct 24, 2026
6c0ac72
Retain concurrent display activity in compact live diagnostics
b00t0x Oct 24, 2026
3d3b507
Distinguish AUX native calls from surrounding diagnostic work
b00t0x Oct 24, 2026
0359731
Retain display interrupt activity across post-training requests
b00t0x Oct 24, 2026
78d37d1
Remove unsuccessful hotplug diagnostics and document remaining hang
b00t0x Oct 24, 2026
c575adc
Avoid implying USB-C reconnection hangs are OS-specific
b00t0x Oct 24, 2026
9e4a772
Document USB-C reconnection hangs reproduced on Big Sur and Tahoe
b00t0x Oct 24, 2026
e7e29d3
Connect Tiger Lake GT1 to fused small-GT resources and cover HX selec…
b00t0x Oct 24, 2026
31826af
Prepare WEX 0.5.0 and distinguish tested and expected GPU support
b00t0x Oct 24, 2026
a815e81
Distinguish required graphics updates from existing-version compatibi…
b00t0x Oct 24, 2026
96d537f
Link Graphics 0.2.0 fixes explicitly in WEX release notes
b00t0x Oct 24, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 12 additions & 7 deletions AppleIntelTGLCompat/AppleIntelTGLCompat.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,21 @@ template <typename F> static F method(void *object, size_t offset) {
return reinterpret_cast<F>((*static_cast<uintptr_t **>(object))[offset / 8]);
}
static void *manager(void *controller) { return field<void *>(controller, 0xc40); }
static void *hardwareAccess;
static void *legacyTGLAccess;
static XELP::ProbeBinding probeBinding;
static uint32_t probeBindingState; // 0 unbound, 1 publishing, 2 immutable/pinned.

// Generic register/DSB operations still belong only to the qualified TGL
// backend. The separately bound Display13 port probe never opens this gate.
// Generic register/DSB operations belong to the qualified Display12 families.
// The separately bound Display13 port probe never opens this gate.
static bool hardwareAllowed(void *controller) {
if (!controller) return false;
auto service = static_cast<IOService *>(controller);
auto pci = OSDynamicCast(IOPCIDevice, service->getProvider());
const auto profile=XELP::deviceProfile(pci);
if(!profile.admitted() || profile.family!=XELP::Family::TigerLake)return false;
__atomic_store_n(&hardwareAccess, manager(controller), __ATOMIC_RELEASE);
const auto adapter=XELP::displayAdapter(profile.family);
if(!profile.admitted() || (adapter!=XELP::DisplayAdapter::TGL && adapter!=XELP::DisplayAdapter::ADLS))return false;
if(adapter==XELP::DisplayAdapter::TGL)
__atomic_store_n(&legacyTGLAccess,manager(controller),__ATOMIC_RELEASE);
return true;
}

Expand All @@ -49,6 +51,9 @@ static uint32_t read32(void *access, unsigned long offset) {
// and board-policy checks. The provider independently verifies physical identity;
// it does not read plugin boot arguments or depend on framebuffer globals.
// The provider pins the immutable binding until reboot, like the donor owner.
extern "C" uint32_t xelpProbeCapabilities(uint32_t schema,uint32_t configABI) {
return schema==XELP::ProbeCapabilityABI && configABI==XELP::ProbeABI ? XELP::ProbeDisplay13ComboDP : 0;
}
extern "C" bool xelpConfigureDisplay(void *controller,const XELP::ProbeConfig *config) {
if(!controller || !config || !config->valid())return false;
auto service=static_cast<IOService *>(controller);
Expand Down Expand Up @@ -213,9 +218,9 @@ extern "C" uint32_t tglProbePort(void *port) {
}
// ABI0 TGL callers have no binding entry. Only a manager established by
// hardwareAllowed with a validated TGL profile may use the legacy path.
// Other backend owners never establish hardwareAccess.
// ADL-S establishes generic access but never this unbound TGL fallback.
auto access = field<void *>(port, 0x578);
if (!access || access != __atomic_load_n(&hardwareAccess, __ATOMIC_ACQUIRE)) return 0;
if (!access || access != __atomic_load_n(&legacyTGLAccess, __ATOMIC_ACQUIRE)) return 0;
auto config = field<void *>(port, 0x548);
if(!config)return 0;
ProbeIO io {access};
Expand Down
4 changes: 2 additions & 2 deletions AppleIntelTGLCompat/AppleIntelTGLCompatPortProbe.hpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: BSD-2-Clause
// Shared c004fc1a donor port-mode provider. ADL-N currently admits Combo
// HDMI only; TC HDMI is deferred and fixed DP needs a separate policy.
// Shared c004fc1a donor port-mode provider. Fixed Combo HDMI/DP classification
// does not grant PHY, AUX, boot-handoff or Type-C ownership.
#ifndef TGL_COMPAT_PORT_PROBE_HPP
#define TGL_COMPAT_PORT_PROBE_HPP
#include <stdint.h>
Expand Down
18 changes: 18 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@
# Changelog

## 0.5.0

The newly added GPUs require [WhateverXe Graphics 0.2.0](https://github.com/b00t0x/WhateverXe-Graphics/releases). Its rendering fixes also benefit previously supported GPUs; updating both components is recommended.

### Added

- Add Alder Lake-S graphics acceleration and HDMI/DisplayPort output, including compatible USB-C wiring and up to three displays.
- Accept Tiger Lake-H45, Alder Lake-HX and Raptor Lake-S/HX using shared support. These configurations still need hardware testing.
- Use firmware information to configure more display layouts automatically.

### Fixed

- Avoid some startup panics caused by display hardware not being ready.
- Restore Safari graphics-driver access regardless of where macOS installs Safari updates.
- [WhateverXe Graphics 0.2.0](https://github.com/b00t0x/WhateverXe-Graphics/releases) fixes observed Chrome drawing failures and rendering errors on smaller integrated GPUs.

DisplayPort/USB-C reconnection can still freeze the computer. See the [README](https://github.com/b00t0x/WhateverXe#tested-features-and-known-issues) for tested configurations and other known issues.

## 0.4.0

Add experimental Tiger Lake laptop display support and automatic Display 13 tiling selection.
Expand Down
81 changes: 61 additions & 20 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,11 @@ This project is experimental and requires the signed graphics package from
[WhateverXe Graphics](https://github.com/b00t0x/WhateverXe-Graphics). It installs
the graphics stack under `/Library` and updates the Auxiliary Kernel Collection
(AuxKC), without patching System files or snapshots. WEX and the graphics package
have independent release versions.
have independent release versions. Graphics **0.2.0** is needed for the GPUs
added in WEX **0.5.0** and supplies the latest rendering fixes. Previously
supported Tiger Lake/Alder Lake-N configurations can retain Graphics 0.1.0,
but will not receive the new package fixes or features requiring its updated
components. Use WEX 0.5.0 with Graphics 0.2.0 for the complete set of current features and fixes.

## Compatibility

Expand All @@ -32,14 +36,41 @@ WEX selects the OS ABI and GPU backend independently. OS-specific graphics
payloads and the common AppleIntelTGLCompat provider are installed by WhateverXe
Graphics; GPU generation and connector routing are handled by WEX.

| GPU family | Device IDs with an implemented backend |
### Tested on hardware

| GPU family | Tested configurations |
| --- | --- |
| Tiger Lake | `9A40`, `9A49`, `9A78` |
| Alder Lake-N / Twin Lake | `46D0`–`46D4` |
| Tiger Lake-U | 48- and 80-EU graphics; desktop-style and laptop display layouts |
| Alder Lake-N | 16- and 24-EU graphics; two HDMI displays |
| Alder Lake-S | UHD Graphics 770 (`4690`); HDMI, DisplayPort and a USB-C port wired as fixed DisplayPort |

These are tested configurations within each family, not a guarantee for every
model or connector. See [tested features and known issues](#tested-features-and-known-issues)
for OS coverage and remaining problems.

### Expected to work, not yet tested on hardware

- Other supported Tiger Lake-U/H35 configurations, including 96-EU graphics.
- Tiger Lake-H45 (GT1): `9A60`, `9A68`, `9A70`.
- Other supported Alder Lake-N configurations and Twin Lake.
- Other supported Alder Lake-S configurations, Alder Lake-HX, Raptor Lake-S and Raptor Lake-HX.

These devices use implemented support shared with the tested families. Their
IDs are accepted automatically; no CPU-model or machine-specific setting is
needed. Hardware validation is still outstanding. All accepted IDs and resource
limits are listed in [device selection](docs/device-selection.md).

### Further implementation required

Support varies by system and connector layout. The table includes implemented
backends, not a guarantee for every machine. See [device selection](docs/device-selection.md)
for detailed selection conditions and overrides.
- Alder Lake-H/P/U and Raptor Lake-H/P/U: additional graphics and display support
is needed. These are distinct from the HX products listed above.
- Rocket Lake-S: its display power and clock handling differ from Tiger Lake.
It is not supported by this release, and no hardware validation is scheduled.

### No support planned

- Xe-LPG, including Meteor Lake integrated graphics.
- Xe2 and later graphics architectures.

## Required components

Expand All @@ -62,7 +93,7 @@ supported. With the signed graphics package and linked Mod AMFIPass,
Tahoe requires `CoreMedia / AllowOnePassMetalScaling` to be disabled; the
WhateverXe Graphics installer applies this setting.

Boot the target OS with WEX **0.3.0 or newer** before installing the graphics
Boot the target OS with WEX **0.3.0 or newer** (0.5.0 for newly added GPUs) before installing the graphics
pkg. If an older Xe System patch is installed, restore it using its original
recovery procedure first. The pkg does not change EFI, System files, snapshots
or SIP settings. See [installation and removal](https://github.com/b00t0x/WhateverXe-Graphics#install)
Expand Down Expand Up @@ -132,6 +163,9 @@ WEX automatically handles systems with or without an internal display.

No family-selection or per-feature enable arguments are required for
Alder Lake-N / Twin Lake.
GPU backend selection is independent of hardware test coverage: untested PCI
revisions use the same family implementation. Revision-specific behavior is
added when a documented difference or observed failure requires it.

The supported Display 13 backend selects Y-tiled scanout automatically;
`AAPL,GfxYTile` is not required in OpenCore. Existing values are preserved.
Expand All @@ -143,35 +177,42 @@ its X-tiled scanout path is unsupported. Display 12 tiling selection is unchange
| Hardware | Verified features |
| --- | --- |
| Tiger Lake / Alder Lake-N | Big Sur–Tahoe: dual 1920×1080 at 60 Hz output, Metal/MPS, OpenGL, OpenCL, hardware H.264 encode/decode, HEVC decode, display sleep/wake, Safari video decoding and Widevine playback |
| Tiger Lake laptops | Big Sur–Tahoe: internal 1366×768 eDP display, brightness control, HDMI and USB-C DisplayPort Alt Mode, up to three simultaneous displays; HDMI and both USB-C ports reconnected successfully on Tahoe |
| Tiger Lake laptops | Big Sur–Tahoe: internal 1366×768 eDP display, brightness control, HDMI and USB-C DisplayPort Alt Mode, up to three simultaneous displays; USB-C reconnection remains unreliable |
| Alder Lake-N | Big Sur/Tahoe: automatic Y tiling without an EFI `AAPL,GfxYTile` setting |
| Alder Lake-S | Big Sur–Tahoe: Metal, OpenGL, OpenCL, hardware H.264 encode/decode, HEVC decode and three displays (two 1080p60 and one 720p60); Safari video playback; Widevine checked on Big Sur and Tahoe |
| Tiger Lake / Alder Lake-S | Tahoe: Chrome hardware-accelerated Canvas, WebGL and WebGPU |

These results cover tested systems, not every GPU, display, adapter or dock.
The listed resolutions describe test coverage; they are not a fixed resolution
limit imposed by WEX.

On Big Sur–Tahoe, WebKit GPU access to the Data GPU drivers uses its valid
Apple platform signature and service identifier, independently of Safari’s
installation or update location.

### Known issues and limits

- Some image-conversion operations can crash the application.
- Reconnecting a monitor to a dedicated DisplayPort connector can leave the
screen black or freeze the computer. USB-C DisplayPort Alt Mode passed the
reconnection checks above.
screen black or freeze the computer. USB-C DisplayPort Alt Mode reconnection
can also freeze the computer; this has been reproduced on both Big Sur and
Tahoe.
- Safari video playback may occasionally drop frames.
- Up to three displays can be used simultaneously; a fourth display will not
receive an image.
- DisplayPort output or reconnection can be slow on Alder Lake-S.
- Some connector layouts, Thunderbolt-managed outputs and panel backlight
methods are not supported. See [display limits](docs/device-selection.md#display-limits).
- FairPlay-protected playback is not supported.
- Full system sleep/wake and resolutions above those listed above are unverified.
USB-C display output currently prevents part of the display hardware from
entering a low-power state.

## Roadmap

### Planned

- Alder Lake and Raptor Lake S/H/P/U support
- Display 13 USB-C and eDP support

### Not Planned

- Xe-LPG support
- Xe2 and later architectures
- Alder Lake-H/P/U and Raptor Lake-H/P/U support.
- USB-C and internal-display support on Display 13 GPUs.
- Improve display reconnection reliability and investigate full system sleep/wake.

## Build and test

Expand Down
Loading
Loading