u-boot/arch/arm/cpu
Stephen Warren 2364e151e4 ARM: tegra: use a CPU freq that all SKUs can support
U-Boot on Tegra30 currently selects a main CPU frequency that cannot be
supported at all on some SKUs, and needs higher VDD_CPU/VDD_CORE values
on some others. This can result in unreliable operation of the main CPUs.

Resolve this by switching to a CPU frequency that can be supported by any
SKU. According to the following link, the maximum supported CPU frequency
of the slowest Tegra30 SKU is 600MHz:

repo http://nv-tegra.nvidia.com/gitweb/?p=linux-2.6.git;a=summary
branch l4t/l4t-r16-r2
path arch/arm/mach-tegra/tegra3_dvfs.c
table cpu_dvfs_table[]

According to that same table, the minimum VDD_CPU required to operate at
that frequency across all SKUs is 1.007V. Given the adjustment resolution
of the TPS65911 PMIC that's used on all Tegra30-based boards we support,
we'll end up using 1.0125V instead.

At that VDD_CPU, tegra3_get_core_floor_mv() in that same file dictates
that VDD_CORE must be at least 1.2V on all SKUs. According to
tegra_core_speedo_mv() (in tegra3_speedo.c in the same source tree),
that voltage is safe for all SKUs.

An alternative would be to port much of the code from tegra3_dvfs.c and
tegra3_speedo.c in the kernel tree mentioned above. That's more work
than I want to take on right now.

While all the currently supported boards use the same regulator chip for
VDD_CPU, different types of regulators are used for VDD_CORE. Hence, we
add some small conditional code to select how VDD_CORE is programmed. If
this becomes more complex in the future as new boards are added, or we
end up adding code to detect the SoC SKU and dynamically determine the
allowed frequency and required voltages, we should probably make this a
runtime call into a function provided by the board file and/or relevant
PMIC driver.

Cc: Alban Bedel <alban.bedel@avionic-design.de>
Cc: Marcel Ziswiler <marcel@ziswiler.com>
Cc: Bard Liao <bardliao@realtek.com>
Signed-off-by: Stephen Warren <swarren@nvidia.com>
Signed-off-by: Tom Warren <twarren@nvidia.com>
2014-05-13 10:41:32 -07:00
..
arm720t ARM: tegra: use a CPU freq that all SKUs can support 2014-05-13 10:41:32 -07:00
arm920t arm: remove unneeded symbol offsets and _TEXT_BASE 2014-02-26 21:18:12 +01:00
arm926ejs arm, da850: staticize funtions 2014-04-17 17:24:40 -04:00
arm946es arm: remove unneeded symbol offsets and _TEXT_BASE 2014-02-26 21:18:12 +01:00
arm1136 kbuild: move asm-offsets.c from SoC directory to arch/$(ARCH)/lib 2014-03-28 15:06:29 -04:00
arm1176 arm: remove unneeded symbol offsets and _TEXT_BASE 2014-02-26 21:18:12 +01:00
arm_intcm arm: remove unneeded symbol offsets and _TEXT_BASE 2014-02-26 21:18:12 +01:00
armv7 am335x: Switch to CONFIG_SKIP_LOWLEVEL_INIT from guarding SPL or NOR_BOOT 2014-04-17 17:24:40 -04:00
armv8 arm64 patch: gicv3 support 2014-04-08 00:15:12 +02:00
at91-common Merge branch 'master' of git://git.denx.de/u-boot-arm 2014-03-10 14:22:54 -04:00
pxa Merge branch 'master' of git://git.denx.de/u-boot-arm 2014-02-26 16:49:58 -05:00
sa1100 arm: remove unneeded symbol offsets and _TEXT_BASE 2014-02-26 21:18:12 +01:00
tegra-common ARM: tegra: add function to enable input clamping on tristate 2014-05-13 10:41:31 -07:00
tegra20-common Merge branch 'u-boot/master' 2014-05-09 11:50:14 +02:00
tegra30-common ARM: tegra: Tegra30 pinmux cleanup 2014-04-17 08:41:05 -07:00
tegra114-common ARM: tegra: Tegra114 pinmux cleanup 2014-04-17 08:41:06 -07:00
tegra124-common ARM: tegra: Tegra124 pinmux cleanup 2014-04-17 08:41:06 -07:00
Makefile kbuild: use boolean macros to select tegra*-common directory 2014-04-17 17:44:35 -04:00
u-boot-spl.lds arm: make _end compiler-generated 2014-02-26 21:18:09 +01:00
u-boot.lds arm: Handle .gnu.hash section in ldscripts 2014-04-07 11:12:18 +02:00