Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/lzhoang2801/OpCore-Simplify/llms.txt

Use this file to discover all available pages before exploring further.

ACPI patches are one of the most hardware-specific parts of an OpenCore EFI. OpCore Simplify automates the selection process by analyzing your hardware report — including CPU codename, platform type, detected PCI devices, and motherboard name — and choosing the appropriate patches automatically. You can then review and adjust the selection before building your EFI.

How ACPI Patches Work in OpenCore

In OpenCore, ACPI customization is done through Secondary System Description Tables (SSDTs). These are compiled ASL (ACPI Source Language) files placed in EFI/OC/ACPI/ and referenced in config.plist under ACPI → Add. Each entry specifies the filename and whether it is enabled. OpCore Simplify generates SSDTs programmatically using logic ported from SSDTTime by CorpNewt as well as custom generators. When DSDT/ACPI tables are loaded (by dragging in your dumped ACPI folder), the tool can perform deeper analysis, such as detecting embedded controller fields, IRQ conflicts, and GPIO availability. Without loaded ACPI tables, a subset of patches are still generated based solely on the hardware report.
ACPI tables must be loaded for patches that require DSDT analysis — such as BATP, FixHPET, RTCAWAC, GPI0, and XOSI. The tool will prompt you to provide your dumped ACPI folder when these patches are needed.

Auto-Selection Logic

When you proceed through the main menu, OpCore Simplify calls select_acpi_patches(), which checks conditions in your hardware report and marks each relevant patch as enabled. The key conditions are:
  • Platform (Laptop/Desktop): Laptop systems automatically receive ALS, PNLF, BATP, and XOSI.
  • CPU codename: Sandy Bridge / Ivy Bridge systems receive PM (Legacy) instead of PLUG; HEDT platforms receive APIC and UNC.
  • Manufacturer (Intel/AMD): Intel systems get BUS0; AMD systems get RTCAWAC and USB Reset.
  • Chipset generation: PMC is added for 300-series boards; RCSP for recent Intel chipsets; RTC0 for X299 / X99.
  • Detected devices: I2C input devices trigger GPI0; ACPI-only network adapters trigger RMNE; Yoga WMI devices trigger WMIS; HP boards trigger CMOS; mismatched IMEI IDs trigger IMEI.
  • Disabled PCI devices: If any unsupported device (e.g., NVIDIA GPU on Monterey+, unsupported Wi-Fi card) is flagged for disabling, the Disable Devices patch is included.

DSDT Pre-Patches

Before disassembling a DSDT, OpCore Simplify checks whether any known vendor-specific binary patches are required to make the DSDT decompile cleanly. These pre-patches fix duplicate method and device definitions that cause iasl to refuse decompilation:
Pre-PatchCommentAffected Vendor
GPP7 duplicate _PRW methodsGPP7._PRW renamed to XPRWGigabyte
GPP7 duplicate UP00 devicesGPP7.UP00 renamed to UPXXGigabyte
GPP6 duplicate _PRW methodsGPP6._PRW renamed to XPRWASRock
GPP1 duplicate PTXH devicesGPP1.PTXH renamed to XTXHMSI
These patches are applied in memory only — the original DSDT file is not permanently modified.

Available ACPI Patches

The following patches are defined in Scripts/datasets/acpi_patch_data.py. Each patch maps to a generator function in acpi_guru.py that produces one or more SSDTs and, where needed, binary Find/Replace patches for config.plist.
Patch NameDescription
ALSFake or enable Ambient Light Sensor device for storing the current brightness / auto-brightness level
APICAvoid kernel panic by pointing the first CPU entry to an active CPU on HEDT systems
BATPEnables displaying the battery percentage on laptops
BUS0Add a System Management Bus device to fix AppleSMBus issues
Disable DevicesDisable unsupported PCI devices such as the GPU, Wi-Fi card, and SD card reader
FakeECOS-Aware Fake Embedded Controller (by CorpNewt) — creates a fake EC device when macOS expects one
RCSPRemove conditional ACPI scope declaration (needed on recent Intel chipsets)
CMOSFix HP Real-Time Clock Power Loss (005) Post Error
FixHPETPatch Out IRQ Conflicts (by CorpNewt) — removes conflicting IRQ entries (IRQs 0, 2, 8, 11) from PIC, TMR, and RTC devices
GPI0Enable GPIO device for I2C TouchPads to function properly
IMEICreates a fake IMEI device to ensure Intel iGPU acceleration functions properly
MCHCAdd a Memory Controller Hub Controller device to fix AppleSMBus
PMCAdd a PMCR device to enable NVRAM support for 300-series mainboards
PM (Legacy)Block CpuPm and Cpu0Ist ACPI tables to avoid panics on Intel Ivy Bridge and older CPUs
PLUGRedefines CPU objects as Processor and sets plugin-type = 1 (by CorpNewt) — enables XCPM CPU power management
PNLFDefines a PNLF device to enable backlight controls on laptops
RMNECreates a Null Ethernet device to allow macOS system access to iServices when no native Ethernet is present
RTC0Creates a new RTC device to resolve PCI Configuration issues on HEDT systems (X299 / X99)
RTCAWACContext-Aware AWAC Disable and RTC Enable/Fake/Range Fix (by CorpNewt)
PRWFix sleep state values in _PRW methods to prevent immediate wake in macOS
Surface PatchSpecial patch for all Surface Pro / Book / Laptop hardware
UNCDisables unused uncore bridges to prevent kernel panic on HEDT systems
USB ResetDisable USB Hub devices (RHUB/HUBN/URTH) to manually rebuild the ports — used on AMD and recent Intel platforms
USBXCreates a USBX device to inject USB power properties
WMISFixes ThermalZone WQBI method that forgets to return a result on certain Yoga/ThinkPad models
XOSISpoofs the operating system to Windows, enabling devices locked behind non-Windows _OSI checks in macOS
Patches marked as auto-selected by the tool reflect well-tested defaults for your hardware profile. Disabling them without understanding the consequences may cause boot failures, missing features, or kernel panics.
During USB port analysis, the tool treats the device names XHC1, EHC1, EHC2, and PXSX as illegal — these names indicate non-compliant ACPI identifiers that must be renamed before port mapping. The illegal_names list ('XHC1', 'EHC1', 'EHC2', 'PXSX') is used when generating USB-related patches and reports.
BATP is only applied when DSDT/ACPI tables have been loaded and the tool finds Embedded Controller field definitions larger than 1 byte. It also requires the ECEnabler kext to split those oversized EC reads at runtime. Without ECEnabler, the battery status patch will not function correctly.

Customizing ACPI Patch Selection

You can manually review and toggle individual patches at any time before building the EFI.
1

Open the customization menu

From the main menu, enter option 3 — “Customize ACPI Patches”. The tool displays the full list of patches with checkboxes showing their current state.
2

Review auto-selected patches

Patches that are currently enabled are shown in green with a [*] checkbox. Disabled patches show [ ]. Each entry lists the patch name and a short description.
3

Toggle patches

Enter the index number of the patch you want to toggle. You can enter multiple indices separated by commas — for example, 3, 7, 12 — to toggle several patches at once.
4

Return to the main menu

Enter B to go back. Your changes are retained until you build the EFI. You can re-enter the menu as many times as needed.
If you are unsure whether a patch applies to your system, leave the auto-selected defaults in place and refer to the ACPI Patch Reference for deeper explanations of each patch’s purpose and conditions.

Build docs developers (and LLMs) love