Jump to content

Disabling NVIDIA Optimus card on all laptops


Whit3Spirit
 Share

345 posts in this topic

Recommended Posts

To disable Nvidia Card (Easy Way)

 

you can simply use this DSDT Patch:

https://github.com/Ramalama2/UX301_DSDT/blob/master/6.%20Experimental/DSDT%20Patches/%5BALL%5D%20Nvidia%20PowerOff.txt

 

Cheers :-)

 

Great patch but i can't make a clean original DSDT of her laptop... If you can.. ?

Link to comment
Share on other sites

 

Hey, do you think that your patch is compatible or can be modified to work on my dsdt? I have a Nvidia GTX 765m and a Intel HD4600

 

DSDT https://www.dropbox.com/s/vx30qnw4l270qcc/DSDT.aml

IOREG https://www.dropbox.com/s/4rffijvra3verdw/XMG%20C702.ioreg

 
Is it important that I create my DSDT with AIDA64, or can I create my DSDT with DSDT Editor on Mac?
I use Clover v.2330.

 

 

can you reupload your ioreg and give me a clean (vanilla) dsdt+(all)ssdt's?

Link to comment
Share on other sites

 

I got some Problems.
 
First is, I don't find the option "ACPI Tools" on Windows 8.1 at the actual AIDA64 Version. But I have found a older Version 3.20.2600 and there ist the option "ACPI Tools".
The Program says that my Motherboard was not found or is Unkown.
 
Second is, that when I use the old Version of AIDA64 in ACPI Tool and click on Save Table I see 7 Lists of SSDT.
Which one you need?
 
 
Should I upload all?
 
Here is a Zip with all SSDT 1 to 7 from up to down and the actual DSDT.
 

 

Link to comment
Share on other sites

What is your right laptop ?


You can also use Clover because it can patch your DSDT on the fly, no problem with asl errors ^^

And with clover, you can get iMessage natively (i have see your post and it is a big problem with chameleon :()

Link to comment
Share on other sites

I use already the latest Clover...how can I use it on the fly?

 

My Laptop is a XMG C703 similar as MSI GS70.

http://www.insanelymac.com/forum/topic/297447-how-to-install-macosx-109x-mavericks-on-a-xmg-c703/

http://www.insanelymac.com/forum/topic/294224-how-to-install-macosx-109-mavericks-on-a-msi-gs70-laptop/

 

How did you get iMessage natively?

iCloud worked and so on, but iMessage show me a notification, that I must contact the support...

Link to comment
Share on other sites

Disassemble them correctly:

# in Terminal, with recent iasl
iasl -da *.bin *.aml
These patches for DSDT:

into method label ADBG replace_content begin //nothing end;
Remove all the lines 'Zero' starting at line ~6258.

 

You then have a DSDT which will compile with no errors.

 

Hi, RehabMan:

Can you help me for similar modification of my DSDT and SSDT to disable Nvidia Optimus GTX 880M ?

I have tried in vain by DSDT Editor or IASL due to too many errors.

My laptop is Asus G750JZ and Audio is Realtek AL-282 with working Speaker output now.

If possible I need HDMI audio for internal Intel HD4600 too.

I have got these DSDT & 7 SSDT with AIDA64 Business version 4.30

G750.rar

Link to comment
Share on other sites

Hi, RehabMan:

Can you help me for similar modification of my DSDT and SSDT to disable Nvidia Optimus GTX 880M ?

I have tried in vain by DSDT Editor or IASL due to too many errors.

My laptop is Asus G750JZ and Audio is Realtek AL-282 with working Speaker output now.

If possible I need HDMI audio for internal Intel HD4600 too.

I have got these DSDT & 7 SSDT with AIDA64 Business version 4.30

If you disassemble correctly, and use ACPI 5.0, your DSDT compiles almost error free. (remove all the 'Zero' lines, remove Arg0 line causing second error)

  • Like 1
Link to comment
Share on other sites

If you disassemble correctly, and use ACPI 5.0, your DSDT compiles almost error free. (remove all the 'Zero' lines, remove Arg0 line causing second error)

Hi, RehabMan:

Thanks for your help.

Following your advice there are 3 errors remained in my DSDT.dsl

Can you help me to correct these errors ?

Because I need error-free to get the final DSDT.aml

DSDT.dsl.zip

Link to comment
Share on other sites

Hi, RehabMan:

Thanks for your help.

Following your advice there are 3 errors remained in my DSDT.dsl

Can you help me to correct these errors ?

Because I need error-free to get the final DSDT.aml

You did not disassemble correcty... with SSDTs as context. Place all OEM SSDTs and DSDT in a single directory and disassemble with 'iasl -da *'

Link to comment
Share on other sites

If you disassemble correctly, and use ACPI 5.0, your DSDT compiles almost error free. (remove all the 'Zero' lines, remove Arg0 line causing second error)

 

https://www.dropbox.com/s/l6rkwgvh7u329av/DSDT.dsl

 

I deleted 18 errors.

File in .dsl with no error but i can't compile it.... :( Help please.

Link to comment
Share on other sites

I'm facing a problem with Optimus turned off. When I restart my computer, it shuts down. I know that this is due the Optimus being turned off and I need to turn it on inside the PTS method. My problem is that I have disabled the card using a SSDT. I don't know how to turn it on from a SSDT or calling an external method from a SSDT during PTS and WAK. Can someone help me turn on the card from SSDT? Thanks.

Link to comment
Share on other sites

I'm facing a problem with Optimus turned off. When I restart my computer, it shuts down. I know that this is due the Optimus being turned off and I need to turn it on inside the PTS method. My problem is that I have disabled the card using a SSDT. I don't know how to turn it on from a SSDT or calling an external method from a SSDT during PTS and WAK. Can someone help me turn on the card from SSDT? Thanks.

We do the same thing on the ProBook. You use an External declaration to gain access to the methods in SSDT from DSDT. These are the DSDT patches we use:

into definitionblock code_regex . insert
begin
External(\_SB_.PCI0.PEGP.DGFX._OFF, MethodObj)\n
External(\_SB_.PCI0.PEGP.DGFX._ON, MethodObj)\n
end;

into method label _PTS code_regex ([\s\S]*) replace_matched
begin
If (CondRefOf(\\_SB_.PCI0.PEGP.DGFX._ON)) { \\_SB_.PCI0.PEGP.DGFX._ON() }\n
%1
end;

into method label _WAK code_regex (Return\s+\(.*) replace_matched
begin
If (CondRefOf(\\_SB_.PCI0.PEGP.DGFX._OFF)) { \\_SB_.PCI0.PEGP.DGFX._OFF() }\n
%1
end;
The paths to _ON/_OFF may be different in your SSDT, so be sure to tweak the patch as necessary.
  • Like 1
Link to comment
Share on other sites

I'm not even touching the DSDT but only adding _DSM methods and other things that I need in a SSDT which is injected by Clover (DSDT free Clover config). The _PTS and _WAK methods do not exist in the SSDT where I have turned off the card. Can I reference to the _PTS and _ WAK in the SSDT? How? And will that overwrite the methods with the ones defined in DSDT? Thanks again.

 

My SSDT is similar to this one as decribed by Stevo here

DefinitionBlock ("SSDT-1.aml", "SSDT", 2, "APPLE ", "Optimus", 0x00001000)
{
    External (\_SB_.PCI0.PEG0, DeviceObj)
    External (\_SB_.PCI0.PEG0.PEGP._PS3, MethodObj)
    External (\_SB_.PCI0.PEG0.PEGP._DSM, MethodObj)
    Scope (\_SB.PCI0.PEG0)
    {
        Method (_INI, 0, NotSerialized)
        {
            \_SB.PCI0.PEG0.PEGP._DSM (Buffer (0x10)
                {
                    /* 0000 */   0xF8, 0xD8, 0x86, 0xA4, 0xDA, 0x0B, 0x1B, 0x47,
                    /* 0008 */   0xA7, 0x2B, 0x60, 0x42, 0xA6, 0xB5, 0xBE, 0xE0
                }, 0x0100, 0x1A, Buffer (0x04)
                {
                     0x01, 0x00, 0x00, 0x03
                })
            If (One)
            {
                \_SB.PCI0.PEG0.PEGP._PS3 ()
            }
        }
    }
}
Link to comment
Share on other sites

I'm not even touching the DSDT but only adding _DSM methods and other things that I need in a SSDT which is injected by Clover (DSDT free Clover config). The _PTS and _WAK methods do not exist in the SSDT where I have turned off the card. Can I reference to the _PTS and _ WAK in the SSDT? How? And will that overwrite the methods with the ones defined in DSDT? Thanks again.

 

My SSDT is similar to this one as decribed by Stevo here

DefinitionBlock ("SSDT-1.aml", "SSDT", 2, "APPLE ", "Optimus", 0x00001000)
{
    External (\_SB_.PCI0.PEG0, DeviceObj)
    External (\_SB_.PCI0.PEG0.PEGP._PS3, MethodObj)
    External (\_SB_.PCI0.PEG0.PEGP._DSM, MethodObj)
    Scope (\_SB.PCI0.PEG0)
    {
        Method (_INI, 0, NotSerialized)
        {
            \_SB.PCI0.PEG0.PEGP._DSM (Buffer (0x10)
                {
                    /* 0000 */   0xF8, 0xD8, 0x86, 0xA4, 0xDA, 0x0B, 0x1B, 0x47,
                    /* 0008 */   0xA7, 0x2B, 0x60, 0x42, 0xA6, 0xB5, 0xBE, 0xE0
                }, 0x0100, 0x1A, Buffer (0x04)
                {
                     0x01, 0x00, 0x00, 0x03
                })
            If (One)
            {
                \_SB.PCI0.PEG0.PEGP._PS3 ()
            }
        }
    }
}

 

OK, pretty weird way to do it, and some strange code you have there (the 'if (1)' is especially curious) but...

 

There exists an SSDT somewhere in your system (OEM SSDT) that has the _PS3 method you're calling (why you're not calling _OFF, I'm not sure). So you can reach those methods (_ON or whatever) from DSDT just like you can reach them from the ssdt-1 you show above.

 

There is no way to change the behavior of _WAK/_PTS in DSDT without patching the DSDT itself.

 

Note that your _INI method defined in that SSDT likely overrides any _INI method already defined in one of the OEM SSDTs at the same path (\_SB.PCI0.PEG0). Maybe that's what you want, but you should be aware that the _INI code intended to execute (provided in OEM DSDT) will not execute. You can't have multiple methods of the same name at the same path... one will "win."

  • Like 1
Link to comment
Share on other sites

Can I copy the _WAK/_PTS methods to SSDT and just add the _OFF/_ON methods to it including what was originally there? Will it work.

 

Regarding the way I'm turning off the card. I was doing it earlier with just calling the _OFF methods but people recommended to so it through _PS3 as _PS3 method is in defined in most systems and will probably work without looking at the SSDT table for Optimus(OFF can be DOFF or OPOF). It was one recommended by the developers of Bumblebee project. The same way is defined in the first post of this topic.

Link to comment
Share on other sites

You can creare a link to _OFF/_ON method in your dsdt by using External

External (\_SB_.PCI0.PEG0.PEGP._OFF, MethodObj)

than you can call _OFF in _PTS/_WAK/_INI in your dsdt. Make sure you included the ssdt containing _OFF method along with the patched dsdt/

Link to comment
Share on other sites

Can I copy the _WAK/_PTS methods to SSDT and just add the _OFF/_ON methods to it including what was originally there? Will it work.

No. Methods defined in DSDT always take precedence over methods with the same name found in an SSDT.

You can creare a link to _OFF/_ON method in your dsdt by using External

External (\_SB_.PCI0.PEG0.PEGP._OFF, MethodObj)
than you can call _OFF in _PTS/_WAK/_INI in your dsdt. Make sure you included the ssdt containing _OFF method along with the patched dsdt/

 

You missed part of the discussion. For some reason, webcivilian is averse to modifying the DSDT.

  • Like 1
Link to comment
Share on other sites

... 

I'm just trying this new method of not using a patched DSDT and using Clover to do patching on the fly. I guess I will patch in the _PTS and _WAK sections of the DSDT using Clover.

With Clover's support for "floating regions" (FixRegions_10000000) in a patched DSDT, there is little reason to expend so much effort to not patch DSDT.

Link to comment
Share on other sites

 Share

×
×
  • Create New...