On 21 October 2015 at 11:34, Michael Turquette <[email protected]> wrote: > Quoting Joachim Eastwood (2015-10-20 03:42:14) >> On 20 October 2015 at 00:26, Stephen Boyd <[email protected]> wrote: >> > On 08/25, Joachim Eastwood wrote: >> >> CCU branch clock register must only be accessed while the base >> >> (parent) clock is running. Access with a disabled base clock >> >> will cause the system to hang. Fix this issue by adding code >> >> that check if the parent clock is running in the is_enabled >> >> clk_ops callback. >> >> >> >> This hang would occur when disabling unused clocks after AMBA >> >> runtime pm had already disabled some of the clocks. >> >> >> >> Signed-off-by: Joachim Eastwood <[email protected]> >> >> --- >> >> >> >> No changes from v1. >> >> >> >> drivers/clk/nxp/clk-lpc18xx-ccu.c | 14 ++++++++++++++ >> >> 1 file changed, 14 insertions(+) >> >> >> >> diff --git a/drivers/clk/nxp/clk-lpc18xx-ccu.c >> >> b/drivers/clk/nxp/clk-lpc18xx-ccu.c >> >> index eeaee97da110..1845476e635e 100644 >> >> --- a/drivers/clk/nxp/clk-lpc18xx-ccu.c >> >> +++ b/drivers/clk/nxp/clk-lpc18xx-ccu.c >> >> @@ -180,6 +180,20 @@ static void lpc18xx_ccu_gate_disable(struct clk_hw >> >> *hw) >> >> static int lpc18xx_ccu_gate_is_enabled(struct clk_hw *hw) >> >> { >> >> struct clk_gate *gate = to_clk_gate(hw); >> >> + struct clk *parent; >> >> + >> >> + /* >> >> + * The branch clock registers are only accessible >> >> + * if the base (parent) clock is enabled. Register >> >> + * access with a disabled base clock will hang the >> >> + * system. >> >> + */ >> >> + parent = clk_get_parent(hw->clk); >> > >> > Why not use provider APIs (clk_hw_get_parent and we could add a >> > clk_hw_is_enabled)? >> >> That is simply because I didn't know it existed. >> Adding a clk_hw_is_enabled() seems like a good idea to me. >> >> >> >I also wonder why we don't just read the >> > register directly here instead of going through the framework to >> > find out if the parent is enabled? >> >> Reading the register when the parent clock is off will hang the hardware. > > I think Stephen meant, why not simply read the parent clk register?
The parent clk register is in another hardware block. regards, Joachim Eastwood -- To unsubscribe from this list: send the line "unsubscribe linux-clk" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
