Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f91f9cd5 authored by Oskar Schirmer's avatar Oskar Schirmer Committed by Thomas Gleixner
Browse files

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: default avatarOskar Schirmer <oskar@linutronix.de>
Cc: bigeasy@linutronix.de
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent cfeeb2f9
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -308,10 +308,17 @@ static unsigned long get_rate_sys(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;
	return get_rate_sys(clk) / (div + 1);
	reg = __raw_readl(CKC_BASE + CLKCTRL_OFFS);
	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)