2021-06-13 23:33:45

by Alexander Sverdlin

[permalink] [raw]
Subject: [PATCH 1/7] iio: ep93xx: Prepare clock before using it

Use clk_prepare_enable()/clk_disable_unprepare() in preparation for switch
to Common Clock Framework, otherwise the following is visible:

WARNING: CPU: 0 PID: 1 at drivers/clk/clk.c:1011 clk_core_enable+0x9c/0xbc
Enabling unprepared ep93xx-adc
CPU: 0 PID: 1 Comm: swapper Not tainted 5.13.0-rc5-... #1
Hardware name: Cirrus Logic EDB9302 Evaluation Board
[<c000d5b0>] (unwind_backtrace) from [<c000c590>] (show_stack+0x10/0x18)
[<c000c590>] (show_stack) from [<c03a5f38>] (dump_stack+0x20/0x2c)
[<c03a5f38>] (dump_stack) from [<c03a2098>] (__warn+0x98/0xc0)
[<c03a2098>] (__warn) from [<c03a2150>] (warn_slowpath_fmt+0x90/0xc0)
[<c03a2150>] (warn_slowpath_fmt) from [<c01d8358>] (clk_core_enable+0x9c/0xbc)
[<c01d8358>] (clk_core_enable) from [<c01d8698>] (clk_core_enable_lock+0x18/0x30)
[<c01d8698>] (clk_core_enable_lock) from [<c0266560>] (ep93xx_adc_probe+0xe4/0x1a0)
[<c0266560>] (ep93xx_adc_probe) from [<c02126e0>] (platform_probe+0x34/0x80)
[<c02126e0>] (platform_probe) from [<c0210bf8>] (really_probe+0xe8/0x394)
[<c0210bf8>] (really_probe) from [<c0211464>] (device_driver_attach+0x5c/0x64)
[<c0211464>] (device_driver_attach) from [<c02114e8>] (__driver_attach+0x7c/0xec)
[<c02114e8>] (__driver_attach) from [<c020f1b4>] (bus_for_each_dev+0x78/0xc4)
[<c020f1b4>] (bus_for_each_dev) from [<c0211570>] (driver_attach+0x18/0x24)
[<c0211570>] (driver_attach) from [<c020fab4>] (bus_add_driver+0x140/0x1cc)
[<c020fab4>] (bus_add_driver) from [<c0211c44>] (driver_register+0x74/0x114)
[<c0211c44>] (driver_register) from [<c02134f8>] (__platform_driver_register+0x18/0x24)
[<c02134f8>] (__platform_driver_register) from [<c0470148>] (ep93xx_adc_driver_init+0x10/0x1c)
[<c0470148>] (ep93xx_adc_driver_init) from [<c045ce88>] (do_one_initcall+0x7c/0x1a4)
[<c045ce88>] (do_one_initcall) from [<c045d184>] (kernel_init_freeable+0x17c/0x1fc)
[<c045d184>] (kernel_init_freeable) from [<c03a64d0>] (kernel_init+0x8/0xf8)
[<c03a64d0>] (kernel_init) from [<c00082d8>] (ret_from_fork+0x14/0x3c)
...
ep93xx-adc ep93xx-adc: Cannot enable clock
ep93xx-adc: probe of ep93xx-adc failed with error -108

Signed-off-by: Alexander Sverdlin <[email protected]>
---
drivers/iio/adc/ep93xx_adc.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/iio/adc/ep93xx_adc.c b/drivers/iio/adc/ep93xx_adc.c
index c08ab3c6dfaf..5c85257b814c 100644
--- a/drivers/iio/adc/ep93xx_adc.c
+++ b/drivers/iio/adc/ep93xx_adc.c
@@ -207,7 +207,7 @@ static int ep93xx_adc_probe(struct platform_device *pdev)
*/
}

- ret = clk_enable(priv->clk);
+ ret = clk_prepare_enable(priv->clk);
if (ret) {
dev_err(&pdev->dev, "Cannot enable clock\n");
return ret;
@@ -215,7 +215,7 @@ static int ep93xx_adc_probe(struct platform_device *pdev)

ret = iio_device_register(iiodev);
if (ret)
- clk_disable(priv->clk);
+ clk_disable_unprepare(priv->clk);

return ret;
}
@@ -226,7 +226,7 @@ static int ep93xx_adc_remove(struct platform_device *pdev)
struct ep93xx_adc_priv *priv = iio_priv(iiodev);

iio_device_unregister(iiodev);
- clk_disable(priv->clk);
+ clk_disable_unprepare(priv->clk);

return 0;
}
--
2.32.0


2021-06-14 11:17:06

by Alexander Sverdlin

[permalink] [raw]
Subject: Re: [PATCH 1/7] iio: ep93xx: Prepare clock before using it

Hello Jonathan!

On Mon, 2021-06-14 at 11:50 +0100, Jonathan Cameron wrote:
> > ...
> > ep93xx-adc ep93xx-adc: Cannot enable clock
> > ep93xx-adc: probe of ep93xx-adc failed with error -108
> >
> > Signed-off-by: Alexander Sverdlin <[email protected]>
> Acked-by: Jonathan Cameron <[email protected]>
>
> From cover letter I'm assuming you want these to go through same route as
> the common clock conversion?  If not shout and I can pick this one up.

Thank you for the quick reply!
Yes, it makes sense to take the same route as the CCF conversion, I'll try it
first. Maybe I'll need to strip these stacktraces as well, I've
got the whole bunch of complaints on them...

--
Alexander Sverdlin.


2021-06-14 11:26:56

by Jonathan Cameron

[permalink] [raw]
Subject: Re: [PATCH 1/7] iio: ep93xx: Prepare clock before using it

On Mon, 14 Jun 2021 01:30:35 +0200
Alexander Sverdlin <[email protected]> wrote:

> Use clk_prepare_enable()/clk_disable_unprepare() in preparation for switch
> to Common Clock Framework, otherwise the following is visible:
>
> WARNING: CPU: 0 PID: 1 at drivers/clk/clk.c:1011 clk_core_enable+0x9c/0xbc
> Enabling unprepared ep93xx-adc
> CPU: 0 PID: 1 Comm: swapper Not tainted 5.13.0-rc5-... #1
> Hardware name: Cirrus Logic EDB9302 Evaluation Board
> [<c000d5b0>] (unwind_backtrace) from [<c000c590>] (show_stack+0x10/0x18)
> [<c000c590>] (show_stack) from [<c03a5f38>] (dump_stack+0x20/0x2c)
> [<c03a5f38>] (dump_stack) from [<c03a2098>] (__warn+0x98/0xc0)
> [<c03a2098>] (__warn) from [<c03a2150>] (warn_slowpath_fmt+0x90/0xc0)
> [<c03a2150>] (warn_slowpath_fmt) from [<c01d8358>] (clk_core_enable+0x9c/0xbc)
> [<c01d8358>] (clk_core_enable) from [<c01d8698>] (clk_core_enable_lock+0x18/0x30)
> [<c01d8698>] (clk_core_enable_lock) from [<c0266560>] (ep93xx_adc_probe+0xe4/0x1a0)
> [<c0266560>] (ep93xx_adc_probe) from [<c02126e0>] (platform_probe+0x34/0x80)
> [<c02126e0>] (platform_probe) from [<c0210bf8>] (really_probe+0xe8/0x394)
> [<c0210bf8>] (really_probe) from [<c0211464>] (device_driver_attach+0x5c/0x64)
> [<c0211464>] (device_driver_attach) from [<c02114e8>] (__driver_attach+0x7c/0xec)
> [<c02114e8>] (__driver_attach) from [<c020f1b4>] (bus_for_each_dev+0x78/0xc4)
> [<c020f1b4>] (bus_for_each_dev) from [<c0211570>] (driver_attach+0x18/0x24)
> [<c0211570>] (driver_attach) from [<c020fab4>] (bus_add_driver+0x140/0x1cc)
> [<c020fab4>] (bus_add_driver) from [<c0211c44>] (driver_register+0x74/0x114)
> [<c0211c44>] (driver_register) from [<c02134f8>] (__platform_driver_register+0x18/0x24)
> [<c02134f8>] (__platform_driver_register) from [<c0470148>] (ep93xx_adc_driver_init+0x10/0x1c)
> [<c0470148>] (ep93xx_adc_driver_init) from [<c045ce88>] (do_one_initcall+0x7c/0x1a4)
> [<c045ce88>] (do_one_initcall) from [<c045d184>] (kernel_init_freeable+0x17c/0x1fc)
> [<c045d184>] (kernel_init_freeable) from [<c03a64d0>] (kernel_init+0x8/0xf8)
> [<c03a64d0>] (kernel_init) from [<c00082d8>] (ret_from_fork+0x14/0x3c)
> ...
> ep93xx-adc ep93xx-adc: Cannot enable clock
> ep93xx-adc: probe of ep93xx-adc failed with error -108
>
> Signed-off-by: Alexander Sverdlin <[email protected]>
Acked-by: Jonathan Cameron <[email protected]>

From cover letter I'm assuming you want these to go through same route as
the common clock conversion? If not shout and I can pick this one up.

Jonathan

> ---
> drivers/iio/adc/ep93xx_adc.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/iio/adc/ep93xx_adc.c b/drivers/iio/adc/ep93xx_adc.c
> index c08ab3c6dfaf..5c85257b814c 100644
> --- a/drivers/iio/adc/ep93xx_adc.c
> +++ b/drivers/iio/adc/ep93xx_adc.c
> @@ -207,7 +207,7 @@ static int ep93xx_adc_probe(struct platform_device *pdev)
> */
> }
>
> - ret = clk_enable(priv->clk);
> + ret = clk_prepare_enable(priv->clk);
> if (ret) {
> dev_err(&pdev->dev, "Cannot enable clock\n");
> return ret;
> @@ -215,7 +215,7 @@ static int ep93xx_adc_probe(struct platform_device *pdev)
>
> ret = iio_device_register(iiodev);
> if (ret)
> - clk_disable(priv->clk);
> + clk_disable_unprepare(priv->clk);
>
> return ret;
> }
> @@ -226,7 +226,7 @@ static int ep93xx_adc_remove(struct platform_device *pdev)
> struct ep93xx_adc_priv *priv = iio_priv(iiodev);
>
> iio_device_unregister(iiodev);
> - clk_disable(priv->clk);
> + clk_disable_unprepare(priv->clk);
>
> return 0;
> }

2021-08-02 07:37:34

by Alexander Sverdlin

[permalink] [raw]
Subject: Re: [PATCH 1/7] iio: ep93xx: Prepare clock before using it

Hello Jonathan!

On 14/06/2021 12:50, Jonathan Cameron wrote:
> On Mon, 14 Jun 2021 01:30:35 +0200
> Alexander Sverdlin <[email protected]> wrote:
>
>> Use clk_prepare_enable()/clk_disable_unprepare() in preparation for switch
>> to Common Clock Framework, otherwise the following is visible:
>>
>> WARNING: CPU: 0 PID: 1 at drivers/clk/clk.c:1011 clk_core_enable+0x9c/0xbc
>> Enabling unprepared ep93xx-adc
>> CPU: 0 PID: 1 Comm: swapper Not tainted 5.13.0-rc5-... #1
>> Hardware name: Cirrus Logic EDB9302 Evaluation Board
>> [<c000d5b0>] (unwind_backtrace) from [<c000c590>] (show_stack+0x10/0x18)
>> [<c000c590>] (show_stack) from [<c03a5f38>] (dump_stack+0x20/0x2c)
>> [<c03a5f38>] (dump_stack) from [<c03a2098>] (__warn+0x98/0xc0)
>> [<c03a2098>] (__warn) from [<c03a2150>] (warn_slowpath_fmt+0x90/0xc0)
>> [<c03a2150>] (warn_slowpath_fmt) from [<c01d8358>] (clk_core_enable+0x9c/0xbc)
>> [<c01d8358>] (clk_core_enable) from [<c01d8698>] (clk_core_enable_lock+0x18/0x30)
>> [<c01d8698>] (clk_core_enable_lock) from [<c0266560>] (ep93xx_adc_probe+0xe4/0x1a0)
>> [<c0266560>] (ep93xx_adc_probe) from [<c02126e0>] (platform_probe+0x34/0x80)
>> [<c02126e0>] (platform_probe) from [<c0210bf8>] (really_probe+0xe8/0x394)
>> [<c0210bf8>] (really_probe) from [<c0211464>] (device_driver_attach+0x5c/0x64)
>> [<c0211464>] (device_driver_attach) from [<c02114e8>] (__driver_attach+0x7c/0xec)
>> [<c02114e8>] (__driver_attach) from [<c020f1b4>] (bus_for_each_dev+0x78/0xc4)
>> [<c020f1b4>] (bus_for_each_dev) from [<c0211570>] (driver_attach+0x18/0x24)
>> [<c0211570>] (driver_attach) from [<c020fab4>] (bus_add_driver+0x140/0x1cc)
>> [<c020fab4>] (bus_add_driver) from [<c0211c44>] (driver_register+0x74/0x114)
>> [<c0211c44>] (driver_register) from [<c02134f8>] (__platform_driver_register+0x18/0x24)
>> [<c02134f8>] (__platform_driver_register) from [<c0470148>] (ep93xx_adc_driver_init+0x10/0x1c)
>> [<c0470148>] (ep93xx_adc_driver_init) from [<c045ce88>] (do_one_initcall+0x7c/0x1a4)
>> [<c045ce88>] (do_one_initcall) from [<c045d184>] (kernel_init_freeable+0x17c/0x1fc)
>> [<c045d184>] (kernel_init_freeable) from [<c03a64d0>] (kernel_init+0x8/0xf8)
>> [<c03a64d0>] (kernel_init) from [<c00082d8>] (ret_from_fork+0x14/0x3c)
>> ...
>> ep93xx-adc ep93xx-adc: Cannot enable clock
>> ep93xx-adc: probe of ep93xx-adc failed with error -108
>>
>> Signed-off-by: Alexander Sverdlin <[email protected]>
> Acked-by: Jonathan Cameron <[email protected]>
>
> From cover letter I'm assuming you want these to go through same route as
> the common clock conversion? If not shout and I can pick this one up.

We didn't manage to consolidate the delivery path for this series, could
you please take this patch alone, as you proposed initially?

>> ---
>> drivers/iio/adc/ep93xx_adc.c | 6 +++---
>> 1 file changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/iio/adc/ep93xx_adc.c b/drivers/iio/adc/ep93xx_adc.c
>> index c08ab3c6dfaf..5c85257b814c 100644
>> --- a/drivers/iio/adc/ep93xx_adc.c
>> +++ b/drivers/iio/adc/ep93xx_adc.c
>> @@ -207,7 +207,7 @@ static int ep93xx_adc_probe(struct platform_device *pdev)
>> */
>> }
>>
>> - ret = clk_enable(priv->clk);
>> + ret = clk_prepare_enable(priv->clk);
>> if (ret) {
>> dev_err(&pdev->dev, "Cannot enable clock\n");
>> return ret;
>> @@ -215,7 +215,7 @@ static int ep93xx_adc_probe(struct platform_device *pdev)
>>
>> ret = iio_device_register(iiodev);
>> if (ret)
>> - clk_disable(priv->clk);
>> + clk_disable_unprepare(priv->clk);
>>
>> return ret;
>> }
>> @@ -226,7 +226,7 @@ static int ep93xx_adc_remove(struct platform_device *pdev)
>> struct ep93xx_adc_priv *priv = iio_priv(iiodev);
>>
>> iio_device_unregister(iiodev);
>> - clk_disable(priv->clk);
>> + clk_disable_unprepare(priv->clk);
>>
>> return 0;
>> }
>

2021-08-08 13:57:32

by Jonathan Cameron

[permalink] [raw]
Subject: Re: [PATCH 1/7] iio: ep93xx: Prepare clock before using it

On Mon, 2 Aug 2021 09:30:23 +0200
Alexander Sverdlin <[email protected]> wrote:

> Hello Jonathan!
>
> On 14/06/2021 12:50, Jonathan Cameron wrote:
> > On Mon, 14 Jun 2021 01:30:35 +0200
> > Alexander Sverdlin <[email protected]> wrote:
> >
> >> Use clk_prepare_enable()/clk_disable_unprepare() in preparation for switch
> >> to Common Clock Framework, otherwise the following is visible:
> >>
> >> WARNING: CPU: 0 PID: 1 at drivers/clk/clk.c:1011 clk_core_enable+0x9c/0xbc
> >> Enabling unprepared ep93xx-adc
> >> CPU: 0 PID: 1 Comm: swapper Not tainted 5.13.0-rc5-... #1
> >> Hardware name: Cirrus Logic EDB9302 Evaluation Board
> >> [<c000d5b0>] (unwind_backtrace) from [<c000c590>] (show_stack+0x10/0x18)
> >> [<c000c590>] (show_stack) from [<c03a5f38>] (dump_stack+0x20/0x2c)
> >> [<c03a5f38>] (dump_stack) from [<c03a2098>] (__warn+0x98/0xc0)
> >> [<c03a2098>] (__warn) from [<c03a2150>] (warn_slowpath_fmt+0x90/0xc0)
> >> [<c03a2150>] (warn_slowpath_fmt) from [<c01d8358>] (clk_core_enable+0x9c/0xbc)
> >> [<c01d8358>] (clk_core_enable) from [<c01d8698>] (clk_core_enable_lock+0x18/0x30)
> >> [<c01d8698>] (clk_core_enable_lock) from [<c0266560>] (ep93xx_adc_probe+0xe4/0x1a0)
> >> [<c0266560>] (ep93xx_adc_probe) from [<c02126e0>] (platform_probe+0x34/0x80)
> >> [<c02126e0>] (platform_probe) from [<c0210bf8>] (really_probe+0xe8/0x394)
> >> [<c0210bf8>] (really_probe) from [<c0211464>] (device_driver_attach+0x5c/0x64)
> >> [<c0211464>] (device_driver_attach) from [<c02114e8>] (__driver_attach+0x7c/0xec)
> >> [<c02114e8>] (__driver_attach) from [<c020f1b4>] (bus_for_each_dev+0x78/0xc4)
> >> [<c020f1b4>] (bus_for_each_dev) from [<c0211570>] (driver_attach+0x18/0x24)
> >> [<c0211570>] (driver_attach) from [<c020fab4>] (bus_add_driver+0x140/0x1cc)
> >> [<c020fab4>] (bus_add_driver) from [<c0211c44>] (driver_register+0x74/0x114)
> >> [<c0211c44>] (driver_register) from [<c02134f8>] (__platform_driver_register+0x18/0x24)
> >> [<c02134f8>] (__platform_driver_register) from [<c0470148>] (ep93xx_adc_driver_init+0x10/0x1c)
> >> [<c0470148>] (ep93xx_adc_driver_init) from [<c045ce88>] (do_one_initcall+0x7c/0x1a4)
> >> [<c045ce88>] (do_one_initcall) from [<c045d184>] (kernel_init_freeable+0x17c/0x1fc)
> >> [<c045d184>] (kernel_init_freeable) from [<c03a64d0>] (kernel_init+0x8/0xf8)
> >> [<c03a64d0>] (kernel_init) from [<c00082d8>] (ret_from_fork+0x14/0x3c)
> >> ...
> >> ep93xx-adc ep93xx-adc: Cannot enable clock
> >> ep93xx-adc: probe of ep93xx-adc failed with error -108
> >>
> >> Signed-off-by: Alexander Sverdlin <[email protected]>
> > Acked-by: Jonathan Cameron <[email protected]>
> >
> > From cover letter I'm assuming you want these to go through same route as
> > the common clock conversion? If not shout and I can pick this one up.
>
> We didn't manage to consolidate the delivery path for this series, could
> you please take this patch alone, as you proposed initially?

Sure. Applied to the togreg branch of iio.git and pushed out as testing for
0-day to see if it can find anything we missed.

Thanks,

Jonathan
>
> >> ---
> >> drivers/iio/adc/ep93xx_adc.c | 6 +++---
> >> 1 file changed, 3 insertions(+), 3 deletions(-)
> >>
> >> diff --git a/drivers/iio/adc/ep93xx_adc.c b/drivers/iio/adc/ep93xx_adc.c
> >> index c08ab3c6dfaf..5c85257b814c 100644
> >> --- a/drivers/iio/adc/ep93xx_adc.c
> >> +++ b/drivers/iio/adc/ep93xx_adc.c
> >> @@ -207,7 +207,7 @@ static int ep93xx_adc_probe(struct platform_device *pdev)
> >> */
> >> }
> >>
> >> - ret = clk_enable(priv->clk);
> >> + ret = clk_prepare_enable(priv->clk);
> >> if (ret) {
> >> dev_err(&pdev->dev, "Cannot enable clock\n");
> >> return ret;
> >> @@ -215,7 +215,7 @@ static int ep93xx_adc_probe(struct platform_device *pdev)
> >>
> >> ret = iio_device_register(iiodev);
> >> if (ret)
> >> - clk_disable(priv->clk);
> >> + clk_disable_unprepare(priv->clk);
> >>
> >> return ret;
> >> }
> >> @@ -226,7 +226,7 @@ static int ep93xx_adc_remove(struct platform_device *pdev)
> >> struct ep93xx_adc_priv *priv = iio_priv(iiodev);
> >>
> >> iio_device_unregister(iiodev);
> >> - clk_disable(priv->clk);
> >> + clk_disable_unprepare(priv->clk);
> >>
> >> return 0;
> >> }
> >