Jump to content

Spoofing GPU device-id (B450m, AMD FirePro)


rich4653
 Share

10 posts in this topic

Recommended Posts

Had to jump through a few hoops to spoof my GPU device-id. I thought sharing might help somebody else out because I couldn't find this particular pattern anywhere...

 

First I had to create an SSDT to (I assume) define GFX0 as shown:

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

    Scope (\_SB.PCI0.GPP8)
    {
        Device (GFX0)
        {
            Name (_ADR, Zero)  // _ADR: Address
		}
	}
}

Wasn't able to successfully define the device-id in the SSDT, but once I added GFX0 in the SSDT, I was able to set it via DeviceProperties. Along the lines of:

DeviceProperties -> Add -> PciRoot(0x0)/Pci(0x3,0x1)/Pci(0x0,0x0) -> device-id = 5C660000

 

where PciRoot for GFX0 can be found with gfxutil, and device-id will be specific to your GPU 

 

 

My system:

MSI B450 Mortar

Ryzen 5 3600

AMD FirePro W5100

 

Opencore 0.6.2

Catalina 10.15.7

 

Update - Oct 2021

Since updating to Big Sur with OpenCore 7.4 and latest kexts, I discovered for WhateverGreen > 1.5.1 I also need to add no-gfx-spoof to the GPU DeviceProperties entry: 

DeviceProperties -> Add -> PciRoot(0x0)/Pci(0x3,0x1)/Pci(0x0,0x0) -> no-gfx-spoof = 01000000

More info on this specific issue at https://github.com/acidanthera/bugtracker/issues/1743

Edited by rich4653
Update
Link to comment
Share on other sites

  • 8 months later...

Hello rich4653,

 

was this your complet SSDT or a snippet?

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

    Scope (\_SB.PCI0.GPP8)
    {
        Device (GFX0)
        {
            Name (_ADR, Zero)  // _ADR: Address
		}
	}
}

Regards from Germany, Olaf Neumann

Link to comment
Share on other sites

11 hours ago, Franziska1993 said:

Hello rich4653,

 

was this your complet SSDT or a snippet?


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

    Scope (\_SB.PCI0.GPP8)
    {
        Device (GFX0)
        {
            Name (_ADR, Zero)  // _ADR: Address
		}
	}
}

Regards from Germany, Olaf Neumann

It will be better to you to read the original.

1. Look _SB_.PCI0.GPP8 - this name is specific for this motherboard only.

2. device-id can be injected through the SSDT, not needed to write properties.

Link to comment
Share on other sites

Hello Slice,

this is my (for my Hackintosh) complet SSDT-GPU-SPOOF.dsl and later compiled .aml.

 

 

// Based off of WhateverGreen's sample.dsl
// https://github.com/acidanthera/WhateverGreen/blob/master/Manual/Sample.dsl
DefinitionBlock ("", "SSDT", 2, "DRTNIA", "AMDGPU", 0x00001000)
{
    External (_SB_.PCI0, DeviceObj)
    External (_SB_.PCI0.PEG0, DeviceObj)

    Scope (\_SB_.PCI0.PEG0)
    {
        if (_OSI ("Darwin"))
        {
            Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
            {
                Local0 = Package (0x04)
                {
                    // Where we shove our FakeID
                    "device-id",
                    Buffer (0x04)
                    {
                        0x3d, 0x68, 0x00, 0x00
                    },
                    // Changing the name of the GPU reported, mainly cosmetic
                    "model",
                    Buffer ()
                    {
                        "AMD Radeon R7 250X"
                    }
                }
                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)
        }
      
    }
}

So where did rich4653 insert his code or is the code he used an extra aml-File to include into ACPI in the config.plist from OpenCore.

 

Regards Olaf Neumann

 

PS: My File didn't worked in OpenCore as R7 250X with grafik-acceleration, in Hackintool it was shown still as R7 240 with the ID 6613

Edited by Franziska1993
Link to comment
Share on other sites

Hello @Slice ,

 

why schoud this not work, i use OpenCore as Bootloader and not Clover:

 

https://dortania.github.io/Getting-Started-With-ACPI/Universal/spoof.html

 

THis didn't work, maybe because I coudn't reach the "Deviceb (GFX0) like in the top rich4653,

but I didn't have a Error like in an Other Solution:

 

I opend the config.plist and was looking for DeviceProperties/Add.
There I made the Entry:
 
device-id - Data - 3D680000
model -String - R7 250X

After I start the bootloader I get to the RadeonDriver (Maybe I made some spelling mistakes, I have written from

a Foto of the Screen);

 

RadeonSensors mio_base=0xf7e00000
 
RadeonSensors (pci1): found ATI Radeon ID: 0x683d, ATOM Bios: 6613HB.15.49.0.17.ASB2
RadeonSensors (pci1): using device-id to resolve temperature sensor type
RadeonSensors (pci1): adding southern Islands thermal sensor
RadeonSensors (pci1): started

About a Minute later I got the Error:

 

AGDCC unauthorized client 'perfpowerservice' (IOService:/AppleACPIPlatFormExpert/PCI0@0/PEG0@1/IOPP/GFX0@0/AMD7000ControllerWrangler)
AGDCC unauthorized client 'perfpowerservice' (IOService:/AppleACPIPlatFormExpert/PCI0@0/AppleACPIPCI/PEG0@/IOPP/HDAU@0,1/AMD7000ControllerWrangler)
AGDCC unauthorized client 'perfpowerservice' (IOService:/AppleACPIPlatFormExpert/PCI0@0/PEG0@1/IOPP/GFX0@0/AtiDeviceControl)
AGDCC unauthorized client 'perfpowerservice' (IOService:/AppleACPIPlatFormExpert/PCI0@0/PEG0@1/IOPP/GFX0@0/AtiDeviceControl/AppleGraphicsDevicePolicy/ACDPClientControl)
 

What th F**k is "unauthorized client 'perfpowerservice'"? I googled and not realy found something what shows/explaines maybe the Direction for a Solution

or what this Error causes.

 

After then I checked if the AMD7000 Controller has the Driver for the Device-ID 683D, what is the case.

 

Maybe you have some Ideas, Regards Olaf Neumann

 

PS: Howdo  I include the code from above to my sdst?

Link to comment
Share on other sites

Hello Slice,

 

When I read was is written in the Link, I get the Idea to "modify" the amdcontroller7000.kext.

 

Nobody had concret Success with the R7 240, luki1979 was writting about his R7 250 GPU.

I also found this:

 

Oland PRO  rebranded Bonaire 0x665D1002
R7 240, R7 430, R5 430

 

Do you mean that I'm should use the FakeID 0x665D1002, a modified amdcontroller7000.kext.

How do I make it with using OpenCore?

 

Fom HighSierra until Catalina (10.15.0) I have used Clover, after Catalina (amdcontroller7000.kext) I used OpenCore.

 

PLeas give some Input what I schoud look for to get the R7 240 running.

 

Regards Olaf Neumann

 

PS: Is luki1979 still active in the Forum?

Link to comment
Share on other sites

  • 2 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...