Jump to content

Yeston Radeon RX 550 passed to a Proxmox VM booting with OpenCore


13 posts in this topic

Recommended Posts

I need to fake 1002:699f  to  1002:67ff

 

The hackintosh is a VM of ProxmoxVE with the GPU passed via PCIPassThrough.

With Clover I´m able to fake the id without problem. The thing is, in order to use Clover in Proxmox, the OVMF needs to be patched. But, each time Proxmox is updated, it re-install the unpatched version of OVMF, cause it´s a little newer, and my VM doesn´t start anymore until I re-patch OVMF. Besides, I tried OpenCore and things are working better. With OpenCore I can use the SMBios I like. With Clover I cant cause the VM enters a reboot loop if I put the SMBIos I want.

So. is MANDATORY for my to use OpenCore.

 

WHAT DO I TRIED?


- I opened OpenCore configurator, went to device properties, added the correct pci root, created a new key with data FF67, saved and rebooted ==> FAIL

 

The VM can´t run Windows cause the way it´s configured. So I can´t boot into windows to look for the ACPI path. It booted Debian, but I can´t find the ACPI patch in the file it´s supposed to be.
What I can do it´s to patch OVMF, start the VM with Clover, and look for anything you want me to look inside of the VM with the GPU working. So

 

I would like to be helped by anyone who can give me step by step instructions on how to achieve this.

Edited by NiPeGun

@NiPeGun

If i understand correctly you need to Spoof the device id of an AMD RX 550 with the RX 560 model correct?

The best step by step guide is the OpenCore manual and the best way to achieve this is by using the SSDT method:

https://dortania.github.io/OpenCore-Install-Guide/extras/spoof.html#ssdt-method

 

You can try this SSDT and all you need to do is to place is under /EFI/OC/ACPI and also add it to your config.plist under ACPI

SSDT-GPU-SPOOF.aml

2 hours ago, Cyberdevs said:

@NiPeGun

If i understand correctly you need to Spoof the device id of an AMD RX 550 with the RX 560 model correct?

The best step by step guide is the OpenCore manual and the best way to achieve this is by using the SSDT method:

https://dortania.github.io/OpenCore-Install-Guide/extras/spoof.html#ssdt-method

 

You can try this SSDT and all you need to do is to place is under /EFI/OC/ACPI and also add it to your config.plist under ACPI

SSDT-GPU-SPOOF.aml 261 B · 1 download

Not working.

15 minutes ago, Hervé said:

The thing is, what's the point? RX 550 (1002:699F) is Lexa GPU and that's not supported; faking the id of the Polaris 21 RX 560 (1002:67FF) will not change anything regarding graphics acceleration/support; to me, it is useless, as clearly stated in Dortania's GPU buying guide.

In Clover I´m using that card without any problem. System status reports metal supported and I even play games without problems. Graphics acceleration working without problems , too.

Oh? Well... can you post the details of what you tried to inject in OC + a saved IOReg output from IORegistryExplorer app? Because, outside a patched DSDT/SSDT or a property injection there's nothing else you can do in OC.

This is te system info of the card starting with clover:

 

1421202343_Capturadepantalla2021-02-08alas21_53_20.png.a99dad9466862811f62cfb21a5f26154.png

 

gfxutil -t

 

01:00.0 1002:67ff /PCI0@0/SE0@1C/GFX0@0 = PciRoot(0x0)/Pci(0x1C,0x0)/Pci(0x0,0x0)
01:00.1 1002:aae0 /PCI0@0/SE0@1C/HDAU@0,1 = PciRoot(0x0)/Pci(0x1C,0x0)/Pci(0x0,0x1)

 


Hakintool

 

IORegPath: IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/SE0@1C/IOPP/GFX0@0
Device Path: PciRoot(0x0)/Pci(0x1C,0x0)/Pci(0x0,0x0)

 

 

IORegistryExplorer

 

Acpi-path: IOACPIPlane:/_SB/PCI0@0/SE0@1c0000/GFX0@0

 

 

gfxutil -f GFX0

 

01:00.0 1002:67ff /PCI0@0/SE0@1C/GFX0@0 = PciRoot(0x0)/Pci(0x1C,0x0)/Pci(0x0,0x0)

 

 

An this is what I'm trying to do in OpenCore:
1405163187_Capturadepantalla2021-02-08alas21_42_05.thumb.png.80992e203c42b59f89141864978294b2.png

This is the saved IORegExplorer Output starting with Clover and the GPU faked correctly:

 


 

IORegOutputClover.ioreg

Edited by NiPeGun

I'm not expecting any difference but try and declare this location instead:

PciRoot(0x0)/Pci(0x1c,0x0)/Pci(0x0)

then do a Reset NVRAM before you reboot into macOS.

 

If that does not inject the alternative device id, you'll have to use a DSDT patch or a SSDT, both actually simply injecting the device id in a _DSM method.

1 hour ago, Hervé said:

I'm not expecting any difference but try and declare this location instead:



PciRoot(0x0)/Pci(0x1c,0x0)/Pci(0x0)

then do a Reset NVRAM before you reboot into macOS.

 

If that does not inject the alternative device id, you'll have to use a DSDT patch or a SSDT, both actually simply injecting the device id in a _DSM method.

Not working.

 

Now, given the fact :
 

Hakintool

IORegPath: IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/SE0@1C/IOPP/GFX0@0
 

IORegistryExplorer

Acpi-path: IOACPIPlane:/_SB/PCI0@0/SE0@1c0000/GFX0@0

 

 

gfxutil -f GFX0

01:00.0 1002:67ff /PCI0@0/SE0@1C/GFX0@0 = PciRoot(0x0)/Pci(0x1C,0x0)/Pci(0x0,0x0)

 

 

The code of the .dsl (not compiled ACPI file) must be like this:
 

DefinitionBlock ("", "SSDT", 2, "DRTNIA", "AMDGPU", 0x00001000)
{
    External (_SB_.PCI0, DeviceObj)
    External (_SB_.PCI0.SE0.GFX0, DeviceObj)


    Scope (\_SB_.PCI0.SE0.GFX0)
    {
        if (_OSI ("Darwin"))
        {
            Method (_DSM, 4, NotSerialized)
            {
                Local0 = Package (0x04)
                {
                    "device-id",
                    Buffer (0x04)
                    {
                        0xFF, 0x67, 0x00, 0x00
                    },

                    "model",
                    Buffer ()
                    {
                        "AMD Radeon RX 550"
                    }
                }
                DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                Return (Local0)
            }
        }
    }
    Scope (\_SB.PCI0)
    {                   
        Method (DTGP, 5, NotSerialized)
        {
            If (LEqual (Arg0, ToUUID ("a0b5b7c6-1318-441c-b0c9-fe695eaf949b")))
            {
                If (LEqual (Arg1, One))
                {
                    If (LEqual (Arg2, Zero))
                    {
                        Store (Buffer (One)
                            {
                                 0x03
                            }, Arg4)
                        Return (One)
                    }

                    If (LEqual (Arg2, One))
                    {
                        Return (One)
                    }
                }
            }

            Store (Buffer (One)
                {
                     0x00
                }, Arg4)
            Return (Zero)
        }
      
    }

}

Right?

Edited by NiPeGun

Yes, should do (except for the possible syntax error in the 1st scope statement); or go for the much simpler _DSM method code that does not require any calls to DTGP Method (and therefore no definition of it):

DefinitionBlock ("", "SSDT", 2, "hack", "AMDGPU", 0x00000000)
{
    External (_SB_.PCI0.SE0.GFX0, DeviceObj)

    Scope (\_SB.PCI0.SE0.GFX0)
    {
        if (_OSI ("Darwin"))
        {
            Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
            {
                If (LEqual (Arg2, Zero))
                {
                    Return (Buffer (One)
                    {
                         0x03                                           
                    })
                }
                Return (Package ()
                {
                    "device-id",
                    Buffer (0x04)
                    {
                         0xFF, 0x67, 0x00, 0x00                         
                    }, 
                    "model", 
                    "AMD Radeon RX 550"
                })
            }
        }
    }
}

 

  • 1 month later...

After a little dig into clover I discovered the option making the graphics card to work is the FixDisplay option!
So, according to the Clover Wiki, the FixDisplay option artificially creates a GFX0 device if it´s still absent or not present in the DSDT when macOS starts cause, in this case, the graphics card is not a part of the motherboard. Besides it creates the device HDAU (HDMI audio) in order for the audio to work associated to the GFX0 device.

 

So, I need to find a way to create the GFX0 and HDAU devices in OpenCore and I suspect that will fix the issue.

If there are no existing devices at the associated IO locations, devices you would rename, you'll have to inject those through an SSDT or a DSDT patch.

There needs to be an ACPI device which exists at that location in order to add properties, otherwise the properties won't be added. Once the ACPI device exists, you can use "DeviceProperties" in the config.plist, or use the _DSM method to return those device properties as well.

Posted (edited)
On 4/1/2021 at 6:27 AM, 1Revenger1 said:

There needs to be an ACPI device which exists at that location in order to add properties, otherwise the properties won't be added. Once the ACPI device exists, you can use "DeviceProperties" in the config.plist, or use the _DSM method to return those device properties as well.

Can you put me in a way on how to create that device with the differents methods I have available?

In Clover, when the graphics card is working properly, it´s in this address:
 

gfxutil -t

 

01:00.0 1002:67ff /PCI0@0/SE0@1C/GFX0@0 = PciRoot(0x0)/Pci(0x1C,0x0)/Pci(0x0,0x0)
01:00.1 1002:aae0 /PCI0@0/SE0@1C/HDAU@0,1 = PciRoot(0x0)/Pci(0x1C,0x0)/Pci(0x0,0x1)


Hakintool

 

IORegPath: IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/SE0@1C/IOPP/GFX0@0
Device Path: PciRoot(0x0)/Pci(0x1C,0x0)/Pci(0x0,0x0)
             PciRoot(0x0)/Pci(0x1c,0x0)/Pci(0x0)

IORegistryExplorer

 

Acpi-path: IOACPIPlane:/_SB/PCI0@0/SE0@1c0000/GFX0@0

Edited by NiPeGun
  • NiPeGun changed the title to Yeston Radeon RX 550 passed to a Proxmox VM booting with OpenCore
×
×
  • Create New...