mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
To: Joonhoe Kim <26rote@gmail.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>,
	Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>,
	Mahadevan P <mahadevan.p@oss.qualcomm.com>,
	linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org,
	freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v7 00/35] drm/msm/dp: Add MST support for MSM chipsets
Date: Tue, 10 Nov 2026 12:14:17 +0800	[thread overview]
Message-ID: <91e543e8-3e4a-464f-86cf-a9ac95ac84c8@oss.qualcomm.com> (raw)
In-Reply-To: <20261108011450.4428-1-26rote@gmail.com>



On 11/8/2026 9:14 AM, Joonhoe Kim wrote:
> I tested this series on the Lenovo Y700 Gen 5 (TB323FU, Kaanapali):
> DP0 over USB-C (pmic_glink altmode) to a dual-screen monitor with a
> built-in Realtek MST hub (two 1920x1200@60 sinks), with the built-in
> dual-DSI 1904x3040 panel also on. The base is Linux v7.3, not
> linux-next, with Dmitry's "drm: handle IRQ_HPD events correctly" v8
> [1] (the cover letter lists v5) and this series. A few hunks were
> adapted to other patches I carry. On hpd v8 the second hunk of 34/35 is
> not needed, because msm_dp_bridge_hpd_notify() already handles the
> plug before IRQ_HPD.
> 
> With three local changes, both screens show separate desktops next to
> the built-in panel and come back after s2idle.
> 
> 1. The plugged_lock / mode_config.mutex deadlock that Sashiko reported
>     on 32/35 happens at boot with the monitor attached. The stacks are
>     in my reply there [2]. I dropped 32/35.
> 
>  From the cover letter:
> 
>> With 4x4K monitors, due to lack of layer mixers that combination will not
>> work but this can be supported as well after some rework on the DPU side.
> 
Thanks , will  dropped in the next version, same as you did locally. It 
not needed
> 2. With all three displays on, the commit for the second MST screen
>     fails:
> 
>     [drm:_dpu_rm_check_lm_and_get_connected_blks] [dpu error]LM_4, invalid DSPP_-1
>     [drm:_dpu_rm_check_lm_and_get_connected_blks] [dpu error]LM_5, invalid DSPP_-1
>     [drm:_dpu_rm_check_lm_and_get_connected_blks] [dpu error]LM_6, invalid DSPP_-1
>     [drm:_dpu_rm_check_lm_and_get_connected_blks] [dpu error]LM_7, invalid DSPP_-1
>     [drm:_dpu_rm_make_reservation] [dpu error]unable to find appropriate mixers
>     [drm:dpu_rm_reserve] [dpu error]failed to reserve hw resources: -119
> 
>     The compositor sets a CTM on every CRTC, identity when unused
>     (adding or removing a CTM later forces a modeset that reassigns
>     resources), so each CRTC asks for one DSPP per LM. Kaanapali has
>     DSPPs only on LM 0-3. The built-in panel takes LM 0-1, and the
>     first MST screen takes LM 2-3 because 1920 > MAX_HDISPLAY_SPLIT
>     (1080), which leaves no DSPP for the second MST screen.
> 
>     This is a DPU topology issue rather than an MST one; MST just makes
>     three active CRTCs easy to reach. Locally, a CRTC that needs DSPPs
>     uses one LM up to max_mixer_width (2560) instead of
>     MAX_HDISPLAY_SPLIT, and the two MST screens then get LM 2 and LM 3.
>     This touches the same decision as Mahadevan's LM rework [3], which
>     drops max_mixer_width, so I have not sent it as a patch.
> 
>     Mahadevan, should a CRTC that needs DSPPs prefer a single LM
>     whenever the mode fits in one, on top of your rework?
> 
Yes, this issue will be solved in another series.
> 3. s2idle with both MST screens active hangs in resume. The console is
>     suspended; the printk ring in the RAM dump shows devices resuming,
>     nothing from DRM, and then "watchdog0: pretimeout event". The
>     rtcwake task is stuck in an AUX transfer in resume, while the MST
>     stream is re-enabled:
> 
>      wait_for_completion_timeout
>      msm_dp_aux_cmd_fifo_tx
>      msm_dp_aux_transfer
>      drm_dp_dpcd_access
>      drm_dp_dpcd_write
>      drm_dp_dpcd_write_data
>      drm_dp_dpcd_write_payload
>      drm_dp_create_payload_at_dfp
>      drm_dp_add_payload_part1
>      msm_dp_mst_stream_enable
>      dpu_encoder_mst_atomic_enable
>      drm_atomic_helper_commit_encoder_bridge_enable
>      drm_atomic_helper_commit_modeset_enables
>      ...
>      drm_atomic_helper_resume
>      drm_mode_config_helper_resume
>      msm_kms_pm_complete
>      dpm_complete
> 
>     Several kworkers wait for a modeset lock in
>     drm_self_refresh_helper_entry_work().
> 
>     At the hang active_stream_cnt is 0 but link_ready is 1, so
>     msm_dp_display_prepare_link() returns early and the payload write
>     goes over a link that system suspend has powered down
>     (aux->retry_cnt, the count of consecutive AUX failures, was 107).
>     While mst_active is set,
>     msm_dp_mst_stream_post_disable() does not unprepare the link after
>     the last stream, so nothing tears it down for system suspend.
> 
>     The series also does not call drm_dp_mst_topology_mgr_suspend() or
>     drm_dp_mst_topology_mgr_resume(); i915, nouveau and amdgpu call
>     them around their atomic suspend and resume.
> 
>     Locally, the DP system-suspend callback calls
>     drm_dp_mst_topology_mgr_suspend() and, when MST is active, tears
>     the link down through the unprepare path (clearing link_ready)
>     before pm_runtime_force_suspend(). On resume, after
>     pm_runtime_force_resume(), it re-inits the PHY and AUX and calls
>     drm_dp_mst_topology_mgr_resume(mgr, true); if that fails, it turns
>     MST off and sends a hotplug event. With that, 3 of 3 RTC-woken
>     s2idle cycles resumed with both screens on. After the third the
>     topology was rebuilt (the MST connectors came back under new
>     names). I can send this as a patch on top of the next version of
>     this series if you want it.
> 
Please feel free to send it. I tried to add these functions, but I 
didn't have enough time to fully test the code, so I removed them before 
sending the new version.
> Unplug and replug mostly works. When it failed (3 of 6 sequences),
> the hub had dropped HPD or stopped answering AUX right after the
> plug, and one or both screens stayed dark; the stock Android kernel
> shows similar failures with this monitor.
> 
Actually, link training is not always stable. It may be related to the 
dongle, and we need to improve it further.
> Not tested: daisy chain, 4K, audio over MST (no audio sink here).
> If it helps, I can test the next version of this series on this
> device.
> 
Thank you for all the testing and feedback. These are all real issues. 
Although we may not be able to fix all of them in the next release, your 
feedback is really helpful.
> [1] https://lore.kernel.org/all/20261024-hpd-irq-events-v8-0-6ee949e7a384@oss.qualcomm.com/
> [2] https://lore.kernel.org/all/20261108010724.4061-1-26rote@gmail.com/
> [3] https://lore.kernel.org/all/20261008-lm_fixes_final-v4-0-fa986071c3c1@oss.qualcomm.com/
> 
> Thanks,
> Joonhoe Kim


      reply	other threads:[~2026-11-10  4:14 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-29  4:25 Yongxing Mou
2026-09-29  4:25 ` [PATCH v7 01/35] drm/msm/dp: move link-level teardown from display_disable to display_unprepare Yongxing Mou
2026-10-01 10:11   ` Dmitry Baryshkov
2026-09-29  4:25 ` [PATCH v7 02/35] drm/msm/dp: Pass panel to msm_dp_ctrl_config_msa() Yongxing Mou
2026-10-01 10:13   ` Dmitry Baryshkov
2026-09-29  4:25 ` [PATCH v7 03/35] drm/msm/dp: drop redundant config_ctrl_link() from msm_dp_ctrl_on_stream() Yongxing Mou
2026-10-01 10:13   ` Dmitry Baryshkov
2026-09-29  4:25 ` [PATCH v7 04/35] drm/msm/dp: introduce stream_id for each DP panel Yongxing Mou
2026-10-01 10:23   ` Dmitry Baryshkov
2026-09-29  4:25 ` [PATCH v7 05/35] drm/msm/dp: add support for programming p1/p2/p3 register blocks Yongxing Mou
2026-10-01 10:24   ` Dmitry Baryshkov
2026-09-29  4:25 ` [PATCH v7 06/35] drm/msm/dp: add MST stream register definitions Yongxing Mou
2026-10-01 10:26   ` Dmitry Baryshkov
2026-09-29  4:25 ` [PATCH v7 07/35] drm/msm/dp: add stream-aware link register accessors Yongxing Mou
2026-10-01 10:26   ` Dmitry Baryshkov
2026-09-29  4:25 ` [PATCH v7 08/35] drm/msm/dp: add support to send ACT packets for MST Yongxing Mou
2026-10-01 10:32   ` Dmitry Baryshkov
2026-10-12  8:44     ` Yongxing Mou
2026-10-12 12:23       ` Dmitry Baryshkov
2026-10-15 10:28         ` Yongxing Mou
2026-09-29  4:25 ` [PATCH v7 09/35] drm/msm/dp: add support to enable MST in mainlink control Yongxing Mou
2026-09-29  4:25 ` [PATCH v7 10/35] drm/msm/dp: no need to update tu calculation for mst Yongxing Mou
2026-09-29  4:25 ` [PATCH v7 11/35] drm/msm/dp: always program MST_FIFO_CONSTANT_FILL for MST use cases Yongxing Mou
2026-09-29  4:25 ` [PATCH v7 12/35] drm/msm/dp: add support for sending VCPF packets in DP controller Yongxing Mou
2026-09-29  4:25 ` [PATCH v7 13/35] drm/msm/dp: add support for MST channel slot allocation Yongxing Mou
2026-10-01 10:52   ` Dmitry Baryshkov
2026-10-15 13:24     ` Yongxing Mou
2026-11-08 19:20       ` Dmitry Baryshkov
2026-09-29  4:25 ` [PATCH v7 14/35] drm/msm/dp: replace power_on with active_stream_cnt Yongxing Mou
2026-09-29  4:25 ` [PATCH v7 15/35] drm/msm/dp: factor out _helper variants of bridge ops accepting a panel Yongxing Mou
2026-09-29  4:25 ` [PATCH v7 16/35] drm/msm/dp: add link_ready to manage link-level operations Yongxing Mou
2026-09-29  4:25 ` [PATCH v7 17/35] drm/msm/dp: add msm_dp_display_get_panel() to initialize DP panel Yongxing Mou
2026-09-29  4:25 ` [PATCH v7 18/35] drm/msm/dp: introduce dp_mst_drm module Yongxing Mou
2026-09-29  4:25 ` [PATCH v7 19/35] drm/msm/dp: add MST connector creation and topology callbacks Yongxing Mou
2026-09-29  4:25 ` [PATCH v7 20/35] drm/msm/dpu: pass msm_display_info to dpu_encoder_get_intf() Yongxing Mou
2026-09-29  4:25 ` [PATCH v7 21/35] drm/msm/dpu: use stream_id to select MST interfaces Yongxing Mou
2026-09-29  4:25 ` [PATCH v7 22/35] drm/msm/dpu: add per-stream MST encoders Yongxing Mou
2026-09-29  4:25 ` [PATCH v7 23/35] drm/msm/dp: move link capabilities to dp_link Yongxing Mou
2026-09-29  4:25 ` [PATCH v7 24/35] drm/msm/dp: add atomic stream handling for MST Yongxing Mou
2026-09-29  4:25 ` [PATCH v7 25/35] drm/bridge_connector: suppress hotplug for IRQ_HPD without status changes Yongxing Mou
2026-09-29  4:25 ` [PATCH v7 26/35] drm/bridge_connector: avoid detect-based HPD notifications for DisplayPort Yongxing Mou
2026-09-29  4:25 ` [PATCH v7 27/35] drm/msm/dp: add HPD callback for dp MST Yongxing Mou
2026-09-29  4:25 ` [PATCH v7 28/35] drm/msm/dp: wire MST helpers into atomic check and commit paths Yongxing Mou
2026-09-29  4:25 ` [PATCH v7 29/35] drm/msm/dp: mark the SST bridge disconnected when mst is active Yongxing Mou
2026-09-29  4:25 ` [PATCH v7 30/35] drm/msm/dp: enable MST on capable sinks Yongxing Mou
2026-09-29  4:25 ` [PATCH v7 31/35] drm/msm/dp: mark the SST bridge disconnected when an MST-capable sink is present Yongxing Mou
2026-09-29  4:25 ` [PATCH v7 32/35] drm/msm/dp: mark the SST connector disconnected when MST is enabled Yongxing Mou
     [not found]   ` <20260929045429.A51801F00893@smtp.kernel.org>
2026-11-08  1:07     ` Joonhoe Kim
2026-09-29  4:25 ` [PATCH v7 33/35] drm/msm/dp: wake threaded handler for HPD IRQs Yongxing Mou
2026-09-29  4:25 ` [PATCH v7 34/35] drm/msm/dp: order IRQ HPD handling with plug state changes Yongxing Mou
2026-09-29  4:25 ` [PATCH v7 35/35] soc: qcom: pmic-glink-altmode: skip retimer reset on DP IRQ Yongxing Mou
2026-10-03  0:46 ` [PATCH v7 00/35] drm/msm/dp: Add MST support for MSM chipsets Dmitry Baryshkov
2026-10-27 21:04 ` Robert Meijers
2026-11-08 19:25   ` Dmitry Baryshkov
2026-11-10  4:14     ` Yongxing Mou
2026-11-10  4:14   ` Yongxing Mou
2026-11-08  1:14 ` Joonhoe Kim
2026-11-10  4:14   ` Yongxing Mou [this message]

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=91e543e8-3e4a-464f-86cf-a9ac95ac84c8@oss.qualcomm.com \
    --to=yongxing.mou@oss.qualcomm.com \
    --cc=26rote@gmail.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=mahadevan.p@oss.qualcomm.com \
    --cc=marijn.suijten@somainline.org \
    --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®