Fixing Laptop ECs

To start, we're going to need a copy of your DSDT, to dump it from your firmware you got a couple options:

  • MaciASL
    • Open the app on the target machine and the system's DSDT will show, then File -> SaveAs System DSDT. Make sure the file format is ACPI Machine Language Binary(.AML), this will require the machine to be running macOS
    • Do note that all ACPI patches from clover/OpenCore will be applied to the DSDT
  • SSDTTime
    • Supports both Windows and Linux for DSDT dumping
  • acpidump.exe
    • In command prompt run path/to/acpidump.exe -b -n DSDT -z, this will dump your DSDT as a .dat file. Rename this to DSDT.aml
  • F4 in Clover Boot menu
    • DSDT can be found in EFI/CLOVER/ACPI/origin, the folder must exist before dumping
  • acpidump.efi
    • For Opencore only, add this to EFI/OC/Tools and in your config under Misc -> Tools with the argument: -b -n DSDT -z and select this option in OpenCore's picker. Rename the DSDT.dat to DSDT.aml. Tool is provided by acpica

If OpenCore is having issues running acpidump, you can call it from the shell with OpenCoreShell(reminder to add to both EFI/OC/Tools and in your config under Misc -> Tools ):

shell> fs0: // replace with proper drive

fs0:\> dir // to verify this is the right directory

Directory of fs0:\

01/01/01 3:30p EFI

fs0:\> cd EFI\OC\Tools // note that it's with forward slashes

fs0:\EFI\OC\Tools> acpidump.efi -b -n DSDT -z

Decompiling the DSDT

So once we have our DSDT we still got a bit of work left, we'll first want to decompile it so we can view it easier. Couple options:

macOS

So decompiling DSDTs is quite easy with macOS, all you need is MaciASL. To decompile, just open the file!

Windows

Decompiling on windows is fairly simple as well, you will need iasl.exe and Command Prompt:

path/to/iasl.exe path/to/DSDT.aml

Linux

Compiling and decompiling with Linux is just as simple, you will need a special copy of iasl and terminal:

path/to/iasl path/to/DSDT.aml

Finding the right EC patch

Now that our DSDT is readable, next search for PNP0C09. Should give you something similar to this:

As you can see our PNP0C09 is found within the Device (EC0) meaning this is the device we want to rename.

What happens if multiple PNP0C09 show up

When this happens you need to figure out which is the main and which is not, it's fairly easy to figure out. Check each controller for the following properties:

  • _HID
  • _CRS
  • _GPE

Note that only the main EC needs renaming, if you only have one PNP0C09 then it is automatically your main regardless of properties.

Applying your EC patch

As you can see from the table below, we'll be renaming our EC listed in the DSDT. Do note you cannot just throw random renames without checking first, as this can cause actual damage to your laptop.

Comment Find*[HEX] Replace[HEX]
change EC0 to EC 4543305f 45435f5f
change H_EC to EC 485f4543 45435f5f
change ECDV to EC 45434456 45435f5f
change PGEC to EC 50474543 45435f5f

Clover users:

Comment String Change XXXX to EC
Disabled Boolean No
Find Data xxxxxxxx
Replace Data xxxxxxxx

Opencore users:

Comment String Change XXXX to EC
Enabled String YES
Count Number 0
Limit Nuber 0
Find Data xxxxxxxx
Replace Data xxxxxxxx

results matching ""

    No results matching ""