diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1833-drm-amd-display-Refactor-dp-vendor-parsing-logic-to-.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1833-drm-amd-display-Refactor-dp-vendor-parsing-logic-to-.patch | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1833-drm-amd-display-Refactor-dp-vendor-parsing-logic-to-.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1833-drm-amd-display-Refactor-dp-vendor-parsing-logic-to-.patch new file mode 100644 index 00000000..e45d802c --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1833-drm-amd-display-Refactor-dp-vendor-parsing-logic-to-.patch @@ -0,0 +1,108 @@ +From c15ba01b9ec0cf0bd71c59bc5f8b358944d6cef8 Mon Sep 17 00:00:00 2001 +From: John Barberiz <John.Barberiz@amd.com> +Date: Wed, 3 Apr 2019 19:22:55 -0400 +Subject: [PATCH 1833/2940] drm/amd/display: Refactor dp vendor parsing logic + to a function + +Refactor dp vendor parsing int to a new function, and call it before +get_active_converter_info(). + +Also, add a flag to skip parsing of Display ID 2.0. Some devices fail on +readind DID2, but we shouldn't fail EDID read because of it. Add this +flag to facilitate the logic. + +Signed-off-by: John Barberiz <John.Barberiz@amd.com> +Reviewed-by: Aric Cyr <Aric.Cyr@amd.com> +Acked-by: Leo Li <sunpeng.li@amd.com> +--- + .../gpu/drm/amd/display/dc/core/dc_link_dp.c | 47 ++++++++++--------- + drivers/gpu/drm/amd/display/dc/dc_link.h | 1 + + 2 files changed, 27 insertions(+), 21 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c +index 64a309a5e1c9..1ee544a32ebb 100644 +--- a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c ++++ b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c +@@ -2185,6 +2185,30 @@ static int translate_dpcd_max_bpc(enum dpcd_downstream_port_max_bpc bpc) + return -1; + } + ++static void read_dp_device_vendor_id(struct dc_link *link) ++{ ++ struct dp_device_vendor_id dp_id; ++ ++ /* read IEEE branch device id */ ++ core_link_read_dpcd( ++ link, ++ DP_BRANCH_OUI, ++ (uint8_t *)&dp_id, ++ sizeof(dp_id)); ++ ++ link->dpcd_caps.branch_dev_id = ++ (dp_id.ieee_oui[0] << 16) + ++ (dp_id.ieee_oui[1] << 8) + ++ dp_id.ieee_oui[2]; ++ ++ memmove( ++ link->dpcd_caps.branch_dev_name, ++ dp_id.ieee_device_id, ++ sizeof(dp_id.ieee_device_id)); ++} ++ ++ ++ + static void get_active_converter_info( + uint8_t data, struct dc_link *link) + { +@@ -2270,27 +2294,6 @@ static void get_active_converter_info( + + ddc_service_set_dongle_type(link->ddc, link->dpcd_caps.dongle_type); + +- { +- struct dp_device_vendor_id dp_id; +- +- /* read IEEE branch device id */ +- core_link_read_dpcd( +- link, +- DP_BRANCH_OUI, +- (uint8_t *)&dp_id, +- sizeof(dp_id)); +- +- link->dpcd_caps.branch_dev_id = +- (dp_id.ieee_oui[0] << 16) + +- (dp_id.ieee_oui[1] << 8) + +- dp_id.ieee_oui[2]; +- +- memmove( +- link->dpcd_caps.branch_dev_name, +- dp_id.ieee_device_id, +- sizeof(dp_id.ieee_device_id)); +- } +- + { + struct dp_sink_hw_fw_revision dp_hw_fw_revision; + +@@ -2455,6 +2458,8 @@ static bool retrieve_link_cap(struct dc_link *link) + ds_port.byte = dpcd_data[DP_DOWNSTREAMPORT_PRESENT - + DP_DPCD_REV]; + ++ read_dp_device_vendor_id(link); ++ + get_active_converter_info(ds_port.byte, link); + + dp_wa_power_up_0010FA(link, dpcd_data, sizeof(dpcd_data)); +diff --git a/drivers/gpu/drm/amd/display/dc/dc_link.h b/drivers/gpu/drm/amd/display/dc/dc_link.h +index cc7ffac64c96..7b9429e30d82 100644 +--- a/drivers/gpu/drm/amd/display/dc/dc_link.h ++++ b/drivers/gpu/drm/amd/display/dc/dc_link.h +@@ -120,6 +120,7 @@ struct dc_link { + /* MST record stream using this link */ + struct link_flags { + bool dp_keep_receiver_powered; ++ bool dp_skip_DID2; + } wa_flags; + struct link_mst_stream_allocation_table mst_stream_alloc_table; + +-- +2.17.1 + |