aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0231-drm-amd-display-HDMI-deep-color-mode-audio-issue.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0231-drm-amd-display-HDMI-deep-color-mode-audio-issue.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0231-drm-amd-display-HDMI-deep-color-mode-audio-issue.patch188
1 files changed, 188 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0231-drm-amd-display-HDMI-deep-color-mode-audio-issue.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0231-drm-amd-display-HDMI-deep-color-mode-audio-issue.patch
new file mode 100644
index 00000000..cc41e7c6
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0231-drm-amd-display-HDMI-deep-color-mode-audio-issue.patch
@@ -0,0 +1,188 @@
+From 258ff5d9dd59ecb12371eea6f4028b6b328b8b2c Mon Sep 17 00:00:00 2001
+From: Charlene Liu <charlene.liu@amd.com>
+Date: Wed, 22 Feb 2017 13:46:29 -0500
+Subject: [PATCH 0231/4131] drm/amd/display: HDMI deep color mode audio issue
+
+Signed-off-by: Charlene Liu <charlene.liu@amd.com>
+Acked-by: Harry Wentland <Harry.Wentland@amd.com>
+Reviewed-by: Charlene Liu <Charlene.Liu@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 9 ++++++--
+ drivers/gpu/drm/amd/display/dc/core/dc_stream.c | 11 +++++----
+ drivers/gpu/drm/amd/display/dc/dce/dce_audio.c | 9 ++++++++
+ .../gpu/drm/amd/display/dc/dce/dce_clock_source.c | 1 -
+ .../drm/amd/display/dc/dce/dce_stream_encoder.c | 26 +++++-----------------
+ .../amd/display/dc/dce110/dce110_hw_sequencer.c | 18 ---------------
+ 6 files changed, 28 insertions(+), 46 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
+index 4d556b3..407ce60 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
+@@ -1101,9 +1101,14 @@ enum dc_status resource_map_pool_resources(
+ for (i = 0; i < context->stream_count; i++) {
+ struct core_stream *stream = context->streams[i];
+
+- if (!resource_is_stream_unchanged(dc->current_context, stream))
++ if (!resource_is_stream_unchanged(dc->current_context, stream)) {
++ if (stream != NULL && dc->current_context->streams[i] != NULL) {
++ stream->bit_depth_params =
++ dc->current_context->streams[i]->bit_depth_params;
++ stream->clamping = dc->current_context->streams[i]->clamping;
+ continue;
+-
++ }
++ }
+ /* mark resources used for stream that is already active */
+ for (j = 0; j < MAX_PIPES; j++) {
+ struct pipe_ctx *pipe_ctx =
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c
+index e1f579b..4e1a933 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c
+@@ -305,7 +305,7 @@ void dc_stream_log(
+
+ dm_logger_write(dm_logger,
+ log_type,
+- "core_stream 0x%x: src: %d, %d, %d, %d; dst: %d, %d, %d, %d;\n",
++ "core_stream 0x%x: src: %d, %d, %d, %d; dst: %d, %d, %d, %d, colorSpace:%d\n",
+ core_stream,
+ core_stream->public.src.x,
+ core_stream->public.src.y,
+@@ -314,13 +314,16 @@ void dc_stream_log(
+ core_stream->public.dst.x,
+ core_stream->public.dst.y,
+ core_stream->public.dst.width,
+- core_stream->public.dst.height);
++ core_stream->public.dst.height,
++ core_stream->public.output_color_space);
+ dm_logger_write(dm_logger,
+ log_type,
+- "\tpix_clk_khz: %d, h_total: %d, v_total: %d\n",
++ "\tpix_clk_khz: %d, h_total: %d, v_total: %d, pixelencoder:%d, displaycolorDepth:%d\n",
+ core_stream->public.timing.pix_clk_khz,
+ core_stream->public.timing.h_total,
+- core_stream->public.timing.v_total);
++ core_stream->public.timing.v_total,
++ core_stream->public.timing.pixel_encoding,
++ core_stream->public.timing.display_color_depth);
+ dm_logger_write(dm_logger,
+ log_type,
+ "\tsink name: %s, serial: %d\n",
+diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_audio.c b/drivers/gpu/drm/amd/display/dc/dce/dce_audio.c
+index 596e039..7f52e39 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce/dce_audio.c
++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_audio.c
+@@ -773,6 +773,15 @@ void dce_aud_wall_dto_setup(
+ crtc_info->calculated_pixel_clock,
+ &clock_info);
+
++ dm_logger_write(audio->ctx->logger, LOG_HW_SET_MODE,\
++ "\n************************%s:Input::requested_pixel_clock = %d"\
++ "calculated_pixel_clock =%d\n"\
++ "audio_dto_module = %d audio_dto_phase =%d \n\n", __func__,\
++ crtc_info->requested_pixel_clock,\
++ crtc_info->calculated_pixel_clock,\
++ clock_info.audio_dto_module,\
++ clock_info.audio_dto_phase);
++
+ /* On TN/SI, Program DTO source select and DTO select before
+ programming DTO modulo and DTO phase. These bits must be
+ programmed first, otherwise there will be no HDMI audio at boot
+diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_clock_source.c b/drivers/gpu/drm/amd/display/dc/dce/dce_clock_source.c
+index 26742e0..a2a2ecf 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce/dce_clock_source.c
++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_clock_source.c
+@@ -874,7 +874,6 @@ static bool dce110_program_pix_clk(
+ bp_pc_params.flags.SET_XTALIN_REF_SRC =
+ !pll_settings->use_external_clk;
+ if (pix_clk_params->flags.SUPPORT_YCBCR420) {
+- bp_pc_params.target_pixel_clock = pll_settings->actual_pix_clk / 2;
+ bp_pc_params.flags.SUPPORT_YUV_420 = 1;
+ }
+ }
+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 e4092fd..d6662fa 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
+@@ -873,22 +873,6 @@ static const struct audio_clock_info audio_clock_info_table[16] = {
+ {59400, 3072, 445500, 9408, 990000, 6144, 594000}
+ };
+
+-static const struct audio_clock_info audio_clock_info_table_30bpc[14] = {
+- {2517, 9152, 70312, 14014, 78125, 9152, 46875},
+- {2518, 9152, 70312, 14014, 78125, 9152, 46875},
+- {2520, 4096, 31500, 6272, 35000, 6144, 31500},
+- {2700, 4096, 33750, 6272, 37500, 6144, 33750},
+- {2702, 8192, 67567, 12544, 75075, 8192, 45045},
+- {2703, 8192, 67567, 12544, 75075, 8192, 45045},
+- {5400, 4096, 67500, 6272, 75000, 6144, 67500},
+- {5405, 8192, 135135, 6272, 75075, 8192, 90090},
+- {7417, 11648, 263672, 17836, 292969, 11648, 175181},
+- {7425, 8192, 185625, 6272, 103125, 12288, 185625},
+- {14835, 11648, 527344, 17836, 585938, 11648, 351563},
+- {14850, 4096, 185625, 6272, 206250, 6144, 185625},
+- {29670, 11648, 527344, 17836, 585938, 11648, 703125},
+- {29700, 6144, 556875, 4704, 309375, 5120, 309375}
+-};
+ static const struct audio_clock_info audio_clock_info_table_36bpc[14] = {
+ {2517, 9152, 84375, 7007, 48875, 9152, 56250},
+ {2518, 9152, 84375, 7007, 48875, 9152, 56250},
+@@ -1005,11 +989,6 @@ bool get_audio_clock_info(
+ audio_array_size = ARRAY_SIZE(
+ audio_clock_info_table_36bpc);
+ break;
+- case COLOR_DEPTH_101010:
+- clock_info = audio_clock_info_table_30bpc;
+- audio_array_size = ARRAY_SIZE(
+- audio_clock_info_table_30bpc);
+- break;
+ default:
+ clock_info = audio_clock_info_table;
+ audio_array_size = ARRAY_SIZE(
+@@ -1114,6 +1093,11 @@ static void dce110_se_setup_hdmi_audio(
+ crtc_info->requested_pixel_clock,
+ crtc_info->calculated_pixel_clock,
+ &audio_clock_info)) {
++ dm_logger_write(enc->ctx->logger, LOG_HW_SET_MODE,
++ "\n*********************%s:Input::requested_pixel_clock = %d"\
++ "calculated_pixel_clock = %d \n", __func__,\
++ crtc_info->requested_pixel_clock,\
++ crtc_info->calculated_pixel_clock);
+
+ /* HDMI_ACR_32_0__HDMI_ACR_CTS_32_MASK */
+ REG_UPDATE(HDMI_ACR_32_0, HDMI_ACR_CTS_32, audio_clock_info.cts_32khz);
+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 6915cc4..2f68bf2 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
+@@ -873,25 +873,7 @@ static void build_audio_output(
+ audio_output->crtc_info.requested_pixel_clock/2;
+ audio_output->crtc_info.calculated_pixel_clock =
+ pipe_ctx->pix_clk_params.requested_pix_clk/2;
+- }
+
+- if (pipe_ctx->pix_clk_params.pixel_encoding != PIXEL_ENCODING_YCBCR422) {
+- switch (pipe_ctx->pix_clk_params.color_depth) {
+- case COLOR_DEPTH_888:
+- break;
+- case COLOR_DEPTH_101010:
+- audio_output->crtc_info.calculated_pixel_clock = (audio_output->crtc_info.calculated_pixel_clock * 30) / 24;
+- break;
+- case COLOR_DEPTH_121212:
+- audio_output->crtc_info.calculated_pixel_clock = (audio_output->crtc_info.calculated_pixel_clock * 36) / 24;
+- break;
+- case COLOR_DEPTH_161616:
+- audio_output->crtc_info.calculated_pixel_clock = (audio_output->crtc_info.calculated_pixel_clock * 48) / 24;
+- break;
+- default:
+- ASSERT(0);
+- break;
+- }
+ }
+ }
+
+--
+2.7.4
+