diff mbox series

[1/7] iio: ep93xx: Prepare clock before using it

Message ID 20210613233041.128961-2-alexander.sverdlin@gmail.com (mailing list archive)
State Accepted
Headers show
Series Prepare EP93xx drivers for Common Clock Framework | expand

Commit Message

Alexander Sverdlin June 13, 2021, 11:30 p.m. UTC
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 <alexander.sverdlin@gmail.com>
---
 drivers/iio/adc/ep93xx_adc.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Comments

Jonathan Cameron June 14, 2021, 10:50 a.m. UTC | #1
On Mon, 14 Jun 2021 01:30:35 +0200
Alexander Sverdlin <alexander.sverdlin@gmail.com> 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 <alexander.sverdlin@gmail.com>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

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;
>  }
Alexander Sverdlin June 14, 2021, 10:59 a.m. UTC | #2
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 <alexander.sverdlin@gmail.com>
> Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> 
> 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 Aug. 2, 2021, 7:30 a.m. UTC | #3
Hello Jonathan!

On 14/06/2021 12:50, Jonathan Cameron wrote:
> On Mon, 14 Jun 2021 01:30:35 +0200
> Alexander Sverdlin <alexander.sverdlin@gmail.com> 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 <alexander.sverdlin@gmail.com>
> Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> 
> 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;
>>  }
>
Jonathan Cameron Aug. 8, 2021, 1:58 p.m. UTC | #4
On Mon, 2 Aug 2021 09:30:23 +0200
Alexander Sverdlin <alexander.sverdlin@gmail.com> wrote:

> Hello Jonathan!
> 
> On 14/06/2021 12:50, Jonathan Cameron wrote:
> > On Mon, 14 Jun 2021 01:30:35 +0200
> > Alexander Sverdlin <alexander.sverdlin@gmail.com> 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 <alexander.sverdlin@gmail.com>  
> > Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> > 
> > 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;
> >>  }  
> >
diff mbox series

Patch

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;
 }