]> git.sur5r.net Git - u-boot/commit
ARM: tegra: fix PLLP frequency calc on T210
authorStephen Warren <swarren@nvidia.com>
Wed, 19 Aug 2015 23:03:59 +0000 (17:03 -0600)
committerTom Warren <twarren@nvidia.com>
Wed, 16 Sep 2015 23:10:22 +0000 (16:10 -0700)
commit6c7dc6236a48752be548e0c6965b5a4a9076af11
tree8713f915d65273d041e13b2274196acf7b73e976
parentbfac08472371d4d6d4fa56972b0e1166f780633a
ARM: tegra: fix PLLP frequency calc on T210

AFAIK, for all PLLs on all Tegra SoCs, the primary PLL output frequency
is (input * m) / (n * p). However, PLLP's primary output (pllP_out0) on
T210 is the VCO output, and divp is not applied. pllP_out2 does have divp
applied. All other pllP_outN are divided down from pllP_out0. We only
support pllP_out0 in U-Boot at the time of writing.

Fix clock_get_rate() to handle this special case.

This corrects the returned rate for PLLP to be 408MHz rather than 204MHz.
In turn, this causes high enough dividers to be calculated for the various
peripheral clocks that feed off of PLLP. Without this, some peripherals
failed to operate correctly. For instance, one of my SD cards worked
perfectly but an older (presumably slower) card could not be read.

Note that prior to commit 722e000ccd72 "Tegra: PLL: use per-SoC pllinfo
table instead of PLL_DIVM/N/P, etc.", the calculated PLL frequency was
816MHz since the wrong values were being extracted from the PLLP divider
register. This caused overly large peripheral dividers to be calculated,
which while wrong, didn't cause any correctness issues; things simply ran
slower than they could.

Reported-by: Thierry Reding <treding@nvidia.com>
Signed-off-by: Stephen Warren <swarren@nvidia.com>
Signed-off-by: Tom Warren <twarren@nvidia.com>
arch/arm/mach-tegra/clock.c