Massive overhaul(hopefully helps new users a bti)

This commit is contained in:
Mykola Grymalyuk
2020-05-30 23:54:37 -06:00
parent 1f776dfb8c
commit 0c2d4b492d
60 changed files with 945 additions and 706 deletions

View File

@@ -1,181 +1,29 @@
# Fixing Embedded Controller (SSDT-EC/USBX)
# Fixing Embedded Controller
* [What this SSDT does](#what-this-ssdt-does)
* [Methods to make this SSDT](#methods-to-make-this-ssdt)
What we'll be doing is creating a fake Embedded Controller (EC) to satisfy macOS Catalina's EC addiction, and disabling the EC on desktops to prevent panics and crashes.
## What this SSDT does
## Quick Fix
The purpose of SSDT-EC/UBX is a couple things:
What quick fix refers to is a fancy little SSDT that actually determines what EC needs to be turned off and creates a fake EC. The problem with this SSDT is it has a lot of bloat and can result in extra time in booting, so for this guide we **highly** recommends creating your own SSDT.
* On desktops, the EC(or better known as the embedded controller) isn't compatible with AppleACPIEC driver, to get around this we disable this device when running macOS
* AppleBusPowerController will look for a device named `EC`, so we will want to create a fake device for this kext to load onto
* AppleBusPowerController also requires a USBX device to supply USB power properties for Skylake and newer, so we will bundle this device in with the EC fix
* On laptops, the EC is used for hotkeys and battery so disabling this isn't all too ideal. Problem is our EC's name isn't compatible, so we will create a simple "fake" EC device that will satisfy Apple
For desktops, you can grab either one of these pre-compiled SSDT files:
So TL;DR:
* [SSDT-EC-USBX-DESKTOP](https://github.com/dortania/Getting-Started-With-ACPI/blob/master/extra-files/compiled/SSDT-EC-USBX-DESKTOP.aml)
* For Skylake and newer and all AMD systems
* [SSDT-EC-DESKTOP](https://github.com/dortania/Getting-Started-With-ACPI/blob/master/extra-files/compiled/SSDT-EC-DESKTOP.aml)
* For Broadwell and older
* EC is embedded controller
* Desktops will want real EC off, and a fake EC created
* Laptops will just want an additional fale EC present
* Skylake and newer devices will want USBX as well
For laptops, you'll can use one of these pre-builts:
## Methods to make this SSDT
* [SSDT-EC-USBX-LAPTOP.aml](https://github.com/dortania/Getting-Started-With-ACPI/blob/master/extra-files/compiled/SSDT-EC-USBX-LAPTOP.aml)
* For Skylake and newer
* [SSDT-EC-LAPTOP.aml](https://github.com/dortania/Getting-Started-With-ACPI/blob/master/extra-files/compiled/SSDT-EC-LAPTOP.aml)
* For Broadwell and older
For the EC fix, there are 3 methods you can choose from:
## Proper Fix
To properly patch your EC, we're gonna need some files:
* [SSDT-EC-USBX](https://github.com/acidanthera/OpenCorePkg/blob/master/Docs/AcpiSamples/SSDT-EC-USBX.dsl)
* For Skylake and newer and all AMD systems
* [SSDT-EC](https://github.com/acidanthera/OpenCorePkg/blob/master/Docs/AcpiSamples/SSDT-EC.dsl)
* For Broadwell and older
And with these 2, you can continue below
### Fixing the Path
For Intel systems, the path is *likely* correct, though it's worth double checking. You will want to find your current EC by opening your decompiled DSDT and searching for `PNP0C09`. You should get a result similar to this:
![](/images/Desktops/pnp.png)
> Note: If your EC device happens to already be named `EC` in your DSDT, you do not need SSDT-EC at all and can move on.
As you can see, `PNP0C09` is found under the `EC0` device and `_SB.PC00.LPC0` scope. Looking at the SSDT though, this differs from the path `_SB_.PCI0.LPCB` seen within. This will need to be corrected in the SSDT to match what is found in the DSDT. Using the above image, you should get something similar to this:
```text
Scope (\_SB.PC00.LPC0) <- Rename this
{
Device (EC) <- DO NOT RENAME THIS
{
Name (_HID, "ACID0001") // _HID: Hardware ID
Method (_STA, 0, NotSerialized) // _STA: Status
{
If (_OSI ("Darwin"))
{
Return (0x0F) // Enable our Fake EC only when in macOS
}
Else
{
Return (Zero)
}
}
}
}
```
Generally, `PC00.LPC0` is most common on Intel HEDT while `PCI0.SBRG` is most common on AMD. **Always verify your path and device. DO NOT ASSUME**.
If you are having issues finding the Scope, you can use the below Hardware IDs or Addresses:
* Finding the LowPinCount path:
* Intel: Search `Name (_ADR, 0x001F0000)`
* AMD: Search `Name (_ADR, 0x00140003)`
* Finding the PCI path:
* Intel: Search `PNP0A08` (If multiple show up, use the first one)
* AMD: Assume `PCI0`(most AMD DSDTs don't declare the PCI path directly)
**Make sure that you do not rename `Device (EC)`. This is what macOS Catalina looks for to boot!**
**Desktop users, continue down below to disabling your actual EC. Laptops should not diable their EC**. Laptop users should follow [What happens if no `PNP0C09` show up](#what-happens-if-no-pnp0c09-show-up)
### Disabling real EC (Desktops only)
For desktops, it's preferable to disable the actual Embedded Controller as it is not supported by macOS 100% and is known to sometimes cause panics. If we use the screenshot above, we'll see that the device name is `EC0`. Other common names for ECs are `H_EC`, `ECDV`, and `EC0`. You'll want to grab your SSDT again and uncomment the `_STA` method to disable it (remove the `/*` and `*/` around it):
```text
/* <- REMOVE THIS
External (_SB_.PCI0.LPCB.EC0, DeviceObj) <- Rename this
Scope (\_SB.PCI0.LPCB.EC0) <- Rename this
{
Method (_STA, 0, NotSerialized) // _STA: Status
{
If (_OSI ("Darwin")) // Darwin = macOS
{
Return (0) // Hides our real EC only when in macOS
}
Else
{
Return (0x0F)
}
}
}
*/ <- REMOVE THIS
```
Like above, make sure the path is correct for the External and Scope field.
### What happens if device in the DSDT is already named `EC`
For laptops, you don't need SSDT-EC at all.
### 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` (Hardware ID)
* `_CRS` (Current Resource Settings)
* `_GPE` (General Purpose Events)
Note if you have an STA Method as well, see below: [STA Edge Case](/Desktops/desktop-ec.md#sta-edge-case)
### What happens if no `PNP0C09` show up
This means you only need to fake an Embedded Controller rather so that AppleBusPowerController will load and handle USB power properly and continue booting. To make the actual SSDT, its *almost* plug and play as no uncommenting needed. The main thing that needs to be changed:
* LowPinCount path
* PCI path
We want to make sure the SSDT hooks into our DSDT correctly so we need to make sure the ACPI path is correct:
* Finding the LowPinCount path:
* Intel: Search `Name (_ADR, 0x001F0000)`
* AMD: Search `Name (_ADR, 0x00140003)`
* Finding the PCI path:
* Intel: Search `PNP0A08` (If multiple show up, use the first one)
* AMD: Assume `PCI0`(most AMD DSDTs don't declare the PCI path directly)
![](/images/Desktops/lpc.png)
Once you find out, change `PCI0.LPCB` to your correct path:
```text
Scope (\_SB.PC00.LPC0) <- Rename this
{
Device (EC) <- DO NOT RENAME THIS
{
Name (_HID, "ACID0001") // _HID: Hardware ID
Method (_STA, 0, NotSerialized) // _STA: Status
{
If (_OSI ("Darwin"))
{
Return (0x0F) // Enable our Fake EC only when in macOS
}
Else
{
Return (Zero)
}
}
}
}
```
![](/images/Desktops/ec.png)
For those having issues, you can also check `Device Manager -> CPU -> BIOS device Name`. Windows will only report the main EC so will save you some headache on that
### STA Edge Case
![Credit to rottenpants466](/images/Desktops/sta.png)
Do note that if your PNP0C09 device has a `Method (_STA` already you can skip down to "What happens if no `PNP0C09` show up?".
The reason for this is that the real EC is considered disabled already.
### Correcting USB Power
> Hey what about USBX? Do I need to do anything?
USBX is universal across all systems, it just creates a USBX device that forces USB power properties. This is crucial for fixing Mics, DACs, Webcams, Bluetooth Dongles and other high power draw devices. This is not mandatory to boot but should be added in post-install if not before.
Note that it requires a device named EC to function correctly(Which is done with our SSDT-EC) and that USBX is only used on skylake+ systems - those on Broadwell and older can ignore as Apple already suppiles USB power properties.
## [Now you're ready to compile the SSDT!](/Manual/compile.md)
* [Prebuilt](/Universal/ec-methods/prebuilt.md)
* [SSDTTime](/Universal/ec-methods/ssdttime.md)
* Note this method does not support **laptops**, **servers** or **HEDT systems**
* [Manual](/Universal/ec-methods/manual.md)