aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-at91
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-at91')
-rw-r--r--arch/arm/mach-at91/Kconfig96
-rw-r--r--arch/arm/mach-at91/Makefile2
-rw-r--r--arch/arm/mach-at91/at91sam9g45_devices.c56
-rw-r--r--arch/arm/mach-at91/board-eco920.c158
-rw-r--r--arch/arm/mach-at91/board-sam9m10g45ek.c1
-rw-r--r--arch/arm/mach-at91/cpuidle.c94
-rw-r--r--arch/arm/mach-at91/include/mach/board.h1
-rw-r--r--arch/arm/mach-at91/pm.c62
-rw-r--r--arch/arm/mach-at91/pm.h67
9 files changed, 442 insertions, 95 deletions
diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig
index 2fd88437348b..0b2ee953f164 100644
--- a/arch/arm/mach-at91/Kconfig
+++ b/arch/arm/mach-at91/Kconfig
@@ -1,5 +1,20 @@
1if ARCH_AT91 1if ARCH_AT91
2 2
3config HAVE_AT91_DATAFLASH_CARD
4 bool
5
6config HAVE_NAND_ATMEL_BUSWIDTH_16
7 bool
8
9config HAVE_AT91_USART3
10 bool
11
12config HAVE_AT91_USART4
13 bool
14
15config HAVE_AT91_USART5
16 bool
17
3menu "Atmel AT91 System-on-Chip" 18menu "Atmel AT91 System-on-Chip"
4 19
5choice 20choice
@@ -10,54 +25,69 @@ config ARCH_AT91RM9200
10 select CPU_ARM920T 25 select CPU_ARM920T
11 select GENERIC_TIME 26 select GENERIC_TIME
12 select GENERIC_CLOCKEVENTS 27 select GENERIC_CLOCKEVENTS
28 select HAVE_AT91_USART3
13 29
14config ARCH_AT91SAM9260 30config ARCH_AT91SAM9260
15 bool "AT91SAM9260 or AT91SAM9XE" 31 bool "AT91SAM9260 or AT91SAM9XE"
16 select CPU_ARM926T 32 select CPU_ARM926T
17 select GENERIC_TIME 33 select GENERIC_TIME
18 select GENERIC_CLOCKEVENTS 34 select GENERIC_CLOCKEVENTS
35 select HAVE_AT91_USART3
36 select HAVE_AT91_USART4
37 select HAVE_AT91_USART5
19 38
20config ARCH_AT91SAM9261 39config ARCH_AT91SAM9261
21 bool "AT91SAM9261" 40 bool "AT91SAM9261"
22 select CPU_ARM926T 41 select CPU_ARM926T
23 select GENERIC_TIME 42 select GENERIC_TIME
24 select GENERIC_CLOCKEVENTS 43 select GENERIC_CLOCKEVENTS
44 select HAVE_FB_ATMEL
25 45
26config ARCH_AT91SAM9G10 46config ARCH_AT91SAM9G10
27 bool "AT91SAM9G10" 47 bool "AT91SAM9G10"
28 select CPU_ARM926T 48 select CPU_ARM926T
29 select GENERIC_TIME 49 select GENERIC_TIME
30 select GENERIC_CLOCKEVENTS 50 select GENERIC_CLOCKEVENTS
51 select HAVE_FB_ATMEL
31 52
32config ARCH_AT91SAM9263 53config ARCH_AT91SAM9263
33 bool "AT91SAM9263" 54 bool "AT91SAM9263"
34 select CPU_ARM926T 55 select CPU_ARM926T
35 select GENERIC_TIME 56 select GENERIC_TIME
36 select GENERIC_CLOCKEVENTS 57 select GENERIC_CLOCKEVENTS
58 select HAVE_FB_ATMEL
37 59
38config ARCH_AT91SAM9RL 60config ARCH_AT91SAM9RL
39 bool "AT91SAM9RL" 61 bool "AT91SAM9RL"
40 select CPU_ARM926T 62 select CPU_ARM926T
41 select GENERIC_TIME 63 select GENERIC_TIME
42 select GENERIC_CLOCKEVENTS 64 select GENERIC_CLOCKEVENTS
65 select HAVE_AT91_USART3
66 select HAVE_FB_ATMEL
43 67
44config ARCH_AT91SAM9G20 68config ARCH_AT91SAM9G20
45 bool "AT91SAM9G20" 69 bool "AT91SAM9G20"
46 select CPU_ARM926T 70 select CPU_ARM926T
47 select GENERIC_TIME 71 select GENERIC_TIME
48 select GENERIC_CLOCKEVENTS 72 select GENERIC_CLOCKEVENTS
73 select HAVE_AT91_USART3
74 select HAVE_AT91_USART4
75 select HAVE_AT91_USART5
49 76
50config ARCH_AT91SAM9G45 77config ARCH_AT91SAM9G45
51 bool "AT91SAM9G45" 78 bool "AT91SAM9G45"
52 select CPU_ARM926T 79 select CPU_ARM926T
53 select GENERIC_TIME 80 select GENERIC_TIME
54 select GENERIC_CLOCKEVENTS 81 select GENERIC_CLOCKEVENTS
82 select HAVE_AT91_USART3
83 select HAVE_FB_ATMEL
55 84
56config ARCH_AT91CAP9 85config ARCH_AT91CAP9
57 bool "AT91CAP9" 86 bool "AT91CAP9"
58 select CPU_ARM926T 87 select CPU_ARM926T
59 select GENERIC_TIME 88 select GENERIC_TIME
60 select GENERIC_CLOCKEVENTS 89 select GENERIC_CLOCKEVENTS
90 select HAVE_FB_ATMEL
61 91
62config ARCH_AT91X40 92config ARCH_AT91X40
63 bool "AT91x40" 93 bool "AT91x40"
@@ -76,93 +106,88 @@ comment "AT91RM9200 Board Type"
76 106
77config MACH_ONEARM 107config MACH_ONEARM
78 bool "Ajeco 1ARM Single Board Computer" 108 bool "Ajeco 1ARM Single Board Computer"
79 depends on ARCH_AT91RM9200
80 help 109 help
81 Select this if you are using Ajeco's 1ARM Single Board Computer. 110 Select this if you are using Ajeco's 1ARM Single Board Computer.
82 <http://www.ajeco.fi/products.htm> 111 <http://www.ajeco.fi/products.htm>
83 112
84config ARCH_AT91RM9200DK 113config ARCH_AT91RM9200DK
85 bool "Atmel AT91RM9200-DK Development board" 114 bool "Atmel AT91RM9200-DK Development board"
86 depends on ARCH_AT91RM9200 115 select HAVE_AT91_DATAFLASH_CARD
87 help 116 help
88 Select this if you are using Atmel's AT91RM9200-DK Development board. 117 Select this if you are using Atmel's AT91RM9200-DK Development board.
89 (Discontinued) 118 (Discontinued)
90 119
91config MACH_AT91RM9200EK 120config MACH_AT91RM9200EK
92 bool "Atmel AT91RM9200-EK Evaluation Kit" 121 bool "Atmel AT91RM9200-EK Evaluation Kit"
93 depends on ARCH_AT91RM9200 122 select HAVE_AT91_DATAFLASH_CARD
94 help 123 help
95 Select this if you are using Atmel's AT91RM9200-EK Evaluation Kit. 124 Select this if you are using Atmel's AT91RM9200-EK Evaluation Kit.
96 <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3507> 125 <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3507>
97 126
98config MACH_CSB337 127config MACH_CSB337
99 bool "Cogent CSB337" 128 bool "Cogent CSB337"
100 depends on ARCH_AT91RM9200
101 help 129 help
102 Select this if you are using Cogent's CSB337 board. 130 Select this if you are using Cogent's CSB337 board.
103 <http://www.cogcomp.com/csb_csb337.htm> 131 <http://www.cogcomp.com/csb_csb337.htm>
104 132
105config MACH_CSB637 133config MACH_CSB637
106 bool "Cogent CSB637" 134 bool "Cogent CSB637"
107 depends on ARCH_AT91RM9200
108 help 135 help
109 Select this if you are using Cogent's CSB637 board. 136 Select this if you are using Cogent's CSB637 board.
110 <http://www.cogcomp.com/csb_csb637.htm> 137 <http://www.cogcomp.com/csb_csb637.htm>
111 138
112config MACH_CARMEVA 139config MACH_CARMEVA
113 bool "Conitec ARM&EVA" 140 bool "Conitec ARM&EVA"
114 depends on ARCH_AT91RM9200
115 help 141 help
116 Select this if you are using Conitec's AT91RM9200-MCU-Module. 142 Select this if you are using Conitec's AT91RM9200-MCU-Module.
117 <http://www.conitec.net/english/linuxboard.htm> 143 <http://www.conitec.net/english/linuxboard.htm>
118 144
119config MACH_ATEB9200 145config MACH_ATEB9200
120 bool "Embest ATEB9200" 146 bool "Embest ATEB9200"
121 depends on ARCH_AT91RM9200
122 help 147 help
123 Select this if you are using Embest's ATEB9200 board. 148 Select this if you are using Embest's ATEB9200 board.
124 <http://www.embedinfo.com/english/product/ATEB9200.asp> 149 <http://www.embedinfo.com/english/product/ATEB9200.asp>
125 150
126config MACH_KB9200 151config MACH_KB9200
127 bool "KwikByte KB920x" 152 bool "KwikByte KB920x"
128 depends on ARCH_AT91RM9200
129 help 153 help
130 Select this if you are using KwikByte's KB920x board. 154 Select this if you are using KwikByte's KB920x board.
131 <http://kwikbyte.com/KB9202_description_new.htm> 155 <http://kwikbyte.com/KB9202_description_new.htm>
132 156
133config MACH_PICOTUX2XX 157config MACH_PICOTUX2XX
134 bool "picotux 200" 158 bool "picotux 200"
135 depends on ARCH_AT91RM9200
136 help 159 help
137 Select this if you are using a picotux 200. 160 Select this if you are using a picotux 200.
138 <http://www.picotux.com/> 161 <http://www.picotux.com/>
139 162
140config MACH_KAFA 163config MACH_KAFA
141 bool "Sperry-Sun KAFA board" 164 bool "Sperry-Sun KAFA board"
142 depends on ARCH_AT91RM9200
143 help 165 help
144 Select this if you are using Sperry-Sun's KAFA board. 166 Select this if you are using Sperry-Sun's KAFA board.
145 167
146config MACH_ECBAT91 168config MACH_ECBAT91
147 bool "emQbit ECB_AT91 SBC" 169 bool "emQbit ECB_AT91 SBC"
148 depends on ARCH_AT91RM9200 170 select HAVE_AT91_DATAFLASH_CARD
149 help 171 help
150 Select this if you are using emQbit's ECB_AT91 board. 172 Select this if you are using emQbit's ECB_AT91 board.
151 <http://wiki.emqbit.com/free-ecb-at91> 173 <http://wiki.emqbit.com/free-ecb-at91>
152 174
153config MACH_YL9200 175config MACH_YL9200
154 bool "ucDragon YL-9200" 176 bool "ucDragon YL-9200"
155 depends on ARCH_AT91RM9200
156 help 177 help
157 Select this if you are using the ucDragon YL-9200 board. 178 Select this if you are using the ucDragon YL-9200 board.
158 179
159config MACH_CPUAT91 180config MACH_CPUAT91
160 bool "Eukrea CPUAT91" 181 bool "Eukrea CPUAT91"
161 depends on ARCH_AT91RM9200
162 help 182 help
163 Select this if you are using the Eukrea Electromatique's 183 Select this if you are using the Eukrea Electromatique's
164 CPUAT91 board <http://www.eukrea.com/>. 184 CPUAT91 board <http://www.eukrea.com/>.
165 185
186config MACH_ECO920
187 bool "eco920"
188 help
189 Select this if you are using the eco920 board
190
166endif 191endif
167 192
168# ---------------------------------------------------------- 193# ----------------------------------------------------------
@@ -173,7 +198,6 @@ comment "AT91SAM9260 Variants"
173 198
174config ARCH_AT91SAM9260_SAM9XE 199config ARCH_AT91SAM9260_SAM9XE
175 bool "AT91SAM9XE" 200 bool "AT91SAM9XE"
176 depends on ARCH_AT91SAM9260
177 help 201 help
178 Select this if you are using Atmel's AT91SAM9XE System-on-Chip. 202 Select this if you are using Atmel's AT91SAM9XE System-on-Chip.
179 They are basically AT91SAM9260s with various sizes of embedded Flash. 203 They are basically AT91SAM9260s with various sizes of embedded Flash.
@@ -182,28 +206,27 @@ comment "AT91SAM9260 / AT91SAM9XE Board Type"
182 206
183config MACH_AT91SAM9260EK 207config MACH_AT91SAM9260EK
184 bool "Atmel AT91SAM9260-EK / AT91SAM9XE Evaluation Kit" 208 bool "Atmel AT91SAM9260-EK / AT91SAM9XE Evaluation Kit"
185 depends on ARCH_AT91SAM9260 209 select HAVE_AT91_DATAFLASH_CARD
210 select HAVE_NAND_ATMEL_BUSWIDTH_16
186 help 211 help
187 Select this if you are using Atmel's AT91SAM9260-EK or AT91SAM9XE Evaluation Kit 212 Select this if you are using Atmel's AT91SAM9260-EK or AT91SAM9XE Evaluation Kit
188 <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3933> 213 <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3933>
189 214
190config MACH_CAM60 215config MACH_CAM60
191 bool "KwikByte KB9260 (CAM60) board" 216 bool "KwikByte KB9260 (CAM60) board"
192 depends on ARCH_AT91SAM9260
193 help 217 help
194 Select this if you are using KwikByte's KB9260 (CAM60) board based on the Atmel AT91SAM9260. 218 Select this if you are using KwikByte's KB9260 (CAM60) board based on the Atmel AT91SAM9260.
195 <http://www.kwikbyte.com/KB9260.html> 219 <http://www.kwikbyte.com/KB9260.html>
196 220
197config MACH_SAM9_L9260 221config MACH_SAM9_L9260
198 bool "Olimex SAM9-L9260 board" 222 bool "Olimex SAM9-L9260 board"
199 depends on ARCH_AT91SAM9260 223 select HAVE_AT91_DATAFLASH_CARD
200 help 224 help
201 Select this if you are using Olimex's SAM9-L9260 board based on the Atmel AT91SAM9260. 225 Select this if you are using Olimex's SAM9-L9260 board based on the Atmel AT91SAM9260.
202 <http://www.olimex.com/dev/sam9-L9260.html> 226 <http://www.olimex.com/dev/sam9-L9260.html>
203 227
204config MACH_AFEB9260 228config MACH_AFEB9260
205 bool "Custom afeb9260 board v1" 229 bool "Custom afeb9260 board v1"
206 depends on ARCH_AT91SAM9260
207 help 230 help
208 Select this if you are using custom afeb9260 board based on 231 Select this if you are using custom afeb9260 board based on
209 open hardware design. Select this for revision 1 of the board. 232 open hardware design. Select this for revision 1 of the board.
@@ -212,21 +235,18 @@ config MACH_AFEB9260
212 235
213config MACH_USB_A9260 236config MACH_USB_A9260
214 bool "CALAO USB-A9260" 237 bool "CALAO USB-A9260"
215 depends on ARCH_AT91SAM9260
216 help 238 help
217 Select this if you are using a Calao Systems USB-A9260. 239 Select this if you are using a Calao Systems USB-A9260.
218 <http://www.calao-systems.com> 240 <http://www.calao-systems.com>
219 241
220config MACH_QIL_A9260 242config MACH_QIL_A9260
221 bool "CALAO QIL-A9260 board" 243 bool "CALAO QIL-A9260 board"
222 depends on ARCH_AT91SAM9260
223 help 244 help
224 Select this if you are using a Calao Systems QIL-A9260 Board. 245 Select this if you are using a Calao Systems QIL-A9260 Board.
225 <http://www.calao-systems.com> 246 <http://www.calao-systems.com>
226 247
227config MACH_CPU9260 248config MACH_CPU9260
228 bool "Eukrea CPU9260 board" 249 bool "Eukrea CPU9260 board"
229 depends on ARCH_AT91SAM9260
230 help 250 help
231 Select this if you are using a Eukrea Electromatique's 251 Select this if you are using a Eukrea Electromatique's
232 CPU9260 Board <http://www.eukrea.com/> 252 CPU9260 Board <http://www.eukrea.com/>
@@ -241,7 +261,8 @@ comment "AT91SAM9261 Board Type"
241 261
242config MACH_AT91SAM9261EK 262config MACH_AT91SAM9261EK
243 bool "Atmel AT91SAM9261-EK Evaluation Kit" 263 bool "Atmel AT91SAM9261-EK Evaluation Kit"
244 depends on ARCH_AT91SAM9261 264 select HAVE_AT91_DATAFLASH_CARD
265 select HAVE_NAND_ATMEL_BUSWIDTH_16
245 help 266 help
246 Select this if you are using Atmel's AT91SAM9261-EK Evaluation Kit. 267 Select this if you are using Atmel's AT91SAM9261-EK Evaluation Kit.
247 <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3820> 268 <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3820>
@@ -256,7 +277,8 @@ comment "AT91SAM9G10 Board Type"
256 277
257config MACH_AT91SAM9G10EK 278config MACH_AT91SAM9G10EK
258 bool "Atmel AT91SAM9G10-EK Evaluation Kit" 279 bool "Atmel AT91SAM9G10-EK Evaluation Kit"
259 depends on ARCH_AT91SAM9G10 280 select HAVE_AT91_DATAFLASH_CARD
281 select HAVE_NAND_ATMEL_BUSWIDTH_16
260 help 282 help
261 Select this if you are using Atmel's AT91SAM9G10-EK Evaluation Kit. 283 Select this if you are using Atmel's AT91SAM9G10-EK Evaluation Kit.
262 <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4588> 284 <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4588>
@@ -271,21 +293,21 @@ comment "AT91SAM9263 Board Type"
271 293
272config MACH_AT91SAM9263EK 294config MACH_AT91SAM9263EK
273 bool "Atmel AT91SAM9263-EK Evaluation Kit" 295 bool "Atmel AT91SAM9263-EK Evaluation Kit"
274 depends on ARCH_AT91SAM9263 296 select HAVE_AT91_DATAFLASH_CARD
297 select HAVE_NAND_ATMEL_BUSWIDTH_16
275 help 298 help
276 Select this if you are using Atmel's AT91SAM9263-EK Evaluation Kit. 299 Select this if you are using Atmel's AT91SAM9263-EK Evaluation Kit.
277 <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4057> 300 <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4057>
278 301
279config MACH_USB_A9263 302config MACH_USB_A9263
280 bool "CALAO USB-A9263" 303 bool "CALAO USB-A9263"
281 depends on ARCH_AT91SAM9263
282 help 304 help
283 Select this if you are using a Calao Systems USB-A9263. 305 Select this if you are using a Calao Systems USB-A9263.
284 <http://www.calao-systems.com> 306 <http://www.calao-systems.com>
285 307
286config MACH_NEOCORE926 308config MACH_NEOCORE926
287 bool "Adeneo NEOCORE926" 309 bool "Adeneo NEOCORE926"
288 depends on ARCH_AT91SAM9263 310 select HAVE_AT91_DATAFLASH_CARD
289 help 311 help
290 Select this if you are using the Adeneo Neocore 926 board. 312 Select this if you are using the Adeneo Neocore 926 board.
291 313
@@ -299,7 +321,6 @@ comment "AT91SAM9RL Board Type"
299 321
300config MACH_AT91SAM9RLEK 322config MACH_AT91SAM9RLEK
301 bool "Atmel AT91SAM9RL-EK Evaluation Kit" 323 bool "Atmel AT91SAM9RL-EK Evaluation Kit"
302 depends on ARCH_AT91SAM9RL
303 help 324 help
304 Select this if you are using Atmel's AT91SAM9RL-EK Evaluation Kit. 325 Select this if you are using Atmel's AT91SAM9RL-EK Evaluation Kit.
305 326
@@ -313,14 +334,15 @@ comment "AT91SAM9G20 Board Type"
313 334
314config MACH_AT91SAM9G20EK 335config MACH_AT91SAM9G20EK
315 bool "Atmel AT91SAM9G20-EK Evaluation Kit" 336 bool "Atmel AT91SAM9G20-EK Evaluation Kit"
316 depends on ARCH_AT91SAM9G20 337 select HAVE_AT91_DATAFLASH_CARD
338 select HAVE_NAND_ATMEL_BUSWIDTH_16
317 help 339 help
318 Select this if you are using Atmel's AT91SAM9G20-EK Evaluation Kit 340 Select this if you are using Atmel's AT91SAM9G20-EK Evaluation Kit
319 that embeds only one SD/MMC slot. 341 that embeds only one SD/MMC slot.
320 342
321config MACH_AT91SAM9G20EK_2MMC 343config MACH_AT91SAM9G20EK_2MMC
322 bool "Atmel AT91SAM9G20-EK Evaluation Kit with 2 SD/MMC Slots" 344 bool "Atmel AT91SAM9G20-EK Evaluation Kit with 2 SD/MMC Slots"
323 depends on ARCH_AT91SAM9G20 345 select HAVE_NAND_ATMEL_BUSWIDTH_16
324 help 346 help
325 Select this if you are using an Atmel AT91SAM9G20-EK Evaluation Kit 347 Select this if you are using an Atmel AT91SAM9G20-EK Evaluation Kit
326 with 2 SD/MMC Slots. This is the case for AT91SAM9G20-EK rev. C and 348 with 2 SD/MMC Slots. This is the case for AT91SAM9G20-EK rev. C and
@@ -328,7 +350,6 @@ config MACH_AT91SAM9G20EK_2MMC
328 350
329config MACH_CPU9G20 351config MACH_CPU9G20
330 bool "Eukrea CPU9G20 board" 352 bool "Eukrea CPU9G20 board"
331 depends on ARCH_AT91SAM9G20
332 help 353 help
333 Select this if you are using a Eukrea Electromatique's 354 Select this if you are using a Eukrea Electromatique's
334 CPU9G20 Board <http://www.eukrea.com/> 355 CPU9G20 Board <http://www.eukrea.com/>
@@ -343,7 +364,7 @@ comment "AT91SAM9G45 Board Type"
343 364
344config MACH_AT91SAM9G45EKES 365config MACH_AT91SAM9G45EKES
345 bool "Atmel AT91SAM9G45-EKES Evaluation Kit" 366 bool "Atmel AT91SAM9G45-EKES Evaluation Kit"
346 depends on ARCH_AT91SAM9G45 367 select HAVE_NAND_ATMEL_BUSWIDTH_16
347 help 368 help
348 Select this if you are using Atmel's AT91SAM9G45-EKES Evaluation Kit. 369 Select this if you are using Atmel's AT91SAM9G45-EKES Evaluation Kit.
349 "ES" at the end of the name means that this board is an 370 "ES" at the end of the name means that this board is an
@@ -359,7 +380,8 @@ comment "AT91CAP9 Board Type"
359 380
360config MACH_AT91CAP9ADK 381config MACH_AT91CAP9ADK
361 bool "Atmel AT91CAP9A-DK Evaluation Kit" 382 bool "Atmel AT91CAP9A-DK Evaluation Kit"
362 depends on ARCH_AT91CAP9 383 select HAVE_AT91_DATAFLASH_CARD
384 select HAVE_NAND_ATMEL_BUSWIDTH_16
363 help 385 help
364 Select this if you are using Atmel's AT91CAP9A-DK Evaluation Kit. 386 Select this if you are using Atmel's AT91CAP9A-DK Evaluation Kit.
365 <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4138> 387 <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4138>
@@ -388,13 +410,13 @@ comment "AT91 Board Options"
388 410
389config MTD_AT91_DATAFLASH_CARD 411config MTD_AT91_DATAFLASH_CARD
390 bool "Enable DataFlash Card support" 412 bool "Enable DataFlash Card support"
391 depends on (ARCH_AT91RM9200DK || MACH_AT91RM9200EK || MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9G10EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_ECBAT91 || MACH_SAM9_L9260 || MACH_AT91CAP9ADK || MACH_NEOCORE926) 413 depends on HAVE_AT91_DATAFLASH_CARD
392 help 414 help
393 Enable support for the DataFlash card. 415 Enable support for the DataFlash card.
394 416
395config MTD_NAND_ATMEL_BUSWIDTH_16 417config MTD_NAND_ATMEL_BUSWIDTH_16
396 bool "Enable 16-bit data bus interface to NAND flash" 418 bool "Enable 16-bit data bus interface to NAND flash"
397 depends on (MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9G10EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_AT91SAM9G20EK_2MMC || MACH_AT91SAM9G45EKES || MACH_AT91CAP9ADK) 419 depends on HAVE_NAND_ATMEL_BUSWIDTH_16
398 help 420 help
399 On AT91SAM926x boards both types of NAND flash can be present 421 On AT91SAM926x boards both types of NAND flash can be present
400 (8 and 16 bit data bus width). 422 (8 and 16 bit data bus width).
@@ -456,15 +478,15 @@ config AT91_EARLY_USART2
456 478
457config AT91_EARLY_USART3 479config AT91_EARLY_USART3
458 bool "USART3" 480 bool "USART3"
459 depends on (ARCH_AT91RM9200 || ARCH_AT91SAM9RL || ARCH_AT91SAM9260 || ARCH_AT91SAM9G20 || ARCH_AT91SAM9G45) 481 depends on HAVE_AT91_USART3
460 482
461config AT91_EARLY_USART4 483config AT91_EARLY_USART4
462 bool "USART4" 484 bool "USART4"
463 depends on ARCH_AT91SAM9260 || ARCH_AT91SAM9G20 485 depends on HAVE_AT91_USART4
464 486
465config AT91_EARLY_USART5 487config AT91_EARLY_USART5
466 bool "USART5" 488 bool "USART5"
467 depends on ARCH_AT91SAM9260 || ARCH_AT91SAM9G20 489 depends on HAVE_AT91_USART5
468 490
469endchoice 491endchoice
470 492
diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile
index ada440aab0c5..709fbad4a3ee 100644
--- a/arch/arm/mach-at91/Makefile
+++ b/arch/arm/mach-at91/Makefile
@@ -35,6 +35,7 @@ obj-$(CONFIG_MACH_PICOTUX2XX) += board-picotux200.o
35obj-$(CONFIG_MACH_ECBAT91) += board-ecbat91.o 35obj-$(CONFIG_MACH_ECBAT91) += board-ecbat91.o
36obj-$(CONFIG_MACH_YL9200) += board-yl-9200.o 36obj-$(CONFIG_MACH_YL9200) += board-yl-9200.o
37obj-$(CONFIG_MACH_CPUAT91) += board-cpuat91.o 37obj-$(CONFIG_MACH_CPUAT91) += board-cpuat91.o
38obj-$(CONFIG_MACH_ECO920) += board-eco920.o
38 39
39# AT91SAM9260 board-specific support 40# AT91SAM9260 board-specific support
40obj-$(CONFIG_MACH_AT91SAM9260EK) += board-sam9260ek.o 41obj-$(CONFIG_MACH_AT91SAM9260EK) += board-sam9260ek.o
@@ -77,6 +78,7 @@ obj-y += leds.o
77# Power Management 78# Power Management
78obj-$(CONFIG_PM) += pm.o 79obj-$(CONFIG_PM) += pm.o
79obj-$(CONFIG_AT91_SLOW_CLOCK) += pm_slowclock.o 80obj-$(CONFIG_AT91_SLOW_CLOCK) += pm_slowclock.o
81obj-$(CONFIG_CPU_IDLE) += cpuidle.o
80 82
81ifeq ($(CONFIG_PM_DEBUG),y) 83ifeq ($(CONFIG_PM_DEBUG),y)
82CFLAGS_pm.o += -DDEBUG 84CFLAGS_pm.o += -DDEBUG
diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c
index 332b784050b2..a57af3e99c7c 100644
--- a/arch/arm/mach-at91/at91sam9g45_devices.c
+++ b/arch/arm/mach-at91/at91sam9g45_devices.c
@@ -131,6 +131,62 @@ void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data) {}
131 131
132 132
133/* -------------------------------------------------------------------- 133/* --------------------------------------------------------------------
134 * USB Host HS (EHCI)
135 * Needs an OHCI host for low and full speed management
136 * -------------------------------------------------------------------- */
137
138#if defined(CONFIG_USB_EHCI_HCD) || defined(CONFIG_USB_EHCI_HCD_MODULE)
139static u64 ehci_dmamask = DMA_BIT_MASK(32);
140static struct at91_usbh_data usbh_ehci_data;
141
142static struct resource usbh_ehci_resources[] = {
143 [0] = {
144 .start = AT91SAM9G45_EHCI_BASE,
145 .end = AT91SAM9G45_EHCI_BASE + SZ_1M - 1,
146 .flags = IORESOURCE_MEM,
147 },
148 [1] = {
149 .start = AT91SAM9G45_ID_UHPHS,
150 .end = AT91SAM9G45_ID_UHPHS,
151 .flags = IORESOURCE_IRQ,
152 },
153};
154
155static struct platform_device at91_usbh_ehci_device = {
156 .name = "atmel-ehci",
157 .id = -1,
158 .dev = {
159 .dma_mask = &ehci_dmamask,
160 .coherent_dma_mask = DMA_BIT_MASK(32),
161 .platform_data = &usbh_ehci_data,
162 },
163 .resource = usbh_ehci_resources,
164 .num_resources = ARRAY_SIZE(usbh_ehci_resources),
165};
166
167void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data)
168{
169 int i;
170
171 if (!data)
172 return;
173
174 /* Enable VBus control for UHP ports */
175 for (i = 0; i < data->ports; i++) {
176 if (data->vbus_pin[i])
177 at91_set_gpio_output(data->vbus_pin[i], 0);
178 }
179
180 usbh_ehci_data = *data;
181 at91_clock_associate("uhphs_clk", &at91_usbh_ehci_device.dev, "ehci_clk");
182 platform_device_register(&at91_usbh_ehci_device);
183}
184#else
185void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data) {}
186#endif
187
188
189/* --------------------------------------------------------------------
134 * USB HS Device (Gadget) 190 * USB HS Device (Gadget)
135 * -------------------------------------------------------------------- */ 191 * -------------------------------------------------------------------- */
136 192
diff --git a/arch/arm/mach-at91/board-eco920.c b/arch/arm/mach-at91/board-eco920.c
new file mode 100644
index 000000000000..295a96609e71
--- /dev/null
+++ b/arch/arm/mach-at91/board-eco920.c
@@ -0,0 +1,158 @@
1/*
2 * This program is free software; you can redistribute it and/or modify
3 * it under the terms of the GNU General Public License as published by
4 * the Free Software Foundation; either version 2 of the License, or
5 * (at your option) any later version.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 *
12 * You should have received a copy of the GNU General Public License
13 * along with this program; if not, write to the Free Software
14 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
15 */
16
17#include <linux/init.h>
18#include <linux/platform_device.h>
19#include <linux/mtd/physmap.h>
20#include <linux/gpio.h>
21
22#include <asm/mach-types.h>
23
24#include <asm/mach/arch.h>
25#include <asm/mach/map.h>
26
27#include <mach/board.h>
28#include <mach/at91rm9200_mc.h>
29#include "generic.h"
30
31static void __init eco920_map_io(void)
32{
33 at91rm9200_initialize(18432000, AT91RM9200_PQFP);
34
35 /* Setup the LEDs */
36 at91_init_leds(AT91_PIN_PB0, AT91_PIN_PB1);
37
38 /* DBGU on ttyS0. (Rx & Tx only */
39 at91_register_uart(0, 0, 0);
40
41 /* set serial console to ttyS0 (ie, DBGU) */
42 at91_set_serial_console(0);
43}
44
45static void __init eco920_init_irq(void)
46{
47 at91rm9200_init_interrupts(NULL);
48}
49
50static struct at91_eth_data __initdata eco920_eth_data = {
51 .phy_irq_pin = AT91_PIN_PC2,
52 .is_rmii = 1,
53};
54
55static struct at91_usbh_data __initdata eco920_usbh_data = {
56 .ports = 1,
57};
58
59static struct at91_udc_data __initdata eco920_udc_data = {
60 .vbus_pin = AT91_PIN_PB12,
61 .pullup_pin = AT91_PIN_PB13,
62};
63
64static struct at91_mmc_data __initdata eco920_mmc_data = {
65 .slot_b = 0,
66 .wire4 = 0,
67};
68
69static struct physmap_flash_data eco920_flash_data = {
70 .width = 2,
71};
72
73static struct resource eco920_flash_resource = {
74 .start = 0x11000000,
75 .end = 0x11ffffff,
76 .flags = IORESOURCE_MEM,
77};
78
79static struct platform_device eco920_flash = {
80 .name = "physmap-flash",
81 .id = 0,
82 .dev = {
83 .platform_data = &eco920_flash_data,
84 },
85 .resource = &eco920_flash_resource,
86 .num_resources = 1,
87};
88
89static struct resource at91_beeper_resources[] = {
90 [0] = {
91 .start = AT91RM9200_BASE_TC3,
92 .end = AT91RM9200_BASE_TC3 + 0x39,
93 .flags = IORESOURCE_MEM,
94 },
95};
96
97static struct platform_device at91_beeper = {
98 .name = "at91_beeper",
99 .id = 0,
100 .resource = at91_beeper_resources,
101 .num_resources = ARRAY_SIZE(at91_beeper_resources),
102};
103
104static struct spi_board_info eco920_spi_devices[] = {
105 { /* CAN controller */
106 .modalias = "tlv5638",
107 .chip_select = 3,
108 .max_speed_hz = 20 * 1000 * 1000,
109 .mode = SPI_CPHA,
110 },
111};
112
113static void __init eco920_board_init(void)
114{
115 at91_add_device_serial();
116 at91_add_device_eth(&eco920_eth_data);
117 at91_add_device_usbh(&eco920_usbh_data);
118 at91_add_device_udc(&eco920_udc_data);
119
120 at91_add_device_mmc(0, &eco920_mmc_data);
121 platform_device_register(&eco920_flash);
122
123 at91_sys_write(AT91_SMC_CSR(7), AT91_SMC_RWHOLD_(1)
124 | AT91_SMC_RWSETUP_(1)
125 | AT91_SMC_DBW_8
126 | AT91_SMC_WSEN
127 | AT91_SMC_NWS_(15));
128
129 at91_set_A_periph(AT91_PIN_PC6, 1);
130
131 at91_set_gpio_input(AT91_PIN_PA23, 0);
132 at91_set_deglitch(AT91_PIN_PA23, 1);
133
134/* Initialization of the Static Memory Controller for Chip Select 3 */
135 at91_sys_write(AT91_SMC_CSR(3),
136 AT91_SMC_DBW_16 | /* 16 bit */
137 AT91_SMC_WSEN |
138 AT91_SMC_NWS_(5) | /* wait states */
139 AT91_SMC_TDF_(1) /* float time */
140 );
141
142 at91_clock_associate("tc3_clk", &at91_beeper.dev, "at91_beeper");
143 at91_set_B_periph(AT91_PIN_PB6, 0);
144 platform_device_register(&at91_beeper);
145
146 at91_add_device_spi(eco920_spi_devices, ARRAY_SIZE(eco920_spi_devices));
147}
148
149MACHINE_START(ECO920, "eco920")
150 /* Maintainer: Sascha Hauer */
151 .phys_io = AT91_BASE_SYS,
152 .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
153 .boot_params = AT91_SDRAM_BASE + 0x100,
154 .timer = &at91rm9200_timer,
155 .map_io = eco920_map_io,
156 .init_irq = eco920_init_irq,
157 .init_machine = eco920_board_init,
158MACHINE_END
diff --git a/arch/arm/mach-at91/board-sam9m10g45ek.c b/arch/arm/mach-at91/board-sam9m10g45ek.c
index 64c3843f323d..1cf4d8681078 100644
--- a/arch/arm/mach-at91/board-sam9m10g45ek.c
+++ b/arch/arm/mach-at91/board-sam9m10g45ek.c
@@ -366,6 +366,7 @@ static void __init ek_board_init(void)
366 at91_add_device_serial(); 366 at91_add_device_serial();
367 /* USB HS Host */ 367 /* USB HS Host */
368 at91_add_device_usbh_ohci(&ek_usbh_hs_data); 368 at91_add_device_usbh_ohci(&ek_usbh_hs_data);
369 at91_add_device_usbh_ehci(&ek_usbh_hs_data);
369 /* USB HS Device */ 370 /* USB HS Device */
370 at91_add_device_usba(&ek_usba_udc_data); 371 at91_add_device_usba(&ek_usba_udc_data);
371 /* SPI */ 372 /* SPI */
diff --git a/arch/arm/mach-at91/cpuidle.c b/arch/arm/mach-at91/cpuidle.c
new file mode 100644
index 000000000000..1cfeac1483d6
--- /dev/null
+++ b/arch/arm/mach-at91/cpuidle.c
@@ -0,0 +1,94 @@
1/*
2 * based on arch/arm/mach-kirkwood/cpuidle.c
3 *
4 * CPU idle support for AT91 SoC
5 *
6 * This file is licensed under the terms of the GNU General Public
7 * License version 2. This program is licensed "as is" without any
8 * warranty of any kind, whether express or implied.
9 *
10 * The cpu idle uses wait-for-interrupt and RAM self refresh in order
11 * to implement two idle states -
12 * #1 wait-for-interrupt
13 * #2 wait-for-interrupt and RAM self refresh
14 */
15
16#include <linux/kernel.h>
17#include <linux/init.h>
18#include <linux/platform_device.h>
19#include <linux/cpuidle.h>
20#include <asm/proc-fns.h>
21#include <linux/io.h>
22
23#include "pm.h"
24
25#define AT91_MAX_STATES 2
26
27static DEFINE_PER_CPU(struct cpuidle_device, at91_cpuidle_device);
28
29static struct cpuidle_driver at91_idle_driver = {
30 .name = "at91_idle",
31 .owner = THIS_MODULE,
32};
33
34/* Actual code that puts the SoC in different idle states */
35static int at91_enter_idle(struct cpuidle_device *dev,
36 struct cpuidle_state *state)
37{
38 struct timeval before, after;
39 int idle_time;
40 u32 saved_lpr;
41
42 local_irq_disable();
43 do_gettimeofday(&before);
44 if (state == &dev->states[0])
45 /* Wait for interrupt state */
46 cpu_do_idle();
47 else if (state == &dev->states[1]) {
48 asm("b 1f; .align 5; 1:");
49 asm("mcr p15, 0, r0, c7, c10, 4"); /* drain write buffer */
50 saved_lpr = sdram_selfrefresh_enable();
51 cpu_do_idle();
52 sdram_selfrefresh_disable(saved_lpr);
53 }
54 do_gettimeofday(&after);
55 local_irq_enable();
56 idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
57 (after.tv_usec - before.tv_usec);
58 return idle_time;
59}
60
61/* Initialize CPU idle by registering the idle states */
62static int at91_init_cpuidle(void)
63{
64 struct cpuidle_device *device;
65
66 cpuidle_register_driver(&at91_idle_driver);
67
68 device = &per_cpu(at91_cpuidle_device, smp_processor_id());
69 device->state_count = AT91_MAX_STATES;
70
71 /* Wait for interrupt state */
72 device->states[0].enter = at91_enter_idle;
73 device->states[0].exit_latency = 1;
74 device->states[0].target_residency = 10000;
75 device->states[0].flags = CPUIDLE_FLAG_TIME_VALID;
76 strcpy(device->states[0].name, "WFI");
77 strcpy(device->states[0].desc, "Wait for interrupt");
78
79 /* Wait for interrupt and RAM self refresh state */
80 device->states[1].enter = at91_enter_idle;
81 device->states[1].exit_latency = 10;
82 device->states[1].target_residency = 10000;
83 device->states[1].flags = CPUIDLE_FLAG_TIME_VALID;
84 strcpy(device->states[1].name, "RAM_SR");
85 strcpy(device->states[1].desc, "WFI and RAM Self Refresh");
86
87 if (cpuidle_register_device(device)) {
88 printk(KERN_ERR "at91_init_cpuidle: Failed registering\n");
89 return -EIO;
90 }
91 return 0;
92}
93
94device_initcall(at91_init_cpuidle);
diff --git a/arch/arm/mach-at91/include/mach/board.h b/arch/arm/mach-at91/include/mach/board.h
index 2f4fcedc02ba..2295d80dd893 100644
--- a/arch/arm/mach-at91/include/mach/board.h
+++ b/arch/arm/mach-at91/include/mach/board.h
@@ -98,6 +98,7 @@ struct at91_usbh_data {
98}; 98};
99extern void __init at91_add_device_usbh(struct at91_usbh_data *data); 99extern void __init at91_add_device_usbh(struct at91_usbh_data *data);
100extern void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data); 100extern void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data);
101extern void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data);
101 102
102 /* NAND / SmartMedia */ 103 /* NAND / SmartMedia */
103struct atmel_nand_data { 104struct atmel_nand_data {
diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c
index 4028724d490d..615668986480 100644
--- a/arch/arm/mach-at91/pm.c
+++ b/arch/arm/mach-at91/pm.c
@@ -29,62 +29,7 @@
29#include <mach/cpu.h> 29#include <mach/cpu.h>
30 30
31#include "generic.h" 31#include "generic.h"
32 32#include "pm.h"
33#ifdef CONFIG_ARCH_AT91RM9200
34#include <mach/at91rm9200_mc.h>
35
36/*
37 * The AT91RM9200 goes into self-refresh mode with this command, and will
38 * terminate self-refresh automatically on the next SDRAM access.
39 */
40#define sdram_selfrefresh_enable() at91_sys_write(AT91_SDRAMC_SRR, 1)
41#define sdram_selfrefresh_disable() do {} while (0)
42
43#elif defined(CONFIG_ARCH_AT91CAP9)
44#include <mach/at91cap9_ddrsdr.h>
45
46static u32 saved_lpr;
47
48static inline void sdram_selfrefresh_enable(void)
49{
50 u32 lpr;
51
52 saved_lpr = at91_sys_read(AT91_DDRSDRC_LPR);
53
54 lpr = saved_lpr & ~AT91_DDRSDRC_LPCB;
55 at91_sys_write(AT91_DDRSDRC_LPR, lpr | AT91_DDRSDRC_LPCB_SELF_REFRESH);
56}
57
58#define sdram_selfrefresh_disable() at91_sys_write(AT91_DDRSDRC_LPR, saved_lpr)
59
60#else
61#include <mach/at91sam9_sdramc.h>
62
63#ifdef CONFIG_ARCH_AT91SAM9263
64/*
65 * FIXME either or both the SDRAM controllers (EB0, EB1) might be in use;
66 * handle those cases both here and in the Suspend-To-RAM support.
67 */
68#define AT91_SDRAMC AT91_SDRAMC0
69#warning Assuming EB1 SDRAM controller is *NOT* used
70#endif
71
72static u32 saved_lpr;
73
74static inline void sdram_selfrefresh_enable(void)
75{
76 u32 lpr;
77
78 saved_lpr = at91_sys_read(AT91_SDRAMC_LPR);
79
80 lpr = saved_lpr & ~AT91_SDRAMC_LPCB;
81 at91_sys_write(AT91_SDRAMC_LPR, lpr | AT91_SDRAMC_LPCB_SELF_REFRESH);
82}
83
84#define sdram_selfrefresh_disable() at91_sys_write(AT91_SDRAMC_LPR, saved_lpr)
85
86#endif
87
88 33
89/* 34/*
90 * Show the reason for the previous system reset. 35 * Show the reason for the previous system reset.
@@ -260,6 +205,7 @@ extern u32 at91_slow_clock_sz;
260 205
261static int at91_pm_enter(suspend_state_t state) 206static int at91_pm_enter(suspend_state_t state)
262{ 207{
208 u32 saved_lpr;
263 at91_gpio_suspend(); 209 at91_gpio_suspend();
264 at91_irq_suspend(); 210 at91_irq_suspend();
265 211
@@ -315,9 +261,9 @@ static int at91_pm_enter(suspend_state_t state)
315 */ 261 */
316 asm("b 1f; .align 5; 1:"); 262 asm("b 1f; .align 5; 1:");
317 asm("mcr p15, 0, r0, c7, c10, 4"); /* drain write buffer */ 263 asm("mcr p15, 0, r0, c7, c10, 4"); /* drain write buffer */
318 sdram_selfrefresh_enable(); 264 saved_lpr = sdram_selfrefresh_enable();
319 asm("mcr p15, 0, r0, c7, c0, 4"); /* wait for interrupt */ 265 asm("mcr p15, 0, r0, c7, c0, 4"); /* wait for interrupt */
320 sdram_selfrefresh_disable(); 266 sdram_selfrefresh_disable(saved_lpr);
321 break; 267 break;
322 268
323 case PM_SUSPEND_ON: 269 case PM_SUSPEND_ON:
diff --git a/arch/arm/mach-at91/pm.h b/arch/arm/mach-at91/pm.h
new file mode 100644
index 000000000000..08322c44df1a
--- /dev/null
+++ b/arch/arm/mach-at91/pm.h
@@ -0,0 +1,67 @@
1#ifdef CONFIG_ARCH_AT91RM9200
2#include <mach/at91rm9200_mc.h>
3
4/*
5 * The AT91RM9200 goes into self-refresh mode with this command, and will
6 * terminate self-refresh automatically on the next SDRAM access.
7 *
8 * Self-refresh mode is exited as soon as a memory access is made, but we don't
9 * know for sure when that happens. However, we need to restore the low-power
10 * mode if it was enabled before going idle. Restoring low-power mode while
11 * still in self-refresh is "not recommended", but seems to work.
12 */
13
14static inline u32 sdram_selfrefresh_enable(void)
15{
16 u32 saved_lpr = at91_sys_read(AT91_SDRAMC_LPR);
17
18 at91_sys_write(AT91_SDRAMC_LPR, 0);
19 at91_sys_write(AT91_SDRAMC_SRR, 1);
20 return saved_lpr;
21}
22
23#define sdram_selfrefresh_disable(saved_lpr) at91_sys_write(AT91_SDRAMC_LPR, saved_lpr)
24
25#elif defined(CONFIG_ARCH_AT91CAP9)
26#include <mach/at91cap9_ddrsdr.h>
27
28
29static inline u32 sdram_selfrefresh_enable(void)
30{
31 u32 saved_lpr, lpr;
32
33 saved_lpr = at91_sys_read(AT91_DDRSDRC_LPR);
34
35 lpr = saved_lpr & ~AT91_DDRSDRC_LPCB;
36 at91_sys_write(AT91_DDRSDRC_LPR, lpr | AT91_DDRSDRC_LPCB_SELF_REFRESH);
37 return saved_lpr;
38}
39
40#define sdram_selfrefresh_disable(saved_lpr) at91_sys_write(AT91_DDRSDRC_LPR, saved_lpr)
41
42#else
43#include <mach/at91sam9_sdramc.h>
44
45#ifdef CONFIG_ARCH_AT91SAM9263
46/*
47 * FIXME either or both the SDRAM controllers (EB0, EB1) might be in use;
48 * handle those cases both here and in the Suspend-To-RAM support.
49 */
50#define AT91_SDRAMC AT91_SDRAMC0
51#warning Assuming EB1 SDRAM controller is *NOT* used
52#endif
53
54static inline u32 sdram_selfrefresh_enable(void)
55{
56 u32 saved_lpr, lpr;
57
58 saved_lpr = at91_sys_read(AT91_SDRAMC_LPR);
59
60 lpr = saved_lpr & ~AT91_SDRAMC_LPCB;
61 at91_sys_write(AT91_SDRAMC_LPR, lpr | AT91_SDRAMC_LPCB_SELF_REFRESH);
62 return saved_lpr;
63}
64
65#define sdram_selfrefresh_disable(saved_lpr) at91_sys_write(AT91_SDRAMC_LPR, saved_lpr)
66
67#endif