Contribute
Register

[Guide] Disabling discrete graphics in dual-GPU laptops

The reason I wrote the guide is so you can do it yourself.
Please read it and work through it.
You make it sound like you didn't work through the example files.

Hi RehabMan I tried it and in the last step which I need to set the \_SB.PCI0.RP09.PXSX.HGOF () that is removed from the SSDT-14.dsl which you can see in previous dsdt it exist. I tried deleted it and put it in my DSDT inside _REG which is like this:

Code:
                If (LEqual (Arg0, 0x03))
                {
                    Store (Arg1, ECAV)
                }
                //added to turn nvidia/radeon off
                If (LAnd(LEqual(Arg0,3),LEqual(Arg1,1)))
                {
                    \_SB.PCI0.RP09.PXSX.HGOF ()
                }

When I try to compile it, it says:
18092, 6084, Object does not exist (\_SB.PCI0.RP09.PXSX.HGOF)

Where did I got wrong can you help me?
I sent the dsl that is broken dor you to see.

Thanks Anyway
 

Attachments

  • dsl.zip
    87.7 KB · Views: 79
Hi RehabMan I tried it and in the last step which I need to set the \_SB.PCI0.RP09.PXSX.HGOF () that is removed from the SSDT-14.dsl which you can see in previous dsdt it exist. I tried deleted it and put it in my DSDT inside _REG which is like this:

Code:
                If (LEqual (Arg0, 0x03))
                {
                    Store (Arg1, ECAV)
                }
                //added to turn nvidia/radeon off
                If (LAnd(LEqual(Arg0,3),LEqual(Arg1,1)))
                {
                    \_SB.PCI0.RP09.PXSX.HGOF ()
                }

When I try to compile it, it says:
18092, 6084, Object does not exist (\_SB.PCI0.RP09.PXSX.HGOF)

Where did I got wrong can you help me?
I sent the dsl that is broken dor you to see.

Thanks Anyway

You should not be calling HGOF from _REG.
Only the EC related code is moved to _REG.
Read the guide carefully.
Work through the example files provided to get a better understanding before trying to apply to your own files.
 
You should not be calling HGOF from _REG.
Only the EC related code is moved to _REG.
Read the guide carefully.
Work through the example files provided to get a better understanding before trying to apply to your own files.

Hi as said ealier your EC Code is:
\_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero)
as said here:
Code:
        Method (_OFF, 0, Serialized)  // _OFF: Power Off
        {
            If (LEqual (CTXT, Zero))
            {
                \_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero)
                If (LNotEqual (GPRF, One))
                {
                    Store (VGAR, VGAB)
                }

                Store (One, CTXT)
            }

            SGOF ()
        }

Mine does not have that but have:
\_SB.PCI0.RP09.PXSX.HGOF ()
as said here:

Code:
        Method (_OFF, 0, Serialized)  // _OFF: Power Off
            {
                If (LEqual (MSD3, Zero))
                {
                    H2OP (0x66)
                    \_SB.PCI0.RP09.PXSX.HGOF ()
                    Store (Zero, _STA)
                    Store (0x03, MSD3)
                    H2OP (0x67)
                }
            }

So I must put the HGOF inside my DSDT, can you correct me if im wrong or misunderstood your guide,
 
Hi as said ealier your EC Code is:
\_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero)
as said here:
Code:
        Method (_OFF, 0, Serialized)  // _OFF: Power Off
        {
            If (LEqual (CTXT, Zero))
            {
                \_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero)
                If (LNotEqual (GPRF, One))
                {
                    Store (VGAR, VGAB)
                }

                Store (One, CTXT)
            }

            SGOF ()
        }

Mine does not have that but have:
\_SB.PCI0.RP09.PXSX.HGOF ()
as said here:

Code:
        Method (_OFF, 0, Serialized)  // _OFF: Power Off
            {
                If (LEqual (MSD3, Zero))
                {
                    H2OP (0x66)
                    \_SB.PCI0.RP09.PXSX.HGOF ()
                    Store (Zero, _STA)
                    Store (0x03, MSD3)
                    H2OP (0x67)
                }
            }

So I must put the HGOF inside my DSDT, can you correct me if im wrong or misunderstood your guide,

I already identified the EC related code in HGOF that must be moved to _REG in my previous reply:
Code:
            If (LEqual (ECON, One))
            {
                Store (Zero, \_SB.PCI0.LPCB.EC0.GATY)
            }
 
I already identified the EC related code in HGOF that must be moved to _REG in my previous reply:
Code:
            If (LEqual (ECON, One))
            {
                Store (Zero, \_SB.PCI0.LPCB.EC0.GATY)
            }

Hi, So I changed my _REG in the DSDT into this:

Code:
           Method (_REG, 2, NotSerialized)  // _REG: Region Availability
            {
                If (LEqual (Arg0, 0x03))
                {
                    Store (Arg1, ECAV)
                }
                //added to turn nvidia/radeon off
                If (LAnd(LEqual(Arg0,3),LEqual(Arg1,1)))
                {
                    \_SB.PCI0.LPCB.EC0.GATY ()
                }

Which Later gives me this code error:
18092, 6086, Not a control method, cannot invoke (\_SB.PCI0.LPCB.EC0.GATY is a RegionField)

Note: I haven't changed anything yet in SSDT so what should I do in the ssdt to fix it?
 
Hi, So I changed my _REG in the DSDT into this:

Code:
           Method (_REG, 2, NotSerialized)  // _REG: Region Availability
            {
                If (LEqual (Arg0, 0x03))
                {
                    Store (Arg1, ECAV)
                }
                //added to turn nvidia/radeon off
                If (LAnd(LEqual(Arg0,3),LEqual(Arg1,1)))
                {
                    \_SB.PCI0.LPCB.EC0.GATY ()
                }

Which Later gives me this code error:
18092, 6086, Not a control method, cannot invoke (\_SB.PCI0.LPCB.EC0.GATY is a RegionField)

Note: I haven't changed anything yet in SSDT so what should I do in the ssdt to fix it?

Why did you write:
Code:
\_SB.PCI0.LPCB.EC0.GATY ()

When the original code is:
Code:
Store (Zero, \_SB.PCI0.LPCB.EC0.GATY)

???
 
Why did you write:
Code:
\_SB.PCI0.LPCB.EC0.GATY ()

When the original code is:
Code:
Store (Zero, \_SB.PCI0.LPCB.EC0.GATY)

???

Ok So I have successfully patch my DSDT and SSDT into my ACPI/Patched. But it still show NVIDIA inside System Information/Display-Graphics

So it does not disabled, still on NVIDIA.

This is my latest file that does not fix. Do I really need to add kext for that and what I need to add.
Is my dsdt/ssdt correct Please correct me.

Thank You
 

Attachments

  • to be sent.zip
    2.4 MB · Views: 70
Ok So I have successfully patch my DSDT and SSDT into my ACPI/Patched. But it still show NVIDIA inside System Information/Display-Graphics

So it does not disabled, still on NVIDIA.

This is my latest file that does not fix. Do I really need to add kext for that and what I need to add.
Is my dsdt/ssdt correct Please correct me.

Thank You

You forgot SortedOrder to specify SSDT load order.
Look at the order your SSDTs are loading:
Code:
2:433  0:000  === [ ACPIPatchedAML ] ====================================
2:433  0:000  Unsorted
2:433  0:000  Inserting SSDT-6.aml from EFI\CLOVER\ACPI\patched ... Success
2:433  0:000  Inserting SSDT-5.aml from EFI\CLOVER\ACPI\patched ... Success
2:433  0:000  Inserting SSDT-4.aml from EFI\CLOVER\ACPI\patched ... Success
2:434  0:000  Inserting SSDT-3.aml from EFI\CLOVER\ACPI\patched ... Success
2:434  0:000  Inserting SSDT-2.aml from EFI\CLOVER\ACPI\patched ... Success
2:434  0:000  Inserting SSDT-1.aml from EFI\CLOVER\ACPI\patched ... Success
2:435  0:000  Inserting SSDT-0.aml from EFI\CLOVER\ACPI\patched ... Success
2:435  0:000  Inserting SSDT-14.aml from EFI\CLOVER\ACPI\patched ... Success

Also, you forgot to call _OFF from _INI.
 
You forgot SortedOrder to specify SSDT load order.
Look at the order your SSDTs are loading:
Code:
2:433  0:000  === [ ACPIPatchedAML ] ====================================
2:433  0:000  Unsorted
2:433  0:000  Inserting SSDT-6.aml from EFI\CLOVER\ACPI\patched ... Success
2:433  0:000  Inserting SSDT-5.aml from EFI\CLOVER\ACPI\patched ... Success
2:433  0:000  Inserting SSDT-4.aml from EFI\CLOVER\ACPI\patched ... Success
2:434  0:000  Inserting SSDT-3.aml from EFI\CLOVER\ACPI\patched ... Success
2:434  0:000  Inserting SSDT-2.aml from EFI\CLOVER\ACPI\patched ... Success
2:434  0:000  Inserting SSDT-1.aml from EFI\CLOVER\ACPI\patched ... Success
2:435  0:000  Inserting SSDT-0.aml from EFI\CLOVER\ACPI\patched ... Success
2:435  0:000  Inserting SSDT-14.aml from EFI\CLOVER\ACPI\patched ... Success

Also, you forgot to call _OFF from _INI.

Ok So I dont get the part of Sorting the SSDT, but what I done is make
SSDT6 --> SSDT0
SSDT5 --> SSDT1
SSDT4 --> SSDT2
SSDT3 --> SSDT3 (No Change)

I have DROP OEM in Clover so the patched SSDT Loaded

And I can call ._OFF from _INI (No Problem)

But still there is still NVIDIA in system information --> Graphics

Any idea?
 

Attachments

  • to be sent.zip
    2.4 MB · Views: 68
Ok So I dont get the part of Sorting the SSDT, but what I done is make
SSDT6 --> SSDT0
SSDT5 --> SSDT1
SSDT4 --> SSDT2
SSDT3 --> SSDT3 (No Change)
SSDT12 --> SSDT12 (No Change)
I have DROP OEM in Clover so the patched SSDT Loaded

And I can call ._OFF from _INI (No Problem)

But still there is still NVIDIA in system information --> Graphics

Any idea?
 
Back
Top