[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <f2cde221-a779-486a-9073-44228c320d8a@linaro.org>
Date: Mon, 19 Feb 2024 09:38:21 +0100
From: neil.armstrong@...aro.org
To: Martin Blumenstingl <martin.blumenstingl@...glemail.com>,
linux-amlogic@...ts.infradead.org, dri-devel@...ts.freedesktop.org
Cc: maarten.lankhorst@...ux.intel.com, mripard@...nel.org,
tzimmermann@...e.de, airlied@...il.com, daniel@...ll.ch,
khilman@...libre.com, jbrunet@...libre.com, adrian.larumbe@...labora.com,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org,
stable@...r.kernel.org, Steve Morvai <stevemorvai@...mail.com>
Subject: Re: [PATCH] drm/meson: Don't remove bridges which are created by
other drivers
On 15/02/2024 23:04, Martin Blumenstingl wrote:
> Stop calling drm_bridge_remove() for bridges allocated/managed by other
> drivers in the remove paths of meson_encoder_{cvbs,dsi,hdmi}.
> drm_bridge_remove() unregisters the bridge so it cannot be used
> anymore. Doing so for bridges we don't own can lead to the video
> pipeline not being able to come up after -EPROBE_DEFER of the VPU
> because we're unregistering a bridge that's managed by another driver.
> The other driver doesn't know that we have unregistered it's bridge
> and on subsequent .probe() we're not able to find those bridges anymore
> (since nobody re-creates them).
>
> This fixes probe errors on Meson8b boards with the CVBS outputs enabled.
>
> Fixes: 09847723c12f ("drm/meson: remove drm bridges at aggregate driver unbind time")
> Fixes: 42dcf15f901c ("drm/meson: add DSI encoder")
> Cc: stable@...r.kernel.org
> Reported-by: Steve Morvai <stevemorvai@...mail.com>
> Signed-off-by: Martin Blumenstingl <martin.blumenstingl@...glemail.com>
> ---
> This issue was reported by Steve off-list to me (thanks again for your
> patience and sorry it took so long)!
> The Meson8b VPU driver is not upstream, but the problematic code is.
> Meaning: This issue can also appear on SoCs which are supported
> upstream if the meson DRM driver probe has to be re-tried (with
> -EPROBE_DEFER). That's why I chose to Cc the stable list.
>
>
> drivers/gpu/drm/meson/meson_encoder_cvbs.c | 1 -
> drivers/gpu/drm/meson/meson_encoder_dsi.c | 1 -
> drivers/gpu/drm/meson/meson_encoder_hdmi.c | 1 -
> 3 files changed, 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/meson/meson_encoder_cvbs.c b/drivers/gpu/drm/meson/meson_encoder_cvbs.c
> index 3f73b211fa8e..3407450435e2 100644
> --- a/drivers/gpu/drm/meson/meson_encoder_cvbs.c
> +++ b/drivers/gpu/drm/meson/meson_encoder_cvbs.c
> @@ -294,6 +294,5 @@ void meson_encoder_cvbs_remove(struct meson_drm *priv)
> if (priv->encoders[MESON_ENC_CVBS]) {
> meson_encoder_cvbs = priv->encoders[MESON_ENC_CVBS];
> drm_bridge_remove(&meson_encoder_cvbs->bridge);
> - drm_bridge_remove(meson_encoder_cvbs->next_bridge);
> }
> }
> diff --git a/drivers/gpu/drm/meson/meson_encoder_dsi.c b/drivers/gpu/drm/meson/meson_encoder_dsi.c
> index 3f93c70488ca..311b91630fbe 100644
> --- a/drivers/gpu/drm/meson/meson_encoder_dsi.c
> +++ b/drivers/gpu/drm/meson/meson_encoder_dsi.c
> @@ -168,6 +168,5 @@ void meson_encoder_dsi_remove(struct meson_drm *priv)
> if (priv->encoders[MESON_ENC_DSI]) {
> meson_encoder_dsi = priv->encoders[MESON_ENC_DSI];
> drm_bridge_remove(&meson_encoder_dsi->bridge);
> - drm_bridge_remove(meson_encoder_dsi->next_bridge);
> }
> }
> diff --git a/drivers/gpu/drm/meson/meson_encoder_hdmi.c b/drivers/gpu/drm/meson/meson_encoder_hdmi.c
> index 25ea76558690..c4686568c9ca 100644
> --- a/drivers/gpu/drm/meson/meson_encoder_hdmi.c
> +++ b/drivers/gpu/drm/meson/meson_encoder_hdmi.c
> @@ -474,6 +474,5 @@ void meson_encoder_hdmi_remove(struct meson_drm *priv)
> if (priv->encoders[MESON_ENC_HDMI]) {
> meson_encoder_hdmi = priv->encoders[MESON_ENC_HDMI];
> drm_bridge_remove(&meson_encoder_hdmi->bridge);
> - drm_bridge_remove(meson_encoder_hdmi->next_bridge);
> }
> }
Reviewed-by: Neil Armstrong <neil.armstrong@...aro.org>
Thanks a lot for the patch!
Neil
Powered by blists - more mailing lists