• Matt Roper's avatar
    drm/i915: Don't assume primary & cursor are always on for wm calculation (v4) · c9f038a1
    Matt Roper authored
    Current ILK-style watermark code assumes the primary plane and cursor
    plane are always enabled.  This assumption, along with the combination
    of two independent commits that got merged at the same time, results in
    a NULL dereference.  The offending commits are:
    
            commit fd2d61341bf39d1054256c07d6eddd624ebc4241
            Author: Matt Roper <matthew.d.roper@intel.com>
            Date:   Fri Feb 27 10:12:01 2015 -0800
    
                drm/i915: Use plane->state->fb in watermark code (v2)
    
    and
    
            commit 0fda6568
            Author: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
            Date:   Fri Feb 27 15:12:35 2015 +0000
    
                drm/i915/skl: Update watermarks for Y tiling
    
    The first commit causes us to use the FB from plane->state->fb rather
    than the legacy plane->fb, which is updated a bit later in the process.
    
    The second commit includes a change that now triggers watermark
    reprogramming on primary plane enable/disable where we didn't have one
    before (which wasn't really correct, but we had been getting lucky
    because we always calculated as if the primary plane was on).
    
    Together, these two commits cause the watermark calculation to
    (properly) see plane->state->fb = NULL when we're in the process of
    disabling the primary plane.  However the existing watermark code
    assumes there's always a primary fb and tries to dereference it to find
    out pixel format / bpp information.
    
    The fix is to make ILK-style watermark calculation actually check the
    true status of primary & cursor planes and adjust our watermark logic
    accordingly.
    
    v2: Update unchecked uses of state->fb for other platforms (pnv, skl,
        etc.).  Note that this is just a temporary fix.  Ultimately the
        useful information is going to be computed at check time and stored
        right in the state structures so that we don't have to figure this
        all out while we're supposed to be programming the watermarks.
        (caught by Tvrtko)
    
    v3: Fix a couple copy/paste mistakes in SKL code. (Tvrtko)
    
    v4: Only add FB checks for ILK/SKL codepaths.  Older platforms still use
        intel_crtc_active() and will shortcircuit out of watermark
        calculations before ever trying to dereference the primary plane's
        framebuffer.
    
    Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
    Reported-by: default avatarMichael Leuchtenburg <michael@slashhome.org>
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89388Signed-off-by: default avatarMatt Roper <matthew.d.roper@intel.com>
    Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    c9f038a1
intel_pm.c 189 KB