ARM: tegra: remove save/restore of CPU diag register
authorStephen Warren <swarren@nvidia.com>
Tue, 5 Mar 2013 00:05:57 +0000 (17:05 -0700)
committerStephen Warren <swarren@nvidia.com>
Mon, 11 Mar 2013 20:29:22 +0000 (14:29 -0600)
commit02e75d648899df96b79a4f98380679f48b91e3d4
treef85fbd3ebbd817acda092e7d2afd4798dafef8e2
parentc34f30e588d310a70f994659c06f0a31dfdcfc15
ARM: tegra: remove save/restore of CPU diag register

Prior to this change, {save,restore}_cpu_arch_register() collaborated to
maintain the value of the CPU diagnostic register across power cycles.
This was required to maintain any CPU errata workaround enable bits in
that register. However, now that the Tegra reset vector code always
enables all required workarounds, there is no need to save and restore
the diagnostic register; it is always explicitly programmed in the
required manner.

Hence, remove the save/restore logic.

This has the advantage that the kernel always directly controls the value
of this register every boot, rather than relying on a bootloader or other
kernel code having previously written the correct value into it. This
makes CPU0 (which was previously saved/restored) and CPUn (which should
have been set up by the reset vector) be controlled in exactly the same
way, which is easier to debug/find/...

In particular, when converting Tegra to a multi-platform kernel, the CPU0
diagnostic register value initially comes from the bootloader. Most Tegra
bootloaders don't yet enable all required CPU bug workarounds. The
previous commit updates the kernel to do so on any CPU power cycle.
However, the save/restore code ends up over-writing the value with the
old bootloader-driven value instead of the now more-likely-to-be-correct
kernel value!

Even irrespective of multi-platform conversion, this change limits the
kernel's exposure to any WARs the bootloader didn't enable for CPU0: on
the very first LP2 transition (CPU power-saving which power-cycles the
CPU), the correct value will be enabled.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
arch/arm/mach-tegra/cpuidle-tegra30.c
arch/arm/mach-tegra/pm.c