Jump to content

Now... for a real challenge. Dell M4800 eDP (no iGPU, just dGPU)

Recommended Posts

Hi all.

I've been trying to make this laptop work and all is doable and working but the dGPU (nVidia K2100M - Kepler). The laptop has no iGPU, nor does it have any GPU-related options in the BIOS. Dell has made sure to disable the iGPU if a QHD+ or UHD LED screen was installed on the laptop which sadly is my case (I got the QHD+ 3200x1800).

Tried with 10.13 + WebDrivers and 10.14.4 and no luck.

If I boot with nv_disable=1, the internal screen works (no QE/CI)

If I boot without it (and no injection), only external screens work (HDMI and DisplayPort). (HDMI shows up as @4,Display@D and DP with HDMI adapter shows as @2,Display@B

Researching more into the issue, I found that the laptop has 8 "heads" internally. 1 for VGA, one for the Panel (eDP) and 2 for each other port (2 for the external DP, 2 for the external HDMI and 2 for a 3rd unknown port (might be one at the dock which I don't have). Those heads, connectors, and signal types are all defined in the DCB table inside the GPU's bios.

According to this post on InsanelyMac, the driver runs thru the heads (might be more than one head per port as it is in my case). And then AppleGraphicsPolicy.kext (which now has a similar name) tries to pull the EDID from each port and as such defines the ports with working monitors. So, the Linux DCB table looks like this.


You see a "Mac DCB#" column at the beginning. That was obtained by opening the GPU's bios with an old mac utility called "NvidiaInfo" which sadly hasn't got full support for newer bios, but most of what it shows checks out with the Linux-obtained info.


This information is good for figuring the @display-cfg variable for each screen and also the NVCAP value. According to the same topic, the display-cfg value is composed of:

BYTE: Display-Number

BYTE: I2C Read Offset

BYTE: DCB Entry OR (guessing)

BYTE: 0x03

So for my case, it'd be 0x00110403 for eDP panel as the first screen. (we have to reverse the hex to inect tho, so it'll actually be 0x03041100

Strangely, the nvidia info utility I used on linux (envytools from nouveau against the official nvidia driver), show up a connected on head 0.

CONN table at 0x5d2d version 4.0
CONN 0: type 0x40 [LVDS] tag 0 <--
CONN 4: type 0x46 [DP] tag 4 HPD_4
CONN 5: type 0x46 [DP] tag 5 HPD_5
CONN 7: type 0x46 [DP] tag 7 HPD_2
CONN 8: type 0x47 [EDP] tag 8 HPD_3
CONN 9: type 0x00 [VGA] tag 9

The connectors that show up on IORegistryExplorer are 0, 4, 5 and 7.

I think my problem is due to the kext not finding\using the Connector 8.

Does anyone have any idea on how to make it show up?


Edited by Xeon3D
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

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.

  • Create New...
The popup will be closed in 15 seconds...