Hi @yandong31, I saw that you also asked the question on Discord to get CorpNewt (aka CorpGhost) involved in this topic.
I'm happy about that and would like him to participate as well to shed some light on this topic, even though it may not be his area of expertise ๐ (sorry)
Getting back to us, you're not considering the fact that when these discussions first started, the DevirtualizeMMIO quirk wasn't so โfamousโ and the version of OpenCore (0.6.x) was much less refined than the one we use today (see, for example, the quirk section and the bootloader's memory manager itself).
I and other users who had bought an AMD trx40 (top of the range at the time) clashed over the fact that OSX would not start on these machines.
The first consideration that came up was that AMD's kernel patches needed to be updated (but this was not the case with subsequent tests).
From here, the questions I asked vit9696 on Insanelymac at the time also consider the fact that DevirtualizeMMIO was used exclusively to run old OSes on Intel and for little else.
So, with my obvious shortcomings on the subject, I started doing some debugging to understand why OSX wasn't working on my PC and those of other unfortunate colleagues (TRX40 users).
Vit9696 and DownloadFritz (chief developers of the OpenCore project) tried to explain to me in a cryptic way (at the time) how to debug, and you can find these tests on InsanelyMac.
It wasn't easy to talk to them for two reasons...
the first is that I'm not a technician on these topics, and the second is that they consider the kernel patches we use to be junk.
That said, after running all the tests (and there were 19 MMIO areas for my system at the time), they said that the AMD patches for the kernel were โborked.โ
* Here I'll open a small parenthesis for further explanation.
None of us could understand at the time whether this statement was correct or not, so we devoted ourselves completely to virtualizing OSX with ProxMox. and it was a wonderful experience for all of us ๐
Some time later, without any changes to the AMD kernel patches, in a more recent version of opencore (with new quirks and openruntime), the TRX40 systems began to overcome the initial hang due to lack of memory space, but any attempt to start OSX failed miserably.*
So we started reviewing the various combinations of quirks and MMIO areas, and one user (Pavo) announced that he had managed to run the OSX of the time (perhaps Mojave or Catalina) in โbare metalโ (without virtualizing in ProxMox).
There were several problems, but the system worked ๐
From there, further questions arose about how to optimize our systems.
Some restarted instead of shutting down, others gave KP errors under certain conditions (sleep/wake).
And much more.
And so began the story that more is better! ๐
We started trying all the combinations and got to the point where, by reassigning all the MMIO areas (skip 1) except the last three of each motherboard manufacturer at the time, we were able to get OSX working perfectly in all its parts
Now, I don't want to bore you and any other readers with other studies and tests carried out at the time, but we achieved a system of exceptional usability for all users.
Some time later, a user who had studied some patches for Adobe products (XLNC) posted a new method on the trx40 thread.
Without making the MMIO declaration in the whitelist but activating the DisableWriteVariable quirk, the same results were achieved!
Personally, I never applied it on TRX40 except to verify what he said about his method, but it worked.
Now I often use it with new users who are unable to do things themselves to get the correct MMIO for their machines, just to get them started and make them enthusiastic that the money they spent on their PC wasn't wasted ๐
I hope that with this long explanation, you have a better understanding of my point of view, and I reiterate my happiness that others today (which is easier than it was then) are showing interest in this topic ๐
Ah, another topic we tried to understand was associating these MMIO areas with parts of the BIOS of motherboards and controlled devices (USB, SATA, NVMe, NVRAM, PCIe slots, and so on).
We didn't succeed, and no one has ever done so to date ๐