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#include <config.h>
26#include <version.h>
27#include <asm/arch/cpu.h>
28#include "origen_setup.h"
29
30
31
32
33
34
35
36
37_TEXT_BASE:
38 .word CONFIG_SYS_TEXT_BASE
39
40 .globl lowlevel_init
41lowlevel_init:
42 push {lr}
43
44
45 mov r5,
46 ldr r7, =EXYNOS4_GPIO_PART1_BASE
47 ldr r6, =EXYNOS4_GPIO_PART2_BASE
48
49
50 ldr r0, =(EXYNOS4_POWER_BASE + INFORM1_OFFSET)
51 ldr r1, [r0]
52
53
54 ldr r2, =S5P_CHECK_DIDLE
55 cmp r1, r2
56 beq exit_wakeup
57
58
59 ldr r2, =S5P_CHECK_LPA
60 cmp r1, r2
61 beq exit_wakeup
62
63
64 ldr r2, =S5P_CHECK_SLEEP
65 cmp r1, r2
66 beq wakeup_reset
67
68
69
70
71
72
73 ldr r0, =0x0ffffff
74 bic r1, pc, r0
75
76 ldr r2, _TEXT_BASE
77 bic r2, r2, r0
78 cmp r1, r2
79 beq 1f
80
81
82 bl system_clock_init
83
84
85 bl mem_ctrl_asm_init
86
871:
88
89 bl uart_asm_init
90 bl tzpc_init
91 pop {pc}
92
93wakeup_reset:
94 bl system_clock_init
95 bl mem_ctrl_asm_init
96 bl tzpc_init
97
98exit_wakeup:
99
100 ldr r0, =(EXYNOS4_POWER_BASE + INFORM0_OFFSET)
101
102
103 ldr r1, [r0]
104
105
106 mov pc, r1
107 nop
108 nop
109
110
111
112
113
114system_clock_init:
115 push {lr}
116 ldr r0, =EXYNOS4_CLOCK_BASE
117
118
119 ldr r1, =CLK_SRC_CPU_VAL
120 ldr r2, =CLK_SRC_CPU_OFFSET
121 str r1, [r0, r2]
122
123
124 mov r1,
1252: subs r1, r1,
126 bne 2b
127
128 ldr r1, =CLK_SRC_TOP0_VAL
129 ldr r2, =CLK_SRC_TOP0_OFFSET
130 str r1, [r0, r2]
131
132 ldr r1, =CLK_SRC_TOP1_VAL
133 ldr r2, =CLK_SRC_TOP1_OFFSET
134 str r1, [r0, r2]
135
136
137 ldr r1, =CLK_SRC_DMC_VAL
138 ldr r2, =CLK_SRC_DMC_OFFSET
139 str r1, [r0, r2]
140
141
142 ldr r1, =CLK_SRC_LEFTBUS_VAL
143 ldr r2, =CLK_SRC_LEFTBUS_OFFSET
144 str r1, [r0, r2]
145
146
147 ldr r1, =CLK_SRC_RIGHTBUS_VAL
148 ldr r2, =CLK_SRC_RIGHTBUS_OFFSET
149 str r1, [r0, r2]
150
151
152 ldr r1, =CLK_SRC_FSYS_VAL
153 ldr r2, =CLK_SRC_FSYS_OFFSET
154 str r1, [r0, r2]
155
156
157 ldr r1, =CLK_SRC_PERIL0_VAL
158 ldr r2, =CLK_SRC_PERIL0_OFFSET
159 str r1, [r0, r2]
160
161
162 ldr r1, =CLK_SRC_CAM_VAL
163 ldr r2, =CLK_SRC_CAM_OFFSET
164 str r1, [r0, r2]
165
166
167 ldr r1, =CLK_SRC_MFC_VAL
168 ldr r2, =CLK_SRC_MFC_OFFSET
169 str r1, [r0, r2]
170
171
172 ldr r1, =CLK_SRC_G3D_VAL
173 ldr r2, =CLK_SRC_G3D_OFFSET
174 str r1, [r0, r2]
175
176
177 ldr r1, =CLK_SRC_LCD0_VAL
178 ldr r2, =CLK_SRC_LCD0_OFFSET
179 str r1, [r0, r2]
180
181
182 mov r1,
1833: subs r1, r1,
184 bne 3b
185
186
187 ldr r1, =CLK_DIV_CPU0_VAL
188 ldr r2, =CLK_DIV_CPU0_OFFSET
189 str r1, [r0, r2]
190
191
192 ldr r1, =CLK_DIV_CPU1_VAL
193 ldr r2, =CLK_DIV_CPU1_OFFSET
194 str r1, [r0, r2]
195
196
197 ldr r1, =CLK_DIV_DMC0_VAL
198 ldr r2, =CLK_DIV_DMC0_OFFSET
199 str r1, [r0, r2]
200
201
202 ldr r1, =CLK_DIV_DMC1_VAL
203 ldr r2, =CLK_DIV_DMC1_OFFSET
204 str r1, [r0, r2]
205
206
207 ldr r1, =CLK_DIV_LEFTBUS_VAL
208 ldr r2, =CLK_DIV_LEFTBUS_OFFSET
209 str r1, [r0, r2]
210
211
212 ldr r1, =CLK_DIV_RIGHTBUS_VAL
213 ldr r2, =CLK_DIV_RIGHTBUS_OFFSET
214 str r1, [r0, r2]
215
216
217 ldr r1, =CLK_DIV_TOP_VAL
218 ldr r2, =CLK_DIV_TOP_OFFSET
219 str r1, [r0, r2]
220
221
222 ldr r1, =CLK_DIV_FSYS1_VAL
223 ldr r2, =CLK_DIV_FSYS1_OFFSET
224 str r1, [r0, r2]
225
226
227 ldr r1, =CLK_DIV_FSYS2_VAL
228 ldr r2, =CLK_DIV_FSYS2_OFFSET
229 str r1, [r0, r2]
230
231
232 ldr r1, =CLK_DIV_FSYS3_VAL
233 ldr r2, =CLK_DIV_FSYS3_OFFSET
234 str r1, [r0, r2]
235
236
237 ldr r1, =CLK_DIV_PERIL0_VAL
238 ldr r2, =CLK_DIV_PERIL0_OFFSET
239 str r1, [r0, r2]
240
241
242 ldr r1, =CLK_DIV_CAM_VAL
243 ldr r2, =CLK_DIV_CAM_OFFSET
244 str r1, [r0, r2]
245
246
247 ldr r1, =CLK_DIV_MFC_VAL
248 ldr r2, =CLK_DIV_MFC_OFFSET
249 str r1, [r0, r2]
250
251
252 ldr r1, =CLK_DIV_G3D_VAL
253 ldr r2, =CLK_DIV_G3D_OFFSET
254 str r1, [r0, r2]
255
256
257 ldr r1, =CLK_DIV_LCD0_VAL
258 ldr r2, =CLK_DIV_LCD0_OFFSET
259 str r1, [r0, r2]
260
261
262 ldr r1, =PLL_LOCKTIME
263 ldr r2, =APLL_LOCK_OFFSET
264 str r1, [r0, r2]
265
266 ldr r1, =PLL_LOCKTIME
267 ldr r2, =MPLL_LOCK_OFFSET
268 str r1, [r0, r2]
269
270 ldr r1, =PLL_LOCKTIME
271 ldr r2, =EPLL_LOCK_OFFSET
272 str r1, [r0, r2]
273
274 ldr r1, =PLL_LOCKTIME
275 ldr r2, =VPLL_LOCK_OFFSET
276 str r1, [r0, r2]
277
278
279 ldr r1, =APLL_CON1_VAL
280 ldr r2, =APLL_CON1_OFFSET
281 str r1, [r0, r2]
282
283
284 ldr r1, =APLL_CON0_VAL
285 ldr r2, =APLL_CON0_OFFSET
286 str r1, [r0, r2]
287
288
289 ldr r1, =MPLL_CON1_VAL
290 ldr r2, =MPLL_CON1_OFFSET
291 str r1, [r0, r2]
292
293
294 ldr r1, =MPLL_CON0_VAL
295 ldr r2, =MPLL_CON0_OFFSET
296 str r1, [r0, r2]
297
298
299 ldr r1, =EPLL_CON1_VAL
300 ldr r2, =EPLL_CON1_OFFSET
301 str r1, [r0, r2]
302
303
304 ldr r1, =EPLL_CON0_VAL
305 ldr r2, =EPLL_CON0_OFFSET
306 str r1, [r0, r2]
307
308
309 ldr r1, =VPLL_CON1_VAL
310 ldr r2, =VPLL_CON1_OFFSET
311 str r1, [r0, r2]
312
313
314 ldr r1, =VPLL_CON0_VAL
315 ldr r2, =VPLL_CON0_OFFSET
316 str r1, [r0, r2]
317
318
319 mov r1,
3204: subs r1, r1,
321 bne 4b
322
323 pop {pc}
324
325
326
327
328 .globl uart_asm_init
329uart_asm_init:
330
331
332 mov r0, r7
333 ldr r1, =EXYNOS4_GPIO_A0_CON_VAL
334 str r1, [r0,
335 ldr r1, =EXYNOS4_GPIO_A1_CON_VAL
336 str r1, [r0,
337
338 ldr r0, =EXYNOS4_UART_BASE
339 add r0, r0,
340
341 ldr r1, =ULCON_VAL
342 str r1, [r0,
343 ldr r1, =UCON_VAL
344 str r1, [r0,
345 ldr r1, =UFCON_VAL
346 str r1, [r0,
347 ldr r1, =UBRDIV_VAL
348 str r1, [r0,
349 ldr r1, =UFRACVAL_VAL
350 str r1, [r0,
351 mov pc, lr
352 nop
353 nop
354 nop
355
356
357tzpc_init:
358 ldr r0, =TZPC0_BASE
359 mov r1,
360 str r1, [r0]
361 mov r1,
362 str r1, [r0,
363 str r1, [r0,
364 str r1, [r0,
365 str r1, [r0,
366
367 ldr r0, =TZPC1_BASE
368 str r1, [r0,
369 str r1, [r0,
370 str r1, [r0,
371 str r1, [r0,
372
373 ldr r0, =TZPC2_BASE
374 str r1, [r0,
375 str r1, [r0,
376 str r1, [r0,
377 str r1, [r0,
378
379 ldr r0, =TZPC3_BASE
380 str r1, [r0,
381 str r1, [r0,
382 str r1, [r0,
383 str r1, [r0,
384
385 ldr r0, =TZPC4_BASE
386 str r1, [r0,
387 str r1, [r0,
388 str r1, [r0,
389 str r1, [r0,
390
391 ldr r0, =TZPC5_BASE
392 str r1, [r0,
393 str r1, [r0,
394 str r1, [r0,
395 str r1, [r0,
396
397 mov pc, lr
398