⏱reading time: 8 min

Update 2017.12.12-14.20 EET: whether or not I use the AMDGPUWakeHandler and whether I sleep or hibernate I can’t wake up of the hibernation/sleep. Depending on if I have AMDGPUWakeHandler on or off I get different outputs, but none of those end in a successful wakeup.

Update 2017.12.13-09.08 EET: After checking about the wake up problem after sleeping / hibernating with the people form MacRumors, I reached some conclusions.

  1. You don’t use AMDGPUWakeHandler with this solution, since it could create a kernel panic… so for that reason doesn’t work.
  2. pmset gpuswitch option can help, but it’s really undocumented officially, so we really don’t know what the values for 0, 1 and 2 stand for, and can vary from machine to machine I guess, or at least to macOS version to version.
  3. gfxCardStatus can help since the problem after wake up is the dGPU activates and the computer freezes.

I’ve updated steps 11 and 12 in consequence.

Update 2017.12.18-14.42 EET: I’ve tried to wake up from hibernation without gxfCardStatus and it worked pretty well I didn’t have any issue, so if you don’t want to have it installed or at least running in the background I think it’s OK.

Update 2018.01.09-21.35 EET: After install the security update to mitigate the effects of Spectre, I have to apply the fix again as explained here. Everything worked fine, but on wake up of hibernation I got a black screen a couple of times. Also the computer didn’t turn off and got stuck in a black screen. I really don’t know what is the reason, but seems it’s related to the gpuswitch parameter. I changed to 0 and then to 2 again, and seems that everything is normal again. But I don’t know if it’s really that or it’s other thing.


Ok!!!!!! There is a third, and I think final, solution to totally deactivate the dGPU. Till this moment this is my favorite solution and I even have the brightness back to my computer. Also it sleeps correctly. You can check my previous post also 1 & 2.

We all have to thank to MacRumors community that all of them have been working really hard to create a workable solution to all of us. This guide is almost a exact copy of the one posted by MikeyN here. I’ve just changed somethings and added the AMDGPUWakeHandler to manage the sleep.

The fix

Let’s explain how it’s done:

  1. As always you have to reset SMC and PRAM/NVRAM before you do anything else.
    SMC: shutdown, unplug everything except power, now hold leftShift + Ctrl + Opt + Power and release at the same time.
    PRAM/NVRAM: with the power cord on, power on and immediately later and before the chime hold cmd + Opt + P + R at the same time until you hear the chime for the second time. Try to do the following step just right after, so you don’t let the computer to load –and fail.
  2. Now, boot into recovery single user mode by holding: cmd + R + S . When finish to load, you run:
  3. Reboot in single user mode holding on boot  cmd + S
  4. Now we are going to mount the hard drive and move the driver of the dGPU AMDRadeonX3000.kext  out of the drivers folder.
  5. Now you’re going to be able to load your desktop normally, but with an accelerated iGPU display. However, the system doesn’t know how to power-management the failed AMD-chip, so you are going to need to load it manually.
  6. You can automate the loading with the doing the following:
  7. On nano you type/paste:

    * I’ve decided to comment the line 3 since I’m not sure that 0 is the correct value. Besides, in the step 12 I set gpuswitch 2.
  8. You make it executable active:
  9. This is what I like the most. You create a script in the root of your hard drive to automate the process in case of an update.

    With the following content.
  10. Now you make it executable and I hide to avoid delete it:

    In the future if you reset SMC and PRAM/NVRAM you just have to load in single user mode holding cmd + S  and run:
  11. Then, you can copy the AMDGPUWakeHandler, or the one I created AMDGPUWakeHandler.kext, to /Library/Extensions  and run the following commands:
  12. This time you don’t need to change the way the machine sleeps. And you can reboot.
    I recommend you the way the machine sleeps to hibernate, but I haven’t tested if it can sleeps normally after we apply the following step

    All the fuss about the wake up after sleep / hibernate is related to when the computer wake ups checks the GPUs and somehow it gets stuck to dGPU. For that reason some people has changed the variable gpuswitch in pmset. Nevertheless, this variable is really undocumented and you find explanations to what the values to that variable (0, 1 and 2) do on internet. At this moment I have it set as default 2.

    Which I thing it’s the default value.
    You can try the different values, reboot and then close the lid and wake up and see the results.
    What has worked for me is leave it in 2  and install gfxCardStatus, and every time I boot change to integrated only . But still testing. I’ve tried to wake up from hibernation without gfxCardStatus and it also worked, so I guess it’s optional.
  13. After you reboot and if everything goes smoothly, perhaps you wan to return to the normal boot mode. You can room in terminal:

Now I just going to copy paste from MikeyN‘s post

This setup has now one kext in a place Apple’s installers do not expect. That is why in this guide SIP has not been reenabled. If an update that contains changes to the AMD drivers is about to take place it is advisable to move back the AMDRadeonX3000.kext to its default location before the update process. Otherwise the updater writes at least another kext of a different version to its default location or at worst you end up with an undefined state of partially non-matching drivers.

After any system update the folder /System/Library/Extensions has to be checked for the offending kext. Its presence there will lead to e.g. a boot hang on Yosemite and Sierra, an overheating boot-loop in High Sierra.

Further: this laptop is overheating, no matter what you do. The cooling system is inadequate and the huge number of failing AMD chips are just proof of that.

In case you have to update

So, before you update the system, please remember to run:

Then you update. If you can’t normally load your computer, you can hold  cmd + S  and run:

Then you can reboot again on single user mode holding  cmd + S and then run

To move again the kext. Keep in mid that the other one still there do you are going to probably rename it in this fashion:

Checking that everything is OK

If you run in terminal

You have to get something similar to this:

In the beginning I wasn’t getting any of these and the system just loaded AMDRadeonX3000. That resulting in a little bit of overheating in the dGPU and I wasn’t able to sleep the computer. The reason for the system to not load the kext was I moved them that much that I changed the ownership of the files. If that is your case you can run in terminal:

to return the ownership to the System / Root.

Let’s hope that everything goes smoothly from now on. You have to see the bright side of life, now you have a quite cold running Mac since the dGPU is totally deactivated. After a while your temps have to be something similar to this:

GPU diode and GPU proximity are the dGPU sensors. GPU PECI is the iGPU sensor.

 

15 thoughts on “Disconnecting the dGPU in a late 2011 MacBook Pro –third way

    • the method in this post works with High Sierra and you can control the brigthness as usually. The sleep / hibernate normally, I think you can perfecly do it also, but I think you need to have gfxCardStatus in integrated only.

  1. i do have gfxCardStatus in igpu, but still it wont work. idk if that matters, but i only have com.apple.kext.AMDLegacySupport and com.apple.kext.AMDRadeonX3000 kext loaded, all others dont load and cannot load manually either. also tried gpuswitch 0, 1 and 2, no result. maybe need clean install and start new

  2. Thx for trying to help me. I have hibernate 25 too and also repaired ownership, still they wont load. Do u think it might be the problem? Cause sudo kextload AMD…. for some reason doesn’t work, “not privileged…” blah blah…?

    • You’re welcomed and we are here to help one another. Can you tell me that you see if you ask for info to the AMD6000Controller.kext on /System/Library/Extensions/? System need to be able to read and write.

      Imgur

      • ok, there is no AMD6000Controller.kext at all, nowhere. must have deleted it somehow? all others are there. AMDLegacyFramebuffer.kext is read and write.

        “/Users/me/AMDLegacyFramebuffer.kext failed to load – (libkern/kext) not found; check the system/kernel logs for errors or try kextutil(8).” – this is what i get if i try to “sudo kextload AMDLegacyFramebuffer.kext

        can i just download AMD6000Controller.kext? or need to reinstall?

  3. i made it!!! it was really the missing AMD6000Controller.kext! i just copied it from my other macbook, installed it with kext utility, rebooted and now they are all loaded and everything works as it should 🙂
    thx dude!

  4. funny thing, i just noticed that my system doesnt even contain the AMDRadeonX3000.kext, only the AMDRadeonX3000.bundle??! how come? im on fresh installed high sierra 10.13.2. my mbp stopped working and i tried to do the fix, but there was no kext to move and so i stucked on system not booting. i started from extern hd and found out that there is no AMDRadeonX3000.kext at all. now my system works perfect again but without x3000. i would like to install the last update but im affraid to fuck up the system again. any suggestions?

  5. absolutely, just checked again, none. and kextstat says loaded are only: AMDLegacySupport, AMD6000Controller and AMDLegacyFramebuffer. search also doesnt find anything. but everything works just as its supposed to.should i update anyway?

Leave a Reply