Contribute
Register

Z490 & Z590 - Will Z590 ever have macOS Support ?

@InsomnIaHackintosh,

In the last IOReg you posted, AppleHPMIECS, AppleHPMDevice, and AppleHPMUserClient were present as shown:

Screen Shot 2021-10-21 at 4.33.33 PM.png


Are these devices still present (AppleHPMUserClient might be gone, which is okay)?

We may need to stop here for the evening.
 
1634889198067.jpeg

Successor to Z590 vision d. Z690 Aero D.

I wonder if it’s going to be a similar PITA as the z590, or if it will be a vintage performer like the z490 vision d? With working thunderbolt hotplug and no weird bios quirks.
 
View attachment 531601
Successor to Z590 vision d. Z690 Aero D.

I wonder if it’s going to be a similar PITA as the z590, or if it will be a vintage performer like the z490 vision d? With working thunderbolt hotplug and no weird bios quirks.
Thunderbolt implementation on Gigabyte 570S Aero G (AMD Ryzen) has been quite good. So there’s hope…
 
Thunderbolt implementation on Gigabyte 570S Aero G (AMD Ryzen) has been quite good. So there’s hope…
Cool! Is that onboard or discrete thunderbolt?
 
@InsomnIaHackintosh,

In the last IOReg you posted, AppleHPMIECS, AppleHPMDevice, and AppleHPMUserClient were present as shown:

View attachment 531587

Are these devices still present (AppleHPMUserClient might be gone, which is okay)?

We may need to stop here for the evening.
@CaseySJ

I think that devices appearing with tbpatch command, are only PD devices of Thunderbolt devices connected on 2 ports (Sabrent Enclosure with AppleHPM UUID 244CBD12-8E1F-EBAE-9A49-A14B00ECFFB5 & TS3 Plus with two others UUID). On macOS, for now, there is no way to extract on-board Maple ridge Thunderbolt Firmware with OSY's tool.

From ASUS's website, I have downloaded ProArt X570-CREATOR WIFI BIOS firmware and have extracted DSDT & some interesting Thunderbolt SSDT. I have many errors when I try to compile it (ACPI 6.3, 6.2 ?).
There is an interesting TBFF method (similar to our MMBA & CONF methods) that could confirm us that sub devices like UPSB, DSBx configurations previously done (Alpine Ridge enabling with SSDT only) is now included on ASUS's BIOS firmware :)

Let see this method :
Bash:
Method (TBFF, 0, NotSerialized)
        {
            Local0 = MMTB ()
            OperationRegion (PXVD, SystemMemory, Local0, 0x0600)
            Field (PXVD, ByteAcc, NoLock, Preserve)
            {
                VEDI,   32,
                UP04,   8,
                Offset (0x08),
                UP08,   32,
                UP0C,   8,
                Offset (0x18),
                UP18,   8,
                UP19,   8,
                UP1A,   8,
                Offset (0x1C),
                UP1C,   8,
                UP1D,   8,
                Offset (0x20),
                UP20,   16,
                UP22,   16,
                UP24,   16,
                UP26,   16,
                UP28,   32,
                UP2C,   32,
                Offset (0x50),
                UP50,   8,
                Offset (0x5F8),
                U5F8,   32
            }

            Local2 = 0x7FFFFFFF
            Local2 |= 0x80000000
            If ((UP08 == Local2))
            {
                Return (0x02)
            }

            Local1 = \_GPE.MMTA ()
            OperationRegion (GPFG, SystemMemory, Local1, 0x30)
            Field (GPFG, ByteAcc, NoLock, Preserve)
            {
                Offset (0x04),
                GP04,   8,
                Offset (0x0C),
                GP0C,   8,
                Offset (0x18),
                GP18,   8,
                GP19,   8,
                GP1A,   8,
                Offset (0x1C),
                GP1C,   8,
                GP1D,   8,
                Offset (0x20),
                GP20,   16,
                GP22,   16,
                GP24,   16,
                GP26,   16,
                GP28,   32,
                GP2C,   32
            }

            If ((UP18 == Zero))
            {
                UP18 = GP19 /* \_GPE.TBFF.GP19 */
                UP19 = (GP19 + One)
                UP1A = GP1A /* \_GPE.TBFF.GP1A */
            }

            If ((VEDI == Local2))
            {
                Local4 = OSUP (Local0, 0x0D, 0x1388)
                Local5 = 0xC8
                While (((Local4 == 0x03) && Local5))
                {
                    Local5--
                    Local4 = OSUP (Local0, 0x0D, 0x1388)
                    If ((Local4 != 0x03))
                    {
                        Break
                    }

                    Sleep (One)
                }
            }
            Else
            {
                Local4 = Zero
            }

            Local1 = MMTC ()
            OperationRegion (D0FG, SystemMemory, Local1, 0x0600)
            Field (D0FG, ByteAcc, NoLock, Preserve)
            {
                Offset (0x04),
                D004,   8,
                Offset (0x0C),
                D00C,   8,
                Offset (0x18),
                D018,   8,
                D019,   8,
                D01A,   8,
                Offset (0x1C),
                D01C,   8,
                D01D,   8,
                Offset (0x20),
                D020,   16,
                D022,   16,
                D024,   16,
                D026,   16,
                D028,   32,
                D02C,   32,
                Offset (0x50),
                D050,   8,
                Offset (0x5F8),
                D5F8,   32
            }

            Local2 = (Local1 + 0x8000)
            OperationRegion (D1FG, SystemMemory, Local2, 0x0600)
            Field (D1FG, ByteAcc, NoLock, Preserve)
            {
                Offset (0x04),
                D104,   8,
                Offset (0x0C),
                D10C,   8,
                Offset (0x18),
                D118,   8,
                D119,   8,
                D11A,   8,
                Offset (0x1C),
                D11C,   8,
                D11D,   8,
                Offset (0x20),
                D120,   16,
                D122,   16,
                D124,   16,
                D126,   16,
                D128,   32,
                D12C,   32,
                Offset (0x50),
                D150,   8,
                Offset (0x5F8),
                E5F8,   32
            }

            Local3 = (Local1 + 0x00010000)
            OperationRegion (D2FG, SystemMemory, Local3, 0x0600)
            Field (D2FG, ByteAcc, NoLock, Preserve)
            {
                Offset (0x04),
                D204,   8,
                Offset (0x0C),
                D20C,   8,
                Offset (0x18),
                D218,   8,
                D219,   8,
                D21A,   8,
                Offset (0x1C),
                D21C,   8,
                D21D,   8,
                Offset (0x20),
                D220,   16,
                D222,   16,
                D224,   16,
                D226,   16,
                D228,   32,
                D22C,   32,
                Offset (0x50),
                D250,   8,
                Offset (0x5F8),
                F5F8,   32
            }

            Local5 = (Local1 + 0x00020000)
            OperationRegion (D4FG, SystemMemory, Local5, 0x0600)
            Field (D4FG, ByteAcc, NoLock, Preserve)
            {
                Offset (0x04),
                D404,   8,
                Offset (0x0C),
                D40C,   8,
                Offset (0x18),
                D418,   8,
                D419,   8,
                D41A,   8,
                Offset (0x1C),
                D41C,   8,
                D41D,   8,
                Offset (0x20),
                D420,   16,
                D422,   16,
                D424,   16,
                D426,   16,
                D428,   32,
                D42C,   32,
                Offset (0x50),
                D450,   8,
                Offset (0x5F8),
                G5F8,   32
            }

            M331 = M049 /* External reference */
            0x29
            Local7
            If ((Local7 != One))
            {
                If ((UP50 == 0x15))
                {
                    U5F8 = 0xC0000000
                }

                If ((D050 == 0x15))
                {
                    D5F8 = 0xC0000000
                }

                If ((D150 == 0x15))
                {
                    E5F8 = 0xC0000000
                }

                If ((D250 == 0x15))
                {
                    F5F8 = 0xC0000000
                }

                If ((D450 == 0x15))
                {
                    G5F8 = 0xC0000000
                }
            }

            If (((Local4 == Zero) && (UP20 == Zero)))
            {
                If ((\_GPE.TNAT != Zero))
                {
                    UP0C = 0x20
                    UP1C = GP1C /* \_GPE.TBFF.GP1C */
                    UP1D = GP1D /* \_GPE.TBFF.GP1D */
                    UP20 = GP20 /* \_GPE.TBFF.GP20 */
                    UP22 = GP22 /* \_GPE.TBFF.GP22 */
                    UP24 = GP24 /* \_GPE.TBFF.GP24 */
                    UP26 = GP26 /* \_GPE.TBFF.GP26 */
                    UP28 = GP28 /* \_GPE.TBFF.GP28 */
                    UP2C = GP2C /* \_GPE.TBFF.GP2C */
                    UP04 = 0x07
                    D00C = 0x20
                    D018 = UP19 /* \_GPE.TBFF.UP19 */
                    D019 = (UP19 + One)
                    D01A = (UP19 + One)
                    D01C = 0xF1
                    D01D = One
                    D020 = UP22 /* \_GPE.TBFF.UP22 */
                    D022 = UP22 /* \_GPE.TBFF.UP22 */
                    D024 = 0xFFF1
                    D026 = One
                    D028 = Zero
                    D02C = Zero
                    D004 = 0x06
                    D20C = 0x20
                    Local6 = ((UP1A - UP19) >> One)
                    D218 = UP19 /* \_GPE.TBFF.UP19 */
                    D219 = (UP19 + (Local6 + One))
                    D21A = (UP19 + (Local6 + One))
                    D21C = 0xF1
                    D21D = One
                    D220 = (UP22 - 0x10)
                    D222 = (UP22 - 0x10)
                    D224 = 0xFFF1
                    D226 = One
                    D228 = Zero
                    D22C = Zero
                    D204 = 0x06
                    D10C = 0x20
                    Local6 = ((UP1A - UP19) >> One)
                    D118 = UP19 /* \_GPE.TBFF.UP19 */
                    D119 = (D019 + One)
                    D11A = (UP19 + Local6)
                    Local6 = (UP1D - UP1C) /* \_GPE.TBFF.UP1C */
                    Local6 = ((Local6 + 0x10) >> One)
                    D11C = (UP1C + Local6)
                    D11D = UP1D /* \_GPE.TBFF.UP1D */
                    Local6 = ((UP22 - 0x20) - UP20) /* \_GPE.TBFF.UP20 */
                    Local6 = ((Local6 + 0x10) >> One)
                    D120 = (UP20 + Local6)
                    D122 = (UP22 - 0x20)
                    Local6 = ((UP2C << 0x10) + (UP26 + 0x0F))
                    Local7 = ((UP28 << 0x10) + (UP24 - One))
                    Local6 = ((Local6 - Local7) >> One)
                    Local7 = ((Local6 + Local7) + One)
                    D124 = (Local7 & 0xFFFF)
                    D128 = (Local7 >> 0x10)
                    D126 = UP26 /* \_GPE.TBFF.UP26 */
                    D12C = UP2C /* \_GPE.TBFF.UP2C */
                    D104 = 0x07
                    D40C = 0x20
                    D418 = UP19 /* \_GPE.TBFF.UP19 */
                    D419 = (D21A + One)
                    D41A = UP1A /* \_GPE.TBFF.UP1A */
                    Local6 = (UP1D - UP1C) /* \_GPE.TBFF.UP1C */
                    Local6 = ((Local6 + 0x10) >> One)
                    D41C = UP1C /* \_GPE.TBFF.UP1C */
                    D41D = (UP1D - Local6)
                    D420 = UP20 /* \_GPE.TBFF.UP20 */
                    D422 = (D120 - 0x10)
                    D424 = UP24 /* \_GPE.TBFF.UP24 */
                    D428 = UP28 /* \_GPE.TBFF.UP28 */
                    Local7 = ((D128 << 0x10) + (D124 - 0x10))
                    D426 = (Local7 & 0xFFFF)
                    D42C = (Local7 >> 0x10)
                    D404 = 0x07
                    Local6 = ((D019 << 0x14) + (Local1 & 0xF00FFFFF))
                    OperationRegion (HSFG, SystemMemory, Local6, 0x30)
                    Field (HSFG, ByteAcc, NoLock, Preserve)
                    {
                        Offset (0x04),
                        HS04,   8,
                        Offset (0x0C),
                        HS0C,   8,
                        Offset (0x10),
                        HS10,   32,
                        HS14,   32
                    }

                    HS0C = 0x20
                    HS10 = ((D020 << 0x10) + 0x000C0000)
                    HS14 = ((D020 << 0x10) + 0x000BF000)
                    HS04 = 0x06
                    Local7 = ((D219 << 0x14) + (Local1 & 0xF00FFFFF))
                    OperationRegion (USFG, SystemMemory, Local7, 0x30)
                    Field (USFG, ByteAcc, NoLock, Preserve)
                    {
                        Offset (0x04),
                        US04,   8,
                        Offset (0x0C),
                        US0C,   8,
                        Offset (0x10),
                        US10,   32
                    }

                    US0C = 0x20
                    US10 = ((D220 << 0x10) + 0x000F0000)
                    US04 = 0x06
                    GP0C = 0x20
                    UP0C = 0x20
                    GP04 = 0x07
                    Local0 = GP04 /* \_GPE.TBFF.GP04 */
                    Local0 = GP0C /* \_GPE.TBFF.GP0C */
                    Local0 = GP18 /* \_GPE.TBFF.GP18 */
                    Local0 = GP19 /* \_GPE.TBFF.GP19 */
                    Local0 = GP1A /* \_GPE.TBFF.GP1A */
                    Local0 = GP1C /* \_GPE.TBFF.GP1C */
                    Local0 = GP1D /* \_GPE.TBFF.GP1D */
                    Local0 = GP20 /* \_GPE.TBFF.GP20 */
                    Local0 = GP22 /* \_GPE.TBFF.GP22 */
                    Local0 = GP24 /* \_GPE.TBFF.GP24 */
                    Local0 = GP26 /* \_GPE.TBFF.GP26 */
                    Local0 = GP28 /* \_GPE.TBFF.GP28 */
                    Local0 = GP2C /* \_GPE.TBFF.GP2C */
                    Local0 = UP04 /* \_GPE.TBFF.UP04 */
                    Local0 = UP0C /* \_GPE.TBFF.UP0C */
                    Local0 = UP18 /* \_GPE.TBFF.UP18 */
                    Local0 = UP19 /* \_GPE.TBFF.UP19 */
                    Local0 = UP1A /* \_GPE.TBFF.UP1A */
                    Local0 = UP1C /* \_GPE.TBFF.UP1C */
                    Local0 = UP1D /* \_GPE.TBFF.UP1D */
                    Local0 = UP20 /* \_GPE.TBFF.UP20 */
                    Local0 = UP22 /* \_GPE.TBFF.UP22 */
                    Local0 = UP24 /* \_GPE.TBFF.UP24 */
                    Local0 = UP26 /* \_GPE.TBFF.UP26 */
                    Local0 = UP28 /* \_GPE.TBFF.UP28 */
                    Local0 = UP2C /* \_GPE.TBFF.UP2C */
                    Local0 = UP50 /* \_GPE.TBFF.UP50 */
                    Local0 = D004 /* \_GPE.TBFF.D004 */
                    Local0 = D00C /* \_GPE.TBFF.D00C */
                    Local0 = D018 /* \_GPE.TBFF.D018 */
                    Local0 = D019 /* \_GPE.TBFF.D019 */
                    Local0 = D01A /* \_GPE.TBFF.D01A */
                    Local0 = D01C /* \_GPE.TBFF.D01C */
                    Local0 = D01D /* \_GPE.TBFF.D01D */
                    Local0 = D020 /* \_GPE.TBFF.D020 */
                    Local0 = D022 /* \_GPE.TBFF.D022 */
                    Local0 = D024 /* \_GPE.TBFF.D024 */
                    Local0 = D026 /* \_GPE.TBFF.D026 */
                    Local0 = D028 /* \_GPE.TBFF.D028 */
                    Local0 = D02C /* \_GPE.TBFF.D02C */
                    Local0 = D050 /* \_GPE.TBFF.D050 */
                    Local0 = D104 /* \_GPE.TBFF.D104 */
                    Local0 = D10C /* \_GPE.TBFF.D10C */
                    Local0 = D118 /* \_GPE.TBFF.D118 */
                    Local0 = D119 /* \_GPE.TBFF.D119 */
                    Local0 = D11A /* \_GPE.TBFF.D11A */
                    Local0 = D11C /* \_GPE.TBFF.D11C */
                    Local0 = D11D /* \_GPE.TBFF.D11D */
                    Local0 = D120 /* \_GPE.TBFF.D120 */
                    Local0 = D122 /* \_GPE.TBFF.D122 */
                    Local0 = D124 /* \_GPE.TBFF.D124 */
                    Local0 = D126 /* \_GPE.TBFF.D126 */
                    Local0 = D128 /* \_GPE.TBFF.D128 */
                    Local0 = D12C /* \_GPE.TBFF.D12C */
                    Local0 = D150 /* \_GPE.TBFF.D150 */
                    Local0 = D204 /* \_GPE.TBFF.D204 */
                    Local0 = D20C /* \_GPE.TBFF.D20C */
                    Local0 = D218 /* \_GPE.TBFF.D218 */
                    Local0 = D219 /* \_GPE.TBFF.D219 */
                    Local0 = D21A /* \_GPE.TBFF.D21A */
                    Local0 = D21C /* \_GPE.TBFF.D21C */
                    Local0 = D21D /* \_GPE.TBFF.D21D */
                    Local0 = D220 /* \_GPE.TBFF.D220 */
                    Local0 = D222 /* \_GPE.TBFF.D222 */
                    Local0 = D224 /* \_GPE.TBFF.D224 */
                    Local0 = D226 /* \_GPE.TBFF.D226 */
                    Local0 = D228 /* \_GPE.TBFF.D228 */
                    Local0 = D22C /* \_GPE.TBFF.D22C */
                    Local0 = D250 /* \_GPE.TBFF.D250 */
                    Local0 = D404 /* \_GPE.TBFF.D404 */
                    Local0 = D40C /* \_GPE.TBFF.D40C */
                    Local0 = D418 /* \_GPE.TBFF.D418 */
                    Local0 = D419 /* \_GPE.TBFF.D419 */
                    Local0 = D41A /* \_GPE.TBFF.D41A */
                    Local0 = D41C /* \_GPE.TBFF.D41C */
                    Local0 = D41D /* \_GPE.TBFF.D41D */
                    Local0 = D420 /* \_GPE.TBFF.D420 */
                    Local0 = D422 /* \_GPE.TBFF.D422 */
                    Local0 = D424 /* \_GPE.TBFF.D424 */
                    Local0 = D426 /* \_GPE.TBFF.D426 */
                    Local0 = D428 /* \_GPE.TBFF.D428 */
                    Local0 = D42C /* \_GPE.TBFF.D42C */
                    Local0 = D450 /* \_GPE.TBFF.D450 */
                    Local0 = HS04 /* \_GPE.TBFF.HS04 */
                    Local0 = HS0C /* \_GPE.TBFF.HS0C */
                    Local0 = HS10 /* \_GPE.TBFF.HS10 */
                    Local0 = HS14 /* \_GPE.TBFF.HS14 */
                    Local0 = US04 /* \_GPE.TBFF.US04 */
                    Local0 = US0C /* \_GPE.TBFF.US0C */
                    Local0 = US10 /* \_GPE.TBFF.US10 */
                }
            }

            Return (Local4)
        }

Where :
  • PXVD OperationRegion is UPSB
  • GPFG OperationRegion is RP05
  • D0FG OperationRegion is DSB0
  • D1FG OperationRegion is DSB1
  • D2FG OperationRegion is DSB2
  • D4FG OperationRegion is DSB4
  • HSFG OperationRegion is NHI0
  • USFG OperationRegion is XHC3

@InsomnIaHackintosh
Could you export ACPI files with MaciASL tool ?
File > Export Tableset

You could enable HotPlug with _L11 GPE event.
 

Attachments

  • Dsdt.aml
    58.8 KB · Views: 39
  • SSDT-CPMTBASL.aml
    5.7 KB · Views: 38
Last edited:
Cool! Is that onboard or discrete thunderbolt?
That’s add-in-card connected via header. But still a good sign I think because B550 Vision D has good on-board TB implementation.
 
Last edited:
@CaseySJ

I think that devices appearing with tbpatch command, are only PD devices of Thunderbolt devices connected on 2 ports (Sabrent Enclosure with AppleHPM UUID 244CBD12-8E1F-EBAE-9A49-A14B00ECFFB5 & TS3 Plus with two others UUID). On macOS, for now, there is no way to extract on-board Maple ridge Thunderbolt Firmware with OSY's tool.

From ASUS's website, I have downloaded ProArt X570-CREATOR WIFI BIOS firmware and have extracted DSDT & some interesting Thunderbolt SSDT. I have many errors when I try to compile it (ACPI 6.3, 6.2 ?).
There is an interesting TBFF method (similar to our MMBA & CONF methods) that could confirm us that sub devices like UPSB, DSBx configurations previously done (Alpine Ridge enabling with SSDT only) is now included on ASUS's BIOS firmware :)

Let see this method :
Bash:
Method (TBFF, 0, NotSerialized)
        {
            Local0 = MMTB ()
            OperationRegion (PXVD, SystemMemory, Local0, 0x0600)
            Field (PXVD, ByteAcc, NoLock, Preserve)
            {
                VEDI,   32,
                UP04,   8,
                Offset (0x08),
                UP08,   32,
                UP0C,   8,
                Offset (0x18),
                UP18,   8,
                UP19,   8,
                UP1A,   8,
                Offset (0x1C),
                UP1C,   8,
                UP1D,   8,
                Offset (0x20),
                UP20,   16,
                UP22,   16,
                UP24,   16,
                UP26,   16,
                UP28,   32,
                UP2C,   32,
                Offset (0x50),
                UP50,   8,
                Offset (0x5F8),
                U5F8,   32
            }

            Local2 = 0x7FFFFFFF
            Local2 |= 0x80000000
            If ((UP08 == Local2))
            {
                Return (0x02)
            }

            Local1 = \_GPE.MMTA ()
            OperationRegion (GPFG, SystemMemory, Local1, 0x30)
            Field (GPFG, ByteAcc, NoLock, Preserve)
            {
                Offset (0x04),
                GP04,   8,
                Offset (0x0C),
                GP0C,   8,
                Offset (0x18),
                GP18,   8,
                GP19,   8,
                GP1A,   8,
                Offset (0x1C),
                GP1C,   8,
                GP1D,   8,
                Offset (0x20),
                GP20,   16,
                GP22,   16,
                GP24,   16,
                GP26,   16,
                GP28,   32,
                GP2C,   32
            }

            If ((UP18 == Zero))
            {
                UP18 = GP19 /* \_GPE.TBFF.GP19 */
                UP19 = (GP19 + One)
                UP1A = GP1A /* \_GPE.TBFF.GP1A */
            }

            If ((VEDI == Local2))
            {
                Local4 = OSUP (Local0, 0x0D, 0x1388)
                Local5 = 0xC8
                While (((Local4 == 0x03) && Local5))
                {
                    Local5--
                    Local4 = OSUP (Local0, 0x0D, 0x1388)
                    If ((Local4 != 0x03))
                    {
                        Break
                    }

                    Sleep (One)
                }
            }
            Else
            {
                Local4 = Zero
            }

            Local1 = MMTC ()
            OperationRegion (D0FG, SystemMemory, Local1, 0x0600)
            Field (D0FG, ByteAcc, NoLock, Preserve)
            {
                Offset (0x04),
                D004,   8,
                Offset (0x0C),
                D00C,   8,
                Offset (0x18),
                D018,   8,
                D019,   8,
                D01A,   8,
                Offset (0x1C),
                D01C,   8,
                D01D,   8,
                Offset (0x20),
                D020,   16,
                D022,   16,
                D024,   16,
                D026,   16,
                D028,   32,
                D02C,   32,
                Offset (0x50),
                D050,   8,
                Offset (0x5F8),
                D5F8,   32
            }

            Local2 = (Local1 + 0x8000)
            OperationRegion (D1FG, SystemMemory, Local2, 0x0600)
            Field (D1FG, ByteAcc, NoLock, Preserve)
            {
                Offset (0x04),
                D104,   8,
                Offset (0x0C),
                D10C,   8,
                Offset (0x18),
                D118,   8,
                D119,   8,
                D11A,   8,
                Offset (0x1C),
                D11C,   8,
                D11D,   8,
                Offset (0x20),
                D120,   16,
                D122,   16,
                D124,   16,
                D126,   16,
                D128,   32,
                D12C,   32,
                Offset (0x50),
                D150,   8,
                Offset (0x5F8),
                E5F8,   32
            }

            Local3 = (Local1 + 0x00010000)
            OperationRegion (D2FG, SystemMemory, Local3, 0x0600)
            Field (D2FG, ByteAcc, NoLock, Preserve)
            {
                Offset (0x04),
                D204,   8,
                Offset (0x0C),
                D20C,   8,
                Offset (0x18),
                D218,   8,
                D219,   8,
                D21A,   8,
                Offset (0x1C),
                D21C,   8,
                D21D,   8,
                Offset (0x20),
                D220,   16,
                D222,   16,
                D224,   16,
                D226,   16,
                D228,   32,
                D22C,   32,
                Offset (0x50),
                D250,   8,
                Offset (0x5F8),
                F5F8,   32
            }

            Local5 = (Local1 + 0x00020000)
            OperationRegion (D4FG, SystemMemory, Local5, 0x0600)
            Field (D4FG, ByteAcc, NoLock, Preserve)
            {
                Offset (0x04),
                D404,   8,
                Offset (0x0C),
                D40C,   8,
                Offset (0x18),
                D418,   8,
                D419,   8,
                D41A,   8,
                Offset (0x1C),
                D41C,   8,
                D41D,   8,
                Offset (0x20),
                D420,   16,
                D422,   16,
                D424,   16,
                D426,   16,
                D428,   32,
                D42C,   32,
                Offset (0x50),
                D450,   8,
                Offset (0x5F8),
                G5F8,   32
            }

            M331 = M049 /* External reference */
            0x29
            Local7
            If ((Local7 != One))
            {
                If ((UP50 == 0x15))
                {
                    U5F8 = 0xC0000000
                }

                If ((D050 == 0x15))
                {
                    D5F8 = 0xC0000000
                }

                If ((D150 == 0x15))
                {
                    E5F8 = 0xC0000000
                }

                If ((D250 == 0x15))
                {
                    F5F8 = 0xC0000000
                }

                If ((D450 == 0x15))
                {
                    G5F8 = 0xC0000000
                }
            }

            If (((Local4 == Zero) && (UP20 == Zero)))
            {
                If ((\_GPE.TNAT != Zero))
                {
                    UP0C = 0x20
                    UP1C = GP1C /* \_GPE.TBFF.GP1C */
                    UP1D = GP1D /* \_GPE.TBFF.GP1D */
                    UP20 = GP20 /* \_GPE.TBFF.GP20 */
                    UP22 = GP22 /* \_GPE.TBFF.GP22 */
                    UP24 = GP24 /* \_GPE.TBFF.GP24 */
                    UP26 = GP26 /* \_GPE.TBFF.GP26 */
                    UP28 = GP28 /* \_GPE.TBFF.GP28 */
                    UP2C = GP2C /* \_GPE.TBFF.GP2C */
                    UP04 = 0x07
                    D00C = 0x20
                    D018 = UP19 /* \_GPE.TBFF.UP19 */
                    D019 = (UP19 + One)
                    D01A = (UP19 + One)
                    D01C = 0xF1
                    D01D = One
                    D020 = UP22 /* \_GPE.TBFF.UP22 */
                    D022 = UP22 /* \_GPE.TBFF.UP22 */
                    D024 = 0xFFF1
                    D026 = One
                    D028 = Zero
                    D02C = Zero
                    D004 = 0x06
                    D20C = 0x20
                    Local6 = ((UP1A - UP19) >> One)
                    D218 = UP19 /* \_GPE.TBFF.UP19 */
                    D219 = (UP19 + (Local6 + One))
                    D21A = (UP19 + (Local6 + One))
                    D21C = 0xF1
                    D21D = One
                    D220 = (UP22 - 0x10)
                    D222 = (UP22 - 0x10)
                    D224 = 0xFFF1
                    D226 = One
                    D228 = Zero
                    D22C = Zero
                    D204 = 0x06
                    D10C = 0x20
                    Local6 = ((UP1A - UP19) >> One)
                    D118 = UP19 /* \_GPE.TBFF.UP19 */
                    D119 = (D019 + One)
                    D11A = (UP19 + Local6)
                    Local6 = (UP1D - UP1C) /* \_GPE.TBFF.UP1C */
                    Local6 = ((Local6 + 0x10) >> One)
                    D11C = (UP1C + Local6)
                    D11D = UP1D /* \_GPE.TBFF.UP1D */
                    Local6 = ((UP22 - 0x20) - UP20) /* \_GPE.TBFF.UP20 */
                    Local6 = ((Local6 + 0x10) >> One)
                    D120 = (UP20 + Local6)
                    D122 = (UP22 - 0x20)
                    Local6 = ((UP2C << 0x10) + (UP26 + 0x0F))
                    Local7 = ((UP28 << 0x10) + (UP24 - One))
                    Local6 = ((Local6 - Local7) >> One)
                    Local7 = ((Local6 + Local7) + One)
                    D124 = (Local7 & 0xFFFF)
                    D128 = (Local7 >> 0x10)
                    D126 = UP26 /* \_GPE.TBFF.UP26 */
                    D12C = UP2C /* \_GPE.TBFF.UP2C */
                    D104 = 0x07
                    D40C = 0x20
                    D418 = UP19 /* \_GPE.TBFF.UP19 */
                    D419 = (D21A + One)
                    D41A = UP1A /* \_GPE.TBFF.UP1A */
                    Local6 = (UP1D - UP1C) /* \_GPE.TBFF.UP1C */
                    Local6 = ((Local6 + 0x10) >> One)
                    D41C = UP1C /* \_GPE.TBFF.UP1C */
                    D41D = (UP1D - Local6)
                    D420 = UP20 /* \_GPE.TBFF.UP20 */
                    D422 = (D120 - 0x10)
                    D424 = UP24 /* \_GPE.TBFF.UP24 */
                    D428 = UP28 /* \_GPE.TBFF.UP28 */
                    Local7 = ((D128 << 0x10) + (D124 - 0x10))
                    D426 = (Local7 & 0xFFFF)
                    D42C = (Local7 >> 0x10)
                    D404 = 0x07
                    Local6 = ((D019 << 0x14) + (Local1 & 0xF00FFFFF))
                    OperationRegion (HSFG, SystemMemory, Local6, 0x30)
                    Field (HSFG, ByteAcc, NoLock, Preserve)
                    {
                        Offset (0x04),
                        HS04,   8,
                        Offset (0x0C),
                        HS0C,   8,
                        Offset (0x10),
                        HS10,   32,
                        HS14,   32
                    }

                    HS0C = 0x20
                    HS10 = ((D020 << 0x10) + 0x000C0000)
                    HS14 = ((D020 << 0x10) + 0x000BF000)
                    HS04 = 0x06
                    Local7 = ((D219 << 0x14) + (Local1 & 0xF00FFFFF))
                    OperationRegion (USFG, SystemMemory, Local7, 0x30)
                    Field (USFG, ByteAcc, NoLock, Preserve)
                    {
                        Offset (0x04),
                        US04,   8,
                        Offset (0x0C),
                        US0C,   8,
                        Offset (0x10),
                        US10,   32
                    }

                    US0C = 0x20
                    US10 = ((D220 << 0x10) + 0x000F0000)
                    US04 = 0x06
                    GP0C = 0x20
                    UP0C = 0x20
                    GP04 = 0x07
                    Local0 = GP04 /* \_GPE.TBFF.GP04 */
                    Local0 = GP0C /* \_GPE.TBFF.GP0C */
                    Local0 = GP18 /* \_GPE.TBFF.GP18 */
                    Local0 = GP19 /* \_GPE.TBFF.GP19 */
                    Local0 = GP1A /* \_GPE.TBFF.GP1A */
                    Local0 = GP1C /* \_GPE.TBFF.GP1C */
                    Local0 = GP1D /* \_GPE.TBFF.GP1D */
                    Local0 = GP20 /* \_GPE.TBFF.GP20 */
                    Local0 = GP22 /* \_GPE.TBFF.GP22 */
                    Local0 = GP24 /* \_GPE.TBFF.GP24 */
                    Local0 = GP26 /* \_GPE.TBFF.GP26 */
                    Local0 = GP28 /* \_GPE.TBFF.GP28 */
                    Local0 = GP2C /* \_GPE.TBFF.GP2C */
                    Local0 = UP04 /* \_GPE.TBFF.UP04 */
                    Local0 = UP0C /* \_GPE.TBFF.UP0C */
                    Local0 = UP18 /* \_GPE.TBFF.UP18 */
                    Local0 = UP19 /* \_GPE.TBFF.UP19 */
                    Local0 = UP1A /* \_GPE.TBFF.UP1A */
                    Local0 = UP1C /* \_GPE.TBFF.UP1C */
                    Local0 = UP1D /* \_GPE.TBFF.UP1D */
                    Local0 = UP20 /* \_GPE.TBFF.UP20 */
                    Local0 = UP22 /* \_GPE.TBFF.UP22 */
                    Local0 = UP24 /* \_GPE.TBFF.UP24 */
                    Local0 = UP26 /* \_GPE.TBFF.UP26 */
                    Local0 = UP28 /* \_GPE.TBFF.UP28 */
                    Local0 = UP2C /* \_GPE.TBFF.UP2C */
                    Local0 = UP50 /* \_GPE.TBFF.UP50 */
                    Local0 = D004 /* \_GPE.TBFF.D004 */
                    Local0 = D00C /* \_GPE.TBFF.D00C */
                    Local0 = D018 /* \_GPE.TBFF.D018 */
                    Local0 = D019 /* \_GPE.TBFF.D019 */
                    Local0 = D01A /* \_GPE.TBFF.D01A */
                    Local0 = D01C /* \_GPE.TBFF.D01C */
                    Local0 = D01D /* \_GPE.TBFF.D01D */
                    Local0 = D020 /* \_GPE.TBFF.D020 */
                    Local0 = D022 /* \_GPE.TBFF.D022 */
                    Local0 = D024 /* \_GPE.TBFF.D024 */
                    Local0 = D026 /* \_GPE.TBFF.D026 */
                    Local0 = D028 /* \_GPE.TBFF.D028 */
                    Local0 = D02C /* \_GPE.TBFF.D02C */
                    Local0 = D050 /* \_GPE.TBFF.D050 */
                    Local0 = D104 /* \_GPE.TBFF.D104 */
                    Local0 = D10C /* \_GPE.TBFF.D10C */
                    Local0 = D118 /* \_GPE.TBFF.D118 */
                    Local0 = D119 /* \_GPE.TBFF.D119 */
                    Local0 = D11A /* \_GPE.TBFF.D11A */
                    Local0 = D11C /* \_GPE.TBFF.D11C */
                    Local0 = D11D /* \_GPE.TBFF.D11D */
                    Local0 = D120 /* \_GPE.TBFF.D120 */
                    Local0 = D122 /* \_GPE.TBFF.D122 */
                    Local0 = D124 /* \_GPE.TBFF.D124 */
                    Local0 = D126 /* \_GPE.TBFF.D126 */
                    Local0 = D128 /* \_GPE.TBFF.D128 */
                    Local0 = D12C /* \_GPE.TBFF.D12C */
                    Local0 = D150 /* \_GPE.TBFF.D150 */
                    Local0 = D204 /* \_GPE.TBFF.D204 */
                    Local0 = D20C /* \_GPE.TBFF.D20C */
                    Local0 = D218 /* \_GPE.TBFF.D218 */
                    Local0 = D219 /* \_GPE.TBFF.D219 */
                    Local0 = D21A /* \_GPE.TBFF.D21A */
                    Local0 = D21C /* \_GPE.TBFF.D21C */
                    Local0 = D21D /* \_GPE.TBFF.D21D */
                    Local0 = D220 /* \_GPE.TBFF.D220 */
                    Local0 = D222 /* \_GPE.TBFF.D222 */
                    Local0 = D224 /* \_GPE.TBFF.D224 */
                    Local0 = D226 /* \_GPE.TBFF.D226 */
                    Local0 = D228 /* \_GPE.TBFF.D228 */
                    Local0 = D22C /* \_GPE.TBFF.D22C */
                    Local0 = D250 /* \_GPE.TBFF.D250 */
                    Local0 = D404 /* \_GPE.TBFF.D404 */
                    Local0 = D40C /* \_GPE.TBFF.D40C */
                    Local0 = D418 /* \_GPE.TBFF.D418 */
                    Local0 = D419 /* \_GPE.TBFF.D419 */
                    Local0 = D41A /* \_GPE.TBFF.D41A */
                    Local0 = D41C /* \_GPE.TBFF.D41C */
                    Local0 = D41D /* \_GPE.TBFF.D41D */
                    Local0 = D420 /* \_GPE.TBFF.D420 */
                    Local0 = D422 /* \_GPE.TBFF.D422 */
                    Local0 = D424 /* \_GPE.TBFF.D424 */
                    Local0 = D426 /* \_GPE.TBFF.D426 */
                    Local0 = D428 /* \_GPE.TBFF.D428 */
                    Local0 = D42C /* \_GPE.TBFF.D42C */
                    Local0 = D450 /* \_GPE.TBFF.D450 */
                    Local0 = HS04 /* \_GPE.TBFF.HS04 */
                    Local0 = HS0C /* \_GPE.TBFF.HS0C */
                    Local0 = HS10 /* \_GPE.TBFF.HS10 */
                    Local0 = HS14 /* \_GPE.TBFF.HS14 */
                    Local0 = US04 /* \_GPE.TBFF.US04 */
                    Local0 = US0C /* \_GPE.TBFF.US0C */
                    Local0 = US10 /* \_GPE.TBFF.US10 */
                }
            }

            Return (Local4)
        }

Where :
  • PXVD OperationRegion is UPSB
  • GPFG OperationRegion is RP05
  • D0FG OperationRegion is DSB0
  • D1FG OperationRegion is DSB1
  • D2FG OperationRegion is DSB2
  • D4FG OperationRegion is DSB4
  • HSFG OperationRegion is NHI0
  • USFG OperationRegion is XHC3

@InsomnIaHackintosh
Could you export ACPI files with MaciASL tool ?
File > Export Tableset

You could enable HotPlug with _L11 GPE event.
Thanks a lot @Elias64Fr! Please find attached the table sheet.

Do I give the dsdt.aml & SSDT a go?
 

Attachments

  • ProArt x570-Creator WiFi_TableSheet.acpi
    206.7 KB · Views: 45
From ASUS's website, I have downloaded ProArt X570-CREATOR WIFI BIOS firmware and have extracted DSDT & some interesting Thunderbolt SSDT. I have many errors when I try to compile it (ACPI 6.3, 6.2 ?).

May I ask which tool you use to extract ACPI tables directly from firmware files?
 

Attachments

  • IO REG 22.10.2021.ioreg
    12.6 MB · Views: 37
@CaseySJ Sorry not sure what changed there. Attached is the latest IOreg.
It turns out that the HPM devices which tbpatch was finding are those on the connected Thunderbolt peripherals in your system (left).

If those HPM devices were attached directly to the Thunderbolt Switch as shown on the right, then we would be able to extract firmware with tbpatch.

Screen Shot 2021-10-22 at 6.07.09 AM.png


Because your Thunderbolt devices connect and work when plugged in before boot, the only issue now is hot plug support. @Elias64Fr is looking into this via SSDT. This means it's not necessary at this time to extract or modify the firmware.
 
Back
Top