Contribute
Register

MacPro 2019

Status
Not open for further replies.
Have you tried SSDT-AMD6950-V2.aml?
I tried it but I had constant panics as I posted before, so I ended up deleting the entire EFI folder and starting from scratch. Something messed up in the EFI folder after using CNTRL+Z (to undo an action there).
 
Last edited:
The patch is still there as you can see from the config file.
This is good; it shows that the previous SSDT is on the right track and we can dismiss SSDT-AMD6950-V2.aml.

Please boot with this one again: SSDT-AMD6950-V1-4.aml.

If system boots up, does device-id get set to BF 73 (reverse by order) in IOReg?

After selecting
SSDT-AMD6950-V1-4.aml and rebooting, please run IORegistryExplorer and check this:
Screen Shot 2022-05-31 at 10.39.00 AM.png
 
This is good; it shows that the previous SSDT is on the right track and we can dismiss SSDT-AMD6950-V2.aml.

Please boot with this one again: SSDT-AMD6950-V1-4.aml.

If system boots up, does device-id get set to BF 73 (reverse by order) in IOReg?

After selecting
SSDT-AMD6950-V1-4.aml and rebooting, please run IORegistryExplorer and check this:
View attachment 548678
SSDT-AMD6950-V1-4.aml gave me panic with this EFI folder. I may try again:
Code:
 Scope (\_SB.PC03.BR3A)
    {
        Scope (US00)
        {
            Name (_STA, Zero)  // _STA: Status
        }

        Device (EGP2)
        {
            Name (_ADR, Zero)  // _ADR: Address
            Device (GFX1)
            {
                Name (_ADR, Zero)  // _ADR: Address
                Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                {
                    If (!Arg2)
                    {
                        Return (Buffer (One)
                        {
                             0x03                                             // .
                        })
                    }

                    Return (Package (0x02)
                    {
                        "device-id",
                        Buffer (0x04)
                        {
                             0xBF, 0x73, 0x00, 0x00                           // .s..
                        }
                    })
                }

                DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                Return (Local0)
            }

                   }
    }
}
Because I tested it with the previous EFI where the folder was not in good shape.
I also tried injecting device-id=BF730000 through device properties in
Code:
PciRoot(0x3)/Pci(0x0,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)
with the current SSDT, but it also panicked.

If I want to inject "compatible" rather than device-id how should the SSDT look?
 
SSDT-AMD6950-V1-4.aml gave me panic with this EFI folder. I may try again:
Code:
 Scope (\_SB.PC03.BR3A)
    {
        Scope (US00)
        {
            Name (_STA, Zero)  // _STA: Status
        }

        Device (EGP2)
        {
            Name (_ADR, Zero)  // _ADR: Address
            Device (GFX1)
            {
                Name (_ADR, Zero)  // _ADR: Address
                Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                {
                    If (!Arg2)
                    {
                        Return (Buffer (One)
                        {
                             0x03                                             // .
                        })
                    }

                    Return (Package (0x02)
                    {
                        "device-id",
                        Buffer (0x04)
                        {
                             0xBF, 0x73, 0x00, 0x00                           // .s..
                        }
                    })
                }

                DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                Return (Local0)
            }

                   }
    }
}
That is not SSDT-AMD6950-V1-4.aml. Below is what V1-4 looks like. Notice we have EGP2.EGP1.GFX1 below, but EGP1 is missing from the SSDT you quoted above.
Code:
DefinitionBlock ("", "SSDT", 2, "Apple", "AMD6950", 0x00000000)
{
    External (_SB_.PC03, DeviceObj)
    External (_SB_.PC03.BR3A, DeviceObj)
    External (_SB_.PC03.BR3A.US00, DeviceObj)

    Scope (\_SB.PC03.BR3A)
    {
        Scope (US00)
        {
            Name (_STA, Zero)  // _STA: Status
        }

        Device (EGP2)
        {
            Name (_ADR, Zero)  // _ADR: Address
            Device (EGP1)
            {
                Name (_ADR, Zero)  // _ADR: Address
                Device (GFX1)
                {
                    Name (_ADR, Zero)  // _ADR: Address
                    Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                    {
                        If (!Arg2)
                        {
                            Return (Buffer (One)
                            {
                                 0x03                                             // .
                            })
                        }

                        Return (Package (0x02)
                        {
                            "device-id", 
                            Buffer (0x04)
                            {
                                 0xBF, 0x73, 0x00, 0x00                           // .s..
                            }
                        })
                    }
                }
            }
        }
    }
}
 
That is not SSDT-AMD6950-V1-4.aml.
I may have not been clear. The snippet I posted was from SSDT-AMD6950-V2.aml (without the audio injection), but I thought of testing it again. SSDT-AMD6950-V1-4.aml gave me panic.
This is what gave me panic:
Code:
DefinitionBlock ("", "SSDT", 2, "Apple", "AMD6950", 0x00000000)
{
    External (_SB_.PC03, DeviceObj)
    External (_SB_.PC03.BR3A, DeviceObj)
    External (_SB_.PC03.BR3A.US00, DeviceObj)

    Scope (\_SB.PC03.BR3A)
    {
        Scope (US00)
        {
            Name (_STA, Zero)  // _STA: Status
        }

        Device (EGP2)
        {
            Name (_ADR, Zero)  // _ADR: Address
            Device (EGP1)
            {
                Name (_ADR, Zero)  // _ADR: Address
                Device (GFX1)
                {
                    Name (_ADR, Zero)  // _ADR: Address
                    Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                    {
                        If (!Arg2)
                        {
                            Return (Buffer (One)
                            {
                                 0x03                                             // .
                            })
                        }

                        Return (Package (0x02)
                        {
                            "device-id", 
                            Buffer (0x04)
                            {
                                 0xBF, 0x73, 0x00, 0x00                           // .s..
                            }
                        })
                    }
                }
            }
        }
    }
}
 
SSDT-AMD6950-V2.aml:



Code:
DefinitionBlock ("", "SSDT", 2, "Apple", "AMD6950", 0x00000000)
{
    External (_SB_.PC03, DeviceObj)
    External (_SB_.PC03.BR3A, DeviceObj)
    External (_SB_.PC03.BR3A.US00, DeviceObj)
    External (DTGP, MethodObj)    // 5 Arguments
Scope (\_SB.PC03.BR3A)
    {
        Scope (US00)
        {
            Name (_STA, Zero)  // _STA: Status
        }

        Device (EGP2)
        {
            Name (_ADR, Zero)  // _ADR: Address
            Device (GFX1)
            {
                Name (_ADR, Zero)  // _ADR: Address
                Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                {
                    If (!Arg2)
                    {
                        Return (Buffer (One)
                        {
                             0x03                                             // .
                        })
                    }

                    Return (Package (0x02)
                    {
                        "device-id",
                        Buffer (0x04)
                        {
                             0xBF, 0x73, 0x00, 0x00                           // .s..
                        }
                    })
                }

                DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                Return (Local0)
            }

        }
    }
}
Attached is the Ioregistry. No panic.


SSDT-AMD6950-V1-4.aml panics:
Code:
DefinitionBlock ("", "SSDT", 2, "Apple", "AMD6950", 0x00000000)

{
    External (_SB_.PC03, DeviceObj)
    External (_SB_.PC03.BR3A, DeviceObj)
    External (_SB_.PC03.BR3A.US00, DeviceObj)
    External (DTGP, MethodObj)    // 5 Arguments

    Scope (\_SB.PC03.BR3A)
    {
        Scope (US00)
        {
            Name (_STA, Zero)  // _STA: Status
        }

        Device (EGP2)
        {
            Name (_ADR, Zero)  // _ADR: Address
            Device (EGP1)
            {
                Name (_ADR, Zero)  // _ADR: Address
                Device (GFX1)
                {
                    Name (_ADR, Zero)  // _ADR: Address
                    Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                    {
                        If (!Arg2)
                        {
                            Return (Buffer (One)
                            {
                                 0x03                                             // .
                            })
                        }

                        Return (Package (0x02)
                        {
                            "device-id",
                            Buffer (0x04)
                            {
                                 0xBF, 0x73, 0x00, 0x00                           // .s..
                            }
                        })
                    }
                 
                DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                Return (Local0)
                }
            }
        }
    }
}


This one panics too:
Code:
DefinitionBlock ("", "SSDT", 2, "Apple", "AMD6950", 0x00000000)
{
    External (_SB_.PC03, DeviceObj)
    External (_SB_.PC03.BR3A, DeviceObj)
    External (_SB_.PC03.BR3A.US00, DeviceObj)
   
    Scope (\_SB.PC03.BR3A)
    {
        Scope (US00)
        {
            Name (_STA, Zero)  // _STA: Status
        }

        Device (EGP2)
        {
            Name (_ADR, Zero)  // _ADR: Address
            Device (EGP1)
            {
                Name (_ADR, Zero)  // _ADR: Address
                Device (GFX1)
                {
                    Name (_ADR, Zero)  // _ADR: Address
                    Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                    {
                        If (!Arg2)
                        {
                            Return (Buffer (One)
                            {
                                 0x03                                             // .
                            })
                        }

                        Return (Package (0x02)
                        {
                            "device-id",
                            Buffer (0x04)
                            {
                                 0xBF, 0x73, 0x00, 0x00                           // .s..
                            }
                        })
                    }
                 }
            }
        }
    }
}
 

Attachments

  • SSDT-AMD6950-V2.zip
    1.9 MB · Views: 45
Last edited:
@CaseySJ As you can see the device-id is attached and does not panic with SSDT-AMD6950-V2.aml, but of course it is not attached properly:

1654095783354.png



1654088526359.png
 

Attachments

  • 1654087979625.png
    1654087979625.png
    614.4 KB · Views: 43
  • bootlog 4.txt
    242.4 KB · Views: 28
Last edited:
If system boots up, does device-id get set to BF 73 (reverse by order) in IOReg?
Here is a screenshot of 6900XT's IOreg in another machine:
1654095240754.png



device-id attaches the same way as above in SDT-AMD6950-V2.aml
 
Last edited:
Here is a screenshot of 6900XT's IOreg in another machine:

device-id attaches the same way as above in SDT-AMD6950-V2.aml
After re-reviewing IOReg files from today and earlier I can conclude that SSDT-AMD6950-V2.aml is incorrect. We can disregard that version.

Instead, please try the attached SSDT-AMD6950-V1-5.aml. If the system continues to panic, it might mean that we cannot spoof a 6950 to 6900.

Two other factors to consider:
  • Consider disabling SecureBootModel (from OpenCore Configurator --> Misc --> Security)
  • Consider disabling SIP (System Integrity Protection). On a real Mac we should do this:
    • Boot into Recovery
    • Open Terminal window
    • Type csrutil disable
    • To re-enable it, we type csrutil enable
 

Attachments

  • SSDT-AMD6950-V1-5.aml
    187 bytes · Views: 37
Tried this SSDT:
Code:
/*
 * Intel ACPI Component Architecture
 * AML/ASL+ Disassembler version 20200925 (64-bit version)
 * Copyright (c) 2000 - 2020 Intel Corporation
 *
 * Disassembling to symbolic ASL+ operators
 *
 * Disassembly of iASLF7XW0s.aml, Wed Jun  1 12:42:05 2022
 *
 * Original Table Header:
 *     Signature        "SSDT"
 *     Length           0x00000150 (336)
 *     Revision         0x02
 *     Checksum         0xE3
 *     OEM ID           "Slav"
 *     OEM Table ID     "BRG0"
 *     OEM Revision     0x00000000 (0)
 *     Compiler ID      "INTL"
 *     Compiler Version 0x20200925 (538970405)
 */
DefinitionBlock ("", "SSDT", 2, "Slav", "BRG0", 0x00000000)
{
    External (_SB_.PC03.BR3A, DeviceObj)
    External (_SB_.PC03.BR3A.US00, DeviceObj)
    External (DTGP, MethodObj)    // 5 Arguments

    Scope (\_SB.PC03.BR3A)
    {
        Device (EGP2)
        {
            Name (_ADR, Zero)  // _ADR: Address
            Device (EGP1)
            {
                Name (_ADR, Zero)  // _ADR: Address
                Device (GFX0)
                {
                    Method (_STA, 0, NotSerialized)  // _STA: Status
                    {
                        If (_OSI ("Darwin"))
                        {
                            Return (0x0F)
                        }
                        Else
                        {
                            Return (Zero)
                        }
                    }

                    

                    Name (_ADR, Zero)  // _ADR: Address
                }

                Device (HDAU)
                {
                    Name (_ADR, One)  // _ADR: Address
                    Method (_STA, 0, NotSerialized)  // _STA: Status
                    {
                        If (_OSI ("Darwin"))
                        {
                            Return (0x0F)
                        }
                        Else
                        {
                            Return (Zero)
                        }
                    }
                }

                Method (_STA, 0, NotSerialized)  // _STA: Status
                {
                    If (_OSI ("Darwin"))
                    {
                        Return (0x0F)
                    }
                    Else
                    {
                        Return (Zero)
                    }
                }
            }
        }
    }

    Scope (\_SB.PC03.BR3A.US00)
    {
        Method (_STA, 0, NotSerialized)  // _STA: Status
        {
            If (_OSI ("Darwin"))
            {
                Return (Zero)
            }
            Else
            {
                Return (0x0F)
            }
        }
    }
}
And it attaches

Tried this

Code:
/*
 * Intel ACPI Component Architecture
 * AML/ASL+ Disassembler version 20200925 (64-bit version)
 * Copyright (c) 2000 - 2020 Intel Corporation
 *
 * Disassembling to symbolic ASL+ operators
 *
 * Disassembly of iASLF7XW0s.aml, Wed Jun  1 12:42:05 2022
 *
 * Original Table Header:
 *     Signature        "SSDT"
 *     Length           0x00000150 (336)
 *     Revision         0x02
 *     Checksum         0xE3
 *     OEM ID           "Slav"
 *     OEM Table ID     "BRG0"
 *     OEM Revision     0x00000000 (0)
 *     Compiler ID      "INTL"
 *     Compiler Version 0x20200925 (538970405)
 */
DefinitionBlock ("", "SSDT", 2, "Slav", "BRG0", 0x00000000)
{
    External (_SB_.PC03.BR3A, DeviceObj)
    External (_SB_.PC03.BR3A.US00, DeviceObj)
    External (DTGP, MethodObj)    // 5 Arguments

    Scope (\_SB.PC03.BR3A)
    {
        Device (EGP2)
        {
            Name (_ADR, Zero)  // _ADR: Address
            Device (EGP1)
            {
                Name (_ADR, Zero)  // _ADR: Address
                Device (GFX0)
                {
                    Method (_STA, 0, NotSerialized)  // _STA: Status
                    {
                        If (_OSI ("Darwin"))
                        {
                            Return (0x0F)
                        }
                        Else
                        {
                            Return (Zero)
                        }
                    }

                    Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                    {
                        Local0 = Package (0x02)
                            {
                                "device-id",
                                Buffer (0x04)
                                {
                                     0xBF, 0x73, 0x00, 0x00                           // .s..
                                }
                            }
                        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                        Return (Local0)
                    }

                    Name (_ADR, Zero)  // _ADR: Address
                }

                Device (HDAU)
                {
                    Name (_ADR, One)  // _ADR: Address
                    Method (_STA, 0, NotSerialized)  // _STA: Status
                    {
                        If (_OSI ("Darwin"))
                        {
                            Return (0x0F)
                        }
                        Else
                        {
                            Return (Zero)
                        }
                    }
                }

                Method (_STA, 0, NotSerialized)  // _STA: Status
                {
                    If (_OSI ("Darwin"))
                    {
                        Return (0x0F)
                    }
                    Else
                    {
                        Return (Zero)
                    }
                }
            }
        }
    }

    Scope (\_SB.PC03.BR3A.US00)
    {
        Method (_STA, 0, NotSerialized)  // _STA: Status
        {
            If (_OSI ("Darwin"))
            {
                Return (Zero)
            }
            Else
            {
                Return (0x0F)
            }
        }
    }
}
And it crashes
 
Status
Not open for further replies.
Back
Top