Merge tag 'efi-2020-07-rc6' of https://gitlab.denx.de/u-boot/custodians/u-boot-efi
[oweals/u-boot.git] / board / renesas / sh7763rdp / lowlevel_init.S
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * Copyright (C) 2008 Renesas Solutions Corp.
4  * Copyright (C) 2008 Nobuhiro Iwamatsu <iwamatsu.nobuhiro@renesas.com>
5  * Copyright (C) 2007 Kenati Technologies, Inc.
6  *
7  * board/sh7763rdp/lowlevel_init.S
8  */
9
10 #include <config.h>
11
12 #include <asm/processor.h>
13 #include <asm/macro.h>
14
15         .global lowlevel_init
16
17         .text
18         .align  2
19
20 lowlevel_init:
21
22         write32 WDTCSR_A, WDTCSR_D      /* Watchdog Control / Status Register */
23
24         write32 WDTST_A, WDTST_D        /* Watchdog Stop Time Register */
25
26         write32 WDTBST_A, WDTBST_D      /*
27                                          * 0xFFCC0008
28                                          * Watchdog Base Stop Time Register
29                                          */
30
31         write32 CCR_A, CCR_CACHE_ICI_D  /* Address of Cache Control Register */
32                                         /* Instruction Cache Invalidate */
33
34         write32 MMUCR_A, MMU_CONTROL_TI_D       /* MMU Control Register */
35                                                 /* TI == TLB Invalidate bit */
36
37         write32 MSTPCR0_A, MSTPCR0_D    /* Address of Power Control Register 0 */
38
39         write32 MSTPCR1_A, MSTPCR1_D    /* Address of Power Control Register 1 */
40
41         write32 RAMCR_A, RAMCR_D
42
43         mov.l   MMSELR_A, r1
44         mov.l   MMSELR_D, r0
45         synco
46         mov.l   r0, @r1
47
48         mov.l   @r1, r2         /* execute two reads after setting MMSELR */
49         mov.l   @r1, r2
50         synco
51
52         /* issue memory read */
53         mov.l   DDRSD_START_A, r1       /* memory address to read*/
54         mov.l   @r1, r0
55         synco
56
57         write32 MIM8_A, MIM8_D
58
59         write32 MIMC_A, MIMC_D1
60
61         write32 STRC_A, STRC_D
62
63         write32 SDR4_A, SDR4_D
64
65         write32 MIMC_A, MIMC_D2
66
67         nop
68         nop
69         nop
70
71         write32 SCR4_A, SCR4_D3
72
73         write32 SCR4_A, SCR4_D2
74
75         write32 SDMR02000_A, SDMR02000_D
76
77         write32 SDMR00B08_A, SDMR00B08_D
78
79         write32 SCR4_A, SCR4_D2
80
81         write32 SCR4_A, SCR4_D4
82
83         nop
84         nop
85         nop
86         nop
87
88         write32 SCR4_A, SCR4_D4
89
90         nop
91         nop
92         nop
93         nop
94
95         write32 SDMR00308_A, SDMR00308_D
96
97         write32 MIMC_A, MIMC_D3
98
99         mov.l   SCR4_A, r1
100         mov.l   SCR4_D1, r0
101         mov.l   DELAY60_D, r3
102
103 delay_loop_60:
104         mov.l   r0, @r1
105         dt      r3
106         bf      delay_loop_60
107         nop
108
109         write32 CCR_A, CCR_CACHE_D_2    /* Address of Cache Control Register */
110
111 bsc_init:
112         write32 BCR_A, BCR_D
113
114         write32 CS0BCR_A, CS0BCR_D
115
116         write32 CS1BCR_A, CS1BCR_D
117
118         write32 CS2BCR_A, CS2BCR_D
119
120         write32 CS4BCR_A, CS4BCR_D
121
122         write32 CS5BCR_A, CS5BCR_D
123
124         write32 CS6BCR_A, CS6BCR_D
125
126         write32 CS0WCR_A, CS0WCR_D
127
128         write32 CS1WCR_A, CS1WCR_D
129
130         write32 CS2WCR_A, CS2WCR_D
131
132         write32 CS4WCR_A, CS4WCR_D
133
134         write32 CS5WCR_A, CS5WCR_D
135
136         write32 CS6WCR_A, CS6WCR_D
137
138         write32 CS5PCR_A, CS5PCR_D
139
140         write32 CS6PCR_A, CS6PCR_D
141
142         mov.l   DELAY200_D, r3
143
144 delay_loop_200:
145         dt      r3
146         bf      delay_loop_200
147         nop
148
149         write16 PSEL0_A, PSEL0_D
150
151         write16 PSEL1_A, PSEL1_D
152
153         write32 ICR0_A, ICR0_D
154
155         stc sr, r0      /* BL bit off(init=ON) */
156         mov.l   SR_MASK_D, r1
157         and r1, r0
158         ldc r0, sr
159
160         rts
161         nop
162
163         .align  2
164
165 DELAY60_D:      .long   60
166 DELAY200_D:     .long   17800
167
168 CCR_A:          .long   0xFF00001C
169 MMUCR_A:        .long   0xFF000010
170 RAMCR_A:        .long   0xFF000074
171
172 /* Low power mode control */
173 MSTPCR0_A:      .long   0xFFC80030
174 MSTPCR1_A:      .long   0xFFC80038
175
176 /* RWBT */
177 WDTST_A:        .long   0xFFCC0000
178 WDTCSR_A:       .long   0xFFCC0004
179 WDTBST_A:       .long   0xFFCC0008
180
181 /* BSC */
182 MMSELR_A:       .long   0xFE600020
183 BCR_A:          .long   0xFF801000
184 CS0BCR_A:       .long   0xFF802000
185 CS1BCR_A:       .long   0xFF802010
186 CS2BCR_A:       .long   0xFF802020
187 CS4BCR_A:       .long   0xFF802040
188 CS5BCR_A:       .long   0xFF802050
189 CS6BCR_A:       .long   0xFF802060
190 CS0WCR_A:       .long   0xFF802008
191 CS1WCR_A:       .long   0xFF802018
192 CS2WCR_A:       .long   0xFF802028
193 CS4WCR_A:       .long   0xFF802048
194 CS5WCR_A:       .long   0xFF802058
195 CS6WCR_A:       .long   0xFF802068
196 CS5PCR_A:       .long   0xFF802070
197 CS6PCR_A:       .long   0xFF802080
198 DDRSD_START_A:  .long   0xAC000000
199
200 /* INTC */
201 ICR0_A:         .long   0xFFD00000
202
203 /* DDR I/F */
204 MIM8_A:         .long   0xFE800008
205 MIMC_A:         .long   0xFE80000C
206 SCR4_A:         .long   0xFE800014
207 STRC_A:         .long   0xFE80001C
208 SDR4_A:         .long   0xFE800034
209 SDMR00308_A:    .long   0xFE900308
210 SDMR00B08_A:    .long   0xFE900B08
211 SDMR02000_A:    .long   0xFE902000
212
213 /* GPIO */
214 PSEL0_A:        .long   0xFFEF0070
215 PSEL1_A:        .long   0xFFEF0072
216
217 CCR_CACHE_ICI_D:.long   0x00000800
218 CCR_CACHE_D_2:  .long   0x00000103
219 MMU_CONTROL_TI_D:.long  0x00000004
220 RAMCR_D:        .long   0x00000200
221 MSTPCR0_D:      .long   0x00000000
222 MSTPCR1_D:      .long   0x00000000
223
224 MMSELR_D:       .long   0xa5a50000
225 BCR_D:          .long   0x00000000
226 CS0BCR_D:       .long   0x77777770
227 CS1BCR_D:       .long   0x77777670
228 CS2BCR_D:       .long   0x77777670
229 CS4BCR_D:       .long   0x77777670
230 CS5BCR_D:       .long   0x77777670
231 CS6BCR_D:       .long   0x77777670
232 CS0WCR_D:       .long   0x7777770F
233 CS1WCR_D:       .long   0x22000002
234 CS2WCR_D:       .long   0x7777770F
235 CS4WCR_D:       .long   0x7777770F
236 CS5WCR_D:       .long   0x7777770F
237 CS6WCR_D:       .long   0x7777770F
238 CS5PCR_D:       .long   0x77000000
239 CS6PCR_D:       .long   0x77000000
240 ICR0_D:         .long   0x00E00000
241 MIM8_D:         .long   0x00000000
242 MIMC_D1:        .long   0x01d10008
243 MIMC_D2:        .long   0x01d10009
244 MIMC_D3:        .long   0x01d10209
245 SCR4_D1:        .long   0x00000001
246 SCR4_D2:        .long   0x00000002
247 SCR4_D3:        .long   0x00000003
248 SCR4_D4:        .long   0x00000004
249 STRC_D:         .long   0x000f3980
250 SDR4_D:         .long   0x00000300
251 SDMR00308_D:    .long   0x00000000
252 SDMR00B08_D:    .long   0x00000000
253 SDMR02000_D:    .long   0x00000000
254 PSEL0_D:        .word   0x00000001
255 PSEL1_D:        .word   0x00000244
256 SR_MASK_D:      .long   0xEFFFFF0F
257 WDTST_D:        .long   0x5A000FFF
258 WDTCSR_D:       .long   0xA5000000
259 WDTBST_D:       .long   0x55000000