Jump to content

Disabling NVIDIA Optimus card on all laptops


Whit3Spirit
 Share

345 posts in this topic

Recommended Posts

Edited the 15/07/2014

Hi all !

 

After months of passive research i have found on some different forums a DSDT solution for disabling the NVidia card.

Disabling Nvidia allow to save battery power of 2x and temperature of laptop too.

 

 

 

 

My Specs

 

Acer Aspire V3-571G-73614G50Makk

:: Processor
:: Mainboard
Intel HM77 (Panther Point)
:: Memory
4096 MB
:: Graphics adapter
NVIDIA GeForce GT 640M - 2048 MB, Core: 708 MHz, Memory: 900 MHz, DDR3, 80.07.14.00.09, Optimus
:: Display
15.6 inch 16:9, 1366x768 pixel, LG Philips LP156WH4-TLA1, TFT LED
:: Soundcard
Realtek ALC269 @ Intel Panther Point PCH - High Definition Audio Controller
:: Networking
Broadcom NetLink BCM57785 PCI-E Gigabit Ethernet Controller (10/100/1000MBit), Atheros AR5BWB222 Wireless Network Adapter (b g n ), 4.0 Bluetooth
:: Optical drive
MAT{censored}A DVD-RAM UJ8B0AW
:: Hackintosh Config
 
 
 
DSDT/SSDT Method ( :excl: work on it, not fully fonctionnal :excl: ) : Link here
 
DSDT Method (work with all bootloader)

 

Instructions

Needed 

  • AIDA64 version 2.80 --> link
  • ssdtPRGen.sh --> link
  • AppleIntelCPUPowerManagementInfo.kext --> link
  • MacIASL --> link

 

Disabling NVidia card

  • In the first step, dump your dsdt from Windows with AIDA64 (version 2.80 max) --> tuto YouTube
  • Reboot on OSX
  • This patch don't need to extract or modify any SSDT. You can see the DSDT edits in the link of qwerty12 topic in credits. Quickly, in DSDT, i call external method for disabling the card. These links calls methods of SSDT-4 in my config but can be different with your machine. You don't need to copy manually the _OFF method from SSDT to DSDT. Add these lines if you don't have them to the top of your DSDT :
[...]

External (_SB_.PCI0.PEG0.PEGP._PS3, MethodObj)
External (_SB_.PCI0.PEG0.PEGP._PS0, MethodObj)
External (_SB_.PCI0.PEG0.PEGP._OFF, MethodObj)
External (_SB_.PCI0.PEG0.PEGP._ON, MethodObj)
External (_SB_.PCI0.PEG0.PEGP.SGOF, MethodObj)
External (_SB_.PCI0.PEG0.PEGP.SGON, MethodObj)

[...]
  • I added the method  M_OF before the _WAK method : 
[...]

Method (M_OF, 0, NotSerialized)
    {
        If (CondRefOf(\_SB_.PCI0.PEG0.PEGP._OFF)) 
        { 
            \_SB_.PCI0.PEG0.PEGP._OFF()
        }
        If (CondRefOf(\_SB_.PCI0.PEG0.PEGP._PS3))
        {
            \_SB_.PCI0.PEG0.PEGP._PS3()
        }
        If (CondRefOf(\_SB_.PCI0.PEG0.PEGP.SGOF))
        {
            \_SB_.PCI0.PEG0.PEGP.SGOF()
        }
​    }

[...]

 

  • After that, i call the M_OF method in _WAK :
[...]
Method (_WAK, 1, Serialized)
     {
         M_OF ()
         If (LAnd (LEqual (\_SB.PCI0.LPCB.EC0.AAST, One), LEqual (\_SB.PCI0.LPCB.EC0.AAEN, One)))
         {
             Store (Zero, GP53)
[...]
  • And i call the M_OF method in the _INI method :
[...]
Method (_INI, 0, NotSerialized)
         {
             Store (0x07D0, OSYS)
             M_OF ()
             If (CondRefOf (\_OSI, Local0))
             {
                 If (_OSI ("Windows 2001"))
[...]
  •  chameleon.png If you use Chameleon or branch, paste your modified DSDT to your Extra folder and add these options to your org.chameleon.Boot.plist :
<key>DSDT</key>
<string>/Extra/DSDT.aml</string>
<key>DropSSDT</key>
<string>No</string>
  • four-leaf-clover.png If you use Clover Bootloader, copy DSDT file in "EFI/CLOVER/ACPI/Patched"
  • Reboot and go to Applications/Utilities/System Information 
  • Go to Graphics Card Section, if the NVidia Chipset not appear, it’s working.

126051Capturedcran20140125174958.png

 

 

 

 

Enable the SpeedStep management

 

The only problem with this technic is the Power Management. When your turn off the DropSSDT flags in org.chameleon.Boot.plist, Chameleon don’t go dump your SSDT tables in the ACPI tables of your machine.

For enabling SpeedStepper with that fix, you should make a patched SSDT with the ssdtPRGen method :

 

  • Download the later ssdtPRGen.sh
  • Be sure that your SMBios.plist is appropriate with your CPU and system (A good SMBios can fix the iMessage, iCloud, iTunes and Apple Store connexion and login bugs). With my V3-571G core i7, i prefer the Macmini6,2 model for more speed steps.
  • In Terminal app, launch the ssdtPRGen.sh with command :
sudo sh /the_way_of_your_file/ssdtPRGen.sh
  • chameleon.png  Write your password and type "y" when it’s demanded for make a ssdt_pr.aml in your Extra folder only if you use Chameleon bootloader.
  • four-leaf-clover.png  If you use clover, copy this file in "EFI/CLOVER/ACPI/Patched" and rename it to ssdt-1.aml. If you have already a ssdt-1, rename it to ssdt-2... :hyper:
  • Reboot 
  • To be sure that your Speed Stepper is patched, download the AppleIntelCPUPowerManagementInfo.kext and add it to your System/Library/Extensions/ folder with the kext installer of your choice. I for one better in Kext Utility.
  • Rebuild cache with the app of your choice (kext utility make that automaticly) and reboot.
  • At start, open your terminal app and type this command : 
cat /var/log/system.log | grep "AICPUPMI:"
  • If you can see a lot of P-States, you did a good job.

 

157136Capturedcran20140125174245.png

 

 

 

 

 

 

 

About problems

 

Problem with auto ON after sleep

  • Past this method before the M_OF method in your DSDT :
Method (M_ON, 0, NotSerialized)
{
If (CondRefOf(\_SB_.PCI0.PEG0.PEGP._ON))
{
\_SB_.PCI0.PEG0.PEGP._ON()
}
If (CondRefOf(\_SB_.PCI0.PEG0.PEGP._PS0))
        {
            \_SB_.PCI0.PEG0.PEGP._PS0()
        }
If (CondRefOf(\_SB_.PCI0.PEG0.PEGP.SGON))
        {
            \_SB_.PCI0.PEG0.PEGP.SGON()
        }
​ }
  • After that, call M_ON method in _PTS (Prepare To Sleep) so that the _WAK after sleep can shutdown the card. (thanks to RehabMan)
Method (_PTS, 1, NotSerialized)
    {
        M_ON ()
[...]

Error of compilation

 

If you find an error of compilation in MacIASL after have make a clean DSDT (with no error), like "Line 1 : Input file does not appear to be an ASL or data table source file"

 

413958Capturede769cran20140715a768192227

 

 

Try to delete all return to the line in the M_ON or M_OF method or just replace it like that :

 

  • M_OF
Method (M_OF, 0, NotSerialized){If (CondRefOf(\_SB_.PCI0.PEG0.PEGP._OFF)){\_SB_.PCI0.PEG0.PEGP._OFF()}If (CondRefOf(\_SB_.PCI0.PEG0.PEGP._PS3)){\_SB_.PCI0.PEG0.PEGP._PS3()}If (CondRefOf(\_SB_.PCI0.PEG0.PEGP.SGOF)){\_SB_.PCI0.PEG0.PEGP.SGOF()}}
  • M_ON
Method (M_ON, 0, NotSerialized){If (CondRefOf(\_SB_.PCI0.PEG0.PEGP._ON)){\_SB_.PCI0.PEG0.PEGP._ON()}If (CondRefOf(\_SB_.PCI0.PEG0.PEGP._PS0)){\_SB_.PCI0.PEG0.PEGP._PS0()}If (CondRefOf(\_SB_.PCI0.PEG0.PEGP.SGON)){\_SB_.PCI0.PEG0.PEGP.SGON()}}

Credit

 

Thanks to PikeRAlpha for ssdtPRGen.sh

Thanks to 'qwerty12' for all informations --> link of her topic

Thanks to 'Skvo' for speedster and SSDT solution --> link of her post

Thanks to RehabMan for their instructions

Thanks to LexHimself for the SSDT method

  • Like 12
Link to comment
Share on other sites

Great work man, do you think that your patch is compatible or can be modified to work on my dsdt ? Nvidia card is 670mx with hd4000

 

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

IOREG https://www.dropbox.com/s/4k1b5nbuxl3tqz7/ioreg.ioreg

 

Hi Badaxe, try with that and say to me if your card is disabled.

link

Link to comment
Share on other sites

  • 2 weeks later...
  • 2 weeks later...

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.

Link to comment
Share on other sites

Is it important that I create my DSDT with AIDA64, or can I create my DSDT with DSDT Editor on Mac?

 

 

DSDT Editor is a good editor but it can only extract the DSDT. AIDA can extract DSDT, SSDT, and all ACPI's tables. 

Can you extract your SSDT tables and upload it here ?

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?

 

post-867195-0-53742200-1393833868_thumb.jpeg

 

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

Hi guy !

I have opened your DSDT, the first have a bug or is wrong and the second is so buggy ! I try to debbug it but i'm not sure to getting there...

I tell you quickly if i'm able to do it.


Can you upload your DSDT original extracted from AIDA too please ?


Edit : I have found your PS3 and DSM method in SSDT-7, i think that the hack will be functional.

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?

 

attachicon.gifimage.jpeg

 

Should I upload all?

 

Here is a Zip with all SSDT 1 to 7 from up to down and the actual DSDT.

 

https://www.dropbox.com/s/fgg87z14moyboji/DSDT%20SSDT%20AIDA64.zip

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.

  • Like 1
Link to comment
Share on other sites

Hi all I have a samsung notebook series 3 with nvidia optimus and 520MX intel hd 3000 I would like to disable the secondary display adapter in order to use the video card intel 3000. This guide is fine for my notebook? thank you very much

Link to comment
Share on other sites

Hi Mydoom3.

 

Try it and if you have a problème, post there.

 

 

 

 


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.

 

 

Yes but this dsdt was modified and have 160 errors. With the original DSDT, it's more simple ^_^

Link to comment
Share on other sites

I think it's a bit easier to disable your nvidia optimus in your ssdt ( especially for Haswell ). And you should decompile your dsdt/ssdt through iasl to reduce errors to minimum

P/S: here an example for you, I patched it already, although this Alienware can use the GTX 765M: http://www.insanelymac.com/forum/topic/296713-alienware-17-need-help-with-dsdt-compile-error/

Link to comment
Share on other sites

Here is my DSDT original extracted from AIDA.

 

AIDA64_dsdt.aml.zip

Link to comment
Share on other sites

Yes a

 

I see that but the DSDT is corrupted. I can't make a clean result for save in aml... Sorry dude, i did my best :(

Post #10 contains instructions for obtaining an error free DSDT compile.

Link to comment
Share on other sites

To Post #10

I have no idea how your method works.
In which terminal I need to copy the code?

# in Terminal, with recent iasl
iasl -da *.bin *.aml

I need to use the program MaciASL, DSDT Editor or DSDTSE?

I found this: http://www.osx86.net/files/file/4-iasl-intel-acpi-tools-x64/

Can you post a tutorial or some explanations?

 

At the moment I get about 150 Errors, but I don't use the Code in the Terminal...I don´t know how does it goes... :(

 

THANK YOU GUYS!!

Link to comment
Share on other sites

To Post #10

 

I have no idea how your method works.

In which terminal I need to copy the code?

# in Terminal, with recent iasl
iasl -da *.bin *.aml

I need to use the program MaciASL, DSDT Editor or DSDTSE?

I found this: http://www.osx86.net/files/file/4-iasl-intel-acpi-tools-x64/

Can you post a tutorial or some explanations?

 

At the moment I get about 150 Errors, but I don't use the Code in the Terminal...I don´t know how does it goes... :(

 

THANK YOU GUYS!!

You need to extract all ssdt along with dsdt, only one dsdt is not enough to decompile. Then copy all *.aml and iasl to one folder, run iasl -da *.bin *.aml, the .dsl will have much fewer errors.

Link to comment
Share on other sites

  • 4 weeks later...

hmm, thank you, but I get Kernal Panic... :(

And when I open the DSDT_clean-mo1.aml and compile it, I get 201 Errors...

 

post-867195-0-69730700-1397411787_thumb.jpgpost-867195-0-41623300-1397411822_thumb.png

Link to comment
Share on other sites

 Share

×
×
  • Create New...