Fix power management

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?

Lý thuyết chi tiết

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

XCPM và macOS

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

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).

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)

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.

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

Gen 4 trở lên

Chuẩn bị

B1: Tải SSDT-plug và bỏ nó vào EFI ==> OC ==> ACPI

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

B2: Tải kext cpu friend

B3: Tải tool CPUFriendFriend

Tiến hành

B1: Chạy tool CPUFriendFriend lên

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

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

    • 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

  • Manual

    • Ở đâ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

      • Hoặc bao nhiêu tùy thích nhưng mình khuyên nên chia 2

      • Và tính theo công thức sau:

        • MAX/2*1000 = 1,8/2*1000=900 MHz

    • Ta được 0x09 là giá trị hex của LFM.

      • Ở đâ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

Đế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

B3: Tính toán EPP.

Khả năng tăng tốc xung CPU

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

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

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

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

B6: Các bạn sẽ dump được 1 folder Results.

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

  • SSDT-data.aml

  • CPUFriendDataProvider.kext

Ta có thể sử dụng chỉ SSDT-data.aml hoặc sử dụng CPUFriendDataProvider.kext + SSDT-PLUG.aml

B7: Thêm kext 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

Chỉ gen 3

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

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

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

Tới đây thì các bạn sẽ có thể patch như gen 4 trở lên

Hoặc dừng SSDTPrgen với lệnh sau

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

Lưu ý

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

Còn lại thì tương tự OC

Cách 2: ssdtPRgen

Cho cả gen 2 và gen 3

B1: Các bạn chỉnh CpuPmCpu0Ist ở trong ACPI -> Delete như sau

B2: Save reboot

B3: Tải ssdtPRgen

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

Sau khi chạy xong bạn sẽ nhận được file SSDT.aml

Tại đường dẫn /Users/your-name>/Library/ssdtPRGen/

B5: Copy nó vào EFI ==> OC ==> ACPI

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

B7: Rename nó thành SSDT-PM.aml

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

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

Chi tiết

Kext SMCAMDProcessor có 2 kext là AMDRyzenCPUPowerManagementSMCAMDProcessor

  • AMDRyzenCPUPowerManagement.kext

    • Để quản lý tất cả các tính năng liên quan đến năng lượng.

    • Kext này cũng cần thiết nếu bạn muốn sử dụng AMD Power Gadget.

  • SMCAMDProcessor.kext

    • Để 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.

    • 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.

B1: Đảm bảo Lilu.kextVirtualSMC.kext ở bản mới nhất

B2: Tải kext AMDRyzenCPUPowerManagement.kextSMCAMDProcessor.kext

B3: Thêm kext vào EFI -> OC -> Kext

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

B5: Save lại và reboot

B6: Tải AMD Power Gadget và mở lên sử dụng

Check Power manager

Gen 4 trở lên

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

B1: Tải ioreg về

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

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

Ở đây nếu có X86PlatformPlugin trong tree tức là power manager của bạn đã hoạt đông

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

Gen 3 đổ xuống

Đối với các CPU gen 3 đổ xuống thì apple đã loại bỏ xcpm ra khỏi macos ở sierra

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

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

Chú ý

Đến thời điểm này Intel Power Gadget đã không còn được cập nhật nữa

Các bạn có thể sử dụng phần mềm khác như istatus menu

B1: Tải Intel Power Gadget

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

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

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é

Ngoài ra với gen 3 enable xcpm để chắc chắn bạn hãy check method int của SSDT-PM

Lưu ý

X99

XCPM căn bản không được hỗ trợ cho Haswell-E và Broadwell-E

Vì vậy chúng ta cần fake cpu id

  • 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

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

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… | Optimizing Power Management | OpenCore Post-Install (dortania.github.io) | https://vnohackintosh.com/docs/post-install/fixing-power-management#amd-cpu-power-management

Last updated