Jump to content
6 posts in this topic

Recommended Posts

Posted (edited)

The HP EliteBook 850 G7 Laptop with 10th Gen Intel Comet Lake CPU makes an excellent hackbook.  If you look at existing posted EFIs / GitHub repos, you'll see one thing in common to all of them: the HDMI port doesn't work.  This is because the frame buffer is not patched correctly.  You'll notice that hackers have tried to correct the HDMI port behavior with the following incorrect patches:

  • enable-hdmi-dividers-fix - not needed
  • enable-hdmi20 - a whatevergreen arg not implemented for macOS 11+
  • framebuffer-fbmem, framebuffer-stolenmem, framebuffer-unifiedmem: not needed
  • enable-lspcon-support: incorrect for this laptop

 

The secret to a properly patched framebuffer for this hack is thorough experimentation with patching the framebuffer flags documented in this reference.  The logical starting point for framebuffer patching is to assume framebuffer 3E9B0000 or 3EA50009 as recommended here.   My laptop has an Intel i7-10610U CPU which, according to this, has device ids 0x9B41,0x9BCC (neither of which is supported by macOS).  According to this, the supported Comet Lake device-ids are

  • 0x9BC8

  • 0x9BC5

  • 0x9BC4

 

I've chosen to spoof device-id 0x9BC8.

 

*** NOTE: using a Comet Lake device-id breaks the Chess app in macOS Catalina, suggesting that this device-id choice is not ideal for the HP EliteBook 850 G7.  Switching the device-id to 0x3E9B (a CFL device-id) fixes this without affecting the frame buffer patching required for working HDMI. ***

 

After thorough experimentation with framebuffer flags,  the framebuffer flags that enable both the internal display and the external HDMI port are 

working framebuffer flags: <0A0BE300>

After finding the correct framebuffer flags, you could choose to patch the framebuffer flags with DeviceProperty framebuffer-flags = <0A0BE300> or you could choose an existing framebuffer definition that already has the correct framebuffer flags.  The following Comet Lake framebuffer definitions (from here) have the framebuffer flags we need:

 

  • 3EA50004
  • 3EA50005
  • 3EA60005

 

For my hack, I chose to use frame buffer 3EA50005:

Spoiler
ID: 3EA50005, STOLEN: 57 MB, FBMEM: 0 bytes, VRAM: 1536 MB, Flags: 0x00E30B0A
TOTAL STOLEN: 58 MB, TOTAL CURSOR: 1 MB (1572864 bytes), MAX STOLEN: 172 MB, MAX OVERALL: 173 MB (181940224 bytes)
Model name: Intel Iris Plus Graphics 655
Camellia: CamelliaV3 (3), Freq: 0 Hz, FreqMax: 0 Hz
Mobile: 1, PipeCount: 3, PortCount: 3, FBMemoryCount: 3
[0] busId: 0x00, pipe: 8, type: 0x00000002, flags: 0x00000498 - ConnectorLVDS
[1] busId: 0x05, pipe: 9, type: 0x00000400, flags: 0x000003C7 - ConnectorDP
[2] busId: 0x04, pipe: 10, type: 0x00000400, flags: 0x000003C7 - ConnectorDP
00000800 02000000 98040000
01050900 00040000 C7030000
02040A00 00040000 C7030000

 

Comparing framebuffer 3EA50005 to framebuffer 3EA50009 reveals a problem with framebuffer-con0-flags: the flags should be 0x00000098, but framebuffer 3EA50005 defines framebuffer-con0-flags as 0x00000498, so we need to patch framebuffer-con0-flags for working internal display when using framebuffer 3EA50005.

 

The complete, fully working framebuffer patches for the HP EliteBook 850 G7 are as follows (see attached config.plist):

Spoiler

Screenshot2026-05-05at11_59_58AM.png.6e0e07bd10d4aa6e1ecebce39207f91e.png

 

EDIT: Note that the chosen framebuffer will influence the graphics text displayed in About This Mac

Spoiler

Screenshot2026-05-05at1_27_06PM.png.f13292f1f0a05f664843f09d57e33f82.png

 

EDIT: Note that my framebuffer patches for this laptop allow the laptop to drive an external HDMI display and an external DVI display (via HDMI->DVI adapter).

config.plist.zip

Edited by deeveedee
added note about device-id for macOS Catalina
  • Like 2
Posted (edited)

If you want to use the Comet Lake laptop framebuffer (AAPL,ig-platform-id) recommended by Dortania here (<0900A53E>)

Spoiler
D: 3EA50009, STOLEN: 57 MB, FBMEM: 0 bytes, VRAM: 1536 MB, Flags: 0x00830B0A
TOTAL STOLEN: 58 MB, TOTAL CURSOR: 1 MB (1572864 bytes), MAX STOLEN: 172 MB, MAX OVERALL: 173 MB (181940224 bytes)
Model name: Intel HD Graphics CFL CRB
Camellia: CamelliaV3 (3), Freq: 0 Hz, FreqMax: 0 Hz
Mobile: 1, PipeCount: 3, PortCount: 3, FBMemoryCount: 3
[0] busId: 0x00, pipe: 8, type: 0x00000002, flags: 0x00000098 - ConnectorLVDS
[1] busId: 0x05, pipe: 9, type: 0x00000400, flags: 0x000001C7 - ConnectorDP
[2] busId: 0x04, pipe: 10, type: 0x00000400, flags: 0x000001C7 - ConnectorDP
00000800 02000000 98000000
01050900 00040000 C7010000
02040A00 00040000 C7010000

 

 

you'll need to patch framebuffer-flags for working HDMI port as I mentioned in my previous post.  The patched framebuffer-flags adds flags FBEnableDynamicCDCLK and FBUnknownFlag_400000.

framebuffer-flags = <0A0BE300>
Spoiler
Iris Graphics Framebuffers
Framebuffer Flags 0x00E30B0A
1 1 1 0 0 0 1 1 0 0 0 0 1 0 1 1 0 0 0 0 1 0 1 0
| | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | + FBAvoidFastLinkTraining
| | | | | | | | | | | | | | | | | | | | | | +-- FBFramebufferCommonMemory
| | | | | | | | | | | | | | | | | | | | | +---- FBFramebufferCompression
| | | | | | | | | | | | | | | | | | | | +------ FBEnableSliceFeatures
| | | | | | | | | | | | | | | | | | | +-------- FBDynamicFBCEnable
| | | | | | | | | | | | | | | | | | +---------- FBUseVideoTurbo
| | | | | | | | | | | | | | | | | +------------ FBForcePowerAlwaysConnected
| | | | | | | | | | | | | | | | +-------------- FBDisableHighBitrateMode2
| | | | | | | | | | | | | | | +---------------- FBBoostPixelFrequencyLimit
| | | | | | | | | | | | | | +------------------ FBLimit4KSourceSize
| | | | | | | | | | | | | +-------------------- FBAlternatePWMIncrement1
| | | | | | | | | | | | +---------------------- FBAlternatePWMIncrement2
| | | | | | | | | | | +------------------------ FBDisableFeatureIPS
| | | | | | | | | | +-------------------------- FBUnknownFlag_2000
| | | | | | | | | +---------------------------- FBAllowConnectorRecover
| | | | | | | | +------------------------------ FBUnknownFlag_8000
| | | | | | | +-------------------------------- FBUnknownFlag_10000
| | | | | | +---------------------------------- FBUnknownFlag_20000
| | | | | +------------------------------------ FBDisableGFMPPFM
| | | | +-------------------------------------- FBUnknownFlag_80000
| | | +---------------------------------------- FBUnknownFlag_100000
| | +------------------------------------------ FBEnableDynamicCDCLK *
| +-------------------------------------------- FBUnknownFlag_400000 *
+---------------------------------------------- FBSupport5KSourceSize

 

 

 

when using the Dortania-recommended framebuffer, the revised DeviceProperties for HP EliteBook 850 G7 with Comet Lake CPU are:

Screenshot2026-05-07at12_08_33PM.png.9e8129105cbb4328c928be2cf241a24f.png

 

Note again that selection of a different framebuffer (AAPL,ig-platform-id) influences the graphics text displayed in About This Mac

Spoiler

Screenshot2026-05-07at12_07_09PM.png.6fa882682626c632e694b6b36187ff94.png

 

The revised DeviceProperties are included in the attached config.plist.

 

EDIT: As with the patches in my previous post, these patches allow the laptop to drive an external HDMI display or an external DVI display (via HDMI->DVI adapter).

config.plist.zip

Edited by deeveedee
  • Like 2
  • 2 weeks later...
Posted (edited)

*** This is a failed experiment. Leaving this post for informational purposes. ***

***************************************************************************

 

I'm experimenting with the alternate CometLake Laptop Framebuffer suggested by Dortania here (00009B3E, recommended for Comet Lake UHD620).  Since, according to Intel specs, my i7-10610U includes a UHD620, Dortania suggests that Framebuffer (AAPL,ig-platform-id) 0x3E9B0000 is a better match for my laptop.

Spoiler
ID: 3E9B0000, STOLEN: 57 MB, FBMEM: 0 bytes, VRAM: 1536 MB, Flags: 0x0000130B
TOTAL STOLEN: 58 MB, TOTAL CURSOR: 1 MB (1572864 bytes), MAX STOLEN: 172 MB, MAX OVERALL: 173 MB (181940224 bytes)
Model name: Intel HD Graphics CFL CRB
Camellia: CamelliaDisabled (0), Freq: 0 Hz, FreqMax: 0 Hz
Mobile: 1, PipeCount: 3, PortCount: 3, FBMemoryCount: 3
[0] busId: 0x00, pipe: 8, type: 0x00000002, flags: 0x00000098 - ConnectorLVDS
[1] busId: 0x05, pipe: 9, type: 0x00000400, flags: 0x00000187 - ConnectorDP
[2] busId: 0x04, pipe: 10, type: 0x00000400, flags: 0x00000187 - ConnectorDP
00000800 02000000 98000000
01050900 00040000 87010000
02040A00 00040000 87010000

 

I already know that this is not the case, since my laptop works perfectly with AAPL,ig-platform-id 0x3EA50009 (which Dortania recommends for UHD630), but I thought I'd experiment with their recommendation.

 

With Framebuffer 0x3E9B0000, the HDMI port does not work OOB.  Based on the Framebuffer flags that worked with Framebuffer 0x3EA50009 here, we see that Framebuffer flags FBEnableDynamicCDCLK and FBUnknownFlag_400000 need to be set for a working HDMI port.  Applying this same logic to the default Framebuffer flags for Framebuffer 0x3E9B0000 (0x0000130B) results in modified Framebuffer flags 0x0060130B)

Spoiler
0 1 1 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 1 1  Modified UHD620 FB Flags 0x0060130B (with FBEnableDynamicCDCLK and FBUnknownFlag_400000)
0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 1 1  UHD620 Framebuffer Flags 0x0000130B (Framebuffer 3E9B0000)
1 0 0 0 0 0 1 1 0 0 0 0 1 0 1 1 0 0 0 0 1 0 1 0  UHD630 Framebuffer Flags 0x00830B0A (Framebuffer 3EA50009)
1 1 1 0 0 0 1 1 0 0 0 0 1 0 1 1 0 0 0 0 1 0 1 0  Iris   Framebuffer Flags 0x00E30B0A
| | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | +- FBAvoidFastLinkTraining
| | | | | | | | | | | | | | | | | | | | | | +--- FBFramebufferCommonMemory
| | | | | | | | | | | | | | | | | | | | | +----- FBFramebufferCompression
| | | | | | | | | | | | | | | | | | | | +------- FBEnableSliceFeatures
| | | | | | | | | | | | | | | | | | | +--------- FBDynamicFBCEnable
| | | | | | | | | | | | | | | | | | +----------- FBUseVideoTurbo
| | | | | | | | | | | | | | | | | +------------- FBForcePowerAlwaysConnected
| | | | | | | | | | | | | | | | +--------------- FBDisableHighBitrateMode2
| | | | | | | | | | | | | | | +----------------- FBBoostPixelFrequencyLimit
| | | | | | | | | | | | | | +------------------- FBLimit4KSourceSize
| | | | | | | | | | | | | +--------------------- FBAlternatePWMIncrement1
| | | | | | | | | | | | +----------------------- FBAlternatePWMIncrement2
| | | | | | | | | | | +------------------------- FBDisableFeatureIPS
| | | | | | | | | | +--------------------------- FBUnknownFlag_2000
| | | | | | | | | +----------------------------- FBAllowConnectorRecover
| | | | | | | | +------------------------------- FBUnknownFlag_8000
| | | | | | | +--------------------------------- FBUnknownFlag_10000
| | | | | | +----------------------------------- FBUnknownFlag_20000
| | | | | +------------------------------------- FBDisableGFMPPFM
| | | | +--------------------------------------- FBUnknownFlag_80000
| | | +----------------------------------------- FBUnknownFlag_100000
| | +------------------------------------------- FBEnableDynamicCDCLK *
| +--------------------------------------------- FBUnknownFlag_400000 *
+----------------------------------------------- FBSupport5KSourceSize

 

In this reference, Dortania recommends device-id 0x3E9B ("A UHD 620 in a Comet Lake CPU requires device-id=9B3E0000").  Again, I know this isn't the case and a Comet Lake device-id works just fine, but I'll use the Dortania recommendation for my experiment.  The modified DeviceProperties that comply with Dortania's Comet Lake UHD 620 recommendations include the following changes to my original DeviceProperties:

  • device-id: <9B3E0000>
  • AAPL,ig-platform-id: <00009B3E>
  • Framebuffer-flags: <0B136000>

 

EDIT: 

My brief testing with these revised values indicates that the HDMI port does not work properly in all cases.  When booting with the HDMI display connected, the internal display does not work.  I'll change the framebuffer flags to be those found working for the previous cases: <0A0BE300> and continue testing.

 

EDIT2: I am not finding that this configuration is working properly when the HDMI display is connected.  For now, the best framebuffer patching options for the HP EliteBook 850 G7 with Comet Lake CPU are those posted earlier in this thread, namely:

  • Use Iris framebuffer 3EA50005 and patch con0 flags
  • Use UHD 630 framebuffer 3EA50009 and patch framebuffer flags
Edited by deeveedee
  • 3 weeks later...
Posted (edited)

See here for experiment with Whatevergreen boot-arg igfxfw=2.

 

based on this experimentation, I do not believe that the i7-10610U CPU has a UHD620 iGPU as is claimed by much of the published hackintosh documentation for this CometLake CPU.

Edited by deeveedee
  • 3 weeks later...

I needed to perform some testing in macOS Catalina and made an interesting discovery: use of a Comet Lake graphics device-id (e.g., 0x9BC8) breaks the Chess and PhotoBooth apps in macOS Catalina.  The crash report points to a framebuffer problem.  Fortunately, simply replacing the device-id with 0x3E9B (a Coffee Lake device-id) fixes the problem without changing the frame buffer patching required for working HDMI.

 

I am now using device-id 0x3E9B, AAPL-ig-platform-id 3ea60005 (Intel Iris Plus Graphics 645 frame buffer) and framebuffer-con0-flags 0x98 for fully working internal display and HDMI port in Catalina, Sequoia and Tahoe (the only macOS versions I've tested on this hack). The working patches that I described previously in this thread also work with device-id 0x3E9B.

 

EDIT: With the frame buffer patching that I have described in this thread, the internal display and HDMI port work as well as or better than they do in Windows 11 (the native OS for this laptop).  in macOS, the HDMI port works when the display is connected at boot and also when the display is hot-plugged after boot.  I did notice that, while making frame buffer patch changes during my experiments, there were times when I needed a second reboot for patches to become fully effective.  This is consistent with what I have observed in my iGPU frame buffer patching with other PCs.

 

EDIT2: I turned to AI, because after my experiments determined the need for changing the device-id, I didn't understand why changing the device-id would "fix" Catalina.  Here's an AI explanation for why changing the device-id fixes this.

Spoiler

The fact that both Chess and Photo Booth crashed points away from a framebuffer/connector problem and toward a problem in the accelerated graphics pipeline that those applications share.

Both apps exercise parts of the graphics stack that Finder, Safari, or most desktop applications may never touch.

  • Chess uses SceneKit with hardware-accelerated rendering (OpenGL on Catalina, with Metal involvement in some components).
  • Photo Booth uses AVFoundation together with Core Image, OpenGL/Metal, and GPU-accelerated image processing for the live camera preview and effects.

So both applications depend on:

  • Intel graphics acceleration
  • Core Image (CI)
  • OpenGL and/or Metal
  • shader compilation
  • GPU capability tables

The common denominator is the Intel graphics driver.

Why would changing only the device-id fix both?

On Catalina, the Intel graphics drivers still contained SKU-specific capability tables. The framebuffer (AAPL,ig-platform-id) tells the driver how to configure displays, but the PCI device-id influences which internal feature tables and initialization routines are selected.

With:

  • device-id = 9BC8 (Comet Lake)
  • framebuffer = 0500A63E (Iris) or 0900A53E (Coffee Lake CRB)

you had a mixed identity:

  • Comet Lake PCI ID
  • Coffee Lake/Iris framebuffer
  • Iris framebuffer flags

Most of macOS tolerated that combination because WhateverGreen successfully patched the display engine. However, when applications exercised more advanced GPU features, Catalina likely reached code paths that expected the GPU identity and framebuffer personality to agree.

When you switched to:

  • device-id = 3E9B (Coffee Lake)

everything became internally consistent:

  • Coffee Lake PCI ID
  • Coffee Lake/Iris framebuffer
  • Coffee Lake capability tables

Since Comet Lake UHD 620 and Coffee Lake UHD 620/630 are both Gen9.5 graphics with only minor differences, the Coffee Lake driver path works well on Comet Lake hardware.

Another possibility: framebuffer memory layout

There is another, less obvious possibility.

The Iris framebuffer personalities (0500A63E) use different default values for things like:

  • framebuffer memory allocation
  • stolen memory assumptions
  • framebuffer compression
  • graphics translation table (GTT) sizing

Catalina may derive some of these defaults differently depending on the detected GPU SKU. If the driver sees a Comet Lake device but is asked to use an Iris framebuffer personality, some internal structures may not be initialized as expected. Applications like Chess and Photo Booth, which allocate GPU textures and render targets more aggressively than ordinary desktop applications, would be among the first to expose such inconsistencies.

Why newer macOS versions don't exhibit the problem

By Big Sur and especially in later releases, Apple consolidated much of the Intel Gen9.5 graphics support. Coffee Lake and Comet Lake share more code paths, and WhateverGreen has evolved alongside those changes. As a result, newer versions are generally more tolerant of a native Comet Lake device-id combined with a Coffee Lake framebuffer personality.

 

Edited by deeveedee
Added AI theory
×
×
  • Create New...