diff options
author | Scott Williams <scwilliams@nvidia.com> | 2011-07-20 18:13:59 -0700 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2011-11-30 21:46:57 -0800 |
commit | edd6779f31582fb6acdb59f58dfb4471fa4078d6 (patch) | |
tree | 51da38228f6253fffa6fda2907b4a3d0d850c19e /arch | |
parent | 6031a0cd1a2391a30e30a5edbcaccf5a1868969c (diff) |
ARM: tegra: power: Add TWD context save/restore
Change-Id: I629f77041ce444dfff32b563795573174afea3a1
Signed-off-by: Scott Williams <scwilliams@nvidia.com>
Signed-off-by: Dan Willemsen <dwillemsen@nvidia.com>
Rebase-Id: R7a21e91127b44461d219a8bfd388f99ba7a72b53
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/mach-tegra/timer.c | 16 | ||||
-rw-r--r-- | arch/arm/mach-tegra/timer.h | 13 |
2 files changed, 29 insertions, 0 deletions
diff --git a/arch/arm/mach-tegra/timer.c b/arch/arm/mach-tegra/timer.c index 2e42da31479d..c17d8e8ecca4 100644 --- a/arch/arm/mach-tegra/timer.c +++ b/arch/arm/mach-tegra/timer.c @@ -33,6 +33,7 @@ #include <asm/mach/time.h> #include <asm/localtimer.h> +#include <asm/smp_twd.h> #include <asm/sched_clock.h> #include <mach/iomap.h> @@ -201,6 +202,21 @@ static struct syscore_ops tegra_timer_syscore_ops = { .resume = tegra_timer_resume, }; +#ifdef CONFIG_HAVE_ARM_TWD +void tegra_twd_suspend(struct tegra_twd_context *context) +{ + context->twd_ctrl = readl(twd_base + TWD_TIMER_CONTROL); + context->twd_load = readl(twd_base + TWD_TIMER_LOAD); + __raw_writel(0, twd_base + TWD_TIMER_CONTROL); +} + +void tegra_twd_resume(struct tegra_twd_context *context) +{ + writel(context->twd_load, twd_base + TWD_TIMER_LOAD); + writel(context->twd_ctrl, twd_base + TWD_TIMER_CONTROL); +} +#endif + static void __init tegra_init_timer(void) { struct clk *clk; diff --git a/arch/arm/mach-tegra/timer.h b/arch/arm/mach-tegra/timer.h index 03997517e155..04d858fb77ea 100644 --- a/arch/arm/mach-tegra/timer.h +++ b/arch/arm/mach-tegra/timer.h @@ -35,4 +35,17 @@ void __init tegra2_init_timer(u32 *offset, int *irq); void __init tegra3_init_timer(u32 *offset, int *irq); #endif +struct tegra_twd_context { + u32 twd_ctrl; + u32 twd_load; +}; + +#ifdef CONFIG_HAVE_ARM_TWD +void tegra_twd_suspend(struct tegra_twd_context *context); +void tegra_twd_resume(struct tegra_twd_context *context); +#else +static inline void tegra_twd_suspend(struct tegra_twd_context *context) {} +static inline void tegra_twd_resume(struct tegra_twd_context *context) {} +#endif + #endif /* _MACH_TEGRA_TIMER_H_ */ |