Hi, I've been following this closely, and trying to find a solution myself. I have a C612 workstation running Sierra 10.2.2 and avoid modifying kexts etc. at all costs. I have not edited my X4100.kext at all, I instead use SSDT injection to disable all devices that slot has PCI routes to by setting their _STA to zero. I then inject my own device named GFX1 with a fake ID, 0x67FF in my case, solving the MacPro gfx0 unload problem and matching the X4100.kext in one update-proof go.
I also have no IGPU at all of course.
I am competent in simpler embedded systems (ARM cortex-3 micros and simpler mostly) and have been adding my own debug info to clover and testing it (without any useful results =/) but I am just trying to say I can help test whatever and will probably know what it is you want me to do.
Oh yeah I have an RX 480.
So, some things I've noticed:
1. Non-primary GPUs will display black while Clover is booting/booted. This is different from what happens with an RX480. By display black, I mean there is a valid video signal driving the display and telling it to show black pixels.
However, the RX 480 isn't displaying black, it's not displaying anything - there is no valid signal coming out of the ports at all. I wonder why this is? Might be nothing but mentioning it in case it's useful.
2. I have a dual link 2560x1440 DVI display, and I've noticed that when I inject my EDID, when the X4100 kext loads, instead of the RX 480's output going dead suddenly, the bottom half of my display flashes white (I have some 240 fps video if you think it's worth the time) before the video input dies. so something is making only one of the two dual link channels briefly go all white. This does not happen at all normally, normally video just cuts out without any flash etc.
3. The not finding a valid rom might not be invoked. This happens on Linux too but doesn't cause any problems. Also, all of this happens if I load a valid vbios from my EFI partition or don't.
4. The Polaris cards have a hybrid rom, which is a UEFI/GOP module in addition to a traditional legacy rom. The UEFI module acts as a loader for the legacy module.
Note, both of these rom sections are digitally signed. The UEFI module verifies the signature of the legacy rom and only loads it if it passes. The UEFI module's signature is only verified by the computer's BIOS itself if secure boot is enabled, so that isn't really relevant.
Anyway, I altered my legacy rom section such that it would fail validation but still work fine, then flashed that onto my card. I then forced my BIOS to "UEFI only" mode, which of course resulted in no video coming out of the card. The legacy rom wouldn't load, and CSM/any loading of it by the mobo itself wasn't allowed.
Only, if I wait, video happily appears along with OS X's login screen, as soon as the X4100 kext loads. This is with the RX 480 as primary, and a invalid (in terms of the signature) legacy rom section.
I know recent Mac pro's EFI will actually find and load legacy rom sections of cards, removing the need of having an EFI section to work.
This is my thinking: is it possible that when the UEFI/GOP module loads the legacy rom, it remaps it? Or remaps something? I don't think this is a connector problem - though that might be an issue on its own, I don't know. If the frame buffer doesn't match connectors, the video cuts out entirely but OS X still boots. You have no screen but you can mash keys and hear sounds.
That is not what occurs with the RX 480. It halts, immediately. All hard drive I/O stops mid boot, and that's the end. On rare occasions, my machine (or rather The xnu kernel) will actually manage to automatically reboot when this happens, just like certain kernel panics. This outcome is rare though, and usually my machine just locks in permanent limbo.
anyway, i dunno if any of that is at all useful. But if you need me to test anything or want any information from me, let me know. Oh, I did prevent the X 4100 kext from loading and booted without accelerated video, and can confirm that all those extra properties, the frame buffer, connector injection seems to work correctly. I would an ioreg dump be useful?
Though, It also likely means that it's not the culprit, but I am kind of out of my element.
Anyway, thank you very much Slice and Mork vom Ork for the time you've given towards figuring out this problem. I know Slice isn't even really interested, but trying to get the sleep/wake issues with ATI cards sorted, so a double thanks for going out of your way on this side problem.