# Fix power management

{% hint style="info" %}
Patch power manager là 1 patch khá quan trọng với laptop, pc có thể không patch. Nó giúp các mẫu laptop có thể tiết kiện điện năng, không quá nóng và đặc biệt là nó còn giúp fix sleep. Vậy patch power manager làm như thế nào?
{% endhint %}

<details>

<summary>Lý thuyết chi tiết</summary>

Bảng này được trích lại từ nguồn [https://vnohackintosh.com/docs/post-install/fixing-power-management](https://vnohackintosh.com/docs/post-install/fixing-power-management#amd-cpu-power-management)

#### XCPM và macOS[​](https://vnohackintosh.com/docs/post-install/fixing-power-management#xcpm-v%C3%A0-macos) <a href="#xcpm-va-macos" id="xcpm-va-macos"></a>

OS X Mountain Lion 10.8.5 ra đời đi kèm với việc đưa CPU Intel Haswell vào real mac.&#x20;

Cùng thời điểm đó, Apple chuyển CPU Power Management từ `AppleIntelCPUPowerManagement.kext` qua Kernel cho CPU Haswell và sau đó là các CPU mới hơn. Công nghệ này gọi là **XCPM (Xnu CPU Power Management)**.&#x20;

Hiểu đơn giản là macOS tự quản lý power, và tính năng này chỉ hỗ trợ CPU Haswell trở lên.

#### CFG-Lock (MSR 0xE2 register)[​](https://vnohackintosh.com/docs/post-install/fixing-power-management#cfg-lock-msr-0xe2-register) <a href="#cfg-lock-msr-0xe2-register" id="cfg-lock-msr-0xe2-register"></a>

Tôi đề cập `CFG-Lock` trong phần config và bios, sau đây là lý do tại sao phải tắt nó đi:

Trong các máy real mac, Apple không khoá `MSR 0xE2 register` (tức cho phép ghi vào register này). Còn trong các mainboard cho CPU Intel thì có thể mặc định bị khoá (không tìm thấy `CFG-LOCK` trong bios nghĩa là mặc định khoá), đa số laptop đều bị khoá. Khi macOS Kernel cố ghi vào register này nhưng nó bị khoá mất rồi thì sẽ gây **Kernel Panic**. Giải pháp khi không tắt được `CFG-LOCK` là patch `AppleIntelCPUPowerManagement.kext` lẫn Kernel để tránh ghi vào `MSR 0xE2 register`.

May mắn là CLOVER và OPENCORE đều hỗ trợ patch tự động vấn đề này.

Đối với OC thì đó là `AppleXcpmCfgLock` trong `Config > Kernel > Quirks`.&#x20;

Do đó nếu máy bạn tắt được `CFG-LOCK` trong bios thì hãy bỏ quirk này đi!

Còn một cách nữa đó là mod bios để tắt `CFG-LOCK`

Chi tiết về các mod bios xem [tại đây](https://advance.heavietnam.com/general/cach-mod-bios)

</details>

## Gen 4 trở lên

### Chuẩn bị

B1: Tải [SSDT-plug](https://github.com/dortania/Getting-Started-With-ACPI/blob/master/extra-files/compiled/SSDT-PLUG-DRTNIA.aml) và bỏ nó vào `EFI ==> OC ==> ACPI`&#x20;

> Hoặc `EFI ==> Clover ==> ACPI ==> patched`

B2: Tải kext [cpu friend](https://github.com/acidanthera/CPUFriend/releases)

B3: Tải tool [CPUFriendFriend](https://github.com/corpnewt/CPUFriendFriend)

### Tiến hành

B1: Chạy tool `CPUFriendFriend` lên

![](https://i.imgur.com/x93f06O.png)

B2: Ta có mục `Low Frequency Mode` tức là xung thấp nhất của cpu khi máy ở chế độ tĩnh&#x20;

> Không làm việc

Có 3 cách để tính `LFM`

* Tra cứu thông tin cpu
  * B1: Các bạn sẽ mở hackintool vào mục `system ==> system info ==> CPU` để tìm mã cpu
  * B2: Search mã đó và vào trang `intel ark`
  * B3: Nhìn vào mục `Tần số TDP-down có thể cấu hình`  hoặc `TDP-down Frequency`![](https://i.imgur.com/mXXkWBp.png)
  * B4: Các bạn sẽ tiến hành chuyển nó về dạng `MHz` bằng công thức sau
    * `TDP-down*1000=1.7*1000=1700`
  * B5: Bạn sẽ chuyển đổi các chứ số hàng trăm thành hex tức chuyển `17` thành `hex`
  * B6: Ta sẽ tiến hành nhập `11` vào terminal

<figure><img src="https://i.imgur.com/JPfDCqf.png" alt=""><figcaption></figcaption></figure>

* Manual
  * B1: Các bạn sẽ mở hackintool vào mục `system ==> system info ==> CPU` để tìm tần số xung tối đa của CPU\
    ![](https://i.imgur.com/I4aI0MF.png)
  * Ở đây ta có xung tối đa của CPU này là `1,8 GHz`. Để tính `LFM` ta sẽ tiến hành chia 2 con số này ra&#x20;
    * Hoặc bao nhiêu tùy thích nhưng mình khuyên nên chia 2&#x20;
    * Và tính theo công thức sau:
      * `MAX/2*1000 = 1,8/2*1000=900 MHz`&#x20;
  * B2: Ta sẽ đổi LFM vừa tìm được  ra hex nhưng không phải đổi con số `900 MHz` mà ta sẽ đổi từ hành trăm tức là đổi số `9`\
    ![](https://i.imgur.com/3ij8Mhr.png)
  * Ta được `0x09` là giá trị hex của `LFM`.&#x20;
    * Ở đây ta sẽ tiên hành bỏ `0x` đi và nhập giá trị vào terminal
* Tra cứu theo danh sách LFM sau
  * Laptop gen 5 trở lên chọn LFM là 08
  * Desktop gen 5 trở lên chọn LFM là 0A
  * Haswell/Broadwell HEDT/Server (tức X99) chọn LFM là 0D
  * Skylake+ HEDT/Server chọn LFM là 0C

{% hint style="info" %}
Đến đây nếu các bạn là `SMbios Broadwell` trở xuống thì trực tiếp tới bước 6 nếu là `SMbios Skylake` trở lên thì tiếp tục bước 3
{% endhint %}

B3: Tính toán EPP.&#x20;

> Khả năng tăng tốc xung CPU&#x20;
>
> > Energy Performance Preference

Các bạn chọn theo bảng sau:

* `0x00-0x3F`: Hiệu suất tối đa
* `0x40-0x7F`: Hiệu suất cân bằng
* `0x80-0xBF`: Công suất cân bằng
* `0xC0-0xFF`: Tiết kiêm điện năng tối đa

{% hint style="info" %}
Giải thích 1 chút:

Với `00` nó sẽ ép cpu của bạn tăng tốc càng nhanh càn tốt&#x20;

Còn với `FF` thì nó sẽ tăng tốc 1 cách từ từ
{% endhint %}

B4: Chọn `Performance Bias` tức là hiệu suất tổng thể của CPU.

> Ở mục này các bạn cần dựa cào trải nghiệm để lựa chọn giá trị phù hợp nhất

B5: `Enable features` các bạn gõ `y`

![](https://i.imgur.com/sZIEPJr.png)

B6: Các bạn sẽ dump được 1 folder `Results`.&#x20;

> Ở folder này các bạn sẽ chú ý các mục

* `SSDT-data.aml`
* `CPUFriendDataProvider.kext`

{% hint style="info" %}
Ta có thể sử dụng chỉ `SSDT-data.aml` hoặc sử dụng `CPUFriendDataProvider.kext` + `SSDT-PLUG.aml`
{% endhint %}

B7: Thêm kext [CPUFriend](https://github.com/acidanthera/CPUFriend) vào `EFI ==> OC ==> kext`

> Hoặc `EFI ==> Clover ==> Kext`

B8: Snaps nếu opencore và reboot

> Nếu là Clover chỉ cần reboot

## Gen 3 đổ xuống

### Cách 1: Enable XCPM&#x20;

{% hint style="warning" %}
Chỉ gen 3
{% endhint %}

B1: Chỉnh sử config `Root ⇒ Kernel ⇒ Quirks` enable những mục sau

* `AppleCpuPmCfgLock`
* `AppleXcpmCfgLock`
* `AppleXcpmExtraMsrs`

> Đối với gen 3 đang dùng các smbios có hỗ trợ xcpm&#x20;
>
> > Tức smbios haswell
>
> Thì bạn chỉ cần enable quirks và không cần add patch

B2: Tải file patched về [tại đây](https://drive.heavietnam.com/d/s/zGb9H1NptgS9f7NSHZ9wFMho98GW7lxA/pPnEOMExhrVA0VnnK4Ic3nD_Qil1lkz4-ZL_AGLCSggs)

![](https://i.imgur.com/hCuMywE.png)

B3: Các bạn sẽ copy mục `0` của file `patched` vào config của các bạn

![](https://lh5.googleusercontent.com/IDHWdoDZrGbnoX9aJ-VLtDdwKs5-Nx4p8LQnYfB7edahL8CbEk6pRuNR4Z8l9J3WbuJ3ps5lt3HWa5Eih8Rh5YB0mKazqW0liEzlGfsTvCCJQl9RyGjth1WuDF4loVVWLob53hsf=s0)

> Tới đây thì các bạn sẽ có thể patch như gen 4 trở lên&#x20;
>
> > Hoặc dừng [`SSDTPrgen`](https://github.com/Piker-Alpha/ssdtPRGen.sh) với lệnh sau

```bash
sudo [kéo SSDTPrgen vào] -x 1
```

{% hint style="warning" %}
Lưu ý

Đối với clover các bạn chỉ cần enable `Kernel XCPM` lên là được&#x20;

> Còn lại thì tương tự OC
> {% endhint %}

![](https://i.imgur.com/8RTMrlc.png)

### Cách 2: **ssdtPRgen**

{% hint style="info" %}
Cho cả gen 2 và gen 3
{% endhint %}

B1: Các bạn chỉnh `CpuPm` và `Cpu0Ist` ở trong `ACPI -> Delete` như sau

| KEY            | TYPE    | VALUE            |
| -------------- | ------- | ---------------- |
| All            | Boolean | YES              |
| Comment        | String  | Drop CpuPm       |
| Enabled        | Boolean | YES              |
| OemTableId     | Data    | 437075506d000000 |
| TableLength    | Number  | 0                |
| TableSignature | Data    | 53534454         |

| KEY            | TYPE    | VALUE            |
| -------------- | ------- | ---------------- |
| All            | Boolean | YES              |
| Comment        | String  | Drop Cpu0Ist     |
| Enabled        | Boolean | YES              |
| OemTableId     | Data    | 4370753049737400 |
| TableLength    | Number  | 0                |
| TableSignature | Data    | 53534454         |

B2: Save reboot

B3: Tải [ssdtPRgen](https://github.com/Piker-Alpha/ssdtPRGen.sh)

B4: Kéo file `ssdtPRGen.sh` vào terminal và nhấn enter

![](https://i.imgur.com/5y4Q1oe.png)

> Sau khi chạy xong bạn sẽ nhận được file `SSDT.aml`&#x20;
>
> > Tại đường dẫn `/Users/your-name>/Library/ssdtPRGen/`

B5: Copy nó vào `EFI ==> OC ==> ACPI`&#x20;

> Hoặc `EFI ==> Clover ==> ACPI ==> Patched`

B7: Rename nó thành `SSDT-PM.aml`&#x20;

B8: Thêm `SSDT-PM.aml` vào `EFI -> OC -> Kext`

> Hoặc EFI -> Clover -> Kext -> Others
>
> > Snapshot nếu là OpenCore

B8: Save và reboot

## AMD Power manager

{% hint style="info" %}
Căn bản MacOS không hỗ trợ XCPM cho AMD

> Tuy nhiên cộng đồng những người dùng AMD đã tạo ra kext [`SMCAMDProcessor`](https://github.com/trulyspinach/SMCAMDProcessor)
> {% endhint %}

<details>

<summary>Chi tiết</summary>

Kext SMCAMDProcessor có 2 kext là `AMDRyzenCPUPowerManagement` và `SMCAMDProcessor`

* `AMDRyzenCPUPowerManagement.kext`
  * Để quản lý tất cả các tính năng liên quan đến năng lượng.&#x20;
  * Kext này cũng cần thiết nếu bạn muốn sử dụng `AMD Power Gadget`.
* `SMCAMDProcessor.kext`&#x20;
  * Để xuất các dữ liệu đọc được tới VirtualSMC
    * Giúp các ứng dụng macOS như iStat hiển thị dữ liệu cảm biến.&#x20;
  * Kext này phụ thuộc vào `AMDRyzenCPUPowerManagement.kext` để thu thập dữ liệu cảm biến
    * Do đó phải được load sau `AMDRyzenCPUPowerManagement.kext`.

</details>

B1: Đảm bảo [Lilu.kext](https://github.com/acidanthera/Lilu) và [VirtualSMC.kext](https://github.com/acidanthera/VirtualSMC) ở bản mới nhất

B2: Tải kext [AMDRyzenCPUPowerManagement.kext](https://github.com/trulyspinach/SMCAMDProcessor/releases) và [SMCAMDProcessor.kext](https://github.com/trulyspinach/SMCAMDProcessor/releases)

B3: Thêm kext vào `EFI -> OC -> Kext`&#x20;

> Hoặc `EFI -> Clover -> Kext -> Others`
>
> > OC Snapshot nếu là OpenCore

B4: Đảm bảo rằng kext  `AMDRyzenCPUPowerManagement.kext` được load trước `SMCAMDProcessor.kext` trong `Config.plist`

> Xem chi tiết về thứ tự load kext [tại đây](https://install.heavietnam.com/general/tim-hieu-chi-tiet-ve-config.plist)

B5: Save lại và reboot

B6: Tải [`AMD Power Gadget`](https://github.com/trulyspinach/SMCAMDProcessor/releases) và mở lên sử dụng

{% hint style="info" %}
Như vâỵ là đã xong rồi hãy tận hưởng tôi :smile:
{% endhint %}

## Check Power manager

### Gen 4 trở lên

{% hint style="info" %}
Hoặc với các máy gen 3 đã enable `XCPM` thì hoàn toàn có thể check theo cách này
{% endhint %}

B1: Tải [ioreg](https://github.com/khronokernel/IORegistryClone/blob/master/ioreg-302.zip) về

B2: Mở ioreg lên và tìm kiếm `AppleACPICPU`

![](https://i.imgur.com/3CkBHAk.png)

B3: Tiến hành tắt tìm kiếm để hiện đầy đủ thông tin

![](https://i.imgur.com/IImN2UL.png)

{% hint style="info" %}
Ở đây nếu có `X86PlatformPlugin` trong `tree` tức là power manager của bạn đã hoạt đông&#x20;

> Nếu nó không có như ảnh dưới thì có nghĩa là chưa hoạt động
> {% endhint %}

![](https://dortania.github.io/OpenCore-Post-Install/assets/img/pm-not-working.2706013b.png)

### Gen 3 đổ xuống

{% hint style="info" %}
Đối với các CPU gen 3 đổ xuống thì apple đã loại bỏ `xcpm` ra khỏi macos ở sierra&#x20;

> Gen 3 vẫn có thể enable lên được

Nên chúng ta sẽ cần dùng cách sau đây
{% endhint %}

{% hint style="warning" %}
Chú ý

Đến thời điểm này [Intel Power Gadget](https://www.intel.com/content/www/us/en/developer/articles/tool/power-gadget.html) đã không còn được cập nhật nữa&#x20;

> Các bạn có thể sử dụng phần mềm khác như [istatus menu](https://maclife.io/istat-menus-theo-doi-thong-tren-menubar.html)&#x20;
> {% endhint %}

B1: Tải [Intel Power Gadget](https://www.intel.com/content/www/us/en/developer/articles/tool/power-gadget.html)

B2: Mở lên và chú ý vào mục `MAX`

![](https://i.imgur.com/2V6OrkK.png)

B3: Mở hackintool lên chú ý vào phần `system ==> system info ==> CPU`

![](https://i.imgur.com/JdKYcnq.png)

B4: Check xung ở cả 2 phần xem có bằng nhau không nếu bằng thì bạn đã patch power manager thành công nếu không bằng thì bạn hãy patch lại nhé

{% hint style="warning" %}
Ngoài ra với gen 3 enable xcpm để chắc chắn bạn hãy check `method int` của `SSDT-PM`
{% endhint %}

![](https://i.imgur.com/Kw6zggx.png)

## Lưu ý

### X99

{% hint style="info" %}
XCPM căn bản không được hỗ trợ cho Haswell-E và Broadwell-E&#x20;

> Vì vậy chúng ta cần `fake cpu id`
> {% endhint %}

* Haswell-E
  * `Kernel -> Emulate`:
    * Cpuid1Data: `C3060300 00000000 00000000 00000000`
    * Cpuid1Mask: `FFFFFFFF 00000000 00000000 00000000`
* Broadwell-E:
  * `Kernel -> Emulate`:
    * Cpuid1Data: `D4060300 00000000 00000000 00000000`
    * Cpuid1Mask: `FFFFFFFF 00000000 00000000 00000000`

### Gen 3 đổ xuống

{% hint style="warning" %}
Ngoài phần max bạn cũng nên check những phần khác đối chiếu chúng với windows để chắc chắn rằng mọi đã hoạt động
{% endhint %}

> Source tham khảo: [\[GUIDE\] X86PlatformPlugin (XCPM) für Ivy Bridge CPUs unter Catalina und Big Sur aktivieren – Anleitungen und Builds – Hackintosh-Forum – Deine Anlaufstelle für Hackintosh & mehr…](https://www.hackintosh-forum.de/forum/thread/53009-guide-x86platformplugin-xcpm-f%C3%BCr-ivy-bridge-cpus-unter-catalina-und-big-sur-akti/) | [Optimizing Power Management | OpenCore Post-Install (dortania.github.io)](https://dortania.github.io/OpenCore-Post-Install/universal/pm.html#sandy-and-ivy-bridge-power-management) | <https://vnohackintosh.com/docs/post-install/fixing-power-management#amd-cpu-power-management>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://basic.heavietnam.com/universal/fix-power-management.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
