deeveedee Posted May 5 Share Posted May 5 (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 EDIT: Note that the chosen framebuffer will influence the graphics text displayed in About This Mac Spoiler 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 1 hour ago by deeveedee added note about device-id for macOS Catalina 2 Link to comment https://www.insanelymac.com/forum/topic/362706-proper-framebuffer-patching-for-hp-elitebook-850-g7-laptop-comet-lake-with-working-hdmi-port/ Share on other sites More sharing options...
deeveedee Posted May 7 Author Share Posted May 7 (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: Note again that selection of a different framebuffer (AAPL,ig-platform-id) influences the graphics text displayed in About This Mac Spoiler 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 May 7 by deeveedee 2 Link to comment https://www.insanelymac.com/forum/topic/362706-proper-framebuffer-patching-for-hp-elitebook-850-g7-laptop-comet-lake-with-working-hdmi-port/#findComment-2849965 Share on other sites More sharing options...
deeveedee Posted May 16 Author Share Posted May 16 The graphics description in "About This Mac" can be overridden with the DeviceProperty "model" Link to comment https://www.insanelymac.com/forum/topic/362706-proper-framebuffer-patching-for-hp-elitebook-850-g7-laptop-comet-lake-with-working-hdmi-port/#findComment-2850366 Share on other sites More sharing options...
deeveedee Posted May 23 Author Share Posted May 23 (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 May 23 by deeveedee Link to comment https://www.insanelymac.com/forum/topic/362706-proper-framebuffer-patching-for-hp-elitebook-850-g7-laptop-comet-lake-with-working-hdmi-port/#findComment-2850568 Share on other sites More sharing options...
deeveedee Posted June 10 Author Share Posted June 10 (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 June 10 by deeveedee Link to comment https://www.insanelymac.com/forum/topic/362706-proper-framebuffer-patching-for-hp-elitebook-850-g7-laptop-comet-lake-with-working-hdmi-port/#findComment-2851006 Share on other sites More sharing options...
deeveedee Posted 1 hour ago Author Share Posted 1 hour ago (edited) 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 47 minutes ago by deeveedee Added AI theory Link to comment https://www.insanelymac.com/forum/topic/362706-proper-framebuffer-patching-for-hp-elitebook-850-g7-laptop-comet-lake-with-working-hdmi-port/#findComment-2851520 Share on other sites More sharing options...
Recommended Posts