Stages 1 to 6 pass on a desktop: Core Ultra 7 265K, 8086:7D67, display on an RX 6900 XT, macOS 15.8.2, SIP on #15
I did not find an earlier report in the issues from a desktop board or with an AMD GPU keeping the display, so here is this configuration. Stage 7 was not run.
Machine
- Board: Gigabyte Z890 AORUS ELITE WIFI7
- CPU: Core Ultra 7 265K (Arrow Lake-S)
- iGPU:
8086:7D67rev 6, subsystem1458:D000, ACPI_SB.PC00.GFX0,PciRoot(0x0)/Pci(0x2,0x0) - dGPU: RX 6900 XT
1002:73BF, in the chipset-attached PCIe 2 slot, driving both monitors - BIOS: Internal Graphics enabled, Initial Display Output set to the PCIe 2 slot
- macOS 15.8.2 (24H232), Darwin 24.6.0, SMBIOS MacPro7,1
- OpenCore 1.0.8, Lilu 1.7.2, WhateverGreen 1.7.1
- SIP enabled (
csr-active-config= 0),DisableIoMapper= true - boot-args:
-v keepsyms=1 e1000=0 debug=0x100 alcid=1 agdpmod=pikera -revbeta revpatch=sbvmm,cpuname revcpu=1 -btlfxboardid xegfx.nvram_tracewas not set
Keeping the iGPU on the bus with the display on AMD
With Internal Graphics enabled and no override, this machine reached a black screen after boot. I did not establish the root cause. With this DeviceProperties entry the machine boots to the desktop on the AMD GPU:
<key>PciRoot(0x0)/Pci(0x2,0x0)</key>
<dict>
<key>class-code</key>
<data>/////w==</data>
</dict>The device stays in the registry as GFX0@2 with class-code = <ffffffff> and IOName = display, and IONDRVFramebuffer binds it. No Intel Apple driver loads. I did not use -wegnoigpu, because it removes the device.
XeGfx is not affected by the override: its device tree still shows class 030000 and attaches vgapci0.
Build and loading
Built locally, not from a release. Toolchain: Apple clang 17.0.0, SDK 15.5.
| Input | Version |
|---|---|
| WTLIntelGfx | ff64f83 (XeGfx 0.0.47) |
| drm-kmod | c16de0f |
| FreeBSD | 1fb5d8265bc (last commit before 2026-10-31; not pinned by the project) |
| WTLKcAbi | cea28a5 |
XeGfx binary sha256 |
e905538f242b7ed7606086c52084b1098dfbd8d3bfe9237088a840a4fa14a1d3 |
mtl_guc_70.bin sha256 |
7794f0b6abe5fcd9c6f47035dafe2199f30a6e7d230bd5a53fbf8005a60e5911 |
Loaded through OpenCore Kernel/Add with SIP on, the route in #13. The kext stayed idle at boot until sudo kmutil load -b org.watchthelight.XeGfx, which was accepted. I did not try the auxiliary kernel collection.
Result
All stages ran in one boot, in order, each requested once. The results were read with sysctl -b debug.xegfx_results.
| Stage | Result |
|---|---|
| 1 to 6 | pass (1) |
| 7 | not run |
0 1 1 1
1 1 1 0
Stage 2. GMD graphics 12.70 step 4, display 14.0 step 12. Pipe A is off and the plane surface is 0, because the firmware displays through the AMD GPU.
Stage 3. Only the Intel devices are attached. The RX 6900 XT does not appear in the driver's device tree. The log reports no IOMMU, DMA addresses are physical.
Stage 4. i915 initialized, GuC 70.53.0 (0x463500). XeGfxPost was skipped because pipe A is off. The GFX0 nub reports IOPCIMSIMode = Yes after this stage.
Stage 5. All three engines completed a kernel request, with 3 interrupts:
| Engine | Time | Error |
|---|---|---|
rcs0 |
559887 ns | 0 |
bcs0 |
242090 ns | 0 |
ccs0 |
239821 ns | 0 |
Stage 6. All three values read back as written:
| Engine | Read back | Hex |
|---|---|---|
rcs0 |
1483145216 | 0x58670000 |
bcs0 |
1483145473 | 0x58670101 |
ccs0 |
1483145732 | 0x58670204 |
The driver log gained no lines during stages 5 and 6. The RX 6900 XT kept both monitors online and still reports Metal 3 afterwards. There was no panic or hang in the 6 minutes 26 seconds I measured after stage 6, with no dedicated load (load average about 2). The driver log was still unchanged at the end of that time.
Registry output after stage 6
"XeGfxStage" = 6
"XeGfxGt" = {"wedged"=0,"guc-fw-status"=10,"render-minor"=128,"result"=1,"huc-fw-status"=18446744073709551615,"gts"=1,"guc-version"=4601088,"guc-submission"=1,"gtawake-gts"=0,"engines"=3,"gsc-fw-status"=18446744073709551615}
"XeGfxExec" = {"result"=1,"rcs0-ns"=559887,"bcs0-err"=0,"ccs0-ns"=239821,"bcs0-ns"=242090,"irqs"=3,"ccs0-err"=0,"engines"=3,"done"=3,"rcs0-err"=0}
"XeGfxStore" = {"ccs0-got"=1483145732,"bcs0-err"=0,"ok"=3,"rcs0-got"=1483145216,"result"=1,"bcs0-got"=1483145473,"ccs0-err"=0,"engines"=3,"rcs0-err"=0}
"XeGfxProbe" = {"plane-surf-1-a"=0,"pipe-a-lit"=0,"pipe-frmcount-a"=0,"tco-ctl"=256,"tco2-sts"=0,"bar2-size"=268435456,"tco1-cnt"=6144,"gmd-id-graphics"=51478532,"tco2-cnt"=8,"revision"=6,"subsystem"=18446744072904250456,"bar0-base"=687597420544,"transconf-a"=0,"bar2-base"=687194767360,"dsm-base-lo"=1619001344,"device-id"=32103,"plane-size-1-a"=0,"ggtt-pte-surf"=0,"tco-base"=36352,"tco-rld"=4,"dsm-base-hi"=0,"tco-tmr"=4,"command"=6,"ggc"=1216,"gmd-id-display"=58720268,"pcode-stolen-access"=1,"plane-stride-1-a"=0,"tco1-sts"=0,"result"=1,"plane-ctl-1-a"=8,"bar0-size"=16777216}
"XeGfxPost" = {"skipped-pipe-a-off"=1,"result"=1}
debug.xegfx_stage = 6, debug.xegfx_running = 0, debug.xegfx_progress = 60, debug.xegfx_env = compat.linuxkpi.i915_disable_display=1 compat.linuxkpi.i915_enable_guc=3.
Complete sysctl -b debug.xegfx_log
xegfx: vm: vmap selftest 0
xegfx: iGPU 8086:7d67 stolen base 0x0 size 0 MiB (unused: i915 reads GGC/LMEMBAR on this IP)
xegfx: no IOMMU, DMA addresses are physical
xegfx: newbus root0 state 30 driver root
xegfx: newbus pcib0 state 30 driver pcib
xegfx: newbus pci0 state 30 driver pci
xegfx: newbus hostb0 state 30 driver hostb pci 8086:7d1b class 060000
xegfx: newbus vgapci0 state 30 driver vgapci pci 8086:7d67 class 030000
xegfx: newbus drmn0 state 10 driver -
xegfx: newbus ? state 10 driver - pci 8086:ae0d class 060100
xegfx: devclass root:
xegfx: devclass pcib:
xegfx: devclass pci:
xegfx: devclass hostb:
xegfx: devclass vgapci:
xegfx: devclass drmn:
<6>[drm] Got Intel graphics stolen memory base 0x0, size 0x0
drmn0: [drm] xegfx: display left alone (compat.linuxkpi.i915_xegfx_no_display)
drmn0: [drm] Skipping GT1 (Standalone Media GT) - MEI driver not available on FreeBSD
drmn0: successfully loaded firmware image 'i915/mtl_guc_70.bin'
drmn0: [drm] GT0: GuC firmware i915/mtl_guc_70.bin version 70.53.0
drmn0: [drm] GT0: GUC: submission enabled
drmn0: [drm] GT0: GUC: SLPC enabled
drmn0: [drm] GT0: GUC: RC enabled
<6>[drm] Initialized i915 1.6.0 for drmn0 on minor 0
XeGfx: ran 57 sysinit_set entries
xegfx: newbus root0 state 30 driver root
xegfx: newbus pcib0 state 30 driver pcib
xegfx: newbus pci0 state 30 driver pci
xegfx: newbus hostb0 state 30 driver hostb pci 8086:7d1b class 060000
xegfx: newbus vgapci0 state 30 driver vgapci pci 8086:7d67 class 030000
xegfx: newbus drmn0 state 30 driver drmn
xegfx: newbus drm128 state 10 driver -
xegfx: newbus drm0 state 10 driver -
xegfx: newbus ? state 10 driver - pci 8086:ae0d class 060100
xegfx: devclass root:
xegfx: devclass pcib:
xegfx: devclass pci:
xegfx: devclass hostb:
xegfx: devclass vgapci: drmn
xegfx: devclass drmn:
xegfx: devclass misc:
xegfx: devclass drm:
Not tested
- Stage 7, Metal, Vulkan and anything drawing on the iGPU
- Batch buffers from user processes and per-process address spaces
- Video engines: the Standalone Media GT is skipped, and HuC and GSC report -1
- Sleep and wake with the driver loaded or with the iGPU merely enabled
- Sustained load and long uptime
- Any monitor attached to the iGPU
Question
Is stage 7 expected to be useful on a machine like this, where pipe A is off, no monitor is on the iGPU, and an AMD GPU drives the desktop? Metal on 15.x has been reported in #13 with the panel on the iGPU. I have not seen it reported for this layout.