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>,
Jessica Zhang <jessica.zhang@oss.qualcomm.com>,
Sean Paul <sean@poorly.run>,
Marijn Suijten <marijn.suijten@somainline.org>,
David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>,
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 v3 31/38] drm/msm/dp: add HPD callback for dp MST
Date: Thu, 14 May 2026 15:12:17 +0800 [thread overview]
Message-ID: <d4c5d26c-47f1-4e42-9852-d407982cb4f6@oss.qualcomm.com> (raw)
In-Reply-To: <k6y3e4fqfwkevvvv3zmzmovsrz4i6qkxs3duhz7khsggxwwa77@uogtrpuaxhnc>
On 4/19/2026 8:29 AM, Dmitry Baryshkov wrote:
> On Wed, Apr 15, 2026 at 06:32:29PM +0800, Yongxing Mou wrote:
>>
>>
>> On 4/15/2026 2:43 AM, Dmitry Baryshkov wrote:
>>> On Tue, Apr 14, 2026 at 05:51:51PM +0800, Yongxing Mou wrote:
>>>>
>>>>
>>>> On 3/25/2026 3:30 AM, Dmitry Baryshkov wrote:
>>>>> On Tue, Mar 24, 2026 at 09:04:24PM +0800, Yongxing Mou wrote:
>>>>>>
>>>>>>
>>>>>> On 8/27/2025 2:40 AM, Dmitry Baryshkov wrote:
>>>>>>> On Mon, Aug 25, 2025 at 10:16:17PM +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 | 15 ++++++++++++---
>>>>>>>> drivers/gpu/drm/msm/dp/dp_mst_drm.c | 34 ++++++++++++++++++++++++++++++++++
>>>>>>>> drivers/gpu/drm/msm/dp/dp_mst_drm.h | 2 ++
>>>>>>>> 3 files changed, 48 insertions(+), 3 deletions(-)
>>>>>>>>
>>>>>>>> diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c
>>>>>>>> index abcab3ed43b6da5ef898355cf9b7561cd9fe0404..59720e1ad4b1193e33a4fc6aad0c401eaf9cbec8 100644
>>>>>>>> --- a/drivers/gpu/drm/msm/dp/dp_display.c
>>>>>>>> +++ b/drivers/gpu/drm/msm/dp/dp_display.c
>>>>>>>> @@ -500,9 +500,16 @@ static int msm_dp_display_handle_irq_hpd(struct msm_dp_display_private *dp)
>>>>>>>> static int msm_dp_display_usbpd_attention_cb(struct device *dev)
>>>>>>>> {
>>>>>>>> - int rc = 0;
>>>>>>>> - u32 sink_request;
>>>>>>>> struct msm_dp_display_private *dp = dev_get_dp_display_private(dev);
>>>>>>>> + struct msm_dp *msm_dp_display = &dp->msm_dp_display;
>>>>>>>> + u32 sink_request;
>>>>>>>> + int rc = 0;
>>>>>>>> +
>>>>>>>> + if (msm_dp_display->mst_active) {
>>>>>>>> + if (msm_dp_aux_is_link_connected(dp->aux) != ISR_DISCONNECTED)
>>>>>>>> + 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);
>>>>>>>> @@ -1129,8 +1136,10 @@ static irqreturn_t msm_dp_display_irq_thread(int irq, void *dev_id)
>>>>>>>> if (hpd_isr_status & DP_DP_HPD_UNPLUG_INT_MASK)
>>>>>>>> msm_dp_display_send_hpd_notification(dp, false);
>>>>>>>> - if (hpd_isr_status & DP_DP_IRQ_HPD_INT_MASK)
>>>>>>>> + if (hpd_isr_status & DP_DP_IRQ_HPD_INT_MASK) {
>>>>>>>> msm_dp_display_send_hpd_notification(dp, true);
>>>>>>>> + msm_dp_irq_hpd_handle(dp, 0);
>>>>>>>
>>>>>>> Why is it a part of this patch?? It has nothing to do with MST.
>>>>>>>
>>>>>> Emm ... maybe here we can directly call msm_dp_mst_display_hpd_irq..
>>>>>> I tried an alternative approach by calling the MST IRQ handler from
>>>>>> msm_dp_bridge_hpd_notify(). I expected that when hpd_isr_status ==
>>>>>> DP_DP_IRQ_HPD_INT_MASK, the hpd_link_status read in
>>>>>> msm_dp_bridge_hpd_notify() would be ISR_IRQ_HPD_PULSE_COUNT. That way, we
>>>>>> could handle both SST and MST interrupt paths in msm_dp_irq_hpd_handle().
>>>>>> However, hpd_link_status only reports ISR_CONNECTED. So I had to move the
>>>>>> MST IRQ handling into the IRQ thread. Do you have any suggestions on this?
>>>>>
>>>>> When are the link status bits updated? Please remember, we need to
>>>>> support all three cases:
>>>>>
>>>>> - Native DP, native DP HPD pin handling
>>>>> - Native DP, DP HPD pin not handled by the controller
>>>>> - DP AltMode, DP HPD pin not used at all
>>>>>
>>>>> In the second and the third cases we will not be getting the IRQs.
>>>>> Instead one of the next bridges (connector, EC, AltMode, etc.) will send
>>>>> the HPD event, which lands in the .hpd_notify() callback.
>>>>>
>>>> I added some logs and did some testing. I think
>>>> msm_dp_aux_is_link_connected() only shows the current HPD state. Since IRQ
>>>> HPD Pulse Count is very short, by the time we read REG_DP_DP_HPD_INT_STATUS
>>>> in the IRQ flow, the HPD state machine has usually already finished pulse
>>>> classification and returned to Connected.
>>>
>>> But the IRQ should be sticky and it should be readable from the status
>>> bits.
>>>
>> Yes... I’m not sure how this is handled on other platforms, but on LeMans
>> can not get IRQ status from msm_dp_aux_is_link_connected().
>
> Can we clarify that somehow? Maybe with the hardware team if it is
> uncear from the HPG?
>
>>> Note, in the USB-C AltMode case the HPD machine is not used at all.
>>>
>>>>
>>>> Because of that, the condition hpd_link_status == ISR_IRQ_HPD_PULSE_COUNT
>>>> will usually not be hit.
>>>>
>>>> do you have any suggestion that in how to distinguish between an IRQ event
>>>> and a plug event in .hpd_notify() better? We probably don’t want to
>>>> introduce another state machine.
>>>
>>> Then, I assume, currently there is no way to actually distinguish those.
>>> The easiest way to handle the replug would be to store the current
>>> "connected" status and verify if we are receiving "connected" while
>>> being connected or if it is a disconnected -> connected change.
>>>
>> Emm.. Currently, regardless of whether it is the native DP HPD (on LeMans)
>> or DP over Type‑C Alt Mode(test on Hamoa), a single plug event always
>> results in two or more identical .hpd_notify() callbacks.
>
> Could you please check, why? On Hamoa it might be because of the LTTPRs.
>
>> In other words, after the transition from disconnected → connected is
>> completed, there is still one more .hpd_notify() with connected → connected.
>> So it still can store "connected" to distinguish between an IRQ event and a
>> plug event from .hpd_notify()?
>
> I've sent a series, which explicitly tracks the IRQ events. Hope that
> helps.
>
Very thanks for sending the HPD IRQ series
https://patchwork.freedesktop.org/series/151522/. it very helpful for
TYPE-C MST.
I’ve been testing it locally based on HPD refator series, and TYPE-C
basic plug case works on my side (although with some local modify, maybe
now it is workaround). At least the IRQ is being delivered correctly now
and the simplest case works. It still need to do some additional testing.
There is a small question:
When do you plan to merge the HPD refactor series? and could you please
rebase the irq series patch to HPD refactor series ? so that i can keep
MST depend on those 2 series.
> Thoug storing of the "connected" state should help us to identify the
> long HPD pulse (wich should be treated as unplug & replug).
>
>> This is my current understanding. If this is incorrect, please feel free to
>> correct me. Thanks.
>> As an additional note, msm_dp_hpd_plug_handle runs through its full flow
>> twice for a single plug event. Also, the behavior I described above does not
>> include any MST-specific filtering codes.
>>> For a longer term (and granted that HDMI also has a notion of HPD pulse
>>> events) we might want to extend the DRM HPD API to pass through the "IRQ
>>> pulse" events as is (instead of converting those to
>>> connected-whilec-connected events).
>>>
>>> Let me sketch a draft for that.
>>>
>>
>
next prev parent reply other threads:[~2026-05-14 7:12 UTC|newest]
Thread overview: 141+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-25 14:15 [PATCH v3 00/38] drm/msm/dp: Add MST support for MSM chipsets Yongxing Mou
2025-08-25 14:15 ` [PATCH v3 01/38] drm/msm/dp: remove cached drm_edid from panel Yongxing Mou
2025-08-25 16:41 ` Dmitry Baryshkov
2025-09-02 8:42 ` Yongxing Mou
2025-09-02 9:36 ` Dmitry Baryshkov
2025-09-02 10:19 ` Yongxing Mou
2025-09-02 12:34 ` Dmitry Baryshkov
2025-11-25 6:37 ` Yongxing Mou
2025-11-26 0:44 ` Dmitry Baryshkov
2025-08-25 14:15 ` [PATCH v3 02/38] drm/msm/dp: remove dp_display's dp_mode and use dp_panel's instead Yongxing Mou
2025-08-25 16:50 ` Dmitry Baryshkov
2026-03-30 7:51 ` Yongxing Mou
2025-08-25 14:15 ` [PATCH v3 03/38] drm/msm/dp: break up dp_display_enable into two parts Yongxing Mou
2025-08-25 17:13 ` Dmitry Baryshkov
2026-03-30 7:53 ` Yongxing Mou
2025-08-25 14:15 ` [PATCH v3 04/38] drm/msm/dp: re-arrange dp_display_disable() into functional parts Yongxing Mou
2025-08-25 17:25 ` Dmitry Baryshkov
2025-08-25 14:15 ` [PATCH v3 05/38] drm/msm/dp: splite msm_dp_ctrl_config_ctrl() into link parts and stream parts Yongxing Mou
2025-08-25 17:28 ` Dmitry Baryshkov
2026-03-30 9:00 ` Yongxing Mou
2026-03-30 10:33 ` Dmitry Baryshkov
2026-03-30 11:26 ` Yongxing Mou
2025-08-25 14:15 ` [PATCH v3 06/38] drm/msm/dp: extract MISC1_MISC0 configuration into a separate function Yongxing Mou
2025-08-25 17:30 ` Dmitry Baryshkov
2025-08-25 14:15 ` [PATCH v3 07/38] drm/msm/dp: allow dp_ctrl stream APIs to use any panel passed to it Yongxing Mou
2025-08-25 17:32 ` Dmitry Baryshkov
2025-08-25 14:15 ` [PATCH v3 08/38] drm/msm/dp: move the pixel clock control to its own API Yongxing Mou
2025-08-25 17:34 ` Dmitry Baryshkov
2025-08-25 14:15 ` [PATCH v3 09/38] drm/msm/dp: split dp_ctrl_off() into stream and link parts Yongxing Mou
2025-08-25 17:35 ` Dmitry Baryshkov
2025-08-25 14:15 ` [PATCH v3 10/38] drm/msm/dp: make bridge helpers use dp_display to allow re-use Yongxing Mou
2025-08-25 14:15 ` [PATCH v3 11/38] drm/msm/dp: separate dp_display_prepare() into its own API Yongxing Mou
2025-08-25 17:39 ` Dmitry Baryshkov
2026-03-30 9:46 ` Yongxing Mou
2026-03-30 10:33 ` Dmitry Baryshkov
2025-08-25 14:15 ` [PATCH v3 12/38] drm/msm/dp: introduce max_streams for DP controller MST support Yongxing Mou
2025-08-25 17:42 ` Dmitry Baryshkov
2026-03-30 9:57 ` Yongxing Mou
2026-03-30 10:35 ` Dmitry Baryshkov
2026-03-30 11:32 ` Yongxing Mou
2026-03-30 11:42 ` Dmitry Baryshkov
2026-03-30 11:52 ` Yongxing Mou
2025-09-02 9:41 ` Dmitry Baryshkov
2026-03-30 9:59 ` Yongxing Mou
2026-03-30 10:36 ` Dmitry Baryshkov
2026-03-30 11:36 ` Yongxing Mou
2025-08-25 14:15 ` [PATCH v3 13/38] drm/msm/dp: introduce stream_id for each DP panel Yongxing Mou
2025-08-25 17:56 ` Dmitry Baryshkov
2026-03-30 10:00 ` Yongxing Mou
2025-08-25 14:16 ` [PATCH v3 14/38] drm/msm/dp: Add support for programming p1/p2/p3 register blocks Yongxing Mou
2025-08-25 17:59 ` Dmitry Baryshkov
2026-03-30 10:27 ` Yongxing Mou
2026-03-30 10:39 ` Dmitry Baryshkov
2025-08-25 14:16 ` [PATCH v3 15/38] drm/msm/dp: use stream_id to change offsets in dp_catalog Yongxing Mou
2025-08-25 18:01 ` Dmitry Baryshkov
2026-04-01 6:33 ` Yongxing Mou
2026-04-01 11:26 ` Dmitry Baryshkov
2025-08-25 14:16 ` [PATCH v3 16/38] drm/msm/dp: Add catalog support for 3rd/4th stream MST Yongxing Mou
2025-08-25 20:35 ` Dmitry Baryshkov
2026-04-01 6:40 ` Yongxing Mou
2025-08-25 14:16 ` [PATCH v3 17/38] drm/msm/dp: add support to send ACT packets for MST Yongxing Mou
2025-08-25 21:10 ` Dmitry Baryshkov
2026-04-01 6:44 ` Yongxing Mou
2026-04-01 6:47 ` Dmitry Baryshkov
2026-04-01 6:55 ` Yongxing Mou
2026-04-01 11:27 ` Dmitry Baryshkov
2026-04-09 11:33 ` Yongxing Mou
2026-04-09 14:08 ` Dmitry Baryshkov
2025-08-25 14:16 ` [PATCH v3 18/38] drm/msm/dp: Add support to enable MST in mainlink control Yongxing Mou
2025-08-25 21:24 ` Dmitry Baryshkov
2026-04-01 6:46 ` Yongxing Mou
2026-04-01 6:49 ` Dmitry Baryshkov
2025-08-25 14:16 ` [PATCH v3 19/38] drm/msm/dp: no need to update tu calculation for mst Yongxing Mou
2025-08-25 21:25 ` Dmitry Baryshkov
2025-08-25 14:16 ` [PATCH v3 20/38] drm/msm/dp: Add support for MST channel slot allocation Yongxing Mou
2025-08-25 21:52 ` Dmitry Baryshkov
2026-04-01 7:20 ` Yongxing Mou
2025-08-25 14:16 ` [PATCH v3 21/38] drm/msm/dp: Add support for sending VCPF packets in DP controller Yongxing Mou
2025-08-26 21:28 ` Dmitry Baryshkov
2025-08-25 14:16 ` [PATCH v3 22/38] drm/msm/dp: Always program MST_FIFO_CONSTANT_FILL for MST use cases Yongxing Mou
2025-08-25 21:55 ` Dmitry Baryshkov
2025-08-25 14:16 ` [PATCH v3 23/38] drm/msm/dp: abstract out the dp_display stream helpers to accept a panel Yongxing Mou
2025-08-25 22:18 ` Dmitry Baryshkov
2025-08-25 14:16 ` [PATCH v3 24/38] drm/msm/dp: replace power_on with active_stream_cnt for dp_display Yongxing Mou
2025-08-25 22:22 ` Dmitry Baryshkov
2025-08-25 14:16 ` [PATCH v3 25/38] drm/msm/dp: Mark the SST bridge disconnected when mst is active Yongxing Mou
2025-08-25 22:23 ` Dmitry Baryshkov
2025-08-25 14:16 ` [PATCH v3 26/38] drm/msm/dp: add an API to initialize MST on sink side Yongxing Mou
2025-08-26 9:26 ` Dmitry Baryshkov
2026-04-07 4:19 ` Yongxing Mou
2026-04-09 14:11 ` Dmitry Baryshkov
2025-08-25 14:16 ` [PATCH v3 27/38] drm/msm/dp: add dp_display_get_panel() to initialize DP panel Yongxing Mou
2025-08-26 16:33 ` Dmitry Baryshkov
2026-04-01 9:43 ` Yongxing Mou
2026-04-01 11:29 ` Dmitry Baryshkov
2025-08-25 14:16 ` [PATCH v3 28/38] drm/msm/dp: add dp_mst_drm to manage DP MST bridge operations Yongxing Mou
2025-08-26 17:36 ` Dmitry Baryshkov
2026-04-01 7:07 ` Yongxing Mou
2026-04-01 7:29 ` Dmitry Baryshkov
2026-04-07 7:42 ` Yongxing Mou
2026-04-09 14:13 ` Dmitry Baryshkov
2025-08-25 14:16 ` [PATCH v3 29/38] drm/msm/dp: add MST atomic check to msm_atomic_check() Yongxing Mou
2025-08-26 17:44 ` Dmitry Baryshkov
2025-08-25 14:16 ` [PATCH v3 30/38] drm/msm/dp: add connector abstraction for DP MST Yongxing Mou
2025-08-26 18:31 ` Dmitry Baryshkov
2026-04-09 4:01 ` Yongxing Mou
2026-04-09 14:50 ` Dmitry Baryshkov
2025-08-25 14:16 ` [PATCH v3 31/38] drm/msm/dp: add HPD callback for dp MST Yongxing Mou
2025-08-26 18:40 ` Dmitry Baryshkov
2026-03-24 13:04 ` Yongxing Mou
2026-03-24 19:30 ` Dmitry Baryshkov
2026-04-14 9:51 ` Yongxing Mou
2026-04-14 18:43 ` Dmitry Baryshkov
2026-04-15 10:32 ` Yongxing Mou
2026-04-19 0:29 ` Dmitry Baryshkov
2026-05-14 7:12 ` Yongxing Mou [this message]
2026-05-18 16:36 ` Dmitry Baryshkov
2026-05-21 12:29 ` Yongxing Mou
2026-05-22 11:56 ` Dmitry Baryshkov
2025-08-25 14:16 ` [PATCH v3 32/38] drm/msm/dp: propagate MST state changes to dp mst module Yongxing Mou
2025-08-26 18:43 ` Dmitry Baryshkov
2026-04-07 2:38 ` Yongxing Mou
2025-08-25 14:16 ` [PATCH v3 33/38] drm/msm: add support for MST non-blocking commits Yongxing Mou
2025-08-26 18:47 ` Dmitry Baryshkov
2026-04-07 2:36 ` Yongxing Mou
2025-08-25 14:16 ` [PATCH v3 34/38] drm/msm: initialize DRM MST encoders for DP controllers Yongxing Mou
2025-08-26 18:55 ` Dmitry Baryshkov
2026-04-07 2:35 ` Yongxing Mou
2026-04-09 14:50 ` Dmitry Baryshkov
2025-08-25 14:16 ` [PATCH v3 35/38] drm/msm/dp: initialize dp_mst module for each DP MST controller Yongxing Mou
2025-08-26 21:27 ` Dmitry Baryshkov
2026-04-07 2:33 ` Yongxing Mou
2025-08-25 14:16 ` [PATCH v3 36/38] drm/msm/dpu: use msm_dp_get_mst_intf_id() to get the intf id Yongxing Mou
2025-08-26 23:42 ` Dmitry Baryshkov
2026-04-07 2:32 ` Yongxing Mou
2026-04-09 14:52 ` Dmitry Baryshkov
2025-08-25 14:16 ` [PATCH v3 37/38] drm/msm/dp: fix the intf_type of MST interfaces Yongxing Mou
2025-08-27 1:18 ` Dmitry Baryshkov
2025-11-25 6:47 ` Yongxing Mou
2025-08-25 14:16 ` [PATCH v3 38/38] drm/msm/dp: Add MST stream support for SA8775P DP controller 0 and 1 Yongxing Mou
2025-08-27 1:19 ` 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=d4c5d26c-47f1-4e42-9852-d407982cb4f6@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=jessica.zhang@oss.qualcomm.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®