[PATCH v5 00/12] Enable GPU switching on pre-retina MacBook Pro
pierre.morrow at free.fr
Tue Feb 2 07:33:46 CET 2016
> On 01 Feb 2016, at 23:49, Lukas Wunner <lukas at wunner.de> wrote:
>> 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.
>> 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:
>> * 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
>> 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?
>> 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
>> 220.127.116.11 (Apple Git-48)
More information about the dri-devel