Skip to content

Apple Driver GPU

Abdelkader Boudih edited this page Aug 24, 2026 · 3 revisions

GPU and Console

Upstream status: via ports. Kernel mode setting drivers ship in the drm-kmod ports (graphics/drm-kmod), not in base. The base kernel provides vt(4) with the EFI framebuffer, which works on every Mac and is often the honest answer for servers.

Per-family status

GPU family Models Console (vt/efifb) Accel/KMS
NVIDIA GeForce 8600M GT MacBookPro3,1 works none, never will be
Intel HD 3000 (gen6) Macmini5,1, iMac12,2 secondary works i915kms
Intel HD 4000 (gen7) Macmini6,2, MacBookPro9,2 works i915kms
Intel Iris 5100 (gen7.5) Mac mini 7,1, MacBookPro11,1 works i915kms
Intel Iris Pro (gen8/9) MacBookPro11,5 (+ AMD), iMac17,1 (+ AMD) works i915kms
AMD Radeon HD 6970M (BARTS) iMac12,2 works radeonkms, see EFI note
AMD GCN parts MacBookPro11,5, iMac17,1 works amdgpu
Intel UHD 630 + AMD 5xxxM T2 machines works i915kms / amdgpu, untested here
Apple Silicon M1 family experimental arm64 bring-up no

The EFI-posted card trap (dual-GPU iMacs)

Apple EFI posts the discrete card itself. Re-running the AtomBIOS ASIC init on an already-posted BARTS card wedges it; the fix (verified on iMac12,2) is to skip atom_asic_init when the card is EFI-posted. Ring, IB, CP, DMA and UVD tests pass with that change. This fix lives in the experimental kgx work; check drm-kmod behavior before porting the claim upstream.

Dual-GPU muxing

Dual-GPU MacBook Pros (11,5) and iMacs boot with the mux set by firmware. There is no gmux driver on FreeBSD (linuxkpi ships only a stub apple-gmux.h whose detect always answers no), so you get whichever GPU the firmware selected; on most models booting third-party OSes that is the discrete one, powered up, all the time. Battery life on such laptops reflects it.

In development: kgx

kgx is an experimental out-of-tree GPU framework (separate from drm-kmod). Current campaigns target Broadcom VideoCore (Raspberry Pi) and BARTS as a proof of concept. Not Apple-wiki material yet.

Back to Apple Hardware.

Clone this wiki locally