blob: adad932316b0a03b60258a1f91112fbafd737b6a [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001/* SPDX-License-Identifier: GPL-2.0+ */
Nobuhiro Iwamatsu45befad2011-11-15 12:29:06 +09002/*
3 * Copyright (C) 2011 Renesas Solutions Corp.
4 * Copyright (C) 2011 Nobuhiro Iwamatsu <nobuhiro.Iwamatsu.yj@renesas.com>
5 *
6 * board/renesas/ecovec/lowlevel_init.S
Nobuhiro Iwamatsu45befad2011-11-15 12:29:06 +09007 */
8
9#include <config.h>
Nobuhiro Iwamatsu45befad2011-11-15 12:29:06 +090010#include <asm/processor.h>
11#include <asm/macro.h>
12#include <configs/ecovec.h>
13
14 .global lowlevel_init
15
16 .text
17 .align 2
18
19lowlevel_init:
20
Baruch Siach2dfd9612014-03-10 15:09:34 +020021 /* jump to CONFIG_ECOVEC_ROMIMAGE_ADDR if bit 1 of PVDR_A */
Nobuhiro Iwamatsu45befad2011-11-15 12:29:06 +090022 mov.l PVDR_A, r1
23 mov.l PVDR_D, r2
24 mov.b @r1, r0
25 tst r0, r2
26 bt 1f
27 mov.l JUMP_A, r1
28 jmp @r1
29 nop
30
311:
32 /* Disable watchdog */
33 write16 RWTCSR_A, RWTCSR_D
34
35 /* MMU Disable */
36 write32 MMUCR_A, MMUCR_D
37
38 /* Setup clocks */
39 write32 PLLCR_A, PLLCR_D
40 write32 FRQCRA_A, FRQCRA_D
41 write32 FRQCRB_A, FRQCRB_D
42
43 wait_timer TIMER_D
44
45 write32 MMSELR_A, MMSELR_D
46
47 /* Srtup BSC */
48 write32 CMNCR_A, CMNCR_D
49 write32 CS0BCR_A, CS0BCR_D
50 write32 CS0WCR_A, CS0WCR_D
51
52 wait_timer TIMER_D
53
54 /* Setup SDRAM */
55 write32 DBPDCNT0_A, DBPDCNT0_D0
56 write32 DBCONF_A, DBCONF_D
57 write32 DBTR0_A, DBTR0_D
58 write32 DBTR1_A, DBTR1_D
59 write32 DBTR2_A, DBTR2_D
60 write32 DBTR3_A, DBTR3_D
61 write32 DBKIND_A, DBKIND_D
62 write32 DBCKECNT_A, DBCKECNT_D
63
64 wait_timer TIMER_D
65
66 write32 DBCMDCNT_A, DBCMDCNT_D0
67 write32 DBMRCNT_A, DBMRCNT_D0
68 write32 DBMRCNT_A, DBMRCNT_D1
69 write32 DBMRCNT_A, DBMRCNT_D2
70 write32 DBMRCNT_A, DBMRCNT_D3
71 write32 DBCMDCNT_A, DBCMDCNT_D0
72 write32 DBCMDCNT_A, DBCMDCNT_D1
73 write32 DBCMDCNT_A, DBCMDCNT_D1
74 write32 DBMRCNT_A, DBMRCNT_D4
75 write32 DBMRCNT_A, DBMRCNT_D5
76 write32 DBMRCNT_A, DBMRCNT_D6
77
78 wait_timer TIMER_D
79
80 write32 DBEN_A, DBEN_D
81 write32 DBRFPDN1_A, DBRFPDN1_D
82 write32 DBRFPDN2_A, DBRFPDN2_D
83 write32 DBCMDCNT_A, DBCMDCNT_D0
84
85
86 /* Dummy read */
87 mov.l DUMMY_A ,r1
88 synco
89 mov.l @r1, r0
90 synco
91
92 mov.l SDRAM_A ,r1
93 synco
94 mov.l @r1, r0
95 synco
96 wait_timer TIMER_D
97
98 add #4, r1
99 synco
100 mov.l @r1, r0
101 synco
102 wait_timer TIMER_D
103
104 add #4, r1
105 synco
106 mov.l @r1, r0
107 synco
108 wait_timer TIMER_D
109
110 add #4, r1
111 synco
112 mov.l @r1, r0
113 synco
114 wait_timer TIMER_D
115
116 write32 DBCMDCNT_A, DBCMDCNT_D0
117 write32 DBCMDCNT_A, DBCMDCNT_D1
118 write32 DBPDCNT0_A, DBPDCNT0_D1
119 write32 DBRFPDN0_A, DBRFPDN0_D
120
121 wait_timer TIMER_D
122
123 write32 CCR_A, CCR_D
124
125 stc sr, r0
126 mov.l SR_MASK_D, r1
127 and r1, r0
128 ldc r0, sr
129
130 rts
131
132 .align 2
133
134PVDR_A: .long PVDR
135PVDR_D: .long 0x00000001
136JUMP_A: .long CONFIG_ECOVEC_ROMIMAGE_ADDR
137TIMER_D: .long 64
138RWTCSR_A: .long RWTCSR
139RWTCSR_D: .long 0x0000A507
140MMUCR_A: .long MMUCR
141MMUCR_D: .long 0x00000004
142PLLCR_A: .long PLLCR
143PLLCR_D: .long 0x00004000
144FRQCRA_A: .long FRQCRA
145FRQCRA_D: .long 0x8E003508
146FRQCRB_A: .long FRQCRB
147FRQCRB_D: .long 0x0
148MMSELR_A: .long MMSELR
149MMSELR_D: .long 0xA5A50000
150CMNCR_A: .long CMNCR
151CMNCR_D: .long 0x00000013
152CS0BCR_A: .long CS0BCR
153CS0BCR_D: .long 0x11110400
154CS0WCR_A: .long CS0WCR
155CS0WCR_D: .long 0x00000440
156DBPDCNT0_A: .long DBPDCNT0
157DBPDCNT0_D0: .long 0x00000181
158DBPDCNT0_D1: .long 0x00000080
159DBCONF_A: .long DBCONF
160DBCONF_D: .long 0x015B0002
161DBTR0_A: .long DBTR0
162DBTR0_D: .long 0x03061502
163DBTR1_A: .long DBTR1
164DBTR1_D: .long 0x02020102
165DBTR2_A: .long DBTR2
166DBTR2_D: .long 0x01090305
167DBTR3_A: .long DBTR3
168DBTR3_D: .long 0x00000002
169DBKIND_A: .long DBKIND
170DBKIND_D: .long 0x00000005
171DBCKECNT_A: .long DBCKECNT
172DBCKECNT_D: .long 0x00000001
173DBCMDCNT_A: .long DBCMDCNT
174DBCMDCNT_D0:.long 0x2
175DBCMDCNT_D1:.long 0x4
176DBMRCNT_A: .long DBMRCNT
177DBMRCNT_D0: .long 0x00020000
178DBMRCNT_D1: .long 0x00030000
179DBMRCNT_D2: .long 0x00010040
180DBMRCNT_D3: .long 0x00000532
181DBMRCNT_D4: .long 0x00000432
182DBMRCNT_D5: .long 0x000103C0
183DBMRCNT_D6: .long 0x00010040
184DBEN_A: .long DBEN
185DBEN_D: .long 0x01
186DBRFPDN0_A: .long DBRFPDN0
187DBRFPDN1_A: .long DBRFPDN1
188DBRFPDN2_A: .long DBRFPDN2
189DBRFPDN0_D: .long 0x00010000
190DBRFPDN1_D: .long 0x00000613
191DBRFPDN2_D: .long 0x238C003A
192SDRAM_A: .long 0xa8000000
193DUMMY_A: .long 0x0c400000
194CCR_A: .long CCR
195CCR_D: .long 0x0000090B
196SR_MASK_D: .long 0xEFFFFF0F