OpenCore
1.0.4
OpenCore Bootloader
|
EnableGop version (OpenCore version)
Note 1: This should provide faster GOP rendering on all EnableGopDirect systems; and rendering at least at the same speed as before, and on some systems noticeably faster than before, on almost all EnableGop systems.
Note 2: The compressed driver for version 1.2 is 1KB larger than for version 1.1, so for AMD GPU firmware which is tight on space version 1.1 may be used instead to avoid the need for VGA stripping to make additional space.
Current status: Beta release.
This driver has been tested and is working on several iMac models with several different GPUs, and on several MacPro4,1/5,1 machines with several different GPUs. However, in the worst case (and still possible) scenario, an incompatible or incorrectly installed driver in firmware may brick your hardware.
In all cases take a backup of the main firmware or GPU firmware which you are modifying, and confirm that you can successfully restore from this, before starting.
ssh
(which must have been enabled beforehand) and reprogram the GPU firmware. Advice on this headless boot approach is not provided here, but may be found for instance on the iMac GPU related forum threads listed below.If you are not familiar with the above procedures, you are strongly recommended to wait for further testing by users who are. No further help can be provided here, and you proceed entirely at your own risk.
Targetting EFI-era (~2009-2012) MacPro4,1/5,1 and iMac firmware, this driver gathers and injects the parts of OpenCore needed for pre-boot graphics support with non-natively supported GPUs.
The requirements for using this driver are:
BootKicker.efi
) (otherwise, the driver will not work).When installed, the driver should enable:
Compiled versions of the driver files and these instructions may be found in the Utilities/EnableGop
directory of the OpenCore release package.
For GPUs needing DirectGopRendering
in OpenCore configuration, use EnableGopDirect.efi
, otherwise use EnableGop.efi
as it renders faster on most other systems.
The driver may be installed to GPU or main motherboard firmware. It is expected that most Mac Pro users will use main firmware insertion and most iMac users will chose GPU firmware insertion, however both techniques work on both systems (but it is harder to modify the iMac main firmware, since there is no simple way to enable writing to it).
Further discussion and community support for this driver is available at:
For reading and writing to main firmware on the Mac Pro, @Macschrauber's Rom Dump works well. Alternatively the kexts and executables which this uses can be sourced individually (or extracted from the Rom Dump app) and run from the command line.
The main firmware on the iMac cannot be updated without an initial hardware flash (SOIC clip plus CH341A controller), therefore the recommended approach on iMac systems is GPU firmware injection. However, the below instructions for firmware injection do work, if you are willing to do a hardware flash of the resulting firmware file, or if you have already unprotected your iMac firmware - which reduces security, and is only recommended for those actively developing firmware modifications.
The .ffs
file provided in this directory can be manually added to the extracted firmware file using UEFITool
, or automatically added using @dosdude1's DXEInject
. Once more, if you are not familiar with these procedures, you are recommended to proceed with extreme caution.
To install the driver via DXEInject
, the command is:
DXEInject {original}.rom {modified}.rom EnableGop.ffs
The file {modifed}.rom
is ready for burning, although the result can be checked using UEFITool, if required.
Note: If only reading a file with UEFITool, the latest version is recommended, as it provides the most information. For writing, the older version 0.25.1 must be used, as described below.
The .ffs
file may be inserted anywhere within the same firmware volume which contains DuetBds
(file GUID A6F691AC-31C8-4444-854C-E2C1A6950F92
). However, for simplicity, these instructions will insert it in the same place that DXEInject
does:
BAE7599F-3C6B-43B7-BDF0-9CE07AA91AA6
EnableGop.ffs
The end result, after saving and re-loading, should look like this:
Instructions and a script for inserting the driver into Nvidia or AMD GPU firmware (aka VBIOS) are provided.
Please note all the cautions already given above about the difficulty of recovering, unless you are familiar with the procedures necessary, if this process fails.
To use the provided vBiosInsert.sh
script:
nvflash
tool (Nvidia) or amdvbflash
tool (AMD) (both are available for Linux and Windows), which can be used to read from and write to the GPU firmware../vBiosInsert.sh [-a|-n] {original}.rom EnableGop.efi {modified}.rom
, with -a
for AMD and -n
for Nvidia.vBiosInsert.sh
from a specific release of EnableGop, please try the version included with the latest release of OpenCore before reporting any issues. The script receives updates to support additional graphics cards independently of any bumps to the release version of EnableGop. If you need to, you can use the latest version of vBiosInsert.sh
to inject older versions of EnableGop.{modified}.rom
may be burnt to the GPU firmware.In the case of AMD, considerably less space is normally available, due to a strict limit of 128k for legacy and EFI parts of the larger ROM image. If there is not enough space (i.e. script reports data would be truncated) then it is necessary to strip some legacy VGA parts of the GPU firmware. This is beyond the scope of these instructions.
If required to manually detect the GOP offset (this should normally be autodetected):
Using a hex editor, search in the GPU firmware dump for the byte sequence
F1 0E 00 00
with the byte sequence55 AA
coming close before it; the start address of the55 AA
is the GOP offset value needed.
For further information on GPU firmware modification, see: