** VIDEO GUIDE - How to Easily Dump a vBIOS from any GPU directly from the Server for passthrough


Recommended Posts

On 1/1/2021 at 8:57 AM, DrMucki said:

Trying to dump a bios from a Ryzen 4650g APU was not possible. It was the only graphics in the system and was bound to the vfio,

bit it still gave errors... is it possible to dump the vbios from An apu?

 

Has anybody tried to do so? Can anybody help or provide a dump of a Ryzen 4650g APU?

 

I added a VBIOS from my "old" AMD Radeon R7-370+ with 2GB

AMD Radeon R7-370_2G.rom 121 kB · 0 downloads

 

Same for Ryzen 5700G. Help appreciated!

Link to comment
  • 1 month later...
  • 2 weeks later...

Hi All,

 

Is this method still required? I added a 2nd GPU for my VM a NVIDIA GeForce GT 710 (05:00.0) but when I added it to VM template along with the sound on (05:00.1) the VM doesnt start up. Been awhile since I have done this and wasnt sure if I still need to dump the vbios.

 

I have the following 

Nvidia Driver Version:470.74

Installed GPU(s):0:
NVIDIA GeForce GTX 1650
03:00.0

1:
NVIDIA GeForce GT 710
05:00.0

 

The GTX 1650 is used for Plex Transcoding and works and I want to use the GT 710 for a VM as I had it doing nothing and guessing it will be better than just using VNC

Edited by bally12345
Link to comment
55 minutes ago, bally12345 said:

Hi All,

 

Is this method still required? I added a 2nd GPU for my VM a NVIDIA GeForce GT 710 (05:00.0) but when I added it to VM template along with the sound on (05:00.1) the VM doesnt start up. Been awhile since I have done this and wasnt sure if I still need to dump the vbios.

 

I have the following 

Nvidia Driver Version:470.74

Installed GPU(s):0:
NVIDIA GeForce GTX 1650
03:00.0

1:
NVIDIA GeForce GT 710
05:00.0

 

The GTX 1650 is used for Plex Transcoding and works and I want to use the GT 710 for a VM as I had it doing nothing and guessing it will be better than just using VNC

 

Looks like I am having same issue as some others 

 

Script location: /tmp/user.scripts/tmpScripts/Vbios dump/script
Note that closing this window will abort the execution of this script
You have selected this device to dump the vbios from
05:00.0 VGA compatible controller: NVIDIA Corporation GK208B [GeForce GT 710] (rev a1)

This does look like a valid GPU to me. Continuing .........


Checking if location to put vbios file exists
Vbios folder already exists

I will try and dump the vbios without disconnecting and reconnecting the GPU
This normally only works if the GPU is NOT the Primary or the only GPU
I will check the vbios at the end. If it seems wrong I will then retry after disconnecting the GPU

Defining temp vm with gpu attached
Domain 'dumpvbios' defined from /tmp/dumpvbios.xml

Starting the temp vm to allow dump
Domain 'dumpvbios' started

Waiting for a few seconds .....

Stopping the temp vm
Domain 'dumpvbios' destroyed

Removing the temp vm
Domain 'dumpvbios' has been undefined



Okay dumping vbios file named GT710.rom to the location /mnt/user/isos/vbios/
cat: rom: Input/output error

Um.... somethings gone wrong and I couldn't dump the vbios for some reason
Sometimes when this happens all we need to do to fix this is 'stub' or 'bind to the vfio' the gpu and reboot the server

This can be done in Unraid 6.8.3 with the use of the vfio config plugin or if you are on Unraid 6.9 or above it can be done
directly from the gui in Tools/System Devices .....So please do this and run the script again

 

 

I binded it using System Devices and rebooted, so for now just downloaded dump from techpowerup

Link to comment
1 hour ago, bally12345 said:

 

Looks like I am having same issue as some others 

 

Script location: /tmp/user.scripts/tmpScripts/Vbios dump/script
Note that closing this window will abort the execution of this script
You have selected this device to dump the vbios from
05:00.0 VGA compatible controller: NVIDIA Corporation GK208B [GeForce GT 710] (rev a1)

This does look like a valid GPU to me. Continuing .........


Checking if location to put vbios file exists
Vbios folder already exists

I will try and dump the vbios without disconnecting and reconnecting the GPU
This normally only works if the GPU is NOT the Primary or the only GPU
I will check the vbios at the end. If it seems wrong I will then retry after disconnecting the GPU

Defining temp vm with gpu attached
Domain 'dumpvbios' defined from /tmp/dumpvbios.xml

Starting the temp vm to allow dump
Domain 'dumpvbios' started

Waiting for a few seconds .....

Stopping the temp vm
Domain 'dumpvbios' destroyed

Removing the temp vm
Domain 'dumpvbios' has been undefined



Okay dumping vbios file named GT710.rom to the location /mnt/user/isos/vbios/
cat: rom: Input/output error

Um.... somethings gone wrong and I couldn't dump the vbios for some reason
Sometimes when this happens all we need to do to fix this is 'stub' or 'bind to the vfio' the gpu and reboot the server

This can be done in Unraid 6.8.3 with the use of the vfio config plugin or if you are on Unraid 6.9 or above it can be done
directly from the gui in Tools/System Devices .....So please do this and run the script again

 

 

I binded it using System Devices and rebooted, so for now just downloaded dump from techpowerup

 

Cant seem to get passed code 43 so only getting 640x480... Edited my XML to add multifuncton='on'

 

<?xml version='1.0' encoding='UTF-8'?>
<domain type='kvm'>
  <name>Windows 10</name>
  <uuid>6adf78b3-580c-c31b-a250-1852ee4565fd</uuid>
  <metadata>
    <vmtemplate xmlns="unraid" name="Windows 10" icon="windows.png" os="windows10"/>
  </metadata>
  <memory unit='KiB'>16777216</memory>
  <currentMemory unit='KiB'>16777216</currentMemory>
  <memoryBacking>
    <nosharepages/>
  </memoryBacking>
  <vcpu placement='static'>8</vcpu>
  <cputune>
    <vcpupin vcpu='0' cpuset='6'/>
    <vcpupin vcpu='1' cpuset='18'/>
    <vcpupin vcpu='2' cpuset='7'/>
    <vcpupin vcpu='3' cpuset='19'/>
    <vcpupin vcpu='4' cpuset='8'/>
    <vcpupin vcpu='5' cpuset='20'/>
    <vcpupin vcpu='6' cpuset='9'/>
    <vcpupin vcpu='7' cpuset='21'/>
  </cputune>
  <resource>
    <partition>/machine</partition>
  </resource>
  <os>
    <type arch='x86_64' machine='pc-i440fx-6.0'>hvm</type>
  </os>
  <features>
    <acpi/>
    <apic/>
    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
      <vendor_id state='on' value='none'/>
    </hyperv>
  </features>
  <cpu mode='host-passthrough' check='none' migratable='on'>
    <topology sockets='1' dies='1' cores='4' threads='2'/>
    <cache mode='passthrough'/>
  </cpu>
  <clock offset='localtime'>
    <timer name='hypervclock' present='yes'/>
    <timer name='hpet' present='no'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/local/sbin/qemu</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw' cache='writeback'/>
      <source file='/mnt/user/domains/Windows 10/vdisk1.img'/>
      <target dev='hdc' bus='virtio'/>
      <boot order='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/mnt/user/iso/cyg-win1803x64en.iso'/>
      <target dev='hda' bus='ide'/>
      <readonly/>
      <boot order='2'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/mnt/user/iso/virtio-win-0.1.173-2.iso'/>
      <target dev='hdb' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
    </disk>
    <controller type='pci' index='0' model='pci-root'/>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </controller>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='qemu-xhci' ports='15'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:2c:c4:f4'/>
      <source bridge='br0'/>
      <model type='virtio-net'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target type='isa-serial' port='0'>
        <model name='isa-serial'/>
      </target>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <channel type='unix'>
      <target type='virtio' name='org.qemu.guest_agent.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <input type='tablet' bus='usb'>
      <address type='usb' bus='0' port='1'/>
    </input>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <sound model='ich9'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
    </sound>
    <audio id='1' type='none'/>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x05' slot='0x00' function='0x0'/>
      </source>
      <rom file='/mnt/user/iso/vbios/Asus.GT710.2048.170525.rom'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x05' slot='0x00' function='0x1'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
    </hostdev>
    <memballoon model='none'/>
  </devices>
  <seclabel type='dynamic' model='dac' relabel='yes'/>
</domain>

 

Going back to VNC for now, but if anyone can point me in right direction I would appriciate it. Boot mode is set to legacy.

Link to comment

Anyone know why I am unbale to bind group 36 37

 

Loading config from /boot/config/vfio-pci.cfg
BIND=0000:05:00.0|10de:128b 0000:05:00.1|10de:0e0f
---
Processing 0000:05:00.0 10de:128b
Vendor:Device 10de:128b found at 0000:05:00.0

IOMMU group members (sans bridges):
/sys/bus/pci/devices/0000:05:00.0/iommu_group/devices/0000:05:00.0

Binding...
chown: cannot access '/dev/vfio/36': No such file or directory
Error: unable to adjust group ownership of /dev/vfio/36
---
Processing 0000:05:00.1 10de:0e0f
Vendor:Device 10de:0e0f found at 0000:05:00.1

IOMMU group members (sans bridges):
/sys/bus/pci/devices/0000:05:00.1/iommu_group/devices/0000:05:00.1

Binding...
chown: cannot access '/dev/vfio/37': No such file or directory
Error: unable to adjust group ownership of /dev/vfio/37
---
vfio-pci binding complete

Devices listed in /sys/bus/pci/drivers/vfio-pci:
lrwxrwxrwx 1 root root 0 Oct 26 10:38 0000:05:00.0 -> ../../../../devices/pci0000:00/0000:00:03.0/0000:05:00.0
lrwxrwxrwx 1 root root 0 Oct 26 10:38 0000:05:00.1 -> ../../../../devices/pci0000:00/0000:00:03.0/0000:05:00.1

ls -l /dev/vfio/
ls: cannot access '/dev/vfio/': No such file or directory

 

Assuming this is why I am unbale to dump the vbios

Link to comment
  • 3 weeks later...
  • 1 month later...

Im in the same scenerio with a 3090 Founders. It seems some have been able to leave the vbios blank but my setup doesnt post without it. When I also run the script I get either an error telling me to bind the item (even though vfio binding is already in place) or more likely it posts some file (or some random file) that is under 70kb. i have looked over the script and I think (and i may be very wrong) that the script is no longer able to pull vbios using the temp vm created. I observed that it doesnt post 1. at all. or 2. if it does it errors out. I am kind of stuck currently in limbo (or shutting the server down to go baremetal.

Edited by TPNuts
Misspelling
Link to comment
  • 3 weeks later...
  • 2 weeks later...
  • 4 weeks later...

If I have an Nvidia gpu (single gpu and no igpu). Do I need it to be binded in vfid-pci or not when running this script? 

 

When I complete this process fully (have dumped vbios) do I need to bind the gpu or can I leave it unbinded so I can use it for unraid until my VM is started and after vm is shut down? 

Edited by theone
Link to comment
  • 1 month later...
On 3/15/2021 at 4:29 AM, lnxd said:

Thank you! This is just what I was looking for.

 

Just one small bug that's easily worked around that affected both AMD cards I have: they are named Radeon RX 470/480/570/570X/580/580X/590 and Radeon RX 5500/5500M / Pro 5500M. This causes the script to try to save a file as eg. "/mnt/user/appdata/isos/vbios/Radeon RX 470/480/570/570X/580/580X/590" which of course on a linux based system doesn't work. The script then fails and causes a generic error, there's a few issues on the repo's GitHub page that look like they could be due to the same error as well.

 

The affected line is #294.

 

It's not like @SpaceInvaderOne didn't warn me via the Readme that it will try to make a name before I wasted about 20 mins on the wrong path 😅 Maybe next time I'll read the documentation more closely.

 

Until @SpaceInvaderOne has a chance to review it, all anyone with an AMD card needs to do is set the "vbiosname" variable to a suitable name.

Thanks.  Finding this comment helped me fix a very frustrating problem with my RX570.  Still isn't working in Win10 but got Big Sur running. 

Link to comment
  • 4 weeks later...

Hi SpaceInvaderOne,

 

I used your script on my aged HP Z800 dual x5690 workstation with no issue.  I have dual EVGA GTX 1050 Ti 4 GB 86.07.22.00.50 cards in my machine, and dumped the BIOS quickly enough.  The ACPI shutdown caught me off guard with a quiet little panic when the fans went silent, LOL.

 

I tried using the vbios from Techpowerup and HxD the extra header out as per your instructional video, but in the end, this file is a lot smaller, and WORKS!

 

Anyway, my file is attached as I was unable to upload to your github page.

EVGA_4GB_1050ti-ver.86.07.22.00.50.rom

Link to comment
  • 1 month later...

Hi i am trying to get the vBIOS from my integrated AMD Ryzen 5600G and am facing some issues:

############################################################

Script location: /tmp/user.scripts/tmpScripts/vBIOS Dump/script
Note that closing this window will abort the execution of this script
You have selected this device to dump the vbios from
30:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Cezanne (rev c9)

This does look like a valid GPU to me. Continuing .........


Checking if location to put vbios file exists
Vbios folder already exists

I will try and dump the vbios without disconnecting and reconnecting the GPU
This normally only works if the GPU is NOT the Primary or the only GPU
I will check the vbios at the end. If it seems wrong I will then retry after disconnecting the GPU

Defining temp vm with gpu attached
Domain 'dumpvbios' defined from /tmp/dumpvbios.xml

Starting the temp vm to allow dump
Domain 'dumpvbios' started

Waiting for a few seconds .....

Stopping the temp vm
Domain 'dumpvbios' destroyed

Removing the temp vm
Domain 'dumpvbios' has been undefined


/tmp/user.scripts/tmpScripts/vBIOS Dump/script: line 298: rom: Permission denied

Okay dumping vbios file named AMDGPU.rom to the location /mnt/user/gpu_bios
cat: rom: No such file or directory

Um.... somethings gone wrong and I couldn't dump the vbios for some reason
Sometimes when this happens all we need to do to fix this is 'stub' or 'bind to the vfio' the gpu and reboot the server

This can be done in Unraid 6.8.3 with the use of the vfio config plugin or if you are on Unraid 6.9 or above it can be done
directly from the gui in Tools/System Devices .....So please do this and run the script again

############################################################

 

I have disabled binding, and tried to chmod the tmp folder where the script is without success. 

Can you please help?

Edited by merlin.sammetinger
Link to comment
55 minutes ago, merlin.sammetinger said:

I have disabled binding, and tried to chmod the tmp folder where the script is without success. 

Can you please help?

Dumping the vbios for integrated gpu can be very tricky or not possible at all in some cases.

In this case, it is suggested to download your motherboard bios from the manufacturer, or dump the mb bios (same version, same revision) and then extract the vbios from it.

 

You could follow these steps:

https://forums.unraid.net/topic/112649-amd-apu-ryzen-5700g-igpu-passthrough-on-692/?do=findComment&comment=1134762

 

Link to comment
  • 5 weeks later...

I have had success dumping vbios on a ASUS Gt1030.  Tried on a new machine the other day and got a warning that the file might be a bit small. (<> 50kb) The previous dumps on the same card were around 130k.

 

The 50 k version also does not work.

 

Cant explain what went wrong other than I might have done the good dump using unraid 6.9.2 and the bad one using 6.10.3.

 

Could the unraid version be a factor?

Link to comment
  • 2 weeks later...

I installed a 3060Ti and I keep trying to use the script to dump the vbios but this is the errors I am getting.

 

 

Script location: /tmp/user.scripts/tmpScripts/Dump Vbios v2/script
Note that closing this window will abort the execution of this script
You have selected this device to dump the vbios from
01:00.0 VGA compatible controller: NVIDIA Corporation GA104 [GeForce RTX 3060 Ti Lite Hash Rate] (rev a1)

This does look like a valid GPU to me. Continuing .........


Checking if location to put vbios file exists
Vbios folder already exists

Disconnecting the graphics card
tee: '/sys/bus/pci/devices/0000\:01\:00.0/remove': No such file or directory
1
Entered suspended (sleep) state ......

PRESS POWER BUTTON ON SERVER TO CONTINUE

Rescanning pci bus
1
Graphics card has now sucessfully been disconnected and reconnected
It is now ready to begin the dump vbios process

Defining temp vm with gpu attached
Domain 'dumpvbios' defined from /tmp/dumpvbios.xml

Starting the temp vm to allow dump
error: Failed to start domain 'dumpvbios'
error: internal error: qemu unexpectedly closed the monitor: 2022-08-21T02:33:21.962135Z qemu-system-x86_64: -device vfio-pci,host=0000:01:00.0,id=hostdev0,bus=pci.2,addr=0x0: vfio 0000:01:00.0: group 1 is not viable
Please ensure all devices within the iommu_group are bound to their vfio bus driver.

Waiting for a few seconds .....

Stopping the temp vm
error: Failed to destroy domain 'dumpvbios'
error: Requested operation is not valid: domain is not running

Removing the temp vm
Domain 'dumpvbios' has been undefined



Okay dumping vbios file named GeForce RTX 3060 Ti Lite Hash Rate to the location /mnt/user/isos/vbios/
/mnt/user/isos/vbios/GeForce RTX 3060 Ti Lite Hash Rate is less than 70kb
This seems too small. Probably the GPU is Primary and needs disconnecting and reconnecting to get proper vbios

Running again
Disconnecting the graphics card
tee: '/sys/bus/pci/devices/0000\:01\:00.0/remove': No such file or directory
1
Entered suspended (sleep) state ......

PRESS POWER BUTTON ON SERVER TO CONTINUE

Rescanning pci bus
1
Graphics card has now sucessfully been disconnected and reconnected
It is now ready to begin the dump vbios process

Defining temp vm with gpu attached
Domain 'dumpvbios' defined from /tmp/dumpvbios.xml

Starting the temp vm to allow dump
error: Failed to start domain 'dumpvbios'
error: internal error: qemu unexpectedly closed the monitor: 2022-08-21T02:35:33.805898Z qemu-system-x86_64: -device vfio-pci,host=0000:01:00.0,id=hostdev0,bus=pci.2,addr=0x0: vfio 0000:01:00.0: group 1 is not viable
Please ensure all devices within the iommu_group are bound to their vfio bus driver.

Waiting for a few seconds .....

Stopping the temp vm
error: Failed to destroy domain 'dumpvbios'
error: Requested operation is not valid: domain is not running

Removing the temp vm
Domain 'dumpvbios' has been undefined



Okay dumping vbios file named GeForce RTX 3060 Ti Lite Hash Rate to the location /mnt/user/isos/vbios/
/mnt/user/isos/vbios/GeForce RTX 3060 Ti Lite Hash Rate is less than 70kb
This seems small but maybe its correct. Please try it. All done !

Link to comment
  • 2 months later...

I successfully (at least the script completed successfully, haven't tried it yet, will remove this note when I do) dumped the BIOS from an Nvidia 670GTX 2GB Gigabyte Windforce card.  I will attach the ROM and update with more deails assuming it works.

 

I had previously bound the GPU and Audio together to the VFIO with ACS (when testing, prior to script) but that was causing the script to fail.   in order for the script to work I had to remove that binding and reboot.  Then the script ran fine and produced the attached ROM file.

 

I ended up not using the VBIOS (so far) because I was able to enable ACS in my motherboard BIOS of my AM350 Pro4 Ryzen 2400G system (different than the Unraid ACS config referenced in the first paragraph) and that allowed the NVidia card and sound device to move in to their own IOMMU group and then be passed directly through to the VM.

 

I am testing with Linux Mint 21 using the OVMF bios type and no VBIOS set.

 

670gtx-vbios-dump.rom

Edited by Alex43
Link to comment
  • 2 months later...
On 12/29/2021 at 3:09 PM, Viperean said:

Does anyone have any tips or ideas to try when the script won’t continue after powering the server back on after the sleep step?

 

 It gets to that point, goes to sleep, and I go push the power button.  It comes back to life and the script never continues. 

Same boat, did you find a way to solve this?

Link to comment

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.   Restore formatting

  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.