All of lore.kernel.org
 help / color / mirror / Atom feed
* rsnd: clk-multiplier already disabled warning on Ebisu
@ 2020-12-14 12:16 ` Geert Uytterhoeven
  0 siblings, 0 replies; 11+ messages in thread
From: Geert Uytterhoeven @ 2020-12-14 12:16 UTC (permalink / raw)
  To: Kuninori Morimoto; +Cc: ALSA Development Mailing List, Linux-Renesas

Hi Morimoto-san,

While booting Ebisu-4D, I saw the below warnings (once).

    rcar_sound ec500000.sound: can't use clk 1

rsnd_adg_clk_control() failed to enable CLKB, but continues.

    ------------[ cut here ]------------
    clk-multiplier already disabled
    WARNING: CPU: 1 PID: 52 at drivers/clk/clk.c:952 clk_core_disable+0x30/0x9c
    Modules linked in:
    CPU: 1 PID: 52 Comm: kworker/1:2 Not tainted
5.10.0-rc7-rcar3-initrd-00582-gadecf297acf4-dirty #183
    Hardware name: Renesas Ebisu-4D board based on r8a77990 (DT)
    Workqueue: events deferred_probe_work_func
    pstate: 60000085 (nZCv daIf -PAN -UAO -TCO BTYPE=--)
    pc : clk_core_disable+0x30/0x9c
    lr : clk_core_disable+0x30/0x9c
    sp : ffffffc010f939f0
    x29: ffffffc010f939f0 x28: 0000000000000000
    x27: ffffff800949eb00 x26: ffffff80093c40f8
    x25: 0000000000000001 x24: ffffffc010805fea
    x23: 0000000000000000 x22: ffffff80082b8810
    x21: ffffff80093c4080 x20: ffffff8009368b00
    x19: ffffff8009368b00 x18: 0000000000000000
    x17: 000000004ef774c4 x16: 0000000000000014
    x15: ffffffffffffffff x14: ffffffc010b8e8b0
    x13: fffffffffff9fd47 x12: 0720072007200720
    x11: fffffffffffc0000 x10: ffffffc010b8e8d8
    x9 : 0720072007200720 x8 : 2079646165726c61
    x7 : 0000000000000004 x6 : 00000000ffffe6ad
    x5 : ffffffc010f93718 x4 : 0000000000000000
    x3 : 0000000000000000 x2 : 00000000ffffffff
    x1 : 0000000000000000 x0 : 0000000000000000
    Call trace:
     clk_core_disable+0x30/0x9c
     clk_core_disable_lock+0x24/0x3c
     clk_disable+0x20/0x30
     rsnd_adg_clk_control+0xa0/0xd4
     rsnd_adg_remove+0x58/0x6c
     rsnd_probe+0x134/0x3cc

Something else fails (-EPROBE_DEFER?), and thus rsnd_adg_remove() is
called.  The latter disables all clocks, including the one that failed to
enable before, leading to the warning.

     platform_drv_probe+0x54/0xa4
     really_probe+0x234/0x340
     driver_probe_device+0xa0/0xb0
     __device_attach_driver+0x9c/0xa8
     bus_for_each_drv+0x9c/0xc4
     __device_attach+0xd4/0x140
     device_initial_probe+0x14/0x20
     bus_probe_device+0x30/0x94
     deferred_probe_work_func+0x9c/0xb0
     process_one_work+0x180/0x1f0
     process_scheduled_works+0x44/0x48
     worker_thread+0x1ec/0x270
     kthread+0xdc/0xec
     ret_from_fork+0x10/0x30
    ---[ end trace 8d8c2a1b7537ca36 ]---
    ------------[ cut here ]------------
    clk-multiplier already unprepared
    WARNING: CPU: 1 PID: 52 at drivers/clk/clk.c:810
clk_core_unprepare+0x30/0xd0
    [...]
    ---[ end trace 8d8c2a1b7537ca37 ]---

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

^ permalink raw reply	[flat|nested] 11+ messages in thread

* rsnd: clk-multiplier already disabled warning on Ebisu
@ 2020-12-14 12:16 ` Geert Uytterhoeven
  0 siblings, 0 replies; 11+ messages in thread
From: Geert Uytterhoeven @ 2020-12-14 12:16 UTC (permalink / raw)
  To: Kuninori Morimoto; +Cc: Linux-Renesas, ALSA Development Mailing List

Hi Morimoto-san,

While booting Ebisu-4D, I saw the below warnings (once).

    rcar_sound ec500000.sound: can't use clk 1

rsnd_adg_clk_control() failed to enable CLKB, but continues.

    ------------[ cut here ]------------
    clk-multiplier already disabled
    WARNING: CPU: 1 PID: 52 at drivers/clk/clk.c:952 clk_core_disable+0x30/0x9c
    Modules linked in:
    CPU: 1 PID: 52 Comm: kworker/1:2 Not tainted
5.10.0-rc7-rcar3-initrd-00582-gadecf297acf4-dirty #183
    Hardware name: Renesas Ebisu-4D board based on r8a77990 (DT)
    Workqueue: events deferred_probe_work_func
    pstate: 60000085 (nZCv daIf -PAN -UAO -TCO BTYPE=--)
    pc : clk_core_disable+0x30/0x9c
    lr : clk_core_disable+0x30/0x9c
    sp : ffffffc010f939f0
    x29: ffffffc010f939f0 x28: 0000000000000000
    x27: ffffff800949eb00 x26: ffffff80093c40f8
    x25: 0000000000000001 x24: ffffffc010805fea
    x23: 0000000000000000 x22: ffffff80082b8810
    x21: ffffff80093c4080 x20: ffffff8009368b00
    x19: ffffff8009368b00 x18: 0000000000000000
    x17: 000000004ef774c4 x16: 0000000000000014
    x15: ffffffffffffffff x14: ffffffc010b8e8b0
    x13: fffffffffff9fd47 x12: 0720072007200720
    x11: fffffffffffc0000 x10: ffffffc010b8e8d8
    x9 : 0720072007200720 x8 : 2079646165726c61
    x7 : 0000000000000004 x6 : 00000000ffffe6ad
    x5 : ffffffc010f93718 x4 : 0000000000000000
    x3 : 0000000000000000 x2 : 00000000ffffffff
    x1 : 0000000000000000 x0 : 0000000000000000
    Call trace:
     clk_core_disable+0x30/0x9c
     clk_core_disable_lock+0x24/0x3c
     clk_disable+0x20/0x30
     rsnd_adg_clk_control+0xa0/0xd4
     rsnd_adg_remove+0x58/0x6c
     rsnd_probe+0x134/0x3cc

Something else fails (-EPROBE_DEFER?), and thus rsnd_adg_remove() is
called.  The latter disables all clocks, including the one that failed to
enable before, leading to the warning.

     platform_drv_probe+0x54/0xa4
     really_probe+0x234/0x340
     driver_probe_device+0xa0/0xb0
     __device_attach_driver+0x9c/0xa8
     bus_for_each_drv+0x9c/0xc4
     __device_attach+0xd4/0x140
     device_initial_probe+0x14/0x20
     bus_probe_device+0x30/0x94
     deferred_probe_work_func+0x9c/0xb0
     process_one_work+0x180/0x1f0
     process_scheduled_works+0x44/0x48
     worker_thread+0x1ec/0x270
     kthread+0xdc/0xec
     ret_from_fork+0x10/0x30
    ---[ end trace 8d8c2a1b7537ca36 ]---
    ------------[ cut here ]------------
    clk-multiplier already unprepared
    WARNING: CPU: 1 PID: 52 at drivers/clk/clk.c:810
clk_core_unprepare+0x30/0xd0
    [...]
    ---[ end trace 8d8c2a1b7537ca37 ]---

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH][RFC] ASoC: rsnd: don't call clk_disable_unprepare() if can't use
  2020-12-14 12:16 ` Geert Uytterhoeven
  (?)
@ 2020-12-15  0:06 ` Kuninori Morimoto
  2020-12-15 13:00     ` Mark Brown
  2020-12-15 14:50     ` Geert Uytterhoeven
  -1 siblings, 2 replies; 11+ messages in thread
From: Kuninori Morimoto @ 2020-12-15  0:06 UTC (permalink / raw)
  To: Mark Brown, Geert Uytterhoeven; +Cc: Linux-Renesas, Linux-ALSA

We need to care clock accessibility,
because we might can't use clock for some reasons.

It sets clk_rate for each clocks when enabled.
This means it doesn't have clk_rate if we can't use.
We can avoid to call clk_disable_unprepare() in such case.

Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---

Hi Geert.

Thank you for your reporting.
I have never seen this kind of error, but it possible to happen.
Unfortunately, I can't reproduce this but I hope this patch can solve it.
Could you please check this ?
I added [RFC] on this patch Subject.

 sound/soc/sh/rcar/adg.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/sound/soc/sh/rcar/adg.c b/sound/soc/sh/rcar/adg.c
index b9aacf3d3b29..b870e834aa0a 100644
--- a/sound/soc/sh/rcar/adg.c
+++ b/sound/soc/sh/rcar/adg.c
@@ -366,25 +366,25 @@ void rsnd_adg_clk_control(struct rsnd_priv *priv, int enable)
 	struct rsnd_adg *adg = rsnd_priv_to_adg(priv);
 	struct device *dev = rsnd_priv_to_dev(priv);
 	struct clk *clk;
-	int i, ret;
+	int i;
 
 	for_each_rsnd_clk(clk, adg, i) {
-		ret = 0;
 		if (enable) {
-			ret = clk_prepare_enable(clk);
+			int ret = clk_prepare_enable(clk);
 
 			/*
 			 * We shouldn't use clk_get_rate() under
 			 * atomic context. Let's keep it when
 			 * rsnd_adg_clk_enable() was called
 			 */
-			adg->clk_rate[i] = clk_get_rate(adg->clk[i]);
+			if (ret < 0)
+				dev_warn(dev, "can't use clk %d\n", i);
+			else
+				adg->clk_rate[i] = clk_get_rate(adg->clk[i]);
 		} else {
-			clk_disable_unprepare(clk);
+			if (adg->clk_rate[i])
+				clk_disable_unprepare(clk);
 		}
-
-		if (ret < 0)
-			dev_warn(dev, "can't use clk %d\n", i);
 	}
 }
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH][RFC] ASoC: rsnd: don't call clk_disable_unprepare() if can't use
  2020-12-15  0:06 ` [PATCH][RFC] ASoC: rsnd: don't call clk_disable_unprepare() if can't use Kuninori Morimoto
@ 2020-12-15 13:00     ` Mark Brown
  2020-12-15 14:50     ` Geert Uytterhoeven
  1 sibling, 0 replies; 11+ messages in thread
From: Mark Brown @ 2020-12-15 13:00 UTC (permalink / raw)
  To: Kuninori Morimoto; +Cc: Geert Uytterhoeven, Linux-Renesas, Linux-ALSA

[-- Attachment #1: Type: text/plain, Size: 581 bytes --]

On Tue, Dec 15, 2020 at 09:06:05AM +0900, Kuninori Morimoto wrote:

> -			adg->clk_rate[i] = clk_get_rate(adg->clk[i]);
> +			if (ret < 0)
> +				dev_warn(dev, "can't use clk %d\n", i);
> +			else
> +				adg->clk_rate[i] = clk_get_rate(adg->clk[i]);

We never reset adg->clk_rate[i] so if we use the clock once then get an
error attempting to use it again...

>  		} else {
> -			clk_disable_unprepare(clk);
> +			if (adg->clk_rate[i])
> +				clk_disable_unprepare(clk);

...we'll try to disable twice.  This was already an issue of course, not
something introduced in this patch.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH][RFC] ASoC: rsnd: don't call clk_disable_unprepare() if can't use
@ 2020-12-15 13:00     ` Mark Brown
  0 siblings, 0 replies; 11+ messages in thread
From: Mark Brown @ 2020-12-15 13:00 UTC (permalink / raw)
  To: Kuninori Morimoto; +Cc: Linux-Renesas, Linux-ALSA, Geert Uytterhoeven

[-- Attachment #1: Type: text/plain, Size: 581 bytes --]

On Tue, Dec 15, 2020 at 09:06:05AM +0900, Kuninori Morimoto wrote:

> -			adg->clk_rate[i] = clk_get_rate(adg->clk[i]);
> +			if (ret < 0)
> +				dev_warn(dev, "can't use clk %d\n", i);
> +			else
> +				adg->clk_rate[i] = clk_get_rate(adg->clk[i]);

We never reset adg->clk_rate[i] so if we use the clock once then get an
error attempting to use it again...

>  		} else {
> -			clk_disable_unprepare(clk);
> +			if (adg->clk_rate[i])
> +				clk_disable_unprepare(clk);

...we'll try to disable twice.  This was already an issue of course, not
something introduced in this patch.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH][RFC] ASoC: rsnd: don't call clk_disable_unprepare() if can't use
  2020-12-15  0:06 ` [PATCH][RFC] ASoC: rsnd: don't call clk_disable_unprepare() if can't use Kuninori Morimoto
@ 2020-12-15 14:50     ` Geert Uytterhoeven
  2020-12-15 14:50     ` Geert Uytterhoeven
  1 sibling, 0 replies; 11+ messages in thread
From: Geert Uytterhoeven @ 2020-12-15 14:50 UTC (permalink / raw)
  To: Kuninori Morimoto; +Cc: Mark Brown, Linux-Renesas, Linux-ALSA, Wolfram Sang

Hi Morimoto-san,

On Tue, Dec 15, 2020 at 1:06 AM Kuninori Morimoto
<kuninori.morimoto.gx@renesas.com> wrote:
> We need to care clock accessibility,
> because we might can't use clock for some reasons.
>
> It sets clk_rate for each clocks when enabled.
> This means it doesn't have clk_rate if we can't use.
> We can avoid to call clk_disable_unprepare() in such case.
>
> Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>

Feel free to use geert+renesas@glider.be instead ;-)

> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
> ---
>
> Hi Geert.
>
> Thank you for your reporting.
> I have never seen this kind of error, but it possible to happen.
> Unfortunately, I can't reproduce this but I hope this patch can solve it.
> Could you please check this ?
> I added [RFC] on this patch Subject.

The patch looks good to me, but I also cannot trigger the issue at will.
I went through my old boot logs, and found 2 other occurrences, also
on Ebisu.  In all cases, it happened while a lot of output was printed to
the serial console (either a WARN() splat, or DEBUG_PINCTRL output).
My guess is that console output or disabling interrupts too long is
triggering a race condition or other issue in the i2c driver (clk 1 is the
cs2000 clock generator, controlled through i2c).

> --- a/sound/soc/sh/rcar/adg.c
> +++ b/sound/soc/sh/rcar/adg.c
> @@ -366,25 +366,25 @@ void rsnd_adg_clk_control(struct rsnd_priv *priv, int enable)
>         struct rsnd_adg *adg = rsnd_priv_to_adg(priv);
>         struct device *dev = rsnd_priv_to_dev(priv);
>         struct clk *clk;
> -       int i, ret;
> +       int i;
>
>         for_each_rsnd_clk(clk, adg, i) {
> -               ret = 0;
>                 if (enable) {
> -                       ret = clk_prepare_enable(clk);
> +                       int ret = clk_prepare_enable(clk);
>
>                         /*
>                          * We shouldn't use clk_get_rate() under
>                          * atomic context. Let's keep it when
>                          * rsnd_adg_clk_enable() was called
>                          */
> -                       adg->clk_rate[i] = clk_get_rate(adg->clk[i]);
> +                       if (ret < 0)
> +                               dev_warn(dev, "can't use clk %d\n", i);
> +                       else
> +                               adg->clk_rate[i] = clk_get_rate(adg->clk[i]);
>                 } else {
> -                       clk_disable_unprepare(clk);
> +                       if (adg->clk_rate[i])
> +                               clk_disable_unprepare(clk);

As pointed out by Mark, you may want to clear adg->clk_rate[i] here?

>                 }
> -
> -               if (ret < 0)
> -                       dev_warn(dev, "can't use clk %d\n", i);
>         }
>  }

With the above sorted out:
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH][RFC] ASoC: rsnd: don't call clk_disable_unprepare() if can't use
@ 2020-12-15 14:50     ` Geert Uytterhoeven
  0 siblings, 0 replies; 11+ messages in thread
From: Geert Uytterhoeven @ 2020-12-15 14:50 UTC (permalink / raw)
  To: Kuninori Morimoto; +Cc: Linux-Renesas, Wolfram Sang, Linux-ALSA, Mark Brown

Hi Morimoto-san,

On Tue, Dec 15, 2020 at 1:06 AM Kuninori Morimoto
<kuninori.morimoto.gx@renesas.com> wrote:
> We need to care clock accessibility,
> because we might can't use clock for some reasons.
>
> It sets clk_rate for each clocks when enabled.
> This means it doesn't have clk_rate if we can't use.
> We can avoid to call clk_disable_unprepare() in such case.
>
> Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>

Feel free to use geert+renesas@glider.be instead ;-)

> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
> ---
>
> Hi Geert.
>
> Thank you for your reporting.
> I have never seen this kind of error, but it possible to happen.
> Unfortunately, I can't reproduce this but I hope this patch can solve it.
> Could you please check this ?
> I added [RFC] on this patch Subject.

The patch looks good to me, but I also cannot trigger the issue at will.
I went through my old boot logs, and found 2 other occurrences, also
on Ebisu.  In all cases, it happened while a lot of output was printed to
the serial console (either a WARN() splat, or DEBUG_PINCTRL output).
My guess is that console output or disabling interrupts too long is
triggering a race condition or other issue in the i2c driver (clk 1 is the
cs2000 clock generator, controlled through i2c).

> --- a/sound/soc/sh/rcar/adg.c
> +++ b/sound/soc/sh/rcar/adg.c
> @@ -366,25 +366,25 @@ void rsnd_adg_clk_control(struct rsnd_priv *priv, int enable)
>         struct rsnd_adg *adg = rsnd_priv_to_adg(priv);
>         struct device *dev = rsnd_priv_to_dev(priv);
>         struct clk *clk;
> -       int i, ret;
> +       int i;
>
>         for_each_rsnd_clk(clk, adg, i) {
> -               ret = 0;
>                 if (enable) {
> -                       ret = clk_prepare_enable(clk);
> +                       int ret = clk_prepare_enable(clk);
>
>                         /*
>                          * We shouldn't use clk_get_rate() under
>                          * atomic context. Let's keep it when
>                          * rsnd_adg_clk_enable() was called
>                          */
> -                       adg->clk_rate[i] = clk_get_rate(adg->clk[i]);
> +                       if (ret < 0)
> +                               dev_warn(dev, "can't use clk %d\n", i);
> +                       else
> +                               adg->clk_rate[i] = clk_get_rate(adg->clk[i]);
>                 } else {
> -                       clk_disable_unprepare(clk);
> +                       if (adg->clk_rate[i])
> +                               clk_disable_unprepare(clk);

As pointed out by Mark, you may want to clear adg->clk_rate[i] here?

>                 }
> -
> -               if (ret < 0)
> -                       dev_warn(dev, "can't use clk %d\n", i);
>         }
>  }

With the above sorted out:
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH][RFC] ASoC: rsnd: don't call clk_disable_unprepare() if can't use
  2020-12-15 14:50     ` Geert Uytterhoeven
@ 2020-12-17  0:20       ` Kuninori Morimoto
  -1 siblings, 0 replies; 11+ messages in thread
From: Kuninori Morimoto @ 2020-12-17  0:20 UTC (permalink / raw)
  To: Geert Uytterhoeven; +Cc: Wolfram Sang, Mark Brown, Linux-Renesas, Linux-ALSA


Hi Geert, Mark

> > Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
> 
> Feel free to use geert+renesas@glider.be instead ;-)

OK, will do

> The patch looks good to me, but I also cannot trigger the issue at will.
> I went through my old boot logs, and found 2 other occurrences, also
> on Ebisu.  In all cases, it happened while a lot of output was printed to
> the serial console (either a WARN() splat, or DEBUG_PINCTRL output).
> My guess is that console output or disabling interrupts too long is
> triggering a race condition or other issue in the i2c driver (clk 1 is the
> cs2000 clock generator, controlled through i2c).

OK, Thanks, nice to know.
It was rare case issue, difficult to find :)

> >                 } else {
> > -                       clk_disable_unprepare(clk);
> > +                       if (adg->clk_rate[i])
> > +                               clk_disable_unprepare(clk);
> 
> As pointed out by Mark, you may want to clear adg->clk_rate[i] here?

I thought we can re-get clock if we could get clock once.
But we shouldn't assume it.
Will fix it in v2.

Thank you for your help !!

Best regards
---
Kuninori Morimoto

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH][RFC] ASoC: rsnd: don't call clk_disable_unprepare() if can't use
@ 2020-12-17  0:20       ` Kuninori Morimoto
  0 siblings, 0 replies; 11+ messages in thread
From: Kuninori Morimoto @ 2020-12-17  0:20 UTC (permalink / raw)
  To: Geert Uytterhoeven; +Cc: Linux-Renesas, Wolfram Sang, Linux-ALSA, Mark Brown


Hi Geert, Mark

> > Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
> 
> Feel free to use geert+renesas@glider.be instead ;-)

OK, will do

> The patch looks good to me, but I also cannot trigger the issue at will.
> I went through my old boot logs, and found 2 other occurrences, also
> on Ebisu.  In all cases, it happened while a lot of output was printed to
> the serial console (either a WARN() splat, or DEBUG_PINCTRL output).
> My guess is that console output or disabling interrupts too long is
> triggering a race condition or other issue in the i2c driver (clk 1 is the
> cs2000 clock generator, controlled through i2c).

OK, Thanks, nice to know.
It was rare case issue, difficult to find :)

> >                 } else {
> > -                       clk_disable_unprepare(clk);
> > +                       if (adg->clk_rate[i])
> > +                               clk_disable_unprepare(clk);
> 
> As pointed out by Mark, you may want to clear adg->clk_rate[i] here?

I thought we can re-get clock if we could get clock once.
But we shouldn't assume it.
Will fix it in v2.

Thank you for your help !!

Best regards
---
Kuninori Morimoto

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH][RFC] ASoC: rsnd: don't call clk_disable_unprepare() if can't use
  2020-12-17  0:20       ` Kuninori Morimoto
@ 2020-12-17  8:03         ` Geert Uytterhoeven
  -1 siblings, 0 replies; 11+ messages in thread
From: Geert Uytterhoeven @ 2020-12-17  8:03 UTC (permalink / raw)
  To: Kuninori Morimoto; +Cc: Wolfram Sang, Mark Brown, Linux-Renesas, Linux-ALSA

Hi Morimoto-san,

On Thu, Dec 17, 2020 at 1:20 AM Kuninori Morimoto
<kuninori.morimoto.gx@renesas.com> wrote:
> > > Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
> >
> > Feel free to use geert+renesas@glider.be instead ;-)
>
> OK, will do
>
> > The patch looks good to me, but I also cannot trigger the issue at will.
> > I went through my old boot logs, and found 2 other occurrences, also
> > on Ebisu.  In all cases, it happened while a lot of output was printed to
> > the serial console (either a WARN() splat, or DEBUG_PINCTRL output).
> > My guess is that console output or disabling interrupts too long is
> > triggering a race condition or other issue in the i2c driver (clk 1 is the
> > cs2000 clock generator, controlled through i2c).
>
> OK, Thanks, nice to know.
> It was rare case issue, difficult to find :)
>
> > >                 } else {
> > > -                       clk_disable_unprepare(clk);
> > > +                       if (adg->clk_rate[i])
> > > +                               clk_disable_unprepare(clk);
> >
> > As pointed out by Mark, you may want to clear adg->clk_rate[i] here?
>
> I thought we can re-get clock if we could get clock once.

Indeed. If a clock worked before, it should keep on working.
However, the failing clock was the cs2000 clock, which can fail to enable
if something goes wrong with i2c.

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH][RFC] ASoC: rsnd: don't call clk_disable_unprepare() if can't use
@ 2020-12-17  8:03         ` Geert Uytterhoeven
  0 siblings, 0 replies; 11+ messages in thread
From: Geert Uytterhoeven @ 2020-12-17  8:03 UTC (permalink / raw)
  To: Kuninori Morimoto; +Cc: Linux-Renesas, Wolfram Sang, Linux-ALSA, Mark Brown

Hi Morimoto-san,

On Thu, Dec 17, 2020 at 1:20 AM Kuninori Morimoto
<kuninori.morimoto.gx@renesas.com> wrote:
> > > Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
> >
> > Feel free to use geert+renesas@glider.be instead ;-)
>
> OK, will do
>
> > The patch looks good to me, but I also cannot trigger the issue at will.
> > I went through my old boot logs, and found 2 other occurrences, also
> > on Ebisu.  In all cases, it happened while a lot of output was printed to
> > the serial console (either a WARN() splat, or DEBUG_PINCTRL output).
> > My guess is that console output or disabling interrupts too long is
> > triggering a race condition or other issue in the i2c driver (clk 1 is the
> > cs2000 clock generator, controlled through i2c).
>
> OK, Thanks, nice to know.
> It was rare case issue, difficult to find :)
>
> > >                 } else {
> > > -                       clk_disable_unprepare(clk);
> > > +                       if (adg->clk_rate[i])
> > > +                               clk_disable_unprepare(clk);
> >
> > As pointed out by Mark, you may want to clear adg->clk_rate[i] here?
>
> I thought we can re-get clock if we could get clock once.

Indeed. If a clock worked before, it should keep on working.
However, the failing clock was the cs2000 clock, which can fail to enable
if something goes wrong with i2c.

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2020-12-17  8:04 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-14 12:16 rsnd: clk-multiplier already disabled warning on Ebisu Geert Uytterhoeven
2020-12-14 12:16 ` Geert Uytterhoeven
2020-12-15  0:06 ` [PATCH][RFC] ASoC: rsnd: don't call clk_disable_unprepare() if can't use Kuninori Morimoto
2020-12-15 13:00   ` Mark Brown
2020-12-15 13:00     ` Mark Brown
2020-12-15 14:50   ` Geert Uytterhoeven
2020-12-15 14:50     ` Geert Uytterhoeven
2020-12-17  0:20     ` Kuninori Morimoto
2020-12-17  0:20       ` Kuninori Morimoto
2020-12-17  8:03       ` Geert Uytterhoeven
2020-12-17  8:03         ` Geert Uytterhoeven

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.