AMD and Nvidia GOP update (No requests, DIY)

I’m not really the guy to run on unlimited supply of patience, so this will be more a mix of tutorial, tool to do the job for you, assistance (“as long as you don’t insist with unlimited/unrelated questions” kind) and ABSOLUTELY NO GUARANTEES. Users should read this again, I am not offering any kind of assurance that this will work for each and one of you; it might work for 99 users and the 100th could get his GPU toasted, so please take this as a disclaimer and don’t pretend you didn’t knew what risks were involved. I tend to check my work and hate when something goes wrong, but I’m not a machine and I don’t own every GPU to make sure it will work every time.

If you are interested in this thread, then you should know a thing or two about GOP. If you need/want pure UEFI Boot (CSM disabled) or Fast Boot, then you need a GOP for your GPU/iGPU, otherwise it is optional (for now). For the iGPU side there is not much you can do, because manufacturers have included them in the UEFI firmware, with GOP drivers from Intel, AMD, ASPEED, Nvidia (recently) and even Matrox. This thread only deals with external cards and only with AMD and Nvidia. This is further limited by the fact that only specific generations have GOP support: for AMD there is a list of IDs in each GOP version, but it is safe to assume that every card after 7xxx generation should work, maybe even 6xxx; for Nvidia there are 6 generations supported - GT21x, GF10x, GF119, GK1xx/GK2xx, GM1xx, GM2xx.

The current situation is that the cards still have a legacy ROM part, which makes it a hybrid firmware. I think the legacy part still stores the important settings and voltages/frequencies, so don’t expect a GOP update to fix any bugs you might have. Don’t take the risk for anything other than UEFI Boot/Fast Boot. The AMD GPU firmware is formed from a Legacy ROM + an optional GOP in a compressed EFI ROM + possibly a microcode, although extremely rare. Only the Legacy ROM is checksummed, the checksum byte being the one after IBM string, offset 0x21. The Nvidia GPU firmware is formed from an optional IFR header + a Legacy ROM + an optional GOP in a compressed EFI ROM + some optional Nvidia images with signature 564E (Nvidia NBSI/ISBN for signing, Nvidia HDCP, Nvidia x86 extension). Apart from the IFR header, all other Nvidia images are checksummed, the last byte being the checksum byte. A special care for Nvidia is recommended, since it is using some extended headers. This is the normal PCIR structure, found in every ROM, not just GPU.

OROM PCIR header.png



Apart from the PCIR structure, Nvidia is also using NPDS (Nvidia PCI Data Structure), RGIS (dummy structure, maybe reversed SIGR?), NPDE (Nvidia PCI Data Structure Extended).

Nvidia EFIROM header.png



This way, Nvidia can have the EFI ROM marked as last image in PCIR/NPDS, while still having the last image bit cleared in NPDE, for special images linking. To get your GPU firmware, also called VBIOS for many years, you can either check the manufacturer for a download link, or dump it using GPU-Z, or dump it yourself using nvflash. The VBIOS file has to be updated, for your own sake. The flow should be like this: 1. - get the dump from your current card by using GPU-Z (novice) or nvflash (advanced); 2 - check the manufacturer for an updated VBIOS; 3 - check with techpowerup database. Users should decide if they want to keep the current VBIOS and only update the GOP, or go for the one on manufacturer site, if it is newer than their own. The techpowerup database should be used only as a last resort and only if it is a newer version and ONLY IF it is compatible with your card. Otherwise you might flash a wrong VBIOS and blame my tool, when it was you who made a big mistake in the first place. As a recommendation, always update the GOP of an already flashed VBIOS, so you can rule out a bad flash.

Here is how to add/update the GOP section, if you want to do it by hand:
- make sure the last image bit in Legacy ROM is 0.
- fix checksum of Legacy ROM.
- add/replace EFI ROM after Legacy ROM.
- make sure the EFI ROM has the same ID as the Legacy ROM.
- Nvidia only: determine if legacy images are stored in one container - if so, add EFI ROM after this container, than set last image bit in Legacy ROM and last special image to 0, fix the checksum of changed ROMs.
- Nvidia only: determine if the last image bit in NPDE of EFI ROM must be cleared or not - 0x00 if special images follow, 0x80 otherwise.
- Nvidia only: fix the checksum of EFI ROM.
- if your VBIOS comes from a dump, you must remove the end padding, so that the flasher doesn’t complain about the big size of the file.
- make sure you don’t remove extra data when removing padding.
- make sure the new size is not a problem. To do so, check the size of the VBIOS dump = this is the size of the chip.

To my knowledge, there is already a similar tool, with some disadvantages:
- you need a Mac OS.
- you need to find the right EFI ROM by yourself.
- it uses EfiRom for glueing parts, but EfiRom doesn’t add the AMD/Nvidia extended EFI header. This is especially bad for Nvidia.
- it uses the checksum byte as always last. Wrong for AMD.
- it doesn’t account for Nvidia IFR header.
- it doesn’t remove end padding from dump.
- the advantage is that it is properly codded.

Here is the difference between original EFI in ROM and the one resulted from EfiRom:

AMD-Nvidia GOP maker default.png



The image is not entirely right. It was taken with only the first strip of arguments, thus the different PCI revision and class code. The other two strips are the ones to be used for AMD/Nvidia. But the essence is the same, the extended headers are missing.

If you do decide to use GOPupd, keep all the files in the archive. The only optional are the ones related to the main bat. If you have Python 3.x installed, you will need GOPupd.py and you can remove GOPupd.exe, GOPupd.zip and the three dlls. If you don’t have Python installed, the GOPupd.bat will switch to use GOPupd.exe, GOPupd.zip and the three dlls. The #ROM_Info folder stores the files needed for #xxx_ROM_Info.bat files, #GOP_Files stores the compressed EFI ROM files, cecho is used only for the coloured output of a few lines in bat, #xxx_ROM_Info.bat offers details about a VBIOS file, UEFIRomExtract is used for decompressing the EFI ROM.

Edit: for a smooth experience, please unpack the archive to a folder outside your regular download folder. Make sure the name of the folder doesn’t have any strange characters. Place your VBIOS in this folder and again make sure the name is not made of special chars, keep it as simple as possible. Also, when I say drop xyz on the *.bat file, I really mean dropping the xyz on the *.bat file, not on the window it is opening.

The VBIOS file has to be latest version, for your own sake. The flow should be like this: 1 - get the dump from your current card by using GPU-Z (novice) or nvflash (advanced); 2 - check the manufacturer for an updated VBIOS; 3 - check with techpowerup database. Users should decide if they want to keep the current VBIOS and only update the GOP, or go for the one on manufacturer site, if it is newer than their own. The techpowerup database should be used only as a last resort and only if it is a newer version and ONLY IF it is compatible with your card. Otherwise you might flash a wrong VBIOS and blame my tool, when it was you who made a big mistake in the first place. As a recommendation, always update the GOP of an already flashed VBIOS, so you can rule out a bad flash.

To work with GOPupd, you just drop the VBIOS file on GOPupd.bat and follow the instructions. There are two limitations: AMD GOP has some IDs inside, so I compare your VBIOS ID with the ones inside - if there is not a match, I compare it with an older GOP that has more IDs; Nvidia GOP is architecture based - in case I can’t find the GOP variant, the user must select from 6 choices - use GPU-Z or HWiNFO or AIDA64 or any tool/site to find your card architecture. To check that everything went fine, you first read the messages from screen. If you see a red warning with “[…] Please report it!” - this a clear sign that something went wrong and a report is helpful. It can be something as simple as OEM related data added at the end of VBIOS (saw a few samples from MSI and Asus with a DJH block at the end), or it can be something really important that needs a specific location. Even if you get an updated file, you still have to double check: drop the original file on #AMD_ROM_Info.bat or #Nvidia_ROM_Info.bat, then do the same with the updated file. If you don’t see a similar output, with the differences being the size, CRC32 and obviously the GOP, then be wise and report it. I noticed that Nvidia trusts more in the data from NPDE rather than PCI DS, so there is one particular case where I need users to test some things, but this is rather limited, so I would rather discuss it when it happens.

DO NOT use the files from #ROM_Info folder for flashing your GPU! It was not my intention to add the files for flashing purposes, they are present only for dumping info from ROM files, not to mention that the AMD flasher is stripped down from several dlls and the Nvidia one is 32 bit only. A link to the AMD/Nvidia flashers is in the second post and was added only as a courtesy. If a user is not accustomed with flashing his GPU, he/she should not proceed with this GOP update.

Even if you don’t want to update your GOP, it will still be nice to run the script and check your GOP version, maybe you can find a new GOP. Or maybe you can find new bugs to report. If you decide to update your GOP, please post your intention and the following requirements:
- a screen of the tool, so I know that it worked as intended and that you run it the way it was meant to be.
- a link to the original VBIOS, so I can have something to work it.
- a hash of the updated file or the updated file, so I can produce an updated file on my PC, manually check it, then compare the CRC.

Do not bother to post unless you provide the above. I have tried to be nice and users just skipped to the request. This is a safety measure, to be sure that users have used the tool appropriately and that the tool worked flawlessly. I will consider removing the restriction only when there will be a large base of successful reports.

2 Likes

This post will be used to add small related data.

You can break the signature when editing a newer Nvidia VBIOS, so a patched nvflash is needed. You can find one here or here. With older cards (pre-Maxwell) you have better chances with older versions of nvflash, lower than 5.2xx, as newer versions require the presence of a special image with signature. You should still try with latest version if you are on Win10, but also test with older versions if you see an error. The latest 5.2xx has better support for Maxwell/Pascal cards and Win10. I don’t see a signature check in AMD, so the standard flasher can be used, downloaded from here.

All the files are 32 bit and was tested on Win7 x64, so it should work on every system, in theory. If anyone wants a 64 bit version, I can provide one, but I don’t really see the advantage for a small script. Linux users can compile UEFIRomExtract and can port GOPupd.bat. The only issue would be with #xxx_ROM_Info.bat, because it uses Windows apps.

I know I said this is for external cards only, but some laptops with GM1xx or GM2xx might still benefit from it, as long as you are extra careful. Some GPUs might be MXM type while others not, so a caution is needed.

List of GOPs:

This is a list of GOPs I have found. Obviously, the last one from each group is inside GOPupd.

Nvidia

Version - Date - Changelist - CRC32

GT21x

GT21x - 0x10017 - Nov 15 2012 - 14390738 - EBE3C00D
GT21x - 0x1002E - Jun 16 2014 - 18606088 - 8E167DF4
GT21x - 0x10031 - Jan 7 2015 - 19206708 - B8E2076E

GF10x

GF10x - 0x10007 - Jun 22 2012 - 13316950 - 67A47D4C
GF10x - 0x1000B - Aug 3 2012 - 13604321 - 233B4635
GF10x - 0x1000C - Aug 11 2012 - 13662110 - 72A5C4D5
GF10x - 0x1000E - Aug 29 2012 - 13788810 - 62B3A0A1
GF10x - 0x10016 - Nov 13 2012 - 14358103 - 993E5CCF
GF10x - 0x10017 - Nov 15 2012 - 14390738 - 09B408C4
GF10x - 0x1001C - Apr 10 2013 - 15488244 - 7126C4D0
GF10x - 0x1001F - May 3 2013 - 15720600 - A37E10CC
GF10x - 0x1002B - Mar 12 2014 - 18041825 - 006ECBB7
GF10x - 0x1002D - Apr 23 2014 - 18350298 - 1195FC13

GF119

GF119 - 0x10005 - missing - missing - DBE951E5
GF119 - 0x10006 - Jun 14 2012 - 13171043 - 9030510C
GF119 - 0x1000B - Aug 3 2012 - 13604321 - 8B217C63
GF119 - 0x1000C - Aug 11 2012 - 13662110 - 3AFAA517
GF119 - 0x1000E - Aug 29 2012 - 13788810 - E7578F54
GF119 - 0x10017 - Nov 15 2012 - 14390738 - 049AB334
GF119 - 0x1001B - Mar 8 2013 - 15221014 - 7F13B8AB
GF119 - 0x1001F - May 3 2013 - 15720600 - BDB0BE5A
GF119 - 0x10026 - Sep 13 2013 - 16871300 - 088C3C5B
GF119 - 0x10028 - Nov 7 2013 - 17238399 - 66C112A6
GF119 - 0x1002A - Jan 20 2014 - 17684658 - 2F582D75
GF119 - 0x10030 - Sep 18 2014 - 18895660 - C1151987

GK1xx

GK1xx - 0x10000 - missing - missing - 18F71A08
GK1xx - 0x10005 - missing - missing - BB0677C9
GK1xx - 0x10008 - Jul 11 2012 - 13451081 - FDEA3A58
GK1xx - 0x1000B - Aug 3 2012 - 13604321 - 002A9460
GK1xx - 0x1000C - Aug 11 2012 - 13662110 - 80A2087D
GK1xx - 0x1000D - Aug 14 2012 - 13682003 - B809DA7B
GK1xx - 0x1000E - Aug 29 2012 - 13788810 - 5F5E1B25
GK1xx - 0x1000F - Sep 14 2012 - 13901758 - 761BFDF1
GK1xx - 0x10010 - Sep 21 2012 - 13956421 - 53B2E5BE
GK1xx - 0x10011 - Oct 1 2012 - 14019714 - BAF2B763
GK1xx - 0x10012 - Oct 10 2012 - 14086548 - C1454442
GK1xx - 0x10015 - Oct 26 2012 - 14203205 - 49099C4E
GK1xx - 0x10017 - Nov 15 2012 - 14390738 - 044C4416
GK1xx - 0x10018 - Dec 20 2012 - 14662281 - 0D2581BE
GK1xx - 0x10019 - Jan 25 2013 - 14931651 - 7A5BD292
GK1xx - 0x1001A - Feb 27 2013 - 15161918 - B4DA5747
GK1xx - 0x1001B - Mar 8 2013 - 15221014 - DC0EF9B9
GK1xx - 0x1001C - Apr 10 2013 - 15488244 - D3BF3C65
GK1xx - 0x1001D - Apr 15 2013 - 15556356 - 25A2CFCF
GK1xx - 0x1001E - Apr 25 2013 - 15661889 - 10BEBEED
GK1xx - 0x1001F - May 3 2013 - 15720600 - 26CFAB57
GK1xx - 0x10021 - Jun 24 2013 - 16321865 - 658CE132
GK1xx - 0x10022 - Jul 2 2013 - 16377903 - 24597612
GK1xx - 0x10023 - Jul 30 2013 - 16558196 - 7BD90752
GK1xx - 0x10024 - Aug 19 2013 - 16692072 - C6DC32D1
GK1xx - 0x10025 - Aug 30 2013 - 16769093 - A90F52C9
GK1xx - 0x10026 - Sep 13 2013 - 16871300 - 9BE23732
GK1xx - 0x10027 - Oct 10 2013 - 17062162 - EE7F5871
GK1xx - 0x10028 - Nov 7 2013 - 17238399 - 25DB5F9D
GK1xx - 0x10029 - Jan 7 2014 - 17611802 - C551F4BB
GK1xx - 0x1002A - Jan 20 2014 - 17684658 - A6757C3D
GK1xx - 0x1002B - Mar 12 2014 - 18041825 - A1E3D19C
GK1xx - 0x1002C - Apr 3 2014 - 18190411 - 23CB451E
GK1xx - 0x1002D - Apr 23 2014 - 18350298 - 7B178AA3
GK1xx - 0x1002F - Jun 30 2014 - 18649748 - E34A0B8D
GK1xx - 0x10030 - Sep 18 2014 - 18895660 - ED712766
GK1xx - 0x10031 - Jan 7 2015 - 19206708 - 3E7C4588
GK1xx - 0x10032 - Jun 2 2015 - 19638769 - 8C14115A
GK1xx - 0x10033 - Jul 13 2015 - 19761311 - 295A2DD7
GK1xx - 0x10034 - Oct 9 2015 - 20044574 - 3D99EFA6
GK1xx - 0x10035 - Dec 18 2015 - 20273249 - 002B0432
## The next one also has a HP digital signature
GK1xx - 0x10036 - Jan 16 2017 - 21577143 - 9DF4AFC1
GK1xx - 0x10037 - Mar 2 2017 - 21759815 - 08A114AE
GK1xx - 0x10038 - Mar 27 2017 - 21874401 - AB3943D4

GM1xx

GM1xx - 0x10028 - Nov 7 2013 - 17238399 - 368D05BF
GM1xx - 0x10029 - Jan 7 2014 - 17611802 - 4B150649
GM1xx - 0x1002A - Jan 20 2014 - 17684658 - C0322EBC
GM1xx - 0x1002B - Mar 12 2014 - 18041825 - FD02DD81
GM1xx - 0x1002C - Apr 3 2014 - 18190411 - B13B3411
GM1xx - 0x1002D - Apr 23 2014 - 18350298 - D9B5DAA3
GM1xx - 0x1002F - Jun 30 2014 - 18649748 - FB8E6F91
GM1xx - 0x10030 - Sep 18 2014 - 18895660 - E71E2E50
GM1xx - 0x10031 - Jan 7 2015 - 19206708 - 21E0A590
GM1xx - 0x10032 - Jun 2 2015 - 19638769 - A3BD9435
GM1xx - 0x10033 - Jul 13 2015 - 19761311 - 3DD2BBD4
GM1xx - 0x10034 - Oct 9 2015 - 20044574 - 806B6DEB
GM1xx - 0x10035 - Dec 18 2015 - 20273249 - 8CC5CC89
GM1xx - 0x10036 - Jan 16 2017 - 21577143 - EB0E4B16

GM2xx

GM2xx - 0x20005 - Jul 31 2014 - 18745622 - 3CF5AC5D
GM2xx - 0x20007 - Sep 18 2014 - 18895672 - EDFC5101
GM2xx - 0x20008 - Dec 21 2014 - 19158594 - E6D8878C
GM2xx - 0x20009 - Jan 15 2015 - 19231244 - FBEA4A3D
GM2xx - 0x2000A - Feb 24 2015 - 19347806 - 7C35066C
GM2xx - 0x2000B - Jun 2 2015 - 19638784 - 2AFF7581
GM2xx - 0x2000C - Jul 13 2015 - 19761346 - D89CA636
GM2xx - 0x2000D - Oct 9 2015 - 20044577 - C2550698
GM2xx - 0x2000E - Dec 18 2015 - 20273307 - 64CCA63D
GM2xx - 0x2000F - Jan 19 2016 - 20357017 - ACDBE171
GM2xx - 0x20010 - Feb 26 2016 - 20482337 - 3230CD4E
GM2xx - 0x20011 - Jan 16 2017 - 21577143 - 80A19AD5

GP1xx

GP1xx - 0x30001 - Feb 23 2016 - 20468386 - 33F70514
GP1xx - 0x30002 - Apr 1 2016 - 20605201 - 1C3CE4F5
GP1xx - 0x30003 - Jul 14 2016 - 20941565 - B77A4710
GP1xx - 0x30004 - Jul 19 2016 - 20955989 - 4344E8D5
GP1xx - 0x30005 - Sep 12 2016 - 21147289 - 97F318EF
GP1xx - 0x30006 - Oct 26 2016 - 21305424 - 812D99BE
GP1xx - 0x30007 - Jan 16 2017 - 21577143 - 943C7CA8
## The next one also has a HP digital signature
GP1xx - 0x30007 - Jan 16 2017 - 21577143 - FC22CE61
GP1xx - 0x30008 - Mar 2 2017 - 21759815 - 1DD35B02
GP1xx - 0x30009 - Apr 26 2017 - 22031157 - B49BDF60
GP1xx - 0x3000A - Aug 21 2017 - 22712147 - 062E609D
GP1xx - 0x3000B - Oct 11 2017 - 22973701 - 0D3D85D3
GP1xx - 0x3000C - Jan 11 2018 - 23398982 - BA9986C1
GP1xx - 0x3000E - May 24 2018 - 24225480 - CC1B85E5

GV1xx

GV1xx - 0x40003 - Apr 26 2017 - 22031157 - 146F209C
GV1xx - 0x40006 - Oct 12 2017 - 22978610 - 40439AF6

TU1xx

TU1xx - 0x50005 - Jul 26 2018 - 24586324 - 8AE527A0
TU1xx - 0x50006 - Aug 29 2018 - 24848024 - FCA894DE
TU1xx - 0x50008 - Aug 31 2018 - 24866615 - 0A730F9B
TU1xx - 0x50009 - Oct 4 2018 - 25039140 - 504483F2

GF10x_MXM

GF10x_MXM - 0x10005 - missing - missing - D0DD3025

GK1xx_MXM

GK1xx_MXM - 0x10004 - missing - missing - 1E5E90F2
GK1xx_MXM - 0x10005 - missing - missing - 354DB308
GK1xx_MXM - 0x1000B - Aug 3 2012 - 13604321 - 036BB406
GK1xx_MXM - 0x1000C - Aug 11 2012 - 13662110 - FC63B6BA
GK1xx_MXM - 0x10017 - Nov 15 2012 - 14390738 - 571463EC
GK1xx_MXM - 0x10018 - Dec 20 2012 - 14662281 - 8A175FFA
GK1xx_MXM - 0x10019 - Jan 25 2013 - 14931651 - D9B69832
GK1xx_MXM - 0x1001B - Mar 8 2013 - 15221014 - 35272B50
GK1xx_MXM - 0x1001C - Apr 10 2013 - 15488244 - FAC85AB0
GK1xx_MXM - 0x1001D - Apr 15 2013 - 15556356 - 8F35869A
GK1xx_MXM - 0x1001F - May 3 2013 - 15720600 - 6CBEB8F4
GK1xx_MXM - 0x10021 - Jun 24 2013 - 16321865 - DA0E681E
GK1xx_MXM - 0x10022 - Jul 2 2013 - 16377903 - D59BF401
GK1xx_MXM - 0x10027 - Oct 10 2013 - 17062162 - 77BD9186
GK1xx_MXM - 0x10028 - Nov 7 2013 - 17238399 - AAF88D57
GK1xx_MXM - 0x1002A - Jan 20 2014 - 17684658 - DA6703AD
GK1xx_MXM - 0x1002D - Apr 23 2014 - 18350298 - D7DFC6A1
GK1xx_MXM - 0x1002F - Jun 30 2014 - 18649748 - 692D7E3A
GK1xx_MXM - 0x10030 - Sep 18 2014 - 18895660 - 410378AD
GK1xx_MXM - 0x10031 - Jan 7 2015 - 19206708 - BCB36EB5
GK1xx_MXM - 0x10032 - Jun 2 2015 - 19638769 - A9064A2C
GK1xx_MXM - 0x10033 - Jul 13 2015 - 19761311 - A8ECA7F7

GM1xx_MXM

GM1xx_MXM - 0x1002D - Apr 23 2014 - 18350298 - FB6955B0
GM1xx_MXM - 0x10030 - Sep 18 2014 - 18895660 - C7A8329E
GM1xx_MXM - 0x10031 - Jan 7 2015 - 19206708 - EC9600B5
GM1xx_MXM - 0x10032 - Jun 2 2015 - 19638769 - 0D143A44
GM1xx_MXM - 0x10033 - Jul 13 2015 - 19761311 - BA87A0F1
GM1xx_MXM - 0x10034 - Oct 9 2015 - 20044574 - 61E770EA
GM1xx_MXM - 0x10035 - Dec 18 2015 - 20273249 - 32B5EDC8

GK1xx_Multi-Display

GK1xx_Multi-Display - 0x1002D - Apr 23 2014 - 18350298 - 0902209E
GK1xx_Multi-Display - 0x10030 - Sep 18 2014 - 18895660 - 4A254026


AMD


They are named as following: Version - LibBuild - Date - Build - Changelist - GOP_BIOS_IDTF [- ROM_BIOS_IDTF] - Is_Signed - CRC32
Only universal version will be displayed.

0.0.1.18 - 578 - Mar 10 2011 10:39:19 - 578 - 0 - 0x78D702BF - Unsigned - 7707778B
0.0.1.18 - 578 - Mar 10 2011 10:39:19 - 578 - 0 - 0xA91D6DB8 - Unsigned - E11B4844
1.26.0.0.0 - 1673 - Mar 7 2012 10:52:20 - 222160 - 748892 - 0xDEADBEEF - Unsigned - 20B9F624
1.39.0.0.0 - 2026 - Aug 13 2012 17:15:09 - 237235 - 806173 - 0xDEADBEEF - Unsigned - F7B11E40
1.40.0.15.24 - 2044 - Aug 30 2012 11:33:36 - 240433 - 813371 - 0xDEADBEEF - Unsigned - 9DAA8411
1.45.0.0.0 - **** - Jan 15 2013 16:13:54 - 2159 - 864818 - 0xDEADBEEF - Signed - ACBFBA1C
1.45.0.15.31 - 2161 - Jan 16 2013 12:27:55 - 252890 - 865709 - 0xDEADBEEF - Unsigned - 9923CE0B
1.46.0.0.0 - **** - Feb 6 2013 14:51:06 - 2203 - 873048 - 0xDEADBEEF - Signed - B0C90F0B
1.46.0.15.32 - **** - Mar 1 2013 16:48:00 - 256236 - 880232 - 0xDEADBEEF - Unsigned - 1EA6E938
1.48.0.0.0 - **** - Apr 1 2013 17:04:48 - 2377 - 892920 - 0xDEADBEEF - Signed - 9440BFD4
1.48.0.15.33 - **** - Apr 1 2013 15:17:35 - 258928 - 892957 - 0xDEADBEEF - Unsigned - F0B1F439
1.49.0.0.0 - **** - May 3 2013 16:03:58 - 2444 - 905457 - 0xDEADBEEF - Signed - C81266E6
1.50.0.0.0 - **** - Jun 5 2013 14:45:25 - 2493 - 916829 - 0xDEADBEEF - Signed - AFC7291B
1.50.0.15.36 - 2499 - Jun 14 2013 16:15:09 - 264398 - 920203 - 0xDEADBEEF - Unsigned - 2291F98D
1.51.0.0.0 - **** - Jul 9 2013 17:58:27 - 2526 - 927555 - 0xDEADBEEF - Signed - 276DF886
1.52.0.0.0 - **** - Aug 1 2013 15:39:57 - 2538 - 936442 - 0xDEADBEEF - Signed - ED421429
1.52.0.0.0 - 2539 - Aug 1 2013 15:41:39 - 267852 - 936470 - 0xDEADBEEF - Unsigned - 89268A72
1.53.0.0.0 - **** - Oct 23 2013 17:03:41 - 2619 - 966193 - 0xDEADBEEF - Signed - 3D3985FA
1.53.0.0.0 - **** - Oct 23 2013 17:03:41 - 2619 - 966193 - 0xDEADBEEF - Unsigned - C60038F1
1.54.0.0.0 - **** - Dec 30 2013 18:11:36 - 2700 - 992571 - 0xDEADBEEF - Signed - F35D3996
1.54.0.0.0 - **** - Dec 30 2013 18:11:36 - 2700 - 992571 - 0xDEADBEEF - Unsigned - 67CA459B
1.55.0.0.0 - **** - May 1 2014 14:38:36 - 30 - 1032402 - 0xDEADBEEF - Signed - 02EFEFDE
1.55.0.0.0 - **** - May 1 2014 14:38:36 - 30 - 1032402 - 0xDEADBEEF - Unsigned - 71C04624
1.55.2.0.0 - **** - Jun 18 2014 18:16:06 - 70 - 1047433 - 0xDEADBEEF - Unsigned - 64A31773
1.56.0.0.0 - **** - Nov 7 2014 17:35:59 - 125 - 1095112 - 0xDEADBEEF - Unsigned - 22920B95
1.57.0.0.0 - **** - Jan 9 2015 18:01:41 - 145 - 1110462 - 0xDEADBEEF - Signed - 3F4D303A
1.57.0.0.0 - **** - Jan 9 2015 18:01:41 - 145 - 1110462 - 0xDEADBEEF - Unsigned - 6002ED21
1.58.0.0.0 - **** - Jan 28 2015 16:15:23 - 150 - 1116199 - 0xDEADBEEF - Signed - 70794E5E
1.58.0.0.0 - **** - Jan 28 2015 16:15:23 - 150 - 1116199 - 0xDEADBEEF - Unsigned - 0A8C736C
1.58.0.0.0 - **** - Feb 17 2015 15:41:41 - 156 - 1122881 - 0xDEADBEEF - Signed - F047653C
1.58.0.0.0 - **** - Feb 17 2015 15:41:41 - 156 - 1122881 - 0xDEADBEEF - Unsigned - F99D966E
1.59.0.0.0 - **** - Jun 25 2015 13:46:51 - 198 - 1165143 - 0xDEADBEEF - Unsigned - DCE89A45
1.59.0.0.0 - **** - Jun 29 2015 13:03:19 - 202 - 1165960 - 0xDEADBEEF - Signed - A57D244F
1.60.0.15.50 - **** - Feb 1 2016 14:59:32 - 425 - 1233155 - 0xDEADBEEF - Signed - 03830944
1.60.0.15.50 - **** - Feb 1 2016 14:59:32 - 425 - 1233155 - 0xDEADBEEF - Signed - 8D8090E5
1.61.0.15.50 - **** - Jan 12 2017 11:16:18 - 602 - 1361181 - 0xDEADBEEF - Signed - 80C44987
1.61.0.15.50 - **** - Jan 12 2017 11:16:18 - 602 - 1361181 - 0xDEADBEEF - Signed - E9217CEF
1.62.0.15.50 - **** - Mar 27 2017 10:13:02 - 660 - 1390968 - 0xDEADBEEF - Signed - 93D6E2E3
1.63.0.15.50 - **** - Jun 5 2017 12:19:14 - 691 - 1417805 - 0xDEADBEEF - Signed - 91299B03
1.64.0.15.50 - **** - Aug 9 2017 13:23:44 - 1816 - 1445104 - 0xDEADBEEF - Signed - 8269532F
1.65.0.15.50 - **** - Sep 28 2017 15:11:11 - 1863 - 1464079 - 0xDEADBEEF - Signed - 68337C30
1.66.0.15.50 - **** - Apr 23 2018 17:50:07 - 2035 - 1545325 - 0xDEADBEEF - Signed - EEB7AA71
1.67.0.15.50 - **** - Oct 18 2018 14:11:59 - 2109 - 1621154 - 0xDEADBEEF - Signed - EA622B95
2.0.0.0.0 - **** - Mar 29 2017 16:44:37 - 663 - 1392167 - 0xDEADBEEF - Signed - 8599CEFD
2.1.0.0.0 - **** - Oct 10 2017 09:52:26 - 1868 - 1467921 - 0xDEADBEEF - Signed - 8FB4F1EB
2.2.0.0.0 - **** - Feb 6 2018 18:28:14 - 1978 - 1513069 - 0xDEADBEEF - Signed - C8BBB0FD
2.3.0.0.0 - **** - Apr 18 2018 16:19:53 - 2029 - 1543189 - 0xDEADBEEF - Signed - 922797A5
2.4.0.0.0 - **** - May 9 2018 16:49:31 - 2046 - 1552765 - 0xDEADBEEF - Signed - D7DC9A98


Changelog:


Version 1.9.6.5
- Fixed AMD with microcode, offer older GOP when size is an issue.

Version 1.9.6.4
- Updated AMD to 1.67.0.15.50, thanks to MrGenius, hellm and TPU.
- Added Turing support, but no promise if actually working
- Fixed a bug with extra data reinserting in Nvidia. Since Nvidia didn’t had extra data after special images prior to Turing (to my knowledge), nobody should have been affected.
- Starting to add support for multiple EFI in image, like the Nvidia Update containers. This concerns only the extraction, obviously.

Version 1.9.6.3
- Updated GF10x to 0x1002D, thanks to TPU
- Updated GP1xx to 0x3000E, thanks to TPU
- Added TU1xx version 0x50009, thanks to TPU and eraser666, but no update yet

Version 1.9.6.2
- Added initial Turing support, only version display so far

Version 1.9.6.1
- Updated AMD version extraction: Pluto made me do it! He’s so mean!
- Fixed Nvidia checksum correction. Hopefully for good.

Version 1.9.6
- To be filled
- Still too lazy to fill this

Version 1.9.5
- Updated GT21x to 0x10031, thanks to insanelyDeepak and Riley Freeman
- Updated NVFlash to 5.292, thanks to Stefan from LaptopVideo2Go and Geeks3D
- Updated ISBN/NBSI structure for Pascal support.

Version 1.9.4
- Added GP1xx 0x30002, thanks to OCN, Orbmu2k and Sylar76
- Updated NVFlash to 5.287, same source.
- added extraction of Nvidia signing certificates. In GOPUpd.bat change ISBN=0 to ISBN=1 to make it available. You can also change DEBUG=0 to DEBUG=1 if you want the ISBN structure to be printed. Just the basic support, only started investigating this structure.
- if you run the above, you will obtain either a cert_nrX.cer or a cert_nrX.lic in the temp folder. The first one should be available for inspection from any system, it is a PEM encoded certificate. The second one should be dropped on #Nvidia_ROM_Info.bat, as it has an Nvidia container.
- enabled class-code 03-02-00. I saw several images from Nvidia with this class-code, they all used the official GOP.
- report if there are other ROM images in file. Useful for containers like the Nvidia flashers, where there can be more than one image inside.
- added reports for bad EFI images. This is currently done using the database file. Will explain later.
- AMD will now be extracted as "AMD GOP x.x.x.x[custom][un]signed_CRC32". The term "_custom" will be added only to those containing tables in the EFI, _signed/_unsigned should be obvious what they mean.
- relocate the AMD microcode. Unfortunately, the cards that have a microcode also have a limited chip space. You need to ask for help if you are in this situation, I can provide you an older EFI ROM that will fit your image.

Version 1.9.3
- updated AMD GOP to 1.60.0.15.50, thanks to TPU
- updated GM2xx to 0x2000E, thanks to TPU
- added support for very old Nvidia GOP releases, older than 0x10008.

Version 1.9.2
- added display support for GP1xx and GOP-Override. No replacing yet, missing samples.

Version 1.9.1
- updated GM2xx to 0x2000D, thanks to Plutomaniac.
- updated GM1xx_MXM to 0x10034, thanks to Plutomaniac.

Version 1.9.0
- updated GM1xx to 0x10034, thanks to Plutomaniac.
- updated GK1xx to 0x10034
- added the possibility to search for file, by simply launching GOPupd.bat alone. Thanks to UBU and Sonix.

Version 1.8.9
- updated GK1xx_MXM to 0x10033
- Nvidia GRID K1/K2 are updated to GK1xx Multi-Display GOP, even if original (and old) was regular GK1xx GOP.
- added support for Nvidia with standalone special images between ROM and EFI.

Version 1.8.8
- updated GM2xx to 0x2000C, thanks to TechPowerUp

Version 1.8.7
- updated GM1xx to 0x10033, thanks to rootuser123
- amd_gop_IDs.txt contains the name/tag of the GPU associated with an ID. It will also be saved as such when processing an AMD GOP.

Version 1.8.6
- updated AMD to 1.59.0.0.0, thanks to Plutomaniac.
- switched to using GopInfoX for AMD_ROM_Info
- renamed all drivers from ROM_Info. They are not needed any more, but kept for quick debugging.

Version 1.8.5
- updated GM1xx to 0x10032, thanks to Plutomaniac
- updated GM1xx_MXM to 0x10031, thanks to Plutomaniac

Version 1.8.4
- updated GK1xx to 0x10032, thanks to Plutomaniac
- updated GK1xx_MXM to 0x10032, thanks to Plutomaniac

Version 1.8.3
- updated GM2xx to 0x2000B, thanks to TechPowerUp

Version 1.8.2
- request Admin rights on systems with UAC enabled. It will not work properly otherwise.
- updated #ROM_Info to ATIFlash 2.71 from TechPowerUp and Nvidia NVFlash 2.227 from Geeks3D

Version 1.8.1
- updated GF10x to 0x1001F
- added GK1xx Multi Display
- fixed version detector for some GF119

Version 1.8
- renamed the folder and bat files related to ROM info. I tried to do the same with sys files, but AMD didn’t liked it. I hope that users won’t try to use them for flashing.
- updated GF10x to 0x1001C. Not yet as new as others, but definitely better than the old one.
- updated GK1xx to 0x10030.
- updated GK1xx_MXM to 0x10030.
- added support for Nvidia old images that had all ROMs images with 55AA sig. Not sure if these cards can actually use the GOP.
- added support for Nvidia multi-images in one container. I just add the image after this container, then fix the last-image-bit in first ROM and last special image.
- added GPU hint for Nvidia card with missing GOP or unknown version. This just displays the product name, so it might not always be helpful, depending on what OEM have added there.
- added AMD GPU microcode report. I have only found it in old images and always at offset 0x1A000, which will be overlapped by the EFI ROM. So users will have to choose between GOP and microcode.

Version 1.7
- added GK1xx_MXM and GM1xx_MXM
- updated GM1xx to 0x10030
- fixed AMD version until it will be broken again
- added Mac version display. Only AMD works well, Nvidia is missing the version most of the times.
- enabled Mac GOP replacement, but the validity of the new image falls in user’s hand. Drop the compressed image as mac_gop.efirom in GOP_Files. Then check the resulting file on your own. I have only a few samples of Apple images and no intention of supporting them.

Version 1.6
- updated GM2xx to 0x2000A, thanks to Sylar76.
- added AMD to database check
- the temp folder will not be removed if the GOP is not in database

Version 1.5
- updated GK1xx GOP to 0x1002F
- replace nvflash with original one, thanks to Plutomaniac.
- added a database file and also a check for missing GOPs.
- now you can use files outside GOPupd folder, but for a normal use it is still recommended to have the VBIOS file in GOPupd folder.
- you can also drop many files at once, if you want to check for a new GOP.
- GOP type can be determined even with missing variant ID, by using the database file. This is of course limited to the GOPs I have found, so any new GOP is appreciated.

Version 1.4
- added GF119 GOP.
- added a few more checks so that the original GOP is compatible with the new one. Apart from the 6 Nvidia GOPs, there are also MXM and multi-display variants of these. I have GK1xx_MXM and GM1xx_MXM, but no sample of multi-display.
- now the files in the temp folder are renamed for easy storage.
- also added some checks of the original EFI ROM for compatibility: machine code, class-code, EFI code, EFI last image.

Version 1.3
- This one fixes an error regarding recovering extra data when the old image is bigger. It also checks for the EFI ROM type, so it will not update if the card has a Mac EFI ROM, for instance. It can now also be used to decompress a single EFI ROM, by providing a wrapper for UEFIRomExtract.

Version 1.2
- This one tries to recover the extra data at the old offset if possible. This is OK for MSI cards that have a DJH block at the end, but it might not be OK for other extra data, so the red warning with "[…] Please report it!" is still in place, just to make sure nothing is broken without user knowledge.

Version 1.1
- Initial release


For anyone wishing to donate.

GOPUpd_v1.9.6.5.rar (5.36 MB)


(JAN 2024)
Latest user contribution from @Ruin (and many others ) in the development of the original tool by @lordkag
GOPUpd v1.9.6.5.k mod v0.5.2

NOTE: AMD card users can use latest AMD GOP driver 1.70 included in above link or the
GOPUpd_v1.9.6.5_(MAGICgop_AMD_1.69).rar (5.5 MB)
for UEFI boot compatibility/issues, usually on RX400/500 series.

1 Like



very great work lordkag will you add gf117 to the roms

I don’t have one and I don’t know if you will ever find one. But you can post a link to your VBIOS so I can check it. Nvflash only mentions 6 types: GT21x, GF10X, GF119, GK1xx, GM1xx, GM2xx.

Can someone test this rom for UEFI gop driver?
https://www.dropbox.com/s/eggv04exrs10yoe/GK110.rom?dl=0

Thanks

PS: Or better yet share how to test it again and I’ll do it. Teach a man to fish …

@ davidm71:

You may have to wait until you get a reply from lordkag. He is the expert regarding this topic.

@davidm71

As it is written in the first post, you simply drop the file on GOPupd.bat. Then it is as simple as this:

GK110_davidm71.png



I have tested this on my end and it produced a valid file, everything is in order.

GK110_update.png



I don’t know if it could have been made simpler than that, I don’t know how I could have explained it better. My suggestion was for users to try on their own and only come here for a confirmation that everything went right. I would like to avoid a bricked card just as much as the owner, so I don’t mind if users come here with a message like “I run this and got this [image] output, the file has a CRC32 of xxxxxxxx, is it OK to flash?”, but I do very much mind when users fail to read the first post, when they still ask questions without even starting the app. It seems my intuition was right and I can’t really commit to an extended support of this thread, because there will always be users who skip the introduction.

Couple things I noticed about the utility. The rom file must exist in the same folder as the batch file for it to work.
Second dropping the rom file on the #nv-flash-info.bat causes the command window to display for a split second
before it disappears.

Yes, it is expecting the file to be on the same folder. I could make it to work with files outside the folder, but why not keep it simple? This way you have the original file, the updated file and the working *_temp directory with compressed EFI ROM, dump.efi and names+IDs for AMD (for those that want to further inspect things), all of them in the same folder.

You should always drop the file on the .bat itself, not on the bat window.

Thanks for your hard work and patience with guys myself who speed read tutorials. I tested your app on my other physx card and it added gop code. Only thing is you have to open an elevated command prompt and type in the input file manually or else dragging it causes the window to disappear and close very rapidly. Got to put a pause in your code. Any how I think even batman would approve. Thanks.

The window should never close on its own, there is always a need for user interaction. Can you provide that test file and also the name of the folder you are working from? I suspect there must be something with the name or path.


There is a pause and you can drag & drop without any issue at all. Elevation is not required. Most probably you placed the folder at a non-english directory and the batch script has some string issues. If you try placing it at C:\ it should work just fine (elevated rights are required for root directory, C:\gop for example would be fine without them).

EDIT: Lordkag and I replied at the same time. As he said as well: directory naming must be the culprit. I tested it on my own end and it worked like a charm. Path was C:\Users\Plato\Desktop\GopUpd\ .

I ran it out of my download folder after unzipping the files in a folder of the same name as the archive. Just want to give a warning to others to disable Norton security or create an exception as it and Windows 8 Screen Protection will block the execution of those files. Thanks.

This is not a problem with the antivirus and users should never disable it just to run a new and unknown software. It is actually a good decision to prevent running of an exe from the download folder.

I will add this as a warning that users should run it from a regular folder.

I’m sorry I have a stupid question but the gop update will not affect clock rates correct?

My answer would be a “No”, but I don’t have official documents to support that. Here is my take:

- there is one AMD GOP and 6 Nvidia GOPs, but there are plenty of cards out there with GOP support.
- the GOP driver can’t take all the tables for all cards. In fact, it can’t even take a standard table and leave the tweaking to OEMs, because the GOP is signed and every change will break the signature.
- this is why I think the legacy ROM has the clocks and specific settings, giving us a hybrid firmware, which is what it was labelled.
- even if the legacy part will be removed in the next years, there will still be a stub image to hold the settings and clocks that OEM and users can tweak.
- if you boot with CSM disabled and the monitor is connected to dGPU, the GOP driver will be loaded, so it is better to have an updated GOP.
- if you boot with CSM enabled or have an old mainboard that is missing UEFI stuff, your GOP driver is not loaded, so no update is needed.
- if your mainboard has the option to “load EFI drivers first” and you select it, then this is where you have a choice: if the card has a GOP, update it; if not, decide if you want legacy or UEFI to be loaded.

If you decide to update/add GOP, I advise you and any user to run the app first, then come back here with a report and a link to the VBIOS file, so I can double check the result. Even if there were no error messages, it is safe to ask for a second opinion, at least until a solid group of users have confirmed that the script is working without issues.

This is a nice piece of work,much appreciated lordkag!
I know for a fact that there are many (Asus) gfx card owners looking for something like this!
Asus had a tool out to retrieve UEFI vbios updates…but with silly restrictions and server-side flaws. Nowadays it’s even impossible to retrieve anything with it.
Mind if i link this topic from the ROG forum?
Cheers!

I have no problems in sharing the link, since it was my intention to help users in updating the GOP as easy as possible. And even if I did, is not like I can rule the internet and stop anyone from sharing. But I understand your intention and I appreciate it. The only caveat is that I will only offer support in this thread.

There are two observations to be made: the first one is already in the first or second post and it involves newer Nvidia cards that have a signature, which will require a patched nvflash for flashing; the second involves Kepler UEFI Updater, that has a really old version of GK1xx GOP - 10017 from Nov 15 2012. This could be overcome by taking nv_gop_GK1xx.efirom from #GOP_Files and rename it to kepleruefi.efr and replace the one in the pack, but I don’t know if nvuefiupdate is expecting a specific file/format.

Just wanted to thank Lordkag for his work. It just solved a UEFI boot issue I was having booting in CSM mode Disabled with more than one GPU. I had an EVGA GTX770 Dual SC ACX card with the 0x1001f gop and a recent GT740 card in my second pci-e slot. Together they would not allow bios to post. Would get a lockup with Gigabyte logo stalling outon my Z87X-ud5h board. That is until I followed the guide and updated the GTX770 to 0x1002D gop. Now it works both cards together are happy. I wonder if its because the GT740 GOP version was a 0x1002- release and had a compatibility issue with the 1002x branch… Anyhow makes me wonder about another older Z68 system I have doing the same thing…

Thanks

If you checked the resulting file on your own, then it is OK. But if you didn’t, I strongly advise users to post a link to the original VBIOS, so I can double check the resulting file and prevent a bad flash if mistakes have slipped into the code.

If it is not too much trouble, can you link me to the VBIOS of that GT740 card? I can get the GTX770 on techpowerup and I already have the 1001F GOP, but I don’t have that GT740 and I can’t search it without a full name.