• Lyude Paul's avatar
    drm/amdgpu: Grab/put runtime PM references in atomic_commit_tail() · 97028037
    Lyude Paul authored
    So, unfortunately I recently made the discovery that in the upstream
    kernel, the only reason that amdgpu is not currently suffering from
    issues with runtime PM putting the GPU into suspend while it's driving
    displays is due to the fact that on most prime systems, we have sound
    devices associated with the GPU that hold their own runtime PM ref for
    the GPU.
    
    What this means however, is that in the event that there isn't any kind
    of sound device active (which can easily be reproduced by building a
    kernel with sound drivers disabled), the GPU will fall asleep even when
    there's displays active. This appears to be in part due to the fact that
    amdgpu has not actually ever relied on it's rpm_idle() function to be
    the only thing keeping it running, and normally grabs it's own power
    references whenever there are displays active (as can be seen with the
    original pre-DC codepath in amdgpu_display_crtc_set_config() in
    amdgpu_display.c). This means it's very likely that this bug was
    introduced during the switch over the DC.
    
    So to fix this, we start grabbing runtime PM references every time we
    enable a previously disabled CRTC in atomic_commit_tail(). This appears
    to be the correct solution, as it matches up with what i915 does in
    i915/intel_runtime_pm.c.
    
    The one sideaffect of this is that we ignore the variable that the
    pre-DC code used to use for tracking when it needed runtime PM refs,
    adev->have_disp_power_ref. This is mainly because there's no way for a
    driver to tell whether or not all of it's CRTCs are enabled or disabled
    when we've begun committing an atomic state, as there may be CRTC
    commits happening in parallel that aren't contained within the atomic
    state being committed. So, it's safer to just get/put a reference for
    each CRTC being enabled or disabled in the new atomic state.
    Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
    Acked-by: Christian König <christian.koenig@amd.com>.
    Reviewed-by: default avatarHarry Wentland <harry.wentland@amd.com>
    Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
    Cc: stable@vger.kernel.org
    97028037
amdgpu_dm.c 141 KB