Message ID | 5267432.TORlj1Iv40@diego (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Sun, Sep 13, 2015 at 12:20:36PM +0100, Heiko Stübner wrote: > Again a result of the gpio-clock-liberation the rk3368 needs the > pclk_pd_pmu marked as critical, to boot successfully. > > Reported-by: Mark Rutland <mark.rutland@arm.com> > Signed-off-by: Heiko Stuebner <heiko@sntech.de> FWIW: Tested-by: Mark Rutland <mark.rutland@arm.com> I'm surprised that we don't describe these as critical in the DT, given that this isn't really an internal property of the clock controller, but rather what happens to be attached to it. That ship appears to have sailed, however. Thanks, Mark. > --- > should go on top of clk-fixes. Sorry only finding these piece > by piece :-) . > > drivers/clk/rockchip/clk-rk3368.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/drivers/clk/rockchip/clk-rk3368.c b/drivers/clk/rockchip/clk-rk3368.c > index 9c5d61e..7e6b783 100644 > --- a/drivers/clk/rockchip/clk-rk3368.c > +++ b/drivers/clk/rockchip/clk-rk3368.c > @@ -818,6 +818,10 @@ static struct rockchip_clk_branch rk3368_clk_branches[] __initdata = { > GATE(0, "sclk_timer00", "xin24m", CLK_IGNORE_UNUSED, RK3368_CLKGATE_CON(24), 0, GFLAGS), > }; > > +static const char *const rk3368_critical_clocks[] __initconst = { > + "pclk_pd_pmu", > +}; > + > static void __init rk3368_clk_init(struct device_node *np) > { > void __iomem *reg_base; > @@ -862,6 +866,8 @@ static void __init rk3368_clk_init(struct device_node *np) > RK3368_GRF_SOC_STATUS0); > rockchip_clk_register_branches(rk3368_clk_branches, > ARRAY_SIZE(rk3368_clk_branches)); > + rockchip_clk_protect_critical(rk3368_critical_clocks, > + ARRAY_SIZE(rk3368_critical_clocks)); > > rockchip_clk_register_armclk(ARMCLKB, "armclkb", > mux_armclkb_p, ARRAY_SIZE(mux_armclkb_p), > -- > 2.5.1 > >
Am Montag, 14. September 2015, 15:19:21 schrieb Mark Rutland: > On Sun, Sep 13, 2015 at 12:20:36PM +0100, Heiko Stübner wrote: > > Again a result of the gpio-clock-liberation the rk3368 needs the > > pclk_pd_pmu marked as critical, to boot successfully. > > > > Reported-by: Mark Rutland <mark.rutland@arm.com> > > Signed-off-by: Heiko Stuebner <heiko@sntech.de> > > FWIW: Tested-by: Mark Rutland <mark.rutland@arm.com> > > I'm surprised that we don't describe these as critical in the DT, given > that this isn't really an internal property of the clock controller, but > rather what happens to be attached to it. That ship appears to have > sailed, however. I wouldn't necessarily think so ... what is called critical only means "don't turn off when walking the clock-tree upwards". The pclk_pd_pmu for example simply supplies some more clocks we don't handle at all currently (pclk_pmu_noc, ...). That we currently choose to ignore those [because we don't have any code nor dt-bindings to handle the components supplied] sounds very much like an implementation-specific detail, not something about the hardware. I really like the concept of critical clock handling Mike is working on, which implements some sort of hand-off and keeps so marked clocks on until a real components picks them up.
On Mon, Sep 14, 2015 at 04:06:05PM +0100, Heiko Stübner wrote: > Am Montag, 14. September 2015, 15:19:21 schrieb Mark Rutland: > > On Sun, Sep 13, 2015 at 12:20:36PM +0100, Heiko Stübner wrote: > > > Again a result of the gpio-clock-liberation the rk3368 needs the > > > pclk_pd_pmu marked as critical, to boot successfully. > > > > > > Reported-by: Mark Rutland <mark.rutland@arm.com> > > > Signed-off-by: Heiko Stuebner <heiko@sntech.de> > > > > FWIW: Tested-by: Mark Rutland <mark.rutland@arm.com> > > > > I'm surprised that we don't describe these as critical in the DT, given > > that this isn't really an internal property of the clock controller, but > > rather what happens to be attached to it. That ship appears to have > > sailed, however. > > I wouldn't necessarily think so ... what is called critical only means "don't > turn off when walking the clock-tree upwards". > > The pclk_pd_pmu for example simply supplies some more clocks we don't handle > at all currently (pclk_pmu_noc, ...). That we currently choose to ignore those > [because we don't have any code nor dt-bindings to handle the components > supplied] sounds very much like an implementation-specific detail, not > something about the hardware. Sure, but the specific case that lead to this report was the fact that this clock (directly?) feeds the pinctrl programming interface, and that fact is neither described in the DT nor handled by the driver. Surely that should be described and handled? Thanks, Mark.
Am Montag, 14. September 2015, 16:19:42 schrieb Mark Rutland: > On Mon, Sep 14, 2015 at 04:06:05PM +0100, Heiko Stübner wrote: > > Am Montag, 14. September 2015, 15:19:21 schrieb Mark Rutland: > > > On Sun, Sep 13, 2015 at 12:20:36PM +0100, Heiko Stübner wrote: > > > > Again a result of the gpio-clock-liberation the rk3368 needs the > > > > pclk_pd_pmu marked as critical, to boot successfully. > > > > > > > > Reported-by: Mark Rutland <mark.rutland@arm.com> > > > > Signed-off-by: Heiko Stuebner <heiko@sntech.de> > > > > > > FWIW: Tested-by: Mark Rutland <mark.rutland@arm.com> > > > > > > I'm surprised that we don't describe these as critical in the DT, given > > > that this isn't really an internal property of the clock controller, but > > > rather what happens to be attached to it. That ship appears to have > > > sailed, however. > > > > I wouldn't necessarily think so ... what is called critical only means > > "don't turn off when walking the clock-tree upwards". > > > > The pclk_pd_pmu for example simply supplies some more clocks we don't > > handle at all currently (pclk_pmu_noc, ...). That we currently choose to > > ignore those [because we don't have any code nor dt-bindings to handle > > the components supplied] sounds very much like an implementation-specific > > detail, not something about the hardware. > > Sure, but the specific case that lead to this report was the fact that > this clock (directly?) feeds the pinctrl programming interface, and that > fact is neither described in the DT nor handled by the driver. Surely > that should be described and handled? nope it doesn't :-) pclk_pd_pmu feeds pclk_gpio0. Before the pinctrl patch, pclk_gpio0 was just statically on all the time, now it gets turned off when bank0 is not in use (between reads/writes and if no interrupts are enabled). This in turn makes the clock framework turn off pclk_pd_pmu (and thus its other unhandled child-clocks).
On 09/13, Heiko Stübner wrote: > Again a result of the gpio-clock-liberation the rk3368 needs the > pclk_pd_pmu marked as critical, to boot successfully. > > Reported-by: Mark Rutland <mark.rutland@arm.com> > Signed-off-by: Heiko Stuebner <heiko@sntech.de> > --- Applied to clk-fixes
diff --git a/drivers/clk/rockchip/clk-rk3368.c b/drivers/clk/rockchip/clk-rk3368.c index 9c5d61e..7e6b783 100644 --- a/drivers/clk/rockchip/clk-rk3368.c +++ b/drivers/clk/rockchip/clk-rk3368.c @@ -818,6 +818,10 @@ static struct rockchip_clk_branch rk3368_clk_branches[] __initdata = { GATE(0, "sclk_timer00", "xin24m", CLK_IGNORE_UNUSED, RK3368_CLKGATE_CON(24), 0, GFLAGS), }; +static const char *const rk3368_critical_clocks[] __initconst = { + "pclk_pd_pmu", +}; + static void __init rk3368_clk_init(struct device_node *np) { void __iomem *reg_base; @@ -862,6 +866,8 @@ static void __init rk3368_clk_init(struct device_node *np) RK3368_GRF_SOC_STATUS0); rockchip_clk_register_branches(rk3368_clk_branches, ARRAY_SIZE(rk3368_clk_branches)); + rockchip_clk_protect_critical(rk3368_critical_clocks, + ARRAY_SIZE(rk3368_critical_clocks)); rockchip_clk_register_armclk(ARMCLKB, "armclkb", mux_armclkb_p, ARRAY_SIZE(mux_armclkb_p),
Again a result of the gpio-clock-liberation the rk3368 needs the pclk_pd_pmu marked as critical, to boot successfully. Reported-by: Mark Rutland <mark.rutland@arm.com> Signed-off-by: Heiko Stuebner <heiko@sntech.de> --- should go on top of clk-fixes. Sorry only finding these piece by piece :-) . drivers/clk/rockchip/clk-rk3368.c | 6 ++++++ 1 file changed, 6 insertions(+)