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 <[email protected]>
> ---
>  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

Reply via email to