All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joonhoe Kim <26rote@gmail.com>
To: Yongxing Mou <yongxing.mou@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>,
	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: Sun,  8 Nov 2026 10:14:50 +0900	[thread overview]
Message-ID: <20261108011450.4428-1-26rote@gmail.com> (raw)
In-Reply-To: <20260929-msm-dp-mst-v7-0-4b81473185e7@oss.qualcomm.com>

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.

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?

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.

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.

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.

[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

  parent reply	other threads:[~2026-11-08  1:14 UTC|newest]

Thread overview: 86+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-29  4:25 [PATCH v7 00/35] drm/msm/dp: Add MST support for MSM chipsets 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-09-29  4:49   ` sashiko-bot
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-09-29  4:44   ` sashiko-bot
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-09-29  4:48   ` sashiko-bot
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-09-29  4:42   ` sashiko-bot
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-11-11 14:22           ` Dmitry Baryshkov
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:49   ` sashiko-bot
2026-10-01 10:34     ` Dmitry Baryshkov
2026-10-12  9:08       ` Yongxing Mou
2026-10-12 12:24         ` Dmitry Baryshkov
2026-10-15 10:29           ` Yongxing Mou
2026-09-29  4:25 ` [PATCH v7 13/35] drm/msm/dp: add support for MST channel slot allocation Yongxing Mou
2026-09-29  4:42   ` sashiko-bot
2026-10-01 10:52   ` Dmitry Baryshkov
2026-10-15 13:24     ` Yongxing Mou
2026-11-08 19:20       ` Dmitry Baryshkov
2026-11-10  9:40         ` Yongxing Mou
2026-11-11 14:22           ` 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:44   ` sashiko-bot
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:43   ` sashiko-bot
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:39   ` sashiko-bot
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:44   ` sashiko-bot
2026-09-29  4:25 ` [PATCH v7 18/35] drm/msm/dp: introduce dp_mst_drm module Yongxing Mou
2026-09-29  4:48   ` sashiko-bot
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:48   ` sashiko-bot
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:46   ` sashiko-bot
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:54   ` sashiko-bot
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:51   ` sashiko-bot
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:55   ` sashiko-bot
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:58   ` sashiko-bot
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
2026-09-29  4:54   ` sashiko-bot
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:54   ` sashiko-bot
2026-09-29  4:25 ` [PATCH v7 35/35] soc: qcom: pmic-glink-altmode: skip retimer reset on DP IRQ Yongxing Mou
2026-09-29  4:55   ` sashiko-bot
2026-10-03  0:46 ` [PATCH v7 00/35] drm/msm/dp: Add MST support for MSM chipsets Dmitry Baryshkov
2026-10-27 20:37 ` Robert Meijers
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 [this message]
2026-11-10  4:14   ` Yongxing Mou

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=20261108011450.4428-1-26rote@gmail.com \
    --to=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 \
    --cc=yongxing.mou@oss.qualcomm.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.