Re: [PATCH] drm/msm/dp: Introduce poll_hpd_irq callback for MST sideband handling

From: Dmitry Baryshkov

Date: Sat Jun 06 2026 - 08:26:13 EST


On Sat, Jun 06, 2026 at 08:05:29PM +0800, Yongxing Mou wrote:
> On RB8 hardware, after drm_dp_add_payload_part2() completes, the
> downstream MST dongle has a high probability of silently dropping the
> short-pulse IRQ at specific timing windows.

So, who does what? Is it RB8 missing the IRQ_HPD or is it a dongle not
sending the IRQ_HPD event? Why is it being missed?

>
> Implement the .poll_hpd_irq topology callback so that the DRM MST core can
> proactively poll for unhandled sideband events whenever it suspects a
> missed IRQ.
>
> Note: The new MST series will integrate this change into the introduce MST
> IRQ patch

This should not be a part of the commit message. And also the patch
should be a part of the MST series.

>
> Signed-off-by: Yongxing Mou <yongxing.mou@xxxxxxxxxxxxxxxx>
> ---
> drivers/gpu/drm/msm/dp/dp_mst_drm.c | 20 ++++++++++++++++++--
> 1 file changed, 18 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/dp/dp_mst_drm.c b/drivers/gpu/drm/msm/dp/dp_mst_drm.c
> index c8623849c001..8cc44dcc37cd 100644
> --- a/drivers/gpu/drm/msm/dp/dp_mst_drm.c
> +++ b/drivers/gpu/drm/msm/dp/dp_mst_drm.c
> @@ -60,6 +60,8 @@ struct msm_dp_mst {
> u32 max_streams;
> /* Protects MST bridge enable/disable handling. */
> struct mutex mst_lock;
> + /* Serializes HPD IRQ handling between IRQ handler and poll_hpd_irq. */
> + struct mutex hpd_irq_lock;
> };
>
> static struct drm_private_state *msm_dp_mst_duplicate_bridge_state(struct drm_private_obj *obj)
> @@ -500,10 +502,12 @@ void msm_dp_mst_display_hpd_irq(struct msm_dp *dp_display)
> unsigned int esi_res = DP_SINK_COUNT_ESI + 1;
> bool handled;
>
> + mutex_lock(&mst->hpd_irq_lock);

guard(mutex)(&mst->hpd_irq_lock);

> +

--
With best wishes
Dmitry