2022-05-12 23:31:31

by Tony Lindgren

[permalink] [raw]
Subject: [PATCH] bus: ti-sysc: Fix warnings for unbind for serial

We can get "failed to disable" clock_unprepare warnings on unbind at least
for the serial console device if the unbind is done before the device has
been idled.

As some devices are using deferred idle, we must check the status for
pending idle work to idle the device.

Cc: Romain Naour <[email protected]>
Fixes: 76f0f772e469 ("bus: ti-sysc: Improve handling for no-reset-on-init and no-idle-on-init")
Signed-off-by: Tony Lindgren <[email protected]>
---
drivers/bus/ti-sysc.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/bus/ti-sysc.c b/drivers/bus/ti-sysc.c
--- a/drivers/bus/ti-sysc.c
+++ b/drivers/bus/ti-sysc.c
@@ -3395,7 +3395,9 @@ static int sysc_remove(struct platform_device *pdev)
struct sysc *ddata = platform_get_drvdata(pdev);
int error;

- cancel_delayed_work_sync(&ddata->idle_work);
+ /* Device can still be enabled, see deferred idle quirk in probe */
+ if (cancel_delayed_work_sync(&ddata->idle_work))
+ ti_sysc_idle(&ddata->idle_work.work);

error = pm_runtime_resume_and_get(ddata->dev);
if (error < 0) {
--
2.36.1


2022-05-14 03:17:35

by Romain Naour

[permalink] [raw]
Subject: Re: [PATCH] bus: ti-sysc: Fix warnings for unbind for serial

Hello,

Le 12/05/2022 à 07:30, Tony Lindgren a écrit :
> We can get "failed to disable" clock_unprepare warnings on unbind at least
> for the serial console device if the unbind is done before the device has
> been idled.
>
> As some devices are using deferred idle, we must check the status for
> pending idle work to idle the device.

I didn't noticed the "failed to disable" warning so far (kernel 5.10.106 from
ti-linux-kernel repository) but I applied this patch as suggested [1] while
investigating another issue "tty serial 8250 omap driver crash".

Reviewed-by: Romain Naour <[email protected]>

[1] https://marc.info/?l=linux-omap&m=164484408319083&w=2

Best regards,
Romain


>
> Cc: Romain Naour <[email protected]>
> Fixes: 76f0f772e469 ("bus: ti-sysc: Improve handling for no-reset-on-init and no-idle-on-init")
> Signed-off-by: Tony Lindgren <[email protected]>
> ---
> drivers/bus/ti-sysc.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/bus/ti-sysc.c b/drivers/bus/ti-sysc.c
> --- a/drivers/bus/ti-sysc.c
> +++ b/drivers/bus/ti-sysc.c
> @@ -3395,7 +3395,9 @@ static int sysc_remove(struct platform_device *pdev)
> struct sysc *ddata = platform_get_drvdata(pdev);
> int error;
>
> - cancel_delayed_work_sync(&ddata->idle_work);
> + /* Device can still be enabled, see deferred idle quirk in probe */
> + if (cancel_delayed_work_sync(&ddata->idle_work))
> + ti_sysc_idle(&ddata->idle_work.work);
>
> error = pm_runtime_resume_and_get(ddata->dev);
> if (error < 0) {