]> git.ipfire.org Git - people/ms/u-boot.git/blob - board/ti/omap730p2/lowlevel_init.S
Add GPL-2.0+ SPDX-License-Identifier to source files
[people/ms/u-boot.git] / board / ti / omap730p2 / lowlevel_init.S
1 /*
2 * Board specific setup info
3 *
4 * (C) Copyright 2003-2004
5 *
6 * Texas Instruments, <www.ti.com>
7 * Kshitij Gupta <Kshitij@ti.com>
8 *
9 * Modified for OMAP 1610 H2 board by Nishant Kamat, Jan 2004
10 *
11 * Modified for OMAP730 P2 Board by Dave Peverley, MPC-Data Limited
12 * (http://www.mpc-data.co.uk)
13 *
14 * TODO : Tidy up and change to use system register defines
15 * from omap730.h where possible.
16 *
17 * SPDX-License-Identifier: GPL-2.0+
18 */
19
20 #include <config.h>
21 #include <version.h>
22
23 #if defined(CONFIG_OMAP730)
24 #include <./configs/omap730.h>
25 #endif
26
27 _TEXT_BASE:
28 .word CONFIG_SYS_TEXT_BASE /* sdram load addr from config.mk */
29
30 .globl lowlevel_init
31 lowlevel_init:
32 /* Save callers address in r11 - r11 must never be modified */
33 mov r11, lr
34
35 /*------------------------------------------------------*
36 *mask all IRQs by setting all bits in the INTMR default*
37 *------------------------------------------------------*/
38 mov r1, #0xffffffff
39 ldr r0, =REG_IHL1_MIR
40 str r1, [r0]
41 ldr r0, =REG_IHL2_MIR
42 str r1, [r0]
43
44 /*------------------------------------------------------*
45 * Set up ARM CLM registers (IDLECT1) *
46 *------------------------------------------------------*/
47 ldr r0, REG_ARM_IDLECT1
48 ldr r1, VAL_ARM_IDLECT1
49 str r1, [r0]
50
51 /*------------------------------------------------------*
52 * Set up ARM CLM registers (IDLECT2) *
53 *------------------------------------------------------*/
54 ldr r0, REG_ARM_IDLECT2
55 ldr r1, VAL_ARM_IDLECT2
56 str r1, [r0]
57
58 /*------------------------------------------------------*
59 * Set up ARM CLM registers (IDLECT3) *
60 *------------------------------------------------------*/
61 ldr r0, REG_ARM_IDLECT3
62 ldr r1, VAL_ARM_IDLECT3
63 str r1, [r0]
64
65
66 mov r1, #0x01 /* PER_EN bit */
67 ldr r0, REG_ARM_RSTCT2
68 strh r1, [r0] /* CLKM; Peripheral reset. */
69
70 /* Set CLKM to Sync-Scalable */
71 /* I supposedly need to enable the dsp clock before switching */
72 mov r1, #0x1000
73 ldr r0, REG_ARM_SYSST
74 strh r1, [r0]
75 mov r0, #0x400
76 1:
77 subs r0, r0, #0x1 /* wait for any bubbles to finish */
78 bne 1b
79 ldr r1, VAL_ARM_CKCTL
80 ldr r0, REG_ARM_CKCTL
81 strh r1, [r0]
82
83 /* a few nops to let settle */
84 nop
85 nop
86 nop
87 nop
88 nop
89 nop
90 nop
91 nop
92 nop
93 nop
94
95 /* setup DPLL 1 */
96 /* Ramp up the clock to 96Mhz */
97 ldr r1, VAL_DPLL1_CTL
98 ldr r0, REG_DPLL1_CTL
99 strh r1, [r0]
100 ands r1, r1, #0x10 /* Check if PLL is enabled. */
101 beq lock_end /* Do not look for lock if BYPASS selected */
102 2:
103 ldrh r1, [r0]
104 ands r1, r1, #0x01 /* Check the LOCK bit.*/
105 beq 2b /* loop until bit goes hi. */
106 lock_end:
107
108 /*------------------------------------------------------*
109 * Turn off the watchdog during init... *
110 *------------------------------------------------------*/
111 ldr r0, REG_WATCHDOG
112 ldr r1, WATCHDOG_VAL1
113 str r1, [r0]
114 ldr r1, WATCHDOG_VAL2
115 str r1, [r0]
116 ldr r0, REG_WSPRDOG
117 ldr r1, WSPRDOG_VAL1
118 str r1, [r0]
119 ldr r0, REG_WWPSDOG
120
121 watch1Wait:
122 ldr r1, [r0]
123 tst r1, #0x10
124 bne watch1Wait
125
126 ldr r0, REG_WSPRDOG
127 ldr r1, WSPRDOG_VAL2
128 str r1, [r0]
129 ldr r0, REG_WWPSDOG
130 watch2Wait:
131 ldr r1, [r0]
132 tst r1, #0x10
133 bne watch2Wait
134
135 /* Set memory timings corresponding to the new clock speed */
136
137 /* Check execution location to determine current execution location
138 * and branch to appropriate initialization code.
139 */
140 /* Compare physical SDRAM base & current execution location. */
141 and r0, pc, #0xF0000000
142 /* Compare. */
143 cmp r0, #0
144 /* Skip over EMIF-fast initialization if running from SDRAM. */
145 bne skip_sdram
146
147 /*
148 * Delay for SDRAM initialization.
149 */
150 mov r3, #0x1800 /* value should be checked */
151 3:
152 subs r3, r3, #0x1 /* Decrement count */
153 bne 3b
154
155 ldr r0, REG_SDRAM_CONFIG
156 ldr r1, SDRAM_CONFIG_VAL
157 str r1, [r0]
158
159 ldr r0, REG_SDRAM_MRS_LEGACY
160 ldr r1, SDRAM_MRS_VAL
161 str r1, [r0]
162
163 skip_sdram:
164
165 common_tc:
166 /* slow interface */
167 ldr r1, VAL_TC_EMIFS_CS0_CONFIG
168 ldr r0, REG_TC_EMIFS_CS0_CONFIG
169 str r1, [r0] /* Chip Select 0 */
170
171 ldr r1, VAL_TC_EMIFS_CS1_CONFIG
172 ldr r0, REG_TC_EMIFS_CS1_CONFIG
173 str r1, [r0] /* Chip Select 1 */
174 ldr r1, VAL_TC_EMIFS_CS2_CONFIG
175 ldr r0, REG_TC_EMIFS_CS2_CONFIG
176 str r1, [r0] /* Chip Select 2 */
177 ldr r1, VAL_TC_EMIFS_CS3_CONFIG
178 ldr r0, REG_TC_EMIFS_CS3_CONFIG
179 str r1, [r0] /* Chip Select 3 */
180
181 /* 48MHz clock request for UART1 */
182 ldr r1, PERSEUS2_CONFIG_BASE
183 ldrh r0, [r1, #CONFIG_PCC_CONF]
184 orr r0, r0, #CONF_MOD_UART1_CLK_MODE_R
185 strh r0, [r1, #CONFIG_PCC_CONF]
186
187 /* Initialize public and private rheas
188 * - set access factor 2 on both rhea / strobe
189 * - disable write buffer on strb0, enable write buffer on strb1
190 */
191
192 ldr R0, REG_RHEA_PUB_CTL
193 ldr R1, REG_RHEA_PRIV_CTL
194 ldr R2, VAL_RHEA_CTL
195 strh R2, [R0]
196 strh R2, [R1]
197 mov R3, #2 /* disable write buffer on strb0, enable write buffer on strb1 */
198 strh R3, [R0, #0x08] /* arm rhea control reg */
199 strh R3, [R1, #0x08]
200
201 /* enable IRQ and FIQ */
202
203 mrs r4, CPSR
204 bic r4, r4, #IRQ_MASK
205 bic r4, r4, #FIQ_MASK
206 msr CPSR, r4
207
208 /* set TAP CONF to TRI EMULATION */
209
210 ldr r1, [r0, #CONFIG_MODE2]
211 bic r1, r1, #0x18
212 orr r1, r1, #0x10
213 str r1, [r0, #CONFIG_MODE2]
214
215 /* set tdbgen to 1 */
216
217 ldr r0, PERSEUS2_CONFIG_BASE
218 ldr r1, [r0, #CONFIG_MODE1]
219 mov r2, #0x10000
220 orr r1, r1, r2
221 str r1, [r0, #CONFIG_MODE1]
222
223 #ifdef CONFIG_P2_OMAP1610
224 /* inserting additional 2 clock cycle hold time for LAN */
225 ldr r0, REG_TC_EMIFS_CS1_ADVANCED
226 ldr r1, VAL_TC_EMIFS_CS1_ADVANCED
227 str r1, [r0]
228 #endif
229 /* Start MPU Timer 1 */
230 ldr r0, REG_MPU_LOAD_TIMER
231 ldr r1, VAL_MPU_LOAD_TIMER
232 str r1, [r0]
233
234 ldr r0, REG_MPU_CNTL_TIMER
235 ldr r1, VAL_MPU_CNTL_TIMER
236 str r1, [r0]
237
238 /* back to arch calling code */
239 mov pc, r11
240
241 /* the literal pools origin */
242 .ltorg
243
244 REG_TC_EMIFS_CONFIG: /* 32 bits */
245 .word 0xfffecc0c
246 REG_TC_EMIFS_CS0_CONFIG: /* 32 bits */
247 .word 0xfffecc10
248 REG_TC_EMIFS_CS1_CONFIG: /* 32 bits */
249 .word 0xfffecc14
250 REG_TC_EMIFS_CS2_CONFIG: /* 32 bits */
251 .word 0xfffecc18
252 REG_TC_EMIFS_CS3_CONFIG: /* 32 bits */
253 .word 0xfffecc1c
254
255 #ifdef CONFIG_P2_OMAP730
256 REG_TC_EMIFS_CS1_ADVANCED: /* 32 bits */
257 .word 0xfffecc54
258 #endif
259
260 /* MPU clock/reset/power mode control registers */
261 REG_ARM_CKCTL: /* 16 bits */
262 .word 0xfffece00
263
264 REG_ARM_IDLECT3: /* 16 bits */
265 .word 0xfffece24
266 REG_ARM_IDLECT2: /* 16 bits */
267 .word 0xfffece08
268 REG_ARM_IDLECT1: /* 16 bits */
269 .word 0xfffece04
270
271 REG_ARM_RSTCT2: /* 16 bits */
272 .word 0xfffece14
273 REG_ARM_SYSST: /* 16 bits */
274 .word 0xfffece18
275 /* DPLL control registers */
276 REG_DPLL1_CTL: /* 16 bits */
277 .word 0xfffecf00
278
279 /* Watch Dog register */
280 /* secure watchdog stop */
281 REG_WSPRDOG:
282 .word 0xfffeb048
283 /* watchdog write pending */
284 REG_WWPSDOG:
285 .word 0xfffeb034
286
287 WSPRDOG_VAL1:
288 .word 0x0000aaaa
289 WSPRDOG_VAL2:
290 .word 0x00005555
291
292 /* SDRAM config is: auto refresh enabled, 16 bit 4 bank,
293 counter @8192 rows, 10 ns, 8 burst */
294 REG_SDRAM_CONFIG:
295 .word 0xfffecc20
296
297 REG_SDRAM_MRS_LEGACY:
298 .word 0xfffecc24
299
300 REG_WATCHDOG:
301 .word 0xfffec808
302
303 REG_MPU_LOAD_TIMER:
304 .word 0xfffec504
305 REG_MPU_CNTL_TIMER:
306 .word 0xfffec500
307
308 /* Public and private rhea bridge registers definition */
309
310 REG_RHEA_PUB_CTL:
311 .word 0xFFFECA00
312
313 REG_RHEA_PRIV_CTL:
314 .word 0xFFFED300
315
316 /* EMIFF SDRAM Configuration register
317 - self refresh disable
318 - auto refresh enabled
319 - SDRAM type 64 Mb, 16 bits bus 4 banks
320 - power down enabled
321 - SDRAM clock disabled
322 */
323 SDRAM_CONFIG_VAL:
324 .word 0x0C017DF4
325
326 /* Burst full page length ; cas latency = 3 */
327 SDRAM_MRS_VAL:
328 .word 0x00000037
329
330 VAL_ARM_CKCTL:
331 .word 0x6505
332 VAL_DPLL1_CTL:
333 .word 0x3412
334
335 #ifdef CONFIG_P2_OMAP730
336 VAL_TC_EMIFS_CS0_CONFIG:
337 .word 0x0000FFF3
338 VAL_TC_EMIFS_CS1_CONFIG:
339 .word 0x00004278
340 VAL_TC_EMIFS_CS2_CONFIG:
341 .word 0x00004278
342 VAL_TC_EMIFS_CS3_CONFIG:
343 .word 0x00004278
344 VAL_TC_EMIFS_CS1_ADVANCED:
345 .word 0x00000022
346 #endif
347
348 VAL_ARM_IDLECT1:
349 .word 0x00000400
350 VAL_ARM_IDLECT2:
351 .word 0x00000886
352 VAL_ARM_IDLECT3:
353 .word 0x00000015
354
355 WATCHDOG_VAL1:
356 .word 0x000000f5
357 WATCHDOG_VAL2:
358 .word 0x000000a0
359
360 VAL_MPU_LOAD_TIMER:
361 .word 0xffffffff
362 VAL_MPU_CNTL_TIMER:
363 .word 0xffffffa1
364
365 VAL_RHEA_CTL:
366 .word 0xFF22
367
368 /* Config Register vals */
369 PERSEUS2_CONFIG_BASE:
370 .word 0xFFFE1000
371
372 .equ CONFIG_PCC_CONF, 0xB4
373 .equ CONFIG_MODE1, 0x10
374 .equ CONFIG_MODE2, 0x14
375 .equ CONF_MOD_UART1_CLK_MODE_R, 0x0A
376
377 /* misc values */
378 .equ IRQ_MASK, 0x80 /* IRQ mask value */
379 .equ FIQ_MASK, 0x40 /* FIQ mask value */