Re: [PATCH 4/5] drm/msm/dp: report IRQ_HPD as an IRQ-only notification
Yongxing Mou <[email protected]>
| Newsgroups | org.infradead.lists.linux-amlogic,org.freedesktop.lists.dri-devel,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
On 7/12/2026 6:55 PM, Dmitry Baryshkov wrote: > On Mon, Jun 29, 2026 at 10:48:06PM +0800, Yongxing Mou wrote: >> 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 <[email protected]> >> --- >> 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? > Emm , I will split the patch and reorganize it. >> 2 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. > Same as my reply to 2/5 -- the status is indeed not unknown here, and 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. >> + 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. > Yes, 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. > Will fix it next patchset . >> + 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 >> > _______________________________________________ linux-amlogic mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-amlogic