diff options
author | Varun Wadekar <vwadekar@nvidia.com> | 2013-11-11 15:49:34 +0530 |
---|---|---|
committer | Varun Wadekar <vwadekar@nvidia.com> | 2013-12-03 20:05:13 -0800 |
commit | 66c8ea1b606bffd20d6520e958859a76b8be86df (patch) | |
tree | f019e61852812d786cf91436b5df57e1d9cf4f1e /arch/arm/mach-tegra/common.c | |
parent | 3f2221cc49a7d8084a78e2b8ae9110d8f9d39fbc (diff) |
arm: tegra: use ARM's DEN0028 v0.9 and PSCI specs to define SMCs
Use SIP Service calls (0x82000000x) and Standard Service calls
(0x8400000x) from the DEN0028 spec.
PSCI says that we need to use 0x8400000x in r0 for any power
management features i.e. cpu idle/hotplug/on/off followed by the
actual cpu state (LP2/LP1/LP0) in r1. This translates to Std service
calls space mentioned in the DEN0028 spec.
The SIP service calls can be used by silicon partners for their CPU
specific settings. We use this SMC space for L2 settings and to set
the CPU reset vector.
SMCs that are interrupted return a special status code to the NS world.
Look for that status and send a restart SMC (value = 60 << 24) when
received.
Also removed save/restore of r4-r12 as we rely on the secure OS to
do this for us.
Change-Id: I6fae83cc96d29c23305177df770fa07f7970c383
Signed-off-by: Scott Long <scottl@nvidia.com>
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
Reviewed-on: http://git-master/r/329998
Diffstat (limited to 'arch/arm/mach-tegra/common.c')
-rw-r--r-- | arch/arm/mach-tegra/common.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/arm/mach-tegra/common.c b/arch/arm/mach-tegra/common.c index 5347059ac55d..9e81d557b0e3 100644 --- a/arch/arm/mach-tegra/common.c +++ b/arch/arm/mach-tegra/common.c @@ -603,9 +603,9 @@ static void tegra_cache_smc(bool enable, u32 arg) local_irq_save(flags); l2x0_enabled = readl_relaxed(p + L2X0_CTRL) & 1; if (enable && !l2x0_enabled) - tegra_generic_smc(0xFFFFF100, 0x00000001, arg); + tegra_generic_smc(0x82000002, 0x00000001, arg); else if (!enable && l2x0_enabled) - tegra_generic_smc(0xFFFFF100, 0x00000002, arg); + tegra_generic_smc(0x82000002, 0x00000002, arg); local_irq_restore(flags); if (need_affinity_switch && can_switch_affinity) { |