This document attempts to consolidate all available information regarding the VBIOS ROMs for the venerable AMD Instinct MI50 - especially the 32 GB variant
Sources include
- TechPowerUp Forums
- https://andrealmeid.com/post/2020-05-01-vbios2/
and of course the great folks over at the gfx906 Discord group: https://discord.gg/ukcgqjQXsP
- AMD Instinct MI50
- Table of contents
- VBIOS
- Tools & commands
- Benchmarks
Warning: There are at least two versions of the MI50 32 GB out there:
- The original PCB version by AMD
- 64 ROPs and 256 TMUs
- multiple stickers on the back-plate
- The modified/simplified PCB from China
- 60 ROPs and 240 TMUs
- one sticker on the back-plate
Please see amdgpu_top below to check hardware
The following VBIOS variants have only been tested with the original PCB version by AMD.
Important details are to the right of the table, so make sure to scroll. :D
| Name | TechPowerUp # | VBIOS Version | rocm-smi --showvbios | Filename | MD5 (+ padded by amdvbflash) | UEFI in ROM? | Display? | ReBAR? | BAR size / CPU-visible VRAM | PCIe P2P inter-device? (rocm-bandwidth-test) | Max. PCIe Gen | PCIe link power saving | Power Cap | MinSCLK/MinMCLK MaxSCLK/MaxMCLK | Idle |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Apple Radeon Pro VII 32 GB | 276180, 278241 | 016.004.000.045.000000 (2019-11-18 14:11) | 113-D163A1XT-045 ("vbios3") | 276180.rom, 278241.rom, 32G_UEFI.rom | 512 KB: 08d3f76b81f113adc9eaeb10f59f7dec 1024 KB padded: b6f82c47f7f4bb126a1614874ecf4df8 | YES | YES | YES | 32 GB | YES | 3 !! | NO | 300 W | 1000/1000 1730/1000 | 27-29 W |
| Original AMD MI50 32 GB | 275395 | 016.004.000.064.016969 (2021-05-07 11:42) | 113-D1631711-100 ("vbios1") | 275395.rom | 512 KB: 73fbb91323e14267a93f6d1e4f6f0d33 1024 KB padded: bfb88a64f15883fa0a15e0e8efea1bc7 | NO (Legacy only) | NO | NO | 16 GB (Vulkan issue!) | NO | 4 | YES | 225 W | 930/350 1725/1000 | 17-21 W |
| AMD MI50 32 GB | 274474 | 016.004.000.056.013522 (2020-01-16 21:38) | 113-D1631700-111 ("vbios2") | 274474.rom | 512 KB: 06f5ba8a179b0295ecc043435096aceb 1024K padded: 470f479cc20160db3377c7b9e117fed5 | NO (Legacy only) | NO | YES | 32 GB | YES | 4 | YES | 225 W | 925/350 1725/1000 | 17-21 W |
| Radeon Pro V420 32 GB | - | 016.004.000.043.012098 (2019-05-02 11:36) | 113-D1640200-043 | V420.rom | 512 KB: 51901dcee3815b36e829d1076e2f7111 1024K padded: 063a68494802a16970e95660aa235a2c | YES | YES | YES | 32 GB | YES | 4 | YES, also steps down to Gen 1 on idle | 178 W | 925/350 1800/1000 | 15-21 W |
We are still testing, but currently I can only recommend the bottom two VBIOS. Unfortunately we can't have nice things. There is no one BIOS version to rule them all. 😄
If you need display output and lower power consumption, use "113-D1640200-043" (V420.rom). The 178 W power cap does cause a negligible 1% performance drop (load testing with vkpeak). With multiple GPUs in "round-robin" inference there is enough time for the junction/hotspot to cool down - so the power cap and thermals seem to be less of an issue. The card boosts to ~230 W quite a lot. Also throughput reported by rocm-bandwidth-test is actually 5-10% higher across the board and the SCLK clock is slightly higher (1800 MHz versus 1725 MHz).
If you want the default 225 W and don't need display output, use "113-D1631700-111" (274474.rom).
Both support PCIe Gen 4, ReBAR and 32 GB BAR size / "CPU-visible VRAM".
Mixing cards with different VBIOS versions seems to be an issue with ROCm - at least that is what I saw in my ollama tests (SCALE sig abort etc.) YMMV.
Thanks Merom Green @ gfx906 Discord server for the V420.rom file!
- Check other known VBIOS versions
https://github.com/stylesuxx/amdvbflash
sudo ./amdvbflash -i
Output:
AMDVBFLASH version 4.71, Copyright (c) 2020 Advanced Micro Devices, Inc.
adapter seg bn dn dID asic flash romsize test bios p/n
======= ==== == == ==== =============== ============== ======= ==== ================
0 0000 24 00 66A1 Vega20 GD25Q80C 100000 pass 113-D1631711-100
1 0000 27 00 66A1 Vega20 GD25Q80C 100000 pass 113-D1631711-100
2 0000 30 00 66A1 Vega20 GD25Q80C 100000 pass 113-D1631711-100
3 0000 33 00 66A1 Vega20 GD25Q80C 100000 pass 113-D1631711-100
sudo ./amdvbflash -ai
Output:
AMDVBFLASH version 4.71, Copyright (c) 2020 Advanced Micro Devices, Inc.
Adapter 0 SEG=0000, BN=24, DN=00, PCIID=66A11002, SSID=08341002)
Asic Family : Vega20
Flash Type : GD25Q80C (1024 KB)
Product Name : Vega20 A1 SERVER XL D16317-11 Hynix/Samsung 32GB Gen 24HI 600m
Bios Config File : D1631711.100
Bios P/N : 113-D1631711-100
Bios Version : 016.004.000.064.016969
Bios Date : 05/07/21 11:42
ROM Image Type : Legacy Image
ROM Image Details :
Image[0]: Size(41472 Bytes), Type(Legacy Image)
Adapter 1 SEG=0000, BN=27, DN=00, PCIID=66A11002, SSID=08341002)
Asic Family : Vega20
Flash Type : GD25Q80C (1024 KB)
Product Name : Vega20 A1 SERVER XL D16317-11 Hynix/Samsung 32GB Gen 24HI 600m
Bios Config File : D1631711.100
...
sudo ./amdvbflash -s 0 MY_AWESOME_VBIOS.rom
where 0 is the card ID.
Output:
AMDVBFLASH version 4.71, Copyright (c) 2020 Advanced Micro Devices, Inc.
0x100000 bytes saved, checksum = 0x62F6
amdvbflash will pad the dumped ROM file to the size of the installed Flash chip. So for a 1024 KB / 8 MBit Flash chip a VBIOS ROM that was initially 512 KB or less will be 1024 KB after dump. Therefore the table above also includes the MD5 sum of dumped files - in case you want to search the web for the checksum.
!!! USE AT YOUR OWN RISK - UNDERSTAND THE FLAGS FIRST !!!
-f Force flashing regardless of security checkings (e.g. AsicID &
BIOS file info check OR boot-up card).
-fp Force flashing bypassing BIOS P/N check.
-fa Force flashing bypassing already-programmed check.
-fv Force flashing bypassing newer BIOS version check.
sudo ./amdvbflash -f -fp -fa -fv -p 0 274474.rom
where 0 is the card ID.
Example:
# sudo ./amdvbflash -f -fp -fa -fv -p 3 274474.rom
AMDVBFLASH version 4.71, Copyright (c) 2020 Advanced Micro Devices, Inc.
Old SSID: 0834
New SSID: 0834
Old P/N: 113-D1631711-100
New P/N: 113-D1631700-111
The result of RSA signature verify is PASS.
Old DeviceID: 66A1
New DeviceID: 66A1
Old Product Name: Vega20 A1 SERVER XL D16317-11 Hynix/Samsung 32GB Gen 24HI 600m
New Product Name: Vega20 A1 SERVER XL D16317 Hynix/Samsung 32GB 8HI
Old BIOS Version: 016.004.000.064.016969
New BIOS Version: 016.004.000.056.013522
Flash type: GD25Q80C
Burst size is 256
80000/80000h bytes programmed
80000/80000h bytes verified
Restart System To Complete VBIOS Update.
Probably the most comprehensive tool to check all hardware details and metrics of a AMD GPU:
https://github.com/Umio-Yasuno/amdgpu_top
Use amdgpu_top -d to dump all info.
amdgpu_top -d | grep -B4 -A1 ROP
Shader Engine (SE) : 4
Shader Array (SA/SH) per SE: 1
CU per SA : 15
Total Compute Unit : 60
RenderBackend (RB) : 16 (64 ROPs)
Peak Pixel Fill-Rate : 115 GP/s
!!! USE AT YOUR OWN RISK - THIS WILL DESTROY YOUR CARDS IF USED INCORRECTLY !!!
Seriously please don't ruin your cards!
If you are looking for MI25 OC: https://krusic22.com/2025/08/09/mi25-overclocking/
"UPP: Uplift Power Play" allows modifying the Power Play tables at runtime without having having to resort to hacking the VBIOS - which by the way will not work on the MI50 due to the RSA signature checks at startup.
UPP seems to work without setting the amdgpu.ppfeaturemask=0xffffffff kernel param / module option.
If UPP can't access the /sys/class/drm/card*/device/pp_table you may want to add this kernel parameter to your /etc/default/grub (Debian based) GRUB_CMDLINE_LINUX variable to unlock the Power Play R/W feature.
https://github.com/sibradzic/upp (Leave him a ⭐!)
Install in Python 3 virtual env:
python3 -m venv upp
upp/bin/pip install upp
cd upp/binHere be dragons.
Be careful and double check the parameters you changed in the single-line bash commands below. Once again, use at your own risk!
In my tests once anything is written to /sys/class/drm/card*/device/pp_table either via UPP or manually, the power consumption of the targeted MI50 card increased by ~3 W (~19 W -> ~22 W) - even when just re-setting the boot-up default pp_table content. It seems like writing to the pp_table file disables the dynamic PCIe Link speed switching in V420.rom, causing slightly higher power draw:
Before writing to pp_table:
/sys/class/drm/card1/device/pp_dpm_pcie:0: 2.5GT/s, x4 80Mhz *
/sys/class/drm/card1/device/pp_dpm_pcie:1: 16.0GT/s, x4 773Mhz
After writing to pp_table:
/sys/class/drm/card1/device/pp_dpm_pcie:0: 2.5GT/s, x4 80Mhz
/sys/class/drm/card1/device/pp_dpm_pcie:1: 16.0GT/s, x4 773Mhz *
Any combination ("0" "1" "0 1") written to this register to force it back results in an error - even with amdgpu.ppfeaturemask=0xffffffff enabled.
echo "0" | sudo tee /sys/class/drm/card1/device/pp_dpm_pcie
0
tee: /sys/class/drm/card1/device/pp_dpm_pcie: Invalid argument
My current workaround is suspending and waking up the system (MSI MEG X570) for the PCIe registers to be fixed up. sudo rtcwake -s 20 -m mem Not ideal.
I am still investigating. If you know what is causing this and have a solution, please drop me a comment below or in the #general channel on the gfx906 Discord server (see link above). Thank you!
Change MI50_POWER below to a value in Watt.
Change MI50_CARDS to the relevant cards in /sys/class/drm/card* . May use standard bash comma-separated (0,1,2,3) or range format (0-3).
Check with rocm-smi.
MI50_POWER=300 && MI50_CARDS="0,1,2,3" && \
for MI50_CARD in /sys/class/drm/card[$MI50_CARDS]/device/pp_table; do \
sudo ./upp -p $MI50_CARD set --write \
SmallPowerLimit1=$MI50_POWER \
SmallPowerLimit2=$MI50_POWER \
BoostPowerLimit=$MI50_POWER \
smcPPTable/SocketPowerLimitAc0=$MI50_POWER \
smcPPTable/SocketPowerLimitDc=$MI50_POWER; \
doneChange MI50_MCLK below to a value in MHz.
Change MI50_CARDS to the relevant cards in /sys/class/drm/card* . May use standard bash comma-separated (0,1,2,3) or range format (0-3).
Check with rocm-smi and rocm-smi --setperflevel=high and some load with vkpeak.
MI50_MCLK=1050 && MI50_CARDS="0,1,2,3" && \
for MI50_CARD in /sys/class/drm/card[$MI50_CARDS]/device/pp_table; do \
sudo ./upp -p $MI50_CARD set --write \
smcPPTable/FreqTableUclk/2=$MI50_MCLK \
smcPPTable/FreqTableUclk/3=$MI50_MCLK; \
doneChange MI50_SCLK below to a value in MHz.
Change MI50_CARDS to the relevant cards in /sys/class/drm/card* . May use standard bash comma-separated (0,1,2,3) or range format (0-3).
Check with rocm-smi and rocm-smi --setperflevel=high and some load with vkpeak.
MI50_SCLK=1900 && MI50_CARDS="0,1,2,3" && \
for MI50_CARD in /sys/class/drm/card[$MI50_CARDS]/device/pp_table; do \
sudo ./upp -p $MI50_CARD set --write \
smcPPTable/FreqTableGfx/8=$MI50_SCLK \
smcPPTable/DcModeMaxFreq/0=$MI50_SCLK \
smcPPTable/GfxclkDsMaxFreq=$MI50_SCLK \
PowerSavingClockTable/PowerSavingClockMax/0=$MI50_SCLK; \
doneSame parameters as above, but all in one command, setting power cap, core and memory clocks.
MI50_POWER=300 && MI50_SCLK=1900 && MI50_MCLK=1050 && MI50_CARDS="0,1,2,3" && \
for MI50_CARD in /sys/class/drm/card[$MI50_CARDS]/device/pp_table; do \
sudo ./upp -p $MI50_CARD set --write \
SmallPowerLimit1=$MI50_POWER \
SmallPowerLimit2=$MI50_POWER \
BoostPowerLimit=$MI50_POWER \
smcPPTable/SocketPowerLimitAc0=$MI50_POWER \
smcPPTable/SocketPowerLimitDc=$MI50_POWER \
smcPPTable/FreqTableGfx/8=$MI50_SCLK \
smcPPTable/DcModeMaxFreq/0=$MI50_SCLK \
smcPPTable/GfxclkDsMaxFreq=$MI50_SCLK \
PowerSavingClockTable/PowerSavingClockMax/0=$MI50_SCLK \
smcPPTable/FreqTableUclk/2=$MI50_MCLK \
smcPPTable/FreqTableUclk/3=$MI50_MCLK; \
done./upp extract --video-rom 32G_UEFI.rom
Extracting PP table from '32G_UEFI.rom' ROM image...
Found ATOM Common Table rev. 2
Video ROM information:
113-D163A1XT-045
VEGA20
PCI_EXPRESS
HBM2
Vega20 A1 XT WS D16302 32GB 300e/1000m
(C) 1988-2010, Advanced Micro Devices, Inc.
ATOMBIOSBK-AMD VER016.004.000.045.000000
D163A1XT.045
1835720
491810
FALCON_VEGA20_GLXT_RUSSELL_A1_HBM_32GB\config.h
CHKSUM: 0x0A (off by 0), CRC: 0xF43AB07C
Looking into MasterDataTable at offset 0x03C4
Looking into PowerPlayInfo at offset 0x4046
Found 1730 bytes long PowerPlayInfo table v11.0 at offset 0x4046
Saving PowerPlay table to 32G_UEFI.rom.pp_table
32G_UEFI.rom.pp_table is the binary pp_table file that you can write back to /sys/class/drm/card0/device/pp_table like so:
cat 32G_UEFI.rom.pp_table | sudo tee /sys/class/drm/card0/device/pp_table > /dev/null
This will reset the pp_table to the default values.
In order to compare different VBIOS PP-Tables with each other, for example using diff, meld or VS Code, it is necessary to get a text representation of the binary file:
./upp --pp-file=32G_UEFI.rom.pp_table dump | tee 32G_UEFI.rom.pp_table.txt
The following table shows some benchmarks that have been done to check stability on different overclocks / power caps.
It should also illustrate that the power limit or the thermals are holding the card back.
Why game benchmarks when this is a data center card? Because I can easily spot texture issues and "miscalculations".
- All tests have been run with
rocm-smi --setperflevel high - Test-System: Ryzen 9 5950X, Kubuntu 24.04.3 LTS, 6.14.0-29-generic, amdgpu-dkms 6.4.3 1:6.12.12.60403-2194681.24.04, Mesa 25.2.1 - kisak-mesa PPA
- Prompt: "Tell me about yourself. Keep it short, 500 words max." (I know it is too short.)
- Ollama config:
- OLLAMA_CONTEXT_LENGTH: 32768
- OLLAMA_SCHED_SPREAD: 1
- OLLAMA_FLASH_ATTENTION: 1
- OLLAMA_KV_CACHE_TYPE: "q8_0"
- All results after warm-up.
| ROM @ PowerCap SCLK/MCLK | Cyberpunk 2077 2.3 In-Game Benchmark - 1xMI50 1080p Ultra | ollama/ollama:0.11.8-rocm 4xMI50 gpt-oss:120b |
|---|---|---|
| min/avg/max FPS | min/avg/max pp/s min/avg/max tg/s | |
| V420.rom @ 178W 1800/1000 | 72.60 / 72.65 / 72.66 | 2541.83/2562.27/2581.29 31.45/31.52/31.63 |
| V420.rom @ 178W 1800/1180 | 72.88 / 72.98 / 73.05 | 2612.95/2623.45/2637.59 32.88/33.01/33.13 |
| V420.rom @ 178W 2000/1000 | 73.32 / 73.46 / 73.46 | 2667.80/2679.17/2689.24 32.98/33.20/33.43 |
| V420.rom @ 178W 2000/1180 | 73.99 / 74.01 / 74.23 | 2793.57/2810.14/2827.62 34.71/34.86/35.12 |
| V420.rom @ 225W 2000/1000 | 2662.80/2683.52/2697.88 33.18/33.29/33.42 | |
| V420.rom @ 225W 2000/1180 | 78.51 / 78.51 / 78.77 | 2781.86/2796.71/2811.14 34.69/34.78/34.89 |
| V420.rom @ 300W 2000/1000 | 2661.94/2682.30/2701.52 32.99/33.24/33.51 | |
| V420.rom @ 300W 2000/1150 | 79.99 / 80.73 / 80.88 | 2745.13/2764.77/2780.41 34.52/34.60/34.81 |
| V420.rom @ 300W 2000/1180 | 80.60 / 80.85 / 80.91 | 2789.91/2802.37/2826.73 34.72/34.85/34.92 |
- Add other ROMs
- Add vkpeak and clpeak benchmarks to show FP16, FP32, FP64, INT8, INT16, INT32 and INT64 operations.
- Add rocm-bandwidth-test