Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / u-boot / board / renesas / r7780mp / lowlevel_init.S
1 /*
2  * Copyright (C) 2007,2008 Nobuhiro Iwamatsu
3  *
4  * u-boot/board/r7780mp/lowlevel_init.S
5  *
6  * SPDX-License-Identifier:     GPL-2.0+
7  */
8
9 #include <config.h>
10 #include <version.h>
11 #include <asm/processor.h>
12 #include <asm/macro.h>
13
14 /*
15  * Board specific low level init code, called _very_ early in the
16  * startup sequence. Relocation to SDRAM has not happened yet, no
17  * stack is available, bss section has not been initialised, etc.
18  *
19  * (Note: As no stack is available, no subroutines can be called...).
20  */
21
22         .global lowlevel_init
23
24         .text
25         .align  2
26
27 lowlevel_init:
28
29         write32 CCR_A, CCR_D            /* Address of Cache Control Register */
30                                         /* Instruction Cache Invalidate */
31
32         write32 FRQCR_A, FRQCR_D        /* Frequency control register */
33
34         /* pin_multi_setting */
35         write32 BBG_PMMR_A, BBG_PMMR_D_PMSR1
36
37         write32 BBG_PMSR1_A, BBG_PMSR1_D
38
39         write32 BBG_PMMR_A, BBG_PMMR_D_PMSR2
40
41         write32 BBG_PMSR2_A, BBG_PMSR2_D
42
43         write32 BBG_PMMR_A, BBG_PMMR_D_PMSR3
44
45         write32 BBG_PMSR3_A, BBG_PMSR3_D
46
47         write32 BBG_PMMR_A, BBG_PMMR_D_PMSR4
48
49         write32 BBG_PMSR4_A, BBG_PMSR4_D
50
51         write32 BBG_PMMR_A, BBG_PMMR_D_PMSRG
52
53         write32 BBG_PMSRG_A, BBG_PMSRG_D
54
55         /* cpg_setting */
56         write32 FRQCR_A, FRQCR_D
57
58         write32 DLLCSR_A, DLLCSR_D
59
60         nop
61         nop
62         nop
63         nop
64         nop
65         nop
66         nop
67         nop
68         nop
69         nop
70
71         /* wait 200us */
72         mov.l   REPEAT0_R3, r3
73         mov     #0, r2
74 repeat0:
75         add     #1, r2
76         cmp/hs  r3, r2
77         bf      repeat0
78         nop
79
80         /* bsc_setting */
81         write32 MMSELR_A, MMSELR_D
82
83         write32 BCR_A, BCR_D
84
85         write32 CS0BCR_A, CS0BCR_D
86
87         write32 CS1BCR_A, CS1BCR_D
88
89         write32 CS2BCR_A, CS2BCR_D
90
91         write32 CS4BCR_A, CS4BCR_D
92
93         write32 CS5BCR_A, CS5BCR_D
94
95         write32 CS6BCR_A, CS6BCR_D
96
97         write32 CS0WCR_A, CS0WCR_D
98
99         write32 CS1WCR_A, CS1WCR_D
100
101         write32 CS2WCR_A, CS2WCR_D
102
103         write32 CS4WCR_A, CS4WCR_D
104
105         write32 CS5WCR_A, CS5WCR_D
106
107         write32 CS6WCR_A, CS6WCR_D
108
109         write32 CS5PCR_A, CS5PCR_D
110
111         write32 CS6PCR_A, CS6PCR_D
112
113         /* ddr_setting */
114         /* wait 200us */
115         mov.l   REPEAT0_R3, r3
116         mov     #0, r2
117 repeat1:
118         add     #1, r2
119         cmp/hs  r3, r2
120         bf      repeat1
121         nop
122
123         mov.l   MIM_U_A, r0
124         mov.l   MIM_U_D, r1
125         synco
126         mov.l   r1, @r0
127         synco
128
129         mov.l   MIM_L_A, r0
130         mov.l   MIM_L_D0, r1
131         synco
132         mov.l   r1, @r0
133         synco
134
135         mov.l   STR_L_A, r0
136         mov.l   STR_L_D, r1
137         synco
138         mov.l   r1, @r0
139         synco
140
141         mov.l   SDR_L_A, r0
142         mov.l   SDR_L_D, r1
143         synco
144         mov.l   r1, @r0
145         synco
146
147         nop
148         nop
149         nop
150         nop
151
152         mov.l   SCR_L_A, r0
153         mov.l   SCR_L_D0, r1
154         synco
155         mov.l   r1, @r0
156         synco
157
158         mov.l   SCR_L_A, r0
159         mov.l   SCR_L_D1, r1
160         synco
161         mov.l   r1, @r0
162         synco
163
164         nop
165         nop
166         nop
167
168         mov.l   EMRS_A, r0
169         mov.l   EMRS_D, r1
170         synco
171         mov.l   r1, @r0
172         synco
173
174         nop
175         nop
176         nop
177
178         mov.l   MRS1_A, r0
179         mov.l   MRS1_D, r1
180         synco
181         mov.l   r1, @r0
182         synco
183
184         nop
185         nop
186         nop
187
188         mov.l   SCR_L_A, r0
189         mov.l   SCR_L_D2, r1
190         synco
191         mov.l   r1, @r0
192         synco
193
194         nop
195         nop
196         nop
197
198         mov.l   SCR_L_A, r0
199         mov.l   SCR_L_D3, r1
200         synco
201         mov.l   r1, @r0
202         synco
203
204         nop
205         nop
206         nop
207
208         mov.l   SCR_L_A, r0
209         mov.l   SCR_L_D4, r1
210         synco
211         mov.l   r1, @r0
212         synco
213
214         nop
215         nop
216         nop
217
218         mov.l   MRS2_A, r0
219         mov.l   MRS2_D, r1
220         synco
221         mov.l   r1, @r0
222         synco
223
224         nop
225         nop
226         nop
227
228         mov.l   SCR_L_A, r0
229         mov.l   SCR_L_D5, r1
230         synco
231         mov.l   r1, @r0
232         synco
233
234         /* wait 200us */
235         mov.l   REPEAT0_R1, r3
236         mov     #0, r2
237 repeat2:
238         add     #1, r2
239         cmp/hs  r3, r2
240         bf      repeat2
241
242         synco
243
244         mov.l   MIM_L_A, r0
245         mov.l   MIM_L_D1, r1
246         synco
247         mov.l   r1, @r0
248         synco
249
250         rts
251         nop
252         .align  4
253
254 RWTCSR_D_1:             .word   0xA507
255 RWTCSR_D_2:             .word   0xA507
256 RWTCNT_D:               .word   0x5A00
257         .align  2
258
259 BBG_PMMR_A:             .long   0xFF800010
260 BBG_PMSR1_A:            .long   0xFF800014
261 BBG_PMSR2_A:            .long   0xFF800018
262 BBG_PMSR3_A:            .long   0xFF80001C
263 BBG_PMSR4_A:            .long   0xFF800020
264 BBG_PMSRG_A:            .long   0xFF800024
265
266 BBG_PMMR_D_PMSR1:       .long   0xffffbffd
267 BBG_PMSR1_D:            .long   0x00004002
268 BBG_PMMR_D_PMSR2:       .long   0xfc21a7ff
269 BBG_PMSR2_D:            .long   0x03de5800
270 BBG_PMMR_D_PMSR3:       .long   0xfffffff8
271 BBG_PMSR3_D:            .long   0x00000007
272 BBG_PMMR_D_PMSR4:       .long   0xdffdfff9
273 BBG_PMSR4_D:            .long   0x20020006
274 BBG_PMMR_D_PMSRG:       .long   0xffffffff
275 BBG_PMSRG_D:            .long   0x00000000
276
277 FRQCR_A:                .long   FRQCR
278 DLLCSR_A:               .long   0xffc40010
279 FRQCR_D:                .long   0x40233035
280 DLLCSR_D:               .long   0x00000000
281
282 /* for DDR-SDRAM */
283 MIM_U_A:                .long   MIM_1
284 MIM_L_A:                .long   MIM_2
285 SCR_U_A:                .long   SCR_1
286 SCR_L_A:                .long   SCR_2
287 STR_U_A:                .long   STR_1
288 STR_L_A:                .long   STR_2
289 SDR_U_A:                .long   SDR_1
290 SDR_L_A:                .long   SDR_2
291
292 EMRS_A:                 .long   0xFEC02000
293 MRS1_A:                 .long   0xFEC00B08
294 MRS2_A:                 .long   0xFEC00308
295
296 MIM_U_D:                .long   0x00004000
297 MIM_L_D0:               .long   0x03e80009
298 MIM_L_D1:               .long   0x03e80209
299 SCR_L_D0:               .long   0x3
300 SCR_L_D1:               .long   0x2
301 SCR_L_D2:               .long   0x2
302 SCR_L_D3:               .long   0x4
303 SCR_L_D4:               .long   0x4
304 SCR_L_D5:               .long   0x0
305 STR_L_D:                .long   0x000f0000
306 SDR_L_D:                .long   0x00000400
307 EMRS_D:                 .long   0x0
308 MRS1_D:                 .long   0x0
309 MRS2_D:                 .long   0x0
310
311 /* Cache Controller */
312 CCR_A:                  .long   CCR
313 MMUCR_A:                .long   MMUCR
314 RWTCNT_A:               .long   WTCNT
315
316 CCR_D:                  .long   0x0000090b
317 CCR_D_2:                .long   0x00000103
318 MMUCR_D:                .long   0x00000004
319 MSTPCR0_D:              .long   0x00001001
320 MSTPCR2_D:              .long   0xffffffff
321
322 /* local Bus State Controller */
323 MMSELR_A:               .long   MMSELR
324 BCR_A:                  .long   BCR
325 CS0BCR_A:               .long   CS0BCR
326 CS1BCR_A:               .long   CS1BCR
327 CS2BCR_A:               .long   CS2BCR
328 CS4BCR_A:               .long   CS4BCR
329 CS5BCR_A:               .long   CS5BCR
330 CS6BCR_A:               .long   CS6BCR
331 CS0WCR_A:               .long   CS0WCR
332 CS1WCR_A:               .long   CS1WCR
333 CS2WCR_A:               .long   CS2WCR
334 CS4WCR_A:               .long   CS4WCR
335 CS5WCR_A:               .long   CS5WCR
336 CS6WCR_A:               .long   CS6WCR
337 CS5PCR_A:               .long   CS5PCR
338 CS6PCR_A:               .long   CS6PCR
339
340 MMSELR_D:               .long   0xA5A50003
341 BCR_D:                  .long   0x00000000
342 CS0BCR_D:               .long   0x77777770
343 CS1BCR_D:               .long   0x77777670
344 CS2BCR_D:               .long   0x77777770
345 CS4BCR_D:               .long   0x77777770
346 CS5BCR_D:               .long   0x77777670
347 CS6BCR_D:               .long   0x77777770
348 CS0WCR_D:               .long   0x00020006
349 CS1WCR_D:               .long   0x00232304
350 CS2WCR_D:               .long   0x7777770F
351 CS4WCR_D:               .long   0x7777770F
352 CS5WCR_D:               .long   0x00101006
353 CS6WCR_D:               .long   0x77777703
354 CS5PCR_D:               .long   0x77000000
355 CS6PCR_D:               .long   0x77000000
356
357 REPEAT0_R3:             .long   0x00002000
358 REPEAT0_R1:             .long   0x0000200