diff options
author | Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> | 2013-10-16 10:24:56 -0400 |
---|---|---|
committer | Daniel Lezcano <daniel.lezcano@linaro.org> | 2013-10-16 17:51:36 -0400 |
commit | 2d2c476f3c075bd2fdfce479245b2bf4d0879ec6 (patch) | |
tree | f7aef34e66d8e450095cb90205c1b8be64087cc0 /arch | |
parent | 1ce3c48e6c76920fa46bfdde84a69e155f880c32 (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.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-at91/at91sam9261.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-at91/at91sam9263.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-at91/at91sam9g45.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-at91/at91sam9rl.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-at91/pm.h | 55 |
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 | */ |
52 | static inline void at91sam9g45_standby(void) | 52 | static 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 | */ |
80 | static inline void at91sam9263_standby(void) | 84 | static 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 | |||
103 | static 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 |