Re: [PATCH 4/5] drm/msm/dp: report IRQ_HPD as an IRQ-only notification
From: Yongxing Mou
Date: Mon Aug 17 2026 - 04:02:51 EST
On 7/12/2026 6:55 PM, Dmitry Baryshkov wrote:
On Mon, Jun 29, 2026 at 10:48:06PM +0800, Yongxing Mou wrote:Emm , I will split the patch and reorganize it.
MST reuses the SST connector bridge to propagate HPD IRQ events through
the bridge chain.
For IRQ_HPD notifications there is no connector state transition to
report. Use connector_status_unknown together with
DRM_CONNECTOR_DP_IRQ_HPD so that the bridge connector framework treats
them as IRQ-only notifications and forwards them without modifying
connector state.
The DP driver handles IRQ_HPD events based on
DRM_CONNECTOR_DP_IRQ_HPD rather than connector status transitions.
Signed-off-by: Yongxing Mou <yongxing.mou@xxxxxxxxxxxxxxxx>
---
drivers/gpu/drm/msm/dp/dp_display.c | 22 +++++++++-------------
drivers/soc/qcom/pmic_glink_altmode.c | 14 +++++++++-----
And which tree (and why) would be able to merge this patch?
Same as my reply to 2/5 -- the status is indeed not unknown here, and2 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c
index bc93b566fbca..4ee391cc7165 100644
--- a/drivers/gpu/drm/msm/dp/dp_display.c
+++ b/drivers/gpu/drm/msm/dp/dp_display.c
@@ -1119,14 +1119,10 @@ static irqreturn_t msm_dp_display_irq_thread(int irq, void *dev_id)
drm_bridge_hpd_notify(dp->msm_dp_display.bridge,
connector_status_connected);
- /* Send HPD as connected and distinguish it in the notifier */
- if (hpd_isr_status & DP_DP_IRQ_HPD_INT_MASK) {
- if (dp->msm_dp_display.mst_active)
- msm_dp_irq_hpd_handle(dp);
- else
- drm_bridge_hpd_notify(dp->msm_dp_display.bridge,
- connector_status_connected);
- }
+ if (hpd_isr_status & DP_DP_IRQ_HPD_INT_MASK)
+ drm_bridge_hpd_notify_extra(dp->msm_dp_display.bridge,
+ connector_status_unknown,
It's _not_ unknown.
using connector_status_unknown as a sentinel in v1 is not appropriate.
I will fix this in v2 along the direction discussed on 2/5.
Yes, will fix it next patchset.+ DRM_CONNECTOR_DP_IRQ_HPD);
This should be fixed in the MST patchset. You should not be doing any
actual handling in the ISR routing.
ret = IRQ_HANDLED;
@@ -1781,11 +1777,11 @@ void msm_dp_bridge_hpd_notify(struct drm_bridge *bridge,
drm_dbg_dp(dp->drm_dev, "type=%d link hpd_link_status=0x%x, status=%d\n",
msm_dp_display->connector_type, hpd_link_status, status);
- if (status == connector_status_connected) {
- if (hpd_link_status == ISR_IRQ_HPD_PULSE_COUNT ||
- extra_status == DRM_CONNECTOR_DP_IRQ_HPD) {
- msm_dp_irq_hpd_handle(dp);
- } else if (hpd_link_status == ISR_HPD_REPLUG_COUNT) {
+ if (extra_status == DRM_CONNECTOR_DP_IRQ_HPD ||
+ hpd_link_status == ISR_IRQ_HPD_PULSE_COUNT) {
+ msm_dp_irq_hpd_handle(dp);
ANd here you missed the case when IRQ_HPD is being reported together
with the first HPD event.
Will fix it next patchset .+ } else if (status == connector_status_connected) {
+ if (hpd_link_status == ISR_HPD_REPLUG_COUNT) {
msm_dp_hpd_unplug_handle(dp);
msm_dp_hpd_plug_handle(dp);
} else {
diff --git a/drivers/soc/qcom/pmic_glink_altmode.c b/drivers/soc/qcom/pmic_glink_altmode.c
index 946eb20b8f83..28ab8cbb5ef9 100644
--- a/drivers/soc/qcom/pmic_glink_altmode.c
+++ b/drivers/soc/qcom/pmic_glink_altmode.c
@@ -373,11 +373,15 @@ static void pmic_glink_altmode_worker(struct work_struct *work)
else
conn_status = connector_status_disconnected;
- drm_aux_hpd_bridge_notify_extra(&alt_port->bridge->dev,
- conn_status,
- alt_port->hpd_irq ?
- DRM_CONNECTOR_DP_IRQ_HPD :
- DRM_CONNECTOR_NO_EXTRA_STATUS);
+ if (alt_port->hpd_irq) {
+ drm_aux_hpd_bridge_notify_extra(&alt_port->bridge->dev,
+ connector_status_unknown,
And this is completely wrong. The AltMode driver (btw, you also missed
the normal altmode driver for DP) doesn't know if it should handle the
events in some way. It should report the HPD and IRQ_HPD as is.
+ DRM_CONNECTOR_DP_IRQ_HPD);
+ } else {
+ drm_aux_hpd_bridge_notify_extra(&alt_port->bridge->dev,
+ conn_status,
+ DRM_CONNECTOR_NO_EXTRA_STATUS);
+ }
} else if (alt_port->mux_ctrl == MUX_CTRL_STATE_TUNNELING) {
if (alt_port->svid == USB_TYPEC_TBT_SID)
pmic_glink_altmode_enable_tbt(altmode, alt_port);
--
2.43.0