**Status:** boots and runs. GPU acceleration is *partial* (framebuffer yes, Metal no). pad not working. Details below, including everything that did **not** work, because that was most of the effort. help of deepseek too and alot of good person in the reddit group thanks alot
---
## Hardware
| **CPU** | Intel Core i5-1145G7 β Tiger Lake-U, 4C/8T, 2.6 GHz base / 4.4 GHz turbo, 12 MB, 10 nm |
| **GPU** | Intel Iris Xe Graphics (TGL GT2), `8086:9A49`, no dGPU |
| **RAM** | 16 GB LPDDR4X-4267 (soldered, 2Γ8 GB, Samsung) |
| **Model** | Lenovo ThinkPad X1 Carbon Gen 9, MTM `20XXS7UY00` |
| **Display** | 14" internal, CMN N140JCN-EEL, 1920Γ1200, 60 Hz, non-touch |
| **Storage** | Micron MTFDKCD512TFK, 512 GB, PCIe 4.0 x4 NVMe |
| **Audio** | Intel Tiger Point-LP cAVS (Realtek codec; AIDA reports only the cAVS controller) β AppleALC, `alcid=11` |
| **Ethernet** | **none built in** β Thunderbolt 4 / USB-C only (dock or USB dongle) |
| **Wi-Fi / BT** | Intel Wi-Fi 6 AX201 160 MHz, CNVi (`8086:A0F0`), Bluetooth on USB |
| **Input** | ELAN I2C-HID touchpad (`ELAN0672`), PS/2 keyboard + TrackPoint, Synaptics fingerprint reader |
| **BIOS** | `N32ETA2W` (1.78), 2026-07-23 |
| **Thunderbolt** | TB4 retimer firmware 1.2.28.0 |
| **macOS** | Sequoia **15.8.2** (24H232) |
| **SMBIOS** | `MacBookPro16,2` |
| **Bootloader** | OpenCore 1.0.8 |
**Guide used:** [Dortania β OpenCore Install Guide](https://dortania.github.io/OpenCore-Install-Guide/), specifically `config-laptop.plist/icelake.md` as the closest platform reference (Tiger Lake has no page). Plus [WhateverXe](https://github.com/b00t0x/WhateverXe) and [WhateverXe-Graphics](https://github.com/b00t0x/WhateverXe-Graphics).
---
## What works
- Boots from the **internal NVMe** (OpenCore on its own ESP, no USB needed)
- Graphics: Iris Xe framebuffer, **1536 MB VRAM**, 1920Γ1200 native
- Storage: NVMe fully working, APFS, TRIM
- USB: all ports, via `XHCI-unsupported` (`IOPCIPrimaryMatch 0xa0ed8086`)
- Battery percentage, CPU sensors (`SMCBatteryManager`, `SMCProcessor`, `ECEnabler`)
- Audio: AppleALC initialises (layout 11)
- Wi-Fi hardware present, `itlwm` loads (needs HeliPort to join)
- External USB keyboard/mouse fully working
- Sleep/wake: untested at time of writing
## What does **not** work yet
- **Metal** β `system_profiler SPDisplaysDataType` shows **no Metal support line**. WindowServer composites in software, so the UI and cursor are visibly slow. This is the current main limitation.
- **Touchpad** β `ELAN0672` is present in ACPI but `VoodooI2C` never loads at all.
- **Bluetooth** β deliberately disabled (see below).
- **Wi-Fi** β driver loads, but native (menu-bar) Wi-Fi needs the AirportItlwm route plus an OCLP root patch; currently only `itlwm` + HeliPort.
---
## Build-specific things that differ from the guide (the useful part)
### 1. WhateverXe needs a specific environment
- `WhateverGreen.kext` **must not** be present (WEX is a Lilu plugin in the same space)
- `AMFIPass.kext` (Mod) + `csr-active-config = 03080000` + `SecureBootModel = Disabled`
- `-allow3d -disablegfxfirmware` are required boot-args; the graphics package is what supplies the driver payload, WEX binds it
- **Graphics package version must match WEX version.** Running WEX 0.6.1 against a 0.3.2-era payload mismatches; 0.6.0 + 0.3.1 and 0.6.1 + 0.3.2 are the intended pairs. A mismatch showed up as a driver crash-looping during AuxKC load.
### 2. ACPI: the Ice Lake laptop set, no more, no less
Working set: `SSDT-PLUG`, `SSDT-EC-USBX`, `SSDT-PNLF`, `SSDT-AWAC`, `SSDT-PMC`, `SSDT-RHUB`, `SSDT-GPIO`.
`SSDT-RHUB` is not optional on this platform β without it the boot stalls after `[ PCI configuration end ]` while IOKit probes EC/PS2/I2C. I lost two days to that.
### 3. Booter quirks: use a *coherent* MAT set
```
AvoidRuntimeDefrag = true
DevirtualiseMmio = true
ProtectMemoryRegions = false
ProtectUefiServices = true
SetupVirtualMap = true
EnableWriteUnprotector = false β must be false if the two below are true
RebuildAppleMemoryMap = true
SyncRuntimePermissions = true
ProvideCustomSlide = false
EnableSafeModeSlide = false
```
Mixing `EnableWriteUnprotector=true` with `RebuildAppleMemoryMap/SyncRuntimePermissions=true` is a contradictory combination and caused boot failures.
### 4. CPUID spoof is load-bearing
Tiger Lake (`0x806C1`) is not a CPU macOS knows. Two spoofs tried:
- **Coffee Lake** `Cpuid1Data = eb060900β¦`, mask `ffffffff000β¦` β **boots** (this is what the build runs)
- **Ice Lake** `Cpuid1Data = e5060700β¦` β untested here, but used by a working T14 Gen 2 config; since WEX donors from Apple's **Ice Lake** graphics stack, this is the most likely route to real Metal
Also needed: `AppleXcpmExtraMsrs = true`, `AppleXcpmCfgLock = true`, `ProvideCurrentCpuInfo` worth trying.
### 5. Bluetooth kexts can prevent boot
With `IntelBluetoothFirmware` + `IntelBTPatcher` + `BlueToolFixup` enabled, the boot crash-looped: a USB-binding driver kept restarting (`has crashed 8 time(s)`) and the boot sat at `gIOScreenLockState`. Disabling all three made the system boot immediately.
Related: adding `bluetoothExternalDongleFailed` / `bluetoothInternalControllerInfo` NVRAM values made it *worse* β with the NVRAM keys present, even Recovery would not reach its GUI. So on this machine: no BT kexts, no BT NVRAM values, until a proper USB port map exists.
### 6. VoodooPS2 plugins must be listed explicitly
OpenCore does not auto-load nested `PlugIns`. The config needs:
```
VoodooPS2Controller.kext
VoodooPS2Controller.kext/Contents/PlugIns/VoodooInput.kext
VoodooPS2Controller.kext/Contents/PlugIns/VoodooPS2Keyboard.kext
VoodooPS2Controller.kext/Contents/PlugIns/VoodooPS2Mouse.kext
VoodooPS2Controller.kext/Contents/PlugIns/VoodooPS2Trackpad.kext
```
Without the plugin entries, the controller attaches, `ioreg` looks perfect, and no keystroke ever arrives. Same principle applies to `VoodooI2C`'s plugins.
### 7. Offline install, because Recovery had no network
`Reinstall macOS` needs ~12 GB of downloading. With no working network in Recovery (Intel Wi-Fi has no driver there, and iPhone tether didn't bind), the install was done fully offline:
`gibMacOS` on Windows β full `InstallAssistant.pkg` for 15.8.2
`installer -pkg` into a volume from Recovery **fails** β Apple's installer only allows installing to the running system
Instead: in a macOS VM, `createinstallmedia` onto an external HFS+ volume, then boot the laptop from it β clean GUI install, no network at any point
GPU payload installed **from inside** the installed system, then WEX enabled β because a package can only target the running system
Note: Sonoma+ Recovery **cannot mount exFAT**, so any offline payload must live on a FAT32 partition (or be mounted manually with `/sbin/mount_exfat`).
### 8. Small things
- `SecureBootModel = Default` filtered the hand-built install volume out of the OpenCore picker β use `Disabled`
- `Timeout = 0` prevents the picker from auto-booting the wrong volume
- `-igfxvesa` is only for the installer stage; leaving it in the installed system forces a VESA-ish framebuffer and makes the UI feel much slower
- `-v debug=0x100` writes a lot of kernel logging; remove both for normal use, they measurably slow startup
- WEX reports 1536 MB VRAM; AIDA64 on Windows reports "2 GB" β both are shared memory, the iGPU has 0 MB dedicated
---
## EFI tree
```
EFI
βββ BOOT
β βββ BOOTx64.efi
βββ OC
βββ ACPI
β βββ SSDT-AWAC.aml
β βββ SSDT-EC-USBX.aml
β βββ SSDT-GPIO.aml
β βββ SSDT-PLUG.aml
β βββ SSDT-PMC.aml
β βββ SSDT-PNLF.aml
β βββ SSDT-RHUB.aml
βββ Drivers
β βββ HfsPlus.efi
β βββ OpenRuntime.efi
β βββ ResetNvramEntry.efi
β βββ ToggleSipEntry.efi
βββ Kexts
β βββ AMFIPass.kext
β βββ AppleALC.kext
β βββ BlueToolFixup.kext (disabled)
β βββ ECEnabler.kext
β βββ IntelBluetoothFirmware.kext (disabled)
β βββ IntelBTPatcher.kext (disabled)
β βββ Lilu.kext
β βββ SMCBatteryManager.kext
β βββ SMCProcessor.kext
β βββ VirtualSMC.kext
β βββ VoodooI2C.kext
β βββ VoodooI2CHID.kext
β βββ VoodooPS2Controller.kext
β βββ WhateverXe.kext
β βββ XHCI-unsupported.kext
β βββ itlwm.kext
βββ OpenCore.efi
βββ config.plist
```
---
## What I'd tell someone starting this
**Read the platform page even if your CPU doesn't have one.** `icelake.md` had the ACPI list and quirks that mattered; I spent two days copying an Alder Lake config's quirks onto a Tiger Lake machine before reading it.
**Don't mix quirk strategies.** A "mostly right" Booter quirk set fails exactly like a wrong one.
**The verbose log names the crasher.** `has crashed N time(s)` with `_jetsamPropertiesIdentifier β¦ unknown key` meant a third-party kext registering Apple-named personalities β it was Bluetooth, not graphics, despite looking like a GPU freeze.
**If a driver is missing from `kextstat`/`kmutil showloaded`, it isn't loading** β `ioreg` can look perfect while nothing works.
**WhateverXe is days old** (0.5.0 β 0.6.1 in three days). It provides a framebuffer and partial acceleration today; expect movement, and pin your version pairs.
## Next steps for this machine
- Ice Lake CPUID spoof + `ProvideCurrentCpuInfo` β attempt real Metal
- Add the four VoodooPS2 plugin entries (keyboard), then `VoodooI2C` plugins (touchpad)
- Generate a proper USB port map with USBToolBox/UTBMap, then re-enable Bluetooth
- Native Wi-Fi: AirportItlwm + `IOSkywalkFamily` + `IO80211FamilyLegacy` + `IOSkywalk` block + OCLP-X root patch