Jump to content
baconeveryday

[HELP] Dual monitor not working on Optiplex 7040 Intel HD530 with Big Sur

31 posts in this topic

Recommended Posts

Installed and running Big Sur but only able to get 1 DP output.  Having been trying different boot options and settings but unsuccessful.

 

Hoping to get any ideas on this and what I'm missing.  I've read countless threads and probably tired them just out of desperation.  Any help would be much appreciated.

 

thanks!

 

I'm guessing it could be DVMT-prealloc but i've done the framebuffer and that didn't help.

I've tried setting DVMT on a Dell desktop under Clover before on catalina but still only single monitor.  However, couldn't find a good way to very it set to 64MB or 128MB.

https://github.com/optiplex-osx/Dell-OptiPlex-7040-Clover-EFI

 

GPU acceleration is working.  

Applied the kernel patches as shown in screen shot.  

 

I have tired the usual but no effect so removed the framebuffer settings.

PciRoot(0x0)/Pci(0x2,0x0)

AAPL,ig-platform-id 00001219

framebuffer-fbmem 00009000

framebuffer-patch-enable 01000000

framebuffer-stolenmem 00003001

 

Current boot args (yes duplicating AGDP disablement) but why not :)

agdpmod=ignore igfxonln=1 agdpmod=pikera

 

Desktop System is Dell Optiplex 7040

i7-6700 Skylake 6th gen.

Intel HD530 iGPU

OC 0.6.3 using Whatevergreen.kext 1.4.4.  config.plist is pretty standard following Skylake recommedation. 

https://dortania.github.io/OpenCore-Install-Guide/config.plist/skylake.html#starting-point

 

 

 

Screen Shot 2020-11-20 at 1.56.20 AM.png

Screen Shot 2020-11-20 at 1.57.44 AM.png

Share this post

You would not normally be expected to inject framebuffer-conX-busid or framebuffer-conX-index properties. the conX-enable and conX-type are expected to be sufficient to set display output types.

 

What you ought to check though is if the number of output ports of the SKL framebuffer (ig-platform-id) you use matches the number of output ports you want to use.

 

DVMT (StolenMem) or framebuffer memory size parameters do not apply to the number or type of display outputs so, indeed, no patch or property settings on those will make any difference.

 

Start by getting your active framebuffer settings from Hackintool.

Share this post

Thanks for the comments.  I agree I would not need the conX [busid,Index].  I went ahead to be certain.  I did have to correct the type from HDMI to DP on con2.

For completeness, SMBios is set to iMac17,1

 

The motherboard has 2 DP ports and 1 HDMI.  I just want to use 2 displays, 2 DP or 1 DP and 1 HDMI.  Either combination doesn't matter.

 

IOReg shows only 2 DP.  My only guess why IOReg only shows 2 display is that my Framebuffer Port Limit is 2 currently according to Hackintool->Patch->Patch->Advanced.  Is this a correct assumption?

Oddly enough Hackintool shows 3 connectors.  So I could try to inject BusID6.  Is there significance why BusID 4 and 6 have the same Pipe 10?

 

Would appreciate and suggestions on how to match the outputs.  I will search around and see what I cant find.

 

thanks.

 

 

Screen Shot 2020-11-20 at 11.16.22 PM.png

Screen Shot 2020-11-20 at 11.37.53 PM.png

Screen Shot 2020-11-20 at 11.46.32 PM.png

Screen Shot 2020-11-20 at 11.49.24 PM.png

Share this post

I think the problem is that, as you've illustrated with your WEG manual and Hackintool screenshots, SKL platform-id 0x19120000 is a mobile FB with a dummy video output and 2 x DP outputs. I don't have any Skylake computer so never looked into this but you ought to patch that framebuffer's connectors arrangement to support your DP+DP or DP+HDMI dual outputs.

 

So you could try and experiment with various things such as:

  1. change the connector type of DP output #1 to HDMI
  2. change the pipe of DP output #1 to 0x10
  3. change the Index and Bus id of DP output #1 to 0306 (since you get video out of DP #2)
  4. mix 2 & 3
  5. change port count to 4 and add a 4th DP or HDMI connector with Index/Bus id 0306
  6. replace the dummy connector by a 3rd DP or HDMI connector

I think you already know this but the WEG user manual provides you will all the necessary documentation to apply the above.

 

You may also use Hackintool to create those settings and prepare your properties injection through the patch generation facility (use iASL DSL Source or KextstoPatch (Hex) form rather than DeviceProperties which returns Base64 text).

Share this post

Hi @Hervé

 

Thanks for your continued help.  And yes I noticed the SKL is mobile and so milage may very.

  1. change the connector type of DP output #1 to HDMI -> tried...no go
  2. change the pipe of DP output #1 to 0x10 -> tried no go
  3. change the Index and Bus id of DP output #1 to 0306 (since you get video out of DP #2) -> tried no go
  4. mix 2 & 3 -> tried no go
  5. change port count to 4 and add a 4th DP or HDMI connector with Index/Bus id 0306
    1. How do you change the port count?
    2. Or is it just a matter of injecting another conX?  If so, I've tried it and no go also.
  6. replace the dummy connector by a 3rd DP or HDMI connector

How reliable is Hackintool if WEG is the release version?  Hackintosh says my current working DP is port 6 but port 2 is the correct seeing.  If I change index 2 to port 6, just no signal.

 

Let me know if you want to see any IOreq or hackintosh screen shots or logs.

 

thanks.

 

Edited by baconeveryday
Share this post

I don't know what you mean by "Hackintosh says my current working DP is port 6" but if you mean connector 0204, that would be right. In IOReg, you should see Port 6 reported against that connector FB@2.

 

You would change port count to 4 with the following property injection:

framebuffer-patch-enable        1        NUMBER (or 01000000 DATA)
framebuffer-pipecount           4        NUMBER
framebuffer-portcount           4        NUMBER

after which you would add properties for 4th connector con3:

framebuffer-con3-enable         1                               NUMBER
framebuffer-con3-alldata        03060A000004000087010000        DATA

where:

  • Index = 03
  • Bus Id = 06
  • Pipe = 0A00
  • Type = 00040000 (DP)
  • Flags = 01870000

You could also add a property to declare a desktop platform rather than a mobile one:

framebuffer-mobile              0        NUMBER

 

Share this post

Maybe I don't understand port 6 is the same as connection 0204?  I thought if you have something like this 02040A00 00040000 87010000, 02 = Port, 04 = busId, 0A = pipe, etc...

 

Okay...tried increasing port count and injected con3:

1795411161_ScreenShot2020-11-21at5_43_54PM.png.db2b22fb6ee17b53e10687c2701c8b69.png

 

No go still.  I'll try switch con3 to HDMI.

 

IOReg still shows only 3 connectors

1996132362_ScreenShot2020-11-21at5_45_33PM.thumb.png.b420564aa4f1f720ef71d79fae2776c8.png

 

I also went back and added pipecount even though its not in the screenshot.  still no difference in number of connectors.

 

However, if you look at IOReg -> framebuffer-portcount, it is special characters.  Makes me wonder is that a valid injection?

 

thanks.

Edited by baconeveryday
Share this post

Select connector/output port FB@2 in IORegistryExplorer, then, in the right part of the app, go to the bottom of the displayed data.

In connector 0204.... 02=Index and 04=Bus id.

 

Usually:

  • con0 (FB@0) is Port 0
  • con1 (FB@1) is port 5 (i.e. connector 0105... in the platform layout definition)
  • con2 (FB@2) is Port 6 (i.e. connector 0204... in the platform layout definition)
  • con3 (FB@3) is Port 7 (i.e. connector 0306... in the platform layout definition)

 

 

Example with the Capri framebuffer of my Latitude E6230:

ID: 01660003, STOLEN: 64 MB, FBMEM: 16 MB, VRAM: 1536 MB, Flags: 0x00000000
TOTAL STOLEN: 16 MB, TOTAL CURSOR: 1 MB, MAX STOLEN: 32 MB, MAX OVERALL: 33 MB (34619392 bytes)
Camellia: CamelliaUnsupported (255), Freq: 1808 Hz, FreqMax: 1808 Hz
Mobile: 1, PipeCount: 2, PortCount: 4, FBMemoryCount: 2
[5] busId: 0x03, pipe: 0, type: 0x00000002, flags: 0x00000030 - ConnectorLVDS
[2] busId: 0x05, pipe: 0, type: 0x00000400, flags: 0x00000407 - ConnectorDP
[3] busId: 0x04, pipe: 0, type: 0x00000400, flags: 0x00000081 - ConnectorDP
[4] busId: 0x06, pipe: 0, type: 0x00000400, flags: 0x00000081 - ConnectorDP
05030000 02000000 30000000
02050000 00040000 07040000
03040000 00040000 81000000
04060000 00040000 81000000

 

FB@0.jpg

 

FB@1.jpg

 

FB@2.jpg

 

FB@3.jpg

 

Share this post

Right..I think I was confused with the definition of the term port.

 

Looking at IOReg for my Optiplex 7040, this is what is assigned

AppleIntelFramebuffer@0 port-number is 0x0

AppleIntelFramebuffer@1 port-number is 0x5

AppleIntelFramebuffer@2 port-number is 0x6

 

Therefore, similar to your example, this is the same as how I am injecting framebuffer 

  • con0 (FB@0) is Port 0
  • con1 (FB@1) is port 5 (i.e. connector 0105... in the platform layout definition)
  • con2 (FB@2) is Port 6 (i.e. connector 0204... in the platform layout definition) <- is my primary boot display (working one)
  • Adding con3 as HDMI pipe 8 and pipe 10.

197737401_ScreenShot2020-11-21at10_34_08PM.png.57b14bd33479b07af5da309d4087be93.png

 

But also in IOReg, there is unknown characters.  See blue highlight.  And also FB@3 is not created or visible in IOReg.

 

thanks.

 

1108698428_ScreenShot2020-11-21at10_35_44PM.thumb.png.3965180236e377714ae17373231a7a32.png

 

Share this post

I suggested a patch, you applied something else...

-> suggested:

framebuffer-patch-enable    1                           NUMBER (or 01000000 DATA)
framebuffer-pipecount       4                           NUMBER
framebuffer-portcount       4                           NUMBER
framebuffer-con3-enable     1                           NUMBER
framebuffer-con3-alldata    03060A000004000087010000    DATA

-> applied:

framebuffer-patch-enable    01000000                    DATA
framebuffer-pipecount       04000000                    DATA
framebuffer-portcount       04000000                    DATA
framebuffer-con1-enable     01000000                    DATA
framebuffer-con1-alldata    010509000004000087010000    DATA
framebuffer-con2-enable     01000000                    DATA
framebuffer-con2-alldata    02040A000004000087010000    DATA
framebuffer-con3-enable     01000000                    DATA
framebuffer-con3-alldata    030608000008000087010000    DATA

 

Please note that injecting same properties as framebuffer's default ones is useless. Framebuffers do not suffer from Alzheimer disease...

framebuffer-con1-enable     01000000                    DATA
framebuffer-con1-alldata    010509000004000087010000    DATA
framebuffer-con2-enable     01000000                    DATA
framebuffer-con2-alldata    02040A000004000087010000    DATA

 

I'm pretty sure that HDMI would attach to connector 1 so I would patch it accordingly. With the additional 4th port, the entire injection would be as follows (connector 2 being left untouched):

AAPL,ig-platform-id         00001219                    DATA
framebuffer-patch-enable    1                           NUMBER
framebuffer-pipecount       4                           NUMBER   -> for test, otherwise remove
framebuffer-portcount       4                           NUMBER
framebuffer-con1-enable     1                           NUMBER
framebuffer-con1-alldata    010509000008000087010000    DATA     -> con1 to HDMI
framebuffer-con3-enable     1                           NUMBER
framebuffer-con3-alldata    03060A000004000087010000    DATA     -> new con3, set to DP

 

Good luck in the rest of your endaevour.

Share this post

Hi @Hervé

 

I apologize if it seem I wasn't trying to follow your changes.  I was and I was trying different combinations.  

 

As mentioned in the early post, I continue to inject con2 because the default is HDMI where it should be DP.  The interesting thing, and i'm not sure why, with or w/o con2 injection, the primary display is always DP and it works.  This display has to be connected at boot up.

 

So I tried your EXACT suggestion...I still only get 1 display.

 

1190114613_ScreenShot2020-11-24at11_47_38PM.png.27b3f12860f66216bf5dd251e068b6f3.png

 

 

I'm willing to try any other suggestions.  

 

thanks again.

Share this post

It looks like several other people suffer similar issues on such Dell Skylake platforms and no solutions to date either. Maybe you ought to consider the alternative of a discrete graphics card instead...

Share this post

One last thing I've only just thought of (sorry, I must be tired), is the old matter of Mac model video output capabilities as controlled by AppleGraphicsDevicePolicy kext (itself a PlugIn of AppleGraphicsControl kext). I don't know if that remains applicable in Big Sur but there used to be a binary patch to bypass the kext and remove display output capabilities restrictions. WEG also handles this through agdpmod boot arg. Again, I don't know if this has remained applicable to Big Sur but you may want to try out multiple displays again with boot args such as agdpmod=vit9696 or agdpmod=pikera.

https://github.com/acidanthera/WhateverGreen

 

Share this post

@baconeveryday, a friend of mine's got a Dell Optiplex 7050 with HD530. Using platform-id 0x19120000 + setting boot arg agdpmod=pikera (to bypass AppleGraphicsDevicePolicy kext's graphics capabilities control), we got HDMI on con1 (0105....) + DP on con2 (0204...). After injecting properties for 4th connector con3, we got 3 x concurrent displays: 1 x HDMI + 2 x DP.

 

HD530_3xScreens.jpg

 

Config injecting following properties for iGPU device@2, i.e. PciRoot(0x0)/Pci(0x2,0x0):

AAPL,ig-platform-id            00001219    DATA
device-id                      12190000    DATA      (only if required)
framebuffer-patch-enable       01000000    DATA
framebuffer-fbmem              00009000    DATA
framebuffer-stolenmem          00003001    DATA
framebuffer-pipecount          3           NUMBER
framebuffer-portcount          4           NUMBER
framebuffer-memorycount        3           NUMBER
framebuffer-con1-enable        01000000    DATA
framebuffer-con1-alldata       01050900000800008701000002040A00000400008701000003060A000004000087010000    DATA
hda-gfx                        onboard-1   STRING

framebuffer-con1-alldata basically injects the following 3 connectors properties/info in a single 36xbytes statement:

  • con1: 01050900 00080000 87010000 -> sets connector-type to HDMI (for HDMI audio support)
  • con2: 02040A00 00040000 87010000 -> unchanged, DP
  • con3: 03060A00 00040000 87010000 -> 2nd DP output

and in parallel, pipe count, port count and memory count of SKL layout 19120000 are respectively set to 3, 4 and 3 to support 4 x display connectors, con0 remaining a dummy one throughout.

 

Add agdpmod=pikera as boot arg in NVRAM of your OC config or in boot arg section of your Clover config. With OC, apply a Reset NVRAM at 1st reboot. Experiment with agdpmod=vit9696 too if you're game!

 

Hope it works for you. Don't get scared if all screens go black for a few seconds after login challenge.

Share this post

Hi @Hervé

 

I'm game!  

Thanks for getting back on this!

 

Unfortunately I'm still unable to get it to work on Big Sur.

 

I've tried the following combinations with 2 monitors connected at all times.  1 DP connected (primary and always working on con2), 1 DP and 1 HDMI both connected to 2nd monitor (I switch between DP and HDMI inputs to see if they work at all)

  Injection agdpmod=pikera agdpmod=vit9696 Kernel->patch agdp (#7 in config.plist)
1 x x   Disabled
2 x x   Enabled
3 x   x Disabled
4 x   x Enabled
5 w/ device-id x   Enabled
6 w/ device-id x   Disabled

 

Note, I've applied the following Kernel patches in the config.plist (see uploaded file)

 

Attaching the config.plist.  Maybe I'm missing something.  I've removed my serial number and the system UUID. I've used the latest kexts (2wks ago) w/ OC 0.6.3.  Ran SSDTTime on the 7040 to get the settings.  

Let me know if you need me to upload the EFI folder.

 

Thanks. 

 

Also if your friend can attach his/her config.plist, I can take a look.  Thanks again.

 

config.plist

Edited by baconeveryday
Share this post

@baconeveryday:blush: Oups! Copy/paste error in my previous post for the properties injection, my apologies. The injection of fbmem/stolenmem/pipecount/portcount/memcount were all incorrect by syntax and therefore inapplicable. I've corrected this above.

 

My friend is also using the additional boot args in NVRAM section of config:  igfxfcms=1 -igfxdvmt igfxonln=1

Share this post

I had posted this:

framebuffer-patch-fbmem              00009000    DATA
framebuffer-patch-stolenmem          00003001    DATA
framebuffer-patch-pipecount          3           NUMBER
framebuffer-patch-portcount          4           NUMBER
framebuffer-patch-memcount           3           NUMBER

instead of this:

framebuffer-fbmem              00009000    DATA
framebuffer-stolenmem          00003001    DATA
framebuffer-pipecount          3           NUMBER
framebuffer-portcount          4           NUMBER
framebuffer-memorycount        3           NUMBER

 

Try this adjusted config of yours (which is still without the serial numbers):

config.plist.zip

Share this post

@Hervé

 

You did it!  2 DP.  Thank you very much.  HDMI still doesn't work but I'm find with 2 displays.

 

I used the mod config.plist you sent to me.  I see you removed the kernel patches.  Was that all that changed?

 

I would not have figured this recipe out nor seen it in other posts.  The mem, pipe, port still don't quite make sense to me.  I'll look into it further.

 

I did have to make a change by removing the stolenmem and fbmem.  For whatever reason, when I included these two injections, my resolution is limited to 2K.  If I remove them, I get 4K.

 

1037630862_ScreenShot2020-11-28at2_52_41AM.thumb.png.9073b3d8b287108e71702332dd95c7fb.png

 

Edited by baconeveryday
Share this post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×