Disable discrete graphics card on MacBook Pro Early 2011

I have an early 2011 MacBook Pro that is affected by the well known problem on the graphics card (AMD 6490M 256MB). Apple Forum thread

Hopefully waiting for an Apple replacement program I want to disable the discrete graphics and enable only the Intel HD3000 chip in the i7.

I have been able to access the system by running these commands in "Single User Mode":

$ mkdir /DisabledExtensions
$ mv /Library/Extensions/AMD* /DisabledExtensions/

After that the Mac boot up in Mavericks but I have no graphic acceleration whatsoever, every animation is very slow. I can't change the brightness of the screen, the color calibration is different. Under "Settings > Monitor" shows that the computer is attached to an external monitor.

I have installed gfxCardStatus v2.2.1 which shows that I am running on the discrete graphics card and there is no chance to switch to integrated one. Even though I can see that the HD3000 Extension is loaded:

$ kextstat | grep HD3000

110 0 0xffffff7f837dc000 0x62000 0x62000 com.apple.driver.AppleIntelHD3000Graphics (8.2.4) <84 11 7 5 4 3 1>

The apple customer service says that they don't have an "official" procedure to disable the discrete graphics card.

Here are the specs:
Processor: 2 GHz Intel Core i7
Memory: 4 GB 1333 MHz DDR3
Graphics: AMD Radeon HD 6490M 256 MB
Software: OS X 10.9.5 (13F34)


Solution 1:

Disabling the ATI/AMD kernel extensions will not force the OS to switch to the Intel integrated graphics. It's a misconception in all the fixes/instructions out there... All that does is running the discrete chip with a fallback driver with no graphic acceleration. This is akin to seeing the "640x480 VGA" standard display mode on Windows back in the day whenever it cannot load the proprietary GPU driver. Same GPU is being used, just not at its full capacity.

Here is what happens after disabling the AMD/ATI extensions:

  • The black screen (no display) problem is usually fixed.
  • However there is no graphic acceleration.

  • Existing or new graphics defects(blue or pink bars/lines, jagged/out-of-order image, noise, etc.) will show up as temperature fluctuates (running GPU at high temp, power on/off, etc.), presumably due to the lead-free solder problem.

  • The defects are present at the boot time.

  • The internal LCD is treated as an external monitor, with only one possible resolution: the maximum display resolution (1440x900 or 1680x1050).

  • When the laptop LCD is used, it stays on full brightness and does not turn off when the lid is closed. This physically damages the screen as time goes (doesn't take long, several weeks will do).

  • A Thunderbolt external display can be used if the laptop lid is shut at the boot time (before image showing up on the laptop LCD).

  • Only one display device is recognized, either the laptop LCD or an external Thunderbolt monitor. There is no mirroring or extending when using an external monitor.
  • The laptop LCD will stay off when using an external monitor.

The only method I know that triggers the integrated graphics switch is the overheat-shutdown method.

0 (optional). If you can get the display to show up using the disable-kernel-extensions method, set your account to auto-login. Install switchGPU or a similar tool to automate step 3 below.

  1. Let the Macbook Pro overheat in a blanket or closed bag in order to force an auto-shutdown.

  2. Immediately turn it back on. It should be using the integrated graphics.

  3. Quickly switch to integrated graphics using gfxCardStatus (with proper setting in System Preferences/Energy Saver).

The problem with this method is that the OS will switch to discrete graphics whenever you run some app that uses graphics acceleration. So this is not a permanent solution.

The reality is, as long as the GPU BGA sits on top of those RoHS solder balls, the disable-kernel-extensions method will also start to fail at some point. The only lasting solution is reballing the GPU BGA with lead solder, if you have given up on Apple. Finding a reliable reballing service that understands temperature profiles and follows proper soldering techniques is yet another hurdle.

Update: Louis Rossmann pointed out that the problem is not with the solder balls on the board but the much smaller soldering joints within the GPU chip (see video @ 1:04: Reballing a dead horse: Q&A from my YT inbox.). It was mentioned that the actual problem may be temporarily fixed as a side effect of the reballing/reflowing process, but the only permanent solution is to replace the GPU, i.e., the whole board through Apple.

FYI, Apple's replacement program ends on December 31st 2016.

Solution 2:

SOLUTION WITHOUT HARDWARE AND EXTERNAL USB's (only commands)

I was struggling with this in a client's computer which I accepted because it seemed to be the same problem as my MBP 2010 mid (change a small chip, which I bought many more for the case), but it wasn't the same case.

After watching some Louis Rossmann video on the matter (which was a bit depressing), somehow I found this macrumors forum link and tried to follow the easy method (without Arch Linux), then I found this other link explaining in an easier manner the most complete procedure listed between the macforum comments (#875 from 2634 listed today).

So, recapitulating: creating a complete guide joining all them would include:

  1. Disable the AMD GPU and move one AMD kext so that it is not loaded on initial boot and reload it automatically (so it keeps your system cooler) as told in here
  2. Then create an extra file to use whenever the SMC/PRAM/NVRAM is reset, as told in this link starting from where it says Preventive measures for future use
  3. Last but not least, avoid the Close the Lid - Sleep - Waking problem as stated in here (which means adding just one more line to a file created in step 2).

One extra tip: I struggled running the command sudo defaults write com.apple.loginwindow LoginHook /Library/LoginHook/LoadX3000.sh so what I did was once I could finally enter MacOS, the first thing was to open a Terminal (Launchpad/Others/Terminal) and run the command from there (it asked users system password). After that, it was safe to shutdown without needing to do the process over again.

Complete list of commands:

For the sake of possible future broken links that aren't saved by web.archive.org, and to make it easy for everyone, I'll post the complete list of commands here without instructions:

  1. Power on your laptop while holding <Cmd>+<r>+<s>
  2. Once in command line:
    • Disable SIP entering csrutil disable
    • Reboot entering reboot AND
  3. Hold down <Cmd>+<s> to boot into single-user mode (once it has shutdown and starts booting)
  4. Once in command line enter the following:
    • nvram fa4ce28d-b62f-4c99-9cc3-6815686e30f9:gpu-power-prefs=%01%00%00%00
    • nvram boot-args=”-v” (I believe it's optional, will turn on verbose mode when booting up)
    • Reboot entering reboot AND
  5. Hold down <Cmd>+<s> on boot
  6. Move one AMD kext (so that it is not loaded on initial boot) entering on command line:
    • /sbin/mount -uw /
    • mkdir -p /System/Library/Extensions-bkup
    • mv /System/Library/Extensions/AMDRadeonX3000.kext /System/Library/Extensions-bkup/
    • touch /System/Library/Extensions/ (I believe you can now run MacOS ONCE and continue from a Terminal using sudo at the beginning of each command)
    • mkdir -p /Library/LoginHook
    • nano /Library/LoginHook/LoadAMD.sh
  7. In nano, add the following 4 lines of commands (includes extra line of step 3):

    #!/bin/bash kextload /System/Library/Extensions-bkup/AMDRadeonX3000.kext sudo pmset -a force gpuswitch 0 exit 0

  8. Then hit <Ctrl>+<x> to save (will ask to save pressing Y and Enter)
  9. In command line enter:
    • chmod a+x /Library/LoginHook/LoadAMD.sh (to make it executable)
    • defaults write com.apple.loginwindow LoginHook /Library/LoginHook/LoadAMD.sh (this is what gave me trouble when trying from single-user mode and had to run it from MacOS Terminal using sudo at the beginning)
    • nano /force-iGPU-boot.sh (this is the Preventive measure of step 2)
  10. In nano, add the following 4 lines of commands:

    #/bin/sh sudo nvram boot-args="-v" sudo nvram fa4ce28d-b62f-4c99-9cc3-6815686e30f9:gpu-power-prefs=%01%00%00%00 exit 0

  11. Again hit <Ctrl>+<x> to save (will ask to save pressing Y and Enter)
  12. In command line enter:
    • chmod a+x /force-iGPU-boot.sh (to make it executable)
    • reboot (if you are in single-user mode, if it's a Terminal not needed, just exit)
  13. That's it! You should be able to reboot normally and let it sleep as usual (YEI!)

If you still have trouble with Close Lid - Sleep procedures you could try this other 2 solutions mentioned also in MacRumors Forum:

  1. https://forums.macrumors.com/threads/force-2011-macbook-pro-8-2-with-failed-amd-gpu-to-always-use-intel-integrated-gpu-efi-variable-fix.2037591/page-50#post-25573439
  2. https://github.com/blackgate/AMDGPUWakeHandler

Preventive Measures:

Whenever you need to use the Preventive Measures because your computer gets stuck in a startup reboot loop (when the SMC/PRAM/NVRAM is reset, usually because of an OS update), this simple steps should do the trick:

  1. Power on your laptop while holding down <Cmd>+<s> to boot into single-user mode
  2. Once in command line:
    • Mount root partition writeable: /sbin/mount -uw /
    • Execute the preventive file: sh /force-iGPU-boot.sh
    • Finally type this to restart the machine: reboot
  3. Your computer should restart correctly.

Hope this keeps helping lots of people with 2011 MBP's. Working together as a huge team is the best thing humanity can do.