Contribute
Register

[Guide] Disabling discrete graphics in dual-GPU laptops

Hello Rehabman,

I have been trying to disable the dedicated card on my laptop without any success.

Here is the _INI method on SSDT-7-82C1

Code:
Scope (\_SB.PCI0.RP01.PEGP)
    {
        Method (_INI, 0, NotSerialized)  // _INI: Initialize
        {
            Store (Zero, \_SB.PCI0.RP01.PEGP._ADR)
        }
    }

and the _OFF method on SSDT-9-82C1

Code:
Method (_OFF, 0, Serialized)  // _OFF: Power Off
        {
            If (LEqual (CTXT, Zero))
            {
                If (LNotEqual (GPRF, One))
                {
                    Store (VGAR, VGAB)
                }

                Store (One, CTXT)
            }

            \_SB.PCI0.HGOF (One)
        }

If I apply the patch Disable from _INI I end up with something like this.

patched _INI method from SSDT-7-82C1

Code:
Scope (\_SB.PCI0.RP01.PEGP)
    {
        Method (_INI, 0, NotSerialized)  // _INI: Initialize
        {
            Store (Zero, \_SB.PCI0.RP01.PEGP._ADR)
            //added to turn nvidia/radeon off
            External(\_SB.PCI0.RP01.PEGP._OFF, MethodObj)
            _OFF()
        }
    }

if I try to boot with the patched SSDT the system hangs and it won't boot and I can't boot without the SSDT-DiscreteSpoof

Attached my files
Thanks.

IMG_0758.JPG
 

Attachments

  • debug_29864.zip
    4.8 MB · Views: 95
Hello Rehabman,

I have been trying to disable the dedicated card on my laptop without any success.

Here is the _INI method on SSDT-7-82C1

Code:
Scope (\_SB.PCI0.RP01.PEGP)
    {
        Method (_INI, 0, NotSerialized)  // _INI: Initialize
        {
            Store (Zero, \_SB.PCI0.RP01.PEGP._ADR)
        }
    }

and the _OFF method on SSDT-9-82C1

Code:
Method (_OFF, 0, Serialized)  // _OFF: Power Off
        {
            If (LEqual (CTXT, Zero))
            {
                If (LNotEqual (GPRF, One))
                {
                    Store (VGAR, VGAB)
                }

                Store (One, CTXT)
            }

            \_SB.PCI0.HGOF (One)
        }

If I apply the patch Disable from _INI I end up with something like this.

patched _INI method from SSDT-7-82C1

Code:
Scope (\_SB.PCI0.RP01.PEGP)
    {
        Method (_INI, 0, NotSerialized)  // _INI: Initialize
        {
            Store (Zero, \_SB.PCI0.RP01.PEGP._ADR)
            //added to turn nvidia/radeon off
            External(\_SB.PCI0.RP01.PEGP._OFF, MethodObj)
            _OFF()
        }
    }

if I try to boot with the patched SSDT the system hangs and it won't boot and I can't boot without the SSDT-DiscreteSpoof

Attached my files
Thanks.

View attachment 314540

Problem reporting files must represent the problem scenario.

Leave SSDT-DiscreteSpoof.aml in ACPI/patched so you can boot.
Then attach new problem reporting files.
 
Tried to boot but got a kernel panic when added the patched SSDT-7-82C1.

Attached screenshots.
 

Attachments

  • IMG_0763.JPG
    IMG_0763.JPG
    1.6 MB · Views: 74
  • IMG_0764.JPG
    IMG_0764.JPG
    3 MB · Views: 81
Sorry tried to attach them twice but appear upside down

iyTuPB4.jpg


a72qGyD.jpg
 
Last edited:
Used the script to generate the problem reporting files don't know why is missing, but here it is.
 

Attachments

  • CLOVER.zip
    2 MB · Views: 80
Used the script to generate the problem reporting files don't know why is missing, but here it is.

_INI calls _OFF (as you patched for it).
_OFF calls HGOF.
HGOF has EC references:
Code:
            Store (Zero, \_SB.PCI0.LPCB.EC0.GFXT)

As per guide, EC related code in the _OFF execution path must be moved to EC _REG.

Read post #1.
 
Thanks will try that right away.
 
Looks like that did it, I can't see the NVIDIA card from DPCIManager.

Removed this line from the HGOF method on SSDT-8-82C1
Code:
            Store (Zero, \_SB.PCI0.LPCB.EC0.GFXT)

left _OFF method as is on SSDT-9-82C1 and added that line to the _REG method on DSDT
Code:
Method (_REG, 2, NotSerialized)  // _REG: Region Availability
            {
                If (LAnd (LEqual (Arg0, 0x03), LEqual (Arg1, One)))
                {
                    Store (One, ECOK)
                    GBAS ()
                    ECMI ()
                    Store (Zero, \_SB.PCI0.LPCB.EC0.GFXT)

                }
            }

Thanks Rehabman

By the way is there another way to verify that the card is off and not consuming any battery?
 
Back
Top