* [PATCH 0/2] i2c: designware: Fixes clock issues with platform driver
@ 2025-07-24 2:13 Kunihiko Hayashi
2025-07-24 2:13 ` [PATCH 1/2] i2c: designware: Fix clock issue when PM is disabled Kunihiko Hayashi
2025-07-24 2:13 ` [PATCH 2/2] i2c: designware: Add disabling clocks when probe fails Kunihiko Hayashi
0 siblings, 2 replies; 4+ messages in thread
From: Kunihiko Hayashi @ 2025-07-24 2:13 UTC (permalink / raw)
To: Jarkko Nikula, Andy Shevchenko, Mika Westerberg, Jan Dabros, Andi Shyti
Cc: Kohei Ito, linux-i2c, linux-kernel, Kunihiko Hayashi
This series fixes two clock issues with i2c-designware-platdrv driver.
The first is that the clocks aren't disabled when the driver exits if
CONFIG_PM=n, the other is that the clocks aren't disabled when the probe
function fails.
Kunihiko Hayashi (2):
i2c: designware: Fix clock issue when PM is disabled
i2c: designware: Add disabling clocks when probe fails
drivers/i2c/busses/i2c-designware-platdrv.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
--
2.34.1
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 1/2] i2c: designware: Fix clock issue when PM is disabled
2025-07-24 2:13 [PATCH 0/2] i2c: designware: Fixes clock issues with platform driver Kunihiko Hayashi
@ 2025-07-24 2:13 ` Kunihiko Hayashi
2025-07-24 4:05 ` Kunihiko Hayashi
2025-07-24 2:13 ` [PATCH 2/2] i2c: designware: Add disabling clocks when probe fails Kunihiko Hayashi
1 sibling, 1 reply; 4+ messages in thread
From: Kunihiko Hayashi @ 2025-07-24 2:13 UTC (permalink / raw)
To: Jarkko Nikula, Andy Shevchenko, Mika Westerberg, Jan Dabros, Andi Shyti
Cc: Kohei Ito, linux-i2c, linux-kernel, Kunihiko Hayashi
When removing the driver, enable the clocks once by calling
pm_runtime_get_sync(), and call pm_runtime_put_sync() to disable
the clocks.
If CONFIG_PM=y, clocks for this controller are disabled when it's in
the idle state. So the clocks are properly disabled when the driver
exits.
Othewise, the clocks are always enabled and the PM functions have
no effect. Therefore, the driver exits without disabling the clocks.
# cat /sys/kernel/debug/clk/clk-pclk/clk_enable_count
18
# echo 1214a000.i2c > /sys/bus/platform/drivers/i2c_designware/bind
# cat /sys/kernel/debug/clk/clk-pclk/clk_enable_count
20
# echo 1214a000.i2c > /sys/bus/platform/drivers/i2c_designware/unbind
# cat /sys/kernel/debug/clk/clk-pclk/clk_enable_count
20
To ensure that the clocks can be disabled correctly even without
CONFIG_PM=y, should add the following fixes:
- Replace with pm_runtime_put_noidle(), which only decrements the clock
count.
- Call i2c_dw_prepare_clk(false) to explicitly disable the clocks.
Fixes: 7272194ed391f ("i2c-designware: add minimal support for runtime PM")
Co-developed-by: Kohei Ito <ito.kohei@socionext.com>
Signed-off-by: Kohei Ito <ito.kohei@socionext.com>
Signed-off-by: Kunihiko Hayashi <hayashi.kunihiko@socionext.com>
---
drivers/i2c/busses/i2c-designware-platdrv.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c
index d6e1ee935399..edaebfb165f9 100644
--- a/drivers/i2c/busses/i2c-designware-platdrv.c
+++ b/drivers/i2c/busses/i2c-designware-platdrv.c
@@ -325,9 +325,11 @@ static void dw_i2c_plat_remove(struct platform_device *pdev)
i2c_dw_disable(dev);
pm_runtime_dont_use_autosuspend(device);
- pm_runtime_put_sync(device);
+ pm_runtime_put_noidle(device);
dw_i2c_plat_pm_cleanup(dev);
+ i2c_dw_prepare_clk(dev, false);
+
i2c_dw_remove_lock_support(dev);
reset_control_assert(dev->rst);
--
2.34.1
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [PATCH 1/2] i2c: designware: Fix clock issue when PM is disabled
2025-07-24 2:13 ` [PATCH 1/2] i2c: designware: Fix clock issue when PM is disabled Kunihiko Hayashi
@ 2025-07-24 4:05 ` Kunihiko Hayashi
0 siblings, 0 replies; 4+ messages in thread
From: Kunihiko Hayashi @ 2025-07-24 4:05 UTC (permalink / raw)
To: Jarkko Nikula, Andy Shevchenko, Mika Westerberg, Jan Dabros, Andi Shyti
Cc: linux-i2c, linux-kernel, ito.kohei
On 2025/07/24 11:13, Kunihiko Hayashi wrote:
> When removing the driver, enable the clocks once by calling
> pm_runtime_get_sync(), and call pm_runtime_put_sync() to disable
> the clocks.
>
> If CONFIG_PM=y, clocks for this controller are disabled when it's in
> the idle state. So the clocks are properly disabled when the driver
> exits.
>
> Othewise, the clocks are always enabled and the PM functions have
> no effect. Therefore, the driver exits without disabling the clocks.
>
> # cat /sys/kernel/debug/clk/clk-pclk/clk_enable_count
> 18
> # echo 1214a000.i2c > /sys/bus/platform/drivers/i2c_designware/bind
> # cat /sys/kernel/debug/clk/clk-pclk/clk_enable_count
> 20
> # echo 1214a000.i2c > /sys/bus/platform/drivers/i2c_designware/unbind
> # cat /sys/kernel/debug/clk/clk-pclk/clk_enable_count
> 20
>
> To ensure that the clocks can be disabled correctly even without
> CONFIG_PM=y, should add the following fixes:
>
> - Replace with pm_runtime_put_noidle(), which only decrements the clock
> count.
This description is wrong.
The pm_runtime_put_noidle() decrements the runtime PM usage count.
> - Call i2c_dw_prepare_clk(false) to explicitly disable the clocks.
This decrements the clock count.
I'll fix it and resend as v2.
Thanks,
---
Best Regards
Kunihiko Hayashi
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 2/2] i2c: designware: Add disabling clocks when probe fails
2025-07-24 2:13 [PATCH 0/2] i2c: designware: Fixes clock issues with platform driver Kunihiko Hayashi
2025-07-24 2:13 ` [PATCH 1/2] i2c: designware: Fix clock issue when PM is disabled Kunihiko Hayashi
@ 2025-07-24 2:13 ` Kunihiko Hayashi
1 sibling, 0 replies; 4+ messages in thread
From: Kunihiko Hayashi @ 2025-07-24 2:13 UTC (permalink / raw)
To: Jarkko Nikula, Andy Shevchenko, Mika Westerberg, Jan Dabros, Andi Shyti
Cc: Kohei Ito, linux-i2c, linux-kernel, Kunihiko Hayashi
After an error occurs during probing state, dw_i2c_plat_pm_cleanup() is
called. However, this function doesn't disable clocks and the clock-enable
count keeps increasing. Should disable these clocks explicitly.
Co-developed-by: Kohei Ito <ito.kohei@socionext.com>
Signed-off-by: Kohei Ito <ito.kohei@socionext.com>
Signed-off-by: Kunihiko Hayashi <hayashi.kunihiko@socionext.com>
---
drivers/i2c/busses/i2c-designware-platdrv.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c
index edaebfb165f9..f6424dcfdff6 100644
--- a/drivers/i2c/busses/i2c-designware-platdrv.c
+++ b/drivers/i2c/busses/i2c-designware-platdrv.c
@@ -308,6 +308,7 @@ static int dw_i2c_plat_probe(struct platform_device *pdev)
exit_probe:
dw_i2c_plat_pm_cleanup(dev);
+ i2c_dw_prepare_clk(dev, false);
exit_reset:
reset_control_assert(dev->rst);
return ret;
--
2.34.1
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2025-07-24 4:05 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-07-24 2:13 [PATCH 0/2] i2c: designware: Fixes clock issues with platform driver Kunihiko Hayashi
2025-07-24 2:13 ` [PATCH 1/2] i2c: designware: Fix clock issue when PM is disabled Kunihiko Hayashi
2025-07-24 4:05 ` Kunihiko Hayashi
2025-07-24 2:13 ` [PATCH 2/2] i2c: designware: Add disabling clocks when probe fails Kunihiko Hayashi
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®