• Ville Syrjälä's avatar
    drm/i915: Fix dbuf slice mask when turning off all the pipes · b6a13a38
    Ville Syrjälä authored
    The current dbuf slice computation only happens when there are
    active pipes. If we are turning off all the pipes we just leave
    the dbuf slice mask at it's previous value, which may be something
    other that BIT(S1). If runtime PM will kick in it will however
    turn off everything but S1. Then on the next atomic commit (if
    the new dbuf slice mask matches the stale value we left behind)
    the code will not turn on the other slices we now need. This will
    lead to underruns as the planes are trying to use a dbuf slice
    that's not powered up.
    
    To work around let's just just explicitly set the dbuf slice mask
    to BIT(S1) when we are turning off all the pipes. Really the code
    should just calculate this stuff the same way regardless whether
    the pipes are on or off, but we're not quite there yet (need a
    bit more work on the dbuf state for that).
    
    v2: Let's not put the fix into dead code
    
    Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
    Acked-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Fixes: 3cf43cdc ("drm/i915: Introduce proper dbuf state")
    Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20200518121354.20401-1-ville.syrjala@linux.intel.com
    b6a13a38
intel_pm.c 229 KB