I can report some more success. After testing a dozen different vBios files, I found some that work. They are not the original vBios for my MSI GTX 970 Gaming 4GB and Palit GTX 960 2GB cards, but newer vBios versions and probabaly overclocking (3 - 4 %), but no issues so far.
As it turns out, any vBios were vBiosInsert.sh reports "Verifying (starting at 0xFC00)..." does not work inside a PC. vBios files, which report, e.g. 0xF800 or 0x10800 still work if you have Legacy BIOS or CSM enabled. The underlying issue might be something else, but CSM at least, which is actually good enough for me. All these cards had to be modified with GOP_Updater first, before enableGOP 1.4 shows a Mac boot screen. enableGOP 1.1 does not have this "requirement" and works in a Mac Pro, but no boot screen when installed in a PC whatsoever.
Just in case there could be a compatibility problem with the older H110 chipset of my motherboard, I installed the enableGOP graphics card (MSI.GTX970.4096.160125_updGOP_macGOP_1.4) into a newer PC system (Z270). Still the same issue: CSM required. Without it, no POST and no power-on beep at all. I also tried HDMI and the Display Port, but no picture.
Once enableGOP has been inserted in the vBIOS, are these graphics cards actually ought to work in PC and UEFI/GOP?
Wondering what the deal is, I started to analyze how vBiosInsert works. Here is what I can gather so far:
1. Copy vbios.rom to modify_part.rom
2. Search modify_part for GOP start "55 aa .. .. f1 0e 00 00'
3. Convert the offset field from hex to decimal.
4. Split the modify_part.rom at the GOP offset into 2 parts, named
original_first_part.rom and original_last_part.rom.
Saturn:efitest dude$ ls -l
total 1152
-rwxrwxrwx@ 1 dude staff 45056 Oct 8 14:47 EnableGop_1.4.efi
-rwxrwxrwx 1 dude staff 179712 Sep 7 2022 MSI_GTX970_4G_gaming.rom
-rwxr-xr-x 1 dude staff 179712 Oct 30 18:50 modify_part.rom
-rw-r--r-- 1 dude staff 64512 Oct 30 18:57 original_first_part.rom
-rw-r--r-- 1 dude staff 115200 Oct 30 18:58 original_last_part.rom
$ hexdump -C original_first_part.rom | head -1
00000000 4e 56 47 49 c6 01 10 80 e8 06 00 80 62 14 60 31 |NVGI........b.`1|
$ hexdump -C original_last_part.rom | head -1
00000000 55 aa 94 00 f1 0e 00 00 0b 00 64 86 01 00 00 00 |U.........d.....|
5. Compress EnableGop_1.4.efi and call it insert.rom
6. Then some "magic" happens calculating/constructing NPDS, which I'm not sure about.
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...
winraid.level1techs.com
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).
I guess this is where the fun starts in calculating NPDS and handling multiple GOP sections.
Question:
How does the PC actually know which GOP header/image to use if there are 2 in the vBios. What's the story about "last image"? I'm just guessing, but if multiple GOP headers are present, does the BIOS prioritizes the one that appears last in the ROM file? How does the Mac Pro happen to pick the right one?