* [PATCH 00/20] ARM: at91: Properly handle slow clock
@ 2015-07-30 0:21 Alexandre Belloni
2015-07-30 0:22 ` [PATCH 20/20] clk: at91: Revert "keep slow clk enabled to prevent system hang" Alexandre Belloni
0 siblings, 1 reply; 3+ messages in thread
From: Alexandre Belloni @ 2015-07-30 0:21 UTC (permalink / raw)
To: Nicolas Ferre
Cc: Boris Brezillon, Daniel Lezcano, linux-watchdog, rtc-linux,
Alessandro Zummo, Dmitry Eremin-Solenikov, Michael Turquette,
linux-pm, Stephen Boyd, linux-kernel, Sebastian Reichel,
linux-clk, Wim Van Sebroeck, Alexandre Belloni, Maxime Ripard,
Thomas Gleixner, linux-arm-kernel
Hi,
It was discovered that all the slow clock user were not properly claiming it.
This can end up in a system hang because the last registered user is releasing
it, and it gets disabled.
commit dca1a4b5ff6e ("clk: at91: keep slow clk enabled to prevent system hang")
was a workaround. This series is adding the slow clock to the necessary drivers
to avoid the issue and then removes that workaround.
The Documentation updates and DT patches should probably go through the AT91
tree this cycle to avoid breakage.
Then the other patches can go through each subsystem tree. They are trivial
enough to also go in this cycle.
The final clk patch depends on the other ones and may be taken for the next
cycle to avoid synchronization issues.
I've thrown in a cleanup for at91-reset as it avoids adding support for that
clock to the platform data initialization
Cc: Alessandro Zummo <a.zummo@towertech.it>
Cc: rtc-linux@googlegroups.com
Cc: Wim Van Sebroeck <wim@iguana.be>
Cc: linux-watchdog@vger.kernel.org
Cc: Sebastian Reichel <sre@kernel.org>
Cc: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Cc: linux-pm@vger.kernel.org
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Michael Turquette <mturquette@baylibre.com>
Cc: Stephen Boyd <sboyd@codeaurora.org>
Cc: linux-clk@vger.kernel.org
Alexandre Belloni (20):
Documentation: dt: atmel-at91: add clocks to system timer, rstc and
shdwc
Documentation: watchdog: at91sam9_wdt: add clocks property
Documentation: dt: rtc: at91rm9200: add clocks property
ARM: at91/dt: at91rm9200: use slow clock where necessary
ARM: at91/dt: at91sam9260: use slow clock where necessary
ARM: at91/dt: at91sam9261: use slow clock where necessary
ARM: at91/dt: at91sam9263: use slow clock where necessary
ARM: at91/dt: at91sam9g45: use slow clock where necessary
ARM: at91/dt: at91sam9n12: use slow clock where necessary
ARM: at91/dt: at91sam9rl: use slow clock where necessary
ARM: at91/dt: at91sam9x5: use slow clock where necessary
ARM: at91/dt: sama5d3: use slow clock where necessary
ARM: at91/dt: sama5d4: use slow clock where necessary
rtc: at91rm9200: get and use slow clock
watchdog: at91sam9: get and use slow clock
power/reset: at91-reset: remove useless at91_reset_platform_probe()
power/reset: at91-reset: get and use slow clock
power/reset: at91-poweroff: get and use slow clock
clocksource: atmel-st: get and use slow clock
clk: at91: Revert "keep slow clk enabled to prevent system hang"
.../devicetree/bindings/arm/atmel-at91.txt | 11 +++--
.../bindings/rtc/atmel,at91rm9200-rtc.txt | 2 +
.../devicetree/bindings/watchdog/atmel-wdt.txt | 2 +
arch/arm/boot/dts/at91rm9200.dtsi | 2 +
arch/arm/boot/dts/at91sam9260.dtsi | 3 ++
arch/arm/boot/dts/at91sam9261.dtsi | 3 ++
arch/arm/boot/dts/at91sam9263.dtsi | 3 ++
arch/arm/boot/dts/at91sam9g45.dtsi | 4 ++
arch/arm/boot/dts/at91sam9n12.dtsi | 4 ++
arch/arm/boot/dts/at91sam9rl.dtsi | 4 ++
arch/arm/boot/dts/at91sam9x5.dtsi | 4 ++
arch/arm/boot/dts/sama5d3.dtsi | 4 ++
arch/arm/boot/dts/sama5d4.dtsi | 4 ++
drivers/clk/at91/clk-slow.c | 27 -------------
drivers/clocksource/timer-atmel-st.c | 31 +++++++++-----
drivers/power/reset/at91-poweroff.c | 13 ++++++
drivers/power/reset/at91-reset.c | 47 ++++++----------------
drivers/rtc/rtc-at91rm9200.c | 27 +++++++++++--
drivers/watchdog/at91sam9_wdt.c | 22 +++++++++-
19 files changed, 138 insertions(+), 79 deletions(-)
--
2.1.4
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 3+ messages in thread* [PATCH 20/20] clk: at91: Revert "keep slow clk enabled to prevent system hang"
2015-07-30 0:21 [PATCH 00/20] ARM: at91: Properly handle slow clock Alexandre Belloni
@ 2015-07-30 0:22 ` Alexandre Belloni
2015-08-11 23:26 ` Michael Turquette
0 siblings, 1 reply; 3+ messages in thread
From: Alexandre Belloni @ 2015-07-30 0:22 UTC (permalink / raw)
To: Nicolas Ferre
Cc: Boris Brezillon, Maxime Ripard, linux-arm-kernel, linux-kernel,
Alexandre Belloni, Michael Turquette, Stephen Boyd, linux-clk
Commit dca1a4b5ff6e ("clk: at91: keep slow clk enabled to prevent system
hang") added a workaround for the slow clock as it is not properly handled
by its users.
Now that the slow clock is taken properly by the drivers, this workaround
is not necessary anymore, revert it.
Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
---
Cc: Michael Turquette <mturquette@baylibre.com>
Cc: Stephen Boyd <sboyd@codeaurora.org>
Cc: linux-clk@vger.kernel.org
drivers/clk/at91/clk-slow.c | 27 ---------------------------
1 file changed, 27 deletions(-)
diff --git a/drivers/clk/at91/clk-slow.c b/drivers/clk/at91/clk-slow.c
index 98a84a865fe1..2c59d6a64dd5 100644
--- a/drivers/clk/at91/clk-slow.c
+++ b/drivers/clk/at91/clk-slow.c
@@ -70,7 +70,6 @@ struct clk_sam9x5_slow {
#define to_clk_sam9x5_slow(hw) container_of(hw, struct clk_sam9x5_slow, hw)
-static struct clk *slow_clk;
static int clk_slow_osc_prepare(struct clk_hw *hw)
{
@@ -358,8 +357,6 @@ at91_clk_register_sam9x5_slow(void __iomem *sckcr,
clk = clk_register(NULL, &slowck->hw);
if (IS_ERR(clk))
kfree(slowck);
- else
- slow_clk = clk;
return clk;
}
@@ -436,8 +433,6 @@ at91_clk_register_sam9260_slow(struct at91_pmc *pmc,
clk = clk_register(NULL, &slowck->hw);
if (IS_ERR(clk))
kfree(slowck);
- else
- slow_clk = clk;
return clk;
}
@@ -470,25 +465,3 @@ void __init of_at91sam9260_clk_slow_setup(struct device_node *np,
of_clk_add_provider(np, of_clk_src_simple_get, clk);
}
-
-/*
- * FIXME: All slow clk users are not properly claiming it (get + prepare +
- * enable) before using it.
- * If all users properly claiming this clock decide that they don't need it
- * anymore (or are removed), it is disabled while faulty users are still
- * requiring it, and the system hangs.
- * Prevent this clock from being disabled until all users are properly
- * requesting it.
- * Once this is done we should remove this function and the slow_clk variable.
- */
-static int __init of_at91_clk_slow_retain(void)
-{
- if (!slow_clk)
- return 0;
-
- __clk_get(slow_clk);
- clk_prepare_enable(slow_clk);
-
- return 0;
-}
-arch_initcall(of_at91_clk_slow_retain);
--
2.1.4
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH 20/20] clk: at91: Revert "keep slow clk enabled to prevent system hang"
2015-07-30 0:22 ` [PATCH 20/20] clk: at91: Revert "keep slow clk enabled to prevent system hang" Alexandre Belloni
@ 2015-08-11 23:26 ` Michael Turquette
0 siblings, 0 replies; 3+ messages in thread
From: Michael Turquette @ 2015-08-11 23:26 UTC (permalink / raw)
To: Alexandre Belloni, Nicolas Ferre
Cc: Boris Brezillon, Maxime Ripard, linux-arm-kernel, linux-kernel,
Alexandre Belloni, Stephen Boyd, linux-clk
Quoting Alexandre Belloni (2015-07-29 17:22:06)
> Commit dca1a4b5ff6e ("clk: at91: keep slow clk enabled to prevent system
> hang") added a workaround for the slow clock as it is not properly handled
> by its users.
>
> Now that the slow clock is taken properly by the drivers, this workaround
> is not necessary anymore, revert it.
>
> Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
> ---
> Cc: Michael Turquette <mturquette@baylibre.com>
> Cc: Stephen Boyd <sboyd@codeaurora.org>
> Cc: linux-clk@vger.kernel.org
> drivers/clk/at91/clk-slow.c | 27 ---------------------------
> 1 file changed, 27 deletions(-)
>
> diff --git a/drivers/clk/at91/clk-slow.c b/drivers/clk/at91/clk-slow.c
> index 98a84a865fe1..2c59d6a64dd5 100644
> --- a/drivers/clk/at91/clk-slow.c
> +++ b/drivers/clk/at91/clk-slow.c
> @@ -70,7 +70,6 @@ struct clk_sam9x5_slow {
>
> #define to_clk_sam9x5_slow(hw) container_of(hw, struct clk_sam9x5_slow, hw)
>
> -static struct clk *slow_clk;
>
Might want to remove one extra line of white space?
> static int clk_slow_osc_prepare(struct clk_hw *hw)
> {
> @@ -358,8 +357,6 @@ at91_clk_register_sam9x5_slow(void __iomem *sckcr,
> clk = clk_register(NULL, &slowck->hw);
> if (IS_ERR(clk))
> kfree(slowck);
> - else
> - slow_clk = clk;
>
> return clk;
> }
> @@ -436,8 +433,6 @@ at91_clk_register_sam9260_slow(struct at91_pmc *pmc,
> clk = clk_register(NULL, &slowck->hw);
> if (IS_ERR(clk))
> kfree(slowck);
> - else
> - slow_clk = clk;
>
> return clk;
> }
> @@ -470,25 +465,3 @@ void __init of_at91sam9260_clk_slow_setup(struct device_node *np,
>
> of_clk_add_provider(np, of_clk_src_simple_get, clk);
> }
> -
> -/*
> - * FIXME: All slow clk users are not properly claiming it (get + prepare +
> - * enable) before using it.
> - * If all users properly claiming this clock decide that they don't need it
> - * anymore (or are removed), it is disabled while faulty users are still
> - * requiring it, and the system hangs.
> - * Prevent this clock from being disabled until all users are properly
> - * requesting it.
> - * Once this is done we should remove this function and the slow_clk variable.
> - */
> -static int __init of_at91_clk_slow_retain(void)
> -{
> - if (!slow_clk)
> - return 0;
> -
> - __clk_get(slow_clk);
> - clk_prepare_enable(slow_clk);
> -
> - return 0;
> -}
> -arch_initcall(of_at91_clk_slow_retain);
This is a cool series. Thanks. Feel free to add my Ack, or we can take
this through clk-next once the other patches are applied.
Regards,
Mike
> --
> 2.1.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2015-08-11 23:26 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-07-30 0:21 [PATCH 00/20] ARM: at91: Properly handle slow clock Alexandre Belloni
2015-07-30 0:22 ` [PATCH 20/20] clk: at91: Revert "keep slow clk enabled to prevent system hang" Alexandre Belloni
2015-08-11 23:26 ` Michael Turquette
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox