• Stephen Warren's avatar
    ARM: tegra: support running in non-secure mode · 73c38934
    Stephen Warren authored
    
    
    When the CPU is in non-secure (NS) mode (when running U-Boot under a
    secure monitor), certain actions cannot be taken, since they would need
    to write to secure-only registers. One example is configuring the ARM
    architectural timer's CNTFRQ register.
    
    We could support this in one of two ways:
    1) Compile twice, once for secure mode (in which case anything goes) and
       once for non-secure mode (in which case certain actions are disabled).
       This complicates things, since everyone needs to keep track of
       different U-Boot binaries for different situations.
    2) Detect NS mode at run-time, and optionally skip any impossible actions.
       This has the advantage of a single U-Boot binary working in all cases.
    
    (2) is not possible on ARM in general, since there's no architectural way
    to detect secure-vs-non-secure. However, there is a Tegra-specific way to
    detect this.
    
    This patches uses that feature to detect secure vs. NS mode on Tegra, and
    uses that to:
    
    * Skip the ARM arch timer initialization.
    
    * Set/clear an environment variable so that boot scripts can take
      different action depending on which mode the CPU is in. This might be
      something like:
      if CPU is secure:
        load secure monitor code into RAM.
        boot secure monitor.
        secure monitor will restart (a new copy of) U-Boot in NS mode.
      else:
        execute normal boot process
    
    Signed-off-by: default avatarStephen Warren <swarren@nvidia.com>
    Signed-off-by: default avatarTom Warren <twarren@nvidia.com>
    73c38934