mirror of
https://github.com/AskDavis/Getting-Started-With-ACPI.git
synced 2026-01-01 05:05:57 -08:00
Add dGPU disabling guide
This commit is contained in:
@@ -14,6 +14,7 @@ To find the PCI path of a GPU is fairly simple, best way to find it is running W
|
||||
* Open Device Manager
|
||||
* Select Display Adapters, then right click your GPU and select Properties
|
||||
* Under the Details Tab, search for "Location Paths"
|
||||
* Note some GPUs may be hiding under "BIOS device name"
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -10,3 +10,9 @@ No configuration required for most, just drop the prebuilt file into your EFI:
|
||||
* For Coffeelake users if the regular SSDT doesn't work, try SSDT-PNLF first and do not mix together
|
||||
|
||||
Note: there are some rare cases where the iGPU is called `GPU0` or `VID`in the DSDT, you can double check by searching for `PCI0.GFX0`, `PCI0.VID` and `PCI0.GPU0`. Whichever shows up is your device
|
||||
|
||||
If Windows has been installed on the device, you can also do the following:
|
||||
|
||||
```text
|
||||
Device Manager -> Display Adapters -> Properties -> Details > BIOS device name
|
||||
```
|
||||
|
||||
78
Laptops/laptop-disable.md
Normal file
78
Laptops/laptop-disable.md
Normal file
@@ -0,0 +1,78 @@
|
||||
# Disabling laptop dGPUs
|
||||
|
||||
So with laptops, we can hide the dGPU from macOS with the little boot-arg called `-wegnoegpu` from WhateverGreen. But one small problem, the dGPU is still pulling power draining your battery slowly. We'll be going over 2 methods for disabling the dGPU in a laptop:
|
||||
|
||||
* [Optimus Method](/Laptops/laptop-disable.md#optimus-method)
|
||||
* [Bumblebee Method](/Laptops/laptop-disable.md#bumblebee-method)
|
||||
|
||||
## Optimus Method
|
||||
|
||||
How this works is that we call the `.off` method found on Optimus GPUs, this is the expected way to power off a GPU but some may find their dGPU will power back up later on. Mainly seen in Lenovo's, the Optimus method should work for most users:
|
||||
|
||||
To start, grab [SSDT-dGPU-Off.dsl](https://github.com/khronokernel/Getting-Started-With-ACPI/blob/master/extra-files/SSDT-dGPU-Off.dsl.zip)
|
||||
|
||||
|
||||
Next we need to get on Windows, and head to the following:
|
||||
|
||||
```text
|
||||
Device Manager -> Display Adapters -> dGPU -> Properties -> Details > BIOS device name
|
||||
```
|
||||
|
||||
This should provided you with an ACPI path for your dGPU, most commonly:
|
||||
|
||||
* Nvidia dGPU: `\_SB.PCI0.PEG0.PEGP`
|
||||
* AMD dGPU: `\_SB.PCI0.PEGP.DGFX`
|
||||
|
||||
Now with that, we'll need to change the ACPI path in the SSDT. Main sections:
|
||||
|
||||
```text
|
||||
External(_SB.PCI0.PEG0.PEGP._OFF, MethodObj) // ACPI Path of dGPU
|
||||
```text
|
||||
|
||||
```text
|
||||
If (CondRefOf(\_SB.PCI0.PEG0.PEGP._OFF)) { \_SB.PCI0.PEG0.PEGP._OFF() }
|
||||
```
|
||||
|
||||
Once adapted to your config, head to the compile section
|
||||
|
||||
|
||||
## Bumblebee Method
|
||||
|
||||
With some machines, the simple `.off` call won't keep the card off properly, that's where the Bumblebee method comes in. This SSDT will actually send the dGPU into D3 state being the lowest power state a device can support. Creit to Mameo for the original adaptation
|
||||
|
||||
To start, grab [SSDT-NoHybGfx.dsl](https://github.com/khronokernel/Getting-Started-With-ACPI/blob/master/extra-files/SSDT-NoHybGfx.dsl.zip)
|
||||
|
||||
Next we need to get on Windows, and head to the following:
|
||||
|
||||
```text
|
||||
Device Manager -> Display Adapters -> dGPU -> Properties -> Details > BIOS device name
|
||||
```
|
||||
|
||||
This should provided you with an ACPI path for your dGPU, most commonly:
|
||||
|
||||
* Nvidia dGPU: `\_SB.PCI0.PEG0.PEGP`
|
||||
* AMD dGPU: `\_SB.PCI0.PEGP.DGFX`
|
||||
|
||||
Now with that, we'll need to change the ACPI path in the SSDT. Main sections:
|
||||
|
||||
```text
|
||||
External (_SB_.PCI0.PEG0.PEGP._DSM, MethodObj) // dGPU ACPI Path
|
||||
External (_SB_.PCI0.PEG0.PEGP._PS3, MethodObj) // dGPU ACPI Path
|
||||
```
|
||||
|
||||
```text
|
||||
If ((CondRefOf (\_SB.PCI0.PEG0.PEGP._DSM) && CondRefOf (\_SB.PCI0.PEG0.PEGP._PS3)))
|
||||
{
|
||||
// Card Off Request
|
||||
\_SB.PCI0.PEG0.PEGP._DSM (ToUUID ("a486d8f8-0bda-471b-a72b-6042a6b5bee0"), 0x0100, 0x1A, Buffer (0x04)
|
||||
{
|
||||
0x01, 0x00, 0x00, 0x03
|
||||
})
|
||||
// Card Off
|
||||
\_SB.PCI0.PEG0.PEGP._PS3 ()
|
||||
}
|
||||
```
|
||||
|
||||
Once adapted to your config, head to the compile section
|
||||
|
||||
## [Now you're ready to compile the SSDT!](/Manual/compile.md)
|
||||
@@ -31,11 +31,11 @@ To determine whether you need [SSDT-AWAC](https://github.com/acidanthera/OpenCor
|
||||
|
||||
* open your decompiled DSDT and search for `Device (AWAC)`
|
||||
* If **nothing shows up** then no need to continue and **no need for this SSDT** as you have no AWAC. **Otherwise, continue on!**
|
||||
* If you get a result then you have an `AWAC` system clock present, then continue with the **next search for `STAS ==`**:
|
||||
* If you get a result then you have an `AWAC` system clock present, then continue with the **next search for `STAS`**:
|
||||
|
||||

|
||||
|
||||
As you can see we found the `STAS ==` in our DSDT, this means we're able to force enable our Legacy RTC. In this case, [SSDT-AWAC](https://github.com/acidanthera/OpenCorePkg/blob/master/Docs/AcpiSamples/SSDT-AWAC.dsl) will be used As-Is with no modifications required. Just need to compile. Note that `STAS` may be found in AWAC first instead of RTC like in our example, this is normal.
|
||||
As you can see we found the `STAS` in our DSDT, this means we're able to force enable our Legacy RTC. In this case, [SSDT-AWAC](https://github.com/acidanthera/OpenCorePkg/blob/master/Docs/AcpiSamples/SSDT-AWAC.dsl) will be used As-Is with no modifications required. Just need to compile. Note that `STAS` may be found in AWAC first instead of RTC like in our example, this is normal.
|
||||
|
||||
For systems where **no `STAS`** shows up **but** you do have `AWAC`, you can use [SSDT-RTC0](https://github.com/acidanthera/OpenCorePkg/blob/master/Docs/AcpiSamples/SSDT-RTC0.dsl) though you will need to check the naming of LPC in your DSDT
|
||||
|
||||
|
||||
@@ -9,5 +9,8 @@ DefinitionBlock("", "SSDT", 2, "Slav", "GPI0", 0)
|
||||
{
|
||||
GPEN = One
|
||||
}
|
||||
Else
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
@@ -35,7 +35,6 @@ DefinitionBlock ("", "SSDT", 2, "Slav", "AMDGPU", 0x00001000)
|
||||
}
|
||||
Else
|
||||
{
|
||||
Return (Zero)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Binary file not shown.
50
extra-files/SSDT-NoHybGfx.dsl
Normal file
50
extra-files/SSDT-NoHybGfx.dsl
Normal file
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* Disable discrete graphics (c) Bumblebee-Project
|
||||
* >> https://github.com/Bumblebee-Project/Bumblebee/wiki/ACPI-for-Developers#acpi-and-the-nvidia-card
|
||||
* ---
|
||||
* Important: Change all ACPI paths accordingly.
|
||||
* Credit to Maemo for original idea and midi1996 for the SSDT
|
||||
*/
|
||||
DefinitionBlock ("", "SSDT", 2, "MAEMO", "NoHybGfx", 0x00000000)
|
||||
{
|
||||
External (_SB_.PCI0.PEG0.PEGP._DSM, MethodObj) // dGPU ACPI Path
|
||||
External (_SB_.PCI0.PEG0.PEGP._PS3, MethodObj) // dGPU ACPI Path
|
||||
|
||||
Device (NHG1)
|
||||
{
|
||||
Name (_HID, "NHG10000") // _HID: Hardware ID
|
||||
Method (_STA, 0, NotSerialized) // _STA: Status
|
||||
{
|
||||
If (_OSI ("Darwin"))
|
||||
{
|
||||
Return (0x0F)
|
||||
}
|
||||
Else
|
||||
{
|
||||
Return (Zero)
|
||||
}
|
||||
}
|
||||
|
||||
Method (_INI, 0, NotSerialized) // _INI: Initialize
|
||||
{
|
||||
If (_OSI ("Darwin"))
|
||||
{
|
||||
// If conditional methods reference creation successful
|
||||
If ((CondRefOf (\_SB.PCI0.PEG0.PEGP._DSM) && CondRefOf (\_SB.PCI0.PEG0.PEGP._PS3)))
|
||||
{
|
||||
// Card Off Request
|
||||
\_SB.PCI0.PEG0.PEGP._DSM (ToUUID ("a486d8f8-0bda-471b-a72b-6042a6b5bee0"), 0x0100, 0x1A, Buffer (0x04)
|
||||
{
|
||||
0x01, 0x00, 0x00, 0x03
|
||||
})
|
||||
// Card Off
|
||||
\_SB.PCI0.PEG0.PEGP._PS3 ()
|
||||
}
|
||||
}
|
||||
Else
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BIN
extra-files/SSDT-NoHybGfx.dsl.zip
Normal file
BIN
extra-files/SSDT-NoHybGfx.dsl.zip
Normal file
Binary file not shown.
35
extra-files/SSDT-dGPU-Off.dsl
Normal file
35
extra-files/SSDT-dGPU-Off.dsl
Normal file
@@ -0,0 +1,35 @@
|
||||
/* Based off of Rebaman's work:
|
||||
* https://github.com/RehabMan/OS-X-Clover-Laptop-Config/blob/master/hotpatch/SSDT-DDGPU.dsl
|
||||
*/
|
||||
DefinitionBlock("", "SSDT", 2, "Slav", "dGPU-Off", 0)
|
||||
{
|
||||
External(_SB.PCI0.PEG0.PEGP._OFF, MethodObj) // ACPI Path of dGPU
|
||||
|
||||
Device(RMD1)
|
||||
{
|
||||
Name(_HID, "RMD10000") // _HID: Hardware ID
|
||||
Method (_STA, 0, NotSerialized) // _STA: Status
|
||||
{
|
||||
If (_OSI ("Darwin"))
|
||||
{
|
||||
Return (0x0F)
|
||||
}
|
||||
Else
|
||||
{
|
||||
Return (Zero)
|
||||
}
|
||||
}
|
||||
|
||||
Method(_INI)
|
||||
{
|
||||
If (_OSI ("Darwin"))
|
||||
{
|
||||
// disable discrete graphics (Nvidia/Radeon) if it is present
|
||||
If (CondRefOf(\_SB.PCI0.PEG0.PEGP._OFF)) { \_SB.PCI0.PEG0.PEGP._OFF() }
|
||||
}
|
||||
Else
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
extra-files/SSDT-dGPU-Off.dsl.zip
Normal file
BIN
extra-files/SSDT-dGPU-Off.dsl.zip
Normal file
Binary file not shown.
Reference in New Issue
Block a user