From: sashiko-bot@kernel.org
To: "Yongxing Mou" <yongxing.mou@oss.qualcomm.com>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH v7 19/35] drm/msm/dp: add MST connector creation and topology callbacks
Date: Tue, 29 Sep 2026 04:48:58 +0000 [thread overview]
Message-ID: <20260929044859.178FD1F000FF@smtp.kernel.org> (raw)
In-Reply-To: <20260929-msm-dp-mst-v7-19-4b81473185e7@oss.qualcomm.com>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] drm/msm/dp: atomic state corruption in msm_dp_mst_atomic_best_encoder()
- [High] drm/msm/dp: pm_runtime misuse on wrong device in msm_dp_mst_connector_detect()
--
commit af860d77fac53017d8dd8356f2f4d0aafac13cf3
Author: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
drm/msm/dp: add MST connector creation and topology callbacks
This commit registers the add_connector topology callback with the DRM MST
manager to dynamically create DRM connectors for MST ports. It also implements
the necessary connector operations and DRM MST callbacks to expose MST sink
ports.
> diff --git a/drivers/gpu/drm/msm/dp/dp_mst_drm.c b/drivers/gpu/drm/msm/dp/dp_mst_drm.c
> index 5d22aa34c521c..169b34f985c0e 100644
> --- a/drivers/gpu/drm/msm/dp/dp_mst_drm.c
> +++ b/drivers/gpu/drm/msm/dp/dp_mst_drm.c
[ ... ]
> +static int
> +msm_dp_mst_connector_detect(struct drm_connector *connector,
> + struct drm_modeset_acquire_ctx *ctx,
> + bool force)
> +{
> + struct msm_dp_mst_connector *mst_conn = to_dp_mst_connector(connector);
> + struct msm_dp_mst *mst = mst_conn->dp_mst;
> + struct msm_dp *dp_display = mst->msm_dp;
> + struct device *dev = dp_display->drm_dev->dev;
[Severity: High]
Does this use the correct device for PM runtime?
By using the top-level DRM device (dp_display->drm_dev->dev), it appears the
detect function acquires PM references for the MDSS parent instead of the DP
controller (dp_display->pdev->dev).
> + enum drm_connector_status status = connector_status_disconnected;
> + int ret;
> +
> + ret = pm_runtime_resume_and_get(dev);
[Severity: High]
Can this cause excessive PHY teardowns during detection?
Because the DP controller's PM is not explicitly held open, each underlying
AUX transfer during drm_dp_mst_detect_port() will individually resume and
synchronously suspend the DP controller (via msm_dp_aux_transfer()).
Could this tear down and reinitialize the DP PHY for every single AUX message,
causing overhead and risking link training or topology discovery failures?
> + if (ret < 0)
> + return status;
> +
> + if (dp_display->mst_active)
> + status = drm_dp_mst_detect_port(connector,
> + ctx, &mst->mst_mgr, mst_conn->mst_port);
> +
> + pm_runtime_put_autosuspend(dev);
> +
> + return status;
> +}
[ ... ]
> +static struct drm_encoder *
> +msm_dp_mst_atomic_best_encoder(struct drm_connector *connector, struct drm_atomic_commit *state)
> +{
> + struct msm_dp_mst_connector *mst_conn = to_dp_mst_connector(connector);
> + struct msm_dp_mst *mst = mst_conn->dp_mst;
> + struct drm_connector_state *conn_state;
> + struct drm_connector *iter;
> + struct drm_connector_list_iter conn_iter;
> + u32 stream_mask = 0;
> + u32 i;
> +
> + conn_state = drm_atomic_get_new_connector_state(state, connector);
> + if (!conn_state)
> + return NULL;
> +
> + if (conn_state->best_encoder)
> + return conn_state->best_encoder;
> +
> + drm_connector_list_iter_begin(connector->dev, &conn_iter);
> + drm_for_each_connector_iter(iter, &conn_iter) {
> + struct drm_connector_state *peer_state;
> + int stream_id;
> +
> + if (iter == connector ||
> + iter->funcs != &msm_dp_drm_mst_connector_funcs ||
> + to_dp_mst_connector(iter)->dp_mst != mst)
> + continue;
> +
> + peer_state = drm_atomic_get_new_connector_state(state, iter) ?: iter->state;
> + if (!peer_state || !peer_state->crtc || !peer_state->best_encoder)
> + continue;
> +
> + stream_id = msm_dp_mst_encoder_stream_id(mst, peer_state->best_encoder);
> + if (stream_id >= 0 && stream_id < mst->max_streams)
> + stream_mask |= BIT(stream_id);
> + }
> + drm_connector_list_iter_end(&conn_iter);
> +
> + for (i = 0; i < mst->max_streams; i++) {
> + if (!(stream_mask & BIT(i))) {
> + conn_state->best_encoder = mst->mst_encoders[i].enc;
[Severity: High]
Does directly modifying the atomic state here hide the routing change from the
DRM core?
By overwriting conn_state->best_encoder, the update_connector_routing() check
if (new_encoder == new_connector_state->best_encoder) evaluates to true and
returns early.
This causes steal_encoder() to be skipped, leaving the old CRTC's
encoder_mask with the old encoder, and connectors_changed is never set on
the new CRTC. Could this leave the DRM core's atomic state tracking
corrupted and cause hardware conflicts where multiple connectors claim the
same encoder?
> + return mst->mst_encoders[i].enc;
> + }
> + }
> +
> + return NULL;
> +}
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260929-msm-dp-mst-v7-0-4b81473185e7@oss.qualcomm.com?part=19
next prev parent reply other threads:[~2026-09-29 4:49 UTC|newest]
Thread overview: 67+ 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-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-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-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 [this message]
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-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
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=20260929044859.178FD1F000FF@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=sashiko-reviews@lists.linux.dev \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox