• Lukas Wunner's avatar
    vga_switcheroo: Add helper for deferred probing · b00e5334
    Lukas Wunner authored
    So far we've got one condition when DRM drivers need to defer probing
    on a dual GPU system and it's coded separately into each of the relevant
    drivers. As suggested by Daniel Vetter, deduplicate that code in the
    drivers and move it to a new vga_switcheroo helper. This yields better
    encapsulation of concepts and lets us add further checks in a central
    place. (The existing check pertains to pre-retina MacBook Pros and an
    additional check is expected to be needed for retinas.)
    
    One might be tempted to check deferred probing conditions in
    vga_switcheroo_register_client(), but this is usually called fairly late
    during driver load. The GPU is fully brought up and ready for switching
    at that point. On boot the ->probe hook is potentially called dozens of
    times until it finally succeeds, and each time we'd repeat bringup and
    teardown of the GPU, lengthening boot time considerably and cluttering
    logfiles. A separate helper is therefore needed which can be called
    right at the beginning of the ->probe hook.
    
    Note that amdgpu currently does not call this helper as the AMD GPUs
    built into MacBook Pros are only supported by radeon so far.
    
    v2: This helper could eventually be used by audio clients as well,
        so rephrase kerneldoc to refer to "client" instead of "GPU"
        and move the single existing check in an if block specific
        to PCI_CLASS_DISPLAY_VGA devices. Move documentation on
        that check from kerneldoc to a comment. (Daniel Vetter)
    
    v3: Mandate in kerneldoc that registration of client shall only
        happen after calling this helper. (Daniel Vetter)
    
    v4: Rebase on 412c8f7d ("drm/radeon: Return -EPROBE_DEFER when
        amdkfd not loaded")
    
    v5: Some Optimus GPUs use PCI_CLASS_DISPLAY_3D, make sure those are
        matched as well. (Emil Velikov)
    
    v6: The if-condition referring to PCI_BASE_CLASS_DISPLAY may be
        considered a functional change. Move to a separate commit to
        keep this a pure refactoring change. (Emil Velikov, Jani Nikula)
    
    Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
    Cc: Ben Skeggs <bskeggs@redhat.com>
    Cc: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: default avatarLukas Wunner <lukas@wunner.de>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    Link: http://patchwork.freedesktop.org/patch/msgid/575885fd440c2b13c3f19ddf44360cfbbff35f50.1464685538.git.lukas@wunner.de
    b00e5334
vga_switcheroo.c 34.3 KB