pm_suspend.S 24 KB

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