aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorJean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>2013-10-16 10:24:56 -0400
committerDaniel Lezcano <daniel.lezcano@linaro.org>2013-10-16 17:51:36 -0400
commit2d2c476f3c075bd2fdfce479245b2bf4d0879ec6 (patch)
treef7aef34e66d8e450095cb90205c1b8be64087cc0 /arch
parent1ce3c48e6c76920fa46bfdde84a69e155f880c32 (diff)
ARM: AT91: pm: Factorize standby function
Detect presence of second bank. So we do not need to have on function per SoC Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> Cc: Nicolas Ferre <nicolas.ferre@atmel.com> Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com> Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/mach-at91/at91sam9260.c2
-rw-r--r--arch/arm/mach-at91/at91sam9261.c2
-rw-r--r--arch/arm/mach-at91/at91sam9263.c2
-rw-r--r--arch/arm/mach-at91/at91sam9g45.c2
-rw-r--r--arch/arm/mach-at91/at91sam9rl.c2
-rw-r--r--arch/arm/mach-at91/pm.h55
6 files changed, 29 insertions, 36 deletions
diff --git a/arch/arm/mach-at91/at91sam9260.c b/arch/arm/mach-at91/at91sam9260.c
index ffe9ce70b53a..3b43d562d79c 100644
--- a/arch/arm/mach-at91/at91sam9260.c
+++ b/arch/arm/mach-at91/at91sam9260.c
@@ -353,7 +353,7 @@ static void __init at91sam9260_initialize(void)
353 /* Register GPIO subsystem */ 353 /* Register GPIO subsystem */
354 at91_gpio_init(at91sam9260_gpio, 3); 354 at91_gpio_init(at91sam9260_gpio, 3);
355 355
356 at91_pm_set_standby(at91sam9_standby); 356 at91_pm_set_standby(at91sam9_sdram_standby);
357} 357}
358 358
359/* -------------------------------------------------------------------- 359/* --------------------------------------------------------------------
diff --git a/arch/arm/mach-at91/at91sam9261.c b/arch/arm/mach-at91/at91sam9261.c
index 1edbb6fd4636..a0857c30a914 100644
--- a/arch/arm/mach-at91/at91sam9261.c
+++ b/arch/arm/mach-at91/at91sam9261.c
@@ -295,7 +295,7 @@ static void __init at91sam9261_initialize(void)
295 /* Register GPIO subsystem */ 295 /* Register GPIO subsystem */
296 at91_gpio_init(at91sam9261_gpio, 3); 296 at91_gpio_init(at91sam9261_gpio, 3);
297 297
298 at91_pm_set_sandby(at91sam9_standby); 298 at91_pm_set_standby(at91sam9_sdram_standby);
299} 299}
300 300
301/* -------------------------------------------------------------------- 301/* --------------------------------------------------------------------
diff --git a/arch/arm/mach-at91/at91sam9263.c b/arch/arm/mach-at91/at91sam9263.c
index 8c81c890618c..103a95baa8e2 100644
--- a/arch/arm/mach-at91/at91sam9263.c
+++ b/arch/arm/mach-at91/at91sam9263.c
@@ -332,7 +332,7 @@ static void __init at91sam9263_initialize(void)
332 /* Register GPIO subsystem */ 332 /* Register GPIO subsystem */
333 at91_gpio_init(at91sam9263_gpio, 5); 333 at91_gpio_init(at91sam9263_gpio, 5);
334 334
335 at91_pm_set_standby(at91sam9263_standby); 335 at91_pm_set_standby(at91sam9_sdram_standby);
336} 336}
337 337
338/* -------------------------------------------------------------------- 338/* --------------------------------------------------------------------
diff --git a/arch/arm/mach-at91/at91sam9g45.c b/arch/arm/mach-at91/at91sam9g45.c
index 8460f521c20b..f29731e9968c 100644
--- a/arch/arm/mach-at91/at91sam9g45.c
+++ b/arch/arm/mach-at91/at91sam9g45.c
@@ -381,7 +381,7 @@ static void __init at91sam9g45_initialize(void)
381 /* Register GPIO subsystem */ 381 /* Register GPIO subsystem */
382 at91_gpio_init(at91sam9g45_gpio, 5); 382 at91_gpio_init(at91sam9g45_gpio, 5);
383 383
384 at91_pm_set_standby(at91sam9g45_standby); 384 at91_pm_set_standby(at91_ddr_standby);
385} 385}
386 386
387/* -------------------------------------------------------------------- 387/* --------------------------------------------------------------------
diff --git a/arch/arm/mach-at91/at91sam9rl.c b/arch/arm/mach-at91/at91sam9rl.c
index c7986e4f4e0e..9e28f419f414 100644
--- a/arch/arm/mach-at91/at91sam9rl.c
+++ b/arch/arm/mach-at91/at91sam9rl.c
@@ -298,7 +298,7 @@ static void __init at91sam9rl_initialize(void)
298 /* Register GPIO subsystem */ 298 /* Register GPIO subsystem */
299 at91_gpio_init(at91sam9rl_gpio, 4); 299 at91_gpio_init(at91sam9rl_gpio, 4);
300 300
301 at91_pm_set_standby(at91sam9_standby); 301 at91_pm_set_standby(at91sam9_sdram_standby);
302} 302}
303 303
304/* -------------------------------------------------------------------- 304/* --------------------------------------------------------------------
diff --git a/arch/arm/mach-at91/pm.h b/arch/arm/mach-at91/pm.h
index 76dd1a749ebd..3ed190ce062b 100644
--- a/arch/arm/mach-at91/pm.h
+++ b/arch/arm/mach-at91/pm.h
@@ -49,16 +49,18 @@ static inline void at91rm9200_standby(void)
49/* We manage both DDRAM/SDRAM controllers, we need more than one value to 49/* We manage both DDRAM/SDRAM controllers, we need more than one value to
50 * remember. 50 * remember.
51 */ 51 */
52static inline void at91sam9g45_standby(void) 52static inline void at91_ddr_standby(void)
53{ 53{
54 /* Those two values allow us to delay self-refresh activation 54 /* Those two values allow us to delay self-refresh activation
55 * to the maximum. */ 55 * to the maximum. */
56 u32 lpr0, lpr1; 56 u32 lpr0, lpr1 = 0;
57 u32 saved_lpr0, saved_lpr1; 57 u32 saved_lpr0, saved_lpr1 = 0;
58 58
59 saved_lpr1 = at91_ramc_read(1, AT91_DDRSDRC_LPR); 59 if (at91_ramc_base[1]) {
60 lpr1 = saved_lpr1 & ~AT91_DDRSDRC_LPCB; 60 saved_lpr1 = at91_ramc_read(1, AT91_DDRSDRC_LPR);
61 lpr1 |= AT91_DDRSDRC_LPCB_SELF_REFRESH; 61 lpr1 = saved_lpr1 & ~AT91_DDRSDRC_LPCB;
62 lpr1 |= AT91_DDRSDRC_LPCB_SELF_REFRESH;
63 }
62 64
63 saved_lpr0 = at91_ramc_read(0, AT91_DDRSDRC_LPR); 65 saved_lpr0 = at91_ramc_read(0, AT91_DDRSDRC_LPR);
64 lpr0 = saved_lpr0 & ~AT91_DDRSDRC_LPCB; 66 lpr0 = saved_lpr0 & ~AT91_DDRSDRC_LPCB;
@@ -66,25 +68,29 @@ static inline void at91sam9g45_standby(void)
66 68
67 /* self-refresh mode now */ 69 /* self-refresh mode now */
68 at91_ramc_write(0, AT91_DDRSDRC_LPR, lpr0); 70 at91_ramc_write(0, AT91_DDRSDRC_LPR, lpr0);
69 at91_ramc_write(1, AT91_DDRSDRC_LPR, lpr1); 71 if (at91_ramc_base[1])
72 at91_ramc_write(1, AT91_DDRSDRC_LPR, lpr1);
70 73
71 cpu_do_idle(); 74 cpu_do_idle();
72 75
73 at91_ramc_write(0, AT91_DDRSDRC_LPR, saved_lpr0); 76 at91_ramc_write(0, AT91_DDRSDRC_LPR, saved_lpr0);
74 at91_ramc_write(1, AT91_DDRSDRC_LPR, saved_lpr1); 77 if (at91_ramc_base[1])
78 at91_ramc_write(1, AT91_DDRSDRC_LPR, saved_lpr1);
75} 79}
76 80
77/* We manage both DDRAM/SDRAM controllers, we need more than one value to 81/* We manage both DDRAM/SDRAM controllers, we need more than one value to
78 * remember. 82 * remember.
79 */ 83 */
80static inline void at91sam9263_standby(void) 84static inline void at91sam9_sdram_standby(void)
81{ 85{
82 u32 lpr0, lpr1; 86 u32 lpr0, lpr1 = 0;
83 u32 saved_lpr0, saved_lpr1; 87 u32 saved_lpr0, saved_lpr1 = 0;
84 88
85 saved_lpr1 = at91_ramc_read(1, AT91_SDRAMC_LPR); 89 if (at91_ramc_base[1]) {
86 lpr1 = saved_lpr1 & ~AT91_SDRAMC_LPCB; 90 saved_lpr1 = at91_ramc_read(1, AT91_SDRAMC_LPR);
87 lpr1 |= AT91_SDRAMC_LPCB_SELF_REFRESH; 91 lpr1 = saved_lpr1 & ~AT91_SDRAMC_LPCB;
92 lpr1 |= AT91_SDRAMC_LPCB_SELF_REFRESH;
93 }
88 94
89 saved_lpr0 = at91_ramc_read(0, AT91_SDRAMC_LPR); 95 saved_lpr0 = at91_ramc_read(0, AT91_SDRAMC_LPR);
90 lpr0 = saved_lpr0 & ~AT91_SDRAMC_LPCB; 96 lpr0 = saved_lpr0 & ~AT91_SDRAMC_LPCB;
@@ -92,27 +98,14 @@ static inline void at91sam9263_standby(void)
92 98
93 /* self-refresh mode now */ 99 /* self-refresh mode now */
94 at91_ramc_write(0, AT91_SDRAMC_LPR, lpr0); 100 at91_ramc_write(0, AT91_SDRAMC_LPR, lpr0);
95 at91_ramc_write(1, AT91_SDRAMC_LPR, lpr1); 101 if (at91_ramc_base[1])
102 at91_ramc_write(1, AT91_SDRAMC_LPR, lpr1);
96 103
97 cpu_do_idle(); 104 cpu_do_idle();
98 105
99 at91_ramc_write(0, AT91_SDRAMC_LPR, saved_lpr0); 106 at91_ramc_write(0, AT91_SDRAMC_LPR, saved_lpr0);
100 at91_ramc_write(1, AT91_SDRAMC_LPR, saved_lpr1); 107 if (at91_ramc_base[1])
101} 108 at91_ramc_write(1, AT91_SDRAMC_LPR, saved_lpr1);
102
103static inline void at91sam9_standby(void)
104{
105 u32 saved_lpr, lpr;
106
107 saved_lpr = at91_ramc_read(0, AT91_SDRAMC_LPR);
108
109 lpr = saved_lpr & ~AT91_SDRAMC_LPCB;
110 at91_ramc_write(0, AT91_SDRAMC_LPR, lpr |
111 AT91_SDRAMC_LPCB_SELF_REFRESH);
112
113 cpu_do_idle();
114
115 at91_ramc_write(0, AT91_SDRAMC_LPR, saved_lpr);
116} 109}
117 110
118#endif 111#endif