Contribute
Register

Can't run 4K @60Hz on external monitor via mDP on Surface Pro 4 Intel HD 520

Status
Not open for further replies.
Joined
Apr 10, 2011
Messages
29
Motherboard
Surface Pro 4 (Clover)
CPU
i5-6300U
Graphics
HD 520, 2736x1824
Hey all,

I've been wracking my brain for the past three days or so since I received my new Sceptre U275W-4000R monitor from Amazon as I have been unable to run the display at its full potential of 4K @60Hz on my macOS installation.

Currently, the monitor is running 4K @30Hz over mini DisplayPort. This monitor comes with two HDMI ports (1 x HDMI 1.4, 1 x HDMI 2.0), one mini DisplayPort, and one DVI.

For some background, I have never been able to get the Surface Pro 4 to boot without using the disable minStolenSize patch, going all the way back to when I was running Sierra. I went through a ton of different forums and posts about DVMT-prealloc sizes and patches before I found this patch to work successfully. The Surface has a very nice QHD display and I am almost certain that the DVMT-prealloc size is set to at least 64mb, if not more. I attempted to check this by opening up a copy of my UEFI binary and searching the ROMs inside of DXEcore, however I was unable to locate the DVMT-prealloc parameters at all. I know that Windows 10 isn't a good indicator of this, but it does show 128mb. Additionally, I have never had any issues with my QHD display and I am able to push my external monitor at 4K (albeit at 30Hz) on my macOS installation without any display issues or glitches and I am also able to get the full 4K @60Hz on my Windows 10 installation without any special configuration or adjustments.

I've already read the WhateverGreen guide for patching framebuffers. I attempted my best to follow the guide and to apply the appropriate patches for my system using a framebuffer dump and FBPatcher, installed the WhateverGreen kext -- however the device still fails to boot without the disableMinStolenSize patch, even after rebuilding caches and such after booting with a bogus ig-platform-id. I have tried other ig-platform-ids like 0x191B000 and 0x1912000 but none of them have helped.

I have tried using a mDP->HDMI adapter on the HDMI 2.0 port of the monitor with the -cdfon bootflag, the enableHDMI20 property, and a combination of both with no success. The adapter I tried is not an active adapter, however, so I still have that to try. But I still don't think that that will solve the problem since DisplayPort should be able to handle the resolution just fine and yet it doesn't.

I have tried using SwitchResX and ResXtreme to change the resolution and refresh rate, however any option above 1080p can only run at 30Hz. I tried a variant that ran at 59.999Hz, however the image still never showed up on the monitor.

I'm lost as to what the issue is. Perhaps I don't understand enough about the disableMinStolenSize patch and how it may affect WhateverGreen, perhaps I don't understand enough about WhateverGreen's implementation and its fixes for the pixel clock limit, perhaps I even just need a new mDP->mDP cable to get the full resolution and refresh rate. I'm not sure!

TL;DR - Windows can run this monitor at 4K @60Hz over DisplayPort, but macOS can't go past 4K @30Hz.

Please help out if you know anything about this.

I've attached all of the problem reporting files that are asked for in the Laptop guide. This is my first time asking for help on the forums in a long time, so please let me know what I may have missed with regards to the data provided.

Thanks!

P.S. - I am completely aware that the Surface line of devices are not the optimal choice for running macOS, this is just me trying to get all that I can out of a great device.
 

Attachments

  • debug_7091.zip
    3.6 MB · Views: 68
  • debug_7091.zip
    3.6 MB · Views: 51
Hey all,

I've been wracking my brain for the past three days or so since I received my new Sceptre U275W-4000R monitor from Amazon as I have been unable to run the display at its full potential of 4K @60Hz on my macOS installation.

Currently, the monitor is running 4K @30Hz over mini DisplayPort. This monitor comes with two HDMI ports (1 x HDMI 1.4, 1 x HDMI 2.0), one mini DisplayPort, and one DVI.

For some background, I have never been able to get the Surface Pro 4 to boot without using the disable minStolenSize patch, going all the way back to when I was running Sierra. I went through a ton of different forums and posts about DVMT-prealloc sizes and patches before I found this patch to work successfully. The Surface has a very nice QHD display and I am almost certain that the DVMT-prealloc size is set to at least 64mb, if not more. I attempted to check this by opening up a copy of my UEFI binary and searching the ROMs inside of DXEcore, however I was unable to locate the DVMT-prealloc parameters at all. I know that Windows 10 isn't a good indicator of this, but it does show 128mb. Additionally, I have never had any issues with my QHD display and I am able to push my external monitor at 4K (albeit at 30Hz) on my macOS installation without any display issues or glitches and I am also able to get the full 4K @60Hz on my Windows 10 installation without any special configuration or adjustments.

I've already read the WhateverGreen guide for patching framebuffers. I attempted my best to follow the guide and to apply the appropriate patches for my system using a framebuffer dump and FBPatcher, installed the WhateverGreen kext -- however the device still fails to boot without the disableMinStolenSize patch, even after rebuilding caches and such after booting with a bogus ig-platform-id. I have tried other ig-platform-ids like 0x191B000 and 0x1912000 but none of them have helped.

I have tried using a mDP->HDMI adapter on the HDMI 2.0 port of the monitor with the -cdfon bootflag, the enableHDMI20 property, and a combination of both with no success. The adapter I tried is not an active adapter, however, so I still have that to try. But I still don't think that that will solve the problem since DisplayPort should be able to handle the resolution just fine and yet it doesn't.

I have tried using SwitchResX and ResXtreme to change the resolution and refresh rate, however any option above 1080p can only run at 30Hz. I tried a variant that ran at 59.999Hz, however the image still never showed up on the monitor.

I'm lost as to what the issue is. Perhaps I don't understand enough about the disableMinStolenSize patch and how it may affect WhateverGreen, perhaps I don't understand enough about WhateverGreen's implementation and its fixes for the pixel clock limit, perhaps I even just need a new mDP->mDP cable to get the full resolution and refresh rate. I'm not sure!

TL;DR - Windows can run this monitor at 4K @60Hz over DisplayPort, but macOS can't go past 4K @30Hz.

Please help out if you know anything about this.

I've attached all of the problem reporting files that are asked for in the Laptop guide. This is my first time asking for help on the forums in a long time, so please let me know what I may have missed with regards to the data provided.

Thanks!

P.S. - I am completely aware that the Surface line of devices are not the optimal choice for running macOS, this is just me trying to get all that I can out of a great device.

Try with kernel flag -cdfon.
 
Try with kernel flag -cdfon.

In my original post I mentioned trying both the -cdfon flag, the enableHDMI20 property, and then trying both together. I just tried again, but it's still the same. Is the -cdfon flag dependent on anything other than WhateverGreen or Lilu for it to work correctly..?
 
In my original post I mentioned trying both the -cdfon flag, the enableHDMI20 property, and then trying both together. I just tried again, but it's still the same. Is the -cdfon flag dependent on anything other than WhateverGreen or Lilu for it to work correctly..?

The files you attached showed no -cdfon.
Any change requires new PR files.
 
The files you attached showed no -cdfon.
Any change requires new PR files.

Here are the new files with the -cdfon flag set.
 

Attachments

  • debug_11308.zip
    3.1 MB · Views: 57
You should experiment with other ig-platform-id values.

I tried all of the ig-platform-id values from this list that I got from FBPatcher for the Skylake platform:

0x191E0000 (mobile, 3 connectors) #
0x19160000 (mobile, 3 connectors) #
0x19260000 (mobile, 3 connectors) #
0x19270000 (mobile, 3 connectors) #
0x191B0000 (mobile, 3 connectors) #
0x193B0000 (mobile, 3 connectors) #
0x19120000 (mobile, 3 connectors) #
0x19160002 (mobile, 3 connectors, no fbmem) #
0x19260002 (mobile, 3 connectors, no fbmem) #
0x191E0003 (mobile, 3 connectors, no fbmem) #
0x19260004 (mobile, 3 connectors, no fbmem) #
0x19270004 (mobile, 3 connectors, no fbmem) #
0x193B0005 (mobile, 4 connectors, no fbmem) #
0x191B0006 (mobile, 1 connectors, no fbmem) #
0x19260007 (mobile, 3 connectors, no fbmem) #

A few of them were the same as 0x19160000, but there were also a few that just lacked the proper connectors such as for the LVDS internal display or switching the DP to HDMI, which just didn't help at all.

There were a couple of them that, upon boot up, displayed everything fine while the external monitor was not connected. However, once I connected the monitor, it was able to run at 4K 60Hz, but the internal display would freeze on whatever the last frame was sent to it before the external monitor was plugged in. I think the ig-platform-id values that made this happen were meant for Iris Pro graphics.

I'm attaching the PR files for 0x1927004, which was one of the ones that froze but ran the monitor at 4K 60Hz. Let me know if there are any other things to try out.

Edit: This setup is preferable to 0x19160000 because I can at least use the 4K monitor and just not use the built-in display. The audio is broken now, though. Not sure if the audio is tied to that at all..?
 

Attachments

  • debug_3902.zip
    2.9 MB · Views: 60
Last edited:
Status
Not open for further replies.
Back
Top