1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * arch/arm/mach-at91/pm_slow_clock.S
4  *
5  *  Copyright (C) 2006 Savin Zlobec
6  *
7  * AT91SAM9 support:
8  *  Copyright (C) 2007 Anti Sullin <anti.sullin@artecdesign.ee>
9  */
10 #include <linux/linkage.h>
11 #include <linux/clk/at91_pmc.h>
12 #include "pm.h"
13 #include "pm_data-offsets.h"
14 
15 #ifdef CONFIG_CPU_V7
16 .arch armv7-a
17 #endif
18 
19 #define	SRAMC_SELF_FRESH_ACTIVE		0x01
20 #define	SRAMC_SELF_FRESH_EXIT		0x00
21 
22 pmc	.req	r0
23 tmp1	.req	r4
24 tmp2	.req	r5
25 tmp3	.req	r6
26 
27 /*
28  * Wait until master clock is ready (after switching master clock source)
29  *
30  * @r_mckid:	register holding master clock identifier
31  *
32  * Side effects: overwrites r7, r8
33  */
34 	.macro wait_mckrdy r_mckid
35 #ifdef CONFIG_SOC_SAMA7
36 	cmp	\r_mckid, #0
37 	beq	1f
38 	mov	r7, #AT91_PMC_MCKXRDY
39 	b	2f
40 #endif
41 1:	mov	r7, #AT91_PMC_MCKRDY
42 2:	ldr	r8, [pmc, #AT91_PMC_SR]
43 	and	r8, r7
44 	cmp	r8, r7
45 	bne	2b
46 	.endm
47 
48 /*
49  * Wait until master oscillator has stabilized.
50  *
51  * Side effects: overwrites r7
52  */
53 	.macro wait_moscrdy
54 1:	ldr	r7, [pmc, #AT91_PMC_SR]
55 	tst	r7, #AT91_PMC_MOSCS
56 	beq	1b
57 	.endm
58 
59 /*
60  * Wait for main oscillator selection is done
61  *
62  * Side effects: overwrites r7
63  */
64 	.macro wait_moscsels
65 1:	ldr	r7, [pmc, #AT91_PMC_SR]
66 	tst	r7, #AT91_PMC_MOSCSELS
67 	beq	1b
68 	.endm
69 
70 /*
71  * Put the processor to enter the idle state
72  *
73  * Side effects: overwrites r7
74  */
75 	.macro at91_cpu_idle
76 
77 #if defined(CONFIG_CPU_V7)
78 	mov	r7, #AT91_PMC_PCK
79 	str	r7, [pmc, #AT91_PMC_SCDR]
80 
81 	dsb
82 
83 	wfi		@ Wait For Interrupt
84 #else
85 	mcr	p15, 0, tmp1, c7, c0, 4
86 #endif
87 
88 	.endm
89 
90 /**
91  * Set state for 2.5V low power regulator
92  * @ena: 0 - disable regulator
93  *	 1 - enable regulator
94  *
95  * Side effects: overwrites r7, r8, r9, r10
96  */
97 	.macro at91_2_5V_reg_set_low_power ena
98 #ifdef CONFIG_SOC_SAMA7
99 	ldr	r7, .sfrbu
100 	mov	r8, #\ena
101 	ldr	r9, [r7, #AT91_SFRBU_25LDOCR]
102 	orr	r9, r9, #AT91_SFRBU_25LDOCR_LP
103 	cmp	r8, #1
104 	beq	lp_done_\ena
105 	bic	r9, r9, #AT91_SFRBU_25LDOCR_LP
106 lp_done_\ena:
107 	ldr	r10, =AT91_SFRBU_25LDOCR_LDOANAKEY
108 	orr	r9, r9, r10
109 	str	r9, [r7, #AT91_SFRBU_25LDOCR]
110 #endif
111 	.endm
112 
113 	.macro at91_backup_set_lpm reg
114 #ifdef CONFIG_SOC_SAMA7
115 	orr	\reg, \reg, #0x200000
116 #endif
117 	.endm
118 
119 	.text
120 
121 	.arm
122 
123 #ifdef CONFIG_SOC_SAMA7
124 /**
125  * Enable self-refresh
126  *
127  * Side effects: overwrites r2, r3, tmp1, tmp2, tmp3, r7
128  */
129 .macro at91_sramc_self_refresh_ena
130 	ldr	r2, .sramc_base
131 	ldr	r3, .sramc_phy_base
132 	ldr	r7, .pm_mode
133 
134 	dsb
135 
136 	/* Disable all AXI ports. */
137 	ldr	tmp1, [r2, #UDDRC_PCTRL_0]
138 	bic	tmp1, tmp1, #0x1
139 	str	tmp1, [r2, #UDDRC_PCTRL_0]
140 
141 	ldr	tmp1, [r2, #UDDRC_PCTRL_1]
142 	bic	tmp1, tmp1, #0x1
143 	str	tmp1, [r2, #UDDRC_PCTRL_1]
144 
145 	ldr	tmp1, [r2, #UDDRC_PCTRL_2]
146 	bic	tmp1, tmp1, #0x1
147 	str	tmp1, [r2, #UDDRC_PCTRL_2]
148 
149 	ldr	tmp1, [r2, #UDDRC_PCTRL_3]
150 	bic	tmp1, tmp1, #0x1
151 	str	tmp1, [r2, #UDDRC_PCTRL_3]
152 
153 	ldr	tmp1, [r2, #UDDRC_PCTRL_4]
154 	bic	tmp1, tmp1, #0x1
155 	str	tmp1, [r2, #UDDRC_PCTRL_4]
156 
157 sr_ena_1:
158 	/* Wait for all ports to disable. */
159 	ldr	tmp1, [r2, #UDDRC_PSTAT]
160 	ldr	tmp2, =UDDRC_PSTAT_ALL_PORTS
161 	tst	tmp1, tmp2
162 	bne	sr_ena_1
163 
164 	/* Switch to self-refresh. */
165 	ldr	tmp1, [r2, #UDDRC_PWRCTL]
166 	orr	tmp1, tmp1, #UDDRC_PWRCTL_SELFREF_SW
167 	str	tmp1, [r2, #UDDRC_PWRCTL]
168 
169 sr_ena_2:
170 	/* Wait for self-refresh enter. */
171 	ldr	tmp1, [r2, #UDDRC_STAT]
172 	bic	tmp1, tmp1, #~UDDRC_STAT_SELFREF_TYPE_MSK
173 	cmp	tmp1, #UDDRC_STAT_SELFREF_TYPE_SW
174 	bne	sr_ena_2
175 
176 	/* Disable DX DLLs for non-backup modes. */
177 	cmp	r7, #AT91_PM_BACKUP
178 	beq	sr_ena_3
179 
180 	/* Do not soft reset the AC DLL. */
181 	ldr	tmp1, [r3, DDR3PHY_ACDLLCR]
182 	bic	tmp1, tmp1, DDR3PHY_ACDLLCR_DLLSRST
183 	str	tmp1, [r3, DDR3PHY_ACDLLCR]
184 
185 	/* Disable DX DLLs. */
186 	ldr	tmp1, [r3, #DDR3PHY_DX0DLLCR]
187 	orr	tmp1, tmp1, #DDR3PHY_DXDLLCR_DLLDIS
188 	str	tmp1, [r3, #DDR3PHY_DX0DLLCR]
189 
190 	ldr	tmp1, [r3, #DDR3PHY_DX1DLLCR]
191 	orr	tmp1, tmp1, #DDR3PHY_DXDLLCR_DLLDIS
192 	str	tmp1, [r3, #DDR3PHY_DX1DLLCR]
193 
194 sr_ena_3:
195 	/* Power down DDR PHY data receivers. */
196 	ldr	tmp1, [r3, #DDR3PHY_DXCCR]
197 	orr	tmp1, tmp1, #DDR3PHY_DXCCR_DXPDR
198 	str	tmp1, [r3, #DDR3PHY_DXCCR]
199 
200 	/* Power down ADDR/CMD IO. */
201 	ldr	tmp1, [r3, #DDR3PHY_ACIOCR]
202 	orr	tmp1, tmp1, #DDR3PHY_ACIORC_ACPDD
203 	orr	tmp1, tmp1, #DDR3PHY_ACIOCR_CKPDD_CK0
204 	orr	tmp1, tmp1, #DDR3PHY_ACIOCR_CSPDD_CS0
205 	str	tmp1, [r3, #DDR3PHY_ACIOCR]
206 
207 	/* Power down ODT. */
208 	ldr	tmp1, [r3, #DDR3PHY_DSGCR]
209 	orr	tmp1, tmp1, #DDR3PHY_DSGCR_ODTPDD_ODT0
210 	str	tmp1, [r3, #DDR3PHY_DSGCR]
211 .endm
212 
213 /**
214  * Disable self-refresh
215  *
216  * Side effects: overwrites r2, r3, tmp1, tmp2, tmp3
217  */
218 .macro at91_sramc_self_refresh_dis
219 	ldr	r2, .sramc_base
220 	ldr	r3, .sramc_phy_base
221 
222 	/* Power up DDR PHY data receivers. */
223 	ldr	tmp1, [r3, #DDR3PHY_DXCCR]
224 	bic	tmp1, tmp1, #DDR3PHY_DXCCR_DXPDR
225 	str	tmp1, [r3, #DDR3PHY_DXCCR]
226 
227 	/* Power up the output of CK and CS pins. */
228 	ldr	tmp1, [r3, #DDR3PHY_ACIOCR]
229 	bic	tmp1, tmp1, #DDR3PHY_ACIORC_ACPDD
230 	bic	tmp1, tmp1, #DDR3PHY_ACIOCR_CKPDD_CK0
231 	bic	tmp1, tmp1, #DDR3PHY_ACIOCR_CSPDD_CS0
232 	str	tmp1, [r3, #DDR3PHY_ACIOCR]
233 
234 	/* Power up ODT. */
235 	ldr	tmp1, [r3, #DDR3PHY_DSGCR]
236 	bic	tmp1, tmp1, #DDR3PHY_DSGCR_ODTPDD_ODT0
237 	str	tmp1, [r3, #DDR3PHY_DSGCR]
238 
239 	/* Enable DX DLLs. */
240 	ldr	tmp1, [r3, #DDR3PHY_DX0DLLCR]
241 	bic	tmp1, tmp1, #DDR3PHY_DXDLLCR_DLLDIS
242 	str	tmp1, [r3, #DDR3PHY_DX0DLLCR]
243 
244 	ldr	tmp1, [r3, #DDR3PHY_DX1DLLCR]
245 	bic	tmp1, tmp1, #DDR3PHY_DXDLLCR_DLLDIS
246 	str	tmp1, [r3, #DDR3PHY_DX1DLLCR]
247 
248 	/* Enable quasi-dynamic programming. */
249 	mov	tmp1, #0
250 	str	tmp1, [r2, #UDDRC_SWCTRL]
251 
252 	/* De-assert SDRAM initialization. */
253 	ldr	tmp1, [r2, #UDDRC_DFIMISC]
254 	bic	tmp1, tmp1, #UDDRC_DFIMISC_DFI_INIT_COMPLETE_EN
255 	str	tmp1, [r2, #UDDRC_DFIMISC]
256 
257 	/* Quasi-dynamic programming done. */
258 	mov	tmp1, #UDDRC_SWCTRL_SW_DONE
259 	str	tmp1, [r2, #UDDRC_SWCTRL]
260 
261 sr_dis_1:
262 	ldr	tmp1, [r2, #UDDRC_SWSTAT]
263 	tst	tmp1, #UDDRC_SWSTAT_SW_DONE_ACK
264 	beq	sr_dis_1
265 
266 	/* DLL soft-reset + DLL lock wait + ITM reset */
267 	mov	tmp1, #(DDR3PHY_PIR_INIT | DDR3PHY_PIR_DLLSRST | \
268 			DDR3PHY_PIR_DLLLOCK | DDR3PHY_PIR_ITMSRST)
269 	str	tmp1, [r3, #DDR3PHY_PIR]
270 
271 sr_dis_4:
272 	/* Wait for it. */
273 	ldr	tmp1, [r3, #DDR3PHY_PGSR]
274 	tst	tmp1, #DDR3PHY_PGSR_IDONE
275 	beq	sr_dis_4
276 
277 	/* Enable quasi-dynamic programming. */
278 	mov	tmp1, #0
279 	str	tmp1, [r2, #UDDRC_SWCTRL]
280 
281 	/* Assert PHY init complete enable signal. */
282 	ldr	tmp1, [r2, #UDDRC_DFIMISC]
283 	orr	tmp1, tmp1, #UDDRC_DFIMISC_DFI_INIT_COMPLETE_EN
284 	str	tmp1, [r2, #UDDRC_DFIMISC]
285 
286 	/* Programming is done. Set sw_done. */
287 	mov	tmp1, #UDDRC_SWCTRL_SW_DONE
288 	str	tmp1, [r2, #UDDRC_SWCTRL]
289 
290 sr_dis_5:
291 	/* Wait for it. */
292 	ldr	tmp1, [r2, #UDDRC_SWSTAT]
293 	tst	tmp1, #UDDRC_SWSTAT_SW_DONE_ACK
294 	beq	sr_dis_5
295 
296 	/* Trigger self-refresh exit. */
297 	ldr	tmp1, [r2, #UDDRC_PWRCTL]
298 	bic	tmp1, tmp1, #UDDRC_PWRCTL_SELFREF_SW
299 	str	tmp1, [r2, #UDDRC_PWRCTL]
300 
301 sr_dis_6:
302 	/* Wait for self-refresh exit done. */
303 	ldr	tmp1, [r2, #UDDRC_STAT]
304 	bic	tmp1, tmp1, #~UDDRC_STAT_OPMODE_MSK
305 	cmp	tmp1, #UDDRC_STAT_OPMODE_NORMAL
306 	bne	sr_dis_6
307 
308 	/* Enable all AXI ports. */
309 	ldr	tmp1, [r2, #UDDRC_PCTRL_0]
310 	orr	tmp1, tmp1, #0x1
311 	str	tmp1, [r2, #UDDRC_PCTRL_0]
312 
313 	ldr	tmp1, [r2, #UDDRC_PCTRL_1]
314 	orr	tmp1, tmp1, #0x1
315 	str	tmp1, [r2, #UDDRC_PCTRL_1]
316 
317 	ldr	tmp1, [r2, #UDDRC_PCTRL_2]
318 	orr	tmp1, tmp1, #0x1
319 	str	tmp1, [r2, #UDDRC_PCTRL_2]
320 
321 	ldr	tmp1, [r2, #UDDRC_PCTRL_3]
322 	orr	tmp1, tmp1, #0x1
323 	str	tmp1, [r2, #UDDRC_PCTRL_3]
324 
325 	ldr	tmp1, [r2, #UDDRC_PCTRL_4]
326 	orr	tmp1, tmp1, #0x1
327 	str	tmp1, [r2, #UDDRC_PCTRL_4]
328 
329 	dsb
330 .endm
331 #else
332 /**
333  * Enable self-refresh
334  *
335  * register usage:
336  * 	@r1: memory type
337  *	@r2: base address of the sram controller
338  *	@r3: temporary
339  */
340 .macro at91_sramc_self_refresh_ena
341 	ldr	r1, .memtype
342 	ldr	r2, .sramc_base
343 
344 	cmp	r1, #AT91_MEMCTRL_MC
345 	bne	sr_ena_ddrc_sf
346 
347 	/* Active SDRAM self-refresh mode */
348 	mov	r3, #1
349 	str	r3, [r2, #AT91_MC_SDRAMC_SRR]
350 	b	sr_ena_exit
351 
352 sr_ena_ddrc_sf:
353 	cmp	r1, #AT91_MEMCTRL_DDRSDR
354 	bne	sr_ena_sdramc_sf
355 
356 	/*
357 	 * DDR Memory controller
358 	 */
359 
360 	/* LPDDR1 --> force DDR2 mode during self-refresh */
361 	ldr	r3, [r2, #AT91_DDRSDRC_MDR]
362 	str	r3, .saved_sam9_mdr
363 	bic	r3, r3, #~AT91_DDRSDRC_MD
364 	cmp	r3, #AT91_DDRSDRC_MD_LOW_POWER_DDR
365 	ldreq	r3, [r2, #AT91_DDRSDRC_MDR]
366 	biceq	r3, r3, #AT91_DDRSDRC_MD
367 	orreq	r3, r3, #AT91_DDRSDRC_MD_DDR2
368 	streq	r3, [r2, #AT91_DDRSDRC_MDR]
369 
370 	/* Active DDRC self-refresh mode */
371 	ldr	r3, [r2, #AT91_DDRSDRC_LPR]
372 	str	r3, .saved_sam9_lpr
373 	bic	r3, r3, #AT91_DDRSDRC_LPCB
374 	orr	r3, r3, #AT91_DDRSDRC_LPCB_SELF_REFRESH
375 	str	r3, [r2, #AT91_DDRSDRC_LPR]
376 
377 	/* If using the 2nd ddr controller */
378 	ldr	r2, .sramc1_base
379 	cmp	r2, #0
380 	beq	sr_ena_no_2nd_ddrc
381 
382 	ldr	r3, [r2, #AT91_DDRSDRC_MDR]
383 	str	r3, .saved_sam9_mdr1
384 	bic	r3, r3, #~AT91_DDRSDRC_MD
385 	cmp	r3, #AT91_DDRSDRC_MD_LOW_POWER_DDR
386 	ldreq	r3, [r2, #AT91_DDRSDRC_MDR]
387 	biceq	r3, r3, #AT91_DDRSDRC_MD
388 	orreq	r3, r3, #AT91_DDRSDRC_MD_DDR2
389 	streq	r3, [r2, #AT91_DDRSDRC_MDR]
390 
391 	/* Active DDRC self-refresh mode */
392 	ldr	r3, [r2, #AT91_DDRSDRC_LPR]
393 	str	r3, .saved_sam9_lpr1
394 	bic	r3, r3, #AT91_DDRSDRC_LPCB
395 	orr	r3, r3, #AT91_DDRSDRC_LPCB_SELF_REFRESH
396 	str	r3, [r2, #AT91_DDRSDRC_LPR]
397 
398 sr_ena_no_2nd_ddrc:
399 	b	sr_ena_exit
400 
401 	/*
402 	 * SDRAMC Memory controller
403 	 */
404 sr_ena_sdramc_sf:
405 	/* Active SDRAMC self-refresh mode */
406 	ldr	r3, [r2, #AT91_SDRAMC_LPR]
407 	str	r3, .saved_sam9_lpr
408 	bic	r3, r3, #AT91_SDRAMC_LPCB
409 	orr	r3, r3, #AT91_SDRAMC_LPCB_SELF_REFRESH
410 	str	r3, [r2, #AT91_SDRAMC_LPR]
411 
412 	ldr	r3, .saved_sam9_lpr
413 	str	r3, [r2, #AT91_SDRAMC_LPR]
414 
415 sr_ena_exit:
416 .endm
417 
418 /**
419  * Disable self-refresh
420  *
421  * register usage:
422  * 	@r1: memory type
423  *	@r2: base address of the sram controller
424  *	@r3: temporary
425  */
426 .macro at91_sramc_self_refresh_dis
427 	ldr	r1, .memtype
428 	ldr	r2, .sramc_base
429 
430 	cmp	r1, #AT91_MEMCTRL_MC
431 	bne	sr_dis_ddrc_exit_sf
432 
433 	/*
434 	 * at91rm9200 Memory controller
435 	 */
436 
437 	 /*
438 	  * For exiting the self-refresh mode, do nothing,
439 	  * automatically exit the self-refresh mode.
440 	  */
441 	b	sr_dis_exit
442 
443 sr_dis_ddrc_exit_sf:
444 	cmp	r1, #AT91_MEMCTRL_DDRSDR
445 	bne	sdramc_exit_sf
446 
447 	/* DDR Memory controller */
448 
449 	/* Restore MDR in case of LPDDR1 */
450 	ldr	r3, .saved_sam9_mdr
451 	str	r3, [r2, #AT91_DDRSDRC_MDR]
452 	/* Restore LPR on AT91 with DDRAM */
453 	ldr	r3, .saved_sam9_lpr
454 	str	r3, [r2, #AT91_DDRSDRC_LPR]
455 
456 	/* If using the 2nd ddr controller */
457 	ldr	r2, .sramc1_base
458 	cmp	r2, #0
459 	ldrne	r3, .saved_sam9_mdr1
460 	strne	r3, [r2, #AT91_DDRSDRC_MDR]
461 	ldrne	r3, .saved_sam9_lpr1
462 	strne	r3, [r2, #AT91_DDRSDRC_LPR]
463 
464 	b	sr_dis_exit
465 
466 sdramc_exit_sf:
467 	/* SDRAMC Memory controller */
468 	ldr	r3, .saved_sam9_lpr
469 	str	r3, [r2, #AT91_SDRAMC_LPR]
470 
471 sr_dis_exit:
472 .endm
473 #endif
474 
475 .macro at91_pm_ulp0_mode
476 	ldr	pmc, .pmc_base
477 	ldr	tmp2, .pm_mode
478 	ldr	tmp3, .mckr_offset
479 
480 	/* Check if ULP0 fast variant has been requested. */
481 	cmp	tmp2, #AT91_PM_ULP0_FAST
482 	bne	0f
483 
484 	/* Set highest prescaler for power saving */
485 	ldr	tmp1, [pmc, tmp3]
486 	bic	tmp1, tmp1, #AT91_PMC_PRES
487 	orr	tmp1, tmp1, #AT91_PMC_PRES_64
488 	str	tmp1, [pmc, tmp3]
489 
490 	mov	tmp3, #0
491 	wait_mckrdy tmp3
492 	b	1f
493 
494 0:
495 	/* Turn off the crystal oscillator */
496 	ldr	tmp1, [pmc, #AT91_CKGR_MOR]
497 	bic	tmp1, tmp1, #AT91_PMC_MOSCEN
498 	orr	tmp1, tmp1, #AT91_PMC_KEY
499 	str	tmp1, [pmc, #AT91_CKGR_MOR]
500 
501 	/* Save RC oscillator state */
502 	ldr	tmp1, [pmc, #AT91_PMC_SR]
503 	str	tmp1, .saved_osc_status
504 	tst	tmp1, #AT91_PMC_MOSCRCS
505 	bne	1f
506 
507 	/* Turn off RC oscillator */
508 	ldr	tmp1, [pmc, #AT91_CKGR_MOR]
509 	bic	tmp1, tmp1, #AT91_PMC_MOSCRCEN
510 	bic	tmp1, tmp1, #AT91_PMC_KEY_MASK
511 	orr	tmp1, tmp1, #AT91_PMC_KEY
512 	str	tmp1, [pmc, #AT91_CKGR_MOR]
513 
514 	/* Wait main RC disabled done */
515 2:	ldr	tmp1, [pmc, #AT91_PMC_SR]
516 	tst	tmp1, #AT91_PMC_MOSCRCS
517 	bne	2b
518 
519 	/* Wait for interrupt */
520 1:	at91_cpu_idle
521 
522 	/* Check if ULP0 fast variant has been requested. */
523 	cmp	tmp2, #AT91_PM_ULP0_FAST
524 	bne	5f
525 
526 	/* Set lowest prescaler for fast resume. */
527 	ldr	tmp3, .mckr_offset
528 	ldr	tmp1, [pmc, tmp3]
529 	bic	tmp1, tmp1, #AT91_PMC_PRES
530 	str	tmp1, [pmc, tmp3]
531 
532 	mov	tmp3, #0
533 	wait_mckrdy tmp3
534 	b	6f
535 
536 5:	/* Restore RC oscillator state */
537 	ldr	tmp1, .saved_osc_status
538 	tst	tmp1, #AT91_PMC_MOSCRCS
539 	beq	4f
540 
541 	/* Turn on RC oscillator */
542 	ldr	tmp1, [pmc, #AT91_CKGR_MOR]
543 	orr	tmp1, tmp1, #AT91_PMC_MOSCRCEN
544 	bic	tmp1, tmp1, #AT91_PMC_KEY_MASK
545 	orr	tmp1, tmp1, #AT91_PMC_KEY
546 	str	tmp1, [pmc, #AT91_CKGR_MOR]
547 
548 	/* Wait main RC stabilization */
549 3:	ldr	tmp1, [pmc, #AT91_PMC_SR]
550 	tst	tmp1, #AT91_PMC_MOSCRCS
551 	beq	3b
552 
553 	/* Turn on the crystal oscillator */
554 4:	ldr	tmp1, [pmc, #AT91_CKGR_MOR]
555 	orr	tmp1, tmp1, #AT91_PMC_MOSCEN
556 	orr	tmp1, tmp1, #AT91_PMC_KEY
557 	str	tmp1, [pmc, #AT91_CKGR_MOR]
558 
559 	wait_moscrdy
560 6:
561 .endm
562 
563 /**
564  * Note: This procedure only applies on the platform which uses
565  * the external crystal oscillator as a main clock source.
566  */
567 .macro at91_pm_ulp1_mode
568 	ldr	pmc, .pmc_base
569 	ldr	tmp2, .mckr_offset
570 	mov	tmp3, #0
571 
572 	/* Save RC oscillator state and check if it is enabled. */
573 	ldr	tmp1, [pmc, #AT91_PMC_SR]
574 	str	tmp1, .saved_osc_status
575 	tst	tmp1, #AT91_PMC_MOSCRCS
576 	bne	2f
577 
578 	/* Enable RC oscillator */
579 	ldr	tmp1, [pmc, #AT91_CKGR_MOR]
580 	orr	tmp1, tmp1, #AT91_PMC_MOSCRCEN
581 	bic	tmp1, tmp1, #AT91_PMC_KEY_MASK
582 	orr	tmp1, tmp1, #AT91_PMC_KEY
583 	str	tmp1, [pmc, #AT91_CKGR_MOR]
584 
585 	/* Wait main RC stabilization */
586 1:	ldr	tmp1, [pmc, #AT91_PMC_SR]
587 	tst	tmp1, #AT91_PMC_MOSCRCS
588 	beq	1b
589 
590 	/* Switch the main clock source to 12-MHz RC oscillator */
591 2:	ldr	tmp1, [pmc, #AT91_CKGR_MOR]
592 	bic	tmp1, tmp1, #AT91_PMC_MOSCSEL
593 	bic	tmp1, tmp1, #AT91_PMC_KEY_MASK
594 	orr	tmp1, tmp1, #AT91_PMC_KEY
595 	str	tmp1, [pmc, #AT91_CKGR_MOR]
596 
597 	wait_moscsels
598 
599 	/* Disable the crystal oscillator */
600 	ldr	tmp1, [pmc, #AT91_CKGR_MOR]
601 	bic	tmp1, tmp1, #AT91_PMC_MOSCEN
602 	bic	tmp1, tmp1, #AT91_PMC_KEY_MASK
603 	orr	tmp1, tmp1, #AT91_PMC_KEY
604 	str	tmp1, [pmc, #AT91_CKGR_MOR]
605 
606 	/* Switch the master clock source to main clock */
607 	ldr	tmp1, [pmc, tmp2]
608 	bic	tmp1, tmp1, #AT91_PMC_CSS
609 	orr	tmp1, tmp1, #AT91_PMC_CSS_MAIN
610 	str	tmp1, [pmc, tmp2]
611 
612 	wait_mckrdy tmp3
613 
614 	/* Enter the ULP1 mode by set WAITMODE bit in CKGR_MOR */
615 	ldr	tmp1, [pmc, #AT91_CKGR_MOR]
616 	orr	tmp1, tmp1, #AT91_PMC_WAITMODE
617 	bic	tmp1, tmp1, #AT91_PMC_KEY_MASK
618 	orr	tmp1, tmp1, #AT91_PMC_KEY
619 	str	tmp1, [pmc, #AT91_CKGR_MOR]
620 
621 	/* Quirk for SAM9X60's PMC */
622 	nop
623 	nop
624 
625 	wait_mckrdy tmp3
626 
627 	/* Enable the crystal oscillator */
628 	ldr	tmp1, [pmc, #AT91_CKGR_MOR]
629 	orr	tmp1, tmp1, #AT91_PMC_MOSCEN
630 	bic	tmp1, tmp1, #AT91_PMC_KEY_MASK
631 	orr	tmp1, tmp1, #AT91_PMC_KEY
632 	str	tmp1, [pmc, #AT91_CKGR_MOR]
633 
634 	wait_moscrdy
635 
636 	/* Switch the master clock source to slow clock */
637 	ldr	tmp1, [pmc, tmp2]
638 	bic	tmp1, tmp1, #AT91_PMC_CSS
639 	str	tmp1, [pmc, tmp2]
640 
641 	wait_mckrdy tmp3
642 
643 	/* Switch main clock source to crystal oscillator */
644 	ldr	tmp1, [pmc, #AT91_CKGR_MOR]
645 	orr	tmp1, tmp1, #AT91_PMC_MOSCSEL
646 	bic	tmp1, tmp1, #AT91_PMC_KEY_MASK
647 	orr	tmp1, tmp1, #AT91_PMC_KEY
648 	str	tmp1, [pmc, #AT91_CKGR_MOR]
649 
650 	wait_moscsels
651 
652 	/* Switch the master clock source to main clock */
653 	ldr	tmp1, [pmc, tmp2]
654 	bic	tmp1, tmp1, #AT91_PMC_CSS
655 	orr	tmp1, tmp1, #AT91_PMC_CSS_MAIN
656 	str	tmp1, [pmc, tmp2]
657 
658 	wait_mckrdy tmp3
659 
660 	/* Restore RC oscillator state */
661 	ldr	tmp1, .saved_osc_status
662 	tst	tmp1, #AT91_PMC_MOSCRCS
663 	bne	3f
664 
665 	/* Disable RC oscillator */
666 	ldr	tmp1, [pmc, #AT91_CKGR_MOR]
667 	bic	tmp1, tmp1, #AT91_PMC_MOSCRCEN
668 	bic	tmp1, tmp1, #AT91_PMC_KEY_MASK
669 	orr	tmp1, tmp1, #AT91_PMC_KEY
670 	str	tmp1, [pmc, #AT91_CKGR_MOR]
671 
672 	/* Wait RC oscillator disable done */
673 4:	ldr	tmp1, [pmc, #AT91_PMC_SR]
674 	tst	tmp1, #AT91_PMC_MOSCRCS
675 	bne	4b
676 
677 3:
678 .endm
679 
680 .macro at91_plla_disable
681 	/* Save PLLA setting and disable it */
682 	ldr	tmp1, .pmc_version
683 	cmp	tmp1, #AT91_PMC_V1
684 	beq	1f
685 
686 #ifdef CONFIG_HAVE_AT91_SAM9X60_PLL
687 	/* Save PLLA settings. */
688 	ldr	tmp2, [pmc, #AT91_PMC_PLL_UPDT]
689 	bic	tmp2, tmp2, #AT91_PMC_PLL_UPDT_ID
690 	str	tmp2, [pmc, #AT91_PMC_PLL_UPDT]
691 
692 	/* save div. */
693 	mov	tmp1, #0
694 	ldr	tmp2, [pmc, #AT91_PMC_PLL_CTRL0]
695 	bic	tmp2, tmp2, #0xffffff00
696 	orr	tmp1, tmp1, tmp2
697 
698 	/* save mul. */
699 	ldr	tmp2, [pmc, #AT91_PMC_PLL_CTRL1]
700 	bic	tmp2, tmp2, #0xffffff
701 	orr	tmp1, tmp1, tmp2
702 	str	tmp1, .saved_pllar
703 
704 	/* step 2. */
705 	ldr	tmp1, [pmc, #AT91_PMC_PLL_UPDT]
706 	bic	tmp1, tmp1, #AT91_PMC_PLL_UPDT_UPDATE
707 	bic	tmp1, tmp1, #AT91_PMC_PLL_UPDT_ID
708 	str	tmp1, [pmc, #AT91_PMC_PLL_UPDT]
709 
710 	/* step 3. */
711 	ldr	tmp1, [pmc, #AT91_PMC_PLL_CTRL0]
712 	bic	tmp1, tmp1, #AT91_PMC_PLL_CTRL0_ENPLLCK
713 	orr	tmp1, tmp1, #AT91_PMC_PLL_CTRL0_ENPLL
714 	str	tmp1, [pmc, #AT91_PMC_PLL_CTRL0]
715 
716 	/* step 4. */
717 	ldr	tmp1, [pmc, #AT91_PMC_PLL_UPDT]
718 	orr	tmp1, tmp1, #AT91_PMC_PLL_UPDT_UPDATE
719 	bic	tmp1, tmp1, #AT91_PMC_PLL_UPDT_ID
720 	str	tmp1, [pmc, #AT91_PMC_PLL_UPDT]
721 
722 	/* step 5. */
723 	ldr	tmp1, [pmc, #AT91_PMC_PLL_CTRL0]
724 	bic	tmp1, tmp1, #AT91_PMC_PLL_CTRL0_ENPLL
725 	str	tmp1, [pmc, #AT91_PMC_PLL_CTRL0]
726 
727 	/* step 7. */
728 	ldr	tmp1, [pmc, #AT91_PMC_PLL_UPDT]
729 	orr	tmp1, tmp1, #AT91_PMC_PLL_UPDT_UPDATE
730 	bic	tmp1, tmp1, #AT91_PMC_PLL_UPDT_ID
731 	str	tmp1, [pmc, #AT91_PMC_PLL_UPDT]
732 
733 	b	2f
734 #endif
735 
736 1:	/* Save PLLA setting and disable it */
737 	ldr	tmp1, [pmc, #AT91_CKGR_PLLAR]
738 	str	tmp1, .saved_pllar
739 
740 	/* Disable PLLA. */
741 	mov	tmp1, #AT91_PMC_PLLCOUNT
742 	orr	tmp1, tmp1, #(1 << 29)		/* bit 29 always set */
743 	str	tmp1, [pmc, #AT91_CKGR_PLLAR]
744 2:
745 .endm
746 
747 .macro at91_plla_enable
748 	ldr	tmp2, .saved_pllar
749 	ldr	tmp3, .pmc_version
750 	cmp	tmp3, #AT91_PMC_V1
751 	beq	4f
752 
753 #ifdef CONFIG_HAVE_AT91_SAM9X60_PLL
754 	/* step 1. */
755 	ldr	tmp1, [pmc, #AT91_PMC_PLL_UPDT]
756 	bic	tmp1, tmp1, #AT91_PMC_PLL_UPDT_ID
757 	bic	tmp1, tmp1, #AT91_PMC_PLL_UPDT_UPDATE
758 	str	tmp1, [pmc, #AT91_PMC_PLL_UPDT]
759 
760 	/* step 2. */
761 	ldr	tmp1, =AT91_PMC_PLL_ACR_DEFAULT_PLLA
762 	str	tmp1, [pmc, #AT91_PMC_PLL_ACR]
763 
764 	/* step 3. */
765 	ldr	tmp1, [pmc, #AT91_PMC_PLL_CTRL1]
766 	mov	tmp3, tmp2
767 	bic	tmp3, tmp3, #0xffffff
768 	orr	tmp1, tmp1, tmp3
769 	str	tmp1, [pmc, #AT91_PMC_PLL_CTRL1]
770 
771 	/* step 8. */
772 	ldr	tmp1, [pmc, #AT91_PMC_PLL_UPDT]
773 	bic	tmp1, tmp1, #AT91_PMC_PLL_UPDT_ID
774 	orr	tmp1, tmp1, #AT91_PMC_PLL_UPDT_UPDATE
775 	str	tmp1, [pmc, #AT91_PMC_PLL_UPDT]
776 
777 	/* step 9. */
778 	ldr	tmp1, [pmc, #AT91_PMC_PLL_CTRL0]
779 	orr	tmp1, tmp1, #AT91_PMC_PLL_CTRL0_ENLOCK
780 	orr	tmp1, tmp1, #AT91_PMC_PLL_CTRL0_ENPLL
781 	orr	tmp1, tmp1, #AT91_PMC_PLL_CTRL0_ENPLLCK
782 	bic	tmp1, tmp1, #0xff
783 	mov	tmp3, tmp2
784 	bic	tmp3, tmp3, #0xffffff00
785 	orr	tmp1, tmp1, tmp3
786 	str	tmp1, [pmc, #AT91_PMC_PLL_CTRL0]
787 
788 	/* step 10. */
789 	ldr	tmp1, [pmc, #AT91_PMC_PLL_UPDT]
790 	orr	tmp1, tmp1, #AT91_PMC_PLL_UPDT_UPDATE
791 	bic	tmp1, tmp1, #AT91_PMC_PLL_UPDT_ID
792 	str	tmp1, [pmc, #AT91_PMC_PLL_UPDT]
793 
794 	/* step 11. */
795 3:	ldr	tmp1, [pmc, #AT91_PMC_PLL_ISR0]
796 	tst	tmp1, #0x1
797 	beq	3b
798 	b	2f
799 #endif
800 
801 	/* Restore PLLA setting */
802 4:	str	tmp2, [pmc, #AT91_CKGR_PLLAR]
803 
804 	/* Enable PLLA. */
805 	tst	tmp2, #(AT91_PMC_MUL &  0xff0000)
806 	bne	1f
807 	tst	tmp2, #(AT91_PMC_MUL & ~0xff0000)
808 	beq	2f
809 
810 1:	ldr	tmp1, [pmc, #AT91_PMC_SR]
811 	tst	tmp1, #AT91_PMC_LOCKA
812 	beq	1b
813 2:
814 .endm
815 
816 /**
817  * at91_mckx_ps_enable:	save MCK1..4 settings and switch it to main clock
818  *
819  * Side effects: overwrites tmp1, tmp2
820  */
821 .macro at91_mckx_ps_enable
822 #ifdef CONFIG_SOC_SAMA7
823 	ldr	pmc, .pmc_base
824 
825 	/* There are 4 MCKs we need to handle: MCK1..4 */
826 	mov	tmp1, #1
827 e_loop:	cmp	tmp1, #5
828 	beq	e_done
829 
830 	/* Write MCK ID to retrieve the settings. */
831 	str	tmp1, [pmc, #AT91_PMC_MCR_V2]
832 	ldr	tmp2, [pmc, #AT91_PMC_MCR_V2]
833 
834 e_save_mck1:
835 	cmp	tmp1, #1
836 	bne	e_save_mck2
837 	str	tmp2, .saved_mck1
838 	b	e_ps
839 
840 e_save_mck2:
841 	cmp	tmp1, #2
842 	bne	e_save_mck3
843 	str	tmp2, .saved_mck2
844 	b	e_ps
845 
846 e_save_mck3:
847 	cmp	tmp1, #3
848 	bne	e_save_mck4
849 	str	tmp2, .saved_mck3
850 	b	e_ps
851 
852 e_save_mck4:
853 	str	tmp2, .saved_mck4
854 
855 e_ps:
856 	/* Use CSS=MAINCK and DIV=1. */
857 	bic	tmp2, tmp2, #AT91_PMC_MCR_V2_CSS
858 	bic	tmp2, tmp2, #AT91_PMC_MCR_V2_DIV
859 	orr	tmp2, tmp2, #AT91_PMC_MCR_V2_CSS_MAINCK
860 	orr	tmp2, tmp2, #AT91_PMC_MCR_V2_DIV1
861 	str	tmp2, [pmc, #AT91_PMC_MCR_V2]
862 
863 	wait_mckrdy tmp1
864 
865 	add	tmp1, tmp1, #1
866 	b	e_loop
867 
868 e_done:
869 #endif
870 .endm
871 
872 /**
873  * at91_mckx_ps_restore: restore MCK1..4 settings
874  *
875  * Side effects: overwrites tmp1, tmp2
876  */
877 .macro at91_mckx_ps_restore
878 #ifdef CONFIG_SOC_SAMA7
879 	ldr	pmc, .pmc_base
880 
881 	/* There are 4 MCKs we need to handle: MCK1..4 */
882 	mov	tmp1, #1
883 r_loop:	cmp	tmp1, #5
884 	beq	r_done
885 
886 r_save_mck1:
887 	cmp	tmp1, #1
888 	bne	r_save_mck2
889 	ldr	tmp2, .saved_mck1
890 	b	r_ps
891 
892 r_save_mck2:
893 	cmp	tmp1, #2
894 	bne	r_save_mck3
895 	ldr	tmp2, .saved_mck2
896 	b	r_ps
897 
898 r_save_mck3:
899 	cmp	tmp1, #3
900 	bne	r_save_mck4
901 	ldr	tmp2, .saved_mck3
902 	b	r_ps
903 
904 r_save_mck4:
905 	ldr	tmp2, .saved_mck4
906 
907 r_ps:
908 	/* Write MCK ID to retrieve the settings. */
909 	str	tmp1, [pmc, #AT91_PMC_MCR_V2]
910 	ldr	tmp3, [pmc, #AT91_PMC_MCR_V2]
911 
912 	/* We need to restore CSS and DIV. */
913 	bic	tmp3, tmp3, #AT91_PMC_MCR_V2_CSS
914 	bic	tmp3, tmp3, #AT91_PMC_MCR_V2_DIV
915 	orr	tmp3, tmp3, tmp2
916 	bic	tmp3, tmp3, #AT91_PMC_MCR_V2_ID_MSK
917 	orr	tmp3, tmp3, tmp1
918 	orr	tmp3, tmp3, #AT91_PMC_MCR_V2_CMD
919 	str	tmp2, [pmc, #AT91_PMC_MCR_V2]
920 
921 	wait_mckrdy tmp1
922 
923 	add	tmp1, tmp1, #1
924 	b	r_loop
925 r_done:
926 #endif
927 .endm
928 
929 .macro at91_ulp_mode
930 	at91_mckx_ps_enable
931 
932 	ldr	pmc, .pmc_base
933 	ldr	tmp2, .mckr_offset
934 	ldr	tmp3, .pm_mode
935 
936 	/* Save Master clock setting */
937 	ldr	tmp1, [pmc, tmp2]
938 	str	tmp1, .saved_mckr
939 
940 	/*
941 	 * Set master clock source to:
942 	 * - MAINCK if using ULP0 fast variant
943 	 * - slow clock, otherwise
944 	 */
945 	bic	tmp1, tmp1, #AT91_PMC_CSS
946 	cmp	tmp3, #AT91_PM_ULP0_FAST
947 	bne	save_mck
948 	orr	tmp1, tmp1, #AT91_PMC_CSS_MAIN
949 save_mck:
950 	str	tmp1, [pmc, tmp2]
951 
952 	mov	tmp3, #0
953 	wait_mckrdy tmp3
954 
955 	at91_plla_disable
956 
957 	/* Enable low power mode for 2.5V regulator. */
958 	at91_2_5V_reg_set_low_power 1
959 
960 	ldr	tmp3, .pm_mode
961 	cmp	tmp3, #AT91_PM_ULP1
962 	beq	ulp1_mode
963 
964 	at91_pm_ulp0_mode
965 	b	ulp_exit
966 
967 ulp1_mode:
968 	at91_pm_ulp1_mode
969 	b	ulp_exit
970 
971 ulp_exit:
972 	/* Disable low power mode for 2.5V regulator. */
973 	at91_2_5V_reg_set_low_power 0
974 
975 	ldr	pmc, .pmc_base
976 
977 	at91_plla_enable
978 
979 	/*
980 	 * Restore master clock setting
981 	 */
982 	ldr	tmp1, .mckr_offset
983 	ldr	tmp2, .saved_mckr
984 	str	tmp2, [pmc, tmp1]
985 
986 	mov	tmp3, #0
987 	wait_mckrdy tmp3
988 
989 	at91_mckx_ps_restore
990 .endm
991 
992 .macro at91_backup_mode
993 	/* Switch the master clock source to slow clock. */
994 	ldr	pmc, .pmc_base
995 	ldr	tmp2, .mckr_offset
996 	ldr	tmp1, [pmc, tmp2]
997 	bic	tmp1, tmp1, #AT91_PMC_CSS
998 	str	tmp1, [pmc, tmp2]
999 
1000 	mov	tmp3, #0
1001 	wait_mckrdy tmp3
1002 
1003 	/*BUMEN*/
1004 	ldr	r0, .sfrbu
1005 	mov	tmp1, #0x1
1006 	str	tmp1, [r0, #0x10]
1007 
1008 	/* Wait for it. */
1009 1:	ldr	tmp1, [r0, #0x10]
1010 	tst	tmp1, #0x1
1011 	beq	1b
1012 
1013 	/* Shutdown */
1014 	ldr	r0, .shdwc
1015 	mov	tmp1, #0xA5000000
1016 	add	tmp1, tmp1, #0x1
1017 	at91_backup_set_lpm tmp1
1018 	str	tmp1, [r0, #0]
1019 .endm
1020 
1021 /*
1022  * void at91_suspend_sram_fn(struct at91_pm_data*)
1023  * @input param:
1024  * 	@r0: base address of struct at91_pm_data
1025  */
1026 /* at91_pm_suspend_in_sram must be 8-byte aligned per the requirements of fncpy() */
1027 	.align 3
1028 ENTRY(at91_pm_suspend_in_sram)
1029 	/* Save registers on stack */
1030 	stmfd	sp!, {r4 - r12, lr}
1031 
1032 	/* Drain write buffer */
1033 	mov	tmp1, #0
1034 	mcr	p15, 0, tmp1, c7, c10, 4
1035 
1036 	/* Flush tlb. */
1037 	mov	r4, #0
1038 	mcr	p15, 0, r4, c8, c7, 0
1039 
1040 	ldr	tmp1, [r0, #PM_DATA_PMC_MCKR_OFFSET]
1041 	str	tmp1, .mckr_offset
1042 	ldr	tmp1, [r0, #PM_DATA_PMC_VERSION]
1043 	str	tmp1, .pmc_version
1044 	ldr	tmp1, [r0, #PM_DATA_MEMCTRL]
1045 	str	tmp1, .memtype
1046 	ldr	tmp1, [r0, #PM_DATA_MODE]
1047 	str	tmp1, .pm_mode
1048 
1049 	/*
1050 	 * ldrne below are here to preload their address in the TLB as access
1051 	 * to RAM may be limited while in self-refresh.
1052 	 */
1053 	ldr	tmp1, [r0, #PM_DATA_PMC]
1054 	str	tmp1, .pmc_base
1055 	cmp	tmp1, #0
1056 	ldrne	tmp2, [tmp1, #0]
1057 
1058 	ldr	tmp1, [r0, #PM_DATA_RAMC0]
1059 	str	tmp1, .sramc_base
1060 	cmp	tmp1, #0
1061 	ldrne	tmp2, [tmp1, #0]
1062 
1063 	ldr	tmp1, [r0, #PM_DATA_RAMC1]
1064 	str	tmp1, .sramc1_base
1065 	cmp	tmp1, #0
1066 	ldrne	tmp2, [tmp1, #0]
1067 
1068 #ifndef CONFIG_SOC_SAM_V4_V5
1069 	/* ldrne below are here to preload their address in the TLB */
1070 	ldr	tmp1, [r0, #PM_DATA_RAMC_PHY]
1071 	str	tmp1, .sramc_phy_base
1072 	cmp	tmp1, #0
1073 	ldrne	tmp2, [tmp1, #0]
1074 
1075 	ldr	tmp1, [r0, #PM_DATA_SHDWC]
1076 	str	tmp1, .shdwc
1077 	cmp	tmp1, #0
1078 	ldrne	tmp2, [tmp1, #0]
1079 
1080 	ldr	tmp1, [r0, #PM_DATA_SFRBU]
1081 	str	tmp1, .sfrbu
1082 	cmp	tmp1, #0
1083 	ldrne	tmp2, [tmp1, #0x10]
1084 #endif
1085 
1086 	/* Active the self-refresh mode */
1087 	at91_sramc_self_refresh_ena
1088 
1089 	ldr	r0, .pm_mode
1090 	cmp	r0, #AT91_PM_STANDBY
1091 	beq	standby
1092 	cmp	r0, #AT91_PM_BACKUP
1093 	beq	backup_mode
1094 
1095 	at91_ulp_mode
1096 	b	exit_suspend
1097 
1098 standby:
1099 	/* Wait for interrupt */
1100 	ldr	pmc, .pmc_base
1101 	at91_cpu_idle
1102 	b	exit_suspend
1103 
1104 backup_mode:
1105 	at91_backup_mode
1106 
1107 exit_suspend:
1108 	/* Exit the self-refresh mode */
1109 	at91_sramc_self_refresh_dis
1110 
1111 	/* Restore registers, and return */
1112 	ldmfd	sp!, {r4 - r12, pc}
1113 ENDPROC(at91_pm_suspend_in_sram)
1114 
1115 .pmc_base:
1116 	.word 0
1117 .sramc_base:
1118 	.word 0
1119 .sramc1_base:
1120 	.word 0
1121 .sramc_phy_base:
1122 	.word 0
1123 .shdwc:
1124 	.word 0
1125 .sfrbu:
1126 	.word 0
1127 .memtype:
1128 	.word 0
1129 .pm_mode:
1130 	.word 0
1131 .mckr_offset:
1132 	.word 0
1133 .pmc_version:
1134 	.word 0
1135 .saved_mckr:
1136 	.word 0
1137 .saved_pllar:
1138 	.word 0
1139 .saved_sam9_lpr:
1140 	.word 0
1141 .saved_sam9_lpr1:
1142 	.word 0
1143 .saved_sam9_mdr:
1144 	.word 0
1145 .saved_sam9_mdr1:
1146 	.word 0
1147 .saved_osc_status:
1148 	.word 0
1149 #ifdef CONFIG_SOC_SAMA7
1150 .saved_mck1:
1151 	.word 0
1152 .saved_mck2:
1153 	.word 0
1154 .saved_mck3:
1155 	.word 0
1156 .saved_mck4:
1157 	.word 0
1158 #endif
1159 
1160 ENTRY(at91_pm_suspend_in_sram_sz)
1161 	.word .-at91_pm_suspend_in_sram
1162