Merge branch 'master' of git://git.denx.de/u-boot-i2c
[oweals/u-boot.git] / arch / arm / mach-rmobile / lowlevel_init.S
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * Copyright (C) 2012 Nobuhiro Iwamatsu <nobuhiro.Iwamatsu.yj@renesas.com>
4  * Copyright (C) 2012 Renesas Solutions Corp.
5  */
6
7 #include <config.h>
8 #include <linux/linkage.h>
9
10 ENTRY(lowlevel_init)
11         ldr             r0, =MERAM_BASE
12         mov             r1, #0x0
13         str             r1, [r0]
14
15         mrc             p15, 0, r0, c0, c0, 5
16         ands    r0, r0, #0xF
17         beq             lowlevel_init__
18         b               wait_interrupt
19
20         .pool
21         .align 4
22
23 wait_interrupt:
24 #ifdef ICCICR
25         ldr     r1, =ICCICR
26         mov     r2, #0x0
27         str     r2, [r1]
28         mov     r2, #0xF0
29         adds    r1, r1, #4 /* ICCPMR */
30         str     r2, [r1]
31         ldr     r1, =ICCICR
32         mov     r2, #0x1
33         str     r2, [r1]
34 #endif
35
36 wait_loop:
37         .long   0xE320F003 /* wfi */
38
39         ldr             r2, [r1, #0xC]
40         str             r2, [r1, #0x10]
41
42         ldr             r0, =MERAM_BASE
43         ldr             r2, [r0]
44         cmp             r2, #0
45         movne   pc, r2
46
47         b               wait_loop
48
49 wait_loop_end:
50         .pool
51         .align 4
52
53 lowlevel_init__:
54
55         mov r0, #0x200000
56
57 loop0:
58         subs r0, r0, #1
59         bne  loop0
60
61         ldr sp, MERAM_STACK
62         b s_init
63
64         .pool
65         .align 4
66
67 ENDPROC(lowlevel_init)
68         .ltorg
69
70 MERAM_STACK:
71         .word LOW_LEVEL_MERAM_STACK