• Stephen Warren's avatar
    ARM: tegra: remove save/restore of CPU diag register · 02e75d64
    Stephen Warren authored
    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: default avatarStephen Warren <swarren@nvidia.com>
    02e75d64
cpuidle-tegra30.c 4.22 KB