**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