Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

saltarob

macrumors member
Oct 13, 2020
45
5
Your issue is completely unrelated to the topic of this thread.

RTX 3xxx GPUs require, or better, assume that the UEFI PC that you are installing adheres to the UEFI Class 3 and spec 2.3.1 (probably can work with 2.1 too), while Mac Pro is a EFI 1.10 Mac (note the missing U).

Recently written GPU firmwares assume certain things and don't have a fallback in case of an error, it's also the case with NAVI 2x GPUs, and unfortunately you can't do anything about (besides rewriting the Mac Pro BootROM).
Thank you so much for your answer.

Sorry I don’t understand why it is unrelated to the thread since it is entitled as “chime loop and black screen on a Mac Pro 5,1” which is exactly the problem I have. I apologize for the misunderstanding.

Even with OpenCore it is not possible to address the UEFI Class problem?
Is this a deeper layer underneath the OpenCore EFI? Or is OpenCore also EFI 1.10?

Does the RTX 2070 not have this requirement?

Thank you.
 

tsialex

Contributor
Jun 13, 2016
13,454
13,601
Even with OpenCore it is not possible to address the UEFI Class problem?

Nope, because the boot loop happens while the EFI firmware is doing the enumeration and long before OpenCore is even loaded.

Is this a deeper layer underneath the OpenCore EFI? Or is OpenCore also EFI 1.10?

It's not OpenCore related at all, but MacPro5,1 EFI firmware related.

The error happens when the GPU OPROM is loaded/enumerated, long before the EFI loads and hand over the hardware control to the boot loader.

Does the RTX 2070 not have this requirement?

RTX 2xxx and NAVI 1x GPUs are still compatible/capable to work with the MacPro EFI 1.10 firmware, anything newer than that, require Macs with newer UEFI spec support.

Since a lot of people wanted NAVI 2x support with MacPro5,1, MacVidCards developed a Mac EFI flashing solution and some time later Syncretic patched the original NAVI 2x firmwares to make it work. You are the first person that I know of trying to get a RTX 3xxx card to work with a MacPro5.1.

2018 Mac mini (via Thunderbolt + TB chassis) and 2019 Mac Pros are compatible with RTX 3xxx GPUs when running Windows, multiple people confirmed it.

late 2013 Mac Pro (via Thunderbolt + TB chassis) can work with NAVI 2x, also confirmed by multiple people.

AFAIK, no one ever tested a RTX 3xxx with a late 2013 Mac Pro + TB chassis + Windows, still unknown.
 
Last edited:

Dayo

macrumors 68020
Dec 21, 2018
2,257
1,279
The error happens when the GPU OPROM is loaded/enumerated
I believe there is a good chance the category of GPU in question can be made to work. Firstly, there have basically been the following "Problems" with using modern GPUs (GOP Based) GPUs on cMP:

PROBLEM 01:
MP31 to MP51 were released in a transition period from UGA to GOP. Apple added a custom GOP instance to the ConsoleOut Handle in the Mid 2010 cMP (possibly in the MP41 well but not confirmed as all examples appear to have been flashed to MP51).

Long story short, this caused problems with getting bootscreens on MP51 when running unsupported GOP based GPUs, such as RX 580, until a fix was found by the OpenCore team.

Apple did not make this change to the MP31 and funnily, MP31 therefore worked fine with such GPUs. UEFI2.x was in flux at that time and the MP51 Mutant GOP was later dropped.

It is an eye opener that Apple was so fed up with cMP that they didn't bother to fix this trivial issue when the Mid 2012 was released even though other units from that era already had proper UEFI 2.x implementation and had dispensed with the Mutant GOP instance. I suppose this "do the barest minimum we can get away with" approach will be evident on any Intel stuff that comes out now. I digress though, PROBLEM 01 was ultimately understood and worked around.

PROBLEM 02:
GOP is UEFI 2.x related and the UEFI 2.x specs mandates, or mandated ... may have changed, that at activation time, the GOP driver (in the GPU OptionROM) should check whether the device is UEFI 2.x compliant and not to initialise if not.

GPUs by AMD, such as the RX 580, tended not to implement this requirement and worked on MP31 without issue and on MP51 once PROBLEM 01 was worked around. GPUs by Nvidia on the other hand, tended to implement this requirement and would not work on cMP unless flashed. AMD most likely had code that fell back on CreateEvent (EFI 1.x compatible) in place of CreateEventEx (UEFI 2.x only).

On 31 Oct 2020, a small secretive group called "The Quest" gathered for the first time. It didn't know what PROBLEM 02 was exactly and only knew that Nvidia GPUs didn't work on cMP without flashing while AMD ones did. It was determined to get to the bottom of this and after going through some blood curdling rituals, went to work immediately.

Barely a week later, on 04 Nov 2020, someone posted this:
My guess is, the Nvidia option rom is executed, finds that the environment is not UEFI (it's EFI 1.1), then does not install the GOP protocol and it does not enable binding (not installed as a driver that waits for new devices to appear).
I want to disassemble an Nvidia Rom to find out if it has an early exit condition like that.

He was right on the money and soon put two drivers together, FakeUEFI2 and ReloadPCIRom, that sorted the problem. This was rapidly incorporated into RefindPlus and subsequently ported into OpenCore.

PROBLEM 03:
Everyone lived happily using whatever GPUs they wanted to use but as with Sauron and Voldermort, the problems were not quite gone. With the passage of time, the UEFI Specs were apparently changed and/or GPU vendors decided nobody uses EFI 1.x or the older UEFI 2.x releases anymore. They then assumed every device a GPU is running on is UEFI 2.3 or newer. They apparently stopped checking to implement an early exit and AMD apparently removed the EFI 1.x fallback stuff. They basically plunged into running UEFI 2.x code, most likely CreateEventEx calls, which would always crash on EFI 1.x devices (such as cMP), without checking.

I see two potential options for this new problem:
Option A: The FakeUEFI2 driver by @joevt is embedded in the firmware. @startergo ... you did this once and perhaps you could put up a guide ... probably not for the faint of heart though. Perhaps it might be worth discussing with @tsialex to properly insert it into BootROM reconstructions. This should fix PROBLEM 02 at the firmware level and avoid PROBLEM 03.

Option B: Someone that knows how to patch the OptionROMs like @Syncretic adds the early exit code in. The GPUs will not initialise but importantly, the code will not crash. This should reset things to match PROBLEM 02 which existing tools like RefindPlus and OpenCore can handle.
 
Last edited:

Syncretic

macrumors 6502
Apr 22, 2019
311
1,533
I believe there is a good chance the category of GPU in question can be made to work. Firstly, there have basically been the following "Problems" with using modern GPUs (GOP Based) GPUs on cMP:

PROBLEM 01:
MP31 to MP51 were released in a transition period from UGA to GOP. Apple added a custom GOP instance to the ConsoleOut Handle in the Mid 2010 cMP (possibly in the MP41 well but not confirmed as all examples appear to have been flashed to MP51).

Long story short, this caused problems with getting bootscreens on MP51 when running unsupported GOP based GPUs, such as RX 580, until a fix was found by the OpenCore team.

Apple did not make this change to the MP31 and funnily, MP31 therefore worked fine with such GPUs. UEFI2.x was in flux at that time and the MP51 Mutant GOP was later dropped.

It is an eye opener that Apple was so fed up with cMP that they didn't bother to fix this trivial issue when the Mid 2012 was released even though other units from that era already had proper UEFI 2.x implementation and had dispensed with the Mutant GOP instance. I suppose this "do the barest minimum we can get away with" approach will be evident on any Intel stuff that comes out now. I digress though, PROBLEM 01 was ultimately understood and worked around.

PROBLEM 02:
GOP is UEFI 2.x related and the UEFI 2.x specs mandates, or mandated ... may have changed, that at activation time, the GOP driver (in the GPU OptionROM) should check whether the device is UEFI 2.x compliant and not to initialise if not.

GPUs by AMD, such as the RX 580, tended not to implement this requirement and worked on MP31 without issue and on MP51 once PROBLEM 01 was worked around. GPUs by Nvidia on the other hand, tended to implement this requirement and would not work on cMP unless flashed. AMD most likely had code that fell back on CreateEvent (EFI 1.x compatible) in place of CreateEventEx (UEFI 2.x only).

On 31 Oct 2020, a small secretive group called "The Quest" gathered for the first time. It didn't know what PROBLEM 02 was exactly and only knew that Nvidia GPUs didn't work on cMP without flashing while AMD ones did. It was determined to get to the bottom of this and after going through some blood curdling rituals, went to work immediately.

Barely a week later, on 04 Nov 2020, someone posted this:


He was right on the money and soon put two drivers together, FakeUEFI2 and ReloadPCIRom, that sorted the problem. This was rapidly incorporated into RefindPlus and subsequently ported into OpenCore.

PROBLEM 03:
Everyone lived happily using whatever GPUs they wanted to use but as with Sauron and Voldermort, the problems were not quite gone. With the passage of time, the UEFI Specs were apparently changed and/or GPU vendors decided nobody uses EFI 1.x or the older UEFI 2.x releases anymore. They then assumed every device a GPU is running on is UEFI 2.3 or newer. They apparently stopped checking to implement an early exit and AMD apparently removed the EFI 1.x fallback stuff. They basically plunged into running UEFI 2.x code, most likely CreateEventEx calls, which would always crash on EFI 1.x devices (such as cMP), without checking.

I see two potential options for this new problem:
Option A: The FakeUEFI2 driver by @joevt is embedded in the firmware. @startergo ... you did this once and perhaps you could put up a guide ... probably not for the faint of heart though. Perhaps it might be worth discussing with @tsialex to properly insert it into BootROM reconstructions. This should fix PROBLEM 02 at the firmware level and avoid PROBLEM 03.

Option B: Someone that knows how to patch the OptionROMs like @Syncretic adds the early exit code in. The GPUs will not initialise but importantly, the code will not crash. This should reset things to match PROBLEM 02 which existing tools like RefindPlus and OpenCore can handle.
@Syncretic is tired of patching every new Navi version that comes out, so he is currently alpha-testing a broad solution to problems 01-03 listed above, for the Mac Pro 4,1/5,1. If all goes well, he will soon be looking for beta testers; he promises to post an update when appropriate. (He also hopes that in future posts, he will stop referring to himself in the third person.)
 

Dayo

macrumors 68020
Dec 21, 2018
2,257
1,279
@Syncretic has earned the right to refer to himself however he pleases, all the more so should he indeed create the one ring to rule them all. In the event of AVX Emulation, he can start using the pluralis majestatis.
 
  • Haha
Reactions: EdMun and mikas

joevt

macrumors 604
Jun 21, 2012
6,967
4,262
I think I've said this before, but my idea for a solution would be an EFI rom that wraps the original UEFI rom, installs patches and missing protocols, then starts the original UEFI rom. The rom would need space for the wrapper, maybe add compression if the original is not compressed already, maybe remove BIOS rom if necessary. This will work only if the UEFI rom doesn't try to read itself from PCI Expansion ROM Base Address Register.

I think EFI has a compression algorithm somewhere. If not, we can use our own. Recently, I've looked at lzss that Apple uses for Open Firmware in New World Macs (Power Macs since B&W G3).
 

Macschrauber

macrumors 68030
Dec 27, 2015
2,980
1,487
Germany
A part of the Fsys stream in the nvram volume is compressed (base blob, hardware descriptor, sensor definitions). So I guess compression is doable.
 

Bmju

macrumors 6502a
Dec 16, 2013
702
767
I believe there is a good chance the category of GPU in question can be made to work. Firstly, there have basically been the following "Problems" with using modern GPUs (GOP Based) GPUs on cMP:

PROBLEM 01:
MP31 to MP51 were released in a transition period from UGA to GOP. Apple added a custom GOP instance to the ConsoleOut Handle in the Mid 2010 cMP (possibly in the MP41 well but not confirmed as all examples appear to have been flashed to MP51).

Long story short, this caused problems with getting bootscreens on MP51 when running unsupported GOP based GPUs, such as RX 580, until a fix was found by the OpenCore team.

Apple did not make this change to the MP31 and funnily, MP31 therefore worked fine with such GPUs. UEFI2.x was in flux at that time and the MP51 Mutant GOP was later dropped.

It is an eye opener that Apple was so fed up with cMP that they didn't bother to fix this trivial issue when the Mid 2012 was released even though other units from that era already had proper UEFI 2.x implementation and had dispensed with the Mutant GOP instance. I suppose this "do the barest minimum we can get away with" approach will be evident on any Intel stuff that comes out now. I digress though, PROBLEM 01 was ultimately understood and worked around.

PROBLEM 02:
GOP is UEFI 2.x related and the UEFI 2.x specs mandates, or mandated ... may have changed, that at activation time, the GOP driver (in the GPU OptionROM) should check whether the device is UEFI 2.x compliant and not to initialise if not.

GPUs by AMD, such as the RX 580, tended not to implement this requirement and worked on MP31 without issue and on MP51 once PROBLEM 01 was worked around. GPUs by Nvidia on the other hand, tended to implement this requirement and would not work on cMP unless flashed. AMD most likely had code that fell back on CreateEvent (EFI 1.x compatible) in place of CreateEventEx (UEFI 2.x only).

On 31 Oct 2020, a small secretive group called "The Quest" gathered for the first time. It didn't know what PROBLEM 02 was exactly and only knew that Nvidia GPUs didn't work on cMP without flashing while AMD ones did. It was determined to get to the bottom of this and after going through some blood curdling rituals, went to work immediately.

Barely a week later, on 04 Nov 2020, someone posted this:


He was right on the money and soon put two drivers together, FakeUEFI2 and ReloadPCIRom, that sorted the problem. This was rapidly incorporated into RefindPlus and subsequently ported into OpenCore.

PROBLEM 03:
Everyone lived happily using whatever GPUs they wanted to use but as with Sauron and Voldermort, the problems were not quite gone. With the passage of time, the UEFI Specs were apparently changed and/or GPU vendors decided nobody uses EFI 1.x or the older UEFI 2.x releases anymore. They then assumed every device a GPU is running on is UEFI 2.3 or newer. They apparently stopped checking to implement an early exit and AMD apparently removed the EFI 1.x fallback stuff. They basically plunged into running UEFI 2.x code, most likely CreateEventEx calls, which would always crash on EFI 1.x devices (such as cMP), without checking.

I see two potential options for this new problem:
Option A: The FakeUEFI2 driver by @joevt is embedded in the firmware. @startergo ... you did this once and perhaps you could put up a guide ... probably not for the faint of heart though. Perhaps it might be worth discussing with @tsialex to properly insert it into BootROM reconstructions. This should fix PROBLEM 02 at the firmware level and avoid PROBLEM 03.

Option B: Someone that knows how to patch the OptionROMs like @Syncretic adds the early exit code in. The GPUs will not initialise but importantly, the code will not crash. This should reset things to match PROBLEM 02 which existing tools like RefindPlus and OpenCore can handle.
This is a great summary.

Based on my recent commit to OpenCore, which allows the Apple Boot Picker to run on non-natively supported cards (currently only under OpenCore, ofc), I _believe_ that this could be extended to a modified version of the picker UI which could be burnt into firmware and would run with non-natively supported cards even without OC. I am investigating this and I am making progress.

If it works, this would be a self-contained way of addressing specifically issue 1 of the above, issues 2 and 3 would still need addressing by the joevt code, which I agree would need to be burnt into ROM as well.

Idk if this overlaps with work already in progress by others, and I would be more than open to communication on thread or by PM if anyone thinks what I'm describing fits well/better into any existing efforts!
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.