aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClaudiu Beznea <claudiu.beznea@microchip.com>2019-02-14 10:55:01 -0500
committerLudovic Desroches <ludovic.desroches@microchip.com>2019-03-28 06:05:53 -0400
commitbc0779bd8f1317faddf65385f7af1f1fe229f23b (patch)
tree04fa7e22d554f524e4f0c5f397ae55e28776f4f1
parenteaedc0d379da6d1157a4f274d186001d11615b2b (diff)
ARM: at91: pm: disable RC oscillator in ULP0
Disable RC oscillator in ULP0 as datasheet specifies. Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Signed-off-by: Ludovic Desroches <ludovic.desroches@microchip.com>
-rw-r--r--arch/arm/mach-at91/pm_suspend.S39
1 files changed, 37 insertions, 2 deletions
diff --git a/arch/arm/mach-at91/pm_suspend.S b/arch/arm/mach-at91/pm_suspend.S
index 8b18cad1dcf5..5c33023f9129 100644
--- a/arch/arm/mach-at91/pm_suspend.S
+++ b/arch/arm/mach-at91/pm_suspend.S
@@ -178,11 +178,46 @@ ENDPROC(at91_backup_mode)
178 orr tmp1, tmp1, #AT91_PMC_KEY 178 orr tmp1, tmp1, #AT91_PMC_KEY
179 str tmp1, [pmc, #AT91_CKGR_MOR] 179 str tmp1, [pmc, #AT91_CKGR_MOR]
180 180
181 /* Save RC oscillator state */
182 ldr tmp1, [pmc, #AT91_PMC_SR]
183 str tmp1, .saved_osc_status
184 tst tmp1, #AT91_PMC_MOSCRCS
185 bne 1f
186
187 /* Turn off RC oscillator */
188 ldr tmp1, [pmc, #AT91_CKGR_MOR]
189 bic tmp1, tmp1, #AT91_PMC_MOSCRCEN
190 bic tmp1, tmp1, #AT91_PMC_KEY_MASK
191 orr tmp1, tmp1, #AT91_PMC_KEY
192 str tmp1, [pmc, #AT91_CKGR_MOR]
193
194 /* Wait main RC disabled done */
1952: ldr tmp1, [pmc, #AT91_PMC_SR]
196 tst tmp1, #AT91_PMC_MOSCRCS
197 bne 2b
198
181 /* Wait for interrupt */ 199 /* Wait for interrupt */
182 at91_cpu_idle 2001: at91_cpu_idle
183 201
184 /* Turn on the crystal oscillator */ 202 /* Restore RC oscillator state */
203 ldr tmp1, .saved_osc_status
204 tst tmp1, #AT91_PMC_MOSCRCS
205 beq 4f
206
207 /* Turn on RC oscillator */
185 ldr tmp1, [pmc, #AT91_CKGR_MOR] 208 ldr tmp1, [pmc, #AT91_CKGR_MOR]
209 orr tmp1, tmp1, #AT91_PMC_MOSCRCEN
210 bic tmp1, tmp1, #AT91_PMC_KEY_MASK
211 orr tmp1, tmp1, #AT91_PMC_KEY
212 str tmp1, [pmc, #AT91_CKGR_MOR]
213
214 /* Wait main RC stabilization */
2153: ldr tmp1, [pmc, #AT91_PMC_SR]
216 tst tmp1, #AT91_PMC_MOSCRCS
217 beq 3b
218
219 /* Turn on the crystal oscillator */
2204: ldr tmp1, [pmc, #AT91_CKGR_MOR]
186 orr tmp1, tmp1, #AT91_PMC_MOSCEN 221 orr tmp1, tmp1, #AT91_PMC_MOSCEN
187 orr tmp1, tmp1, #AT91_PMC_KEY 222 orr tmp1, tmp1, #AT91_PMC_KEY
188 str tmp1, [pmc, #AT91_CKGR_MOR] 223 str tmp1, [pmc, #AT91_CKGR_MOR]