hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
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