Contribute
Register

[Guide] Disabling discrete graphics in dual-GPU laptops

Very common...

Apply "Remove _PSS placeholders".

Sorry to ask this cause I know this question my be stupid. But in post#1 you said that the patch "Rename GFX0 to IGPU" should be used in dsdt and every ssdt. But I think some ssdt contains information of discrete graphics and the word "IGPU" might be the short of "Intel GPU" (hd3000,hd4000,hd4600,etc). Is it all right to name the discrete graphics as "IGPU"?
 
Sorry to ask this cause I know this question my be stupid. But in post#1 you said that the patch "Rename GFX0 to IGPU" should be used in dsdt and every ssdt. But I think some ssdt contains information of discrete graphics and the word "IGPU" might be the short of "Intel GPU" (hd3000,hd4000,hd4600,etc). Is it all right to name the discrete graphics as "IGPU"?

Usually, GFX0 is used in PC ACPI for the integrated GPU. Renaming it to IGPU enables power management in OS X.
 
Usually, GFX0 is used in PC ACPI for the integrated GPU. Renaming it to IGPU enables power management in OS X.

Is it still necessary to call _OFF from _REG in dsdt when the ssdt DID NOT access the EC?

BTW: This is my _On and _OFF Method, I think it did not access the EC, am I right?

Scope (\_SB.PCI0.PEG0.PEGP)
{
Method (_ON, 0, Serialized) // _ON_: Power On
{
SGON ()
Notify (\_SB.PCI0.PEG0, Zero)
}

Method (_OFF, 0, Serialized) // _OFF: Power Off
{
SGOF ()
Notify (\_SB.PCI0.PEG0, Zero)
}

Method (_STA, 0, Serialized) // _STA: Status
{
Return (0x0F)
}
}
 
Is it still necessary to call _OFF from _REG in dsdt when the ssdt DID NOT access the EC?

_OFF can never be called from _REG. It is too late.

If your _OFF method (and anything it calls) has no EC related code, then you need no changes to _REG.

BTW: This is my _On and _OFF Method, I think it did not access the EC, am I right?

Scope (\_SB.PCI0.PEG0.PEGP)
{
Method (_ON, 0, Serialized) // _ON_: Power On
{
SGON ()
Notify (\_SB.PCI0.PEG0, Zero)
}

Method (_OFF, 0, Serialized) // _OFF: Power Off
{
SGOF ()
Notify (\_SB.PCI0.PEG0, Zero)
}

Method (_STA, 0, Serialized) // _STA: Status
{
Return (0x0F)
}
}

Not possible to know. It calls SGOF which may access the EC. You didn't provide the code for SGOF.
 
_OFF can never be called from _REG. It is too late.

If your _OFF method (and anything it calls) has no EC related code, then you need no changes to _REG.



Not possible to know. It calls SGOF which may access the EC. You didn't provide the code for SGOF.

This is Method (SGOF) in SSDT-8

Method (SGOF, 0, Serialized)
{
If (LEqual (CCHK (Zero), Zero))
{
Return (Zero)
}

Store (Zero, ONOF)
Store (LCTL, ELCT)
Store (SVID, HVID)
Store (SDID, HDID)
Store (EMLW, DMLW)
SPP0 ()
Store (One, LNKD)
Store (Zero, TCNT)
While (LLess (TCNT, LDLY))
{
If (LEqual (LNKS, Zero))
{
Break
}

Sleep (0x10)
Add (TCNT, 0x10, TCNT)
}

While (LNotEqual (LNKS, Zero))
{
Sleep (One)
}

Store (0x02, AFES)
If (LGreaterEqual (And (PNHM, 0x0F), 0x03))
{
If (LNotEqual (P0UB, Zero))
{
Store (GMXB (), MBDL)
PDUB (MBDL)
}
}

If (LGreaterEqual (PCSL, 0x04))
{
If (LEqual (SC7A, One))
{
C7OK (One)
}
}

SGPO (HLRS, One)
SGPO (PWEN, Zero)
Sleep (0x64)
Return (Zero)
}
 
This is Method (SGOF) in SSDT-8

Method (SGOF, 0, Serialized)
{
If (LEqual (CCHK (Zero), Zero))
{
Return (Zero)
}

Store (Zero, ONOF)
Store (LCTL, ELCT)
Store (SVID, HVID)
Store (SDID, HDID)
Store (EMLW, DMLW)
SPP0 ()
Store (One, LNKD)
Store (Zero, TCNT)
While (LLess (TCNT, LDLY))
{
If (LEqual (LNKS, Zero))
{
Break
}

Sleep (0x10)
Add (TCNT, 0x10, TCNT)
}

While (LNotEqual (LNKS, Zero))
{
Sleep (One)
}

Store (0x02, AFES)
If (LGreaterEqual (And (PNHM, 0x0F), 0x03))
{
If (LNotEqual (P0UB, Zero))
{
Store (GMXB (), MBDL)
PDUB (MBDL)
}
}

If (LGreaterEqual (PCSL, 0x04))
{
If (LEqual (SC7A, One))
{
C7OK (One)
}
}

SGPO (HLRS, One)
SGPO (PWEN, Zero)
Sleep (0x64)
Return (Zero)
}

No EC related code there, but it calls SGPO (likely no EC related code there either).
 
No EC related code there, but it calls SGPO (likely no EC related code there either).

I've done almost all the things as #1 guided. The discrete graphics was disabled but after boot, the cpu fan was runing faster and faster and the OS X will auto shut down in less than 2 minutes. I cannot tell what's wrong with this. I'll upload the related files. Do you think it has something to do with the clover config.plst or the injected kexts?

Last login: Mon Jul 18 00:45:42 on console

MacBook-Pro:~ Admin$ kextstat|grep -y acpiplat

13 2 0xffffff7f825c5000 0x66000 0x66000 com.apple.driver.AppleACPIPlatform (4.0) 295F7A91-2DF7-3FFE-9550-A0C1A6F9D575 <12 11 7 6 5 4 3 1>

MacBook-Pro:~ Admin$ kextstat|grep -y appleintelcpu

MacBook-Pro:~ Admin$


BTW: the laptop: Dell E6540, Haswell i5, HD4600, AMD8790M Graphics.
 

Attachments

  • CLOVER.zip
    6.6 MB · Views: 69
  • ioreg-autoshutdown.zip
    535.2 KB · Views: 90
  • patchmatic output.zip
    33.8 KB · Views: 74
Last edited:
Also,if I use this DSDT and SSDT( generated by ssdtPRGen ) only, it won't auto shut down but the discrete graphics won't disappear.
 

Attachments

  • dsdt ssdt.zip
    27.7 KB · Views: 84
I've done almost all the things as #1 guided. The discrete graphics was disabled but after boot, the cpu fan was runing faster and faster and the OS X will auto shut down in less than 2 minutes. I cannot tell what's wrong with this. I'll upload the related files. Do you think it has something to do with the clover config.plst or the injected kexts?

Last login: Mon Jul 18 00:45:42 on console

MacBook-Pro:~ Admin$ kextstat|grep -y acpiplat

13 2 0xffffff7f825c5000 0x66000 0x66000 com.apple.driver.AppleACPIPlatform (4.0) 295F7A91-2DF7-3FFE-9550-A0C1A6F9D575 <12 11 7 6 5 4 3 1>

MacBook-Pro:~ Admin$ kextstat|grep -y appleintelcpu

MacBook-Pro:~ Admin$


BTW: the laptop: Dell E6540, Haswell i5, HD4600, AMD8790M Graphics.

Bad idea to add config.plist/ACPI/DSDT/Fixes on top of patched ACPI.

Also, why 10.11 (.0) instead of 10.11.5 (current version)? From where did you download OS X?
 
I'm having troubles to get sleep to work. Yesterday I upgraded from 10.10.5 to 10.11.5 (clean install), patched all DSDT, SSDT again. Sleep was working on 10.10.5, I just had to press power button twice from sleep state (one to wake up the system, second to turn on the screen).

Now on 10.11.5 When I put my laptop to sleep, it seems to work. It takes around 20 seconds and the power led starts to blink as expected, no fan or any other noises. However, when the power button is pressed to wake up I hear the fans start, but after a few seconds the system shutdown (using Disable/Enable on _WAK/_PTS). Without Disable/Enable on _WAK/_PTS I also hear the fans start, but the system just hangs there without showing anything on screen (I need to force shutdown using power button).

As usual, needed information attached.
 

Attachments

  • Samsung_AB6.zip
    2.1 MB · Views: 93
Back
Top