Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

billybawbjimbo

macrumors newbie
Original poster
Jan 15, 2025
5
5
TL,DR:
I have 2 questions:
Anyone out there sorted out how to disable screen-not-detected CPU throttling when running Linux on 2015 iMac hardware, or have the time to help translate instructions from .kext stuff to something Linux specific? I've been searching off and on for days, and everything I'm finding is MacOS specific.

And....I'm also assuming connecting an external monitor (or using a dummy plug) won't override this, since it involves hardware sensors and timing checks...right? I don't have one laying around at the moment to test with.


The full explanation:
I have a 27" Retina late 2015 iMac. In a perfect world, I'd like to yank the guts from it and put them in a project box to run a small Linux server, and convert the case and screen to turn it into a monitor. Yes, cooling, not simple, etc. I'm bored and it's too cold to work in the garage. I'm trying to save the hardware from the recycler while I can still use it. I will re-install MacOS if I have to, and virtualize or run Docker from there, I just don't want the extra overhead of MacOS.

I found instructions for disconnecting the screen without throttling if you're going to continue running MacOS (like here: https://khronokernel.com/macos/2022/03/01/5K-MONITOR.html#5k-imac-experience). The trouble is, that involves unique BSD/MacOS ways of interfacing with the MSR and various CPU registers via .kext files.

I know enough to know that I could probably run msr-tools in Debian and achieve the same results (I think???). But I'm not dumb enough to just experiment with injecting random hex values in the MSR without being 99% sure I'm sending the right values to the right place. And the way all these programs are written, it's hard to look at the code to tell where there's MacOS specific stuff being written, vs stuff being written via the MSR/hardware (I'm NOT a coder, but I can read enough to tell what's going on, mostly).

Thanks for any help!
 
From the link:
"...this system throttles itself heavily if no Display is attached .
The specific reason is due to 2 missing sensors present in the Display itself:
LCD Flying Lead and Timing Controller (TCON).
When neither of these reports back to the firmware, Apple forces a fail-safe mode:

  • Fans start to max out (6000rpm)
  • BD PROCHOT MSR is triggered throttling the CPU to 1100Mhz
  • GPU is down-clocked to 300Mhz and locked there
  • CPU throttling can be resolved with SimpleMSR and disabling of X86PlatformPlugin.kext
    • Disabling X86PP is fairly easy using ASPP-Override.kext, which forces ACPI_SMC_PlatformPlugin to outmatch the XCPM kext
  • GPU throttling has yet to be resolved..."
With regard to trouble-shooting this GPU shutdown, the obvious first action would be to dismantle another broken screen panel, and connect that screen's pcb, with the T-con chip and LCD flying lead sensor to the iMac logic board (using the original eDP cable), and see how much of the pcb's electronics are essential for the T-con to handshake correctly.

My guess is that the actual screen matrix isn't needed, as damaged screens still function in a damaged state.
Maybe the extremities of the pcb could also be disconnected without preventing the T-con handshake?

If the logic board can be made to run in this way, then the CPU .kext procedures would also be unnecessary.
 
Last edited:
*facepalm*

Holy crap I'd been so focused on finding a software solution I hadn't even considered this. Likely the easiest solution by far. Off to fleabay I go, thank you!!
 
A posterity update, in case someone else decides to be as silly as I am.

Pulling the PCB from the screen turns out to be a no-go, it runs the width of the screen sadly.

But...I finally figured out how to do the CPU register kludge in Linux....it turns out the register flag being set is the same one other manufacturers have used to throttle for using non-branded power supplies and other BS. Once I sorted that, finding the solution was super simple.

So, the fix is to use the shell script here: https://github.com/yyearth/turnoff-BD-PROCHOT/blob/master/bdprochot_off.sh

and set it to run at bootup or after waking from sleep. Easy!
 
  • Like
Reactions: Nguyen Duc Hieu
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.