Linux 5.9.1 ATI NAVI Reset Patch (getestet an RX 5700 XT auf Debian 10)
Thanks to @Gnif (Level1Techs - Reddit)
Wer mit Qemu/VFIO spielt und eine aktuellere ATI Radeon Grafikkarte in eine VM durchreichen möchte, wird spätestens nach einem Reboot auf folgende Fehlermeldung stoßen: Error: internal error: Unknown PCI header type ‘127’.
Ursache dafür sind spezielle Anforderungen vom Hersteller wie die Karte bei einem Reboot ordnungsgemäß zu resetten ist. Da die Karte bei einem VM-Reboot bereits durch das physische sowie durch ein virtuelles BIOS bzw. EFI konfiguriert wurde und die Specs für einen ordentlichen Reset von ATI nicht öffentlich sind, ist es ohne Tricks nicht möglich die Karte ohne einen Reboot des Wirt-Systems wieder zum laufen zu bekommen. Gnif hat in Zusammenarbeit und mit NDA Informationen von AMD einen Weg gefunden die Karte zu resetten und einen Kernel Patch geschrieben, der zwar das Problem akut löst, aber nicht die eigentlich Lösung ist.
Wer auf ATI zurückgegriffen hat weil “Fuck you NVIDIA!”, schaut gerade mächtig in die Röhre.
Der Patch ist auf level1techs.com zu finden, einem dynamisch nachladendem Board, was sich meiner Meinung nach absolut nicht dazu eignet Patches zu verteilen. Eine dezentrale Kopie davon, leicht justiert für Linux Kernel 5.9.1, habe ich hier zwischengelagert: /files/vfio-ati-navi-patch-Linux5_9_1.patch Gerüchtweise wird der Patch von einigen Distributionen wir Manjaro bereits standardmäßig verteilt. Wer mit z.B. Debian 10 unterwegs ist, besorgt sich den aktuellen Kernel von kernel.org und patcht sich die Änderungen selbst nach:
patch -Np1 < ~/Downloads/vfio-amd-patch-Linux5_9_1.patch
Danach überlebt die Karte auch einen VM reboot, funktioniert unter Microsoft Windows aber NUR mit dem WHQL Treiber, der durch Microsoft Update ausgerollt wird. Die Installation der letzten ATI Treiber schlägt fehl, vermutlich weil der Installer die Karte mehrfach resettet und gezielt initialisiert, von dem das Wirt-System nichts weiß.
Nachtrag, funktioniert mit dem gleichen Patch ebenfalls auf:
- Linux 5.9.2
- Linux 5.9.3
- Linux 5.9.6
Mehr zu IOMMU/VFIO Späße in späteren Beiträgen.