黑苹果SSDT修正关机/重启问题

前言

最后更新:2021/5/31

黑苹果进入十代酷睿搭 400 系主板时代后,某些机型上(部分 Z390 和 B460)的 macOS 可能会遇到一个奇怪的问题,就是关机时,电脑可能会变成自动重启,或卡在壁纸界面(开了 -v 跑码的卡在跑码界面)。

这是因为 ACPI 中缺少 S5 调用而导致控制器无法断电。当然,Windows 和 Linux 都有各自的黑科技来解决这个问题,但 macOS 没有内置此类修复(不是因为苹果傲娇,而是它的自家产品没有这个问题)。这个现象在 Clover 中并不常见,因为 Clover 内置了很多隐藏的自动应用的热补丁,再加上非常方便的各类 ACPI 开关,修复也比较方便。

但是 OpenCore 并没有内置这些东西,所以我们需要做一些本来应该是主板厂家工程师的工作,修复他们留在 ACPI 里的 Bug 导致的问题。

「注意」因为 SSDT 编辑有门槛,需要一定的编程基础知识和 ACPI 知识,本文只做思路分享,不做新手式教学。

 

需要的软件

 

查找设备并添加到 SSDT

使用 DPCIManager 提取你的 DSDT.aml 文件,然后使用 MaciASL 打开,搜索其中 _PRW 相关内容,因为这个方法(Method)是 Power Resources for Wake 的关系,可能有非常多的结果。查看其中有没有提到 XHC、XHCI 和 XHC1 之类的设备,例如 SB.PCI0.XHC 。

然后,打开 MaciASL,新建文件,添加以下代码:

DefinitionBlock ("", "SSDT", 2, "HeiPG", "ZPTS", 0x00000000)
{
    External (_SB_.PCI0.XHC_.PMEE, FieldUnitObj)
    External (ZPTS, MethodObj)    // 1 Arguments

    Method (_PTS, 1, NotSerialized)  // _PTS: Prepare To Sleep
    {
        ZPTS (Arg0)
        If ((0x05 == Arg0))
        {
            \_SB.PCI0.XHC.PMEE = Zero
        }
    }
}

解释:基本意思就是当 ZPTS 的 Arg0 被赋值为 0x05 时(S5 状态),让 SB.PCI0.XHC 这个设备变成 0(就是没有了)。其中 SB.PCI0.XHC 是设备位置,这个需要根据你自己的情况自行确定。完成后,用 MaciASL 导出编译后的 aml 文件,添加到 EFI 目录和 config 文件中,并启用。

更进一步,再添加一个系统判断以及操作范围,就更加稳妥了。

DefinitionBlock ("", "SSDT", 2, "hack", "SHUT", 0x00000000)
{
    External (_SB_.PCI0.XHC_.PMEE, FieldUnitObj)
    External (ZPTS, MethodObj)    // 1 Arguments

    Method (_PTS, 1, NotSerialized)  // _PTS: Prepare To Sleep
    {
        ZPTS (Arg0)
        If (_OSI ("Darwin"))
        {
            If ((0x05 == Arg0))
            {
                If (CondRefOf (\_SB.PCI0.XHC.PMEE))
                {
                    \_SB.PCI0.XHC.PMEE = Zero
                }

                OperationRegion (PMRS, SystemIO, 0x1830, One)
                Field (PMRS, ByteAcc, NoLock, Preserve)
                {
                        ,   4, 
                    SLPE,   1
                }

                SLPE = Zero
                Sleep (0x10)
            }
        }
        Else
        {
        }
    }
}

「注意」这个补丁还需要搭配 ACPI 重命名,将方法 _PTS 重命名为 ZPTS,否则无效(因为原本没有 ZPTS)。

重命名补丁可以通过 OCC 等编辑工具快捷添加到 OpenCore 的 config 中,记得把 Enabled 勾上。

代码如下:

Find: 5F505453 01
Replace: 5A505453 01
Comment: Change _PTS to ZPTS

 

尾声

不想自己弄的懒人,可以直接下载下面整理好的文件包,其中 .dsl 是源文件,.aml 是 OpenCore 可以直接使用的,已经写好了各类常见的 XHC 名称,但 ACPI 重命名补丁还是要自己加的。不保证一定可以解决你的问题,因为每台电脑的 DSDT 都是不一样的。

 

 

下载地址

    该资源永久超级会员免费 去升级
    • 解压密码heipg.cn
    0. 本站所有资源解压密码均为 heipg.cn
    1. 本站资源收集于网络,仅做学习和交流使用,请于下载后24小时内删除。如果你喜欢我们推荐的软件,请购买正版支持作者。
    2. 如有无法下载的链接,联系:admin#heipg.cn,或到QQ群进行反馈,我们将及时进行处理。
    3. 本站发布的内容若侵犯到您的权益,请联系站长删除,联系方式:admin#heipg.cn,我们将第一时间配合处理!
    扫描QQ二维码加入【黑苹果星球交流群】

    黑苹果星球 » 黑苹果SSDT修正关机/重启问题

    发表评论