EliteMacx86

Administrator
Staff member
Joined
Jul 22, 2018
Messages
4,171
Motherboard
Supermicro X11SPA-T
CPU
Intel Xeon W-3275 28 Core
Graphics
2xAMD RX 580 8GB
OS X/macOS
11.0.x
Bootloader
  1. OpenCore
Mac
  1. Mac mini
  2. MacBook Pro
Mobile Phone
  1. Android
  2. iOS
How to Enable Intel HD and UHD Graphics on macOS - Intel Framebuffer Patching Guide

An EliteMacx86 Exclusive Guide - This guide covers fixing Intel HD and UHD Graphics on macOS. By following this guide, you'll be able to enable Intel Graphics with acceleration on macOS with full QE/CI on your system. This guide also covers Intel Framebuffer patching and other important Graphics and Display aspects.

I. Overview


macOS supports a wide range of Intel HD Graphics (also referred to as iGPU) but some of them might not work out of the box if you have not followed the Clover or OpenCore Installation Guide. Before you start with this guide, please know something about the performance. Graphics enhance the performance and helps to work smoothly. In macOS, full acceleration requires that both Quartz Extreme and Core Image (QE/CI) should work together.

Quartz Extreme and Core Image (QE/CI) should work together to enable full acceleration on macOS’s GUI. It utilizes complete Graphics capabilities. In case you haven’t enabled QE/CI on your graphic card, you won’t be able to use your macOS smoothly and there would be lots of lags and artifacts, graphics-related issues, and poor refresh rate. Also, the dock would not be transparent. Therefore it is very important to ensure that your graphic is working with full QE/CI.

While you try to enable Intel Graphics, there could be several problems such as no acceleration, KP when booting or black screen, and other several related issues. This guide covers all such important aspects.

II. macOS and DVMT


It should be noted that macOS expects the DVMT-prealloc to be set to 64MB or larger. If a system has less than 64MB which is not large enough and will likely cause a Kernel Panic when booting with correct IGPU Device Properties. To overcome this issue, you need to set the DVMT-prealloc to 64MB (for 1080p) and 96/128/192MB (for 4K/UHD/QHD/QHD+ Displays) in BIOS/UEFI.

Mostly on Desktops, there is an option to change the DVMT Pre-alloc, with the exception of a few OEM Desktop systems. Even, if there is no option to change the DVMT Pre-alloc on Desktops, the manufacturer already sets the required values by default. However, sometimes, changing these values may be required in special cases such as OEM Systems. When it comes to a Laptop, this is not the case with a majority of Laptops. Depending on your Laptop make and model, your manufacturer may have set the DVMT-prealloc to 32MB by default, which is not large enough. Some manufacturers even restrict the DVMT settings access and your BIOS might be limited in such cases. If you don't have the option to change these values you can simply skip this step as long as you use a 32MB DVMT pre-alloc patch.

If your system does not have the option to change the DVMT Settings and has less than 64MB, you can use semantic framebuffer-stolenmem and framebuffer-fbmem patches. You can find the 32MB DVMT patch in the semantic patch example. There are a few ways to set the required DVMT-prealloc value even if your BIOS does not provide the option, but they are not ideal and moreover, they are risky. These methods include BIOS Unlocking and changing of UEFI Variable using UEFI Shell.

On a side note, if your Laptop has the correct DVMT-prealloc value as required (64MB or 128MB), it is advised to disable or remove the 32MB patch. However, there are Laptops, where you have the required amount of DVMT-prealloc set in BIOS, but it actually allocates less and as a result, it may Kernel Panic during cold boot. For such cases, it is strongly recommended to not disable or remove the 32MB patch.

III. 4K/UHD/QHD/QHD+ Displays


4K/UHD/QHD/QHD+ has additional DVMT requirements. The DVMT Pre-alloc must be set to 64 MB or 96/128/192MB in BIOS/UEFI. In some cases, increasing framebuffer-stolenmem to 34MB can help you to achieve this. If increasing stolenmem does not work in your case, you need to unlock the BIOS to set the required DVMT. See the threads linked below for more information.


IV. Resolution and Refresh Rate


Although, macOS/OS X supports a wide range of resolutions and refresh rates, not every connector is capable of displaying the resolution and refresh rate you expect. The resolution and refresh rate is dependent on the monitor/LCD panel you use. If a CPU with an Integrated GPU (commonly referred to as IGPU) does not support a particular resolution and refresh rate, you cannot use that particular resolution and the refresh rate. For example, Intel Core i7-8565U supports 4K@24Hz (HDMI), 4K@60Hz (DisplayPort), eDP (4K@60Hz). Here, you cannot override the resolution or the refresh rate and you're limited by the technology used.

ConnectionResolution and Refresh Rate
HDMI 1.0
  • 1080p (1920x1080) @60Hz
  • 1920x1200 @60Hz
HDMI 1.3
  • QHD (2560x1400) @75Hz
  • 1080p (1920x1080) @144Hz
HDMI 1.4
  • FHD (1920x1080) @120Hz
  • 4096x2160@24Hz
  • 4K@24, 25, 30Hz
HDMI 2.0
  • 4K@60Hz
HDMI 2.1
  • 4K (3840x2160) @120Hz
  • 8K (7680x4320) @60Hz
DisplayPort 1.1
  • WQXGA (2560x1600) @60Hz
  • 4K (3840x2160) @30Hz
DisplayPort 1.2
  • 4K (3840x2160) @60Hz
  • 5K (5120x2880) @30Hz
  • 8K (7680x4320) @30Hz
DisplayPort 1.3
  • WQXGA (2560x1600) @60Hz (upto 4 displays, MST)
  • 4K (3840x2160) @120Hz, 4K@60Hz (upto 2 displays, MST)
  • 5K (5120x2880) @60Hz
  • 8K (7680x4320) @30Hz
Display Port 1.4
  • 4K (3840x2160) @120Hz
  • 5K (5120x2880) @60Hz
  • 8K (7680x4320) @60Hz
DisplayPort 2.0
  • 4K (3840x2160) @144Hz (upto 2 displays), 4K (3840x2160) @90Hz (upto 3 displays)
  • 8K (7680x4320) @120Hz (upto 2 displays)
  • 10K (10240x4320) @60Hz (upto 1 display), 10K (10240x4320) @60Hz (upto 3 displays)
  • 16K (15360x8640) @60Hz (upto 1 display)
USB Type-C
(when using only two lanes on the USB-C connector via DP Alt Mode)
  • QHD (2560x1440) @120Hz (upto 3 displays)
  • 4K (3840x2160) @144Hz (upto 3 displays), 4K (4096x4096) @120Hz (upto 2 displays)
  • 8K (7680x4320) @30Hz (upto 1 display)


V. Display Connection Support


macOS/OS X supports a wide range of display connections. However, some connections are limited and/or not supported OOTB. When you use an unsupported connection type, the system may end up with a black screen before the login screen. In certain cases, such as VGA on Ivy Bridge, it may lack Graphics acceleration. In addition, using a non-supported display connection can result in glitches and artifacts or a black screen.

Connector Type Support Table

ConnectionNotesReference
Display Port
  • Commonly found on Desktops. Rare on Laptops.
  • External connection.
  • Works by default with proper framebuffer patching.
  • Supports Audio.
  • Supports HotPlug
HDMI
  • Commonly found on Desktops and Laptops.
  • External connection.
  • Works by default with proper framebuffer patching.
  • Supports Audio.
  • Supports HotPlug
DVI
  • Commonly found on Desktops.
  • External connection.
VGA
  • Commonly found on Desktops and Laptops (with some exceptions). Rare on new generation Laptops.
  • External connection.
  • Does not supports Audio.
  • Works by default with Intel Skylake and newer. VGA ports on Skylake and newer are DisplayPorts internally and as a reason, it is supported.
  • Connector patching is required for Ivy Bridge and other generations.
  • HotPlugging usually does not work.
LVDS
  • Commonly found on Laptops and some AIO.
  • Internal connection.
  • Does not supports Audio.
  • Works by default with proper framebuffer patching.
  • A laptop's LCD panel may be connected through either LVDS or eDP.
eDP
  • Commonly found on Laptops and some AIO of the old generation.
  • Internal connection.
  • Does not supports Audio.
  • A laptop's LCD panel may be connected through either LVDS or eDP.

VI. Non-Metal Graphics


With the release of macOS Mojave (10.14), support for all non-Metal Graphics was dropped. However, with the consistent effort of Dortania and @ASentientBot, it is possible to use non-Metal Graphics on a new macOS version but you need to take care of the following:
  • Due to the heavy dependency on Metal API, there will be glitches since macOS Mojave and later.
  • Blurs are broken all throughout the system, including context and menu bar menus, sidebars, authentication popups, and buttons.
  • Apps that rely on Metal may not work correctly or at all.
VII. Compatibility


Not all Intel Graphics are supported under macOS/OS X. For more information on GPU compatibility, refer to the thread linked below.

VIII. Requirements


GraphicsSupported Intel Desktop or Mobile Graphics. See IGPU Compatibility for more information.
KextsOriginal Graphics kexts in S/L/E
macOS VersionOS X Snow Leopard 10.6 and later

IX. Preparation


Before skipping to the fixing part, you must prepare the system accordingly. To prepare the target system, follow the steps below.

STEP 1: Setup BIOS

The very first step is to set up BIOS to have the IGPU Enabled on your System. Follow the steps below to set up your BIOS for IGPU.

1. On your target computer, boot to BIOS. Refer to your user manual for the BIOS Key
2. Set the following parameters as shown.

SettingsValueNotes
Intel Processor GraphicsEnabled
DVMT Total Memory Size
DVMT Pre-Allocated
64MB
DVMT Total Memory SizeMax

3. Save & Exit Setup

NOTES:
  • If you only want to use IGPU, set the Initial PCIe Output display to IGFX.
  • The above settings are for IGPU only. See BIOS Settings for more information.
  • If your system does not have any of the above settings in BIOS, ignore such settings.

STEP 2: Remove Outdated Kexts, Injections, and ACPI Renames

Once you have set up the BIOS, the next step is to remove the kexts, injections, and ACPI renames that can interfere with the Graphics implementation. To remove such, follow the steps below.

Kexts Removal
If you're using any of these kexts listed below, it is recommended to remove them. See notes below.

1. Mount your ESP
2. Remove the following kexts.
  • IntelGraphicsFixup.kext
  • NvidiaGraphicsFixup.kext
  • CoreDisplayFixup.kext
  • Shiki.kext
  • IntelGraphicsDVMTFixup.kext
  • AzulPatcher4600.kext
  • AppleBacklightFixup.kext,
  • FakePCIID_Intel_HD_Graphics.kext
  • FakePCIID_Intel_HDMI_Audio.kext
  • FakePCIID.kext
NOTES:
  • If you're using OpenCore, you'll also need to remove the kext entries from your kernel section in your config.plist
  • For Mojave and prior, make sure these kexts don't exist in Library/Extensions or System/Library/Extensions.
  • For a few systems, it may require FakePCIID_Intel_HD_Graphics.kext and FakePCIID_Intel_HDMI_Audio.kext to enable Graphics and HDMI/DP Audio. However, the use of such is in special cases only.
  • Do not remove FakePCIID.kext if you're using any other FakePCIID plugins.

Clover Properties and Injections
If you're using Clover, you need to disable Clover properties and injections.

1. Mount your ESP
2. Open your config.plist and disable and/or remove the following from their respective sections

Disable DSDT Fixes
The DSDT fixes can be disabled in Acpi>Fixes section.
  • AddHDMI
  • FixDisplay
  • FixIntelGfx
  • AddIMEI
  • FixHDA
  • AddPNLF
Remove Fake IDs
The Fake IDs can be disabled in the Devices>Fake ID section.
  • ATI
  • IntelGFX
  • NVidia
  • IMEI
Disable injection properties
The injection properties can be disabled in the Devices>Properties section.
  • Inject
  • UseIntelHDMI
  • HDMIInjection
  • SetIntelBacklight
  • SetIntelMaxBacklight
Disable Graphics Injection
The Graphics injection can be disabled in the Graphics section
  • ATI
  • Intel
  • NVidia
Remove ig-platform-id
The ig-platform-id can be removed in the Graphics section

ACPI Renames
If you're using any ACPI renames, you'll need to disable or delete the ACPI renames as these can conflict with WhateverGreen's automatic renames.

1. Mount your ESP
2. Open your config.plist and remove the following ACPI renames. For Clover, it's in Acpi>DSDT>Patches section, and for OpenCore, it's under ACPI>Patch section.
  • GFX0 to IGPU
  • PEGP to GFX0
  • HECI to IMEI
  • MEI to IMEI
  • HDAS to HDEF
  • B0D3 to HDAU
STEP 3: Add Required Kexts

The next step is to add the required kexts to enable Graphics and to use the WhateverGreen properties. WhateverGreen doesn't work standalone. Lilu and WhateverGreen are needed together to work in conjunction.

1. Download Lilu and WhateverGreen from the downloads section of this forum.
2. Mount your ESP.

For Clover:
If you're using Clover, copy both the kexts to EFI/Clover/Kext/Others

For OpenCore:
If you're using OpenCore, copy both the kexts to EFI/OC/Kexts. You'll also need to add the kext entries in the Kernel section of your config.plist.

NOTES:
  • Download the latest version for better support.
  • Download only the RELEASE.zip file.
  • If the kext is already present in the directory, replace them with a new version
  • Do not use WhateverGreen.kext.dSYM, WhateverName.app and Lilu.kext.dSYM

STEP 4: Set Framebuffer

The next step is to set framebuffer depending on your CPU Code Name. To set the framebuffer, follow the steps below

1. Mount your ESP
2. Open your config.plist
3. Depending on your CPU model and the Graphics, select the framebuffer from the table below and depending on the bootloader you use, add the following properties to your config.plist under Devices>Properties (for Clover) and DeviceProperties (for OpenCore)
4. Once the properties have been added, save your config.plist

QUICK INFO:
  • If your system has less DVMT Pre-Alloc than required, use 32MB DVMT Pre-Alloc patch which is described in the Framebuffer Patching section as a semantic patch example.

I. Arrandale [Intel HD Graphics]

Issues and Limitations:

The AppleIntelHDGraphicsFB.kext only supports LVDS (internal screen) and VGA (experimental). eDP, HDMI and DisplayPort are not supported at all. A laptop's panel may be connected through either LVDS or eDP.

If your Laptop uses eDP for the internal screen, you cannot drive Graphics acceleration using a built-in eDP Display. The problem with eDP displays is that you cannot load the Intel® HD Graphics framebuffer because it does not support the eDP display connector. However, if you can patch VBIOS and achieve a native resolution without Graphics acceleration. If you have successfully enabled native resolution on your eDP display, you can enable partial acceleration. In macOS/OS X, full acceleration requires that both Quartz Extreme and Core Image (QE/CI) work together. Since your display uses the eDP connector, you will not be able to enable Quartz Extreme (QE) as this technology requires the Intel® HD Graphics framebuffer to work correctly. You can however enable Core Image (CI). In short, Core Image (CI) is a technology that enhances image processing effects by utilizing the graphics processing unit (GPU). Luckily, all eDP users can enable Core Image (CI) to make their Intel® HD Graphics IGPU partially work.

Enabling the VGA is very experimental and most of the time the display looks scrambled and unusable. Although the VGA port works, its functionality is very limited. You cannot mirror displays and you cannot extend displays. If the VGA port cannot extend displays and you cannot mirror displays, you can use the Laptop in clamshell mode. Clamshell mode is when you use your laptop like a Mac Mini. In other words, you connect an external monitor to the laptop's VGA port and close the lid. You will see your desktop on the external monitor. As you will use the external monitor and the laptop lid is closed, you'll need to have an external mouse and keyboard. In addition, you can only enable and use 1 display at a time. Either you enable the internal LCD display or you enable the VGA port. You cannot have both working together which explains why mirroring and extending displays don't work.


I. Sandy Bridge [Intel HD Graphics 2000/3000]

Issues and Limitations:
Starting with High Sierra and newer, there are known glitches and artifacts on Intel HD3000. Since the amount of Video Memory in Sandy Bridge is dependent on the overall System Memory, 8GB is the minimum to have, but there are no guaranteed solutions yet. It is recommended to set Max TOLUD to Dynamic in the BIOS.

  • HD3000 can sometimes have interface glitches. Since the amount of video memory in Sandy depends on the overall system memory - 8 GB is the minimum to have, but there are no guaranteed solutions. It is also recommended to install Max TOLUD to Dynamic in the BIOS. Perhaps you can benefit from these patches.
The way integrated GPUs work depends on the system memory rather than having its own dedicated RAM. Because of this, the following patch is only available on the Intel HD Graphics 3000 chip and not the ATI or NVIDIA cards that may be inside the system. This patch is also tailored for macOS Big Sur or higher; some commands will fail on Catalina and older. The following chart shows the amount of RAM that the iGPU can access in macOS according to the amount of system memory:


Platform/FramebufferDevicesAAPL,snb-platform-iddevice-idNotes
DesktopPciRoot(0x0)/Pci(0x2,0x0)1000030010000300
LaptopPciRoot(0x0)/Pci(0x2,0x0)00000100
Empty FramebufferPciRoot(0x0)/Pci(0x2,0x0)00000500
  • Required for Desktops when a dGPU is installed and IGPU is used for computing tasks only (QuickSync Video) and does not drive a display.
PciRoot(0x0)/Pci(0x16,0x0)3A1C0000
  • If you're using a Motherboard with a 7 series chipset, you need to use 3A1C0000 as a device-id and will need to use SSDT-IMEI.


II. Ivy Bridge [Intel HD Graphics 2500/4000]
Platform/FramebufferDevicesAAPL,ig-platform-iddevice-idNotes
DesktopPciRoot(0x0)/Pci(0x2,0x0)0A006601
LaptopPciRoot(0x0)/Pci(0x2,0x0)03006601
04006601
  • 03006601 (1366x768)
  • 04006601 (1600x900)
Empty FramebufferPciRoot(0x0)/Pci(0x2,0x0)07006201Required for Desktops when a dGPU is installed and IGPU is used for computing tasks only (QuickSync Video) and does not drive a display.
PciRoot(0x0)/Pci(0x16,0x0)3A1E0000If you're using a Motherboard with a 6 series chipset, you need to use 3A1E0000 as a device-id and will need to use SSDT-IMEI.


III. Haswell [Intel HD Graphics 4200, 4400, 4600, 5000, 5100, 5200]

Issues and Limitations:
  • Some Haswell systems may require Legacy/CSM in BIOS to fix the glitches and artifacts.
  • The HD 4400 drivers do not support eDP.
  • Glitches for some framebuffers can be resolved using a semantic framebuffer-cursormem patch. See Intel Framebuffer Patching for more information.

Platform/FramebufferDevicesAAPL,ig-platform-iddevice-idNotes
DesktopPciRoot(0x0)/Pci(0x2,0x0)0300220D12040000If you're using HD 4200/HD4400/HD4600, you'll need to use 12040000 as a device-id.
LaptopPciRoot(0x0)/Pci(0x2,0x0)0600260A12040000If you're using HD 4400, you'll need to use 12040000 as a device-id.
Empty FramebufferPciRoot(0x0)/Pci(0x2,0x0)04001204Required for Desktops when a dGPU is installed and IGPU is used for computing tasks only (QuickSync Video) and does not drive a display.


IV. Broadwell [Intel HD Graphics 5300, 5500, 5600, 6000, 6100, 6200, 6300]
Platform/FramebufferDevicesAAPL,ig-platform-iddevice-idNotes
DesktopPciRoot(0x0)/Pci(0x2,0x0)0700221626010000
LaptopPciRoot(0x0)/Pci(0x2,0x0)0600261626160000
  • If you're using Intel HD 5600 you'll need to use 26160000 as a device-id.
  • Some HD5500 need this, such as i3-5005U; enable as required.
Empty FramebufferPciRoot(0x0)/Pci(0x2,0x0)


V. Skylake [Intel HD Graphics 510, 515, 520, 530, 540, 550, 580]
Platform/FramebufferDevicesAAPL,ig-platform-iddevice-idNotes
DesktopPciRoot(0x0)/Pci(0x2,0x0)
  • 00001219
26190000
  • If you're using Intel HD P530 you'll need to use 26190000 as a device-id.
LaptopPciRoot(0x0)/Pci(0x2,0x0)
  • 00001B19
  • 00002619
26190000
  • If you're using Intel HD 550/HD P530 you'll need to use 26190000 as a device-id.
Empty FramebufferPciRoot(0x0)/Pci(0x2,0x0)01001219Required for Desktops when a dGPU is installed and IGPU is used for computing tasks only (QuickSync Video) and does not drive a display.


VI. Kaby Lake, Kaby Lake-R [Intel HD Graphics 610, 620, 630, 640, 650]
Amber Lake [Intel UHD 615, 617]
Kaby Lake-R [Intel UHD 620]

Platform/FramebufferDevicesAAPL,ig-platform-iddevice-idNotes
DesktopPciRoot(0x0)/Pci(0x2,0x0)0000125916590000
  • If you're using Intel UHD 620 (KBL-R) you'll need to use 16590000 as a device-id.
LaptopPciRoot(0x0)/Pci(0x2,0x0)00001B59
Empty FramebufferPciRoot(0x0)/Pci(0x2,0x0)03001259Required for Desktops when a dGPU is installed and IGPU is used for computing tasks only (QuickSync Video) and does not drive a display.


VII.
Coffee Lake [Intel UHD Graphics 630, P630, 640, 650, 645, 655]
Whiskey Lake [Intel UHD 620]

Platform/FramebufferDevicesAAPL,ig-platform-iddevice-idNotes
DesktopPciRoot(0x0)/Pci(0x2,0x0)
  • 07009B3E
923E0000
  • If you're using Intel CFL-R CPU, you'll need to use 923E0000 as a device-id.
LaptopPciRoot(0x0)/Pci(0x2,0x0)
  • 00009B3E
923E0000
A53E0000
  • If you're using Intel CFL-R CPU, you'll need to use 923E0000 as a device-id.
  • If you're using Intel Whiskey Lake CPU, you'll need to use A53E0000 as a device-id.
Empty FramebufferPciRoot(0x0)/Pci(0x2,0x0)0300913ERequired for Desktops when a dGPU is installed and IGPU is used for computing tasks only (QuickSync Video) and does not drive a display.


VIII. Comet Lake [Intel UHD Graphics 610, 620, 630, P630]
Platform/FramebufferDevicesAAPL,ig-platform-iddevice-idNotes
DesktopPciRoot(0x0)/Pci(0x2,0x0)
  • 07009B3E
LaptopPciRoot(0x0)/Pci(0x2,0x0)
  • 00009B3E
Empty FramebufferPciRoot(0x0)/Pci(0x2,0x0)0300C89BRequired for Desktops when a dGPU is installed and IGPU is used for computing tasks only (QuickSync Video) and does not drive a display.


IX. Ice Lake [Intel UHD and Intel Iris Plus]
Platform/FramebufferDevicesAAPL,ig-platform-iddevice-idNotes
LaptopPciRoot(0x0)/Pci(0x2,0x0)
  • 0000528A



Skylake [Intel HD Graphics 510, 515, 520, 530, 540, 550, 580]

For Skylake users on macOS Ventura


Kaby Lake, Kaby Lake-R [Intel HD Graphics 610, 620, 630, 640, 650]
Amber Lake [Intel UHD 615, 617]
Kaby Lake-R [Intel UHD 620]

Coffee Lake [Intel UHD Graphics 630, P630, 640, 650, 645, 655
]
Whiskey Lake [Intel UHD 620]

Comet Lake [Intel UHD Graphics 610, 620, 630, P630]

Ice Lake [Intel UHD and Intel Iris Plus]


X. Enabling and Disabling Specific Functions and Features



Disabling Unsupported IGPUs

There are several IGPUs that are not supported on macOS/OS X and therefore it is advised to disable them to avoid any possible conflicts or errors. Generally required for CPUs with built-in IGPU. Intel Core Processors users with F and KF series CPUs do not need to disable the IGPU as these CPUs do not have IGPU. Currently, IGPU is not supported on Rocket Lake and above (Desktops) and Tiger Lake and above (Laptops) and must be disabled. For more information, refer to the guide linked below.

Disabling IGPU acceleration

Although driving acceleration is the main purpose, there can be some scenarios where disabling IGPU acceleration is required. Such as if you're having a DVMT Lock or if the framebuffer or connectors are not patched properly. Instead of getting a black screen or no display, you should be able to reach the installer/recovery or the desktop.

Disabling Discrete GPU in Laptops

Due to the nature of macOS and non-Apple Laptops, it is not possible to use IGPU and a discrete GPU (NVIDIA or AMD) together, and is recommended to disable it. For more information, refer to the guide linked below.

Brightness on Laptops

To enable the Brightness on your Laptop, refer to the guide linked below.


Enabling Digital Audio (HDMI/DP/DVI)

To enable Digital Audio (HDMI/DP/DVI), refer to the guide linked below.

PAVP Output

PAVP (Protected Audio Video Path) controls the hardware-accelerated decoding of encrypted video streams using IGPU. Required for playing HDCP-protected content. If you're experiencing issues with playing encrypted video streams, you can force PAVP output on the IGPU. To force enable PAVP output, you'll need to use igfxpavp property to IGPU. To add the igfxpavp property, follow the steps below.

1. Mount your ESP
2. Open your config.plist
3. Depending on the bootloader you use, add the following properties to your config.plist under Devices>Properties (for Clover) and DeviceProperties (for OpenCore)

DevicesKeyValueTypeNotes
PciRoot(0x0)/Pci(0x2,0x0)igfxpavp01000000DATA
  • Force enable PAVP output
  • Required for playing HDCP-protected content

4. If you don't want to inject the property using Device Properties, you can use the same patch using igfxpavp=1 boot-arg in your config.plist.
5. Once added, save your config.plist.

IGPU Power Management

To enable IGPU Power Management, refer to the guide linked below.

Apple GuC Firmware

Apple GuC (Graphics Micro Code) Firmware can be used to improve IGPU performance. However, just loading the Apple GuC firmware isn't sufficient for improving the IGPU performance. See Improving IGPU Performance for more information.

Requirements
  • Skylake and newer CPU with a supported iGPU(opens new window)
  • And a recent chipset, 300-series or newer: Z390, B360, H370, H310, etc. (not Z370, as it is actually 200-series)
  • Do note that even with recent chipsets, firmware loading is not guaranteed to work. If you experience a kernel panic or lots of graphics errors after trying this, it is probably because firmware loading is not supported on your setup.

Improving IGPU Performance

When utilizing some of the functions with IGPU (such as encoding and decoding H.265), the IGPU performance can be limited by default. However, the performance can be improved up to some extent. Refer to the guide linked below for more information

EDID Injection

Most of the time, once the Graphics is fixed and works with full QE/CI, the EDID is identified correctly, however, certain Laptops may require manual EDID Injection. If you need to inject the EDID, refer to the guide linked below

VGA Support

Starting with Intel Skylake and newer, the VGA works OOTB as they are DisplayPorts internally. However, for driving a display using VGA on Ivy Bridge and prior, connectors patching is required. In addition, Hot-plug usually does not work with VGA. See Connector Support for more information.

AirPlay Support

SideCar Support

With the release of macOS Catalina (10.15), Apple introduced SideCar. A feature where you can use your iPad as a second display. To enable SideCar, refer to the guide linked below.

DRM Support


H.264 and HEVC/H.265 Encoding

To enable H.264 and HEVC/H.265 Encoding, refer to the guide linked below


XI. Framebuffer Patching


On most of the devices, WhateverGreen automatically does the framebuffer patching. However, on certain devices, you might need to patch framebuffers. Some of the reasons include
  • Insufficient DVMT-prealloc in BIOS or no option to set DVMT-prealloc in BIOS
  • Connector patching to match HDMI/DP/mDP/VGA Ports on your device to drive the display

Framebuffer Patching Types

Possible WEG custom patches :


Semantic (Recommended):

KeyFunction
framebuffer-patch-enable
  • Enables framebuffer patching.
  • Required when utilizing connector patches, fbmem, and stolenmem properties.
framebuffer-framebufferid
framebuffer-mobile
framebuffer-pipecount
framebuffer-portcount
  • Defines the number of framebuffer ports
framebuffer-memorycount
framebuffer-stolenmem
  • Specifies stolenmem.
  • This is a memory that is reserved for the IGPU.
  • Prevents kernel panic due to less DVMT size set in BIOS/UEFI.
  • Usually relevant for Laptops where the DVMT-prealloc cannot be set due to hidden settings under BIOS/UEFI.
  • Do not use it if you have the option to set DVMT in BIOS/UEFI.
framebuffer-fbmem
  • Specifies framebuffer memory size.
  • This is a memory that is reserved for the framebuffer.
  • Do not use framebuffer-fbmem with framebuffer-cursormem
  • Do not use it if you have the option to set DVMT in BIOS/UEFI.
framebuffer-unifiedmem
  • Defines VRAM size.
  • Changes the VRAM in About This Mac, Display Tab, and in System Report>Graphics/Displays Tab.
  • This property doesn't have any effect on the actual VRAM and is purely cosmetic.
  • It is not recommended to use this patch.
  • Do not use framebuffer-unifiedmem and framebuffer-stolenmem together.
framebuffer-cursormem
  • Haswell specific patch.
  • Fixes Graphics glitches and artifacts on Haswell
  • Do not use framebuffer-fbmem with framebuffer-cursormem
framebuffer-flags
framebuffer-camellia
  • Integrated Display Controller.
  • Only relevant for real Macs.
AAPL00,DualLink
@0,display-dual-link
  • Sandy Bridge and Ivy Bridge specific patch.
0
  • For 1366x768 resolution
1
  • 1600x900+ resolution
framebuffer-conX-enable
  • Enables the X connector
framebuffer-conX-index
framebuffer-conX-busid
framebuffer-conX-pipe
  • Sets pipe value to the respective connector.
framebuffer-conX-type
  • Defines the connector type (DP/HDMI/DVI/LVDS/Dummy)
framebuffer-conX-flags
framebuffer-conX-alldata
  • completely replace the connector
framebuffer-conX-YYYYYYYY-alldata
  • completely replace the connector, if the current framebuffer matches YYYYYYYY

Where X is the connector index.

Example of Semantic Patch

Example of a typical Semantic patch for devices with 32MB DVMT Pre-Alloc

DevicesKeyValueTypeNotes
PciRoot(0x0)/Pci(0x2,0x0)framebuffer-fbmem00009000DATA
  • Sets framebuffer memory size to 9MB
framebuffer-patch-enable01000000DATA
  • Enables framebuffer patching.
framebuffer-stolenmem00003001DATA
  • Specifies stolenmem.
  • This is a memory which is reserved for the IGPU.
  • Prevents kernel panic due to less DVMT size set in BIOS/UEFI.
  • Sets framebuffer stolenmem size to 19MB
  • Usually relevant for Laptops where the DVMT-prealloc cannot be set due to hidden settings under BIOS/UEFI.


Binary:
framebuffer-patchN-enable (enabling patch number N)
framebuffer-patchN-framebufferid (the framebuffer that we're patching, the current by default)
framebuffer-patchN-find
framebuffer-patchN-replace
framebuffer-patchN-count (the amount of pattern iterations to search for, the default is 1)
N stands for the number of the patch: 0, 1, 2, ... 9


XI. Connector Patching


To drive the display using HDMI/DP, you may need to patch the connectors. This becomes necessary for the devices where the default WhateverGreen patching doesn't work or if you need to override the patching. Few issues can be solved such as a pink screen, black screen when booting into macOS, no display when connected to such ports, and reboot of devices when a display is connected. Patching connectors is very simple and it basically includes identifying the physical ports and then defining them to enable those ports. In addition, patching connectors will help to achieve Digital Audio over HDMI/DP.

macOS supports the following connectors
  • Display Port
  • HDMI
  • DVI
  • LVDS
  • Dummy Port
Connector Info

Port NameConnector TypeNotes
Display Port00 04 00 00
  • Display capable Type-C ports are DP internally
HDMI00 08 00 00
DVI (Dual Link)04 00 00 00
DVI (Single Link)00 02 00 00
VGA10 00 00 00
  • VGA ports on SKL and newer are DisplayPorts internally and are supported by macOS
  • Hotplug for VGA usually does not work
LVDS and eDP02 00 00 00
S-Video80 00 00 00
Dummy Port01 00 00 00
  • Used when there are no physical ports present

1. Fix your Graphics using STEP 1-3 and make sure you have acceleration with full QE/CI and can use at least one video port to drive the display.
2. Locate the physical port on your device.
3. Identity the physical port with the reference as shown in the above table.
4. Download and open IOReg and type IGPU in the search bar. Sometimes, the IGPU node is available as GFX0. If the GPU rename has been done, it will be available as IGPU. If not, GFX0. You should see something similar to the screenshot attached below.
Screen Shot 2022-06-16 at 3.36.37 PM.png


5. Once you have located the IGPU node, you can clear the search to get the complete node info. Select the IGPU node and you'll see something similar to the screenshot attached below. The patch you need to use depends on which port the connector is plugged into. Each port has its own AppleIntelFramebuffer node under IGPU. For example, this image shows each framebuffer node under IGPU on Dell OptiPlex 3050 Micro.

Screen Shot 2022-06-16 at 3.39.04 PM.png
6. If you check, in the above screenshot, we have some AppleIntelFramebuffer connectors listed. You need to locate your current connector which is driving your display. A simple way to find this out is to find the connector having AppleDisplay properties with display 0 sub-node. In our case, it is AppleIntelFramebuffer@1, which is the physical DisplayPort. Each framebuffer (@0, @1, @2, @3) corresponds to a set of connector data inside the ig-platform-id data, which resides in the framebuffer kext binary. Your system can have a different one. Make sure to locate the connector which drives your display and the idea to find it out is a connector having AppleDisplay properties.

7. Select the AppleIntelFramebuffer@X from the left pane for the active display and you'll have the connectors and other properties and info listed. In our case, it's AppleIntelFramebuffer@2 and you'll see something similar to the screenshot attached below. X represents the framebuffer connector.


Screen Shot 2022-06-16 at 4.00.44 PM.png
8. If you check, in the above screenshot, we have some AppleIntelFramebuffer@1 selected. Now you need to find the value for the connector-type property. The above screenshot has a property of "<00 04 00 00>". This is the current connector type set originally. The connector type can have different values has been already described in the Connector Info Table.

9. Now, match the Physical port against the Framebuffer. For the above example, the DisplayPort is associated with AppleIntelFramebuffer@1. Here, we get the info that DisplayPort is connected and using AppleIntelFramebuffer@1 and has the correct connector-type value as per the connector info table, and therefore, we don't need to change the connector type here. If connector patching is not done, most connectors by default are DP.

10. Now, connect your monitor to the next available video port. Do not use any video adapters such as DP to HDMI or DVI to HDMI or VGA to HDMI during this step. Instead, use a direct connection (HDMI to HDMI, DP to DP, DVI to DVI, VGA to VGA, etc.). This system has two other ports which are HDMI and VGA respectively. When connecting HDMI, the Framebuffer doesn't respond and due to no connection, it results in a black screen (no signal) on the monitor. If you're having a black screen, the first step would be to enable all the framebuffers and set them as HDMI (See Changing Connector Types). Once this step was done, I was able to drive the display using HDMI. If you still get a black screen, you may require Bus ID patching. See Bus ID patching for more information.

For devices with a single video port, such as on Laptop, you can easily know if it is HDMI/DP/DVI/VGA by inspecting the physical port. By default, the internal LVDS connector will be corresponding to AppleIntelFramebuffer@0. So, if a Laptop is equipped with a single HDMI port, the connector configuration would be LVDS (AppleIntelFramebuffer@0) and HDMI (AppleIntelFramebuffer@1). On Desktops, with a single HDMI/DP/DVI/VGA, you can also determine the port and the corresponding connector by physical port inspection. So, if a Desktop is equipped with a single HDMI port, the connector configuration would be HDMI (AppleIntelFramebuffer@0).

11. Once you have determined the port and the corresponding connector, you can simply change the connector type as per the connector info table. In the case of Dell OptiPlex 3050 Micro, here is the default connector configuration summary:

PortConnectorConnector Type (Default, original)Notes
HDMIAppleIntelFramebuffer@000 04 00 00The HDMI port is associated with con0 and the connector type is set to DP (00 04 00 00) which must be changed to HDMI (00 08 00 00) to have a proper signal and also the Digital Audio. We can use the WhateverGreen patching feature to change the connector type with reference to the connector info table.
DPAppleIntelFramebuffer@100 04 00 00The DP port is associated with con1 and the connector type is set to DP (00 04 00 00) which is the correct connector type value as per the connector info table therefore, we don't need to change the connector type here.
VGAAppleIntelFramebuffer@200 04 00 00The VGA port is associated with con2 and the connector type is set to DP (00 04 00 00) which is the correct connector type value as per the connector info table therefore, we don't need to change the connector type here.

Changing Connector Types

To change the connector type, follow the steps below

1. Mount your ESP
2. Open your config.plist
3. Depending on the bootloader you use, add the following properties to your config.plist under Devices>Properties (for Clover) and DeviceProperties (for OpenCore)

DevicesKeyValueTypeNotes
PciRoot(0x0)/Pci(0x2,0x0)framebuffer-conX-enable01000000DATA
  • Enables X Port
  • Replace the conX with the value of the Framebuffer which can be obtained from the AppleIntelFramebuffer@ whatever digits you have.
  • For example, if you want to enable Con0, simply use framebuffer-con0-enable and so on.
framebuffer-conX-typeDATA
  • Defines connector type
  • Depending on the video port type, use the connector type in the value field. See the connector info table.
  • Replace the conX with the value of the Framebuffer which can be obtained from the AppleIntelFramebuffer@ whatever digits you have.
  • The conX value will be similar for (framebuffer-conX-enable and framebuffer-ConX-type) property.
framebuffer-patch-enable01000000DATA
  • Enables framebuffer patching.

4. Once you determine the actual port used by your video ports you can go back and disable the unneeded patches, leaving only the one that is actually associated with your port.
5. Save your config.plist

Before patching:
Screen Shot 2022-06-17 at 8.10.55 AM.png
After patching:
Screen Shot 2022-06-17 at 8.29.19 AM.png

Example of HDMI, DP and VGA connector patching

The following is an example of Connector patching on Dell OptiPlex 3050 Micro.

DevicesKeyValueTypeNotes
PciRoot(0x0)/Pci(0x2,0x0)framebuffer-con0-enable01000000DATA
  • Enables HDMI Port (Framebuffer@0)
framebuffer-con0-type00080000DATA
  • Defines connector type
  • Sets connector type to HDMI
framebuffer-con1-enable01000000DATA
  • Enables DP Port (Framebuffer@1)
framebuffer-con1-type00040000DATA
  • Defines connector type
  • Sets connector type to DisplayPort
framebuffer-con2-enable01000000DATA
  • Enables VGA Port (Framebuffer@2)
framebuffer-con2-type00040000DATA
  • Defines connector type
  • Sets connector type to VGA
framebuffer-patch-enable01000000DATA
  • Enables framebuffer patching.

XII. Known Issues and Workarounds


Artifacts and Glitches on Skylake

Since macOS Sierra (10.12) update, Skylake Integrated Graphics (Intel HD 530) has had certain graphical artifacts or 'glitches' in the upper left corner of the menu bar, bottom (mostly in the left corner of the Dock), and elsewhere. Interestingly, this does not occur under OS X El Capitan. To fix this issue, you'll need to use AAPL,GfxYTile property on IGPU. To add the AAPL,GfxYTile property, follow the steps below.

1. Mount your ESP
2. Open your config.plist
3. Depending on the bootloader you use, add the following properties to your config.plist under Devices>Properties (for Clover) and DeviceProperties (for OpenCore)

DevicesKeyValueTypeNotes
PciRoot(0x0)/Pci(0x2,0x0)AAPL,GfxYTile01000000DATA
  • Fixes artifacts and glitches in the upper left corner of the menu bar and bottom.
  • Required for Skylake and newer on macOS Sierra and later.

4. Once added, save your config.plist.

HotPlug Reboot

For some devices (especially laptops), if your device reboots when you plug the HDMI into the HDMI port, you'll likely need to add and/or change the "pipe" values in the framebuffer connector. The same theory applies to all video ports (including DP, mDP, DVI, and/or VGA). Although it is not fully understood what the meaning of pipe value is, but various other connectors use 12 instead of 09 (in the unmodified kext) and it has been found that changing the pipe to 12 can fix the reboot problem. To change the pipe value, simply match the framebuffer and add/change the pipe value using the following WhateverGreen Property.

1. Mount your ESP
2. Open your config.plist
3. Depending on the bootloader you use, add the following properties to your config.plist under Devices>Properties (for Clover) and DeviceProperties (for OpenCore)

DevicesKeyValueTypeNotes
PciRoot(0x0)/Pci(0x2,0x0)framebuffer-conX-pipe12000000DATA
  • Fixes HotPlug Reboot
  • Sets pipe to 12 for the Con X.
  • Replace the X with the actual connector you want to add pipe for.
  • If we need to do this for connector @1 (as above example), we'll use framebuffer-con2-pipe and the 12000000 as pipe value.
framebuffer-patch-enable01000000DATA
  • Enables framebuffer patching.

Since it may be impossible to determine which connector is used by your HDMI port if the device is rebooting, you may need to enable the pipe=12 on all connectors initially.

DevicesKeyValueTypeNotes
PciRoot(0x0)/Pci(0x2,0x0)framebuffer-con0-pipe12000000DATA
  • Sets pipe to 12 for the Con 0.
framebuffer-con1-pipe12000000DATA
  • Sets pipe to 12 for the Con 1.
framebuffer-con2-pipe12000000DATA
  • Sets pipe to 12 for the Con 2.
framebuffer-con3-pipe12000000DATA
  • Sets pipe to 12 for the Con 3.
framebuffer-patch-enable
01000000
DATA
  • Enables framebuffer patching.


On a few Devices, even after adding and/or changing pipe values, the device may reboot and result in KP when connecting the monitor to the respective video port. For such cases, further Bus ID patching may be required. For devices equipped with HDMI 2.0 port, this can result in instant KP when connecting the monitor to the HDMI port. See, LSPCON for more information.

No Display after Wake

On some Desktop and Laptop Displays, when waking up the system, the screen goes blank and displays nothing. To fix this issue, you'll need to use force-online property to IGPU. To add the force-online property, follow the steps below.

1. Mount your ESP
2. Open your config.plist
3. Depending on the bootloader you use, add the following properties to your config.plist under Devices>Properties (for Clover) and DeviceProperties (for OpenCore)

DevicesKeyValueTypeNotes
PciRoot(0x0)/Pci(0x2,0x0)force-online01000000DATA
  • Forces Online Status on all Displays
  • Usually required for Skylake and newer

4. If you don't want to inject the property using Device Properties, you can use the same patch using igfxonln=1 boot-arg in your config.plist.
5. Once added, save your config.plist.

NVMe Kernel Panics

Systems with IGPU (KBL and newer), may cause system instability in lower power states. Sometimes it can be noticed by NVMe kernel panics. To fix this issue, you'll need to use forceRenderStandby=0 boot arg which will disable RC6 Render Standy. To add the forceRenderStandby=0 arg, follow the steps below.

1. Mount your ESP
2. Open your config.plist
3. Depending on the bootloader you use, add the forceRenderStandby=0 boot-arg in your config.plist.
4. Once added, save your config.plist.

4K/UHD/QHD Resolution with 60FPS

If you're using HDMI in UHD resolution with 60FPS, you'll need to raise the max pixel clock limit. To raise the max pixel clock limit, follow the steps below

1. Mount your ESP
2. Open your config.plist
3. Depending on the bootloader you use, add the following properties to your config.plist under Devices>Properties (for Clover) and DeviceProperties (for OpenCore)

DevicesKeyValueTypeNotes
PciRoot(0x0)/Pci(0x2,0x0)enable-max-pixel-clock-override01000000DATA
  • Fixes HDMI in UHD resolution with 60FPS
  • This property on IGPU can be used to raise the max pixel clock limit (as an alternative to patching CoreDisplay.framework).
  • Prevents black screen on 4K/UHD/QHD Displays @60Hz and HDMI 2.0 in UHD resolution with 60Hz or more.
  • Requires Invalid Maximum Link rate for Laptop Displays with more than 60Hz.
  • This property can be used for 4K@60Hz over HDMI 2.0.
  • Required for Laptops and OEM systems with 4K/UHD/QHD Displays @60Hz.
  • If you get "gIOScreenLockState3" when booting, you'll need to use this property.

4. If you don't want to inject the property using Device Properties, you can use the same patch using -igfxmpc boot-arg in your config.plist.
5. Once added, save your config.plist.

Another approach is to patch CheckTimingWithRange in CoreDisplay.framework to skip validation of the pixel clock. To use this patch, add the enable-hdmi20 property to IGPU or use the -cdfon boot-arg. However, -igfxmpc is the preferred approach to bypass the 450 MHz pixel clock limit, as -cdfon depends on the userspace patcher and will fail to work on macOS Big Sur and later.

If you want to use enable-hdmi20 property, follow the steps below.

1. Mount your ESP
2. Open your config.plist
3. Depending on the bootloader you use, add the following properties to your config.plist under Devices>Properties (for Clover) and DeviceProperties (for OpenCore)

DevicesKeyValueTypeNotes
PciRoot(0x0)/Pci(0x2,0x0)enable-hdmi2001000000DATA
  • Enables CoreDisplayFixup functionality via WhateverGreen.kext.
  • Enables HDMI 2.0 patches on IGPU and dGPU.
  • Patches CheckTimingWithRange in CoreDisplay.framework to skip validation of the pixel clock.
  • This prevents a black screen for HDMI in UHD resolution with 60FPS or more.
  • Required for Laptops and OEM systems with 4K/UHD/QHD Displays.
  • If you get "gIOScreenLockState3 error", you'll need to use this property.
  • Does not work on macOS Big Sur (11.x) and later.

4. Save your config.plist

Invalid Maximum Link Rate

Since CFL, when driving the display, a Kernel Panic occurs due to division by zero in the framebuffer driver. To fix this issue, you'll need to use enable-dpcd-max-link-rate-fix property to IGPU. To add the enable-dpcd-max-link-rate-fix property, follow the steps below.

1. Mount your ESP
2. Open your config.plist
3. Depending on the bootloader you use, add the following properties to your config.plist under Devices>Properties (for Clover) and DeviceProperties (for OpenCore)

DevicesKeyValueTypeNotes
PciRoot(0x0)/Pci(0x2,0x0)enable-dpcd-max-link-rate-fix01000000DATA
  • Fixes invalid maximum link rate
  • This property on IGPU can fix the invalid link rate otherwise a kernel panic can occur due to a division-by-zero.
  • Usually required by Laptops with a Sharp Display and more refresh rate.

4. If you don't want to inject the property using Device Properties, you can use the same patch using -igfxmlr boot-arg in your config.plist.
5. Once added, save your config.plist.

You could also manually specify a maximum link rate value via the dpcd-max-link-rate for the built-in display. All the possible values for the link rate are listed below.

DPCD Link Rate

Link RateDisplay
06000000
  • Required for Laptops having 1080p Display, (RBR)
0A000000
  • Required for Laptops having 1080p Display, (HBR)
14000000
  • Required for Laptops having 4K Display, (HBR2)
1E000000
  • Required in case if the Laptop has more refresh rate than 60Hz.
  • This can fix display glitch after sleep/wake (HBR3)

If you want to use dpcd-max-link-rate property, follow the steps below.

1. Mount your ESP
2. Open your config.plist
3. Depending on the bootloader you use, add the following properties to your config.plist under Devices>Properties (for Clover) and DeviceProperties (for OpenCore)

DevicesKeyValueTypeNotes
PciRoot(0x0)/Pci(0x2,0x0)dpcd-max-link-rateDATA
  • Sets link rate type.
  • See the DPCD Link Rate Table to set the desired value.

4. Save your config.plist

If an invalid value is specified or property dpcd-max-link-rate is not specified, the driver will probe the maximum link rate from DPCD instead.
If the probed value is not supported by the driver (which should rarely happen), you need to manually specify a valid one, otherwise, the graphics driver will trigger a kernel panic due to a division-by-zero later.

Infinite Loop on Intel HDMI connections with Higher Pixel Clock Rate

When establishing an HDMI connection with a higher pixel clock rate (2K/4K Display), the system may hang and the built-in display (Laptops) will remain black when using an HDMI cable. To fix this issue, you'll need to use enable-hdmi-dividers-fix property to IGPU. To add the enable-hdmi-dividers-fix property, follow the steps below.

1. Mount your ESP
2. Open your config.plist
3. Depending on the bootloader you use, add the following properties to your config.plist under Devices>Properties (for Clover) and DeviceProperties (for OpenCore

DevicesKeyValueTypeNotes
PciRoot(0x0)/Pci(0x2,0x0)enable-hdmi-dividers-fix01000000DATA
  • Fixes the infinite loop when establishing an HDMI connection with a higher pixel clock.
  • For example, connecting to a 2K/4K display with HDMI 1.4, otherwise, the system just hangs and the built-in display will remain black when plugging the HDMI cable.

4. If you don't want to inject the property using Device Properties, you can use the same patch using -igfxhdmidivs boot-arg in your config.plist.
5. Once added, save your config.plist.


NOTES:
  • For those who want to have a "limited" 2K/4K experience (i.e. 2K@59Hz or 4K@30Hz) with their HDMI 1.4 port, you might find this fix helpful.
  • For those who have a laptop or PC with HDMI 2.0 routed to IGPU and have HDMI output issues, please note that this fix is now succeeded by the LSPCON driver solution, and it is still recommended to enable the LSPCON driver support to have full HDMI 2.0 experience. You might still need this fix temporarily to figure out the connector index of your HDMI port, see the LSPCON section below.

LSPCON Driver Support for DP to HDMI 2.0 Output

Recent laptops (KBL/CFL) are typically equipped with an HDMI 2.0 port. This port could be either routed to IGPU or DGPU, and you can have a confirmation on Windows 10 and later. Intel Graphics, however, does not provide native HDMI 2.0 output, so in order to solve this issue, OEMs use additional hardware named LSPCON on the motherboard to convert DisplayPort into HDMI 2.0.

LSPCON works in either Level Shifter (LS) or Protocol Converter (PCON) mode. When the adapter works in LS mode, it is capable of producing HDMI 1.4 signals from DisplayPort, while in PCON mode, it could provide HDMI 2.0 output. Some onboard LSPCON adapters (e.g. the one on Dell XPS 15 9570) have been configured in the firmware to work in LS mode by default, resulting in a black screen on handling HDMI 2.0 connections. However, since version 1.3.0, WhateverGreen now provides driver support for the onboard LSPCON by automatically configuring the adapter to run in PCON mode on new HDMI connections, and hence solves the black screen issue on some platforms.

Configuring LSPCON

To configure LSPCON, follow the steps below

1. Mount your ESP
2. Open your config.plist
3. Depending on the bootloader you use, add the following properties to your config.plist under Devices>Properties (for Clover) and DeviceProperties (for OpenCore

DevicesKeyValueTypeNotes
PciRoot(0x0)/Pci(0x2,0x0)enable-lspcon-support01000000DATA
  • Enables LSPCPN driver support to enable DisplayPort to HDMI 2.0 output on IGPU.
  • LSPCON driver is only applicable for Laptops with HDMI 2.0 routed to IGPU.
  • If your HDMI 2.0 is routed to IGPU and is working properly right now, you don't need to enable this driver, as your onboard LSPCON might have been already configured in the firmware to work in PCON mode.
  • This property can also provide HDR signaling over HDMI.

4. If you don't want to inject the property using Device Properties, you can use the same patch using -igfxlspcon boot-arg in your config.plist.
5. Once added, save your config.plist.
6. Restart your system.
7. Now, you need to know the corresponding connector index (one of 0,1,2,3) of your HDMI port. You could find it under IGPU in IORegistryExplorer (i.e. AppleIntelFramebuffer@0/1/2/3). If you only have a 2K/4K HDMI monitor, you might need temporarily to enable the infinite loop fix before connecting an HDMI monitor to your build, otherwise the system just hangs, so you won't be able to run the IORegistryExplorer and find the connector index. (see connector patching for more info)
8. Add the framebuffer-conX-has-lspcon property to IGPU to inform the driver which connector has an onboard LSPCON adapter.

DevicesKeyValueType
PciRoot(0x0)/Pci(0x2,0x0)framebuffer-conX-has-lspcon01000000DATA
  • Inform the driver which connector has an onboard LSPCON adapter.
  • Sets LSPCON adapter to AppleIntelFramebuffer@
  • Replace the conX with the value of the Framebuffer which you have found in step #7. The value can be obtained from the AppleIntelFramebuffer@ whatever digits you have.
  • For example, if you want to enable Con0, simply use framebuffer-con0-enable and so on.

9. Add the framebuffer-conX-preferred-lspcon-mode property to IGPU to specify a mode for your onboard LSPCON adapter. If this property is not specified, the driver assumes that PCON mode is preferred. However, this is an optional step.

DevicesKeyValueType
PciRoot(0x0)/Pci(0x2,0x0)framebuffer-conX-preferred-lspcon-modeDATA
  • Defines mode for onboard LSPCON adapter
Set (PCON, DP to HDMI 2.0) for LSPCON adapter on AppleIntelFramebuffer@
  • 01000000
Set (LS, DP to HDMI 1.4) for LSPCON adapter on AppleIntelFramebuffer@
  • 00000000
  • Any other invalid values are treated as PCON mode.
  • The conX value will be similar for (framebuffer-conX-has-lspcon and framebuffer-conX-preferred-lspcon-mode) property.


NOTES:
  • LSPCON driver is only applicable for laptops and PCs with HDMI 2.0 routed to IGPU.
  • LSPCON driver is necessary for all newer platforms unless the new IGPU starts to provide native HDMI 2.0 output.
  • Supported Intel Platform: SKL, KBL, CFL and later. SKL: Intel NUC Skull Canyon; Iris Pro 580 + HDMI 2.0 with Parade PS175 LSPCON. CFL: Some laptops, e.g. Dell XPS 15 9570, are equipped with HDMI 2.0 and Parade PS175 LSPCON.
  • If you have confirmed that your HDMI 2.0 is routed to IGPU and is working properly right now, you don't need to enable this driver, because your onboard LSPCON might already be configured in the firmware to work in PCON mode.

Example of LSPCON Configuration

The following is an example of LSPCON Configuration on Dell OptiPlex 3050 Micro. Where Con2 is the HDMI port.

DevicesKeyValueTypeNotes
PciRoot(0x0)/Pci(0x2,0x0)enable-lspcon-support01000000DATA
  • Enables LSPCPN driver support to enable DisplayPort to HDMI 2.0 output on IGPU.
framebuffer-con2-has-lspcon01000000DATA
  • Inform the driver which connector has an onboard LSPCON adapter.
  • Sets LSPCON adapter to AppleIntelFramebuffer@2
framebuffer-con2-preferred-lspcon-mode01000000DATA
  • Defines mode for onboard LSPCON adapter
  • Sets (PCON, DP to HDMI 2.0) for LSPCON adapter on AppleIntelFramebuffer@2


Core Display Clock (CDCLK) Frequencies on Ice Lake

Core Display Clock (CDCLK) is one of the primary clocks used by the display engine to do its work. Apple's graphics driver expects that the firmware has already set the clock frequency to either 652.8 MHz or 648 MHz (the actual value depends on hardware), but quite a few laptops set it to a much lower value, such as 172.8 MHz, and hence you will see a kernel panic message like "Unsupported CD clock decimal frequency 0x158". This patch reprograms the clock to set its frequency to one of the supported values so that this precondition can be satisfied.

To fix this issue, you'll need to use enable-cdclk-frequency-fix property to IGPU to support all valid Core Display Clock (CDCLK) frequencies on ICL platforms, otherwise, a kernel panic would happen due to an unsupported CD clock decimal frequency. To add the enable-cdclk-frequency-fix property, follow the steps below.

1. Mount your ESP
2. Open your config.plist
3. Depending on the bootloader you use, add the following properties to your config.plist under Devices>Properties (for Clover) and DeviceProperties (for OpenCore)

DevicesKeyValueTypeNotes
PciRoot(0x0)/Pci(0x2,0x0)enable-cdclk-frequency-fix01000000DATA
  • Enables all valid Core Display Clock (CDCLK) frequencies on ICL platforms.
  • This property on IGPU can be used to prevent a kernel due to an unsupported CD clock decimal frequency.
  • Usually required by Laptops with lower clock frequency values such as 172.8MHz.

4. If you don't want to inject the property using Device Properties, you can use the same patch using -igfxcdc boot-arg in your config.plist.
5. Once added, save your config.plist.

DVMT pre-allocated memory on Intel Ice Lake

Apple’s graphics driver reads the DVMT value set in the firmware and uses a “magic” formula to calculate the amount of memory in bytes. Unfortunately, the formula only works for a pre-allocated memory size that is a multiple of 32MB. The problem arises as laptops now have DVMT set to 60MB on ICL+ platforms by default, and the framebuffer controller ends up initializing the stolen memory manager with an incorrect amount of pre-allocated memory. Even though one might be able to modify DVMT settings via EFI shell or RU.EFI, these methods are not applicable to some laptops, such as Surface Pro 7, that use custom firmware. As such, this patch calculates the correct number of bytes beforehand and patches the driver so that it will initialize the memory manager with proper values and the kernel panics can be avoided.

Apple has removed the kernel panic if the stolen memory is not enough, but you are encouraged to patch the framebuffer so that it fits into your available amount of stolen memory. Once the patch is enabled, you could find your actual amount of DVMT pre-allocated memory in the property fw-dvmt-preallocated-memory under the graphics device. (Only available in DEBUG version) The unit is megabyte, and the size in the example below is 60 MB. (0x3C = 60)

To fix this issue, you'll need to use enable-dvmt-calc-fix property to IGPU to fix the calculation of the amount of DVMT pre-allocated memory on ICL platforms, otherwise, a kernel panic saying Unsupported ICL SKU would occur. To add the enable-dvmt-calc-fix property, follow the steps below.

1. Mount your ESP
2. Open your config.plist
3. Depending on the bootloader you use, add the following properties to your config.plist under Devices>Properties (for Clover) and DeviceProperties (for OpenCore)

DevicesKeyValueTypeNotes
PciRoot(0x0)/Pci(0x2,0x0)enable-dvmt-calc-fix01000000DATA
  • Fixes Kernel Panic due to incorrect amount of DVMT pre-allocated memory.
  • This property on IGPU can fix the invalid link rate otherwise a kernel panic can occur due to a division-by-zero.
  • Usually required by Laptops where the BIOS is locked and the variables cannot be modified using Shell.

4. If you don't want to inject the property using Device Properties, you can use the same patch using -igfxdvmt boot-arg in your config.plist.
5. Once added, save your config.plist.

Garbled Display on Ice Lake

On Ice Lake platforms, it is required to fix the Display Data Buffer (DFUF) allocation issue, otherwise, your built-in display remains garbled for 7 to 15 seconds after the system boots. You need this fix if you observe a bunch of errors mentioning "DBUF" and "pipe underrun" in the kernel log.

This fix works by calling the function that optimizes the display data buffer allocations early. You may specify the delay in seconds (value of type Data) via the dbuf-optimizer-delay property. If the property is not specified, the default value will be used (see below).

The community reports that a delay of 1 to 3 seconds is adequate for avoiding the underrun issue on the built-in display without having negative impacts on external displays and that the default delay of 0 seconds used in WEG v1.5.4 may lead to both internal and external displays flickering on some laptops. Starting from v1.5.5, the default delay is changed to 1 second, so in most cases, users do not have to specify the delay manually.

To fix this issue, you'll need to use enable-dbuf-early-optimizer property to IGPU to fix the Display Data Buffer (DBUF) allocation issue on ICL platforms, otherwise, your built-in display remains garbled for 7 to 15 seconds after the system boots. . To add the enable-dbuf-early-optimizer property, follow the steps below.

1. Mount your ESP
2. Open your config.plist
3. Depending on the bootloader you use, add the following properties to your config.plist under Devices>Properties (for Clover) and DeviceProperties (for OpenCore)

DevicesKeyValueTypeNotes
PciRoot(0x0)/Pci(0x2,0x0)enable-dbuf-early-optimizer01000000DATA
  • Fixes garbled display on the built-in screen on Ice Lake platforms.

4. If you don't want to inject the property using Device Properties, you can use the same patch using -igfxdbeo boot-arg in your config.plist.
5. Once added, save your config.plist.

Transitioning States Kernel Panics

On a few Ice Lake Laptops, a Kernel Panic may occur on Cannot allow DC9 without disallowing DC6 due to issues with transitioning states. To fix this issue, you'll need to use either -noDC9 or -nodisplaysleepDC6 boot arg. To add the arg, follow the steps below.

1. Mount your ESP
2. Open your config.plist
3. Depending on the bootloader you use, add the forceRenderStandby=0 boot-arg in your config.plist.
4. Once added, save your config.plist.


Credits :
Vit9696
Rehabman
PMHeart
 
Last edited:
  • Like
Reactions: Milvintsiss

oldman20

Member
Joined
Nov 6, 2021
Messages
127
Motherboard
Dell 3558
CPU
Broadwell 5200U
Graphics
Intel HD5500
OS X/macOS
12.0.x
Bootloader
  1. Clover (UEFI)
  2. OpenCore
Mac
  1. MacBook Pro
Mobile Phone
  1. Android
  2. iOS
ACPI Renames
If you're using any ACPI renames, you'll need to disable or delete the ACPI renames as these can conflict with WhateverGreen's automatic renames.
I checked GFX0 to IGPU rename, both with WhateverGreen kext: if disable rename, check in MaciASL have no IGPU device, it there if enable rename, so in this case, WhateverGreen rename didnt work somehow, so still need GFX0 to IGPU rename in ACIP right?
 

EliteMacx86

Administrator
Staff member
Joined
Jul 22, 2018
Messages
4,171
Motherboard
Supermicro X11SPA-T
CPU
Intel Xeon W-3275 28 Core
Graphics
2xAMD RX 580 8GB
OS X/macOS
11.0.x
Bootloader
  1. OpenCore
Mac
  1. Mac mini
  2. MacBook Pro
Mobile Phone
  1. Android
  2. iOS
I checked GFX0 to IGPU rename, both with WhateverGreen kext: if disable rename, check in MaciASL have no IGPU device, it there if enable rename, so in this case, WhateverGreen rename didnt work somehow, so still need GFX0 to IGPU rename in ACIP right?
The correct way to check is using IOReg. Provide a copy of your IOReg to check.
 

oldman20

Member
Joined
Nov 6, 2021
Messages
127
Motherboard
Dell 3558
CPU
Broadwell 5200U
Graphics
Intel HD5500
OS X/macOS
12.0.x
Bootloader
  1. Clover (UEFI)
  2. OpenCore
Mac
  1. MacBook Pro
Mobile Phone
  1. Android
  2. iOS

Attachments

  • Chức’s MacBook Pro.ioreg.zip
    789.2 KB · Views: 3

oldman20

Member
Joined
Nov 6, 2021
Messages
127
Motherboard
Dell 3558
CPU
Broadwell 5200U
Graphics
Intel HD5500
OS X/macOS
12.0.x
Bootloader
  1. Clover (UEFI)
  2. OpenCore
Mac
  1. MacBook Pro
Mobile Phone
  1. Android
  2. iOS
here is acpi rename GFX0 to IGPU disable
 

Attachments

  • Chức’s MacBook Pro-disable ACPI Rename.ioreg.zip
    819.1 KB · Views: 3

EliteMacx86

Administrator
Staff member
Joined
Jul 22, 2018
Messages
4,171
Motherboard
Supermicro X11SPA-T
CPU
Intel Xeon W-3275 28 Core
Graphics
2xAMD RX 580 8GB
OS X/macOS
11.0.x
Bootloader
  1. OpenCore
Mac
  1. Mac mini
  2. MacBook Pro
Mobile Phone
  1. Android
  2. iOS
here sir! with ACPI rename enable!
The IGPU rename is working. So, with the IGPU rename disabled in the config.plist, the IOReg reports the Display device as GFX0?
 

EliteMacx86

Administrator
Staff member
Joined
Jul 22, 2018
Messages
4,171
Motherboard
Supermicro X11SPA-T
CPU
Intel Xeon W-3275 28 Core
Graphics
2xAMD RX 580 8GB
OS X/macOS
11.0.x
Bootloader
  1. OpenCore
Mac
  1. Mac mini
  2. MacBook Pro
Mobile Phone
  1. Android
  2. iOS
here is acpi rename GFX0 to IGPU disable
WEG automatically renames certain devices. As you can see, with your rename disabled, the system has IGPU rename.
Screen Shot 2022-08-15 at 10.59.30 PM.png
 

oldman20

Member
Joined
Nov 6, 2021
Messages
127
Motherboard
Dell 3558
CPU
Broadwell 5200U
Graphics
Intel HD5500
OS X/macOS
12.0.x
Bootloader
  1. Clover (UEFI)
  2. OpenCore
Mac
  1. MacBook Pro
Mobile Phone
  1. Android
  2. iOS

EliteMacx86

Administrator
Staff member
Joined
Jul 22, 2018
Messages
4,171
Motherboard
Supermicro X11SPA-T
CPU
Intel Xeon W-3275 28 Core
Graphics
2xAMD RX 580 8GB
OS X/macOS
11.0.x
Bootloader
  1. OpenCore
Mac
  1. Mac mini
  2. MacBook Pro
Mobile Phone
  1. Android
  2. iOS
  • Like
Reactions: oldman20

Forum statistics

Threads
796
Messages
8,562
Members
8,096
Latest member
Syncopala