NiPeGun 9 Posted February 8 Share Posted February 8 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. Link to post Share on other sites
Cyberdevs 2,308 Posted February 8 Share Posted February 8 @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 Link to post Share on other sites
Hervé 2,104 Posted February 8 Share Posted February 8 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. Link to post Share on other sites
NiPeGun 9 Posted February 8 Author Share Posted February 8 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. Link to post Share on other sites
Hervé 2,104 Posted February 8 Share Posted February 8 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. Link to post Share on other sites
NiPeGun 9 Posted February 8 Author Share Posted February 8 (edited) This is te system info of the card starting with clover: 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: This is the saved IORegExplorer Output starting with Clover and the GPU faked correctly: IORegOutputClover.ioreg Edited February 8 by NiPeGun Link to post Share on other sites
Hervé 2,104 Posted February 8 Share Posted February 8 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. Link to post Share on other sites
NiPeGun 9 Posted February 8 Author Share Posted February 8 (edited) 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 February 8 by NiPeGun Link to post Share on other sites
Hervé 2,104 Posted February 8 Share Posted February 8 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" }) } } } } Link to post Share on other sites
Recommended Posts