AMD Radeon 6650 XT, 6950 XT und 6900 XTXH ohne GPU-ID Spoofing

  • Hallo allerseits,


    ich stelle hier mal meine Kernel Extension für die eigentlich nicht unterstützten Ausbaustufen von Navi21 (RX 6950 XT und RX 6900 XTXH) und Navi23 (RX 6650 XT) zur Verfügung.


    Ein Vorwort


    Warum weg vom DeviceID Spoofing? ..


    DeviceID Spoofing hat meines Erachtens nach "unsaubere" und sogar "dreckige" Lösungsqualitäten und sollte eigentlich nur als temporärer Workaround in Betracht gezogen werden.


    unsauber, weil das GPU-ID Spoofing offensichtlich nicht bis zu letzten (untersten) Ebene greift. Wer mit gespoofter GPU-ID mal im IORegistryExplorer im GFX0 Device den "compatible" Key ansieht, wird dort nur die originale und nicht die gespoofte ID vorfinden. .. Bisher hatte ich zwar noch nie das Problem, daß das relevant wird, .. richtig konsistent ist dieser Zustand aber auch nicht.


    dreckig, weil hier Device-unkritisch in die Geräte-/Treiberinstanzierung eingegriffen wird, und mit der Festlegung der DeviceID nach PCI-Pfad alle Geräte in diesem Steckplatz die gleiche DeviceID (und damit den gleichen Teiber) aufgedrückt bekommen, .. ganz egal, was da drin steckt. Die Flexibilität der Hardwarekonfiguration ist damit (zumindest für die Grafikkarte) dahin.

    Spätestens wenn man mal - z.B. im Notfall - ne andere Grafikkarte verbauen muß, holt einen das vielleicht wieder ein .. mit Sicherheit aber, wenn das Tauschgerät ne komplett andere Architektur aufweist.


    Außerdem finde ich DeviceProperties per config.plist oder SSDT/DSM nur für Geräte angemessen, die man nicht austauschen kann, weil fest aufm Board verbaut (Ethernet, Onboard Audio, etc.) Bei allem, was tauschbar ist, sollte eine dynamische Lösung angestrebt werden ..


    Das Ziel


    Ein PersonalityProvider, der wie jeder normale Treiber gerätesensitiv die Treiberinstanzen erzeugt, und alle zusätzlichen DeviceProperties on-demand-only als All-In-One Lösung vergibt.


    Das Ergebnis


    Ursprünglich hatte ich das Projekt nur für die RX 6650 XT umgesetzt, da das Konzept im Grunde aber für jedes Device funktioniert, dass über ID Spoofing läuft (nicht nur Grafik), habe ich diese Kext mal auf alle mir bekannten, zu spoofenden Navi20 erweitert.


    Die IOPersonalitiy zu erzeugen ist ja nicht sonderlich kompliziert und bei GitHub habe ich am Wochenende noch eine Lösung gefunden, die DeviceProperties via IOService zu übergeben (vgl. hier). Ich nutze eine leicht abgewandelte Version diese Codes, der Credit hierfür gebührt in jedem Falle Voight-Kampf. .. Danke


    Installation/ggf. Anpassungen


    Die Kernel Extension muß wie jede andere auch in Kernel->Add eingebunden werden.



    Mindestvoraussetzung ist Navi23 Support, also macOS 12.1 ..

    Die Bridge SSDT(SSDT-BRG0.aml oder vergleichbares) ist nicht mehr nötig (zumindest hier unter macOS 13.2.1 .. gerne testen und hier Bescheid geben ..) und alle DeviceProperties für die Navi20 .. bei mir: PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0) .. müssen auch weg (wir wollen ja explizit davon weg :) ).


    Unmodifiziert gibt die Kext nur die Properties model (Graka-Name), ATY,FamilyName und ATY,DeviceName (die letzteren für MetalDeviceName) weiter. Ich habe bei model übrigens "AMD" weggelassen, damit bei "über diesen Mac" kein Zweizeiler draus wird, wer will kann das je wieder hinzufügen.


    Wenn noch FramebuffersEdits, PowerPlayTables oder ggf. weitere Kosmetika etc. mitgegeben werden sollen, können diese in der info.plist unter IOKitpersonalities->entsprechendes Root Device->IOProviderMergeProperties als Kind-Elemente eingetragen werden.

    Achtung!: Hierbei müssen die erwarteten Datentypen passen (meist Data, .. vermute ich) .. am besten vorher mit gespoofter ID mit IORegistryExplorer das Device GFX0 abgleichen. Strings sind z.B. Null-terminated in Mac Roman Encoding zu übergeben (vgl. hier)




    fertig .. echter Device Support bei vollständiger Flexibilität!



    Zum Testen habe ich hier nur macOS 13.2.1, da funktioniert es mit WhateverGreen /agdpmod=pikera bislang ohne Einschränkungen



    EDIT 07.04.23


    DRM Decoder funktioniert mit dieser Lösung leider nicht. Das ist mir bedauerlicherweise nicht aufgefallen, da Trailer allgemein funktionieren - HD Content aber nicht .. und damit (inkl. Netflix) beriesele ich mich eigentlich nur übers Apple TV am Fernseher.


    Mein Plan ist das Ganze nochmal als .dext (DriverExtension) anzusetzen, so wie Apple das vorsieht. Leider weiss ich noch nicht genau, wann ich Zeit dafür finde und wie das mit den Developerlizenzen dafür aussehen muß, damit das auch überall geht (und nicht nur lokal bei mir).

    Dateien

    iCAD (iMac13,2):

    i5 3570K, Gigabyte GA-Z77X D3H, MSI Geforce GTX 770 TF 4GB, 16 GB XMS3-1333

    AeroCool DS200, black

    OpenCore, OS X 10.14, Win 10 Pro


    critical iMac (iMac19,1):

    i5 9600K, Asus Z370-I Gaming, XFX Speedster SWFT 319 AMD RX 6800, 32 GB Vengeance 2666

    Jonsbo U4 Mini, black Mesh

    OpenCore, macOS 13, Win 11 Pro


    iPhone 12 mini 128GB, iPadPro 10,5 64 GB, Apple TV 4k 64 GB, 13“ MacBook Pro Late-2016 4TB

    4 Mal editiert, zuletzt von hObelware () aus folgendem Grund: komplett überarbeitet

  • hObelware

    Hat den Titel des Themas von „Kext für AMD Radeon RX 6650 XT“ zu „AMD Radeon 6650 XT, 6950 XT und 6900 XTXH ohne GPU-ID Spoofing“ geändert.
  • Schicke Sache, anpinnen griven ?

  • Aber auf alle Fälle :)

    Der Pin ist gepinned...

  • Sehr geiles Projekt, danke fürs Teilen.
    Sehe ich das richtig, dass kein PCI Pfad angegeben werden (muss)? Falls ich nun mehr als eine Grafikkarte im System habe, wie kann ich z.B. unterschiedliche PPTs übergeben? Eine rein theortische Frage für mein Veständnis.

  • So rein vom drauf und drüber gucken würde ich sagen über den Parameter IONameMatch denn es werden ja nicht beide GPU's den gleichen IOName haben sondern sich unterscheiden zum Beispiel als GFX0 und GFX1...

  • genau, über IONameMatch, .. entweder ne Kopie des Root Devices mit anderem IONameMatch angeben (für unterschiedliche DeviceProperties) oder aus IONameMatch ein Array machen und für jeden Namenstreffer einen (string) Eintrag für resultierend gleiche Properties.


    Im Grunde kannst Du IOClass ACPIProviderMergeProperties (hier die jeweiligen RootDevices) dazu verwenden, an jedes beliebige IOPCIDevice oder IOUSBDevice DeviceProperties zu übergeben, von dem Du den IOName und/oder die DeviceID (IOPCIMatch) kennst, ganz unabhängig vom PCI Pfad .. das läuft vom X6000 Treiber völlig losgelöst. Nur die übrigen IOPersonalities (nicht RootDevices) machen die Treiberanbindung.


    Im Detail arbeitet Voight-Kampfs IOClass so, dass sie beim Testen ob die Klasse für das Device instanziert bleiben soll (probe), in der Probe() Routine statt zu Testen, die DeviceProperties schubst und dann immer NULL meldet (für: kann weg). Danach wird die Instanz wieder abgebaut.

    iCAD (iMac13,2):

    i5 3570K, Gigabyte GA-Z77X D3H, MSI Geforce GTX 770 TF 4GB, 16 GB XMS3-1333

    AeroCool DS200, black

    OpenCore, OS X 10.14, Win 10 Pro


    critical iMac (iMac19,1):

    i5 9600K, Asus Z370-I Gaming, XFX Speedster SWFT 319 AMD RX 6800, 32 GB Vengeance 2666

    Jonsbo U4 Mini, black Mesh

    OpenCore, macOS 13, Win 11 Pro


    iPhone 12 mini 128GB, iPadPro 10,5 64 GB, Apple TV 4k 64 GB, 13“ MacBook Pro Late-2016 4TB

    7 Mal editiert, zuletzt von hObelware ()

  • Sehr cool, Danke @hObelware,


    Werd ich gleich mal ausprobieren, hab ne 6900 XTXH.


    Update: Super, hat funktioniert. Endlich wird meine 6900 XTXH auch sauber als solche ausgewiesen. Vorher stand überall nur Navi21.



    Aber die Geekbench Scores sind unverändert:

    vorgefertigte EFIs für diverse Intel Plattformen auf meiner

    ---------------------------------------------------------------------------

    Github Seite: https://github.com/SchmockLord?tab=repositories

    ---------------------------------------------------------------------------

    My Youtube Channel: https://www.youtube.com/channel/UCnohQxGguJlqTeOsZUl3E4A

    ---------------------------------------------------------------------------

    Desktop: MikroATX Build ASRock B650M Riptide | 7800X3D | 6900 XTXH MSI Gaming Trio Z

    Laptop: MacBook Pro 16 Base Model

    Einmal editiert, zuletzt von SchmockLord ()

  • SchmockLord der Treiber ist ja auch der gleiche wie voher .. die Taktung VRAM/GPU wird sowieso vom VBIOS bestimmt.

    Unterm Strich ist der Betriebszustand exakt der gleiche, wie vorher, .. nur der Weg dahin ist dynamisch und der DeviceTree bildet die Wirklichkeit ab ..

    iCAD (iMac13,2):

    i5 3570K, Gigabyte GA-Z77X D3H, MSI Geforce GTX 770 TF 4GB, 16 GB XMS3-1333

    AeroCool DS200, black

    OpenCore, OS X 10.14, Win 10 Pro


    critical iMac (iMac19,1):

    i5 9600K, Asus Z370-I Gaming, XFX Speedster SWFT 319 AMD RX 6800, 32 GB Vengeance 2666

    Jonsbo U4 Mini, black Mesh

    OpenCore, macOS 13, Win 11 Pro


    iPhone 12 mini 128GB, iPadPro 10,5 64 GB, Apple TV 4k 64 GB, 13“ MacBook Pro Late-2016 4TB

  • hObelware ganz tolle Sache, eine Sorge weniger für so einige. Bin begeistert weil ich es auch so Nutzer freundlich ist.


    :top:

  • Da wird der Kext Updater wohl bald ein Update erfahren. :)

  • Hallo. Zunächst einmal Entschuldigung, wenn ich etwas falsch schreibe, da ich Google Translate verwende. Derzeit besitze ich einen 6650 XT, der mit der üblichen Methode arbeitet (Geräte-ID als FF730000 + GPU-SPOOF.aml mit Boot-Argumenten agdpmod=pikera) und gut funktioniert. Aber ich habe gelesen, dass einige Leute diese Methode verwenden und besser arbeiten.


    In meinem Fall verursachte es einen Neustart und ich sah den Anmeldebildschirm nicht.


    Die Schritte, die ich befolgt habe, sind:


    1- Behalten Sie alle grünen Kext- und Boot-Argumente bei

    2-Entfernen Sie aus den Geräteeigenschaften die lange PCI (diejenige, die sich auf die AMD dGPU bezieht)

    3-Fügen Sie die kext AMDRadeonNavi2xExt.kext.zip in den nächsten Ordner ein und laden Sie sie in die config.plist


    Irgendeine Idee, womit ich Probleme bekomme?

    Danke

  • Danke ozw00d


    Hello. I own an XFX 6650 XT which works with the usual method (device id as FF730000 + GPU-SPOOF.aml + with boot arguments agdpmod=pikera) and works fine. But I read that some people use this method and was trying to implement it because seems a better way.

    I am using last version of Opencore 0.90


    In my case, it caused a reboot and I didn't see the login screen.



    The steps I followed are:


    1- Keep whatevergreen.kext and boot arguments (If I understand well, that part doesn't need to be removed)


    2-From the device properties, remove the long PCI (the PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0) )


    3-Put the kext AMDRadeonNavi2xExt.kext in the kext folder and load it to the config.plist


    Any idea why isn't working? I can upload the config.plist or something else if that helps


    Thanks

  • hi there, .. yes, I would be best to upload an anonymized config for further investigation .. probably add an ioreg save with active ID Spoofing too

    iCAD (iMac13,2):

    i5 3570K, Gigabyte GA-Z77X D3H, MSI Geforce GTX 770 TF 4GB, 16 GB XMS3-1333

    AeroCool DS200, black

    OpenCore, OS X 10.14, Win 10 Pro


    critical iMac (iMac19,1):

    i5 9600K, Asus Z370-I Gaming, XFX Speedster SWFT 319 AMD RX 6800, 32 GB Vengeance 2666

    Jonsbo U4 Mini, black Mesh

    OpenCore, macOS 13, Win 11 Pro


    iPhone 12 mini 128GB, iPadPro 10,5 64 GB, Apple TV 4k 64 GB, 13“ MacBook Pro Late-2016 4TB

    Einmal editiert, zuletzt von hObelware ()

  • Hi,


    Thanks for the reply.


    Here is the config.plist fileconfig.plist


    According to the opencore log the kext is being loaded:


    19:355 00:023 OC: Prelinked injection AMDRadeonNavi2xExt.kext (AMDRadeonNavi2xExt.kext) - Success

    19:375 00:019 OC: Prelinked injection AMDRadeonNavi2xExt.kext v1.0.1


    So currently, I am using two aml files and is working fine(ACPI folder):


    SSDT-BRG0.aml ---> Attached DSL SSDT-BRG0.dsl

    SSDT-6650XT-73EF-GPU-SPOOF.aml ---> Attached DSL SSDT-6650XT-73EF-GPU-SPOOF.dsl


    I have a ImacRegistry.ioreg file (5mb compressed) with the active spoofing here --> ImacRegistry.zip

    3 Mal editiert, zuletzt von sisxfx ()

  • @hObelware Ich hab deine Kext-Methode ja schon länger im Einsatz. Soweit hat sie funktioniert. Aber gestern beim Update auf 13.3 nicht mehr. Habs bestimmt 10 Mal probiert. Weder Update noch als Full Installer. Er hat dann irgendwann auch sinngemäßg "GFX0 missing" angezeigt im Verbose Mode beim Booten.


    Hab dann nur auf die alte Variante gewechselt, SSDT-BRG0 und die device-properties und er ist direkt durchgebooted. Sowohl der Updater als auch Full Installer.


    Wollte dich das nur wissen lassen.

    vorgefertigte EFIs für diverse Intel Plattformen auf meiner

    ---------------------------------------------------------------------------

    Github Seite: https://github.com/SchmockLord?tab=repositories

    ---------------------------------------------------------------------------

    My Youtube Channel: https://www.youtube.com/channel/UCnohQxGguJlqTeOsZUl3E4A

    ---------------------------------------------------------------------------

    Desktop: MikroATX Build ASRock B650M Riptide | 7800X3D | 6900 XTXH MSI Gaming Trio Z

    Laptop: MacBook Pro 16 Base Model

  • meine Kiste hat gestern auch lange überlegt, bis es weiter ging beim Update (aber es ging schlussendlich weiter) .. aber mit 13.3 is der VDA Decoder tot, mit Spoofing gehts aber alles .. ich geh der Sache nach .. Danke für die Info

    iCAD (iMac13,2):

    i5 3570K, Gigabyte GA-Z77X D3H, MSI Geforce GTX 770 TF 4GB, 16 GB XMS3-1333

    AeroCool DS200, black

    OpenCore, OS X 10.14, Win 10 Pro


    critical iMac (iMac19,1):

    i5 9600K, Asus Z370-I Gaming, XFX Speedster SWFT 319 AMD RX 6800, 32 GB Vengeance 2666

    Jonsbo U4 Mini, black Mesh

    OpenCore, macOS 13, Win 11 Pro


    iPhone 12 mini 128GB, iPadPro 10,5 64 GB, Apple TV 4k 64 GB, 13“ MacBook Pro Late-2016 4TB

  • First of all, Thank you so much for your work
    I have Rx 6650 XT and your kext worked like a charm on the first try,
    I'm using Ventura 13.3, and I have no issues at all except my OPENCL geekbench 6 score is around 20000 which seems to be very low.
    did I mess something up?

  • I usually don't care about benchmark scores at all. Additionally (from what I read) they may vary from OS Version to OS Version ..


    Are the scores better when using spoofing? I didn't test that, but I believe there shouldn't be a big difference, since my kext utilizes the very same drivers as spoofing does.


    For the time being, I use spoofing, since I ran into VDADecoder issues after upgrading to 13.3 .. my next step will be, to implement the rx 6650 support as driver extension .dext (as intended by apple), maybe that will solve DRM Decoding .. but I'm rather short on spare time right now, so I can't predict, when exactly I will be able to do something about that.

    iCAD (iMac13,2):

    i5 3570K, Gigabyte GA-Z77X D3H, MSI Geforce GTX 770 TF 4GB, 16 GB XMS3-1333

    AeroCool DS200, black

    OpenCore, OS X 10.14, Win 10 Pro


    critical iMac (iMac19,1):

    i5 9600K, Asus Z370-I Gaming, XFX Speedster SWFT 319 AMD RX 6800, 32 GB Vengeance 2666

    Jonsbo U4 Mini, black Mesh

    OpenCore, macOS 13, Win 11 Pro


    iPhone 12 mini 128GB, iPadPro 10,5 64 GB, Apple TV 4k 64 GB, 13“ MacBook Pro Late-2016 4TB

  • I never tried it myself but some others got way higher scores than me (x3 times more)

    I'm also on 13.3 and VDADecoder is not working as well

    I've tried to spoof the card before but i always fail I'm not sure why, the device-id seems to never change, and location paths on Windows report 2 ACPI paths, i only took the first one as _SB_PCI0_GPP8, and it shorter than usual or is this normal?


    i tested multiples booting the efi from the USB and didn't work, (didn't want to risk your working kext on my disk efi)