All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Yongxing Mou" <yongxing.mou@oss.qualcomm.com>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH v7 08/15] drm/msm/dp: break up dp_display_enable into two parts
Date: Tue, 09 Jun 2026 09:59:50 +0000	[thread overview]
Message-ID: <20260609095951.B0A1E1F00893@smtp.kernel.org> (raw)
In-Reply-To: <20260609-dp_mstclean-v7-8-ea04113e8233@oss.qualcomm.com>

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Critical] Missing error return when sink_count == 0 leads to unclocked hardware accesses and kernel panic.
- [High] Missing early return when link training fails causes stream enablement on a broken link.
--

commit b8a02a483af0ac409e7c1790ebfbe296067ea49d
Author: Abhinav Kumar <quic_abhinavk@quicinc.com>

drm/msm/dp: break up dp_display_enable into two parts

This commit splits dp_display_enable() into two parts: prepare and
enable APIs. This allows inserting MST payload functions between enabling
stream clocks and programming the registers.

> diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c
> index 155beefdfdef2..2cf4c984c7ca7 100644
> --- a/drivers/gpu/drm/msm/dp/dp_display.c
> +++ b/drivers/gpu/drm/msm/dp/dp_display.c
[ ... ]
> @@ -617,7 +617,40 @@ static int msm_dp_display_set_mode(struct msm_dp *msm_dp_display,
>  	return 0;
>  }
>  
> -static int msm_dp_display_enable(struct msm_dp_display_private *dp, bool force_link_train)
> +static int msm_dp_display_prepare_link(struct msm_dp_display_private *dp)
> +{
> +	struct msm_dp *msm_dp_display = &dp->msm_dp_display;
> +	int rc = 0;
> +	bool force_link_train = false;
> +
> +	drm_dbg_dp(dp->drm_dev, "sink_count=%d\n", dp->link->sink_count);
> +
> +	if (msm_dp_display->is_edp)
> +		msm_dp_hpd_plug_handle(dp);
> +
> +	rc = pm_runtime_resume_and_get(&msm_dp_display->pdev->dev);
> +	if (rc) {
> +		DRM_ERROR("failed to pm_runtime_resume\n");
> +		return rc;
> +	}
> +
> +	if (dp->link->sink_count == 0)
> +		return rc;

[Severity: Critical]
Does this unintentionally allow the enable sequence to continue when the
sink_count is 0?

Since pm_runtime_resume_and_get() succeeded, rc is 0 here. Returning 0
causes the caller, msm_dp_bridge_atomic_enable(), to continue directly into
msm_dp_display_enable() because the prepare step appears successful:

msm_dp_bridge_atomic_enable() {
    ...
    rc = msm_dp_display_prepare_link(dp);
    if (rc) {
        DRM_ERROR("DP display prepare failed, rc=%d\n", rc);
        return;
    }

    rc = msm_dp_display_enable(dp);
    ...
}

Because msm_dp_ctrl_on_link() was skipped, the DP link clocks are not
enabled. Will the subsequent call to msm_dp_ctrl_on_stream() within
msm_dp_display_enable() then perform an unclocked hardware access when
writing to REG_DP_STATE_CTRL, potentially triggering a bus stall and kernel
panic?

> +
> +	if (!msm_dp_display->power_on) {
> +		msm_dp_display_host_phy_init(dp);
> +		force_link_train = true;
> +	}
> +
> +	rc = msm_dp_ctrl_on_link(dp->ctrl);
> +	if (rc)
> +		DRM_ERROR("Failed link training (rc=%d)\n", rc);
> +	// TODO: schedule drm_connector_set_link_status_property()
> +
> +	return msm_dp_ctrl_prepare_stream_on(dp->ctrl, force_link_train);
> +}

[Severity: High]
If msm_dp_ctrl_on_link() fails, does this mask the failure and force the
pipeline to stream video over a broken link?

In the original code, an error from msm_dp_ctrl_on_link() would explicitly
return and abort the atomic enable sequence. Here, the error is logged, but
execution falls through to msm_dp_ctrl_prepare_stream_on(), which often
returns 0. 

If it returns 0, the caller receives a success status and proceeds to
configure and start the video stream on an uninitialized link.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260609-dp_mstclean-v7-0-ea04113e8233@oss.qualcomm.com?part=8

  reply	other threads:[~2026-06-09  9:59 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-09  9:46 [PATCH v7 00/15] drm/msm/dp: Prerequisite cleanup for upcoming MST support Yongxing Mou
2026-06-09  9:46 ` [PATCH v7 01/15] drm/msm/dp: remove cached drm_edid from panel Yongxing Mou
2026-06-09 10:04   ` sashiko-bot
2026-06-09  9:46 ` [PATCH v7 02/15] drm/msm/dp: drop deprecated .mode_set() and use .atomic_enable Yongxing Mou
2026-06-09 10:06   ` sashiko-bot
2026-06-09  9:46 ` [PATCH v7 03/15] drm/msm/dp: move mode setup into msm_dp_panel_init_panel_info() Yongxing Mou
2026-06-09  9:46 ` [PATCH v7 04/15] drm/msm/dp: split msm_dp_ctrl_config_ctrl() into link parts and stream parts Yongxing Mou
2026-06-09 10:04   ` sashiko-bot
2026-06-09  9:46 ` [PATCH v7 05/15] drm/msm/dp: extract MISC1_MISC0 configuration into a separate function Yongxing Mou
2026-06-09  9:46 ` [PATCH v7 06/15] drm/msm/dp: split link setup from source params Yongxing Mou
2026-06-09 10:05   ` sashiko-bot
2026-06-09  9:46 ` [PATCH v7 07/15] drm/msm/dp: move the pixel clock control to its own API Yongxing Mou
2026-06-09 10:04   ` sashiko-bot
2026-06-09  9:46 ` [PATCH v7 08/15] drm/msm/dp: break up dp_display_enable into two parts Yongxing Mou
2026-06-09  9:59   ` sashiko-bot [this message]
2026-06-09  9:46 ` [PATCH v7 09/15] drm/msm/dp: re-arrange dp_display_disable() into functional parts Yongxing Mou
2026-06-09 10:17   ` sashiko-bot
2026-06-09  9:46 ` [PATCH v7 10/15] drm/msm/dp: allow dp_ctrl stream APIs to use any panel passed to it Yongxing Mou
2026-06-09  9:46 ` [PATCH v7 11/15] drm/msm/dp: split dp_ctrl_off() into stream and link parts Yongxing Mou
2026-06-09 10:04   ` sashiko-bot
2026-06-09  9:46 ` [PATCH v7 12/15] drm/msm/dp: simplify link and clock disable sequence Yongxing Mou
2026-06-09 10:02   ` sashiko-bot
2026-06-09  9:46 ` [PATCH v7 13/15] drm/msm/dp: make bridge helpers use dp_display to allow re-use Yongxing Mou
2026-06-09 10:09   ` sashiko-bot
2026-06-09  9:46 ` [PATCH v7 14/15] drm/msm/dp: separate dp_display_prepare() into its own API Yongxing Mou
2026-06-09 10:10   ` sashiko-bot
2026-06-09  9:46 ` [PATCH v7 15/15] drm/msm/dp: pass panel to display enable/disable helpers Yongxing Mou
2026-06-09 10:13   ` sashiko-bot

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=20260609095951.B0A1E1F00893@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 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.