Beiträge von hObelware

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

    weils hier nun doch schon zwei weitere Male vermutet wurde .. wie sieht denn Dein USB Mapping aus?


    gehen an den USB-C Ports am Hackintosh außer den USB-Sicks auch powered devices (zB Audio oder USB Festplatten?)

    my 2 cents:


    zuerst mal möchte ich hier allen beipflichten: das ULTIMATIVE OS gibt es meines Erachtens nach nicht .. jedes hat so seine Pro und Cons


    beruflich bin ich überwiegend auf macOS und Win 10 Pro unterwegs, wobei ich Windows auch keine Träne nachweinen würde, wenn sich alles was ich damit mache, auch mit macOS gut machen lassen würde. CAD (in dem Falle: Autodesk) ist auf dem Mac keine echte Alternative und wer schon mal versucht hat auf ne öffentliche Bauausschreibung zu bieten, nach GAEB Standard, der weiss das es für macOS GAR KEIN brauchbares Tool dafür gibt.


    egal .. mit Linux hatte ich im Studium ne Weile zu tun, da (2001) fehlte mir aber einfach die ganze Standardsoftware für all die klassischen Kreativanwendungen .. ich hatte keinen Bock für Bildbearbeitung usw., mich in die teils guten Alternativen einzuarbeiten, wenn ich den Adobe Workflow schon intus und schätzen gelernt hatte (auf OS 9) ..


    und da komme ich zum Privatumfeld: macOS (und ein bisschen Windows, ausschließlich zum zocken .. so denn mal Zeit dafür abfällt). macOS aus genau dem eben genannten Workflow-Beweggründen.

    Für sich gesehen sind die Betriebssysteme alle ähnlich gut oder schlecht, aber wenn es darum geht nicht nur den Rechner/Laptop zu betrachten, sondern all den anderen Elektronikquatsch noch rundherum, so sind macOS/iOS/tvOS .. u get the point .. einfach unschlagbar gut und intuitiv miteinander verbandelt. Ich hab mich sehenden Auges ver-apple-n lassen, und finde das auch gut .. die Grad an Interoperabilität ist großartig.


    Ich liebe Universal Clipboard!

    Hackintool ist n gute Supportsoftware für den Hackintosh, da kannste ne Menge Infos übers System ziehn .. patchen usw. .. empfehlenswert ..


    bei Deinem System bin ich grade etwas ratlos, ohne weiteres wird das mit dieser Karte glaube ich nix, die mitgegebene VBIOS Version wird mit der enthaltenen (xxx..) leider überschrieben ..


    deaktiviere mal USBInjectAll und den Portlimit Patch - am Intel USB haste ja eh nix dran (laut IOReg), nur um Seiteneffekte aus Speicherüberlauf mal auszuschließen .. ist CSM im BIOS aktiviert? .. wenn ja, auch unbedingt mal abschalten


    möglicherweise kann das aber nur ein anderes VBIOS lösen, so groß ist die Auswahl bei TechPowerUp.com zu der Variante aber auch nicht, und fast alle haben Version xxx-xxx-xxx .. ich stöbere da grade noch mal ..


    EDIT


    oh Mann, hier gibts aber alle möglichen VRAM Supplier .. kannst Du in einem Windows irgendwo mit GPUZ Dein VBIOS mal absichern und hier anhängen ..


    nochmals EDIT


    ganz alternativ könnte ich Dir meine Sapphire auch für 130 inkl. Versand (in OVP) auch überlassen .. hab ja jetzt ne 6650 XT .. guckst Du hier


    und noch hinterdrein ..

    im BIOS

    "Above 4G Decoding" -> Enabled

    „Init Display first“ -> PCIe

    „Multi Monitor Support“ -> Enabled

    DVMT Size“ -> 64 MB

    System Profiler im Darkmode, der hat diese Listenfenster nur, wenn 2 Grafikkarten erkannt wurden (IGPU headless fliegt da normalerweise raus, es sei denn Du hast zusätzlich noch Slot oder so was in den DP hinterlegt)

    .. zu finden unter Einstellungen->Allgemein->Info ganz unten "Systembericht ..."




    Macwolf

    ich hab mal n bissl bei TechPowerUp geschmökert, die RX 580 2048SP ist eigentlich ne großartig marketing related umgelabelte RX 570 mit einem um 40 MHz!! erhöhten Boosttakt, daher auch die neue DeviceID, denn mit der RevisionsID 0xEF (statt 0xE7) erkennt Whatevergreen die nämlich auch als RX 570 .. das nur am Rande ..

    Dein VBIOS wirft allerdings xxx-xxx-xxx als BIOS Version aus, und damit hat macOS scheinbar seine Schwierigkeiten, denn von AMDRadeonX4000_AMDEllesmereGraphicsAccelerator wird bei Dir irgendwie keine Instanz erzeugt.

    Ich hab mal die Testweise die BIOS Kennung meiner Sapphire Nitro+ eingefügt, (ich glaube aber es sollte eigentlich ausreichen, wenn die mit 113- anfängt)


    außerdem hab ich mal den Pfad zum AudioDevice (HDEF) korrigiert und die angehängte Kext eingefügt, damit der AHCI Controller die Intel Treiber verwendet (die mußt Du noch nach KEXT kopieren)


    achso: die Reihenfolge der injizierten Kexts spielt bei OpenCore eine Rolle .. hab ich auch korrigiert


    teste Mal und poste ggf. noch nen IOReg und/oder auch gern die Startseite(System) von Hackintool

    Das ist doch möglich aber was bringt es dir? solange keinen Treiber für 0x73ef in der Kext hinterlegt, daher musst du device-id spoofen, um die Grafik an die id in der kext zu passen oder die kext selber an die Grafikkarte und das kannst du mit OpenoCore unter kernelpatch machen.

    Daher meine Meinung nach, spoof mit SSDT ist am besten oder die Karte durch rx6600(XT) oder rx6800(XT) ersetzen.

    der Treiber ist der gleiche, ich muss nur macOS davon überzeugen (per injector) für die Device ID den Treiber zu verwenden .. das hab ich über die Zeit schon einige Male gemacht. Mein Z97er Board hatte zum Beispiel n LPC mit ner abweichenden Device ID und bei meinem aktuellen Z370er hab ich auch die IntelAHCI Treiber an den (200er Series) AHCI Controller gebunden und nicht die Generic, die macOS stattdessen verwenden würde ..

    was ich davon habe? .. proof-of-concept, hauptsächlich .. un ne sauberere und variablere Lösung als ID Spoofing, (nicht dass ich ständig die Grakas on-the-fly tauschen würde .. aber das ginge ja nunmal nicht, ohne config Änderung)

    entweder per DeviceProperties oder per SSDT mit device-id 0x73FF

    danke, die 6650 läuft so auch bei mir schon ein paar Tage und auch gut soweit, nur sind die spoofing methoden keine wirklich „sauberen“ Lösungen, denn pci1002,73ff taucht dann eben nicht in der compatible enummerierung auf sondern trotzdem pci1002,73ef


    am liebsten würde ich mir nen injector kext schreiben, mit dem ich die echte DeviceID an die IOClass binde, aber die IOName-Ansprache ist für die grafikkarte sehr variabel (wobei alle gleichzeitig gültig sind zB als display, GFX0, pci1002,73ff .. usw.) .. das macht n injector relativ tricky .. aber ich hab die Hoffnung noch nicht ganz aufgegeben ..


    ich dachte Arkturus hätte nen anderen Weg als oben genannt genutzt, um die Device ID durchzureichen, scheint ja aber doch ne klassische RX 580 zu sein ..


    Macwolf .. danke für dein IO Reg Auszug, .. kannste den nochmal mit ner headless IGPU machen? und dann auch die config noch dazu anhängen ..

    alles gut, .. ich selber hatte die RX 580 (Sapphire) auch mit 67DF, die ging einfach so .. der TE hat aber eine mit 6FDF, die muss gespoofed werden .. Arkturus meinte seine Powercolor hätte auch 6FDF und die müsse er nicht spoofen .. ich hab grade ne 6650 XT und die muß ich leider auch spoofen, ich suche (für mich) nur nach alternativen methoden zum id spoofing .. das ist alles

    also .. pciroot(0x0)/pci(1x0,0x0) ist der eintrag, der mich interessiert .. (das ist der PCIe Slot, in dem die Graka angeschlossen ist) .. wenn man den Bildern glauben schenken darf: Eintrag 2 in den DP


    pciroot(0x0)/pci(1x0,0x0)/pci(0x0,0x0) ist GFX0

    pciroot(0x0)/pci(1x0,0x0)/pci(0x0,0x1) ist HDAU


    so far so good ..

    was steht bei pciroot(0x0)/pci(1x0,0x0) ?


    alternativ würde ich mich auch freuen, wenn Du Deine config UUID-etc.-bereinigt hier zur Verfügung stellen könntest .. ich versuche mich grade an n paar alternativen Wegen für not-really-supported Grafikkarten .. in meinem Fall die RX 6650 XT ..


    sollte Deine RX 580 wirklich nativ 6FDF sein, muß die offensichtlich verwendete 67DF ja irgendwo her kommen ..

    whatevergreen macht das jedenfalls nich von selber, da hab ich grade bisschen im quellcode (kern_mod.cpp) gelesen


    danke

    Arkturus .. ne, „Metal 2“ ist schon konkreter als „unterstützt“ .. das ist nur grundlegende Unterstützung


    in Deinen 2. Bild „OOB ohne DP Eintrag“ steht doch aber auch 0x67DF als Geräte-ID .. wo kommt die denn her, wenn Du die nich spoofst .. was steht denn in dem Eintrag (0x0)/(0x1,0x0) über dem von Dir maskierten Eintrag in den DeviceProperties?


    oder aus ner SSDT vielleicht?

    grade nachgesehen .. 6fdf muß gespoofed werden .. weder in AMD9500Controller.kext noch in AMDRadeonX4000.kext enthalten (das sind die beiden Polaris Treiber)


    Du brauchst für diese Grafikkarte die DeviceProprties


    device-id (data) DF670000

    model (string) AMD Radeon RX 580 2048SP


    .. und für Metal-Unterstützung noch

    ATY,FamilyName (String) Radeon RX

    ATY,DeviceName (String) 580 2048SP



    Arkturus .. Du bist sicher Deine Device ID ist 0x6fdf und nicht 0x67df?, 6FDF wird definitiv nicht an den Polaris Treiber anbinden (IOPCI-miss-Match) .. meine normale RX 580 (67DF) ging auch einfach so ..


    EDIT:

    Macwolf .. ich hab mir grade mal deine EFI angesehen .. die DeviceProperties gehören schon nach ->Add .. so, wie Du das eingetragen hast, wird das nix ..


    überarbeitete Version anbei.


    DU MUSST DRINGEND EIN USB-MAPPING DURCHFÜHREN .. USBInjectAll sollte nicht mehr verwendet werden

    Dateien

    • config.plist

      (33,54 kB, 54 Mal heruntergeladen, zuletzt: )

    uhh .. das ist ne RX 580 2048SP, (Device ID 0x6FDF) .. die wird ggf. nicht OOB unterstützt, schau mal im AMD9500er kext nach, ob's da ein IOPCIMatch für gibt .. (ich kann das auch später noch machen, bin grade unterwegs)


    wahrscheinlich mußt Du die ID spoofen als ne nicht abgespeckte RX 580 (0x67DF)

    ich nutze hier jeweils einen Libratone ZIPP und ZIPP Mini der ersten Generation, .. weil wir auch keine Alexa wollten .. klasse Dinger als mobiles INet Radio und AirPlay Device, wir sind voll auf zufrieden ..


    der ZIPP Mini is sowas wie ne eierlegende Wollmilchsau .. BT, AirPlay und bei Bedarf Powerbank, falls man mal unterwegs is .. großartig!