From: Dhinakaran Pandiyan <[email protected]>

During framebuffer creation, we pre-compute offsets for 90/270 plane
rotation. However, only Y and Yf modifiers support 90/270 rotation. So,
skip the calculations for other modifiers.

v2: Add a bounds check WARN for the rotation info array.

Cc: Matt Roper <[email protected]>
Cc: Ville Syrjälä <[email protected]>
Signed-off-by: Dhinakaran Pandiyan <[email protected]>
Signed-off-by: Imre Deak <[email protected]>
---
 drivers/gpu/drm/i915/display/intel_display.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display.c 
b/drivers/gpu/drm/i915/display/intel_display.c
index 7c52591172e1..b4eb0d2147f5 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -2926,13 +2926,16 @@ intel_fill_fb_info(struct drm_i915_private *dev_priv,
                                                      tile_size);
                offset /= tile_size;
 
-               if (!is_surface_linear(fb, i)) {
+               /* Y or Yf modifiers required for 90/270 rotation */
+               if (fb->modifier == I915_FORMAT_MOD_Y_TILED ||
+                   fb->modifier == I915_FORMAT_MOD_Yf_TILED) {
                        unsigned int tile_width, tile_height;
                        unsigned int pitch_tiles;
                        struct drm_rect r;
 
                        intel_tile_dims(fb, i, &tile_width, &tile_height);
 
+                       WARN_ON(i >= ARRAY_SIZE(rot_info->plane));
                        rot_info->plane[i].offset = offset;
                        rot_info->plane[i].stride = 
DIV_ROUND_UP(fb->pitches[i], tile_width * cpp);
                        rot_info->plane[i].width = DIV_ROUND_UP(x + width, 
tile_width);
@@ -3063,6 +3066,7 @@ intel_plane_remap_gtt(struct intel_plane_state 
*plane_state)
                                                      DRM_MODE_ROTATE_0, 
tile_size);
                offset /= tile_size;
 
+               WARN_ON(i >= ARRAY_SIZE(info->plane));
                info->plane[i].offset = offset;
                info->plane[i].stride = DIV_ROUND_UP(fb->pitches[i],
                                                     tile_width * cpp);
-- 
2.22.0

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to