Chuẩn bị:

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òngIRQNoFlags (số vùng bao phủ) và 2 dòngIO (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 io thứ 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ủa Device RTC.
  • Name (_ADR, 0x001F0000): Dùng để tìm LPC Path (LowPinCount Path).
  • PNP0A08: Dùng để tìm PCI Path (có thể có nhiều kết quả cùng xuất hiện hãy chọn cái đầu tiên).
RTC Pathing
LPC Pathing
PCI Pathing

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

B3: Tiếp theo search device(ACPI000E) ( hoặcACPI000E ) 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 ssdt

B4: 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 ) sau đó Restart.

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)

One thought on “XXXXII. Fix System Clocks on HEDT

  1. Pingback: Kernel issue - Heavietnam April 2022

Leave a Reply