Commit 933430f1 authored by Neil Armstrong's avatar Neil Armstrong Committed by Dmitry Baryshkov
Browse files

drm/msm/dpu: fix UV scanlines calculation for YUV UBWC formats



The UV scanlines is calculated with (height + 1) / 2 unlike
the Y scanlines, add back the correct scanlines calculation
for UBWC YUV formats.

Fixes: 2f3ff6ab ("drm/msm/dpu: use standard functions in _dpu_format_populate_plane_sizes_ubwc()")
Fixes: ada4a19e ("drm/msm/dpu: rewrite _dpu_format_populate_plane_sizes_ubwc()")
Signed-off-by: default avatarNeil Armstrong <neil.armstrong@linaro.org>
Reviewed-by: default avatarDmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Patchwork: https://patchwork.freedesktop.org/patch/718309/
Link: https://lore.kernel.org/r/20260414-topic-sm8x50-msm-dpu1-formats-qc10c-v1-1-0b62325b9030@linaro.org


Signed-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
parent 795b19cb
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -61,7 +61,7 @@ static int _dpu_format_populate_plane_sizes_ubwc(
	bool meta = MSM_FORMAT_IS_UBWC(fmt);

	if (MSM_FORMAT_IS_YUV(fmt)) {
		unsigned int stride, sclines;
		unsigned int stride, y_sclines, uv_sclines;
		unsigned int y_tile_width, y_tile_height;
		unsigned int y_meta_stride, y_meta_scanlines;
		unsigned int uv_meta_stride, uv_meta_scanlines;
@@ -77,23 +77,25 @@ static int _dpu_format_populate_plane_sizes_ubwc(
				y_tile_width = 32;
			}

			sclines = round_up(fb->height, 16);
			y_sclines = round_up(fb->height, 16);
			uv_sclines = round_up((fb->height+1)>>1, 16);
			y_tile_height = 4;
		} else {
			stride = round_up(fb->width, 128);
			y_tile_width = 32;

			sclines = round_up(fb->height, 32);
			y_sclines = round_up(fb->height, 32);
			uv_sclines = round_up((fb->height+1)>>1, 32);
			y_tile_height = 8;
		}

		layout->plane_pitch[0] = stride;
		layout->plane_size[0] = round_up(layout->plane_pitch[0] *
			sclines, DPU_UBWC_PLANE_SIZE_ALIGNMENT);
			y_sclines, DPU_UBWC_PLANE_SIZE_ALIGNMENT);

		layout->plane_pitch[1] = stride;
		layout->plane_size[1] = round_up(layout->plane_pitch[1] *
			sclines, DPU_UBWC_PLANE_SIZE_ALIGNMENT);
			uv_sclines, DPU_UBWC_PLANE_SIZE_ALIGNMENT);

		if (!meta)
			return 0;