aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2361-drm-amd-display-USB-C-to-HDMI-dongle-not-light.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2361-drm-amd-display-USB-C-to-HDMI-dongle-not-light.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2361-drm-amd-display-USB-C-to-HDMI-dongle-not-light.patch165
1 files changed, 165 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2361-drm-amd-display-USB-C-to-HDMI-dongle-not-light.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2361-drm-amd-display-USB-C-to-HDMI-dongle-not-light.patch
new file mode 100644
index 00000000..c2e42973
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2361-drm-amd-display-USB-C-to-HDMI-dongle-not-light.patch
@@ -0,0 +1,165 @@
+From 740ae9823cedfdf1f1e5ab42d9bfbd7333822ada Mon Sep 17 00:00:00 2001
+From: Hersen Wu <hersenxs.wu@amd.com>
+Date: Mon, 11 Sep 2017 16:42:14 -0400
+Subject: [PATCH 2361/4131] drm/amd/display: USB-C to HDMI dongle not light
+
+RV1 support only USB-C active DP-2-HDMI dongle. HPD short pulse is
+generated only for DP signal.
+
+When processing HPD short pulse, it must be DP active dongle. No need
+for I2C-Over-AUX detection.
+
+v2: Add description
+
+Signed-off-by: Hersen Wu <hersenxs.wu@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/amdgpu_dm/amdgpu_dm.c | 9 ++++---
+ drivers/gpu/drm/amd/display/dc/core/dc_link.c | 32 +++++++++++++++--------
+ drivers/gpu/drm/amd/display/dc/dc.h | 8 +++++-
+ 3 files changed, 33 insertions(+), 16 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+index e310275..c45063d 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+@@ -639,7 +639,7 @@ int amdgpu_dm_display_resume(struct amdgpu_device *adev )
+ continue;
+
+ mutex_lock(&aconnector->hpd_lock);
+- dc_link_detect(aconnector->dc_link, false);
++ dc_link_detect(aconnector->dc_link, DETECT_REASON_HPD);
+ aconnector->dc_sink = NULL;
+ amdgpu_dm_update_connector_after_detect(aconnector);
+ mutex_unlock(&aconnector->hpd_lock);
+@@ -870,7 +870,7 @@ static void handle_hpd_irq(void *param)
+ * since (for MST case) MST does this in it's own context.
+ */
+ mutex_lock(&aconnector->hpd_lock);
+- if (dc_link_detect(aconnector->dc_link, false)) {
++ if (dc_link_detect(aconnector->dc_link, DETECT_REASON_HPD)) {
+ amdgpu_dm_update_connector_after_detect(aconnector);
+
+
+@@ -980,7 +980,7 @@ static void handle_hpd_rx_irq(void *param)
+ if (dc_link_handle_hpd_rx_irq(aconnector->dc_link, NULL) &&
+ !is_mst_root_connector) {
+ /* Downstream Port status changed. */
+- if (dc_link_detect(aconnector->dc_link, false)) {
++ if (dc_link_detect(aconnector->dc_link, DETECT_REASON_HPDRX)) {
+ amdgpu_dm_update_connector_after_detect(aconnector);
+
+
+@@ -1381,7 +1381,8 @@ int amdgpu_dm_initialize_drm_device(struct amdgpu_device *adev)
+ goto fail_free_encoder;
+ }
+
+- if (dc_link_detect(dc_get_link_at_index(dm->dc, i), true))
++ if (dc_link_detect(dc_get_link_at_index(dm->dc, i),
++ DETECT_REASON_BOOT))
+ amdgpu_dm_update_connector_after_detect(aconnector);
+ }
+
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link.c b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
+index cea8daf..845ec42 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
+@@ -355,7 +355,9 @@ static bool is_dp_sink_present(struct dc_link *link)
+ * @brief
+ * Detect output sink type
+ */
+-static enum signal_type link_detect_sink(struct dc_link *link)
++static enum signal_type link_detect_sink(
++ struct dc_link *link,
++ enum dc_detect_reason reason)
+ {
+ enum signal_type result = get_basic_signal_type(
+ link->link_enc->id, link->link_id);
+@@ -388,12 +390,17 @@ static enum signal_type link_detect_sink(struct dc_link *link)
+ }
+ break;
+ case CONNECTOR_ID_DISPLAY_PORT: {
+-
+- /* Check whether DP signal detected: if not -
+- * we assume signal is DVI; it could be corrected
+- * to HDMI after dongle detection */
+- if (!is_dp_sink_present(link))
+- result = SIGNAL_TYPE_DVI_SINGLE_LINK;
++ /* DP HPD short pulse. Passive DP dongle will not
++ * have short pulse
++ */
++ if (reason != DETECT_REASON_HPDRX) {
++ /* Check whether DP signal detected: if not -
++ * we assume signal is DVI; it could be corrected
++ * to HDMI after dongle detection
++ */
++ if (!is_dp_sink_present(link))
++ result = SIGNAL_TYPE_DVI_SINGLE_LINK;
++ }
+ }
+ break;
+ default:
+@@ -460,9 +467,10 @@ static void detect_dp(
+ struct display_sink_capability *sink_caps,
+ bool *converter_disable_audio,
+ struct audio_support *audio_support,
+- bool boot)
++ enum dc_detect_reason reason)
+ {
+- sink_caps->signal = link_detect_sink(link);
++ bool boot = false;
++ sink_caps->signal = link_detect_sink(link, reason);
+ sink_caps->transaction_type =
+ get_ddc_transaction_type(sink_caps->signal);
+
+@@ -513,6 +521,8 @@ static void detect_dp(
+ * Need check ->sink usages in case ->sink = NULL
+ * TODO: s3 resume check
+ */
++ if (reason == DETECT_REASON_BOOT)
++ boot = true;
+
+ if (dm_helpers_dp_mst_start_top_mgr(
+ link->ctx,
+@@ -531,7 +541,7 @@ static void detect_dp(
+ }
+ }
+
+-bool dc_link_detect(struct dc_link *link, bool boot)
++bool dc_link_detect(struct dc_link *link, enum dc_detect_reason reason)
+ {
+ struct dc_sink_init_data sink_init_data = { 0 };
+ struct display_sink_capability sink_caps = { 0 };
+@@ -596,7 +606,7 @@ bool dc_link_detect(struct dc_link *link, bool boot)
+ link,
+ &sink_caps,
+ &converter_disable_audio,
+- aud_support, boot);
++ aud_support, reason);
+
+ /* Active dongle downstream unplug */
+ if (link->type == dc_connection_active_dongle
+diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/display/dc/dc.h
+index 8077d48..99c7a78 100644
+--- a/drivers/gpu/drm/amd/display/dc/dc.h
++++ b/drivers/gpu/drm/amd/display/dc/dc.h
+@@ -896,7 +896,13 @@ bool dc_link_setup_psr(struct dc_link *dc_link,
+ * true otherwise. True meaning further action is required (status update
+ * and OS notification).
+ */
+-bool dc_link_detect(struct dc_link *dc_link, bool boot);
++enum dc_detect_reason {
++ DETECT_REASON_BOOT,
++ DETECT_REASON_HPD,
++ DETECT_REASON_HPDRX,
++};
++
++bool dc_link_detect(struct dc_link *dc_link, enum dc_detect_reason reason);
+
+ /* Notify DC about DP RX Interrupt (aka Short Pulse Interrupt).
+ * Return:
+--
+2.7.4
+