dri-devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Luca Ceresoli <luca.ceresoli@bootlin.com>
To: Alexander Stein <alexander.stein@ew.tq-group.com>
Cc: Andrzej Hajda <andrzej.hajda@intel.com>,
	Neil Armstrong <neil.armstrong@linaro.org>,
	Robert Foss <rfoss@kernel.org>,
	Laurent Pinchart <Laurent.pinchart@ideasonboard.com>,
	Jonas Karlman <jonas@kwiboo.se>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	David Airlie <airlied@gmail.com>, Daniel Vetter <daniel@ffwll.ch>,
	dri-devel@lists.freedesktop.org
Subject: Re: [PATCH 1/1] drm/bridge: ti-sn65dsi83: Fix enable error path
Date: Thu, 22 Feb 2024 16:36:37 +0100	[thread overview]
Message-ID: <20240222163637.12165adf@booty> (raw)
In-Reply-To: <20230504065316.2640739-1-alexander.stein@ew.tq-group.com>

Hello Alexander,

On Thu,  4 May 2023 08:53:16 +0200
Alexander Stein <alexander.stein@ew.tq-group.com> wrote:

> If PLL locking failed, the regulator needs to be disabled again.
> 
> Fixes: 5664e3c907e2 ("drm/bridge: ti-sn65dsi83: Add vcc supply regulator support")
> Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
> ---
>  drivers/gpu/drm/bridge/ti-sn65dsi83.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi83.c b/drivers/gpu/drm/bridge/ti-sn65dsi83.c
> index 75286c9afbb9..1f5c07989e2b 100644
> --- a/drivers/gpu/drm/bridge/ti-sn65dsi83.c
> +++ b/drivers/gpu/drm/bridge/ti-sn65dsi83.c
> @@ -478,6 +478,7 @@ static void sn65dsi83_atomic_enable(struct drm_bridge *bridge,
>  		dev_err(ctx->dev, "failed to lock PLL, ret=%i\n", ret);
>  		/* On failure, disable PLL again and exit. */
>  		regmap_write(ctx->regmap, REG_RC_PLL_EN, 0x00);
> +		regulator_disable(ctx->vcc);
>  		return;
>  	}

I'm reviving this thread as I've been investigating a bug that appears
related to this patch.

Symptom: with a v6.8-rc5 kernel, if PLL fails locking, later on during
atomic disable I get:

[   41.065198] ------------[ cut here ]------------
[   41.069823] unbalanced disables for DOCK_SYS_1V8
[   41.074482] WARNING: CPU: 0 PID: 58 at drivers/regulator/core.c:2999 _regulator_disable+0xf8/0x1d8
[   41.083457] Modules linked in: smsc smsc95xx usbnet mii imx_cpufreq_dt exc3000 imx8mm_thermal snd_soc_tlv320aic3x_spi snd_soc_tlv320aic3x_i2c snd_soc_tlv320aic3x tmp103 snd_soc_simple_card snd_soc_simple_card_utils fsl_ldb rtc_snvs snvs_pwrkey snd_soc_fsl_sai imx8mp_interconnect snd_soc_fsl_utils imx_interconnect imx_pcm_dma rtc_rs5c372 ti_sn65dsi83 pwm_imx27 st_pressure_spi st_sensors_spi st_pressure_i2c st_pressure st_sensors_i2c industrialio_triggered_buffer lm75 kfifo_buf st_sensors opt3001 panel_simple etnaviv gpu_sched iio_hwmon governor_userspace imx_bus imx8mp_hdmi_tx dw_hdmi drm_display_helper samsung_dsim imx_sdma imx_lcdif drm_dma_helper imx8mp_hdmi_pvi drm_kms_helper drm drm_panel_orientation_quirks fsl_imx8_ddr_perf caam error sbs_battery pwm_bl backlight ltc2497 ltc2497_core crct10dif_ce
[   41.157281] CPU: 0 PID: 58 Comm: kworker/0:2 Not tainted 6.8.0-rc5+ #7
[   41.170339] Workqueue: events drm_mode_rmfb_work_fn [drm]
[   41.175798] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[   41.182762] pc : _regulator_disable+0xf8/0x1d8
[   41.187209] lr : _regulator_disable+0xf8/0x1d8
[   41.191654] sp : ffff800081aaba90
[   41.194967] x29: ffff800081aaba90 x28: 0000000000000000 x27: ffff000002647e80
[   41.202109] x26: ffff000002d7a180 x25: ffff0000037858a0 x24: ffff800079748ac8
[   41.209250] x23: ffff000002647ed8 x22: ffff00000263f800 x21: ffff00000373d000
[   41.216392] x20: ffff00000373d000 x19: ffff000001de6480 x18: 0000000000000006
[   41.223533] x17: 0000000000000000 x16: 1fffe000003423e1 x15: ffff800081aab520
[   41.230674] x14: 0000000000000000 x13: 3856315f5359535f x12: 4b434f4420726f66
[   41.237815] x11: 2073656c62617369 x10: ffff8000814647a0 x9 : ffff8000801b10e0
[   41.244957] x8 : ffff8000814bc7a0 x7 : 0000000000017fe8 x6 : ffff8000814bc7a0
[   41.252098] x5 : 0000000000000000 x4 : 0000000000000000 x3 : 0000000000000000
[   41.259239] x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffff0000011b6600
[   41.266380] Call trace:
[   41.268826]  _regulator_disable+0xf8/0x1d8
[   41.272925]  regulator_disable+0x4c/0x98
[   41.276850]  sn65dsi83_atomic_disable+0x70/0xc0 [ti_sn65dsi83]
[   41.282692]  drm_atomic_bridge_chain_disable+0x78/0x110 [drm]
[   41.288481]  disable_outputs+0x100/0x350 [drm_kms_helper]
[   41.293902]  drm_atomic_helper_commit_tail_rpm+0x2c/0xb0 [drm_kms_helper]
[   41.300705]  commit_tail+0xac/0x1a0 [drm_kms_helper]
[   41.305685]  drm_atomic_helper_commit+0x16c/0x188 [drm_kms_helper]
[   41.311881]  drm_atomic_commit+0xac/0xf0 [drm]
[   41.316365]  drm_framebuffer_remove+0x464/0x550 [drm]
[   41.321458]  drm_mode_rmfb_work_fn+0x84/0xb0 [drm]
[   41.326291]  process_one_work+0x148/0x3b8
[   41.330309]  worker_thread+0x32c/0x450
[   41.334061]  kthread+0x11c/0x128
[   41.337292]  ret_from_fork+0x10/0x20
[   41.340873] ---[ end trace 0000000000000000 ]---

The reason is clear from the code flow, which looks like this (after
removing unrelated code):

static void sn65dsi83_atomic_pre_enable(struct drm_bridge *bridge,
                                        struct drm_bridge_state *old_bridge_state)
{
        regulator_enable(ctx->vcc);

        if (PLL failed locking) {
                regulator_disable(ctx->vcc);
                return;
        }
}

static void sn65dsi83_atomic_disable(struct drm_bridge *bridge,
                                     struct drm_bridge_state *old_bridge_state)
{
        regulator_disable(ctx->vcc);
}

So when the PLL fails locking, the vcc regulator is disable twice,
leading to "unbalanced disables".

I initially removed the regulator_disable() line in sn65dsi83_atomic_pre_enable()
locally and it worked fine. Then I did some git log and found you added this line on
purpose (even though it was in sn65dsi83_atomic_enable() initially), so my question
is whether you can explain exactly what was wrong before your patch. I have been
working for a few weeks with the regulator_disable() line removed and found no issue.

Best regards,
Luca

-- 
Luca Ceresoli, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

  parent reply	other threads:[~2024-02-22 15:36 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-04  6:53 [PATCH 1/1] drm/bridge: ti-sn65dsi83: Fix enable error path Alexander Stein
2023-05-04  7:43 ` Laurent Pinchart
2023-05-04  7:54 ` rfoss
2024-02-22 15:36 ` Luca Ceresoli [this message]
2024-02-27 12:05   ` Alexander Stein
2024-02-27 17:41     ` Luca Ceresoli
2024-02-28  6:59       ` Alexander Stein
2024-02-28  8:15       ` Alexander Stein
2024-02-29  9:47         ` Luca Ceresoli
2024-02-29 10:48           ` Frieder Schrempf
2024-03-01  9:13             ` Luca Ceresoli
2024-02-29 11:11           ` Alexander Stein
2024-03-01  9:44             ` Luca Ceresoli
2024-03-01  9:57               ` Alexander Stein
2024-03-01 10:10                 ` Luca Ceresoli
2024-03-01 10:45                   ` Alexander Stein
2024-03-06 12:41                     ` Luca Ceresoli

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=20240222163637.12165adf@booty \
    --to=luca.ceresoli@bootlin.com \
    --cc=Laurent.pinchart@ideasonboard.com \
    --cc=airlied@gmail.com \
    --cc=alexander.stein@ew.tq-group.com \
    --cc=andrzej.hajda@intel.com \
    --cc=daniel@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=jernej.skrabec@gmail.com \
    --cc=jonas@kwiboo.se \
    --cc=neil.armstrong@linaro.org \
    --cc=rfoss@kernel.org \
    /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