Today, my MacBook Pro decided it wanted to retire. Thankfully, it seems I worked out a solution until I can get a replacement.
In case others start facing this, I wanted to document my troubleshooting experience here.
If you’re looking to get right to the steps I took to resolve things, jump down to the Workaround section.
As I started work this morning, I noticed that the laptop wasn’t booting up from sleep as expected. I was greeted with a cold boot and multiple notices that my computer was rebooted due to an error.
Ignoring the notices for a bit, I tried working. This was met with more crashes and reboots. Eventually, it seemed to be somewhat stable but my external monitors were no longer working. It also would crash any time it went to sleep. After a few more crashes, I was then having issues booting and logging in.
Clearing NVRAM and resetting SMC allowed me back in but any attempts to use my external monitors failed. It continued to crash whenever using Chrome and if I stepped away long enough for my screen to sleep.
- MacBook Pro (15-inch, 2018)
- macOS: Monterey 12.2 (21D49)
- Processor: 2.9 GHz 6-Core Intel Core i9
- Memory: 2 GB 2400 MHz DDR4
- Integrated graphics: Intel UHD Graphics 630
- Discrete graphics: Radeon Pro 560X 4 GB
Logs & Troubleshooting
I opened the console to check for logs and found it littered with
panic-full — indicating a recurring kernel panic.
The following stood out and was persistent throughout all the panic logs.
"macOSPanicString" : "panic(cpu 0 caller 0xffffff7fae275244): \"virtual bool IOAccelLegacyDisplayMachine::display_mode_did_change(uint32_t): AMDRadeonAccelerator driver returns false\" @IOAccelLegacyDisplayMachine.cpp:267\nPanicked task 0xffffff95294326a0: 7 threads: pid 141: WindowServer
This instantly brought back memories of the mass GPU failures that occurred with 2011 MPBs.
I tried safe mode. Things seemed stable and my external monitors worked; however, I noticed that the device was sticking to its integrated graphics.
Frustrated and wanting to work, I tried wiping my drive and reinstalling macOS. The error persisted so I restored a backup.
Next, I started up a chat, and then a call, with Apple to see if they might have any hints based on everything I’ve tried. I suggested my GPU might be dying and they agreed. Their solution was to get it serviced or replaced.
I needed to get to work so I started checking for potential workarounds.
What now? Bypass the discrete GPU?
My new goal was to see if I could disable the discrete GPU and force the MBP to use the integrated graphics while I wait on a new laptop.
I found some very detailed, and unfortunately long, guides for how folks disabled the failed discrete GPUs for 2011 MPBs. Based on what I saw, those steps wouldn’t work with mine.
I remembered that the macOS Battery options included an
Automatic graphics switching setting and tried toggling that off. Unfortunately, it seemed that it didn’t change anything and the option would simply turn back on.
macOS tracks the graphics switching with
I checked this by opening the terminal and running
gpuswitch was set to 2 while
Automatic graphics switching was turned on. I turned the option off and it was still set to 2. 😐
We can adjust the
gpuswitch option via
sudo pmset -a gpuswitch and the option you want to set. Unfortunately, Apple.com’s forums had mixed information on the available options.
After some digging and testing, it appears we have three options.
0 = Only use integrated graphics 1 = Only use discrete graphics 2 = Automatic graphics switching: Allow system to automatically switch between discrete & integrated based on power and resources
Without digging in more, I’m still not certain how accurate this is but
2 definitely seems to be for automatic switching.
So, I can try forcing integrated graphics by running the following.
pmset -a gpuswitch 0
With this info, I was able to apply a workaround that got me back to work until I get a replacement laptop.
- Navigate to
System Preferences > Battery > Battery
Automatic graphics switching
- Open Terminal.
sudo pmset -a gpuswitch 0
- Observe if the change applied by running
pmset -gand check the value of
gpuswitch. It should now be
After taking these steps, the crashes stopped and I was able to use my external monitors again. Oh, and do a bit of work.
It seems this workaround is forcing the integrated CPU to be used. However, if I check
System Info > Graphics/Displays, my external monitors appear to be running on the discrete.
Regardless, things are working for now and I’ve got a replacement on the way.
Outside of the new GPU hardware issues, this MBP has had a broken touch bar and butterfly keyboard that started to fail within the first few months of light use. This new failure was good motivation to get a replacement.
I look forward to the speed of the new chips but am also wary and worried about hardware quality. Hopefully, things have gotten better since 2018.