Jump to content

Help: Fixing Lenovo Y510p Nvidia GT 755M on OS X Yosemite 10.10.2


ahmed_ais
 Share

169 posts in this topic

Recommended Posts

The second card used to work fine since Yosemite but the problem has always been getting the first one connected to the display and being recognized as built-in. My previous investigations led me to conclude that IGD (Intel Graphics Display) does not completely go out of the scene even with two dedicated GPUs are on. That is, IGD is the only graphics device directly connected to the display and while the two Nvidia GPUs are active IGD fades out but still responsible (alone) to deliver all the processed graphics to the display. This behavior may be fine in Windows and Linux as the driver knows how to deal with it ignoring that gateway (IGD) but it is not the case for macOS where this setup just does not exist (for real macs) and the driver is not aware of it.

 

So with 2 Nvidia GPUs --> IGD fades out (to be a gateway only) --> macOS see the 2 GPU's --> macOS cannot see the display (only a gateway) --> macOS assume the gateway is the display for the system (which is not exactly true) --> configurations for 1st Nvidia with display fails --> macOS does not work correctly graphics wise.

 

This is all a theory and could be completely wrong (I hope). For that, I'm reading into how IGD work with Optimus (how the connections are designed). I wish if there were any technical manual for this type of gaming PCs where the details of the hardware are shown.

Ok, but we have open source drivers like noveau for Linux and they support our configuration. I think the problem is that OS X can't read VBIOS to read config however we can extract it from BIOS and try to inject values.

 

 

 

Wysłane z iPhone za pomocą Tapatalk

Link to comment
Share on other sites

Ok, but we have open source drivers like noveau for Linux and they support our configuration.

Yea, I will try to take a look inside the source code for hints.

 

 

I think the problem is that OS X can't read VBIOS to read config however we can extract it from BIOS and try to inject values.

Take a read few pages back as the idea of extracting VBIOS have been discussed before (by notten) although I don't remember we did any injections.

Link to comment
Share on other sites

We need probably EFI strings which describes connectors used by our card so OS X will know where to route display. Probably Lenovo uses different config for internal 755m which is not supported by OS X

 

 

Wysłane z iPhone za pomocą Tapatalk

Yea, I will try to take a look inside the source code for hints.

 

 

Take a read few pages back as the idea of extracting VBIOS have been discussed before (by notten) although I don't remember we did any injections.

Look at this: https://github.com/skeggsb/linux/commit/714a98fc3f20934ce8098667b809de954ebab93c

 

 

Wysłane z iPhone za pomocą Tapatalk

Link to comment
Share on other sites

We need probably EFI strings which describes connectors used by our card so OS X will know where to route display. Probably Lenovo uses different config for internal 755m which is not supported by OS

The problem with EFI strings is to know priori what are the available connections and then to implement them within the strings. I have been trying to understand this the past few days but it gets more complicated. So here are my findings so far ...

 

On Windows with Intel GPU active (ultrabay card is out), the Intel GPU is connected to a display with these properties (taken from device manager):

Device instance path: DISPLAY\LGD0416\4&7A74E6D&1&UID265988
Hardware IDs: MONITOR\LGD0416
BIOS device name: \_SB.PCI0.GFX0.DD1F
Parent: PCI\VEN_8086&DEV_0416&SUBSYS_380117AA&REV_06\3&11583659&0&10

Now when booting with ultrabay card in, the built-in Nvidia GPU controls a display with theses properties:

Device instance path: DISPLAY\LGD0416\5&339079E2&2&UID4353
Hardware IDs: MONITOR\LGD0416
BIOS device name: \_SB.PCI0.PEG0.PEGP.LCD
Parent: PCI\VEN_10DE&DEV_0FCD&SUBSYS_380017AA&REV_A1\4&57d6125&0&0008

And that made me thinking because while in both scenarios the GPU connected to the same type of monitor (LGD0416), each GPU had a different code to execute to connect to the monitor as defined in ACPI. Intel GPU uses DD1F device within GFX0 (SSDT-6) while Nvidia GPU uses LCD device defined in PEG0.PEGP (SSDT-7). So I thought to check in OS X and see how both GPUs connect using IOREG. In case of Intel GPU, it was connected correctly to display defined by device DD1F [iGPU@20000 -> DD1F@410] as AppleBacklightDisplay. For Dual-Nvidia setup, I found the built-in GPU connects through device LCD (as in Windows) [PEG0@1000 -> PEGP@0 -> LCD@8000a450] but as AppleDisplay.

 

The first thing to note here is having the built-in GPU connected to display that is identified as AppleDisplay. I have read multiple times that this identification is used when connecting to external displays and this is why we see the same information in display settings in System Preferences. I have also read that this could be fixed by injecting some properties to the Nvidia GPU (using EFI strings for example) but all my attempts to fix this failed so far.

 

The second thing I found is that GFX0 device (at address @20000 which is Intel GPU) is still available in Dual-Nvidia setup and visible in IOREG:IODeviceTree and still owns device DD1F (a device to control monitor). I think this is just because it exist in ACPI tables but have no effect. To verify this, I made an SSDT to disable/hide the GFX0 device using a call to _STA method and the Dual-Nvidia setup booted normally with GFX0 not found any more in IOREG.

 

Now what I'm trying to understand is why OS X is seeing monitor at PEG0.PEGP.LCD as external (i.e. AppleDisplay instead of AppleBacklightDisplay) and maybe if we compare the code of devices GFX0.DD1F and PEG0.PEGP.LCD we could find some clues. In addition, I'm still wondering why I can't boot without nv_disable=1 and what can we do about it. Maybe both are related and without nv_disable=1 flag the driver attempts to loads but can't find the display it expects so it stalls (but no KP here).

Link to comment
Share on other sites

  • 2 weeks later...

A long time ago when y510p has been just released Linux also couldn't boot with open source drivers and it had similar issue. Then they fixed this issue in open source driver and now it works out of box. We should find this issue and see how it was fixed. I think there is a simple workaround.

 

 

Wysłane z iPhone za pomocą Tapatalk

Just adding a reference to another laptop having similar issue. Although the topic is old, Imaurad had posted the same observations I posted above ..

Look at this

https://git.backbone.ws/linux/backbone-sources/commit/714a98fc3f20934ce8098667b809de954ebab93c?diffmode=sidebyside

 

 

Wysłane z iPhone za pomocą Tapatalk

https://github.com/ulli-kroll/linux-comcerto/commit/205877f9156daebb975fb46205488da6fdf5b3f5

 

This workaround used for sure our Y510p. Probably OS X doesn't implement it.

 

 

Wysłane z iPhone za pomocą Tapatalk

Link to comment
Share on other sites

A long time ago when y510p has been just released Linux also couldn't boot with open source drivers and it had similar issue. Then they fixed this issue in open source driver and now it works out of box. We should find this issue and see how it was fixed. I think there is a simple workaround.

 

 

Look at this

https://git.backbone.ws/linux/backbone-sources/commit/714a98fc3f20934ce8098667b809de954ebab93c?diffmode=sidebyside

 

https://github.com/ulli-kroll/linux-comcerto/commit/205877f9156daebb975fb46205488da6fdf5b3f5

 

This workaround used for sure our Y510p. Probably OS X doesn't implement it.

 

I will look into this meanwhile ............

Link to comment
Share on other sites

I will look into this meanwhile ............

 

 

 

Hi! I discovered one more thing. I extracted VBIOS from our BIOS/EFI and I found out that there are 2 VBIOSes for our card - one when NVIDIA it's primary card and the second when it's used as secondary. The difference is that in first case VBIOS contains info about connectors whereas in the second there is not (because it's Optimus card).

Link to comment
Share on other sites

  • 3 months later...

I will look into this meanwhile ............

try update to 10.12.5

install webdriver

and push intelBacklight.kext into SLE

 

may be your display will work. 

 

that's working on eDP M1000M, may be lucky on your! 

Link to comment
Share on other sites

try update to 10.12.5

install webdriver

and push intelBacklight.kext into SLE

 

may be your display will work. 

 

that's working on eDP M1000M, may be lucky on your!

 

Recently I took apart Y510P and I discovered that display is connected using LVDS connector. It strange because both Windows and Linux show hat it's connected through eDP.

Link to comment
Share on other sites

Recently I took apart Y510P and I discovered that display is connected using LVDS connector. It strange because both Windows and Linux show hat it's connected through eDP.

 

Yeah and a quick search on eBay showed results for Y510p LVDS cables but not any result for eDP cables. Another search led me here which say the same thing: it is an LVDS. Why would Windows and Linux say otherwise? I really wanna know !!

 

Unless, the graphics source is genuine eDP but the display is LVDS and there's some kind of bridge device that connects between the two. PTN3460 is an example of this: 

 

PTN3460 is an (embedded) DisplayPort to LVDS bridge device that enables connectivity between an (embedded) DisplayPort (eDP) source and LVDS display panel. It processes the incoming DisplayPort (DP) stream, performs DP to LVDS protocol conversion and transmits processed stream in LVDS format.

If that's the case, I think it could be related to the problem we have where macOS sees the built-in display as external. It could be that Nvidia driver (for mac) is not working fine with that bridge (why IGPU driver works fine with the bridge? no idea). [just a thought]

Link to comment
Share on other sites

  • 2 weeks later...

i have check all ioreg from this topic.

can not found display EDID at all ?

try inject EDID for next test !

 

I can try, but in this case HDMI is not detected at all. While testing in VNC I discovered that there is no 3D acceleration and QE/CI at all whereas on the second GPU there is full support for that.

Link to comment
Share on other sites

I can try, but in this case HDMI is not detected at all. While testing in VNC I discovered that there is no 3D acceleration and QE/CI at all whereas on the second GPU there is full support for that.

upload your ioreg at this test case!

Link to comment
Share on other sites

Here you have. EDID injected. First card is detected as NVIDIA Chip Model, whereas the second is properly detected as 755M. As you can see internal screen is not detected, HDMI neither.

 

I had to ZIP IOReg because size was bigger than 10M.

i can not see internall display plug on any port.

make it again with intelHD

Link to comment
Share on other sites

  • 6 months later...
  • 3 years later...
 Share

×
×
  • Create New...