[Nouveau] [PATCH v2 8/9] acpi: Add support for Apple Gmux _DMS

Pierre Moreau pierre.morrow at free.fr
Sat May 30 14:21:41 PDT 2015


Hi Lukas

----- Mail original -----
> Hi Pierre,
> 
> On Thu, May 28, 2015 at 10:52:56AM +0200, Pierre Moreau wrote:
> > How is it supposed to work, by simply echo'ing ON or OFF to
> > vga_switcheroo/switch? Then I probably forgot some stuff as
> > it doesn't want to work on my laptop.
> 
> What exactly doesn't work and which version of the MacBook Pro did
> you try this on? The expected behaviour when switching GPUs on the
> MBP is that the GPU that was inactive on bootup will only show a
> black screen because it was unable to read the EDID (and DPCD on
> retina MBPs) on bootup. In other words, it's broken.

I'm trying on a mid-2009 MBP, which has a double NVidia setup with a 9400M as IGD and 9600M GT as DIS. Switching between both works (as long as do a PCI-reset of the G96, but that's another story and I should have a patch soon, hopefully).
It was also tested by another user on a retina MBP and we ran into the black screen issue. I pointed him to your patches, but I don't know yet if it helped or not.

> 
> There have been attempts to solve this by multiple folks, the last
> one was submitted to dri-devel in April by yours truly:
> http://lists.freedesktop.org/archives/dri-devel/2015-April/081515.html
> 
> That initial version of my patch set turned out to only work on
> pre-retina MBPs, and only if the active GPU on bootup is the
> discrete one. I'm currently working on a v2 to solve all that.

Cool! Looking forward to it!

> 
> We need to get switching working before we can enable runtime PM on
> MBPs, otherwise the user will be greeted by a black screen when the
> Nvidia GPU goes to sleep and hands over to the integrated GPU.
> So your patch is a bit premature I'm afraid. :-(

It's power management++: we even save energy on the screen by "powering it off" for better battery life! ;)

> 
> 
> As to the patch itself, you're checking for existence of the gmux
> but we can't make use of it unless its driver is loaded. Hence it
> may be easier to simply query for the existence of the driver,
> using something along the lines of find_module("apple-gmux").
> I imagine this is much less code than checking for the DMI IDs.

I didn't know there was such a function! Seems nice!

> 
> Also, Dave Airlie and Matthew Garrett already wrote a patch set to
> enable runtime PM for nouveau on MBPs which is more generic: It works
> with any vga_switcheroo handler, not just gmux:
> 
> http://lists.freedesktop.org/archives/dri-devel/2014-June/060927.html
> http://lists.freedesktop.org/archives/dri-devel/2014-June/060928.html
> http://lists.freedesktop.org/archives/dri-devel/2014-June/060942.html
> http://www.codon.org.uk/~mjg59/tmp/retina_patches/0027-nouveau-enable-runtime-pm-on-apple-gmux-machines.patch
> http://www.codon.org.uk/~mjg59/tmp/retina_patches/0028-nouveau-Enable-switcheroo-dynamic-PM-at-switcheroo-e.patch
> 
> The fourth one in that list is by Dave Airlie and all the others are
> by Matthew Garrett. But, as I said, we can't apply these either until
> switching works. I'm working on it. ;-)

I had no idea these patches existed: I should have looked around before.
I'll drop the patches, apart probably from the *cleaning* ones, but I'll wait for the previously mentioned ones to first land.

> 
> 
> As to your questions:
> 
> > How is it supposed to work, by simply echo'ing ON or OFF to
> > vga_switcheroo/switch?
> 
> Echoing ON/OFF to the "switch" file will power the inactive device
> up or down. If the currently active gpu is the discrete one (which
> is the default when booting a MacBook Pro)

Not on the mid-2009 MBP! ;) Which is great!

> , this will power up/down
> the integrated gpu. You can use the tool "gpu-switch" to force the
> MBP to the integrated GPU on next bootup, then you can echo ON/OFFI'ddd
> to change the power state of the Nvidia GPU:
> https://github.com/0xbb/gpu-switch
> 
> > If I understand it correctly, if the laptop is an Optimus one or
> > has a mux, we are not "allowed" to opt-out of DynPwr/DynOff by
> > powering down the card?
> 
> If we power the GPU down manually by echoing OFF to the "switch"
> file, the runtime PM code would probably get confused, I imagine
> that's the reason why ON/OFF is ignored if
> client->driver_power_control
> is set to true.

I would have guessed that runtime pm would then get disabled.

> 
> Speaking of which, the external ports of the MBP are soldered to
> the discrete GPU and can't be switched. Only the panel can be
> switched. So if there are DP or HDMI connectors with status
> connected, we can't suspend. That's one of the MBP's numerous
> peculiarities that I haven't verified yet they're handled properly
> by the code.

I could check that on my MBP if you want.



Best regards,

Pierre


> 
> Best regards,
> 
> Lukas
> 


More information about the dri-devel mailing list