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/arm/mach-at91/pm.h | |
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/arm/mach-at91/pm.h')
-rw-r--r-- | arch/arm/mach-at91/pm.h | 55 |
1 files changed, 24 insertions, 31 deletions
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 |