On Fri, Mar 01, 2013 at 11:52:25AM +0900, Simon Horman wrote: > On Thu, Feb 28, 2013 at 01:21:58PM +0100, Guennadi Liakhovetski wrote: > > To reconfigure clocks, controlled by FRQCRA and FRQCRB, a kick bit has to > > be set and to make sure the setting has taken effect, it has to be read > > back repeatedly until it is cleared by the hardware. This patch adds the > > waiting part, that was missing until now. > > > > Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@xxxxxx> > > This patch seems to be ready to be applied. > > Magnus, could I get a review from you? Magnus, ping. > > --- > > > > As noted in patch 0/3, this patch affects existing systems, but AFAICS > > only theoretically - so far nobody is changing clock rates of any of the > > FRQCRA and FRQCRB clocks. Still, please, handle with care. > > > > arch/arm/mach-shmobile/clock-sh73a0.c | 23 +++++++++++++++++------ > > 1 files changed, 17 insertions(+), 6 deletions(-) > > > > diff --git a/arch/arm/mach-shmobile/clock-sh73a0.c b/arch/arm/mach-shmobile/clock-sh73a0.c > > index 71843dd..34b5c5a 100644 > > --- a/arch/arm/mach-shmobile/clock-sh73a0.c > > +++ b/arch/arm/mach-shmobile/clock-sh73a0.c > > @@ -21,6 +21,7 @@ > > #include <linux/io.h> > > #include <linux/sh_clk.h> > > #include <linux/clkdev.h> > > +#include <asm/processor.h> > > #include <mach/common.h> > > > > #define FRQCRA IOMEM(0xe6150000) > > @@ -234,14 +235,24 @@ static struct clk *main_clks[] = { > > &sh73a0_extalr_clk, > > }; > > > > -static void div4_kick(struct clk *clk) > > +static int frqcr_kick(void) > > { > > - unsigned long value; > > + int i; > > + > > + /* set KICK bit in FRQCRB to update hardware setting, check success */ > > + __raw_writel(__raw_readl(FRQCRB) | (1 << 31), FRQCRB); > > + for (i = 1000; i; i--) > > + if (__raw_readl(FRQCRB) & (1 << 31)) > > + cpu_relax(); > > + else > > + return i; > > + > > + return -ETIMEDOUT; > > +} > > > > - /* set KICK bit in FRQCRB to update hardware setting */ > > - value = __raw_readl(FRQCRB); > > - value |= (1 << 31); > > - __raw_writel(value, FRQCRB); > > +static void div4_kick(struct clk *clk) > > +{ > > + frqcr_kick(); > > } > > > > static int divisors[] = { 2, 3, 4, 6, 8, 12, 16, 18, > > -- > > 1.7.2.5 > > > > -- > > To unsubscribe from this list: send the line "unsubscribe linux-sh" in > > the body of a message to majordomo@xxxxxxxxxxxxxxx > > More majordomo info at http://vger.kernel.org/majordomo-info.html > > > -- > To unsubscribe from this list: send the line "unsubscribe linux-sh" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe cpufreq" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html