Fix System Clocks on HEDT
Chuẩn bị:
Dump DSDT theo hướng dẫn tại đây.
Xác định vấn đề:
Các bạn cần xác định vấn đề của mình có thật sự cần dùng SSDT-RTC0 hay không.
B1: Mở SSDT ra và ấn tổ hợp phím Command + F và gõ từ khóa PNP0B00 nhìn vào dòng _CRS.

Chúng ta có:
Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
{
IO (Decode16,
0x0070, // Range Minimum 1
0x0070, // Range Maximum 1
0x01, // Alignment 1
0x02, // Length 1
)
IO (Decode16,
0x0074, // Range Minimum 2
0x0074, // Range Maximum 2
0x01, // Alignment 2
0x04, // Length 2
)
IRQNoFlags ()
{8}
})Các bạn để ý vào các dòng IRQNoFlags (số vùng bao phủ) và 2 dòng IO (Decode16, chúng ta có rtc bao phủ 8 vùng là 0x70 (0x007 chính là 0x70 do được viết bằng hex), 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77 ta có:
Dòng
iođầu tiên:Bắt đầu ở
0x70.Bao gồm 2 vùng.
Chứa
0x70, 0x71.
Dòng
iothứ hai:Bắt đầu ở
0x74.Bao gồm 4 vùng.
Chứa
0x74, 0x75, 0x76, 0x77.
Thiếu 0x72 và 0x73.
Ta cần sửa phạm vi ở dòng io đầu tiên thành 4.
Tìm ACPI Path:
B1: Mở DSDT lên và ấn Command + F
B2: Search các từ khóa sau:
PNP0B00: Dùng để tìm tên củaDevice RTC.Name (_ADR, 0x001F0000): Dùng để tìmLPC Path(LowPinCount Path).PNP0A08: Dùng để tìmPCI Pathcó thể có nhiều kết quả cùng xuất hiện hãy chọn cái đầu tiên.



Bây giờ chúng ta có các Path của ACPI là
rtc,lpc,pci0
Edit SSDT:
B1: Mở SSDT-RTC0 vừa tải ở bước chuẩn bị lên và sửa lại các Path như sau:
//Path mặc định sẽ là
PC00.LPC0.RTC
//chúng ta cần sửa lại là
PCI0.LPC.RTC B2: Rename trong SSDT:
//Trước khi rename
External (_SB_.PC00.LPC0, DeviceObj) <- Rename
External (_SB_.PC00.LPC0.RTC_, DeviceObj) <- Rename
Scope (_SB.PC00.LPC0) <- Rename
//Sau khi rename
External (_SB_.PCI0.LPC, DeviceObj) <- Renamed
Scope (_SB.PCI0.LPC.RTC) <- Renamed
Scope (_SB.PCI0.LPC) <- RenamedB3: Tiếp theo search device(ACPI000E) ( hoặc ACPI000E ) Nếu DSDT của bạn có dòng này thì
/* <- xóa nó trong ssdt
Scope (RTC)
{
Method (_STA, 0, NotSerialized) // _STA: Status
{
If (_OSI ("Darwin"))
{
Return (Zero)
}
Else
{
Return (0x0F)
}
}
}
*/ <- xóa nó trong ssdt
// Nếu không có thì xóa luôn phần ghi chú này trong ssdtB4: Chúng ta có phần này:
Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
{
IO (Decode16,
0x0070, // Range Minimum 1
0x0070, // Range Maximum 1
0x01, // Alignment 1
0x04, // Length 1 (Expanded to include 0x72 and 0x73)
)
IO (Decode16,
0x0074, // Range Minimum 2
0x0074, // Range Maximum 2
0x01, // Alignment 2
0x04, // Length 2
)
IRQNoFlags ()
{8}
})
// Sửa các giá trị theo phân tích ở bước xác định vấn đề ở đây mình đã sửa dòng io đầu tiên có phạm vi giá trị là 0x04
Chúng ta có:



B5: Save lại dưới dạng file aml theo hướng dẫn tại đây.
B6: Bỏ file SSDT vừa sửa vào EFI ==> OC ==> ACPI và Snapshot lại
Hoặc
EFI ==> Clover ==> ACPI ==> Patched
B7: Restart và tận hưởng thôi
Lưu ý: Source tham khảo: Fixing System Clocks on HEDT: Manual | Getting Started With ACPI (dortania.github.io) | OpenCorePkg/SSDT-RTC0-RANGE.dsl at master · acidanthera/OpenCorePkg (github.com)
Last updated