Merge tag 'samsung-soc-5.10' of https://git.kernel.org/pub/scm/linux/kernel/git/krzk...
[linux-2.6-microblaze.git] / arch / arm / mach-s3c / sleep-s3c2410.S
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * Copyright (c) 2004 Simtec Electronics
4  *      Ben Dooks <ben@simtec.co.uk>
5  *
6  * S3C2410 Power Manager (Suspend-To-RAM) support
7  *
8  * Based on PXA/SA1100 sleep code by:
9  *      Nicolas Pitre, (c) 2002 Monta Vista Software Inc
10  *      Cliff Brake, (c) 2001
11  */
12
13 #include <linux/linkage.h>
14 #include <linux/serial_s3c.h>
15 #include <asm/assembler.h>
16 #include "map.h"
17
18 #include "regs-gpio.h"
19 #include "regs-clock.h"
20
21 #include "regs-mem-s3c24xx.h"
22
23         /* s3c2410_cpu_suspend
24          *
25          * put the cpu into sleep mode
26         */
27
28 ENTRY(s3c2410_cpu_suspend)
29         @@ prepare cpu to sleep
30
31         ldr     r4, =S3C2410_REFRESH
32         ldr     r5, =S3C24XX_MISCCR
33         ldr     r6, =S3C2410_CLKCON
34         ldr     r7, [r4]                @ get REFRESH (and ensure in TLB)
35         ldr     r8, [r5]                @ get MISCCR (and ensure in TLB)
36         ldr     r9, [r6]                @ get CLKCON (and ensure in TLB)
37
38         orr     r7, r7, #S3C2410_REFRESH_SELF   @ SDRAM sleep command
39         orr     r8, r8, #S3C2410_MISCCR_SDSLEEP @ SDRAM power-down signals
40         orr     r9, r9, #S3C2410_CLKCON_POWER   @ power down command
41
42         teq     pc, #0                  @ first as a trial-run to load cache
43         bl      s3c2410_do_sleep
44         teq     r0, r0                  @ now do it for real
45         b       s3c2410_do_sleep        @
46
47         @@ align next bit of code to cache line
48         .align  5
49 s3c2410_do_sleep:
50         streq   r7, [r4]                        @ SDRAM sleep command
51         streq   r8, [r5]                        @ SDRAM power-down config
52         streq   r9, [r6]                        @ CPU sleep
53 1:      beq     1b
54         ret     lr