I recently had a conversation with Wenchao (creator of AMD Zen4/Zen5 IPMI Thermal Driver for ESX Fling and Realtek Network Driver for ESX Fling) about the incredible work he has done to support the VMware/Broadcom community. His latest contributions has really closed the capability gap when running ESX on popular AMD Ryzen platforms like the Minisforum MS-A2, which been an ideal system for running VMware Cloud Foundation (VCF) 9.1 in a lab environment.
The only remaining capability we have not yet been able to take advantage of is the integrated graphics (iGPU) on modern AMD Ryzen systems, which have become surprisingly powerful for running AI models.
While this has been a topic I have researched quite extensively and even spent time debugging with Engineering, it is always great to get a new perspective on things. I kid you not, a few days later Wenchao came back with a solution that had a few caveats which I was able to help iron out with some of my prior experience in this area. 😆
While I fully credit Wenchao for solving this for ESX, he definitely benefited from the earlier efforts of the Proxmox community, who have also faced similar challenges with iGPU passthrough and have found a viable workaround! 👏
Long story short, for an AMD iGPU to be usable by a VM running on ESX (or Proxmox), both the VBIOS rom and GOP (Graphics Output Protocol) file is required. While you can extract and generate your own VBIOS and GOP files (see below for the instructions), the Proxmox community have already contributed a number of these files to the Github repo, which you can used directly.
If you can not find your exact system, you may need to generate your own VBIOS and GOP files, which you can then contribute back to benefit the broader IT community. I personally have been able to test and validate both my Minisforum MS-A2 (Ryzen 9 7945HX) and GMKtek K11 (Ryzen 9 8945HS) using VBIOS and GOP rom files found within the Github repo with an Ubuntu 26.04 VM by following the instructions below.
Step 1 - Download your respective iGPU VBIOS and Audio rom file from https://github.com/isc30/ryzen-gpu-passthrough-proxmox
Minisforum MS-A2
- VBIOS ROM: https://github.com/isc30/ryzen-gpu-passthrough-proxmox/blob/main/vbios_7945hx_MS-A2.bin
- GOP ROM: https://github.com/isc30/ryzen-gpu-passthrough-proxmox/blob/main/AMDGopDriver.rom
GMKtek K11
- VBIOS ROM: https://github.com/isc30/ryzen-gpu-passthrough-proxmox/blob/main/vbios_8945.bin
- GOP ROM: https://github.com/isc30/ryzen-gpu-passthrough-proxmox/blob/main/AMDGopDriver.rom
Step 2 - Upload both rom files into ESX datastore, you can either place the files into a shared directory or directly within the VM folder which you will need to wait until Step 4 has been completed.
Step 3 - Enable passthrough for the AMD iGPU using the vSphere UI or the ESX Host Client as shown in the screenshots below.
Minisforum MS-A2

Step 4 - Create a Linux VM (e.g. Ubuntu) using the vSphere UI or the ESX Host Client and then install the operating system. In my example, I am using Ubuntu 26.04 and you will want to enable RDP and ensure it is functional before proceeding to the next step as we will need to disable the default VMware SVGA device.
apt update && sudo apt upgrade -y apt install -y xrdp xfce4 xfce4-goodies echo "startxfce4" > ~/.xsession adduser xrdp ssl-cert systemctl enable xrdp systemctl restart xrdp ufw allow 3389/tcp ufw reload
Once you have confirmed the VM is accessible over SSH and RDP, you can shutdown the VM.
Step 5 - Edit the VM and add the two PCI devices: iGPU and Audio Controller, make a note of the order in which the devices are added as this will be important in the next step.
Minisforum MS-A2

Step 6 - Continue editing the VM and now click on the Advanced Parameters tab where you will add the following settings. Ensure rom filename for pciPassthru0 and pciPassthru1 matches the order of PCI devices that was used in previous step (e.g iGPU and then Audio Controller). The filename for rom file can be local path as shown below where the file is stored alongside the VM configuration files within the vSphere Datastore or a shared directory where the full path of the vSphere Datastore must bbe used (e.g /vmfs/volumes/datastore1/files/vbios_7945hx_MS-A2.bin)
In addition, we also need to set the svga.present to FALSE, which will disable the VMware SVGA device and disable the VM Console, which is why Step 4 is important, so that we can access the system after we power on the VM.
Minisforum MS-A2
- pciPassthru0.opromEnabled = TRUE
- pciPassthru0.filename = "vbios_7945hx_MS-A2.bin"
- pciPassthru1.opromEnabled = TRUE
- pciPassthru1.filename = "AMDGopDriver.rom"
GMKtek K11
- pciPassthru0.opromEnabled = TRUE
- pciPassthru0.filename = "vbios_8945.bin"
- pciPassthru1.opromEnabled = TRUE
- pciPassthru1.filename = "AMDGopDriver.rom"
Once you have made all the changes, go ahead and click OK to complete the reconfiguration.
I have found manually adding the VM Advanced Setting can be quite error prone, so after you have manually added the two iGPU and Audio Controller, you can run the following PowerCLI snippet to automate the above with your own values.
$settings = @{
"pciPassthru0.opromEnabled" = "TRUE"
"pciPassthru0.filename" = "vbios_7945hx_MS-A2.bin"
"pciPassthru1.opromEnabled" = "TRUE"
"pciPassthru1.filename" = "AMDGopDriver.rom"
}
$vm = Get-Vm "Ubuntu2604"
foreach ($setting in $settings.GetEnumerator()) {
New-AdvancedSetting -Entity $vm -Name $setting.Key -Value $setting.Value -Force -Confirm:$false
}
$vm | Get-AdvancedSetting -Name "svga.present" | Set-AdvancedSetting -Value $false -Confirm:$false
Step 7 - Power on the VM and SSH to the system and run the following command to verify that iGPU has been detected and fully initialized.
dmesg | grep 'Initialized amdgpu'
Minisforum MS-A2

Step 8 - You can install additional AMD tools such rocminfo and rocm-smi which all work once the iGPU is available.
apt install firmware-amd-graphics firmware-linux-nonfree mesa-utils mesa-utils- extra mesa-vulkan-drivers -y
apt install radeontool vulkan-tools amd-smi -y
apt install -y rocm rocm-smi
Minisforum MS-A2
Passthrough of iGPU to Windows
It looks like the Proxmox community has also observed the notorious Error 43 issue when using an AMD iGPU passthrough with Windows. Leveraging this information, Wenchao and I was able to do some experimentation to get this working for ESX, but I will say for my own setup, it was not very consistent or reliable ... In any case, I will share our findings and perhaps this will help some folks who may be interested in using this in a Windows setup.
Step 1 - Add the following to /etc/vmware/passthru.map on your ESX host, which will ensure when you enable iGPU passthrough, that USB devices on the system is accessible and is not passthrough to VM. You will need to reboot ESX host once you have saved your changes.
# AMD Graphics 1002 164e d3d0 default 1002 1640 d3d0 default
Step 2 - Download your respective iGPU VBIOS and Audio rom file from https://github.com/isc30/ryzen-gpu-passthrough-proxmox
Minisforum MS-A2
- VBIOS ROM: https://github.com/isc30/ryzen-gpu-passthrough-proxmox/blob/main/vbios_7945hx_MS-A2.bin
- GOP ROM: https://github.com/isc30/ryzen-gpu-passthrough-proxmox/blob/main/AMDGopDriver.rom
Step 3 - Upload both rom files into ESX datastore, you can either place the files into a shared directory or directly within the VM folder which you will need to wait until Step 4 has been completed.
Step 4 - Enable passthrough for the AMD iGPU using the vSphere UI or the ESX Host Client as shown in the screenshots below.
Minisforum MS-A2

Step 5 - Create a Windows VM and install the operating system. Our experiments used a Windows 11 VM, it may or may not work with earlier versions. Make sure to enable RDP before shutting down the VM and proceeding to the next step.
Step 6 - Edit the VM and add the two PCI devices: iGPU and Audio Controller, make a note of the order in which the devices are added as this will be important in the next step.
Minisforum MS-A2

Step 6 - Continue editing the VM and now click on the Advanced Parameters tab where you will add the following settings. Ensure rom filename for pciPassthru0 and pciPassthru1 matches the order of PCI devices that was used in previous step (e.g iGPU and then Audio Controller). The filename for rom file can be local path as shown below where the file is stored alongside the VM configuration files within the vSphere Datastore or a shared directory where the full path of the vSphere Datastore must bbe used (e.g /vmfs/volumes/datastore1/files/vbios_7945hx_MS-A2.bin)
In addition, we also need to set the svga.present to FALSE, which will disable the VMware SVGA device and disable the VM Console, which is why Step 5 is important, so that we can access the system after we power on the VM.
$settings = @{
"pciPassthru0.opromEnabled" = "TRUE"
"pciPassthru0.filename" = "vbios_7945hx_MS-A2.bin"
"pciPassthru1.opromEnabled" = "TRUE"
"pciPassthru1.filename" = "AMDGopDriver.rom"
}
$vm = Get-Vm "Ubuntu2604"
foreach ($setting in $settings.GetEnumerator()) {
New-AdvancedSetting -Entity $vm -Name $setting.Key -Value $setting.Value -Force -Confirm:$false
}
$vm | Get-AdvancedSetting -Name "svga.present" | Set-AdvancedSetting -Value $false -Confirm:$false
Step 7 - Power on the VM and download the latest AMD graphics drivers using the offline driver (AMD Software: Adrenalin Edition). For my MS-A2 Ryzen 9 7945HX, I had used https://www.amd.com/en/support/downloads/drivers.html/processors/ryzen/ryzen-7000-series/amd-ryzen-9-7945hx.html and you will need to install 7zip to extract the file and install the driver by pointing it to drivers folder within Windows Device Manager
Step 8 - Per the Proxmox community, it was found that by adding a startup/shutdown script to setup the device via pnputil, that the Error 43 issue would go away. While Wenchao has had luck with his setup which is using a different AMD system than what I was using, this did not have any affect and I still ran into Error 43 issue.
In any case, you can run the following PowerShell code (requires administrator shell) to automatically add the required entries, since I found manually performing this task a bit tedious
# Run as Administrator
$gpPath = "$env:WINDIR\System32\GroupPolicy\Machine\Scripts"
$scriptsIni = Join-Path $gpPath "scripts.ini"
New-Item -ItemType Directory -Force -Path $gpPath | Out-Null
@"
[Startup]
0CmdLine=C:\Windows\System32\pnputil.exe
0Parameters=/enable-device /class Display /bus PCI /connected
[Shutdown]
0CmdLine=C:\Windows\System32\pnputil.exe
0Parameters=/disable-device /class Display /bus PCI /connected
"@ | Set-Content -Path $scriptsIni -Encoding Unicode
# Make sure Local Group Policy folder exists
$gptIni = "$env:WINDIR\System32\GroupPolicy\gpt.ini"
if (-not (Test-Path $gptIni)) {
@"
[General]
Version=1
"@ | Set-Content -Path $gptIni -Encoding ASCII
}
gpupdate /force
At this point you can perform a guest reboot and upon the next reboot, the iGPU should no longer show the Error 43.
Step 9 (Optional) - Since this was not the behavior I had observed even after half dozen attempts, I found that you can manually run the disable and enable command which will force the change after the system has booted up but still hitting the Error 43. You can the following commands with administrative shell:
C:\Windows\System32\pnputil.exe /disable-device /class Display /bus PCI C:\Windows\System32\pnputil.exe /enable-device /class Display /bus PCI

If you have Windows Device Manager open, after running these command it will refresh the UI and you should see that the AMD iGPU is now active and working properly.

Note: YMMV with Step 8 and 9, since I was not able to observe that setting up the startup/shutdown scripts that would automatically enable/disable the device, that Step 9 had worked for me.
Extracting your own VBIOS ROM File
Step 1 - Boot the host that you wish to extract the VBIOS from into Linux (Ubuntu Live is sufficient) and then compile the vbios.c file.
apt install gcc -y
gcc vbios.c -o vbios
Step 2 - Run compiled vbios application to dump the VBIOS ROM file
./vbios
Extracting your own Audio Device ROM File
The instructions below will require a Windows system.
Step 1 - Download the BIOS package from your vendor, you will need to extract the BIOS BIN file (e.g. F1WSA.BIN) and then rename the file to bios.bin
Step 2 - Download the EFI extract tool (UBU_v1_80_a17.rar) and then extract its content into the same directory as the BIOS BIN file from the previous step.
Step 3 - Run the UBU.bat script which will automatically read the BIOS file and choose the following options:
- 2 (for Video OnBoard)
- X (for Extracted)
Then press any key to continue and close the window
You should see a file named AMDGopDriver.efi that is saved under Extracted->GOP-><version>
Step 4 - Download the EfiRom tool (EfiRom.exe) into the same directory as the rest of the extracted files
Step 5 - You will need to boot the host with ESX to retrieve the VendorID and DeviceID
lspci -v | grep -A2 'High Definition Audio Controller'
![]()
Step 6 - Convert the EFI file to ROM file using the VendorID and DeviceID from the previous step.
EfiRom.exe -f <VendorID> -i <DeviceId> -e AMDGopDriver.efi -o AMDGopDriver.rom
At this point you have successfully generated a VBIOS and Audio ROM Files! 😎








Thank you very much for this article. This topic is very important to me, as I need to try my hand at hardware transcoding and large-scale language models. But all the articles I’ve found on the subject have got me nowhere, despite spending days testing them.
I also have an MS-a2 model with a 7945HX, but I can’t get the VM to initialise the GPU correctly. Should I install the OS (Debian) in UEFI or Legacy mode? Is it essential to enable IOMMU?
Thank you in advance for your help.