drm/amd/display: HDMI deep color mode audio issue
authorCharlene Liu <charlene.liu@amd.com>
Wed, 22 Feb 2017 18:46:29 +0000 (13:46 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 26 Sep 2017 21:15:54 +0000 (17:15 -0400)
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
drivers/gpu/drm/amd/display/dc/core/dc_stream.c
drivers/gpu/drm/amd/display/dc/dce/dce_audio.c
drivers/gpu/drm/amd/display/dc/dce/dce_clock_source.c
drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c
drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c

index 4d556b379524c5b9980307768116ec07ddcef275..407ce60f253e76ad917061fe57a713bd98db498a 100644 (file)
@@ -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 =
index e1f579bcd789e6a3a6da5628d4e35bce145cf8f7..4e1a933be02133d8698af768844dfbc4cd0badaf 100644 (file)
@@ -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",
index 596e039ee315248f2d0d05bc9a06dad8d20aaf89..7f52e39ec92a6944cf3a39845089b8034ccfc05c 100644 (file)
@@ -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
index 26742e038274c32573994765af7148002804abdb..a2a2ecf8d077d1bd57eb9b832acd56456bb5217c 100644 (file)
@@ -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;
                        }
                }
index e4092fd458a14c640f4bd0e409ec91e32279e2f2..d6662fa2f4e1e37f6cd0f8f29f7b5375ec535a22 100644 (file)
@@ -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);
index 6915cc46754b4818b3ba3c9ff2d1e056d2cd72ea..2f68bf20dfe25224998f32c6c003199f0eabb922 100644 (file)
@@ -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;
-                       }
                }
        }