From 47a2f7161237415130e2aff168101e43ae15acde Mon Sep 17 00:00:00 2001 From: Mykola Grymalyuk Date: Sun, 10 Oct 2021 20:42:05 -0600 Subject: [PATCH] Add firmware throttle patch Closes https://github.com/dortania/OpenCore-Legacy-Patcher/issues/555 --- CHANGELOG.md | 1 + README.md | 2 ++ payloads/Config/config.plist | 20 ++++++++++++++- payloads/Kexts/Misc/SimpleMSR-v1.0.0.zip | Bin 0 -> 10278 bytes resources/build.py | 5 ++++ resources/cli_menu.py | 30 +++++++++++++++++++++++ resources/constants.py | 23 +++++++++++------ 7 files changed, 73 insertions(+), 8 deletions(-) create mode 100644 payloads/Kexts/Misc/SimpleMSR-v1.0.0.zip diff --git a/CHANGELOG.md b/CHANGELOG.md index 580a29a94..b61de996e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,6 +41,7 @@ - Mainly applicable for iMac12,x and iGPU-only MacBooks - Add EFICheckDisabler - Based off stripped RestrictEvents.kext +- Add SimpleMSR to disable missing battery throttling on Nehalem+ MacBooks ## 0.2.5 diff --git a/README.md b/README.md index f74825ef1..94829b9e9 100644 --- a/README.md +++ b/README.md @@ -65,6 +65,8 @@ Nightly builds can be found here courteous of nightly.link: * Development of previous patchers, laying out much of what needs to be patched * [mario_bros_tech](https://github.com/mariobrostech) and the rest of the Unsupported Mac Discord * Catalyst that started OpenCore Legacy Patcher +* [arter97](https://github.com/arter97/) + * [SimpleMSR](https://github.com/arter97/SimpleMSR/) to disable firmware throttling in Nehalem+ MacBooks without batteries * MacRumors and Unsupported Mac Communities * Endless testing, reporting issues * Apple diff --git a/payloads/Config/config.plist b/payloads/Config/config.plist index 51c90b3f6..4a69945d2 100644 --- a/payloads/Config/config.plist +++ b/payloads/Config/config.plist @@ -976,7 +976,7 @@ BundlePath CSLVFixup.kext Comment - Fix Music.app + Fix Music Enabled ExecutablePath @@ -988,6 +988,24 @@ PlistPath Contents/Info.plist + + Arch + x86_64 + BundlePath + SimpleMSR.kext + Comment + Disable firmware based battery throttling + Enabled + + ExecutablePath + Contents/MacOS/SimpleMSR + MaxKernel + + MinKernel + + PlistPath + Contents/Info.plist + Block diff --git a/payloads/Kexts/Misc/SimpleMSR-v1.0.0.zip b/payloads/Kexts/Misc/SimpleMSR-v1.0.0.zip new file mode 100644 index 0000000000000000000000000000000000000000..9becfe14a777a988a24902323aa96b94179626ad GIT binary patch literal 10278 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 cpu_data.cpu_data.nehalem.value: + # Nehalem and newer MacBooks force firmware throttling via MSR_POWER_CTL + self.enable_kext("SimpleMSR.kext", self.constants.simplemsr_version, self.constants.simplemsr_path) if self.get_kext_by_bundle_path("RestrictEvents.kext")["Enabled"] is False: # Ensure this is done at the end so all previous RestrictEvents patches are applied # RestrictEvents and EFICheckDisabler will confilict if both are injected diff --git a/resources/cli_menu.py b/resources/cli_menu.py index a61d1c6ea..1202e8e08 100644 --- a/resources/cli_menu.py +++ b/resources/cli_menu.py @@ -677,6 +677,35 @@ for Windows may prefer to only work with the dGPU and eGPU active. print("Returning to previous menu") else: self.dGPU_switch_support() + + def set_battery_throttle(self): + utilities.cls() + utilities.header(["Disable Firmware Throttling"]) + print( + """ +By default on Nehalem and newer Macs, the firmware will throttle if +the battery is either dead or missing. The firmware will set +'BD PROCHOT' to notify the OS the machine needs to run in an extreme +low power mode. + +Enabling this option will patch 'MSR_POWER_CTL' to be unset allowing +proper CPU behaviour as if battery is present. Note that this can cause +instability in situations where the CPU is being taxed and pulls more +power than the PSU can supply. + +Note: Only supported on Nehalem and newer MacBooks (2010+) + """ + ) + + change_menu = input("Disable Firmware Throttling?(y/n/q): ") + if change_menu in {"y", "Y", "yes", "Yes"}: + self.constants.disable_msr_power_ctl = True + elif change_menu in {"n", "N", "no", "No"}: + self.constants.disable_msr_power_ctl = False + elif change_menu in {"q", "Q", "Quit", "quit"}: + print("Returning to previous menu") + else: + self.set_battery_throttle() def set_surplus(self): utilities.cls() @@ -919,6 +948,7 @@ system_profiler SPHardwareDataType | grep 'Model Identifier' f"Set Windows GMUX support:\tCurrently {self.constants.dGPU_switch}", MenuOptions(self.constants.custom_model or self.constants.computer.real_model, self.constants).dGPU_switch_support, ], + [f"Disable Battery Throttling:\tCurrently {self.constants.disable_msr_power_ctl}", MenuOptions(self.constants.custom_model or self.constants.computer.real_model, self.constants).set_battery_throttle], ] for option in options: diff --git a/resources/constants.py b/resources/constants.py index 063f2e306..fbdfc8601 100644 --- a/resources/constants.py +++ b/resources/constants.py @@ -72,6 +72,10 @@ class Constants: ## https://github.com/cdf/Innie self.innie_version = "1.3.0" # Innie + ## arter97 + ## https://github.com/arter97/SimpleMSR/ + self.simplemsr_version = "1.0.0" # SimpleMSR + # Get resource path self.current_path = Path(__file__).parent.parent.resolve() self.payload_path = self.current_path / Path("payloads") @@ -140,13 +144,14 @@ class Constants: self.allow_ts2_accel = True # Set TeraScale 2 Acceleration support ## Miscellaneous - self.disallow_cpufriend = False # Disable CPUFriend - self.enable_wake_on_wlan = False # Allow Wake on WLAN for modern Broadcom - self.disable_tb = False # Disable Thunderbolt Controller - self.set_alc_usage = True # Set AppleALC usage - self.dGPU_switch = True # Set Display GPU Switching for Windows - self.force_surplus = False # Force SurPlus patch in newer OSes - self.force_latest_psp = False # Force latest PatcherSupportPkg + self.disallow_cpufriend = False # Disable CPUFriend + self.enable_wake_on_wlan = False # Allow Wake on WLAN for modern Broadcom + self.disable_tb = False # Disable Thunderbolt Controller + self.set_alc_usage = True # Set AppleALC usage + self.dGPU_switch = True # Set Display GPU Switching for Windows + self.force_surplus = False # Force SurPlus patch in newer OSes + self.force_latest_psp = False # Force latest PatcherSupportPkg + self.disable_msr_power_ctl = False # Disable MSR Power Control (missing battery throttling) # OS Versions ## Based off Major Kernel Version @@ -325,6 +330,10 @@ class Constants: @property def innie_path(self): return self.payload_kexts_path / Path(f"Misc/Innie-v{self.innie_version}.zip") + + @property + def simplemsr_path(self): + return self.payload_kexts_path / Path(f"Misc/SimpleMSR-v{self.simplemsr_version}.zip") @property def latebloom_path(self):