Last modified: Wed May 27 2020 14:16:40 GMT+0000 (Coordinated Universal Time)

Fixing System Clocks

For Intel 300 series chipsets and newer, this also includes X299 refreshes and Icelake laptops. Common machines:

  • X299X (10th Gen refresh, AsRock and Asus don't use the -x naming so you'll need to double check)
  • B360
  • B365
  • H310
  • H370
  • Z370 (Gigabyte and AsRock boards with newer BIOS versions)
  • Z390
  • B460
  • Z490
  • 400 series (Cometlake)
  • 495 series (Icelake)

So on newer Intel 300 series motherboards, manufactures started pushing for a new type of system clock: AWAC( A Weird Ass Clock). One small problem, macOS doesn't know what the hell an AWAC clock is instead only familiar with the legacy RTC(Real Time Clock). So we need to figure out how to bring back the old clock, thats where SSDT-AWAC and SSDT-RTC0 come in:

  • SSDT-AWAC

    • Disables AWAC and enables RTC
    • In your DSDT, there's a variable called STAS used for holding either a One or Zero to determine which clock to use(One for RTC and Zero for AWAC)
  • SSDT-RTC0

    • Used for creating a fake RTC device for macOS to play with
    • In very rare circumstances, some DSDTs may not have a legacy RTC to fall back on. When this happens, we'll want to create a fake device to make macOS happy

Note: AWAC actually stands for ACPI Wake Alarm Counter/Clock for those curious, though I'll forever know it as A Weird Ass Clock ;p

Determining which SSDT you need

To determine whether you need SSDT-AWAC or SSDT-RTC0:

  • open your decompiled DSDT and search for Device (AWAC)
  • If nothing shows up then no need to continue and no need for this SSDT as you have no AWAC. Otherwise, continue on!
  • If you get a result then you have an AWAC system clock present, then continue with the next search for STAS:

As you can see we found the STAS in our DSDT, this means we're able to force enable our Legacy RTC. In this case, SSDT-AWAC will be used As-Is with no modifications required. Just need to compile. Note that STAS may be found in AWAC first instead of RTC like in our example, this is normal.

For systems where no STAS shows up but you do have AWAC, you can use SSDT-RTC0 though you will need to check the naming of LPC in your DSDT

By default the SSDT uses LPCB, you can check what your system uses by just searching for Name (_ADR, 0x001F0000). This address is used for Low Pin Count devices(LPC) but the device name can vary between LPCB, LBC or LBC0:

_INI Edge Cases

Mainly seen on X299 refresh boards, there's already a Scope (_SB) { Method (_INI... in your DSDT. This means our SSDT-AWAC will conflict with the one found in our DSDT. For these situations, you'll want to remove Method (_INI, 0, NotSerialized) {} from the SSDT. You'll be left this this in the end:

DefinitionBlock ("", "SSDT", 2, "DRTNIA", "AWAC", 0x00000000)
{
    External (STAS, IntObj)

    Scope (_SB)
    {
        If (_OSI ("Darwin"))
        {
            STAS = One
        }
    }
}

You can find a prebuilt of this here: SSDT-AWAC.aml

Now you're ready to compile the SSDT!

results matching ""

    No results matching ""