aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0961-drm-amd-display-fix-YCbCr420-blank-color.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0961-drm-amd-display-fix-YCbCr420-blank-color.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0961-drm-amd-display-fix-YCbCr420-blank-color.patch75
1 files changed, 75 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0961-drm-amd-display-fix-YCbCr420-blank-color.patch b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0961-drm-amd-display-fix-YCbCr420-blank-color.patch
new file mode 100644
index 00000000..a1dae293
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0961-drm-amd-display-fix-YCbCr420-blank-color.patch
@@ -0,0 +1,75 @@
+From 48a2ce5114a0bae4492b44d5ec54d33a9d7a848a Mon Sep 17 00:00:00 2001
+From: Eric Yang <Eric.Yang2@amd.com>
+Date: Thu, 22 Nov 2018 02:07:06 -0500
+Subject: [PATCH 0961/2940] drm/amd/display: fix YCbCr420 blank color
+
+[Why]
+YCbCr420 packing format uses two chanels for luma, and 1
+channel for both chroma component. Our previous implementation
+did not account for this and results in every other pixel having
+very high luma value, showing greyish color instead of black.
+
+YCbCr444 = <Y1, Cb1, Cr1>; <Y2, Cb2, Cr2> .....
+YCbCr420 = <Y1, Y2, Cb1>; <Y3, Y4, Cr1> .....
+
+[How]
+Program the second channel with the black color value for luma
+as well.
+
+Signed-off-by: Eric Yang <Eric.Yang2@amd.com>
+Reviewed-by: Hugo Hu <Hugo.Hu@amd.com>
+Acked-by: Leo Li <sunpeng.li@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ .../drm/amd/display/dc/dce110/dce110_hw_sequencer.c | 11 ++++++++++-
+ .../gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c | 9 +++++++++
+ 2 files changed, 19 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
+index 82bdc9ecfc98..0247b5be3b93 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
++++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
+@@ -1267,10 +1267,19 @@ static void program_scaler(const struct dc *dc,
+ pipe_ctx->plane_res.scl_data.lb_params.depth,
+ &pipe_ctx->stream->bit_depth_params);
+
+- if (pipe_ctx->stream_res.tg->funcs->set_overscan_blank_color)
++ if (pipe_ctx->stream_res.tg->funcs->set_overscan_blank_color) {
++ /*
++ * The way 420 is packed, 2 channels carry Y component, 1 channel
++ * alternate between Cb and Cr, so both channels need the pixel
++ * value for Y
++ */
++ if (pipe_ctx->stream->timing.pixel_encoding == PIXEL_ENCODING_YCBCR420)
++ color.color_r_cr = color.color_g_y;
++
+ pipe_ctx->stream_res.tg->funcs->set_overscan_blank_color(
+ pipe_ctx->stream_res.tg,
+ &color);
++ }
+
+ pipe_ctx->plane_res.xfm->funcs->transform_set_scaler(pipe_ctx->plane_res.xfm,
+ &pipe_ctx->plane_res.scl_data);
+diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
+index f507c7835847..5c2a17dcd08b 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
+@@ -2158,6 +2158,15 @@ static void dcn10_blank_pixel_data(
+ color_space = stream->output_color_space;
+ color_space_to_black_color(dc, color_space, &black_color);
+
++ /*
++ * The way 420 is packed, 2 channels carry Y component, 1 channel
++ * alternate between Cb and Cr, so both channels need the pixel
++ * value for Y
++ */
++ if (stream->timing.pixel_encoding == PIXEL_ENCODING_YCBCR420)
++ black_color.color_r_cr = black_color.color_g_y;
++
++
+ if (stream_res->tg->funcs->set_blank_color)
+ stream_res->tg->funcs->set_blank_color(
+ stream_res->tg,
+--
+2.17.1
+