In _dpu_plane_setup_pixel_ext function instead of dividing just chroma
source resolution once (component 1 and 2), second component is divided
once more because src_w and src_h variable is reused between iterations.
Third component receives wrong source resolution too (from component 2).
To fix this introduce temporary variables for each iteration.

Fixes: dabfdd89eaa9 ("drm/msm/disp/dpu1: add inline rotation support for 
sc7280")
Signed-off-by: Vladimir Lypak <[email protected]>
---
 drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c 
b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
index 
6effe0fa4837284a1f038e4907c4c91d239aeb8b..905524ceeb1f192c093f1be7f571b29eb4b53379
 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
@@ -500,13 +500,15 @@ static void _dpu_plane_setup_pixel_ext(struct 
dpu_hw_scaler3_cfg *scale_cfg,
        int i;
 
        for (i = 0; i < DPU_MAX_PLANES; i++) {
+               uint32_t w = src_w, h = src_h;
+
                if (i == DPU_SSPP_COMP_1_2 || i == DPU_SSPP_COMP_2) {
-                       src_w /= chroma_subsmpl_h;
-                       src_h /= chroma_subsmpl_v;
+                       w /= chroma_subsmpl_h;
+                       h /= chroma_subsmpl_v;
                }
 
-               pixel_ext->num_ext_pxls_top[i] = src_h;
-               pixel_ext->num_ext_pxls_left[i] = src_w;
+               pixel_ext->num_ext_pxls_top[i] = h;
+               pixel_ext->num_ext_pxls_left[i] = w;
        }
 }
 

-- 
2.51.0

Reply via email to