drm/amd/display: Fix VBA chroma calculation for pipe splitting
authorNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Fri, 22 May 2020 17:24:06 +0000 (13:24 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 1 Jul 2020 05:59:20 +0000 (01:59 -0400)
[Why]
DML failures occur for 420 modes with dynamic pipe
splitting enabled because the ChromaViewport exceeds
the ChromaSurfaceWidth.

This is caused by adding the viewport_width instead
of the viewport_width_c.

This similarly occurs for rotated modes due to the
use of viewport_height instead of viewport_height_c.

[How]
Correct the calculations.

Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Reviewed-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
Acked-by: Qingqing Zhuo <qingqing.zhuo@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dml/display_mode_vba.c

index 5a1ca8a..7916a7e 100644 (file)
@@ -623,14 +623,14 @@ static void fetch_pipe_params(struct display_mode_lib *mode_lib)
                                                mode_lib->vba.ViewportWidth[mode_lib->vba.NumberOfActivePlanes] +=
                                                                src_k->viewport_width;
                                                mode_lib->vba.ViewportWidthChroma[mode_lib->vba.NumberOfActivePlanes] +=
-                                                               src_k->viewport_width;
+                                                               src_k->viewport_width_c;
                                                mode_lib->vba.ScalerRecoutWidth[mode_lib->vba.NumberOfActivePlanes] +=
                                                                dst_k->recout_width;
                                        } else {
                                                mode_lib->vba.ViewportHeight[mode_lib->vba.NumberOfActivePlanes] +=
                                                                src_k->viewport_height;
                                                mode_lib->vba.ViewportHeightChroma[mode_lib->vba.NumberOfActivePlanes] +=
-                                                               src_k->viewport_height;
+                                                               src_k->viewport_height_c;
                                        }
                                        mode_lib->vba.NumberOfDSCSlices[mode_lib->vba.NumberOfActivePlanes] +=
                                                        dout_k->dsc_slices;