[PATCH v5 00/12] Enable GPU switching on pre-retina MacBook Pro

Pierre Moreau pierre.morrow at free.fr
Tue Feb 2 07:33:46 CET 2016


Hello all,

> On 01 Feb 2016, at 23:49, Lukas Wunner <lukas at wunner.de> wrote:
> 
> Hi,
> 
>> On Mon, Jan 11, 2016 at 08:09:20PM +0100, Lukas Wunner wrote:
>> Enable GPU switching on the pre-retina MacBook Pro (2008 - 2013), v5.
> 
> This series hasn't seen any reviews or acks unfortunately.
> Any takers?
> 
> Merging this would allow fdo #61115 to be closed
> (currently assigned to intel-gfx).
> 
> FWIW this series has in the meantime been tested by more folks:
> 
> Tested-by: Pierre Moreau <pierre.morrow at free.fr>
>    [MBP  5,3 2009  nvidia MCP79 + G96        pre-retina  15"]
> Tested-by: Paul Hordiienko <pvt.gord at gmail.com>
>    [MBP  6,2 2010  intel ILK + nvidia GT216  pre-retina  15"]
> Tested-by: William Brown <william at blackhats.net.au>
>    [MBP  8,2 2011  intel SNB + amd turks     pre-retina  15"]
> Tested-by: Lukas Wunner <lukas at wunner.de>
>    [MBP  9,1 2012  intel IVB + nvidia GK107  pre-retina  15"]
> 
> On the latter three models it worked fine. On Pierre Moreau's machine
> the discrete nvidia G96 locks up when woken. This happened in the past
> as well but not on the first wake but only on the 10th or so. Since it
> works fine on the GT216 and GK107, I'm guessing we've got a regression
> in the wakeup code for the G96 which is somehow triggered by this patch
> set (more specifically: triggered by being able to retrieve the proper
> panel resolution and configure a crtc). It needs to be fixed but isn't
> a showstopper for this series IMHO. (Arguably being able to retrieve
> EDID but then locking up on switching isn't really worse than not being
> able to retrieve EDID in the first place.)

I would say it is slightly worse, since the only "downside" of not retrieving the EDID means  TTY is set to a default resolution rather than the screen resolution, but this is fixed when starting X.
On the other hand, since DRI_PRIME works fine on the laptop, there isn't much reason to switch between cards. 

I'll have a look at the resume this week, now that FOSDEM is off my todo list. 

Regards,
Pierre


> 
> Thanks,
> 
> Lukas
> 
>> 
>> The main obstacle on these machines is that the panel mode in VBIOS
>> is bogus. Fortunately gmux can switch DDC independently from the
>> display, thereby allowing the inactive GPU to probe the panel's EDID.
>> 
>> In short, vga_switcheroo and apple-gmux are amended with hooks to
>> switch DDC, DRM core is amended with a drm_get_edid_switcheroo() helper,
>> and relevant drivers are amended to call that for LVDS outputs.
>> 
>> The retina MacBook Pro (2012 - present) uses eDP and cannot switch
>> AUX independently from the main link. The main obstacle there is link
>> training, I'm currently working on this, it will be addressed in a
>> future patch set.
>> 
>> This series is also reviewable on GitHub:
>> https://github.com/l1k/linux/commits/mbp_switcheroo_v5
>> 
>> Changes:
>> 
>> * New patch [01/12]: vga_switcheroo handler flags
>>  Alex Deucher asked if this series might regress on non-Apple laptops.
>>  To address this concern, I let handlers declare their capabilities in
>>  a bitmask. DRM drivers call drm_get_edid_switcheroo() only if the
>>  handler has set the VGA_SWITCHEROO_CAN_SWITCH_DDC flag.
>>  Currently just one other flag is defined which is used on retinas.
>> 
>> * Changed patch [02/12]: vga_switcheroo DDC locking
>>  Rename ddc_lock to mux_hw_lock, suggested by Daniel Vetter.
>> 
>> * New patch [03/12]: track switch state of apple-gmux
>>  Fixes a bug in previous versions of this series which occurred if
>>  the system was suspended while DDC was temporarily switched:
>>  On resume DDC was switched to the wrong GPU.
>> 
>> * New patches [09/12 - 12/12]: deferred probing
>>  Previously I used connector reprobing if the inactive GPU's driver
>>  loaded before gmux. I've ditched that in favor of deferred driver
>>  probing, which is much simpler. Thanks to Daniel Vetter for the
>>  suggestion.
>> 
>> Caution: Patch [09/12] depends on a new acpi_dev_present() API which
>> will land in 4.5 via Rafael J. Wysocki's tree.
>> 
>> I would particularly be interested in feedback on the handler flags
>> patch [01/12]. I'm not 100% happy with the number of characters
>> required to query the flags (e.g.: if (vga_switcheroo_handler_flags() &
>> VGA_SWITCHEROO_CAN_SWITCH_DDC)), but failed to come up with something
>> shorter. Thierry Reding used a struct of bools instead of a bitmask
>> for his recent drm_dp_link_caps patches. Maybe use that instead?
>> http://lists.freedesktop.org/archives/dri-devel/2015-December/097025.html
>> 
>> Thanks,
>> 
>> Lukas
>> 
>> 
>> Lukas Wunner (12):
>>  vga_switcheroo: Add handler flags infrastructure
>>  vga_switcheroo: Add support for switching only the DDC
>>  apple-gmux: Track switch state
>>  apple-gmux: Add switch_ddc support
>>  drm/edid: Switch DDC when reading the EDID
>>  drm/i915: Switch DDC when reading the EDID
>>  drm/nouveau: Switch DDC when reading the EDID
>>  drm/radeon: Switch DDC when reading the EDID
>>  apple-gmux: Add helper for presence detect
>>  drm/i915: Defer probe if gmux is present but its driver isn't
>>  drm/nouveau: Defer probe if gmux is present but its driver isn't
>>  drm/radeon: Defer probe if gmux is present but its driver isn't
>> 
>> Documentation/DocBook/gpu.tmpl                   |   5 +
>> drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c |   3 +-
>> drivers/gpu/drm/drm_edid.c                       |  26 +++++
>> drivers/gpu/drm/i915/i915_drv.c                  |  12 +++
>> drivers/gpu/drm/i915/intel_lvds.c                |   8 +-
>> drivers/gpu/drm/nouveau/nouveau_acpi.c           |   2 +-
>> drivers/gpu/drm/nouveau/nouveau_connector.c      |  21 +++-
>> drivers/gpu/drm/nouveau/nouveau_drm.c            |  11 +++
>> drivers/gpu/drm/radeon/radeon_atpx_handler.c     |   3 +-
>> drivers/gpu/drm/radeon/radeon_connectors.c       |   6 ++
>> drivers/gpu/drm/radeon/radeon_drv.c              |  11 +++
>> drivers/gpu/vga/vga_switcheroo.c                 | 119 ++++++++++++++++++++++-
>> drivers/platform/x86/apple-gmux.c                | 111 ++++++++++++++++-----
>> include/drm/drm_crtc.h                           |   2 +
>> include/linux/apple-gmux.h                       |  39 ++++++++
>> include/linux/vga_switcheroo.h                   |  36 ++++++-
>> 16 files changed, 382 insertions(+), 33 deletions(-)
>> create mode 100644 include/linux/apple-gmux.h
>> 
>> -- 
>> 1.8.5.2 (Apple Git-48)
>> 


More information about the dri-devel mailing list