aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0227-drm-amd-display-fix-incorrect-programming-for-YCbCr4.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0227-drm-amd-display-fix-incorrect-programming-for-YCbCr4.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0227-drm-amd-display-fix-incorrect-programming-for-YCbCr4.patch103
1 files changed, 103 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0227-drm-amd-display-fix-incorrect-programming-for-YCbCr4.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0227-drm-amd-display-fix-incorrect-programming-for-YCbCr4.patch
new file mode 100644
index 00000000..e30eb311
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0227-drm-amd-display-fix-incorrect-programming-for-YCbCr4.patch
@@ -0,0 +1,103 @@
+From ec18d635c84bf26016b3edddc64cd13dc72b623b Mon Sep 17 00:00:00 2001
+From: Charlene Liu <charlene.liu@amd.com>
+Date: Fri, 17 Feb 2017 13:59:11 -0500
+Subject: [PATCH 0227/4131] drm/amd/display: fix incorrect programming for
+ YCbCr422 and YCbCr420
+
+Signed-off-by: Charlene Liu <charlene.liu@amd.com>
+Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
+Acked-by: Harry Wentland <Harry.Wentland@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c | 12 +++++++++---
+ .../gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c | 17 +++++++++--------
+ drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c | 3 +++
+ 3 files changed, 21 insertions(+), 11 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c b/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c
+index aba392f..e4092fd 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c
++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c
+@@ -362,9 +362,15 @@ static void dce110_stream_encoder_hdmi_set_stream_attribute(
+ REG_UPDATE(HDMI_CONTROL, HDMI_DEEP_COLOR_DEPTH, 0);
+ break;
+ case COLOR_DEPTH_101010:
+- REG_UPDATE_2(HDMI_CONTROL,
+- HDMI_DEEP_COLOR_DEPTH, 1,
+- HDMI_DEEP_COLOR_ENABLE, 1);
++ if (crtc_timing->pixel_encoding == PIXEL_ENCODING_YCBCR422) {
++ REG_UPDATE_2(HDMI_CONTROL,
++ HDMI_DEEP_COLOR_DEPTH, 1,
++ HDMI_DEEP_COLOR_ENABLE, 0);
++ } else {
++ REG_UPDATE_2(HDMI_CONTROL,
++ HDMI_DEEP_COLOR_DEPTH, 1,
++ HDMI_DEEP_COLOR_ENABLE, 1);
++ }
+ break;
+ case COLOR_DEPTH_121212:
+ if (crtc_timing->pixel_encoding == PIXEL_ENCODING_YCBCR422) {
+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 76a397d..6915cc4 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
+@@ -861,10 +861,6 @@ static void build_audio_output(
+ audio_output->crtc_info.requested_pixel_clock =
+ pipe_ctx->pix_clk_params.requested_pix_clk;
+
+- /*
+- * TODO - Investigate why calculated pixel clk has to be
+- * requested pixel clk
+- */
+ audio_output->crtc_info.calculated_pixel_clock =
+ pipe_ctx->pix_clk_params.requested_pix_clk;
+
+@@ -1044,15 +1040,14 @@ static enum dc_status apply_single_controller_ctx_to_hw(
+ stream->public.timing.display_color_depth,
+ pipe_ctx->stream->signal);
+
++ /* FPGA does not program backend */
++ if (IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) {
+ pipe_ctx->opp->funcs->opp_program_fmt(
+ pipe_ctx->opp,
+ &stream->bit_depth_params,
+ &stream->clamping);
+-
+- /* FPGA does not program backend */
+- if (IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment))
+ return DC_OK;
+-
++ }
+ /* TODO: move to stream encoder */
+ if (pipe_ctx->stream->signal != SIGNAL_TYPE_VIRTUAL)
+ if (DC_OK != bios_parser_crtc_source_select(pipe_ctx)) {
+@@ -1065,6 +1060,12 @@ static enum dc_status apply_single_controller_ctx_to_hw(
+ stream->sink->link->link_enc,
+ pipe_ctx->stream->signal);
+
++/*vbios crtc_source_selection and encoder_setup will override fmt_C*/
++ pipe_ctx->opp->funcs->opp_program_fmt(
++ pipe_ctx->opp,
++ &stream->bit_depth_params,
++ &stream->clamping);
++
+ if (dc_is_dp_signal(pipe_ctx->stream->signal))
+ pipe_ctx->stream_enc->funcs->dp_set_stream_attribute(
+ pipe_ctx->stream_enc,
+diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c
+index 074fb97..478c8d2 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c
++++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c
+@@ -777,6 +777,9 @@ static void get_pixel_clock_parameters(
+ pixel_clk_params->flags.SUPPORT_YCBCR420 = (stream->public.timing.pixel_encoding ==
+ PIXEL_ENCODING_YCBCR420);
+ pixel_clk_params->pixel_encoding = stream->public.timing.pixel_encoding;
++ if (stream->public.timing.pixel_encoding == PIXEL_ENCODING_YCBCR422) {
++ pixel_clk_params->color_depth = COLOR_DEPTH_888;
++ }
+ }
+
+ void dce110_resource_build_bit_depth_reduction_params(
+--
+2.7.4
+