Contribute
Register

[Guide] Disabling discrete graphics in dual-GPU laptops

Joined
Nov 3, 2013
Messages
90
Motherboard
Dell Inspiron 7567
CPU
Intel i7 7700HQ
Graphics
Intel 630 + NVIDIA 1050TI
Hello @RehabMan, I hope you can help me out. I am not good with DSDT/SSDT patching as I have been using the hot patch method using files provided by @Nihhaar (slightly modified by me) for our Dell Inspiron 7567 and have an issue.

When I first boot up the laptop, using Intel Power Gadget shows Power PKG when idle being 0.50. Whenever I put the computer to sleep and resume, the Power PKG never goes below 1.50 and it affects battery life. My dGPU is disabled, but researching I found this thread which says to patch the dGPU for _PTS and _WAK, but I don't know how? I did try looking at your Hotpatch files and found the PTSWAK.dsl file and I've tried to apply your patch for sleep/wake problems to fix, but still have the same issue, so not sure what the issue is. Here is my debug files before I tried the SSDT-PTSWAK.dsl mentioned above as want to know what I can do?

Edit: I was able to look at source files for other people who have a Dell laptop and found they used SSDT-config combined with a SSDT-PTSWAKE.aml so was able to get dGPU to stay disabled after sleep.

Thanks for your time!
 

Attachments

Last edited:
Joined
Jul 24, 2016
Messages
19
Motherboard
Lenovo E550
CPU
i7-5500u
Graphics
HD5500, 1928x1080; AMD Radeon R7 M260
Picking up trying to disable my DGPU on Broadwell E550 again.

All _OFF are located in DSDT, as well as the the _INI for the DGPU seems to be at \_SB.PCIO.PEG.VID._INI
Code:
Device (VID)
                {
                    Name (_ADR, 0x00)  // _ADR: Address
                    Method (ISOP, 0, NotSerialized)
                    {
                        Return (LAnd (VDSP, LAnd (VIGD, VDSC)))
                    }

                    OperationRegion (VPCG, PCI_Config, 0x00, 0x0100)
                    Field (VPCG, DWordAcc, NoLock, Preserve)
                    {
                        Offset (0x18), 
                        BADR,   32, 
                        Offset (0x2C), 
                        VSID,   32, 
                        Offset (0x40), 
                        VIDS,   32, 
                        Offset (0x70), 
                        VPWR,   8
                    }

                    OperationRegion (GPPB, PCI_Config, 0xB4, 0x14)
                    Field (GPPB, ByteAcc, NoLock, Preserve)
                    {
                        PBCI,   8, 
                        PBNP,   8, 
                        PBLS,   8, 
                        PBCC,   8, 
                        PBCR,   32, 
                        PBDI,   32, 
                        PBDO,   32, 
                        PBMR,   32
                    }

                    Method (VRSI, 0, NotSerialized)
                    {
                        Store (0x502117AA, VIDS)
                    }

                    Method (_INI, 0, NotSerialized)  // _INI: Initialize
                    {
                        \VHYB (0x04, 0x01)
                    }
The only _OFF that I can find that seems to be related is in a Power Resource Macro:
Code:
PowerResource (AMD3, 0x00, 0x0000)
                {
                    Name (_STA, One)  // _STA: Status
                    Method (_ON, 0, Serialized)  // _ON_: Power On
                    {
                        If (\_SB.PCI0.PEG.VID.ISOP ())
                        {
                            If (LEqual (0x01, DGOS))
                            {
                                \VHYB (0x00, 0x01)
                                Sleep (0x7D)
                                \VHYB (0x02, 0x01)
                                Sleep (0x01)
                                \VHYB (0x08, 0x01)
                                \VHYB (0x08, 0x03)
                                While (LEqual (\LCHK (0x01), 0x00))
                                {
                                    Store (0x20, Local0)
                                    While (Local0)
                                    {
                                        If (LEqual (\LCHK (0x01), 0x00))
                                        {
                                            Stall (0x64)
                                            Decrement (Local0)
                                        }
                                        Else
                                        {
                                            Break
                                        }
                                    }

                                    If (LEqual (Local0, Zero))
                                    {
                                        Store (0x01, \_SB.PCI0.PEG.RTLK)
                                        Stall (0x64)
                                    }
                                }

                                If (VMSH)
                                {
                                    \VHYB (0x0D, 0x00)
                                }

                                Store (0xC8, Local1)
                                While (Local1)
                                {
                                    Sleep (0x01)
                                    If (\VHYB (0x0C, 0x00))
                                    {
                                        Break
                                    }

                                    Decrement (Local1)
                                }

                                \VHYB (0x04, 0x00)
                                Store (Zero, DGOS)
                                If (\_SB.PCI0.LPC.DSPS)
                                {
                                    Store (One, \_SB.PCI0.LPC.EC.ASBF)
                                }
                            }
                        }

                        Store (One, _STA)
                    }

                    Method (_OFF, 0, Serialized)  // _OFF: Power Off
                    {
                        If (\_SB.PCI0.PEG.VID.ISOP ())
                        {
                            If (LEqual (0x00, DGOS))
                            {
                                If (\_SB.PCI0.LPC.DSPS)
                                {
                                    Store (Zero, \_SB.PCI0.LPC.EC.ASBF)
                                }

                                \VHYB (0x04, 0x01)
                                \VHYB (0x08, 0x00)
                                Store (0x0A, Local0)
                                Store (0x32, Local1)
                                While (Local1)
                                {
                                    Sleep (Local0)
                                    If (\LCHK (0x00))
                                    {
                                        Break
                                    }

                                    Decrement (Local1)
                                }

                                \VHYB (0x08, 0x02)
                                \VHYB (0x02, 0x00)
                                \VHYB (0x00, 0x00)
                                Store (One, DGOS)
                            }
                        }

                        Store (Zero, _STA)
                    }
                }
I've tried googling ISOP to see what that could mean as far as whether it's the right _OFF, but can't really find anything and it's the only _OFF that seems to be related. Empty _PS3. I've looked at other Lenovo DGPU patches and in this thread and can't find anything that's similar -- at least not similarities that I can pick out with my non-existent coding skills.
 

Attachments

Joined
Oct 11, 2012
Messages
84
Motherboard
Asus N552VX-FW131T
CPU
i7-6700HQ
Graphics
HD 530 + GT 950m, 1920x1080
Followed the guide but I keep having an heavy battery drain, can anyone check my config?
 

Attachments

Joined
Apr 2, 2012
Messages
9
Motherboard
Gigabyte Z370N-WiFi rev. 1.0
CPU
Intel Core i7-8700K
Graphics
EVGA Geforce RTX 2080
Mobile Phone
Android, iOS
Hello, I'm trying to do something like this on a dual-boot desktop system (Gigabyte Z370N-Wifi) with OSX Mojave (that as you know better than me, doesn't support Nvidia cards in any way). The mobo has a BIOS option that lets you choose to which card (IGFX or PCI-Ex) give priority. So if I give priority to the PCI-Ex GPU, OSX boots fine, but when I switch the monitor to the input port connected to the IGFX I only get a noisy image of what should be the login screen (I can see the mouse pointer as a box of pixels and hear sounds). Otherwise if I give priority to the IGFX, OSX loads the graphics interface fine, but with this option, I get a huge performance hit in games on Windows for some unknown reason.
So I was considering setting the BIOS to PCI-Ex priority and then disabling the card in OSX via ACPI, but I can't follow this guide because my disassembled ACPI files don't contain the correct methods (as far as I can tell).

EDIT: Finally managed to disable discrete GPU. Gave up the DSDT-SSDT procedure explained here and, googling around, I stumbled into this on another site.

So, following the hint given in the first comment, I just had to add in my config.plist, under "Devices":

Code:
<key>Properties</key>
        <dict>
            <key>PciRoot(0x0)/Pci(0x2,0x0)</key>
            <dict>
                <key>disable-external-gpu</key>
                <data>
                AQAAAA==
                </data>
            </dict>
        </dict>
Now the system boots on PCI-Ex and when it seems to hang on the Apple logo, I just have to switch the monitor to the input connected to the IGFX to show the login screen.
 

Attachments

Last edited:
Joined
May 7, 2019
Messages
1
Motherboard
E5-575G
CPU
i5-6200
Graphics
GeForce 940MX+HD 520
I'm a Newbie.Please Help me.I tried to edit DSDT and SSDT files as the guide.But when I put them to acpi\patched the machine is not booting up.It gets stuck in middle of the process. Can anyone please help me with the editing. I attached the origin files with dsls.
 

Attachments

Joined
Jun 9, 2013
Messages
9
Motherboard
HP OEM, LGA 775, American Megatrends BIOS
CPU
Intel Pentium Dual-Core E5200
Graphics
Intel G33/G31
Mac
MacBook Pro, Mac mini, Mac Pro
Classic Mac
Power Mac
Mobile Phone
iOS
Hi Community,
I'm trying to accomplish this (disabling the GPU) on an Desktop Server (HP Data Vault X510) running El Captain on an Pentium E5200 (probably patched Mojave on an Intel Core 2 Duo E8600 soon). While the OS altogether is running flawlessly vanilla (except Realtek ethernet drivers, NullCPUPowerManagment) it does not sleep, advertising .Display-boot after running (pmset -g assertions) as the culprit (so not NullCPUPowerManagment related, I think).
Obviously the available Intel G33/G31 chipset is not supported at all, but nor do I need it, as it's a headless server (read: actually no external monitor port whatsoever - well an internal GPIO one, no PCI slot).
As I used to run an actual Mac Pro 4,1 (5,1) without any GPU, I know that macOS can run and sleep without any Graphics. This is why I do want to disable it (the G33/G31) altogether. (Which also should give some thermal headroom.)
However taking this guide as an inspiration (not same usecase) I'm running into an issue quiet early. I cannot even create the .dsl files, as the iasl -da -dl *.aml fails with the following output (.aml files extracted using Clover BIOS 4920):
Code:
$ iasl -da -dl *.aml

Intel ACPI Component Architecture
ASL+ Optimizing Compiler/Disassembler version 20180427(RM)
Copyright (c) 2000 - 2018 Intel Corporation

Input file APIC.aml, Length 0x6C (108) bytes
Illegal instruction: 4

EDIT 5-17-19: I forgot to mention, that it doesn't make any difference to inject Intel or not. Also the BIOS understandably does not provide an option to disable it, as there isn't any alternative. As well toggling GFX0/iGPU doesn't make a difference.

EDIT 2: Disabling the entire PCI device does not seem to be an option, as other devices reside on the same bus (USB…). Would this rule-out this method altogether?

EDIT 3, 5-19-19: I did somewhat get along. With another tool I got to decompile the .aml files. However as there wasn't any _OFF method at all (neither any _INI one), so I instead opted to use an alternation of this great @RehabMan guide.
The result is somewhat strange (see the About_this_Mac screenshot), but working non the less. BTW the result is identically to deleting IONDRVSupport.kext (on my non-GPU system), but it's update proof.
 

Attachments

Last edited:
Top