Skip to content

Commit 978cb8c

Browse files
authored
Add documentation for max pixel clock override (#80)
1 parent 60a691f commit 978cb8c

File tree

3 files changed

+23
-5
lines changed

3 files changed

+23
-5
lines changed

Manual/FAQ.IntelHD.en.md

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2358,11 +2358,23 @@ In some cases the EDID dump may be incompatible with macOS and leads to distorti
23582358

23592359
## HDMI in UHD resolution with 60FPS
23602360

2361-
Add the `enable-hdmi20` property to `IGPU`, otherwise you will get a black screen.
2362-
![hdmi20](./Img/hdmi20.png)
2363-
Or instead of this property use the boot-arg `-cdfon`
2364-
2365-
In addtion to HDMI, this should be enabled on some notebooks like ThinkPad P71 / 7700HQ / HD630 / 4K, where gIOScreenLockState3 error may occur.
2361+
Add the `enable-max-pixel-clock-override` property to `IGPU` or use the `-igfxmpc` boot-arg instead to raise the max pixel clock limit.
2362+
This is needed for 4K@60Hz on laptops like ThinkPad P71 or XPS 15, otherwise you will get a black screen. It can also be used for 4K@60Hz over HDMI 2.0.
2363+
2364+
![igfxmpc](./Img/max-pixel-clock.png)
2365+
2366+
The `CheckTimingWithRange` function in CoreDisplay.framework (userspace) is responsible for validating display timings.
2367+
It reads the IOFBTimingRange property, which contains the IODisplayTimingRange structure with various limits, including the max pixel clock limit.
2368+
At least on KBL, the framebuffer driver sets the max pixel clock frequency in the IODisplayTimingRange structure to 450 MHz, which is insufficient for 4K@60Hz.
2369+
`-igfxmpc` modifies the IODisplayTimingRange structure and raises the max pixel clock limit to 675 MHz. This will allow `CheckTimingWithRange` to succeed with 4K@60Hz displays.
2370+
The default 675 MHz limit can be changed with the `max-pixel-clock-frequency` property in `IGPU`, which overrides the new max pixel clock limit (in hertz).
2371+
2372+
Another approach is to patch `CheckTimingWithRange` in CoreDisplay.framework to skip validation of the pixel clock.
2373+
To use this patch, add the `enable-hdmi20` property to `IGPU` or use the `-cdfon` boot-arg.
2374+
2375+
![hdmi20](./Img/hdmi20.png)
2376+
2377+
`-igfxmpc` is the preferred approach to bypass the 450 MHz pixel clock limit, as `-cdfon` depends on the userspace patcher.
23662378

23672379
## Disabling a discrete graphics card
23682380

Manual/Img/max-pixel-clock.png

26.1 KB
Loading

WhateverGreen.xcodeproj/project.pbxproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,9 @@
8484
1CF01C921C8CF997002DCEA3 /* Changelog.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = Changelog.md; sourceTree = "<group>"; };
8585
1CF01C931C8DF02E002DCEA3 /* LICENSE.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE.txt; sourceTree = "<group>"; };
8686
2F30012324A00F2800C590C3 /* kern_igfx_pm.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = kern_igfx_pm.cpp; sourceTree = "<group>"; };
87+
5B9131F2258A8EFB0008530D /* FAQ.IntelHD.en.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = FAQ.IntelHD.en.md; sourceTree = "<group>"; };
88+
5B9131F3258A8F090008530D /* FAQ.IntelHD.cn.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = FAQ.IntelHD.cn.md; sourceTree = "<group>"; };
89+
5B9131F4258A8F1C0008530D /* FAQ.OldPlugins.en.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = FAQ.OldPlugins.en.md; sourceTree = "<group>"; };
8790
CE1970FD21C380DF00B02AB4 /* kern_nvhda.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = kern_nvhda.cpp; sourceTree = "<group>"; };
8891
CE1970FE21C380DF00B02AB4 /* kern_nvhda.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = kern_nvhda.hpp; sourceTree = "<group>"; };
8992
CE1F61B82432DEE800201DF4 /* kern_igfx_debug.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = kern_igfx_debug.cpp; sourceTree = "<group>"; };
@@ -304,6 +307,9 @@
304307
children = (
305308
CEEF190A239CFDB1005B3BE8 /* FAQ.Chart.md */,
306309
CE7FC0CD20F687F500138088 /* FAQ.GeForce.en.md */,
310+
5B9131F2258A8EFB0008530D /* FAQ.IntelHD.en.md */,
311+
5B9131F3258A8F090008530D /* FAQ.IntelHD.cn.md */,
312+
5B9131F4258A8F1C0008530D /* FAQ.OldPlugins.en.md */,
307313
CEAEA1171F26905A00918651 /* FAQ.Radeon.en.md */,
308314
CEAEA1181F26905A00918651 /* FAQ.Radeon.ru.md */,
309315
CE7FC0CE20F6882400138088 /* FAQ.Shiki.en.md */,

0 commit comments

Comments
 (0)