Jump to content

Please, I need a working method to fake the id of my GPU with OpenCore


9 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.

@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"
                })
            }
        }
    }
}

 

×
×
  • Create New...