# Patching DMAR Table: Manual

What we will be doing is removing the Reserved Memory Regions to allow this table to load without conflicts in macOS - which is necessary for the following hardware devices:

  • Intel I225 based Ethernet Controllers
  • Aquantia Ethernet Controllers
  • Some WiFi devices

# Preparation

First we need to gather files necessary to patch our DMAR Table. If you've used the SysReport Quirk that is included with the Debug version of OpenCore, then you should have a DMAR-1.aml file residing inside your EFI Partition SysReport/ACPI folder, otherwise please follow the procedure here to get started. Once you have the file, it is best to store it in a safe location for easy access later on in this section.

# Manipulation

# Creating our Customized DMAR Table

Easiest way to manipulate the DMAR table is to use the GUI program MaciASL, this is a macOS only program, which can be acquired here (opens new window). It is time to create our customized version of our original DMAR table with the Reserved Memory Regions removed. So to start, we will open the copy of our DMAR-1.aml file we extracted from our system.

Example of a DMAR Table with Reserved Memory Regions. Example of a DMAR Table without Reserved Memory Regions

If your DMAR Table looks like Example #2 which has no Reserved Memory Regions, you can skip this guide and merely disable DisableIoMapper in your config.plist, and enable VT-d in your BIOS.

Now if your DMAR Table looks like Example #1, please continue below.

With our DMAR-1.aml file open, it is time to begin patching it, and do not worry this is pretty easy to do. All we are doing is highlighting every section that is labelled Reserved Memory Region or Subtable Type of 0001 until you reach the next non-0001 Subtable Type or when you reach the end of the file just like in the example below, and remove the entries entirely.

Learn More

To learn more, you can read up on DMA Remapping Table: "Intel® Virtualization Technology for Directed I/O" (opens new window).

The information starting with Raw Table Data at the end of the table is safe to remove as well if you choose to, this is merely raw binary table data and is only there for display. When you Compile and Save as a new ACPI Machine Language Binary, this data is changed to reflect the new information in the binary table.

WARNING

NOTE: Do not confuse this with a SSDT, as that is a Secondary System Description Table which provides extra details for the actual DSDT.

# Dropping the DMAR Table

Now you will need to prepare your config.plist for deleting or "dropping" the DMAR table. This is done in the ACPI->Delete section.

Delete Code

Comment String Drop DMAR Table
All Boolean YES
Enabled Boolean YES
TableSignature Data 444D4152

WARNING

You must still conform to the OpenCore's config.plist schema, so make sure to consult with the OpenCore Configuration (opens new window) document for all required fields that must be present within ACPI->Delete and fill them in with their failsafe values.

# Cleaning Up

Of course make sure your new patched DMAR.aml file is in your EFI Partition's EFI/OC/ACPI folder and also added to your config.plist. Then disable DisableIoMapper under Kernel->Quirks and reboot.

If you are using a I225 based Ethernet Controller, and are utilizing e1000=0 or dk.e1000=0 for macOS 12.2.1 and below. You will need to remove this boot-arg before rebooting so that com.apple.DriverKit-AppleEthernetE1000 can match to your Intel I225-V Ethernet controller.