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