Jump to content

Bug fix for AM5 new firmware motherboards (DSDT-FIX)


Lorys89

Recommended Posts

 Method (_ON, 0, NotSerialized)  // _ON_: Power On
            {
                M000 (0x30D0)
                M460 ("  OEM-ASL-\\_SB.PCI0.GPP1.P0NV._ON\n", Zero, Zero, Zero, Zero, Zero, Zero)
                Store (G017, Local0)
                Store (0x02, Local2)
                Store (\PWGS (Zero), Local5)
                M460 ("  OEM-ASL-\\_SB.PCI0.GPP1.P0NV._ON D3Cold = 0x%X WD3C First = 0x%X SI3V = 0x%X\n", Local0, WD3C, Local5, Zero, Zero, Zero)
                If (LEqual (Local0, One))
                {
                    PWEN ()
                }

                If (LOr (LEqual (WD3C, One), LEqual (Local5, Zero)))
                {
                    RPCF ()
                    Sleep (0x0A)
                    If (CondRefOf (\UPWD))
                    {
                        \UPWD ()
                    }

                    Store (Zero, WD3C)
                }

                Store (One, D0NV)
                M000 (0x30D1)
            }

Given that the variables G000 to G020 and three methods have been deleted in the cpvs section previously,Is it correct to modify this code as follows?

            Method (_ON, 0, NotSerialized)  // _ON_: Power On
            {
                M000 (0x30D0)
                M460 ("  OEM-ASL-\\_SB.PCI0.GPP1.P0NV._ON\n", Zero, Zero, Zero, Zero, Zero, Zero)
                Store (0x02, Local2)

                If (LEqual (WD3C, One))
                {
                    RPCF ()
                    Sleep (0x0A)
                    Store (Zero, WD3C)
                }

                Store (One, D0NV)
                M000 (0x30D1)
            }

 

Link to comment
Share on other sites

On 10/6/2025 at 3:32 PM, yandong31 said:

Attached is my original DSDT

Is this a MSI motherboard, by any chance? 

 

We know now that the actual ACPI is that some devices are created conditionally, and macOS does not like that; rather than manually editing the DSDT, the preferred solution is to use OpenCore to patch just the conditional declarations. Corpnews makes board-specific paches on request. I have tried to work out "universal" patches, but it seems that at least two versions will still be needed.

Here is what should should work for you:

 

am5_patches_msi.plist.zip

  • Like 1
Link to comment
Share on other sites

  • 2 weeks later...
On 10/8/2025 at 1:52 AM, etorix said:


这是 MSI 主板吗?

 


我们现在知道,实际的 ACPI 是某些设备是有条件创建的,而 macOS 并不喜欢这样;与其手动编辑 DSDT,不如使用 OpenCore 来修补条件声明。Corpnews 会根据需求制作特定主板的补丁。我尝试过开发“通用”补丁,但似乎至少还需要两个版本。


以下是应该对您有用的内容:

 


am5_patches_msi.plist.zip 1.02 kB · 1 download

The patch definitely modified the DSDT like it should, but my onboard network card still isn’t working. Do I really have to make patches for every single conditional statement that looks like "If (((G002 != 0x03) && ((G000 == One)"?

There are so many conditional statements, and the same device is referred to differently in different condition blocks. Even if I remove the conditional statements, which one should I pick?
 

If ((G002 != One))
If (((G000 == One) && ((G002 >= 0x04) && (
        G002 <= 0x07)))){}
If (((G000 == One) && (G002 == 0x07))){}
If (((G002 != 0x03) && (G000 != Zero))){}
If ((G002 != 0x03))
If ((G002 < 0x03))
If (((G002 != 0x03) && (G000 == One)))
If (((G002 != 0x03) && (G000 != Zero)))
If (((G002 != 0x03) && ((G000 == One) && (G004 == 
        0x43FA1022))))
If (((G002 != 0x03) && ((G000 == One) && (
        G004 != 0x43FA1022))))
If (((G002 != 0x03) && (G000 == 0x02)))
If (((G002 < 0x03) && (G000 == One)))
If (((G002 != 0x03) && ((G000 == One) && (
        G002 != 0x04))))
If (((G002 != 0x03) && ((G000 == One) && (
        (G002 != 0x04) && (G002 != 0x07)))))
If (((G002 != 0x03) && ((G000 == One) && (
        G002 != 0x05))))
If (((G002 != 0x03) && ((G000 == One) && (
        G002 != 0x06))))
If (((G000 == One) && (G002 == 0x04)))
If (((G000 == One) && (G002 == 0x05)))
If (((G000 == One) && (G002 == 0x06)))
If ((((G002 != 0x03) && (G000 == One)) && (
        (G002 != 0x04) && (G003 != Zero))))
If (((G000 == One) && ((G002 == 0x07) && (G003 != 
        Zero))))
If ((((G002 != 0x03) && (G000 == One)) && (
        (G002 != 0x04) && ((G002 != 0x07) && (G003 != Zero)))))
If ((((G002 != 0x03) && (G000 == One)) && (
        (G002 != 0x04) && (G003 == Zero))))
If ((G002 != 0x03))
If ((G002 != 0x02))
If ((G001 == One))

             
                  
                  

 

The DSDT on MSI motherboards is a total disaster!
 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • There are no registered users currently online
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.