Linux-ARM-Kernel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
To: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Cc: Andrzej Hajda <andrzej.hajda@intel.com>,
	Neil Armstrong <neil.armstrong@linaro.org>,
	Robert Foss <rfoss@kernel.org>,
	Laurent Pinchart <Laurent.pinchart@ideasonboard.com>,
	Jonas Karlman <jonas@kwiboo.se>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Luca Ceresoli <luca.ceresoli@bootlin.com>,
	Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
	Maxime Ripard <mripard@kernel.org>,
	Thomas Zimmermann <tzimmermann@suse.de>,
	David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>,
	Kevin Hilman <khilman@baylibre.com>,
	Jerome Brunet <jbrunet@baylibre.com>,
	Martin Blumenstingl <martin.blumenstingl@googlemail.com>,
	Rob Clark <robin.clark@oss.qualcomm.com>,
	Dmitry Baryshkov <lumag@kernel.org>,
	Abhinav Kumar <abhinav.kumar@linux.dev>,
	Jessica Zhang <jesszhan0024@gmail.com>,
	Sean Paul <sean@poorly.run>,
	Marijn Suijten <marijn.suijten@somainline.org>,
	Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>,
	Bjorn Andersson <andersson@kernel.org>,
	Konrad Dybcio <konradybcio@kernel.org>,
	dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
	linux-amlogic@lists.infradead.org,
	linux-arm-kernel@lists.infradead.org,
	linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org
Subject: Re: [PATCH 1/5] drm/bridge: allow hpd_notify() to suppress connector hotplug events
Date: Fri, 21 Aug 2026 15:20:38 +0800	[thread overview]
Message-ID: <dd375289-0174-41ad-980f-f027fad976f6@oss.qualcomm.com> (raw)
In-Reply-To: <pyqpajtjcnslk6g5ysn3ce2csrb76fhd5bif4vdb6wezomlmsg@fsl55exyufx2>



On 8/18/2026 11:01 AM, Dmitry Baryshkov wrote:
> On Mon, Aug 17, 2026 at 04:01:41PM +0800, Yongxing Mou wrote:
>>
>>
>> On 7/12/2026 6:21 PM, Dmitry Baryshkov wrote:
>>> On Mon, Jun 29, 2026 at 10:48:03PM +0800, Yongxing Mou wrote:
>>>> The bridge connector framework currently invokes all bridge
>>>> hpd_notify() callbacks and unconditionally emits a connector hotplug
>>>> event afterwards.
>>>>
>>>> However, not every HPD notification requires a userspace hotplug event.
>>>>
>>>> In particular, DP MST bridges may use hpd_notify() to propagate HPD and
>>>> IRQ notifications through the bridge chain while the actual hotplug
>>>> handling is performed by the DRM DP MST core. Connector creation,
>>>> removal and userspace hotplug events are already managed by the MST
>>>> topology framework.
>>>>
>>>> Allow hpd_notify() implementations to suppress the bridge connector
>>>> hotplug event by introducing a bool *send_hotplug parameter. Drivers
>>>> can clear this flag when HPD processing should not result in a
>>>> connector hotplug notification.
>>>
>>> Why? Worst case the kernel receives another hotplug notification which
>>> gets ignored by the driver.
>>>
>> Hi, thanks for reviwing those patches.
>> Let me try to explain the motivation.
>>
>> Semantically, IRQ_HPD is just an IRQ notification, not a connection state
>> transition, and shouldn't be turned into a userspace hotplug in the first
>> place. However, drm_bridge_connector_handle_hpd() currently calls
>> drm_kms_helper_connector_hotplug_event() unconditionally after processing
>> the event, so every IRQ_HPD ends up reported as a hotplug.
> 
> What if the IRQ_HPD is delivered together with the first HPD event (for
> example because of the TCPM processing those events)? See the mechanism
> in the displayport.c AltMode driver.
> 
The DRM API should simply pass both long HPD IRQs and short HPD IRQs to 
the driver as they are, and let the driver decide how to handle them. 
Based on my review of the implementations from all three vendors, when 
long and short HPD IRQs occur simultaneously, the long HPD IRQ is always 
handled first, followed by the short HPD IRQ.

I have another thought regarding the current DRM API. Could we have the 
DRM layer pass only the HPD event information (long IRQ and/or short 
IRQ) instead of connector status, and leave all handling decisions to 
the driver? The DRM core would simply report LONG_HPD | SHORT_HPD, and 
each driver could decide how to process the event. This seems like a 
pattern that could be shared across different drivers.

This is just my current understanding. Please let me know if I've missed 
anything or got something wrong. Thanks.
>> Second, MST IRQ_HPD is level-sticky -- as long as the ACK has not been
>> cleared, the IRQ keeps firing repeatedly, and MST bring-up (link training
>> / MST enable handshake) itself generates a burst of IRQ_HPDs. So this is
>> not about "one extra hotplug", but about a burst of them within a short
>> window.
> 
> Ok, if it is level-sticky, it should be handled as such.
> 
>>
>> Every one of those hotplugs is delivered to userspace via udev and
>> prompts the compositor to re-probe the connector. In the window before
>> mst_active is set, that re-probe walks back into msm_dp_bridge_detect()
>> and performs aux/DPCD accesses, racing with the MST enable flow.
> 
> If there is a race, the path needs to have a lock, preventing concurrent
> access. Otherwise, you are just shortening the window instead of solving
> the problem.
> 
>>
>> The amplification also isn't limited to a single connector: on Hamoa
>> there are 4 connectors (3x DP + eDP), and we observe that a hotplug on
>> any one connector causes the compositor to re-query all 4. So this burst
> 
> Please fix the compositor, it should not need to query all 4 connectors
> if the HPD event came from the single one.
> 
>> of spurious IRQ_HPDs during MST enable ends up amplified across the
>> whole card.
> 
> How do i915, amdgpu and nouveau respond to IRQ_HPD? When do they send
> the HPD event to the userspace?
> 
The driver revalidates the actual connector state, and a hotplug event 
is triggered only when an actual connector state change or a link status 
change is detected.
>>>> A NULL pointer indicates that hotplug suppression is not supported by
>>>> the caller, such as the connector detect polling path.
>>>
>>> And nothing in this patch makes any use of it. I'd say, it's
>>> questionable addition. Let me check other patches...
>>>
>> You are right, I will reorganize the patches in next patchset.
>>>>
>>>> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
>>>> ---
>>>>    drivers/gpu/drm/bridge/lontium-lt9611uxc.c     |  3 ++-
>>>>    drivers/gpu/drm/display/drm_bridge_connector.c | 15 +++++++++------
>>>>    drivers/gpu/drm/meson/meson_encoder_hdmi.c     |  3 ++-
>>>>    drivers/gpu/drm/msm/dp/dp_display.c            |  3 ++-
>>>>    drivers/gpu/drm/msm/dp/dp_drm.h                |  3 ++-
>>>>    drivers/gpu/drm/omapdrm/dss/hdmi4.c            |  3 ++-
>>>>    include/drm/drm_bridge.h                       |  3 ++-
>>>>    7 files changed, 21 insertions(+), 12 deletions(-)
>>>
>>
> 



  reply	other threads:[~2026-08-21  7:21 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-29 14:48 [PATCH 0/5] drm/msm/dp: Add MSM Type-C MST support Yongxing Mou
2026-06-29 14:48 ` [PATCH 1/5] drm/bridge: allow hpd_notify() to suppress connector hotplug events Yongxing Mou
2026-07-12 10:21   ` Dmitry Baryshkov
2026-08-17  8:01     ` Yongxing Mou
2026-08-18  3:01       ` Dmitry Baryshkov
2026-08-21  7:20         ` Yongxing Mou [this message]
2026-08-24  3:15           ` Yongxing Mou
2026-08-18  2:05   ` Chaoyi Chen
2026-08-18  2:24     ` Dmitry Baryshkov
2026-06-29 14:48 ` [PATCH 2/5] drm/bridge_connector: preserve connector status for IRQ-only HPD events Yongxing Mou
2026-07-12 10:33   ` Dmitry Baryshkov
2026-08-17  8:02     ` Yongxing Mou
2026-08-18  3:18       ` Dmitry Baryshkov
2026-08-21  7:19         ` Yongxing Mou
2026-06-29 14:48 ` [PATCH 3/5] drm/msm/dp: suppress bridge hotplug events during MST operation Yongxing Mou
2026-07-12 10:44   ` Dmitry Baryshkov
2026-08-17  8:01     ` Yongxing Mou
2026-08-18  3:22       ` Dmitry Baryshkov
2026-06-29 14:48 ` [PATCH 4/5] drm/msm/dp: report IRQ_HPD as an IRQ-only notification Yongxing Mou
2026-07-12 10:55   ` Dmitry Baryshkov
2026-08-17  8:02     ` Yongxing Mou
2026-06-29 14:48 ` [PATCH 5/5] drm/msm/dp: mark the SST connector disconnected when MST is enabled Yongxing Mou
2026-07-12 10:56   ` Dmitry Baryshkov
2026-08-17  8:01     ` Yongxing Mou
2026-08-18  3:23       ` Dmitry Baryshkov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=dd375289-0174-41ad-980f-f027fad976f6@oss.qualcomm.com \
    --to=yongxing.mou@oss.qualcomm.com \
    --cc=Laurent.pinchart@ideasonboard.com \
    --cc=abhinav.kumar@linux.dev \
    --cc=airlied@gmail.com \
    --cc=andersson@kernel.org \
    --cc=andrzej.hajda@intel.com \
    --cc=dmitry.baryshkov@oss.qualcomm.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=freedreno@lists.freedesktop.org \
    --cc=jbrunet@baylibre.com \
    --cc=jernej.skrabec@gmail.com \
    --cc=jesszhan0024@gmail.com \
    --cc=jonas@kwiboo.se \
    --cc=khilman@baylibre.com \
    --cc=konradybcio@kernel.org \
    --cc=linux-amlogic@lists.infradead.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luca.ceresoli@bootlin.com \
    --cc=lumag@kernel.org \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=marijn.suijten@somainline.org \
    --cc=martin.blumenstingl@googlemail.com \
    --cc=mripard@kernel.org \
    --cc=neil.armstrong@linaro.org \
    --cc=rfoss@kernel.org \
    --cc=robin.clark@oss.qualcomm.com \
    --cc=sean@poorly.run \
    --cc=simona@ffwll.ch \
    --cc=tomi.valkeinen@ideasonboard.com \
    --cc=tzimmermann@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox