• Ville Syrjälä's avatar
    drm/i915/fbc: Fix fence_y_offset handling · 5331889b
    Ville Syrjälä authored
    The current fence_y_offset calculation is broken. I think it more or
    less used to do the right thing, but then I changed the plane code
    to put the final x/y source offsets back into the src rectangle so
    now it's just subtraacting the same value from itself. The code would
    never have worked if we allowed the framebuffer to have a non-zero
    offset.
    
    Let's do this in a better way by just calculating the fence_y_offset
    from the final plane surface offset. Note that we don't align the
    plane surface address to fence rows so with horizontal panning there's
    often a horizontal offset from the fence start to the surface address
    as well. We have no way to tell the hardware about that so we just
    ignore it. Based on some quick tests the invlidation still happens
    correctly. I presume due to the invalidation nuking at least the full
    line (or a segment of multiple lines).
    
    Fixes: 54d4d719 ("drm/i915: Overcome display engine stride limits via GTT remapping")
    Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20200429101034.8208-4-ville.syrjala@linux.intel.comReviewed-by: default avatarMatt Roper <matthew.d.roper@intel.com>
    5331889b
i915_drv.h 56.6 KB