From: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
To: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Cc: Rob Clark <robin.clark@oss.qualcomm.com>,
Dmitry Baryshkov <lumag@kernel.org>,
Abhinav Kumar <abhinav.kumar@linux.dev>,
Sean Paul <sean@poorly.run>,
Marijn Suijten <marijn.suijten@somainline.org>,
David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>,
Jessica Zhang <jesszhan0024@gmail.com>,
linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org,
freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org,
Abhinav Kumar <quic_abhinavk@quicinc.com>
Subject: Re: [PATCH v4 37/39] drm/msm/dp: add HPD callback for dp MST
Date: Tue, 16 Jun 2026 17:51:47 +0800 [thread overview]
Message-ID: <bcf6de3c-97cc-4f83-9450-fa4a64025243@oss.qualcomm.com> (raw)
In-Reply-To: <t4ocbdrm4d3xlocycwnsgkcyyuaebfbkid73pxzel46nh724rs@wairidx7ct2x>
On 6/16/2026 8:50 AM, Dmitry Baryshkov wrote:
> On Mon, Jun 15, 2026 at 06:05:07PM +0800, Yongxing Mou wrote:
>>
>>
>> On 4/12/2026 6:00 AM, Dmitry Baryshkov wrote:
>>> On Fri, Apr 10, 2026 at 05:34:12PM +0800, Yongxing Mou wrote:
>>>> From: Abhinav Kumar <quic_abhinavk@quicinc.com>
>>>>
>>>> Add HPD callback for the MST module which shall be invoked from the
>>>> dp_display's HPD handler to perform MST specific operations in case
>>>> of HPD. In MST case, route the HPD messages to MST module.
>>>>
>>>> Signed-off-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
>>>> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
>>>> ---
>>>> drivers/gpu/drm/msm/dp/dp_display.c | 23 +++++++++++++++++++----
>>>> drivers/gpu/drm/msm/dp/dp_mst_drm.c | 34 ++++++++++++++++++++++++++++++++++
>>>> drivers/gpu/drm/msm/dp/dp_mst_drm.h | 1 +
>>>> 3 files changed, 54 insertions(+), 4 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c
>>>> index 919767945ba5..ca89e20b7563 100644
>>>> --- a/drivers/gpu/drm/msm/dp/dp_display.c
>>>> +++ b/drivers/gpu/drm/msm/dp/dp_display.c
>>>> @@ -454,6 +454,9 @@ static int msm_dp_hpd_plug_handle(struct msm_dp_display_private *dp)
>>>> dp->msm_dp_display.connector_type,
>>>> dp->link->sink_count);
>>>> + if (dp->plugged)
>>>> + return 0;
>>>> +
>>>> mutex_lock(&dp->plugged_lock);
>>>> ret = pm_runtime_resume_and_get(&pdev->dev);
>>>> @@ -556,12 +559,19 @@ static int msm_dp_irq_hpd_handle(struct msm_dp_display_private *dp)
>>>> {
>>>> u32 sink_request;
>>>> int rc = 0;
>>>> + struct msm_dp *msm_dp_display = &dp->msm_dp_display;
>>>> /* irq_hpd can happen at either connected or disconnected state */
>>>> drm_dbg_dp(dp->drm_dev, "Before, type=%d, sink_count=%d\n",
>>>> dp->msm_dp_display.connector_type,
>>>> dp->link->sink_count);
>>>> + if (msm_dp_display->mst_active) {
>>>> + if (msm_dp_aux_is_link_connected(dp->aux) != ISR_DISCONNECTED)
>>>
>>> Will this work for USB-C?
>>>
>> Hmm not work for USB-C. We can remove this check here, as the IRQ thread can
>> handle the disconnect case itself.
>
> Please. Start testing with USB-C too.
>
Yeah. will test USB-C also. Could you rebase this series on top of the
HPD refactor series? Thanks.
>>>> + msm_dp_mst_display_hpd_irq(&dp->msm_dp_display);
>>>> + return 0;
>>>> + }
>>>> +
>>>> /* check for any test request issued by sink */
>>>> rc = msm_dp_link_process_request(dp->link);
>>>> if (!rc) {
>>>> @@ -1125,9 +1135,13 @@ static irqreturn_t msm_dp_display_irq_thread(int irq, void *dev_id)
>>>> connector_status_connected);
>>>> /* Send HPD as connected and distinguish it in the notifier */
>>>> - if (hpd_isr_status & DP_DP_IRQ_HPD_INT_MASK)
>>>> - drm_bridge_hpd_notify(dp->msm_dp_display.bridge,
>>>> - connector_status_connected);
>>>> + if (hpd_isr_status & DP_DP_IRQ_HPD_INT_MASK) {
>>>> + if (dp->msm_dp_display.mst_active)
>>>> + msm_dp_irq_hpd_handle(dp);
>>>
>>> No, don't touch this code. HPD notifications might be coming from the
>>> other entities. This IRQ thread can only send the HPD notification.
>>> There rest should be handled in the notifier.
>>>
>> Ok. From my understanding, after this series
>> (https://patchwork.freedesktop.org/series/164954/#rev5) is rebased, we
>> should use drm_aux_hpd_bridge_notify_extra() here to notify the IRQ?
>
> No. There is no aux bridge here. But yes, I'd need to call a different
> function in that series.
>
There is one concern here: if we use drm_aux_hpd_bridge_notify_*() to
notify IRQ events, does that mean every IRQ notification would also
trigger a hotplug event?
If so, this may not be necessary, since the MST core framework already
notifies userspace/client on its own. Additional hotplug events could
cause userspace to query connector status again, which in turn might
trigger the bridge notification repeatedly.
Please correct me if my understanding is wrong.
>>>> + else
>>>> + drm_bridge_hpd_notify(dp->msm_dp_display.bridge,
>>>> + connector_status_connected);
>>>> + }
>>>> ret = IRQ_HANDLED;
>>>> @@ -1793,7 +1807,8 @@ void msm_dp_bridge_hpd_notify(struct drm_bridge *bridge,
>>>> msm_dp_hpd_plug_handle(dp);
>>>> }
>>>> } else {
>>>> - msm_dp_hpd_unplug_handle(dp);
>>>> + if (hpd_link_status == ISR_DISCONNECTED)
>>>
>>> Why?
>>>
>> Let me explain this in more detail here.
>> Currently, MST hotplug and IRQ events are handled through the SST bridge.
>> This guards against spurious unplug handling caused by
>> msm_dp_bridge_hpd_notify() being invoked from non-HPD contexts where status
>> == connector_status_disconnected does not actually mean the cable is gone.
>>
>> In addition to the real HPD IRQ path, drm_bridge_connector_detect() also
>> calls drm_bridge_connector_hpd_notify() to broadcast the detect result to
>> all bridges in the chain. So a single physical plug-in produces multiple
>> msm_dp_bridge_hpd_notify() calls — one from the real IRQ, then several more
>> from various probe/poll paths. Stack traces from a single insertion on
>> QCS8300:
>>
>> 1. msm_dp_display_irq_thread → real HPD plug, status=connected
>> 2. fbdev probe triggered by (1) → drm_bridge_connector_detect →
>> status=disconnected (link not ready yet)
>
> This should not be happening. We don't use link status anymore to return
> connected status.
>
Let me double-check this.
>> 3. output_poll_execute worker → same path → status=disconnected
>> 4. drm_dp_mst_link_probe_work → same path → status=disconnected
>> 5. output_poll_execute again → status=disconnected
>>
>> Here not work for USB-C case yet, I’d like to switch to using
>> drm_dp_read_sink_count to detect whether the sink is actually disconnected
>> or no sink devices.
>
> drm_dp_read_sink_count() isn't enough here. See the plugged flag. Maybe
> we need more flags here.
>
Got it. Let me see if there’s a better way to handle this.
>>
>>>> + msm_dp_hpd_unplug_handle(dp);
>>>> }
>>>> pm_runtime_put_sync(&msm_dp_display->pdev->dev);
>
next prev parent reply other threads:[~2026-06-16 9:51 UTC|newest]
Thread overview: 128+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-10 9:33 [PATCH v4 00/39] drm/msm/dp: Add MST support for MSM chipsets Yongxing Mou
2026-04-10 9:33 ` [PATCH v4 01/39] drm/msm/dp: remove cached drm_edid from panel Yongxing Mou
2026-04-10 13:52 ` Dmitry Baryshkov
2026-05-19 7:27 ` Yongxing Mou
2026-05-20 9:22 ` Dmitry Baryshkov
2026-05-20 10:09 ` Yongxing Mou
2026-04-10 9:33 ` [PATCH v4 02/39] drm/msm/dp: drop deprecated .mode_set() and use .atomic_enable Yongxing Mou
2026-04-11 17:23 ` Dmitry Baryshkov
2026-04-10 9:33 ` [PATCH v4 03/39] drm/msm/dp: break up dp_display_enable into two parts Yongxing Mou
2026-04-11 17:33 ` Dmitry Baryshkov
2026-04-12 0:20 ` Dmitry Baryshkov
2026-04-10 9:33 ` [PATCH v4 04/39] drm/msm/dp: re-arrange dp_display_disable() into functional parts Yongxing Mou
2026-04-10 9:33 ` [PATCH v4 05/39] drm/msm/dp: splite msm_dp_ctrl_config_ctrl() into link parts and stream parts Yongxing Mou
2026-04-11 17:34 ` Dmitry Baryshkov
2026-05-19 7:46 ` Yongxing Mou
2026-05-20 9:23 ` Dmitry Baryshkov
2026-05-20 10:16 ` Yongxing Mou
2026-05-20 10:20 ` Dmitry Baryshkov
2026-04-10 9:33 ` [PATCH v4 06/39] drm/msm/dp: extract MISC1_MISC0 configuration into a separate function Yongxing Mou
2026-04-10 9:33 ` [PATCH v4 07/39] drm/msm/dp: split link setup from source params Yongxing Mou
2026-04-11 17:36 ` Dmitry Baryshkov
2026-04-10 9:33 ` [PATCH v4 08/39] drm/msm/dp: allow dp_ctrl stream APIs to use any panel passed to it Yongxing Mou
2026-04-11 17:38 ` Dmitry Baryshkov
2026-05-19 7:52 ` Yongxing Mou
2026-05-20 9:24 ` Dmitry Baryshkov
2026-05-20 10:31 ` Yongxing Mou
2026-05-20 12:36 ` Dmitry Baryshkov
2026-04-10 9:33 ` [PATCH v4 09/39] drm/msm/dp: move the pixel clock control to its own API Yongxing Mou
2026-04-10 9:33 ` [PATCH v4 10/39] drm/msm/dp: split dp_ctrl_off() into stream and link parts Yongxing Mou
2026-04-10 9:33 ` [PATCH v4 11/39] drm/msm/dp: make bridge helpers use dp_display to allow re-use Yongxing Mou
2026-04-11 17:41 ` Dmitry Baryshkov
2026-04-10 9:33 ` [PATCH v4 12/39] drm/msm/dp: separate dp_display_prepare() into its own API Yongxing Mou
2026-04-11 17:42 ` Dmitry Baryshkov
2026-04-10 9:33 ` [PATCH v4 13/39] drm/msm/dp: introduce stream_id for each DP panel Yongxing Mou
2026-04-11 17:55 ` Dmitry Baryshkov
2026-05-19 8:26 ` Yongxing Mou
2026-05-20 9:27 ` Dmitry Baryshkov
2026-04-11 18:04 ` Dmitry Baryshkov
2026-05-20 8:54 ` Yongxing Mou
2026-04-12 0:04 ` Dmitry Baryshkov
2026-05-20 8:54 ` Yongxing Mou
2026-04-10 9:33 ` [PATCH v4 14/39] drm/msm/dp: introduce max_streams for DP controller MST support Yongxing Mou
2026-04-11 17:59 ` Dmitry Baryshkov
2026-05-21 11:34 ` Yongxing Mou
2026-05-21 12:07 ` Dmitry Baryshkov
2026-05-22 7:58 ` Yongxing Mou
2026-05-25 8:16 ` Dmitry Baryshkov
2026-04-10 9:33 ` [PATCH v4 15/39] drm/msm/dp: Add support for programming p1/p2/p3 register blocks Yongxing Mou
2026-04-11 18:07 ` Dmitry Baryshkov
2026-05-21 11:50 ` Yongxing Mou
2026-05-21 12:20 ` Dmitry Baryshkov
2026-05-22 7:51 ` Yongxing Mou
2026-05-25 8:19 ` Dmitry Baryshkov
2026-04-10 9:33 ` [PATCH v4 16/39] drm/msm/dp: use stream_id to change offsets in dp_catalog Yongxing Mou
2026-04-11 18:12 ` Dmitry Baryshkov
2026-05-25 8:06 ` Yongxing Mou
2026-05-25 8:21 ` Dmitry Baryshkov
2026-05-25 12:13 ` Yongxing Mou
2026-05-25 13:31 ` Dmitry Baryshkov
2026-04-10 9:33 ` [PATCH v4 17/39] drm/msm/dp: Add catalog support for 3rd/4th stream MST Yongxing Mou
2026-04-11 18:24 ` Dmitry Baryshkov
2026-05-25 8:06 ` Yongxing Mou
2026-05-25 8:25 ` Dmitry Baryshkov
2026-05-25 12:01 ` Yongxing Mou
2026-05-25 13:32 ` Dmitry Baryshkov
2026-04-10 9:33 ` [PATCH v4 18/39] drm/msm/dp: add support to send ACT packets for MST Yongxing Mou
2026-04-11 18:57 ` Dmitry Baryshkov
2026-06-15 8:21 ` Yongxing Mou
2026-06-16 0:41 ` Dmitry Baryshkov
2026-06-16 9:36 ` Yongxing Mou
2026-04-10 9:33 ` [PATCH v4 19/39] drm/msm/dp: Add support to enable MST in mainlink control Yongxing Mou
2026-04-11 18:59 ` Dmitry Baryshkov
2026-04-10 9:33 ` [PATCH v4 20/39] drm/msm/dp: no need to update tu calculation for mst Yongxing Mou
2026-04-11 19:00 ` Dmitry Baryshkov
2026-04-10 9:33 ` [PATCH v4 21/39] drm/msm/dp: Add support for MST channel slot allocation Yongxing Mou
2026-04-11 23:58 ` Dmitry Baryshkov
2026-04-10 9:33 ` [PATCH v4 22/39] drm/msm/dp: Add support for sending VCPF packets in DP controller Yongxing Mou
2026-04-11 19:24 ` Dmitry Baryshkov
2026-06-15 8:35 ` Yongxing Mou
2026-06-16 0:44 ` Dmitry Baryshkov
2026-06-16 9:23 ` Yongxing Mou
2026-04-10 9:33 ` [PATCH v4 23/39] drm/msm/dp: Always program MST_FIFO_CONSTANT_FILL for MST use cases Yongxing Mou
2026-04-10 9:33 ` [PATCH v4 24/39] drm/msm/dp: simplify link and clock disable sequence Yongxing Mou
2026-04-12 0:00 ` Dmitry Baryshkov
2026-04-10 9:34 ` [PATCH v4 25/39] drm/msm/dp: pass panel to display enable/disable helpers Yongxing Mou
2026-04-12 0:05 ` Dmitry Baryshkov
2026-05-28 10:13 ` Yongxing Mou
2026-04-10 9:34 ` [PATCH v4 26/39] drm/msm/dp: abstract out the dp_display stream helpers to accept a panel Yongxing Mou
2026-04-12 0:07 ` Dmitry Baryshkov
2026-04-10 9:34 ` [PATCH v4 27/39] drm/msm/dp: replace power_on with active_stream_cnt for dp_display Yongxing Mou
2026-04-12 0:11 ` Dmitry Baryshkov
2026-06-15 8:45 ` Yongxing Mou
2026-04-10 9:34 ` [PATCH v4 28/39] drm/msm/dp: Mark the SST bridge disconnected when mst is active Yongxing Mou
2026-04-12 0:11 ` Dmitry Baryshkov
2026-06-15 8:47 ` Yongxing Mou
2026-04-10 9:34 ` [PATCH v4 29/39] drm/msm/dp: add an API to initialize MST on sink side Yongxing Mou
2026-04-12 0:15 ` Dmitry Baryshkov
2026-06-15 9:02 ` Yongxing Mou
2026-06-16 0:45 ` Dmitry Baryshkov
2026-06-16 9:44 ` Yongxing Mou
2026-04-10 9:34 ` [PATCH v4 30/39] drm/msm/dp: add dp_display_get_panel() to initialize DP panel Yongxing Mou
2026-04-12 0:17 ` Dmitry Baryshkov
2026-04-10 9:34 ` [PATCH v4 31/39] drm/msm/dp: add prepared to manage link-level operations Yongxing Mou
2026-04-12 0:19 ` Dmitry Baryshkov
2026-04-10 9:34 ` [PATCH v4 32/39] drm/msm/dpu: initialize encoders per stream for DP MST Yongxing Mou
2026-04-11 19:31 ` Dmitry Baryshkov
2026-04-10 9:34 ` [PATCH v4 33/39] drm/msm/dp: initialize dp_mst module for each DP MST controller Yongxing Mou
2026-04-11 23:36 ` Dmitry Baryshkov
2026-04-10 9:34 ` [PATCH v4 34/39] drm/msm/dp: add dp_mst_drm to manage DP MST bridge operations Yongxing Mou
2026-04-11 23:51 ` Dmitry Baryshkov
2026-05-18 12:00 ` Yongxing Mou
2026-04-10 9:34 ` [PATCH v4 35/39] drm/msm/dp: wire MST helpers into atomic check and commit paths Yongxing Mou
2026-04-11 23:55 ` Dmitry Baryshkov
2026-04-10 9:34 ` [PATCH v4 36/39] drm/msm/dp: add connector abstraction for DP MST Yongxing Mou
2026-04-11 23:30 ` Dmitry Baryshkov
2026-04-10 9:34 ` [PATCH v4 37/39] drm/msm/dp: add HPD callback for dp MST Yongxing Mou
2026-04-11 22:00 ` Dmitry Baryshkov
2026-06-15 10:05 ` Yongxing Mou
2026-06-16 0:50 ` Dmitry Baryshkov
2026-06-16 9:51 ` Yongxing Mou [this message]
2026-04-10 9:34 ` [PATCH v4 38/39] drm/msm/dpu: use msm_dp_get_mst_intf_id() to get the intf id Yongxing Mou
2026-04-10 9:34 ` [PATCH v4 39/39] drm/msm/dp: Add MST stream support for supported DP controllers Yongxing Mou
2026-04-10 10:23 ` Konrad Dybcio
2026-04-11 19:26 ` Dmitry Baryshkov
2026-04-10 13:53 ` [PATCH v4 00/39] drm/msm/dp: Add MST support for MSM chipsets Dmitry Baryshkov
2026-04-12 0:34 ` Dmitry Baryshkov
2026-05-22 8:07 ` Yongxing Mou
2026-05-25 8:26 ` 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=bcf6de3c-97cc-4f83-9450-fa4a64025243@oss.qualcomm.com \
--to=yongxing.mou@oss.qualcomm.com \
--cc=abhinav.kumar@linux.dev \
--cc=airlied@gmail.com \
--cc=dmitry.baryshkov@oss.qualcomm.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=freedreno@lists.freedesktop.org \
--cc=jesszhan0024@gmail.com \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lumag@kernel.org \
--cc=marijn.suijten@somainline.org \
--cc=quic_abhinavk@quicinc.com \
--cc=robin.clark@oss.qualcomm.com \
--cc=sean@poorly.run \
--cc=simona@ffwll.ch \
/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
all inboxes | Powered by JetHome®