summaryrefslogtreecommitdiffstats
path: root/board/espt/lowlevel_init.S
blob: ec9fb883f5ae00f8a7309c7876df8b89a0dbe61f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
/*
 * Copyright (C) 2009 Renesas Solutions Corp.
 * Copyright (C) 2009 Nobuhiro Iwamatsu <iwamatsu.nobuhiro@renesas.com>
 *
 * board/espt/lowlevel_init.S
 *
 * SPDX-License-Identifier:	GPL-2.0+
 */

#include <config.h>
#include <asm/processor.h>
#include <asm/macro.h>

	.global	lowlevel_init

	.text
	.align	2

lowlevel_init:

	write32 WDTCSR_A, WDTCSR_D

	write32 WDTST_A, WDTST_D

	write32 WDTBST_A, WDTBST_D

	write32 CCR_A, CCR_CACHE_ICI_D

	write32 MMUCR_A, MMU_CONTROL_TI_D

	write32 MSTPCR0_A, MSTPCR0_D

	write32 MSTPCR1_A, MSTPCR1_D

	write32 RAMCR_A, RAMCR_D

	/*
	 * Setting infomation from
	 * original ESPT-GIGA bootloader register
	 */
	write32 MMSEL_A, MMSEL_D

	/* dummy */
	mov.l   @r1, r2
	mov.l   @r1, r2
	synco

    write32 BCR_A, BCR_D

    write32 CS0BCR_A, CS0BCR_D

    write32 CS0WCR_A, CS0WCR_D

	/*
	 * DDR-SDRAM setting
	 */

	/* set DDR-SDRAM dummy read */
	write32 MMSEL_A, MMSEL_D

	write32 MMSEL_A, CS0_A

	/* set DDR-SDRAM bus/endian etc */
	write32 MIM_U_A, MIM_U_D

	write32 MIM_L_A, MIM_L_D0

	write32 SDR_L_A, SDR_L_A_D0

	write32 STR_L_A, STR_L_A_D0

	/* DDR-SDRAM access control */
	write32 MIM_L_A, MIM_L_D1

	write32 SCR_L_A, SCR_L_A_D0

	write32 SCR_L_A, SCR_L_A_D1

	write32 EMRS_A, EMRS_D

	write32 MRS1_A, MRS1_D

	write32 MIM_U_A, MIM_U_D

	write32 MIM_L_A, MIM_L_A_D2

	write32 SCR_L_A, SCR_L_A_D2

	write32 SCR_L_A, SCR_L_A_D2

	write32 MRS2_A, MRS2_D

	/* wait 200us */
	wait_timer REPEAT_R3

	/* GPIO setting */
	write16 PSEL0_A, PSEL0_D

	write16 PSEL1_A, PSEL1_D

	write16 PSEL2_A, PSEL2_D

	write16 PSEL3_A, PSEL3_D

	write16 PSEL4_A, PSEL4_D

	write8 PADR_A, PADR_D

	write16 PACR_A, PACR_D

	write8 PBDR_A, PBDR_D

	write16 PBCR_A, PBCR_D

	write8 PCDR_A, PCDR_D

	write16 PCCR_A, PCCR_D

	write8	PDDR_A, PDDR_D

	write16 PDCR_A, PDCR_D

	write16 PECR_A, PECR_D

	write16 PFCR_A, PFCR_D

	write16 PGCR_A, PGCR_D

	write16 PHCR_A, PHCR_D

	write16 PICR_A, PICR_D

	write8 PJDR_A, PJDR_D

	write16 PJCR_A, PJCR_D

	/* wait 50us */
	wait_timer REPEAT_R3

	write8 PKDR_A, PKDR_D

	write16 PKCR_A, PKCR_D

	write16 PLCR_A, PLCR_D

	write16 PMCR_A, PMCR_D

	write16 PNCR_A, PNCR_D

	write16 POCR_A, POCR_D


	/* ICR0 ,ICR1 */
	write32 ICR0_A, ICR0_D

	write32 ICR1_A, ICR1_D

	/* USB Host */
	write32 USB_USBHSC_A, USB_USBHSC_D

	write32 CCR_A, CCR_CACHE_D_2

	rts
	nop

	.align	2

/* GPIO Crontrol Register */
PACR_A:	.long	0xFFEF0000
PBCR_A:	.long	0xFFEF0002
PCCR_A:	.long	0xFFEF0004
PDCR_A:	.long	0xFFEF0006
PECR_A:	.long	0xFFEF0008
PFCR_A:	.long	0xFFEF000A
PGCR_A:	.long	0xFFEF000C
PHCR_A:	.long	0xFFEF000E
PICR_A:	.long	0xFFEF0010
PJCR_A:	.long	0xFFEF0012
PKCR_A:	.long	0xFFEF0014
PLCR_A:	.long	0xFFEF0016
PMCR_A:	.long	0xFFEF0018
PNCR_A:	.long	0xFFEF001A
POCR_A:	.long	0xFFEF001C

/* GPIO Data Register */
PADR_A:	.long	0xFFEF0020
PBDR_A:	.long	0xFFEF0022
PCDR_A:	.long	0xFFEF0024
PDDR_A:	.long	0xFFEF0026
PJDR_A:	.long	0xFFEF0032
PKDR_A:	.long	0xFFEF0034

/* GPIO Set data */
PADR_D:	.long	0x00000000
PACR_D:	.word 	0x1400
.align 2
PBDR_D:	.long	0x00000000
PBCR_D:	.word	0x555A
.align 2
PCDR_D:	.long	0x00000000
PCCR_D:	.word	0x5555
.align 2
PDDR_D:	.long	0x00000000
PDCR_D:	.word	0x0155
PECR_D:	.word	0x0000
PFCR_D:	.word	0x0000
PGCR_D:	.word	0x0000
PHCR_D:	.word	0x0000
PICR_D:	.word	0x0800
PJDR_D:	.long	0x00000006
PJCR_D:	.word	0x5A57
.align 2
PKDR_D:	.long	0x00000000
PKCR_D:	.word	0xFFF9
.align 2
PLCR_D:	.word 	0xC330
PMCR_D:	.word	0xFFFF
PNCR_D:	.word	0x0242
POCR_D:	.word	0x0000

/* Pin Select */
PSEL0_A:	.long	0xFFEF0070
PSEL1_A:	.long	0xFFEF0072
PSEL2_A:	.long	0xFFEF0074
PSEL3_A:	.long	0xFFEF0076
PSEL4_A:	.long	0xFFEF0078
PSEL0_D:	.word	0x0001
PSEL1_D:	.word	0x2400
PSEL2_D:	.word	0x0000
PSEL3_D:	.word	0x2421
PSEL4_D:	.word	0x0000
.align 2

MMSEL_A:	.long	0xFE600020
BCR_A:		.long	0xFF801000
CS0BCR_A:	.long	0xFF802000
CS0WCR_A:	.long	0xFF802008
ICR0_A:		.long	0xFFD00000
ICR1_A:		.long	0xFFD0001C

MMSEL_D:	.long	0xA5A50000
BCR_D:		.long	0x05000000
CS0BCR_D:	.long	0x232306F0
CS0WCR_D:	.long	0x00011104
ICR0_D:		.long	0x80C00000
ICR1_D:		.long	0x00020000

/* RWBT Address */
WDTST_A:	.long	0xFFCC0000
WDTCSR_A:	.long	0xFFCC0004
WDTBST_A:	.long	0xFFCC0008
/* RWBT Data */
WDTST_D:	.long	0x5A000FFF
WDTCSR_D:	.long	0xA5000000
WDTBST_D:	.long	0x55000000

/* Cache Address */
CCR_A:		.long	0xFF00001C
MMUCR_A:	.long	0xFF000010
RAMCR_A:	.long	0xFF000074

/* Cache Data */
CCR_CACHE_ICI_D:.long	0x00000800
CCR_CACHE_D_2:	.long	0x00000103
MMU_CONTROL_TI_D:.long	0x00000004
RAMCR_D:	.long	0x00000200

/* Low power mode control Address */
MSTPCR0_A:	.long	0xFFC80030
MSTPCR1_A:	.long	0xFFC80038
/* Low power mode control Data */
MSTPCR0_D:	.long	0x00000000
MSTPCR1_D:	.long	0x00000000

REPEAT0_R3:	.long	0x00002000
REPEAT_R3:	.long	0x00000200
CS0_A:		.long	0xA8000000

MIM_U_A:	.long	0xFE800008
MIM_L_A:	.long	0xFE80000C
SCR_U_A:	.long	0xFE800010
SCR_L_A:	.long	0xFE800014
STR_U_A:	.long	0xFE800018
STR_L_A:	.long	0xFE80001C
SDR_U_A:	.long	0xFE800030
SDR_L_A:	.long	0xFE800034
EMRS_A:		.long	0xFE902000
MRS1_A:		.long	0xFE900B08
MRS2_A:		.long	0xFE900308

MIM_U_D:	.long	0x00000000
MIM_L_D0:	.long	0x04100008
MIM_L_D1:	.long	0x02EE0009
MIM_L_D2:	.long	0x02EE0209

SDR_L_A_D0:	.long	0x00000300
STR_L_A_D0:	.long	0x00010040
MIM_L_A_D1:	.long	0x04100009
SCR_L_A_D0:	.long 	0x00000003
SCR_L_A_D1:	.long 	0x00000002
MIM_L_A_D2:	.long	0x04100209
SCR_L_A_D2:	.long	0x00000004

SCR_L_NORMAL:	.long	0x00000000
SCR_L_NOP:		.long	0x00000001
SCR_L_PALL:		.long	0x00000002
SCR_L_CKE_EN:	.long	0x00000003
SCR_L_CBR:		.long	0x00000004

STR_L_D:	.long	0x000F3980
SDR_L_D:	.long	0x00000400
EMRS_D:		.long	0x00000000
MRS1_D:		.long	0x00000000
MRS2_D:		.long	0x00000000

/* USB */
USB_USBHSC_A:	.long	0xFFEC80F0
USB_USBHSC_D:	.long	0x00000000
OpenPOWER on IntegriCloud