MIPS: ath79: use correct fractional dividers for {CPU,DDR}_PLL on AR934x

The current dividers in the code are wrong and this
leads to broken CPU frequency calculation on boards
where the fractional part is used.

For example, if the SoC is running from a 40MHz
reference clock, refdiv=1, nint=14, outdiv=0 and
nfrac=31 the real frequency is 579.375MHz but the
current code calculates 569.687MHz instead.

Because the system time is indirectly related to
the CPU frequency the broken computation causes
drift in the system time.

The correct divider is 2^6 for the CPU PLL and 2^10
for the DDR PLL. Use the correct values to fix the
issue.

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
Cc: stable@vger.kernel.org
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/4305/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>

authored by

Gabor Juhos and committed by
Ralf Baechle
65fc7f99 d21a7713

+2 -2
+2 -2
arch/mips/ath79/clock.c
··· 189 189 AR934X_PLL_CPU_CONFIG_NFRAC_MASK; 190 190 191 191 cpu_pll = nint * ath79_ref_clk.rate / ref_div; 192 - cpu_pll += frac * ath79_ref_clk.rate / (ref_div * (2 << 6)); 192 + cpu_pll += frac * ath79_ref_clk.rate / (ref_div * (1 << 6)); 193 193 cpu_pll /= (1 << out_div); 194 194 195 195 pll = ath79_pll_rr(AR934X_PLL_DDR_CONFIG_REG); ··· 203 203 AR934X_PLL_DDR_CONFIG_NFRAC_MASK; 204 204 205 205 ddr_pll = nint * ath79_ref_clk.rate / ref_div; 206 - ddr_pll += frac * ath79_ref_clk.rate / (ref_div * (2 << 10)); 206 + ddr_pll += frac * ath79_ref_clk.rate / (ref_div * (1 << 10)); 207 207 ddr_pll /= (1 << out_div); 208 208 209 209 clk_ctrl = ath79_pll_rr(AR934X_PLL_CPU_DDR_CLK_CTRL_REG);