watchthelight labs

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

open
saspol 2026-11-03

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:7D67 rev 6, subsystem 1458: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_trace was 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.

Reply on GitHub