arm: tcc8k: Fix bus clock calculation
There are two dividers used to derive bus clock from system clock: system clock is divided by SCKDIV+1, then by BCKDIV+1. SCKDIV divider has been ignored up to now, which is no problem as long as it is 0. Take SCKDIV into account for bus clock calculation. Signed-off-by: Oskar Schirmer <oskar@linutronix.de> Cc: bigeasy@linutronix.de Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
parent
cfeeb2f998
commit
f91f9cd505
|
@ -308,10 +308,17 @@ static unsigned long get_rate_sys(struct clk *clk)
|
||||||
|
|
||||||
static unsigned long get_rate_bus(struct clk *clk)
|
static unsigned long get_rate_bus(struct clk *clk)
|
||||||
{
|
{
|
||||||
unsigned int div;
|
unsigned int reg, sdiv, bdiv, rate;
|
||||||
|
|
||||||
div = (__raw_readl(CKC_BASE + CLKCTRL_OFFS) >> 4) & 0xff;
|
reg = __raw_readl(CKC_BASE + CLKCTRL_OFFS);
|
||||||
return get_rate_sys(clk) / (div + 1);
|
rate = get_rate_sys(clk);
|
||||||
|
sdiv = (reg >> 20) & 3;
|
||||||
|
if (sdiv)
|
||||||
|
rate /= sdiv + 1;
|
||||||
|
bdiv = (reg >> 4) & 0xff;
|
||||||
|
if (bdiv)
|
||||||
|
rate /= bdiv + 1;
|
||||||
|
return rate;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned long get_rate_cpu(struct clk *clk)
|
static unsigned long get_rate_cpu(struct clk *clk)
|
||||||
|
|
Loading…
Reference in New Issue