Commit 7e10bf42 authored by Kuogee Hsieh's avatar Kuogee Hsieh Committed by Rob Clark

drm/msm/dp: replug event is converted into an unplug followed by an plug events

Remove special handling of replug interrupt and instead treat replug event
as a sequential unplug followed by a plugin event. This is needed to meet
the requirements of DP Link Layer CTS test case 4.2.1.3.

Changes in V2:
-- add fixes statement

Changes in V3:
-- delete EV_HPD_REPLUG_INT

Fixes: f21c8a27 ("drm/msm/dp: handle irq_hpd with sink_count = 0 correctly")
Signed-off-by: default avatarKuogee Hsieh <khsieh@codeaurora.org>
Reviewed-by: default avatarStephen Boyd <swboyd@chromium.org>
Link: https://lore.kernel.org/r/1628196295-7382-5-git-send-email-khsieh@codeaurora.orgSigned-off-by: default avatarRob Clark <robdclark@chromium.org>
parent 0b324564
...@@ -55,7 +55,6 @@ enum { ...@@ -55,7 +55,6 @@ enum {
EV_HPD_INIT_SETUP, EV_HPD_INIT_SETUP,
EV_HPD_PLUG_INT, EV_HPD_PLUG_INT,
EV_IRQ_HPD_INT, EV_IRQ_HPD_INT,
EV_HPD_REPLUG_INT,
EV_HPD_UNPLUG_INT, EV_HPD_UNPLUG_INT,
EV_USER_NOTIFICATION, EV_USER_NOTIFICATION,
EV_CONNECT_PENDING_TIMEOUT, EV_CONNECT_PENDING_TIMEOUT,
...@@ -1110,9 +1109,6 @@ static int hpd_event_thread(void *data) ...@@ -1110,9 +1109,6 @@ static int hpd_event_thread(void *data)
case EV_IRQ_HPD_INT: case EV_IRQ_HPD_INT:
dp_irq_hpd_handle(dp_priv, todo->data); dp_irq_hpd_handle(dp_priv, todo->data);
break; break;
case EV_HPD_REPLUG_INT:
/* do nothing */
break;
case EV_USER_NOTIFICATION: case EV_USER_NOTIFICATION:
dp_display_send_hpd_notification(dp_priv, dp_display_send_hpd_notification(dp_priv,
todo->data); todo->data);
...@@ -1157,10 +1153,8 @@ static irqreturn_t dp_display_irq_handler(int irq, void *dev_id) ...@@ -1157,10 +1153,8 @@ static irqreturn_t dp_display_irq_handler(int irq, void *dev_id)
DRM_DEBUG_DP("hpd isr status=%#x\n", hpd_isr_status); DRM_DEBUG_DP("hpd isr status=%#x\n", hpd_isr_status);
if (hpd_isr_status & 0x0F) { if (hpd_isr_status & 0x0F) {
/* hpd related interrupts */ /* hpd related interrupts */
if (hpd_isr_status & DP_DP_HPD_PLUG_INT_MASK || if (hpd_isr_status & DP_DP_HPD_PLUG_INT_MASK)
hpd_isr_status & DP_DP_HPD_REPLUG_INT_MASK) {
dp_add_event(dp, EV_HPD_PLUG_INT, 0, 0); dp_add_event(dp, EV_HPD_PLUG_INT, 0, 0);
}
if (hpd_isr_status & DP_DP_IRQ_HPD_INT_MASK) { if (hpd_isr_status & DP_DP_IRQ_HPD_INT_MASK) {
/* stop sentinel connect pending checking */ /* stop sentinel connect pending checking */
...@@ -1168,8 +1162,10 @@ static irqreturn_t dp_display_irq_handler(int irq, void *dev_id) ...@@ -1168,8 +1162,10 @@ static irqreturn_t dp_display_irq_handler(int irq, void *dev_id)
dp_add_event(dp, EV_IRQ_HPD_INT, 0, 0); dp_add_event(dp, EV_IRQ_HPD_INT, 0, 0);
} }
if (hpd_isr_status & DP_DP_HPD_REPLUG_INT_MASK) if (hpd_isr_status & DP_DP_HPD_REPLUG_INT_MASK) {
dp_add_event(dp, EV_HPD_REPLUG_INT, 0, 0); dp_add_event(dp, EV_HPD_UNPLUG_INT, 0, 0);
dp_add_event(dp, EV_HPD_PLUG_INT, 0, 3);
}
if (hpd_isr_status & DP_DP_HPD_UNPLUG_INT_MASK) if (hpd_isr_status & DP_DP_HPD_UNPLUG_INT_MASK)
dp_add_event(dp, EV_HPD_UNPLUG_INT, 0, 0); dp_add_event(dp, EV_HPD_UNPLUG_INT, 0, 0);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment