aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@arm.linux.org.uk>2014-04-05 06:50:38 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2014-05-29 19:50:12 -0400
commitb16cee70fdadaa500e0f962ae76877843281192e (patch)
treeef6e38f0c98fad4992b3f97637a9b1c2c1b87c24
parentf9040550bef6f05e68af029f11c371a318220a05 (diff)
ARM: l2c: tegra: convert to common l2c310 early resume functionality
Acked-by: Stephen Warren <swarren@nvidia.com> Tested-by: Stephen Warren <swarren@nvidia.com> Reviewed-by: Joseph Lo <josephl@nvidia.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r--arch/arm/mach-tegra/pm.h2
-rw-r--r--arch/arm/mach-tegra/reset-handler.S11
-rw-r--r--arch/arm/mach-tegra/sleep.h31
-rw-r--r--arch/arm/mach-tegra/tegra.c6
4 files changed, 4 insertions, 46 deletions
diff --git a/arch/arm/mach-tegra/pm.h b/arch/arm/mach-tegra/pm.h
index 6e92a7c2ecbd..f4a89698e5b0 100644
--- a/arch/arm/mach-tegra/pm.h
+++ b/arch/arm/mach-tegra/pm.h
@@ -35,8 +35,6 @@ void tegra20_sleep_core_init(void);
35void tegra30_lp1_iram_hook(void); 35void tegra30_lp1_iram_hook(void);
36void tegra30_sleep_core_init(void); 36void tegra30_sleep_core_init(void);
37 37
38extern unsigned long l2x0_saved_regs_addr;
39
40void tegra_clear_cpu_in_lp2(void); 38void tegra_clear_cpu_in_lp2(void);
41bool tegra_set_cpu_in_lp2(void); 39bool tegra_set_cpu_in_lp2(void);
42 40
diff --git a/arch/arm/mach-tegra/reset-handler.S b/arch/arm/mach-tegra/reset-handler.S
index 8c1ba4fea384..578d4d1ad648 100644
--- a/arch/arm/mach-tegra/reset-handler.S
+++ b/arch/arm/mach-tegra/reset-handler.S
@@ -19,7 +19,6 @@
19 19
20#include <asm/cache.h> 20#include <asm/cache.h>
21#include <asm/asm-offsets.h> 21#include <asm/asm-offsets.h>
22#include <asm/hardware/cache-l2x0.h>
23 22
24#include "flowctrl.h" 23#include "flowctrl.h"
25#include "fuse.h" 24#include "fuse.h"
@@ -78,8 +77,10 @@ ENTRY(tegra_resume)
78 str r1, [r0] 77 str r1, [r0]
79#endif 78#endif
80 79
80#ifdef CONFIG_CACHE_L2X0
81 /* L2 cache resume & re-enable */ 81 /* L2 cache resume & re-enable */
82 l2_cache_resume r0, r1, r2, l2x0_saved_regs_addr 82 bl l2c310_early_resume
83#endif
83end_ca9_scu_l2_resume: 84end_ca9_scu_l2_resume:
84 mov32 r9, 0xc0f 85 mov32 r9, 0xc0f
85 cmp r8, r9 86 cmp r8, r9
@@ -89,12 +90,6 @@ end_ca9_scu_l2_resume:
89ENDPROC(tegra_resume) 90ENDPROC(tegra_resume)
90#endif 91#endif
91 92
92#ifdef CONFIG_CACHE_L2X0
93 .globl l2x0_saved_regs_addr
94l2x0_saved_regs_addr:
95 .long 0
96#endif
97
98 .align L1_CACHE_SHIFT 93 .align L1_CACHE_SHIFT
99ENTRY(__tegra_cpu_reset_handler_start) 94ENTRY(__tegra_cpu_reset_handler_start)
100 95
diff --git a/arch/arm/mach-tegra/sleep.h b/arch/arm/mach-tegra/sleep.h
index a032820d2fac..339fe42cd6fb 100644
--- a/arch/arm/mach-tegra/sleep.h
+++ b/arch/arm/mach-tegra/sleep.h
@@ -120,37 +120,6 @@
120 mov \tmp1, \tmp1, lsr #8 120 mov \tmp1, \tmp1, lsr #8
121.endm 121.endm
122 122
123/* Macro to resume & re-enable L2 cache */
124#ifndef L2X0_CTRL_EN
125#define L2X0_CTRL_EN 1
126#endif
127
128#ifdef CONFIG_CACHE_L2X0
129.macro l2_cache_resume, tmp1, tmp2, tmp3, phys_l2x0_saved_regs
130 W(adr) \tmp1, \phys_l2x0_saved_regs
131 ldr \tmp1, [\tmp1]
132 ldr \tmp2, [\tmp1, #L2X0_R_PHY_BASE]
133 ldr \tmp3, [\tmp2, #L2X0_CTRL]
134 tst \tmp3, #L2X0_CTRL_EN
135 bne exit_l2_resume
136 ldr \tmp3, [\tmp1, #L2X0_R_TAG_LATENCY]
137 str \tmp3, [\tmp2, #L310_TAG_LATENCY_CTRL]
138 ldr \tmp3, [\tmp1, #L2X0_R_DATA_LATENCY]
139 str \tmp3, [\tmp2, #L310_DATA_LATENCY_CTRL]
140 ldr \tmp3, [\tmp1, #L2X0_R_PREFETCH_CTRL]
141 str \tmp3, [\tmp2, #L310_PREFETCH_CTRL]
142 ldr \tmp3, [\tmp1, #L2X0_R_PWR_CTRL]
143 str \tmp3, [\tmp2, #L310_POWER_CTRL]
144 ldr \tmp3, [\tmp1, #L2X0_R_AUX_CTRL]
145 str \tmp3, [\tmp2, #L2X0_AUX_CTRL]
146 mov \tmp3, #L2X0_CTRL_EN
147 str \tmp3, [\tmp2, #L2X0_CTRL]
148exit_l2_resume:
149.endm
150#else /* CONFIG_CACHE_L2X0 */
151.macro l2_cache_resume, tmp1, tmp2, tmp3, phys_l2x0_saved_regs
152.endm
153#endif /* CONFIG_CACHE_L2X0 */
154#else 123#else
155void tegra_pen_lock(void); 124void tegra_pen_lock(void);
156void tegra_pen_unlock(void); 125void tegra_pen_unlock(void);
diff --git a/arch/arm/mach-tegra/tegra.c b/arch/arm/mach-tegra/tegra.c
index fb802e24b647..1bc49f9db015 100644
--- a/arch/arm/mach-tegra/tegra.c
+++ b/arch/arm/mach-tegra/tegra.c
@@ -73,11 +73,7 @@ u32 tegra_uart_config[3] = {
73static void __init tegra_init_cache(void) 73static void __init tegra_init_cache(void)
74{ 74{
75#ifdef CONFIG_CACHE_L2X0 75#ifdef CONFIG_CACHE_L2X0
76 int ret; 76 l2x0_of_init(0x3c400001, 0xc20fc3fe);
77
78 ret = l2x0_of_init(0x3c400001, 0xc20fc3fe);
79 if (!ret)
80 l2x0_saved_regs_addr = virt_to_phys(&l2x0_saved_regs);
81#endif 77#endif
82} 78}
83 79