Contribute
Register

[Guide] Disabling discrete graphics in dual-GPU laptops

SortedOrder is required to set order of the SSDTs.
DropOem=true is required to drop OEM SSDTs to make way for patched SSDTs in ACPI/patched.

sorry for late rehabman, i try to drop OEM SSDTs and SortedOrder SSDT,, but still same i got prohibited sign at boot,, and also my ssdt5x - ssdt11x have gfx , do i need patch them? Because you say that ssdtx doesnt need to patch but they have gfx, i think it caused i get prohibited sign when boot using dropoem=true and sortorder ssdt,

details :
img_0023.jpg was stuck before i get prohibited sign,
img_0024.jpg is prohibite sign
 

Attachments

  • IMG_0023.JPG
    IMG_0023.JPG
    2.5 MB · Views: 116
  • IMG_0024.JPG
    IMG_0024.JPG
    1.5 MB · Views: 107
Last edited:
Skip this message's first part, strange but I reapplied patches to 9 and this time worked... Really strange... Let's continue from PART 2. I've added 9, applied the exact patch in the guide to 11 and DSDT for _OFF and _REG, I can boot up with DropOem=true now, battery warning fixed. But Nvidia is still running.


So the issue is just missing 9, no any other thing is wrong, even with the DSDT file in the patched folder which doesn't allow me to boot up and gives me prohibited sign all the time. Strange...

You always point people to your guides but this time you seem didn't read, again. Let me quote and elaborate it. Here comes the quote.

I made them bold this time. First of all, I already fixed B0D3 ones with replacing HDAU as I wrote 3 times. The problem is other ones, Object does not exist ones. I couldn't find any solution for them.

You claim that there is no error with proper disassembly procedures which I already applied. I mean, If there is something wrong with my disassembly, how come I patched 9 files without any error? I followed your guide, directly copied and pasted your code, there shouldn't be any issues but there is with the 9.

According to grep findings, 9 is the only file that needs 3 patches, Remove _DSM, GFX0 and B0D3. Please disassemble it and apply those 3 patches in that order and compile, I'm sure you'll get the same errors.

Alternatively, maybe I just should delete them? I read some people deleted lines that causes errors.


PART 2:
------------------------------------------------------------------------------------------------



Here's my _OFF method, what should I move to where?
Code:
        Method (_OFF, 0, Serialized)  // _OFF: Power Off
        {
            If (LEqual (CTXT, Zero))
            {
                If (LNotEqual (GPRF, One))
                {
                    Store (VGAR, VGAB)
                }

                Store (One, CTXT)
            }

            SGOF ()
        }
_Reg from DSDT.
Code:
            Method (_REG, 2, NotSerialized)  // _REG: Region Availability
            {
                If (LEqual (Arg0, 0x03))
                {
                    Store (Arg1, ECFL)
                }
            }
Moving SGOF () to _REG will do the job? Like below? Is that correct?
Code:
            Method (_REG, 2, NotSerialized)  // _REG: Region Availability
            {
                If (LEqual (Arg0, 0x03))
                {
                    Store (Arg1, ECFL)
                }
            
                SGOF ()
            }
The patch I applied to _INI in 10 is correct?
Code:
        Method (_INI, 0, NotSerialized)  // _INI: Initialize
        {
            Store (Zero, \_SB.PCI0.RP05.PEGP._ADR)
            //added to turn nvidia/radeon off
            External(\_SB.PCI0.RP05.PEGP._OFF, MethodObj)
            _OFF()
        }

And I'm not touching 11, right? (Except for Remove _DSM and GFX0 patches.

Thanks man, I'm reading your guides as well as your replies, do not worry about it.

I also get prohibited sign if i boot using drop oem ssdt= true, can you help me to solve that ?
 
I also get prohibited sign if i boot using drop oem ssdt= true, can you help me to solve that ?
What I learned is you must have properly patched SSDTs in your EFI/clover/acpi/patched folder. That was the reason in my case. Try patching them without errors and don't exclude any of them.
 
sorry for late rehabman, i try to drop OEM SSDTs and SortedOrder SSDT,, but still same i got prohibited sign at boot,, and also my ssdt5x - ssdt11x have gfx , do i need patch them? Because you say that ssdtx doesnt need to patch but they have gfx, i think it caused i get prohibited sign when boot using dropoem=true and sortorder ssdt,

details :
img_0023.jpg was stuck before i get prohibited sign,
img_0024.jpg is prohibite sign

Renames must be balanced/applied across all files that reference the renamed symbol.
 
Restart to close independent graphics card failed!

I'm thinking that since the DropOME = TURE is not recommended, can there be any other scheme to block the independent graphics card and only repair DSDT as far as possible
 

Attachments

  • patch.zip
    98.1 KB · Views: 74
  • clover.zip
    1.8 MB · Views: 70
  • extract.zip
    18.9 KB · Views: 77
  • MacBook Air.ioreg
    7.6 MB · Views: 120
Last edited:
Restart to close independent graphics card failed!

You have the wrong set of SSDTs in ACPI/patched.
As per non-dynamic SSDTs in ACPI/origin, you should have:
SSDT-0.aml
SSDT-1.aml
SSDT-2.aml
SSDT-6.aml
SSDT-7.aml
SSDT-8.aml
SSDT-9.aml
SSDT-10.aml
SSDT-11.aml
SSDT-12.aml

Also, your SortedOrder in config.plist is wrong (check it carefully).
Due to these obvious mistakes, I didn't check anything else.
 
this tutorial is so cool, my ASUS X550LNV works perfectly after using all those patch, disabled the nvidia optimus 840m, have battery %.but the ssdt to that back is slightly different. the ssdt number is shifted by 1
 
this tutorial is so cool, my ASUS X550LNV works perfectly after using all those patch, disabled the nvidia optimus 840m, have battery %.but the ssdt to that back is slightly different. the ssdt number is shifted by 1

SSDT naming/numbering is specific to the laptop you have.
Content is what matters, not specific names.
 
Overview



After applying this patch, the patched _INI now reads:
Code:
        Method (_INI, 0, NotSerialized)  // _INI: Initialize
        {
            Store (Zero, \_SB.PCI0.RP05.PEGP._ADR)
            //added to turn nvidia/radeon off
            External(\_SB.PCI0.RP05.PEGP._OFF, MethodObj)
            _OFF()
        }

Now we need to turn our attention to DSDT _REG. The _REG method needs to do the EC work that _OFF used to do before we patched it.

Here is the original _REG (for EC0) in DSDT:
Code:
            Method (_REG, 2, NotSerialized)  // _REG: Region Availability
            {
                If (LEqual (Arg0, 0x03))
                {
                    Store (Arg1, ECFL)
                }
            }

There is a patch in my repo to call _OFF from _REG. We can use it as a base for what we need:
Code:
into method label _REG parent_hid PNP0C09 insert
begin
//added to turn nvidia/radeon off\n
If (LAnd(LEqual(Arg0,3),LEqual(Arg1,1)))\n
{\n
    External(\_SB.PCI0.PEG0.PEGP._OFF, MethodObj)\n
    \_SB.PCI0.PEG0.PEGP._OFF()\n
}\n
end;

Instead of calling _OFF, we want it to call SPIN as the original _OFF did.

The modified patch is:
Code:
into method label _REG parent_hid PNP0C09 insert
begin
//added to turn nvidia/radeon off\n
If (LAnd(LEqual(Arg0,3),LEqual(Arg1,1)))\n
{\n
    \_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero)\n
}\n
end;

The modified _REG after patching:
Code:
            Method (_REG, 2, NotSerialized)  // _REG: Region Availability
            {
                If (LEqual (Arg0, 0x03))
                {
                    Store (Arg1, ECFL)
                }
                //added to turn nvidia/radeon off
                If (LAnd(LEqual(Arg0,3),LEqual(Arg1,1)))
                {
                    \_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero)
                }
            }

And not all _OFF methods access the EC, so the movement of the EC related code to _REG is not needed.


so since my SSDT did not access the EC does that mean I don't need the DSDT "Disable from _REG (DSDT)" patch added to my DSDT? or do I add it but not change the _OFF to SPIN (0x96, Zero) ?
I did remember the goal "Remember the goal? Call _OFF from _INI" and have called _OFF from _INI already. just want to make sure If I need that patch or not?
 
so since my SSDT did not access the EC does that mean I don't need the DSDT "Disable from _REG (DSDT)" patch added to my DSDT? or do I add it but not change the _OFF to SPIN (0x96, Zero) ?
I did remember the goal "Remember the goal? Call _OFF from _INI" and have called _OFF from _INI already. just want to make sure If I need that patch or not?

If your _OFF method (and anything it calls, directly or indirectly) has no EC access, then no need to patch _REG.
 
Back
Top