Jump to content

Lenovo X1C5 : DP (or HDMI) working but can't get 4K output


jamieakers

Recommended Posts

Had a good search, tried many things but cannot get 4K on my Lenovo X1 Carbon Gen 5 (Kaby Lake, Intel HD Graphics 620 ... NOT UHD Graphics 620).  Setup using guide here: https://github.com/anathonous/X1C5-Hackintosh-OpenCore-MacOSX/ with my only changes being to use Heliport and itlwm.kext, and upgrading to latest versions of WhateverGreen.kext and AppleALC.kext. If it makes any difference I'm using a Dell U3219Q connected over USB-C (DP alt-mode) and it's recognised and working at 1440p, USB devices connected to the monitor also work fine (the USB isn't hotplug, not fussed about this.  Audio also doesn't work but again not fussed).

 

Booting from an Ubuntu USB stick and I get 4K - ruling out any issues with the cable or hardware.  DVMT is also set at 256MB in BIOS so I don't think there's an issue there.

 

Things I have tried...

 

- enable-hdmi20 on and off in config.plist.  No effect.

- manually specifying the port as being DP in config.plist with framebuffer-con2-type (con1 is the internal panel).  Black screen trying this.

- a variety of AAPL,ig-platform-id taken from the WEG guide.  No effect.

- igfxmpc in boot-args.  No effect.

- igfxtypec (just in case) in boot-args.  No effect.

 

I've also validated the EDID reported to macOS is correct (checked using IORegistryExplorer) in terms of the supported resolutions.

 

All help gratefully received, thank you!  I'd prefer to get it working over USB-C but if it has to be HDMI so be it.

config.plist.zip

Link to comment
Share on other sites

  • Administrators

You're highly unlikely to obtain 4K out of macOS with your current framebuffer patches:

FB_patches.png

 

Indeed, these apply the usual video memory patches (fbmem 9MB, stolenmem 19MB)) required when Intel DVMT is limited to 32MB. If, as I understood, you've set DVMT to 256MB in BIOS, then you can get rid of your fbmem + stolenmem patches. These are not compatible with 4K operation which usually requires DVMT to be set at a minimum of 64MB.

 

See here: https://osxlatitude.com/forums/topic/17804-dvmtstolenmemfbmemcursormem-why-do-we-patch-these-for-broadwell-and-later

 

I therefore recommend you remove/comment out your fbmem and stolenmem patches. In the same respect, you're highly unlikely to require to set VRAM, i.e. unifiedmem, to 2GB.

Link to comment
Share on other sites

Thanks for looking at this and getting back to me so quickly!  Tried booting without fbmem + stolenmem but KP and refuses to boot.  Reinstating stolenmem gets the machine to boot without issue.  As using OC 0.9.5 at the moment switched to the debug version per Dortania's instructions.  Making me wonder whether the 256MB setting in BIOS does set DVMT.  It's labelled "Total Graphics Memory" but if there's some way to check please let me know - I couldn't find an obvious way from searching.

 

Attached the produced OpenCore logs.  If any other files would be handy to investigate please do let me know.

opencore-2025-09-30-193108.txt.zip

Link to comment
Share on other sites

  • Administrators

Any advanced settings in your BIOS setup?

 

If there are no specific settings for DVMT in your laptop's BIOS, you'll have to scrounge the Net for valid information I'm afraid. But I'm pretty sure it is 32MB by default, especially if you look at the Clover config posted in the repo you mentioned in your opening post:

Lenoxo_X1_Carbon_DVMT.png

 

One thing you can do, though, is experiment with fbmem and stolenmem values in the manner I described in my article linked above. As long as the sum of them remains lower than DVMT pre-allocated value, you'll be Ok. So you could try to boot with fbmem+stolenmem set to, say, 30MB, then boot with fbmem+stolenmem set to, say, 34MB. If you boot Ok with 30MB but not with 34MB, you'll know that DVMT is set to 32MB.

 

You use KBL FB 0x591B0000 which is defined as follows:

ID: 591B0000, STOLEN: 38 MB, FBMEM: 21 MB, VRAM: 1536 MB, Flags: 0x0000130B
TOTAL STOLEN: 39 MB, TOTAL CURSOR: 1 MB (1572864 bytes), MAX STOLEN: 136 MB, MAX OVERALL: 137 MB (144191488 bytes)
Model name: Intel HD Graphics KBL CRB
Camellia: CamelliaDisabled (0), Freq: 1388 Hz, FreqMax: 1388 Hz
Mobile: 1, PipeCount: 3, PortCount: 3, FBMemoryCount: 3
[0] busId: 0x00, pipe: 8, type: 0x00000002, flags: 0x00000098 - ConnectorLVDS
[2] busId: 0x04, pipe: 10, type: 0x00000800, flags: 0x00000187 - ConnectorHDMI
[3] busId: 0x06, pipe: 10, type: 0x00000400, flags: 0x00000187 - ConnectorDP
00000800 02000000 98000000
02040A00 00080000 87010000
03060A00 00040000 87010000
  • fbmem is set to 21MB
  • stolenmem is set to 38MB

You therefore need DVMT to be set to at least 64MB to support the native framebuffer without patching. There is no way around this.

Afaik, you'll only be able to set DVMT to 64MB by patching your BIOS and, from what I've read on the Net, it looks like you'd need some EPROM programming equipment...

If nothing seems readily available, you could always post a BIOS mod request in the Hackintosh section of the bios-mods.com forum.

 

NB: your Lenovo X1 Carbon is a laptop so I would have expected the built-in screen to be attached to the usual connector con0, not con1 as you stated earlier.

Link to comment
Share on other sites

  • Administrators

Another thing you could experiment with is switching to KBL framebuffer 0x59160000:

ID: 59160000, STOLEN: 34 MB, FBMEM: 0 bytes, VRAM: 1536 MB, Flags: 0x00000B0B
TOTAL STOLEN: 35 MB, TOTAL CURSOR: 1 MB (1572864 bytes), MAX STOLEN: 103 MB, MAX OVERALL: 104 MB (109588480 bytes)
Model name: Intel HD Graphics KBL CRB
Camellia: CamelliaDisabled (0), Freq: 1388 Hz, FreqMax: 1388 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: 0x00000800, flags: 0x00000187 - ConnectorHDMI
00000800 02000000 98000000
01050900 00040000 87010000
02040A00 00080000 87010000

All you would require would then be:

1) to patch stolenmem to, say, 30MB (=0x01E00000, which you specify as 00 00 E0 01). Other value to try is 26MB (00 00 A0 01)

2) patch con1 from 01050900 00040000 87010000 to 0204A000 00080000 87010000 (using framebuffer-con1-alldata patch))

3) patch con2 from 0204A000 00080000 87010000 to 03060A00 00040000 87010000 (using framebuffer-con2-alldata patch)

 

This is derived from here: https://www.insanelymac.com/forum/topic/345377-surface-pro-patch-the-framebuffer-properly-to-get-rid-of-the-dvmt-assertion-patch/

I don't know if that will bring support for 4K output (probably not) but it's worth a shot.

Link to comment
Share on other sites

6 hours ago, Hervé said:

Another thing you could experiment with is switching to KBL framebuffer 0x59160000:

ID: 59160000, STOLEN: 34 MB, FBMEM: 0 bytes, VRAM: 1536 MB, Flags: 0x00000B0B
TOTAL STOLEN: 35 MB, TOTAL CURSOR: 1 MB (1572864 bytes), MAX STOLEN: 103 MB, MAX OVERALL: 104 MB (109588480 bytes)
Model name: Intel HD Graphics KBL CRB
Camellia: CamelliaDisabled (0), Freq: 1388 Hz, FreqMax: 1388 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: 0x00000800, flags: 0x00000187 - ConnectorHDMI
00000800 02000000 98000000
01050900 00040000 87010000
02040A00 00080000 87010000

All you would require would then be:

1) to patch stolenmem to, say, 30MB (=0x01E00000, which you specify as 00 00 E0 01). Other value to try is 26MB (00 00 A0 01)

2) patch con1 from 01050900 00040000 87010000 to 0204A000 00080000 87010000 (using framebuffer-con1-alldata patch))

3) patch con2 from 0204A000 00080000 87010000 to 03060A00 00040000 87010000 (using framebuffer-con2-alldata patch)

 

This is derived from here: https://www.insanelymac.com/forum/topic/345377-surface-pro-patch-the-framebuffer-properly-to-get-rid-of-the-dvmt-assertion-patch/

I don't know if that will bring support for 4K output (probably not) but it's worth a shot.

You'll be delighted to hear your assumption is spot on correct... tried this and it booted absolutely fine, but no 4k output.  Not sure what I was thinking, yes you're correct of course the internal display is connected to port 0 LVDS.  Clearly been a long day at work!

 

12 hours ago, Hervé said:

Any advanced settings in your BIOS setup?

 

If there are no specific settings for DVMT in your laptop's BIOS, you'll have to scrounge the Net for valid information I'm afraid. But I'm pretty sure it is 32MB by default, especially if you look at the Clover config posted in the repo you mentioned in your opening post:

Lenoxo_X1_Carbon_DVMT.png

 

One thing you can do, though, is experiment with fbmem and stolenmem values in the manner I described in my article linked above. As long as the sum of them remains lower than DVMT pre-allocated value, you'll be Ok. So you could try to boot with fbmem+stolenmem set to, say, 30MB, then boot with fbmem+stolenmem set to, say, 34MB. If you boot Ok with 30MB but not with 34MB, you'll know that DVMT is set to 32MB.

 

You use KBL FB 0x591B0000 which is defined as follows:

ID: 591B0000, STOLEN: 38 MB, FBMEM: 21 MB, VRAM: 1536 MB, Flags: 0x0000130B
TOTAL STOLEN: 39 MB, TOTAL CURSOR: 1 MB (1572864 bytes), MAX STOLEN: 136 MB, MAX OVERALL: 137 MB (144191488 bytes)
Model name: Intel HD Graphics KBL CRB
Camellia: CamelliaDisabled (0), Freq: 1388 Hz, FreqMax: 1388 Hz
Mobile: 1, PipeCount: 3, PortCount: 3, FBMemoryCount: 3
[0] busId: 0x00, pipe: 8, type: 0x00000002, flags: 0x00000098 - ConnectorLVDS
[2] busId: 0x04, pipe: 10, type: 0x00000800, flags: 0x00000187 - ConnectorHDMI
[3] busId: 0x06, pipe: 10, type: 0x00000400, flags: 0x00000187 - ConnectorDP
00000800 02000000 98000000
02040A00 00080000 87010000
03060A00 00040000 87010000
  • fbmem is set to 21MB
  • stolenmem is set to 38MB

You therefore need DVMT to be set to at least 64MB to support the native framebuffer without patching. There is no way around this.

Afaik, you'll only be able to set DVMT to 64MB by patching your BIOS and, from what I've read on the Net, it looks like you'd need some EPROM programming equipment...

If nothing seems readily available, you could always post a BIOS mod request in the Hackintosh section of the bios-mods.com forum.

 

NB: your Lenovo X1 Carbon is a laptop so I would have expected the built-in screen to be attached to the usual connector con0, not con1 as you stated earlier.

Thank you for your explanation here.  This really helped and cleared up my confusion... and there seems to be plenty of confusion around these values on various sites around the web!! 

 

I tried this with framebuffer-fbmem set to 00009000 (19mb) and framebuffer-stolenmem to 00003001 (9mb) and still no luck with 4k video.  Are there minimum values required to support 4k?  Starting to think might just need to sort out the BIOS.

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...