]> git.sur5r.net Git - u-boot/blob - board/freescale/mx35pdk/lowlevel_init.S
SPDX: Convert all of our single license tags to Linux Kernel style
[u-boot] / board / freescale / mx35pdk / lowlevel_init.S
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * Copyright (C) 2007, Guennadi Liakhovetski <lg@denx.de>
4  *
5  * (C) Copyright 2008-2010 Freescale Semiconductor, Inc.
6  */
7
8 #include <config.h>
9 #include <asm/arch/imx-regs.h>
10 #include <generated/asm-offsets.h>
11 #include "mx35pdk.h"
12 #include <asm/arch/lowlevel_macro.S>
13
14 /*
15  * return soc version
16  *      0x10:  TO1
17  *      0x20:  TO2
18  *      0x30:  TO3
19  */
20 .macro check_soc_version ret, tmp
21         ldr \tmp, =IIM_BASE_ADDR
22         ldr \ret, [\tmp, #IIM_SREV]
23         cmp \ret, #0x00
24         moveq \tmp, #ROMPATCH_REV
25         ldreq \ret, [\tmp]
26         moveq \ret, \ret, lsl #4
27         addne \ret, \ret, #0x10
28 .endm
29
30 /* CPLD on CS5 setup */
31 .macro init_debug_board
32         ldr r0, =DBG_BASE_ADDR
33         ldr r1, =DBG_CSCR_U_CONFIG
34         str r1, [r0, #0x00]
35         ldr r1, =DBG_CSCR_L_CONFIG
36         str r1, [r0, #0x04]
37         ldr r1, =DBG_CSCR_A_CONFIG
38         str r1, [r0, #0x08]
39 .endm
40
41 /* clock setup */
42 .macro init_clock
43         ldr r0, =CCM_BASE_ADDR
44
45         /* default CLKO to 1/32 of the ARM core*/
46         ldr r1, [r0, #CLKCTL_COSR]
47         bic r1, r1, #0x00000FF00
48         bic r1, r1, #0x0000000FF
49         mov r2, #0x00006C00
50         add r2, r2, #0x67
51         orr r1, r1, r2
52         str r1, [r0, #CLKCTL_COSR]
53
54         ldr r2, =CCM_CCMR_CONFIG
55         str r2, [r0, #CLKCTL_CCMR]
56
57         check_soc_version r1, r2
58         cmp r1, #CHIP_REV_2_0
59         ldrhs r3, =CCM_MPLL_532_HZ
60         bhs 1f
61         ldr r2, [r0, #CLKCTL_PDR0]
62         tst r2, #CLKMODE_CONSUMER
63         ldrne r3, =CCM_MPLL_532_HZ  /* consumer path*/
64         ldreq r3, =CCM_MPLL_399_HZ  /* auto path*/
65 1:
66         str r3, [r0, #CLKCTL_MPCTL]
67
68         ldr r1, =CCM_PPLL_300_HZ
69         str r1, [r0, #CLKCTL_PPCTL]
70
71         ldr r1, =CCM_PDR0_CONFIG
72         bic r1, r1, #0x800000
73         str r1, [r0, #CLKCTL_PDR0]
74
75         ldr r1, [r0, #CLKCTL_CGR0]
76         orr r1, r1, #0x0C300000
77         str r1, [r0, #CLKCTL_CGR0]
78
79         ldr r1, [r0, #CLKCTL_CGR1]
80         orr r1, r1, #0x00000C00
81         orr r1, r1, #0x00000003
82         str r1, [r0, #CLKCTL_CGR1]
83
84         ldr r1, [r0, #CLKCTL_CGR2]
85         orr r1, r1, #0x00C00000
86         str r1, [r0, #CLKCTL_CGR2]
87 .endm
88
89 .macro setup_sdram
90         ldr r0, =ESDCTL_BASE_ADDR
91         mov r3, #0x2000
92         str r3, [r0, #0x0]
93         str r3, [r0, #0x8]
94
95         /*ip(r12) has used to save lr register in upper calling*/
96         mov fp, lr
97
98         mov r5, #0x00
99         mov r2, #0x00
100         mov r1, #CSD0_BASE_ADDR
101         bl setup_sdram_bank
102
103         mov r5, #0x00
104         mov r2, #0x00
105         mov r1, #CSD1_BASE_ADDR
106         bl setup_sdram_bank
107
108         mov lr, fp
109
110 1:
111         ldr r3, =ESDCTL_DELAY_LINE5
112         str r3, [r0, #0x30]
113 .endm
114
115 .globl lowlevel_init
116 lowlevel_init:
117         mov r10, lr
118
119         core_init
120
121         init_aips
122
123         init_max
124
125         init_m3if
126
127         init_clock
128         init_debug_board
129
130         cmp pc, #PHYS_SDRAM_1
131         blo init_sdram_start
132         cmp pc, #(PHYS_SDRAM_1 + PHYS_SDRAM_1_SIZE)
133         blo skip_sdram_setup
134
135 init_sdram_start:
136         /*init_sdram*/
137         setup_sdram
138
139 skip_sdram_setup:
140         mov lr, r10
141         mov pc, lr
142
143
144 /*
145  * r0: ESDCTL control base, r1: sdram slot base
146  * r2: DDR type(0:DDR2, 1:MDDR) r3, r4:working base
147  */
148 setup_sdram_bank:
149         mov r3, #0xE
150         tst r2, #0x1
151         orreq r3, r3, #0x300 /*DDR2*/
152         str r3, [r0, #0x10]
153         bic r3, r3, #0x00A
154         str r3, [r0, #0x10]
155         beq 2f
156
157         mov r3, #0x20000
158 1:      subs r3, r3, #1
159         bne 1b
160
161 2:      tst r2, #0x1
162         ldreq r3, =ESDCTL_DDR2_CONFIG
163         ldrne r3, =ESDCTL_MDDR_CONFIG
164         cmp r1, #CSD1_BASE_ADDR
165         strlo r3, [r0, #0x4]
166         strhs r3, [r0, #0xC]
167
168         ldr r3, =ESDCTL_0x92220000
169         strlo r3, [r0, #0x0]
170         strhs r3, [r0, #0x8]
171         mov r3, #0xDA
172         ldr r4, =ESDCTL_PRECHARGE
173         strb r3, [r1, r4]
174
175         tst r2, #0x1
176         bne skip_set_mode
177
178         cmp r1, #CSD1_BASE_ADDR
179         ldr r3, =ESDCTL_0xB2220000
180         strlo r3, [r0, #0x0]
181         strhs r3, [r0, #0x8]
182         mov r3, #0xDA
183         ldr r4, =ESDCTL_DDR2_EMR2
184         strb r3, [r1, r4]
185         ldr r4, =ESDCTL_DDR2_EMR3
186         strb r3, [r1, r4]
187         ldr r4, =ESDCTL_DDR2_EN_DLL
188         strb r3, [r1, r4]
189         ldr r4, =ESDCTL_DDR2_RESET_DLL
190         strb r3, [r1, r4]
191
192         ldr r3, =ESDCTL_0x92220000
193         strlo r3, [r0, #0x0]
194         strhs r3, [r0, #0x8]
195         mov r3, #0xDA
196         ldr r4, =ESDCTL_PRECHARGE
197         strb r3, [r1, r4]
198
199 skip_set_mode:
200         cmp r1, #CSD1_BASE_ADDR
201         ldr r3, =ESDCTL_0xA2220000
202         strlo r3, [r0, #0x0]
203         strhs r3, [r0, #0x8]
204         mov r3, #0xDA
205         strb r3, [r1]
206         strb r3, [r1]
207
208         ldr r3, =ESDCTL_0xB2220000
209         strlo r3, [r0, #0x0]
210         strhs r3, [r0, #0x8]
211         tst r2, #0x1
212         ldreq r4, =ESDCTL_DDR2_MR
213         ldrne r4, =ESDCTL_MDDR_MR
214         mov r3, #0xDA
215         strb r3, [r1, r4]
216         ldreq r4, =ESDCTL_DDR2_OCD_DEFAULT
217         streqb r3, [r1, r4]
218         ldreq r4, =ESDCTL_DDR2_EN_DLL
219         ldrne r4, =ESDCTL_MDDR_EMR
220         strb r3, [r1, r4]
221
222         cmp r1, #CSD1_BASE_ADDR
223         ldr r3, =ESDCTL_0x82228080
224         strlo r3, [r0, #0x0]
225         strhs r3, [r0, #0x8]
226
227         tst r2, #0x1
228         moveq r4, #0x20000
229         movne r4, #0x200
230 1:      subs r4, r4, #1
231         bne 1b
232
233         str r3, [r1, #0x100]
234         ldr r4, [r1, #0x100]
235         cmp r3, r4
236         movne r3, #1
237         moveq r3, #0
238
239         mov pc, lr