diff options
Diffstat (limited to 'meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0847-drm-amd-dal-Fix-bug-for-DP-MST-audio.patch')
-rw-r--r-- | meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0847-drm-amd-dal-Fix-bug-for-DP-MST-audio.patch | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0847-drm-amd-dal-Fix-bug-for-DP-MST-audio.patch b/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0847-drm-amd-dal-Fix-bug-for-DP-MST-audio.patch new file mode 100644 index 00000000..b405a6af --- /dev/null +++ b/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0847-drm-amd-dal-Fix-bug-for-DP-MST-audio.patch @@ -0,0 +1,121 @@ +From ef46a3d5b530f9c108cd79688e10b3c0fb14a547 Mon Sep 17 00:00:00 2001 +From: Hersen Wu <hersenxs.wu@amd.com> +Date: Mon, 30 Nov 2015 16:31:55 -0500 +Subject: [PATCH 0847/1050] drm/amd/dal: Fix bug for DP MST audio + +Change-Id: I9841a13e015e1f52f91baffc8977ec4c0b07c1bb +Signed-off-by: Hersen Wu <hersenxs.wu@amd.com> +Signed-off-by: Harry Wentland <harry.wentland@amd.com> +Acked-by: Harry Wentland <harry.wentland@amd.com> +--- + .../gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c | 13 +++++++++---- + drivers/gpu/drm/amd/dal/dc/core/dc_link.c | 18 +++++------------- + drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c | 4 ++-- + 3 files changed, 16 insertions(+), 19 deletions(-) + +diff --git a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c +index 8b5bdf9..0ca1800 100644 +--- a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c ++++ b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c +@@ -24,14 +24,11 @@ + */ + + #include "dal_services.h" +- + #include "amdgpu.h" +- + #include "amdgpu_dm_types.h" +- + #include "amdgpu_dm_mst_types.h" +- + #include "dc.h" ++#include "dc_helpers.h" + + static ssize_t dm_dp_aux_transfer(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg) + { +@@ -111,6 +108,7 @@ static const struct dc_sink *dm_dp_mst_add_mst_sink( + struct sink_init_data init_params = { + .link = dc_link, + .sink_signal = SIGNAL_TYPE_DISPLAY_PORT_MST}; ++ enum dc_edid_status edid_status; + + if (len > MAX_EDID_BUFFER_SIZE) { + DRM_ERROR("Max EDID buffer size breached!\n"); +@@ -135,6 +133,13 @@ static const struct dc_sink *dm_dp_mst_add_mst_sink( + dc_sink)) + goto fail; + ++ edid_status = dc_helpers_parse_edid_caps( ++ NULL, ++ &dc_sink->dc_edid, ++ &dc_sink->edid_caps); ++ if (edid_status != EDID_OK) ++ goto fail; ++ + /* dc_sink_retain(&core_sink->public); */ + + return dc_sink; +diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc_link.c b/drivers/gpu/drm/amd/dal/dc/core/dc_link.c +index 647d141..2ae41c7 100644 +--- a/drivers/gpu/drm/amd/dal/dc/core/dc_link.c ++++ b/drivers/gpu/drm/amd/dal/dc/core/dc_link.c +@@ -367,20 +367,12 @@ static void link_unplug(struct core_link *link) + link->dpcd_sink_count = 0; + } + +-static enum dc_edid_status read_edid(struct core_link *link) ++static enum dc_edid_status read_edid( ++ struct core_link *link, ++ struct core_sink *sink) + { + uint32_t edid_retry = 3; + enum dc_edid_status edid_status; +- const struct dc_sink *dc_sink = link->public.sink[0]; +- struct core_sink *sink = DC_SINK_TO_CORE(dc_sink); +- +- if (link->public.sink[0]->sink_signal == SIGNAL_TYPE_DISPLAY_PORT_MST) { +- dal_logger_write(link->ctx->logger, +- LOG_MAJOR_WARNING, +- LOG_MINOR_DETECTION_EDID_PARSER, +- "MST EDID read is not done here!\n"); +- return EDID_BAD_INPUT; +- } + + /* some dongles read edid incorrectly the first time, + * do check sum and retry to make sure read correct edid. +@@ -395,7 +387,7 @@ static enum dc_edid_status read_edid(struct core_link *link) + dal_ddc_service_get_edid_buf(link->ddc, + sink->public.dc_edid.raw_edid); + edid_status = dc_helpers_parse_edid_caps( +- link->ctx, ++ NULL, + &sink->public.dc_edid, + &sink->public.edid_caps); + --edid_retry; +@@ -580,7 +572,7 @@ void dc_link_detect(const struct dc_link *dc_link) + if (!dc_link_add_sink(&link->public, &sink->public)) + BREAK_TO_DEBUGGER(); + +- edid_status = read_edid(link); ++ edid_status = read_edid(link, sink); + + switch (edid_status) { + case EDID_BAD_CHECKSUM: +diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c +index de71d39..37ffc0e 100644 +--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c ++++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c +@@ -1044,8 +1044,8 @@ static void build_audio_output( + audio_output->crtc_info.calculated_pixel_clock = + stream->pix_clk_params.requested_pix_clk; + +- /* TODO: This is needed for DP */ +- if (stream->signal == SIGNAL_TYPE_DISPLAY_PORT) { ++ if (stream->signal == SIGNAL_TYPE_DISPLAY_PORT || ++ stream->signal == SIGNAL_TYPE_DISPLAY_PORT_MST) { + audio_output->pll_info.dp_dto_source_clock_in_khz = + dal_display_clock_get_dp_ref_clk_frequency( + stream->dis_clk); +-- +1.9.1 + |