~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/arm/mach-at91/pm_suspend.S

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php