]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - patches/0130-ENGR00124954-MX50-init-sys-by-ROM-plug-in-feature.patch
imported Ka-Ro specific additions to U-Boot 2009.08 for TX28
[karo-tx-uboot.git] / patches / 0130-ENGR00124954-MX50-init-sys-by-ROM-plug-in-feature.patch
1 From 06397921bf3d9cf8cf56ccdffab5397867dce1d1 Mon Sep 17 00:00:00 2001
2 From: Jason Liu <r64343@freescale.com>
3 Date: Thu, 8 Jul 2010 02:57:44 +0800
4 Subject: [PATCH] ENGR00124954 MX50: init sys by ROM plug-in feature
5
6 Use ROM plug-in feature to init DDR and re-config PLL1 to
7 800Mhz due to ROM set it to 799Mhz. Plug-in has the following benifit
8 from ROM team comments,
9 1. DCD size limitation issue, plugin can be the size of OCRAM
10    free space region which is 72KB.
11 2. Safe environment to re-configure PLL1 (without impacting SDRAM)
12    as the plugin runs from OCRAM. This could get around the issue
13    of some boards running with ARM @ 192MHz due to the incorrect
14    GPIO configuration for Low Power Boot.
15 3. Ability to have one bootloader binary for both LPDDR1 & LPDDR2 platforms.
16
17 Signed-off-by: Jason Liu <r64343@freescale.com>
18 ---
19  board/freescale/mx50_arm2/flash_header.S | 1059 +++++++++++++++++++++---------
20  1 files changed, 752 insertions(+), 307 deletions(-)
21
22 diff --git a/board/freescale/mx50_arm2/flash_header.S b/board/freescale/mx50_arm2/flash_header.S
23 index aa246df..fbab4f5 100644
24 --- a/board/freescale/mx50_arm2/flash_header.S
25 +++ b/board/freescale/mx50_arm2/flash_header.S
26 @@ -25,322 +25,767 @@
27  # error "Must define the offset of flash header"
28  #endif
29  
30 -#define CPU_2_BE_32(l) \
31 -       ((((l) & 0x000000FF) << 24) | \
32 -       (((l) & 0x0000FF00) << 8)  | \
33 -       (((l) & 0x00FF0000) >> 8)  | \
34 -       (((l) & 0xFF000000) >> 24))
35 -
36 -#define MXC_DCD_ITEM(i, addr, val)   \
37 -dcd_node_##i:                        \
38 -        .word CPU_2_BE_32(addr) ;     \
39 -        .word CPU_2_BE_32(val)  ;     \
40 -
41 -#define DCDGEN_CHECKDATA(i,addr,mask,count) \
42 -dcd_chkdata_##i:                         ; \
43 -        .word CPU_2_BE_32(addr)                ;\
44 -       .word CPU_2_BE_32(mask)                ;\
45 -       .word CPU_2_BE_32(count)                ;\
46 -
47  .section ".text.flasheader", "x"
48         b       _start
49         .org    CONFIG_FLASH_HEADER_OFFSET
50 -ivt_header:       .word 0x402000D1 /* Tag=0xD1, Len=0x0020, Ver=0x40 */
51 -app_code_jump_v:  .word _start
52 -reserv1:          .word 0x0
53 -dcd_ptr:          .word dcd_hdr
54 -boot_data_ptr:   .word boot_data
55 -self_ptr:         .word ivt_header
56 -app_code_csf:     .word 0x0
57 -reserv2:          .word 0x0
58 -
59 -boot_data:        .word TEXT_BASE
60 -image_len:        .word _end - TEXT_BASE
61 -plugin:           .word 0x0
62  
63 -#if defined(CONFIG_LPDDR2)
64 +/* First IVT to copy the plugin that initializes the system into OCRAM */
65 +ivt_header:        .long 0x402000D1    /* Tag=0xD1, Len=0x0020, Ver=0x40 */
66 +app_code_jump_v:   .long 0xF8006458    /* Plugin entry point */
67 +reserv1:           .long 0x0
68 +dcd_ptr:           .long 0x0
69 +boot_data_ptr:     .long 0xF8006420
70 +self_ptr:          .long 0xF8006400
71 +app_code_csf:      .long 0x0          /* reserve 4K for csf */
72 +reserv2:           .long 0x0
73 +boot_data:         .long 0xF8006000
74 +image_len:         .long 8*1024        /* Can copy upto 72K, OCRAM free space */
75 +plugin:            .long 0x1          /* Enable plugin flag */
76 +
77 +/* Second IVT to give entry point into the bootloader copied to DDR */
78 +ivt2_header:       .long 0x402000D1    //Tag=0xD1, Len=0x0020, Ver=0x40
79 +app2_code_jump_v:  .long _start   // Entry point for the bootloader
80 +reserv3:           .long 0x0
81 +dcd2_ptr:          .long 0x0
82 +boot_data2_ptr:    .long boot_data2
83 +self_ptr2:         .long ivt2_header
84 +app_code_csf2:     .long 0x0 // reserve 4K for csf
85 +reserv4:           .long 0x0
86 +boot_data2:        .long TEXT_BASE
87 +image_len2:        .long _end - TEXT_BASE
88 +plugin2:           .long 0x0
89 +
90 +/*=============================================================================
91 + * Here starts the plugin code
92 + *===========================================================================*/
93 +
94 +plugin_start:
95 +/* Save the return address and the function arguments */
96 +       push    {r0-r2, lr}
97 +
98 +/*=============================================================================
99 + *init script for codex LPDDR1-200MHz CPU board
100 + *===========================================================================*/
101 +
102 +/* Setup PLL1 to be 800 MHz */
103 +       ldr r0, =CCM_BASE_ADDR
104 +
105 +/* Switch ARM domain to be clocked from LP-APM */
106 +       mov r1, #0x4
107 +       str r1, [r0, #CLKCTL_CCSR]
108 +
109 +       ldr r0, =PLL1_BASE_ADDR
110 +       ldr r1, =0x1232
111 +       str r1, [r0, #PLL_DP_CTL]     /* Set DPLL ON (set UPEN bit); BRMO=1 */
112 +       ldr r1, =0x2
113 +       str r1, [r0, #PLL_DP_CONFIG]  /* Enable auto-restart AREN bit */
114 +
115 +       ldr r1, =DP_OP_800
116 +       str r1, [r0, #PLL_DP_OP]
117 +       str r1, [r0, #PLL_DP_HFS_OP]
118 +
119 +       ldr r1, =DP_MFD_800
120 +       str r1, [r0, #PLL_DP_MFD]
121 +       str r1, [r0, #PLL_DP_HFS_MFD]
122 +
123 +       ldr r1, =DP_MFN_800
124 +       str r1, [r0, #PLL_DP_MFN]
125 +       str r1, [r0, #PLL_DP_HFS_MFN]
126 +
127 +       /* Now restart PLL */
128 +       ldr r1, =0x1232
129 +       str r1, [r0, #PLL_DP_CTL]
130 +wait_pll1_lock:
131 +       ldr r1, [r0, #PLL_DP_CTL]
132 +       ands r1, r1, #0x1
133 +       beq wait_pll1_lock
134 +
135 +/* Switch ARM back to PLL1 */
136 +       ldr r0, =CCM_BASE_ADDR
137 +       ldr r1, =0x0
138 +       str r1, [r0,#CLKCTL_CCSR]
139 +
140 +/*=============================================================================
141 + * Enable all clocks (they are disabled by ROM code)
142 + *===========================================================================*/
143 +
144 +       mov r1, #0xffffffff
145 +       str r1, [r0, #0x68]
146 +       str r1, [r0, #0x6c]
147 +       str r1, [r0, #0x70]
148 +       str r1, [r0, #0x74]
149 +       str r1, [r0, #0x78]
150 +       str r1, [r0, #0x7c]
151 +       str r1, [r0, #0x80]
152 +       str r1, [r0, #0x84]
153  
154 -/* DCD for LPDDR2 board */
155 -
156 -/* Tag=0xD2, Len=4 + 76 + 16 + 844 + 26 = 966 (0x03c6), Ver=0x40. */
157 -dcd_hdr:           .word 0x40c603D2
158 -
159 -/* Tag = 0xCC, Len = 9*8 + 4 = 76(0x4C), Param = 4 */
160 -write_ccm_dcd_cmd: .word 0x044C00CC
161 -
162 -MXC_DCD_ITEM(01, 0x53fd4068 , 0xffffffff)
163 -MXC_DCD_ITEM(02, 0x53fd406c , 0xffffffff)
164 -MXC_DCD_ITEM(03, 0x53fd4070 , 0xffffffff)
165 -MXC_DCD_ITEM(04, 0x53fd4074 , 0xffffffff)
166 -MXC_DCD_ITEM(05, 0x53fd4078 , 0xffffffff)
167 -MXC_DCD_ITEM(06, 0x53fd407c , 0xffffffff)
168 -MXC_DCD_ITEM(07, 0x53fd4080 , 0xffffffff)
169 -MXC_DCD_ITEM(08, 0x53fd4084 , 0xffffffff)
170 -MXC_DCD_ITEM(09, 0x53FD4098 , 0x80000003)
171 -
172 -/* poll for completion of CCM_CSR2 for update: use dummy write to wait */
173 -/* Tag = 0xCF, Len = 1*12 + 4 = 16(0x10), Param = 4(Mast & Set bit are zero) */
174 -check_data_dcd_cmd:       .word 0x241000CF
175 -/* loop 0x1FFFFFFF times to make sure bit 2(ddr_clk_ref_pll_bsy) is cleared */
176 -DCDGEN_CHECKDATA(1, CCM_BASE_ADDR + 0x8c, 0x04, 0x1FFFFFFF)
177 -
178 -/* Tag=0xCC, Len=105*8 + 4 = 844(0x034C), Param=4 */
179 -write_dcd_cmd:    .word 0x044C03CC
180 -
181 -MXC_DCD_ITEM(1, IOMUXC_BASE_ADDR + 0x6ac, 0x04000000)
182 -MXC_DCD_ITEM(2, IOMUXC_BASE_ADDR + 0x6a4, 0x00380000)
183 -MXC_DCD_ITEM(3, IOMUXC_BASE_ADDR + 0x668, 0x00380000)
184 -MXC_DCD_ITEM(4, IOMUXC_BASE_ADDR + 0x698, 0x00380000)
185 -MXC_DCD_ITEM(5, IOMUXC_BASE_ADDR + 0x6a0, 0x00380000)
186 -MXC_DCD_ITEM(6, IOMUXC_BASE_ADDR + 0x6a8, 0x00380000)
187 -MXC_DCD_ITEM(7, IOMUXC_BASE_ADDR + 0x6b4, 0x00380000)
188 -MXC_DCD_ITEM(8, IOMUXC_BASE_ADDR + 0x498, 0x00380000)
189 -MXC_DCD_ITEM(9, IOMUXC_BASE_ADDR + 0x49c, 0x00380000)
190 -MXC_DCD_ITEM(10, IOMUXC_BASE_ADDR + 0x4f0, 0x00380000)
191 -MXC_DCD_ITEM(11, IOMUXC_BASE_ADDR + 0x500, 0x00380000)
192 -MXC_DCD_ITEM(12, IOMUXC_BASE_ADDR + 0x4c8, 0x00380000)
193 -MXC_DCD_ITEM(13, IOMUXC_BASE_ADDR + 0x528, 0x00380000)
194 -MXC_DCD_ITEM(14, IOMUXC_BASE_ADDR + 0x4f4, 0x00380000)
195 -MXC_DCD_ITEM(15, IOMUXC_BASE_ADDR + 0x4fc, 0x00380000)
196 -MXC_DCD_ITEM(16, IOMUXC_BASE_ADDR + 0x4cc, 0x00380000)
197 -MXC_DCD_ITEM(17, IOMUXC_BASE_ADDR + 0x524, 0x00380000)
198 -
199 -MXC_DCD_ITEM(18, DATABAHN_BASE_ADDR + 0x000, 0x00000500)
200 -MXC_DCD_ITEM(19, DATABAHN_BASE_ADDR + 0x004, 0x00000000)
201 -MXC_DCD_ITEM(20, DATABAHN_BASE_ADDR + 0x008, 0x0000001b)
202 -MXC_DCD_ITEM(21, DATABAHN_BASE_ADDR + 0x00c, 0x0000d056)
203 -MXC_DCD_ITEM(22, DATABAHN_BASE_ADDR + 0x010, 0x0000010b)
204 -MXC_DCD_ITEM(23, DATABAHN_BASE_ADDR + 0x014, 0x00000a6b)
205 -MXC_DCD_ITEM(24, DATABAHN_BASE_ADDR + 0x018, 0x02020d0c)
206 -MXC_DCD_ITEM(25, DATABAHN_BASE_ADDR + 0x01c, 0x0c110302)
207 -MXC_DCD_ITEM(26, DATABAHN_BASE_ADDR + 0x020, 0x05020503)
208 -MXC_DCD_ITEM(27, DATABAHN_BASE_ADDR + 0x024, 0x00000105)
209 -MXC_DCD_ITEM(28, DATABAHN_BASE_ADDR + 0x028, 0x01000403)
210 -MXC_DCD_ITEM(29, DATABAHN_BASE_ADDR + 0x02c, 0x09040501)
211 -MXC_DCD_ITEM(30, DATABAHN_BASE_ADDR + 0x030, 0x02000000)
212 -MXC_DCD_ITEM(31, DATABAHN_BASE_ADDR + 0x034, 0x00000e02)
213 -MXC_DCD_ITEM(32, DATABAHN_BASE_ADDR + 0x038, 0x00000006)
214 -MXC_DCD_ITEM(33, DATABAHN_BASE_ADDR + 0x03c, 0x00002301)
215 -MXC_DCD_ITEM(34, DATABAHN_BASE_ADDR + 0x040, 0x00050408)
216 -MXC_DCD_ITEM(35, DATABAHN_BASE_ADDR + 0x044, 0x00000300)
217 -MXC_DCD_ITEM(36, DATABAHN_BASE_ADDR + 0x048, 0x00260026)
218 -MXC_DCD_ITEM(37, DATABAHN_BASE_ADDR + 0x04c, 0x00010000)
219 -
220 -MXC_DCD_ITEM(38, DATABAHN_BASE_ADDR + 0x05c, 0x02000000)
221 -MXC_DCD_ITEM(39, DATABAHN_BASE_ADDR + 0x060, 0x00000002)
222 -MXC_DCD_ITEM(40, DATABAHN_BASE_ADDR + 0x064, 0x00000000)
223 -MXC_DCD_ITEM(41, DATABAHN_BASE_ADDR + 0x068, 0x00000000)
224 -MXC_DCD_ITEM(42, DATABAHN_BASE_ADDR + 0x06c, 0x00040042)
225 -MXC_DCD_ITEM(43, DATABAHN_BASE_ADDR + 0x070, 0x00000001)
226 -MXC_DCD_ITEM(44, DATABAHN_BASE_ADDR + 0x074, 0x00000000)
227 -MXC_DCD_ITEM(45, DATABAHN_BASE_ADDR + 0x078, 0x00040042)
228 -MXC_DCD_ITEM(46, DATABAHN_BASE_ADDR + 0x07c, 0x00000001)
229 -MXC_DCD_ITEM(47, DATABAHN_BASE_ADDR + 0x080, 0x010b0000)
230 -MXC_DCD_ITEM(48, DATABAHN_BASE_ADDR + 0x084, 0x00000060)
231 -MXC_DCD_ITEM(49, DATABAHN_BASE_ADDR + 0x088, 0x02400018)
232 -MXC_DCD_ITEM(50, DATABAHN_BASE_ADDR + 0x08c, 0x01000e00)
233 -MXC_DCD_ITEM(51, DATABAHN_BASE_ADDR + 0x090, 0x0a010101)
234 -MXC_DCD_ITEM(52, DATABAHN_BASE_ADDR + 0x094, 0x01011f1f)
235 -MXC_DCD_ITEM(53, DATABAHN_BASE_ADDR + 0x098, 0x01010101)
236 -MXC_DCD_ITEM(54, DATABAHN_BASE_ADDR + 0x09c, 0x00030101)
237 -MXC_DCD_ITEM(55, DATABAHN_BASE_ADDR + 0x0a0, 0x00010000)
238 -MXC_DCD_ITEM(56, DATABAHN_BASE_ADDR + 0x0a4, 0x00010000)
239 -MXC_DCD_ITEM(57, DATABAHN_BASE_ADDR + 0x0a8, 0x00000000)
240 -MXC_DCD_ITEM(58, DATABAHN_BASE_ADDR + 0x0ac, 0x0000ffff)
241 -MXC_DCD_ITEM(59, DATABAHN_BASE_ADDR + 0x0c8, 0x02020101)
242 -MXC_DCD_ITEM(60, DATABAHN_BASE_ADDR + 0x0cc, 0x01000000)
243 -MXC_DCD_ITEM(61, DATABAHN_BASE_ADDR + 0x0d0, 0x01000201)
244 -MXC_DCD_ITEM(62, DATABAHN_BASE_ADDR + 0x0d4, 0x00000200)
245 -MXC_DCD_ITEM(63, DATABAHN_BASE_ADDR + 0x0d8, 0x00000102)
246 -MXC_DCD_ITEM(64, DATABAHN_BASE_ADDR + 0x0dc, 0x0000ffff)
247 -MXC_DCD_ITEM(65, DATABAHN_BASE_ADDR + 0x0e0, 0x0000ffff)
248 -MXC_DCD_ITEM(66, DATABAHN_BASE_ADDR + 0x0e4, 0x02020000)
249 -MXC_DCD_ITEM(67, DATABAHN_BASE_ADDR + 0x0e8, 0x02020202)
250 -MXC_DCD_ITEM(68, DATABAHN_BASE_ADDR + 0x0ec, 0x00000202)
251 -MXC_DCD_ITEM(69, DATABAHN_BASE_ADDR + 0x0f0, 0x01010064)
252 -MXC_DCD_ITEM(70, DATABAHN_BASE_ADDR + 0x0f4, 0x01010101)
253 -MXC_DCD_ITEM(71, DATABAHN_BASE_ADDR + 0x0f8, 0x00010101)
254 -MXC_DCD_ITEM(72, DATABAHN_BASE_ADDR + 0x0fc, 0x00000064)
255 -MXC_DCD_ITEM(73, DATABAHN_BASE_ADDR + 0x100, 0x00000000)
256 -MXC_DCD_ITEM(74, DATABAHN_BASE_ADDR + 0x104, 0x02000802)
257 -MXC_DCD_ITEM(75, DATABAHN_BASE_ADDR + 0x108, 0x04080000)
258 -MXC_DCD_ITEM(76, DATABAHN_BASE_ADDR + 0x10c, 0x04080408)
259 -MXC_DCD_ITEM(77, DATABAHN_BASE_ADDR + 0x110, 0x04080408)
260 -MXC_DCD_ITEM(78, DATABAHN_BASE_ADDR + 0x114, 0x03060408)
261 -MXC_DCD_ITEM(79, DATABAHN_BASE_ADDR + 0x118, 0x01010002)
262 -MXC_DCD_ITEM(80, DATABAHN_BASE_ADDR + 0x11c, 0x00000000)
263 -
264 -MXC_DCD_ITEM(81, DATABAHN_BASE_ADDR + 0x200, 0x00000000)
265 -MXC_DCD_ITEM(82, DATABAHN_BASE_ADDR + 0x204, 0x00000000)
266 -MXC_DCD_ITEM(83, DATABAHN_BASE_ADDR + 0x208, 0xf5003a27)
267 -MXC_DCD_ITEM(84, DATABAHN_BASE_ADDR + 0x20c, 0x074002e1)
268 -MXC_DCD_ITEM(85, DATABAHN_BASE_ADDR + 0x210, 0xf5003a27)
269 -MXC_DCD_ITEM(86, DATABAHN_BASE_ADDR + 0x214, 0x074002e1)
270 -MXC_DCD_ITEM(87, DATABAHN_BASE_ADDR + 0x218, 0xf5003a27)
271 -MXC_DCD_ITEM(88, DATABAHN_BASE_ADDR + 0x21c, 0x074002e1)
272 -MXC_DCD_ITEM(89, DATABAHN_BASE_ADDR + 0x220, 0xf5003a27)
273 -MXC_DCD_ITEM(90, DATABAHN_BASE_ADDR + 0x224, 0x074002e1)
274 -MXC_DCD_ITEM(91, DATABAHN_BASE_ADDR + 0x228, 0xf5003a27)
275 -MXC_DCD_ITEM(92, DATABAHN_BASE_ADDR + 0x22c, 0x074002e1)
276 -MXC_DCD_ITEM(93, DATABAHN_BASE_ADDR + 0x230, 0x00000000)
277 -MXC_DCD_ITEM(94, DATABAHN_BASE_ADDR + 0x234, 0x00810006)
278 -MXC_DCD_ITEM(95, DATABAHN_BASE_ADDR + 0x238, 0x20099414)
279 -MXC_DCD_ITEM(96, DATABAHN_BASE_ADDR + 0x23c, 0x000a1401)
280 -MXC_DCD_ITEM(97, DATABAHN_BASE_ADDR + 0x240, 0x20099414)
281 -MXC_DCD_ITEM(98, DATABAHN_BASE_ADDR + 0x244, 0x000a1401)
282 -MXC_DCD_ITEM(99, DATABAHN_BASE_ADDR + 0x248, 0x20099414)
283 -MXC_DCD_ITEM(100, DATABAHN_BASE_ADDR + 0x24c, 0x000a1401)
284 -MXC_DCD_ITEM(101, DATABAHN_BASE_ADDR + 0x250, 0x20099414)
285 -MXC_DCD_ITEM(102, DATABAHN_BASE_ADDR + 0x254, 0x000a1401)
286 -MXC_DCD_ITEM(103, DATABAHN_BASE_ADDR + 0x258, 0x20099414)
287 -MXC_DCD_ITEM(104, DATABAHN_BASE_ADDR + 0x25c, 0x000a1401)
288 -MXC_DCD_ITEM(105, DATABAHN_BASE_ADDR + 0x000, 0x00000501)
289 -
290 -
291 -/* poll for completion of HW_DRAM_CTL42 for DDR inti completion */
292 -/* Tag = 0xCF, Len = 1*12 + 4 = 16(0x10), Param = 4 (Mast & Set bit are zero) */
293 -check_ddr_init_dcd_cmd:       .word 0x341000CF
294 -/* loop 0x1FFFFFFF times to make sure bit 4 (int_status) is set */
295 -DCDGEN_CHECKDATA(2, DATABAHN_BASE_ADDR + 0xa8, 0x10, 0x1FFFFFFF)
296 +#if defined(CONFIG_LPDDR2)
297  
298 +/* DDR clock setting -- Set DDR to be div 3 to get 266MHz */
299 +/* setmem /32 0x53FD4098 = 0x80000003 */
300 +       ldr r1, =0x80000003
301 +       str r1, [r0, #0x98]
302 +
303 +/* poll to make sure DDR dividers take effect */
304 +1:
305 +       ldr r1, [r0, #0x8c]
306 +       ands r1, r1, #0x4
307 +       bne 1b
308 +
309 +/*=============================================================================
310 + * IOMUX
311 + *===========================================================================*/
312 +       ldr r0, =0x53fa8000
313 +       mov r1, #0x04000000
314 +       str r1, [r0, #0x6ac]
315 +       mov r2, #0x00380000
316 +       str r2, [r0, #0x6a4]
317 +       str r2, [r0, #0x668]
318 +       str r2, [r0, #0x698]
319 +       str r2, [r0, #0x6a0]
320 +       str r2, [r0, #0x6a8]
321 +       str r2, [r0, #0x6b4]
322 +       str r2, [r0, #0x498]
323 +       str r2, [r0, #0x49c]
324 +        str r2, [r0, #0x4f0]
325 +        str r2, [r0, #0x500]
326 +        str r2, [r0, #0x4c8]
327 +        str r2, [r0, #0x528]
328 +        str r2, [r0, #0x4f4]
329 +        str r2, [r0, #0x4fc]
330 +        str r2, [r0, #0x4cc]
331 +        str r2, [r0, #0x524]
332 +
333 +/*=============================================================================
334 + * DDR setting
335 + *===========================================================================*/
336 +
337 +       ldr r0, =DATABAHN_BASE_ADDR
338 +/* setmem /32 0x14000000       = 0x00000500 */
339 +       ldr r1, =0x00000500
340 +       str r1, [r0, #0x0]
341 +/* setmem /32 0x14000004       = 0x00000000 */
342 +       ldr r1, =0x00000000
343 +       str r1, [r0, #0x4]
344 +/* setmem /32 0x14000008       = 0x0000001b */
345 +       ldr r1, =0x0000001b
346 +       str r1, [r0, #0x8]
347 +/* setmem /32 0x1400000c       = 0x0000d056 */
348 +       ldr r1, =0x0000d056
349 +       str r1, [r0, #0xc]
350 +/* setmem /32 0x14000010       = 0x0000010b */
351 +       ldr r1, =0x0000010b
352 +       str r1, [r0, #0xc]
353 +/* setmem /32 0x14000014       = 0x00000a6b */
354 +       ldr r1, =0x00000a6b
355 +       str r1, [r0, #0x14]
356 +/* setmem /32 0x14000018       = 0x02020d0c */
357 +        ldr r1, =0x02020d0c
358 +        str r1, [r0, #0x18]
359 +/* setmem /32 0x1400001c       = 0x0c110302 */
360 +       ldr r1, =0x0c110302
361 +       str r1, [r0, #0x1c]
362 +/* setmem /32 0x14000020       = 0x05020503 */
363 +       ldr r1, =0x05020503
364 +       str r1, [r0, #0x20]
365 +/* setmem /32 0x14000024       = 0x00000105 */
366 +       ldr r1, =0x00000105
367 +       str r1, [r0, #0x24]
368 +/* setmem /32 0x14000028       = 0x01000403 */
369 +       ldr r1, =0x01000403
370 +       str r1, [r0, #0x28]
371 +/* setmem /32 0x1400002c       = 0x09040501 */
372 +       ldr r1, =0x09040501
373 +       str r1, [r0, #0x2c]
374 +/* setmem /32 0x14000030       = 0x02000000 */
375 +       ldr r1, =0x02000000
376 +       str r1, [r0, #0x30]
377 +/* setmem /32 0x14000034       = 0x00000e02 */
378 +       ldr r1, =0x00000e02
379 +       str r1, [r0, #0x34]
380 +/* setmem /32 0x14000038       = 0x00000006 */
381 +       ldr r1, =0x00000006
382 +       str r1, [r0, #0x38]
383 +/* setmem /32 0x1400003c       = 0x00002301 */
384 +       ldr r1, =0x00002301
385 +       str r1, [r0, #0x3c]
386 +/* setmem /32 0x14000040       = 0x00050408 */
387 +       ldr r1, =0x00050408
388 +       str r1, [r0, #0x40]
389 +/* setmem /32 0x14000044       = 0x00000300 */
390 +       ldr r1, =0x00000300
391 +       str r1, [r0, #0x44]
392 +/* setmem /32 0x14000048       = 0x00260026 */
393 +       ldr r1, =0x00260026
394 +       str r1, [r0, #0x48]
395 +/* setmem /32 0x1400004c       = 0x00010000 */
396 +       ldr r1, =0x00010000
397 +       str r1, [r0, #0x4c]
398 +/* setmem /32 0x1400005c       = 0x02000000 */
399 +       ldr r1, =0x02000000
400 +       str r1, [r0, #0x5c]
401 +/* setmem /32 0x14000060       = 0x00000002 */
402 +       ldr r1, =0x00000002
403 +       str r1, [r0, #0x60]
404 +/* setmem /32 0x14000064       = 0x00000000 */
405 +       ldr r1, =0x00000000
406 +       str r1, [r0, #0x64]
407 +/* setmem /32 0x14000068       = 0x00000000 */
408 +       ldr r1, =0x00000000
409 +       str r1, [r0, #0x68]
410 +/* setmem /32 0x1400006c       = 0x00040042 */
411 +       ldr r1, =0x00040042
412 +       str r1, [r0, #0x6c]
413 +/* setmem /32 0x14000070       = 0x00000001 */
414 +       ldr r1, =0x00000001
415 +       str r1, [r0, #0x70]
416 +/* setmem /32 0x14000074       = 0x00000000 */
417 +       ldr r1, =0x00000001
418 +       str r1, [r0, #0x74]
419 +/* setmem /32 0x14000078       = 0x00040042 */
420 +       ldr r1, =0x00040042
421 +       str r1, [r0, #0x78]
422 +/* setmem /32 0x1400007c       = 0x00000001 */
423 +       ldr r1, =0x00000001
424 +       str r1, [r0, #0x7c]
425 +/* setmem /32 0x14000080       = 0x010b0000 */
426 +       ldr r1, =0x010b0000
427 +       str r1, [r0, #0x80]
428 +/* setmem /32 0x14000084       = 0x00000060 */
429 +       ldr r1, =0x00000060
430 +       str r1, [r0, #0x84]
431 +/* setmem /32 0x14000088       = 0x02400018 */
432 +        ldr r1, =0x02400018
433 +        str r1, [r0, #0x88]
434 +/* setmem /32 0x1400008c       = 0x01000e00 */
435 +        ldr r1, =0x01000e00
436 +        str r1, [r0, #0x8c]
437 +/* setmem /32 0x14000090       = 0x0a010101 */
438 +        ldr r1, =0x0a010101
439 +        str r1, [r0, #0x90]
440 +/* setmem /32 0x14000094       = 0x01011f1f */
441 +        ldr r1, =0x01011f1f
442 +        str r1, [r0, #0x94]
443 +/* setmem /32 0x14000098       = 0x01010101 */
444 +        ldr r1, =0x01010101
445 +        str r1, [r0, #0x98]
446 +/* setmem /32 0x1400009c       = 0x00030101 */
447 +        ldr r1, =0x00030101
448 +        str r1, [r0, #0x9c]
449 +/* setmem /32 0x140000a0       = 0x00010000 */
450 +        ldr r1, =0x00010000
451 +        str r1, [r0, #0xa0]
452 +/* setmem /32 0x140000a4       = 0x00010000 */
453 +        ldr r1, =0x00010000
454 +        str r1, [r0, #0xa4]
455 +/* setmem /32 0x140000a8       = 0x00000000 */
456 +        ldr r1, =0x00000000
457 +        str r1, [r0, #0xa8]
458 +/* setmem /32 0x140000ac       = 0x0000ffff */
459 +        ldr r1, =0x0000ffff
460 +        str r1, [r0, #0xac]
461 +/* setmem /32 0x140000c8       = 0x02020101 */
462 +        ldr r1, =0x02020101
463 +        str r1, [r0, #0xc8]
464 +/* setmem /32 0x140000cc       = 0x01000000 */
465 +        ldr r1, =0x01000000
466 +        str r1, [r0, #0xcc]
467 +/* setmem /32 0x140000d0       = 0x01000201 */
468 +        ldr r1, =0x01000201
469 +        str r1, [r0, #0xd0]
470 +/* setmem /32 0x140000d4       = 0x00000200 */
471 +        ldr r1, =0x00000200
472 +        str r1, [r0, #0xd4]
473 +/* setmem /32 0x140000d8       = 0x00000102 */
474 +        ldr r1, =0x00000102
475 +        str r1, [r0, #0xd8]
476 +/* setmem /32 0x140000dc       = 0x0000ffff */
477 +        ldr r1, =0x0000ffff
478 +        str r1, [r0, #0xdc]
479 +/* setmem /32 0x140000e0       = 0x0000ffff */
480 +        ldr r1, =0x0000ffff
481 +        str r1, [r0, #0xdc]
482 +/* setmem /32 0x140000e4       = 0x02020000 */
483 +        ldr r1, =0x02020000
484 +        str r1, [r0, #0xe4]
485 +/* setmem /32 0x140000e8       = 0x02020202 */
486 +        ldr r1, =0x02020202
487 +        str r1, [r0, #0xe8]
488 +/* setmem /32 0x140000ec       = 0x00000202 */
489 +        ldr r1, =0x00000202
490 +        str r1, [r0, #0xec]
491 +/* setmem /32 0x140000f0       = 0x01010064 */
492 +        ldr r1, =0x01010064
493 +        str r1, [r0, #0xf0]
494 +/* setmem /32 0x140000f4       = 0x01010101 */
495 +        ldr r1, =0x01010101
496 +        str r1, [r0, #0xf4]
497 +/* setmem /32 0x140000f8       = 0x00010101 */
498 +        ldr r1, =0x00010101
499 +        str r1, [r0, #0xf8]
500 +/* setmem /32 0x140000fc       = 0x00000064 */
501 +        ldr r1, =0x00000064
502 +        str r1, [r0, #0xfc]
503 +/* setmem /32 0x14000100       = 0x00000000 */
504 +        ldr r1, =0x00000000
505 +        str r1, [r0, #0x100]
506 +/* setmem /32 0x14000104       = 0x02000802 */
507 +        ldr r1, =0x02000802
508 +        str r1, [r0, #0x104]
509 +/* setmem /32 0x14000108       = 0x04080000 */
510 +        ldr r1, =0x04080000
511 +        str r1, [r0, #0x108]
512 +/* setmem /32 0x1400010c       = 0x04080408 */
513 +        ldr r1, =0x04080408
514 +        str r1, [r0, #0x10c]
515 +/* setmem /32 0x14000110       = 0x04080408 */
516 +        ldr r1, =0x04080408
517 +        str r1, [r0, #0x110]
518 +/* setmem /32 0x14000114       = 0x03060408 */
519 +        ldr r1, =0x03060408
520 +        str r1, [r0, #0x114]
521 +/* setmem /32 0x14000118       = 0x01010002 */
522 +        ldr r1, =0x01010002
523 +        str r1, [r0, #0x118]
524 +/* setmem /32 0x1400011c       = 0x00000000 */
525 +        ldr r1, =0x00000000
526 +        str r1, [r0, #0x11c]
527 +/* setmem /32 0x14000200       = 0x00000000 */
528 +       ldr r1, =0x00000000
529 +       str r1, [r0, #0x200]
530 +/* setmem /32 0x14000204       = 0x00000000 */
531 +       ldr r1, =0x00000000
532 +       str r1, [r0, #0x204]
533 +/* setmem /32 0x14000208       = 0xf5003a27 */
534 +       ldr r1, =0xf5003a27
535 +       str r1, [r0, #0x208]
536 +/* setmem /32 0x1400020c       = 0x074002e1 */
537 +       ldr r1, =0x074002e1
538 +       str r1, [r0, #0x20c]
539 +/* setmem /32 0x14000210       = 0xf5003a27 */
540 +       ldr r1, =0xf5003a27
541 +       str r1, [r0, #0x210]
542 +/* setmem /32 0x14000214       = 0x074002e1 */
543 +       ldr r1, =0x074002e1
544 +       str r1, [r0, #0x214]
545 +/* setmem /32 0x14000218       = 0xf5003a27 */
546 +       ldr r1, =0xf5003a27
547 +       str r1, [r0, #0x218]
548 +/* setmem /32 0x1400021c       = 0x074002e1 */
549 +       ldr r1, =0x074002e1
550 +       str r1, [r0, #0x21c]
551 +/* setmem /32 0x14000220       = 0xf5003a27 */
552 +       ldr r1, =0xf5003a27
553 +       str r1, [r0, #0x220]
554 +/* setmem /32 0x14000224       = 0x074002e1 */
555 +       ldr r1, =0x074002e1
556 +       str r1, [r0, #0x224]
557 +/* setmem /32 0x14000228       = 0xf5003a27 */
558 +       ldr r1, =0xf5003a27
559 +       str r1, [r0, #0x228]
560 +/* setmem /32 0x1400022c       = 0x074002e1 */
561 +       ldr r1, =0x074002e1
562 +       str r1, [r0, #0x22c]
563 +/* setmem /32 0x14000230       = 0x00000000 */
564 +       ldr r1, =0x00000000
565 +       str r1, [r0, #0x230]
566 +/* setmem /32 0x14000234       = 0x00810006 */
567 +       ldr r1, =0x00810006
568 +       str r1, [r0, #0x234]
569 +/* setmem /32 0x14000238       = 0x20099414 */
570 +       ldr r1, =0x20099414
571 +       str r1, [r0, #0x238]
572 +/* setmem /32 0x1400023c       = 0x000a1401 */
573 +       ldr r1, =0x000a1401
574 +       str r1, [r0, #0x23c]
575 +/* setmem /32 0x14000240       = 0x20099414 */
576 +       ldr r1, =0x20099414
577 +       str r1, [r0, #0x240]
578 +/* setmem /32 0x14000244       = 0x000a1401 */
579 +       ldr r1, =0x000a1401
580 +       str r1, [r0, #0x244]
581 +/* setmem /32 0x14000248       = 0x20099414 */
582 +       ldr r1, =0x20099414
583 +       str r1, [r0, #0x248]
584 +/* setmem /32 0x1400024c       = 0x000a1401 */
585 +       ldr r1, =0x000a1401
586 +       str r1, [r0, #0x24c]
587 +/* setmem /32 0x14000250       = 0x20099414 */
588 +       ldr r1, =0x20099414
589 +       str r1, [r0, #0x250]
590 +/* setmem /32 0x14000254       = 0x000a1401 */
591 +       ldr r1, =0x000a1401
592 +       str r1, [r0, #0x254]
593 +/* setmem /32 0x14000258       = 0x20099414 */
594 +       ldr r1, =0x000a1401
595 +       str r1, [r0, #0x258]
596 +/* setmem /32 0x1400025c       = 0x000a1401 */
597 +       ldr r1, =0x000a1401
598 +       str r1, [r0, #0x25c]
599 +
600 +/* Start ddr */
601 +/* setmem /32 0x14000000 = 0x00000501  // bit[0]: start */
602 +       ldr r1, =0x00000501
603 +       str r1, [r0, #0x0]
604 +/* poll to make sure it is done */
605 +1:
606 +       ldr r1, [r0, #0xa8]
607 +       ands r1, r1, #0x10
608 +       beq 1b
609  #else
610  
611 -/* DCD for mDDR board */
612 -
613 -/* Tag=0xD2, Len=4 + 76 + 16 + 796 + 26 = 908 (03A4), Ver=0x40. */
614 -dcd_hdr:          .word 0x408C03D2
615 -
616 -/* Tag = 0xCC, Len = 9*8 + 4 = 76(0x4C), Param = 4 */
617 -write_ccm_dcd_cmd:        .word 0x044C00CC
618 -
619 -MXC_DCD_ITEM(01, 0x53fd4068 , 0xffffffff)
620 -MXC_DCD_ITEM(02, 0x53fd406c , 0xffffffff)
621 -MXC_DCD_ITEM(03, 0x53fd4070 , 0xffffffff)
622 -MXC_DCD_ITEM(04, 0x53fd4074 , 0xffffffff)
623 -MXC_DCD_ITEM(05, 0x53fd4078 , 0xffffffff)
624 -MXC_DCD_ITEM(06, 0x53fd407c , 0xffffffff)
625 -MXC_DCD_ITEM(07, 0x53fd4080 , 0xffffffff)
626 -MXC_DCD_ITEM(08, 0x53fd4084 , 0xffffffff)
627 -MXC_DCD_ITEM(09, 0x53FD4098 , 0x80000004)
628 -
629 -/* poll for completion of CCM_CSR2 for update: use dummy write to wait */
630 -/* Tag = 0xCF, Len = 1*12 + 4 = 16(0x10), Param = 4(Mast & Set bit are zero) */
631 -check_data_dcd_cmd:       .word 0x241000CF
632 -/* loop 0x1FFFFFFF times to make sure bit 2(ddr_clk_ref_pll_bsy) is cleared */
633 -DCDGEN_CHECKDATA(1, CCM_BASE_ADDR + 0x8c, 0x04, 0x1FFFFFFF)
634 -
635 -write_dcd_cmd:    .word 0x041C03CC /* Tag=0xCC, Len=99*8 + 4, Param=4 */
636 -
637 -MXC_DCD_ITEM(1, IOMUXC_BASE_ADDR + 0x6ac, 0x02000000)
638 -MXC_DCD_ITEM(2, IOMUXC_BASE_ADDR + 0x668, 0x00200000)
639 -MXC_DCD_ITEM(3, IOMUXC_BASE_ADDR + 0x66c, 0x00000000)
640 -MXC_DCD_ITEM(4, IOMUXC_BASE_ADDR + 0x670, 0x00000000)
641 -MXC_DCD_ITEM(5, IOMUXC_BASE_ADDR + 0x68c, 0x00000000)
642 -MXC_DCD_ITEM(6, IOMUXC_BASE_ADDR + 0x698, 0x00200000)
643 -MXC_DCD_ITEM(7, IOMUXC_BASE_ADDR + 0x6a0, 0x00200000)
644 -MXC_DCD_ITEM(8, IOMUXC_BASE_ADDR + 0x6a4, 0x00200000)
645 -MXC_DCD_ITEM(9, IOMUXC_BASE_ADDR + 0x6a8, 0x00200000)
646 -MXC_DCD_ITEM(10, IOMUXC_BASE_ADDR + 0x6b4, 0x00200000)
647 -
648 -MXC_DCD_ITEM(11, IOMUXC_BASE_ADDR + 0x498, 0x00200000)
649 -MXC_DCD_ITEM(12, IOMUXC_BASE_ADDR + 0x49c, 0x00200000)
650 -MXC_DCD_ITEM(13, IOMUXC_BASE_ADDR + 0x4c8, 0x00200000)
651 -MXC_DCD_ITEM(14, IOMUXC_BASE_ADDR + 0x4cc, 0x00200000)
652 -MXC_DCD_ITEM(15, IOMUXC_BASE_ADDR + 0x4f0, 0x00200000)
653 -MXC_DCD_ITEM(16, IOMUXC_BASE_ADDR + 0x4f4, 0x00200000)
654 -MXC_DCD_ITEM(17, IOMUXC_BASE_ADDR + 0x4fc, 0x00200000)
655 -MXC_DCD_ITEM(18, IOMUXC_BASE_ADDR + 0x500, 0x00200000)
656 -MXC_DCD_ITEM(19, IOMUXC_BASE_ADDR + 0x524, 0x00200000)
657 -MXC_DCD_ITEM(20, IOMUXC_BASE_ADDR + 0x528, 0x00200000)
658 -
659 -MXC_DCD_ITEM(21, DATABAHN_BASE_ADDR + 0x000, 0x00000100)
660 -MXC_DCD_ITEM(22, DATABAHN_BASE_ADDR + 0x008, 0x00009c40)
661 -MXC_DCD_ITEM(23, DATABAHN_BASE_ADDR + 0x014, 0x02000000)
662 -MXC_DCD_ITEM(24, DATABAHN_BASE_ADDR + 0x018, 0x01010706)
663 -MXC_DCD_ITEM(25, DATABAHN_BASE_ADDR + 0x01c, 0x080b0201)
664 -MXC_DCD_ITEM(26, DATABAHN_BASE_ADDR + 0x020, 0x02000303)
665 -MXC_DCD_ITEM(27, DATABAHN_BASE_ADDR + 0x024, 0x0136b002)
666 -MXC_DCD_ITEM(28, DATABAHN_BASE_ADDR + 0x028, 0x01000101)
667 -MXC_DCD_ITEM(29, DATABAHN_BASE_ADDR + 0x02c, 0x06030301)
668 -MXC_DCD_ITEM(30, DATABAHN_BASE_ADDR + 0x030, 0x00000000)
669 -MXC_DCD_ITEM(31, DATABAHN_BASE_ADDR + 0x034, 0x00000a02)
670 -MXC_DCD_ITEM(32, DATABAHN_BASE_ADDR + 0x038, 0x00000003)
671 -MXC_DCD_ITEM(33, DATABAHN_BASE_ADDR + 0x03c, 0x00001401)
672 -MXC_DCD_ITEM(34, DATABAHN_BASE_ADDR + 0x040, 0x0005030f)
673 -MXC_DCD_ITEM(35, DATABAHN_BASE_ADDR + 0x044, 0x00000200)
674 -MXC_DCD_ITEM(36, DATABAHN_BASE_ADDR + 0x048, 0x00180018)
675 -MXC_DCD_ITEM(37, DATABAHN_BASE_ADDR + 0x04c, 0x00010000)
676 -MXC_DCD_ITEM(38, DATABAHN_BASE_ADDR + 0x05c, 0x01000000)
677 -MXC_DCD_ITEM(39, DATABAHN_BASE_ADDR + 0x060, 0x00000001)
678 -MXC_DCD_ITEM(40, DATABAHN_BASE_ADDR + 0x064, 0x00000000)
679 -MXC_DCD_ITEM(41, DATABAHN_BASE_ADDR + 0x068, 0x00320000)
680 -MXC_DCD_ITEM(42, DATABAHN_BASE_ADDR + 0x06c, 0x00000000)
681 -MXC_DCD_ITEM(43, DATABAHN_BASE_ADDR + 0x070, 0x00000000)
682 -MXC_DCD_ITEM(44, DATABAHN_BASE_ADDR + 0x074, 0x00320000)
683 -MXC_DCD_ITEM(45, DATABAHN_BASE_ADDR + 0x080, 0x02000000)
684 -MXC_DCD_ITEM(46, DATABAHN_BASE_ADDR + 0x084, 0x00000100)
685 -MXC_DCD_ITEM(47, DATABAHN_BASE_ADDR + 0x088, 0x02400040)
686 -MXC_DCD_ITEM(48, DATABAHN_BASE_ADDR + 0x08c, 0x01000000)
687 -MXC_DCD_ITEM(49, DATABAHN_BASE_ADDR + 0x090, 0x0a000100)
688 -MXC_DCD_ITEM(50, DATABAHN_BASE_ADDR + 0x094, 0x01011f1f)
689 -MXC_DCD_ITEM(51, DATABAHN_BASE_ADDR + 0x098, 0x01010101)
690 -MXC_DCD_ITEM(52, DATABAHN_BASE_ADDR + 0x09c, 0x00030101)
691 -MXC_DCD_ITEM(53, DATABAHN_BASE_ADDR + 0x0a4, 0x00010000)
692 -MXC_DCD_ITEM(54, DATABAHN_BASE_ADDR + 0x0ac, 0x0000ffff)
693 -MXC_DCD_ITEM(55, DATABAHN_BASE_ADDR + 0x0c8, 0x02020101)
694 -MXC_DCD_ITEM(56, DATABAHN_BASE_ADDR + 0x0cc, 0x00000000)
695 -MXC_DCD_ITEM(57, DATABAHN_BASE_ADDR + 0x0d0, 0x01000202)
696 -MXC_DCD_ITEM(58, DATABAHN_BASE_ADDR + 0x0d4, 0x02030302)
697 -MXC_DCD_ITEM(59, DATABAHN_BASE_ADDR + 0x0d8, 0x00000001)
698 -MXC_DCD_ITEM(60, DATABAHN_BASE_ADDR + 0x0dc, 0x0000ffff) /* sync mode */
699 -MXC_DCD_ITEM(61, DATABAHN_BASE_ADDR + 0x0e0, 0x0000ffff)
700 -MXC_DCD_ITEM(62, DATABAHN_BASE_ADDR + 0x0e4, 0x02020000)
701 -MXC_DCD_ITEM(63, DATABAHN_BASE_ADDR + 0x0e8, 0x02020202)
702 -MXC_DCD_ITEM(64, DATABAHN_BASE_ADDR + 0x0ec, 0x00000202)
703 -MXC_DCD_ITEM(65, DATABAHN_BASE_ADDR + 0x0f0, 0x01010064)
704 -MXC_DCD_ITEM(66, DATABAHN_BASE_ADDR + 0x0f4, 0x01010101)
705 -MXC_DCD_ITEM(67, DATABAHN_BASE_ADDR + 0x0f8, 0x00010101)
706 -MXC_DCD_ITEM(68, DATABAHN_BASE_ADDR + 0x0fc, 0x00000064)
707 -MXC_DCD_ITEM(69, DATABAHN_BASE_ADDR + 0x104, 0x02000602)
708 -MXC_DCD_ITEM(70, DATABAHN_BASE_ADDR + 0x108, 0x06120000)
709 -MXC_DCD_ITEM(71, DATABAHN_BASE_ADDR + 0x10c, 0x06120612)
710 -MXC_DCD_ITEM(72, DATABAHN_BASE_ADDR + 0x110, 0x06120612)
711 -MXC_DCD_ITEM(73, DATABAHN_BASE_ADDR + 0x114, 0x01030612)
712 -MXC_DCD_ITEM(74, DATABAHN_BASE_ADDR + 0x118, 0x01010002)
713 -
714 -MXC_DCD_ITEM(75, DATABAHN_BASE_ADDR + 0x200, 0x00000000)
715 -MXC_DCD_ITEM(76, DATABAHN_BASE_ADDR + 0x204, 0x00000000)
716 -MXC_DCD_ITEM(77, DATABAHN_BASE_ADDR + 0x208, 0xf5002725)
717 -MXC_DCD_ITEM(78, DATABAHN_BASE_ADDR + 0x20c, 0x070002d0)
718 -MXC_DCD_ITEM(79, DATABAHN_BASE_ADDR + 0x210, 0xf5002725)
719 -MXC_DCD_ITEM(80, DATABAHN_BASE_ADDR + 0x214, 0x074002d0)
720 -MXC_DCD_ITEM(81, DATABAHN_BASE_ADDR + 0x218, 0xf5002725)
721 -MXC_DCD_ITEM(82, DATABAHN_BASE_ADDR + 0x21c, 0x074002d0)
722 -MXC_DCD_ITEM(83, DATABAHN_BASE_ADDR + 0x220, 0xf5002725)
723 -MXC_DCD_ITEM(84, DATABAHN_BASE_ADDR + 0x224, 0x074002d0)
724 -MXC_DCD_ITEM(85, DATABAHN_BASE_ADDR + 0x228, 0xf5002725)
725 -MXC_DCD_ITEM(86, DATABAHN_BASE_ADDR + 0x22c, 0x074002d0)
726 -MXC_DCD_ITEM(87, DATABAHN_BASE_ADDR + 0x230, 0x00000000)
727 -MXC_DCD_ITEM(88, DATABAHN_BASE_ADDR + 0x234, 0x00800006)
728 -MXC_DCD_ITEM(89, DATABAHN_BASE_ADDR + 0x238, 0x200e1014)
729 -MXC_DCD_ITEM(90, DATABAHN_BASE_ADDR + 0x23c, 0x000d9f01)
730 -MXC_DCD_ITEM(91, DATABAHN_BASE_ADDR + 0x240, 0x200e1014)
731 -MXC_DCD_ITEM(92, DATABAHN_BASE_ADDR + 0x244, 0x000d9f01)
732 -MXC_DCD_ITEM(93, DATABAHN_BASE_ADDR + 0x248, 0x200e1014)
733 -MXC_DCD_ITEM(94, DATABAHN_BASE_ADDR + 0x24c, 0x000d9f01)
734 -MXC_DCD_ITEM(95, DATABAHN_BASE_ADDR + 0x250, 0x200e1014)
735 -MXC_DCD_ITEM(96, DATABAHN_BASE_ADDR + 0x254, 0x000d9f01)
736 -MXC_DCD_ITEM(97, DATABAHN_BASE_ADDR + 0x258, 0x200e1014)
737 -MXC_DCD_ITEM(98, DATABAHN_BASE_ADDR + 0x25c, 0x000d9f01)
738 -MXC_DCD_ITEM(99, DATABAHN_BASE_ADDR + 0x000, 0x00000101)
739 -
740 -
741 -/* poll for completion of HW_DRAM_CTL42 for DDR inti completion */
742 -/* Tag = 0xCF, Len = 1*12 + 4 = 16(0x10), Param = 4 (Mast & Set bit are zero) */
743 -check_ddr_init_dcd_cmd:       .word 0x341000CF
744 -/* loop 0x1FFFFFFF times to make sure bit 4 (int_status) is set */
745 -DCDGEN_CHECKDATA(2, DATABAHN_BASE_ADDR + 0xa8, 0x10, 0x1FFFFFFF)
746 +/*==================================================================
747 + * lpddr1-mddr
748 + *=================================================================*/
749 +
750 +/* DDR clock setting -- Set DDR to be div 4 to get 200MHz */
751 +/* setmem /32 0x53FD4098 = 0x80000004 */
752 +       ldr r1, =0x80000004
753 +       str r1, [r0, #0x98]
754 +
755 +/* poll to make sure DDR dividers take effect */
756 +1:
757 +    ldr r1, [r0, #0x8c]
758 +    ands r1, r1, #0x4
759 +    bne 1b
760 +
761 +/*==================================================================
762 + * IOMUX
763 + *=================================================================*/
764 +       ldr r0, =0x53fa8600
765 +       mov r1, #0x02000000
766 +       mov r3, #0x00200000
767 +       mov r2, #0x0
768 +       str r1, [r0, #0xac]
769 +       str r2, [r0, #0x6c]
770 +       str r2, [r0, #0x8c]
771 +       str r3, [r0, #0xa4]
772 +       str r3, [r0, #0x68]
773 +       str r3, [r0, #0x98]
774 +       str r3, [r0, #0xa0]
775 +       str r3, [r0, #0xa8]
776 +       str r3, [r0, #0xb4]
777 +
778 +       ldr r0, =0x53fa8400
779 +       str r3, [r0, #0x98]
780 +       str r3, [r0, #0x9c]
781 +       str r3, [r0, #0xf0]
782 +       str r3, [r0, #0x100]
783 +       str r3, [r0, #0xc8]
784 +       str r3, [r0, #0x128]
785 +       str r3, [r0, #0xf4]
786 +       str r3, [r0, #0xfc]
787 +       str r3, [r0, #0xcc]
788 +       str r3, [r0, #0x124]
789 +       str r2, [r0, #0x270]
790 +
791 +/*==============================================================
792 + *  DDR setting
793 + *=============================================================*/
794 +       ldr r0, =DATABAHN_BASE_ADDR
795 +/* setmem /32 0x14000000 = 0x00000100 */
796 +       ldr r1, =0x00000100
797 +       str r1, [r0, #0x0]
798 +/* setmem /32 0x14000008 = 0x00009c40 */
799 +       ldr r1, =0x00009c40
800 +       str r1, [r0, #0x8]
801 +/* setmem /32 0x14000014 = 0x02000000 */
802 +       ldr r1, =0x02000000
803 +       str r1, [r0, #0x14]
804 +/* setmem /32 0x14000018 = 0x01010706 */
805 +       ldr r1, =0x01010706
806 +       str r1, [r0, #0x018]
807 +/* setmem /32 0x1400001c = 0x080b0201 */
808 +       ldr r1, =0x080b0201
809 +       str r1, [r0, #0x01c]
810 +/* setmem /32 0x14000020 = 0x02000303 */
811 +       ldr r1, =0x02000303
812 +       str r1, [r0, #0x020]
813 +/* setmem /32 0x14000024 = 0x0136b002 */
814 +       ldr r1, =0x0136b002
815 +       str r1, [r0, #0x024]
816 +/* setmem /32 0x14000028 = 0x01000101 */
817 +       ldr r1, =0x01000101
818 +       str r1, [r0, #0x028]
819 +/* setmem /32 0x1400002c = 0x06030301 */
820 +       ldr r1, =0x06030301
821 +       str r1, [r0, #0x02c]
822 +/* setmem /32 0x14000030 = 0x00000000 */
823 +       ldr r1, =0x00000000
824 +       str r1, [r0, #0x030]
825 +/* setmem /32 0x14000034 = 0x00000a02 */
826 +       ldr r1, =0x00000a02
827 +       str r1, [r0, #0x034]
828 +/* setmem /32 0x14000038 = 0x00000003 */
829 +       ldr r1, =0x00000003
830 +       str r1, [r0, #0x038]
831 +/* setmem /32 0x1400003c = 0x00001401 */
832 +       ldr r1, =0x00001401
833 +       str r1, [r0, #0x03c]
834 +/* setmem /32 0x14000040 = 0x0005030f */
835 +       ldr r1, =0x0005030f
836 +       str r1, [r0, #0x040]
837 +/* setmem /32 0x14000044 = 0x00000200 */
838 +       ldr r1, =0x00000200
839 +       str r1, [r0, #0x044]
840 +/* setmem /32 0x14000048 = 0x00180018 */
841 +       ldr r1, =0x00180018
842 +       str r1, [r0, #0x048]
843 +/* setmem /32 0x1400004c = 0x00010000 */
844 +       ldr r1, =0x00010000
845 +       str r1, [r0, #0x04c]
846 +/* setmem /32 0x1400005c = 0x01000000 */
847 +       ldr r1, =0x01000000
848 +       str r1, [r0, #0x05c]
849 +/* setmem /32 0x14000060 = 0x00000001 */
850 +       ldr r1, =0x00000001
851 +       str r1, [r0, #0x060]
852 +/* setmem /32 0x14000064 = 0x00000000 */
853 +       ldr r1, =0x00000000
854 +       str r1, [r0, #0x064]
855 +/* setmem /32 0x14000068 = 0x00320000 */
856 +       ldr r1, =0x00320000
857 +       str r1, [r0, #0x068]
858 +/* setmem /32 0x1400006c = 0x00000000 */
859 +       ldr r1, =0x00000000
860 +       str r1, [r0, #0x06c]
861 +/* setmem /32 0x14000070 = 0x00000000 */
862 +       ldr r1, =0x00000000
863 +       str r1, [r0, #0x070]
864 +/* setmem /32 0x14000074 = 0x00320000 */
865 +       ldr r1, =0x00320000
866 +       str r1, [r0, #0x074]
867 +/* setmem /32 0x14000080 = 0x02000000 */
868 +       ldr r1, =0x02000000
869 +       str r1, [r0, #0x080]
870 +/* setmem /32 0x14000084 = 0x00000100 */
871 +       ldr r1, =0x00000100
872 +       str r1, [r0, #0x084]
873 +/* setmem /32 0x14000088 = 0x02400040 */
874 +       ldr r1, =0x02400040
875 +       str r1, [r0, #0x088]
876 +/* setmem /32 0x1400008c = 0x01000000 */
877 +       ldr r1, =0x01000000
878 +       str r1, [r0, #0x08c]
879 +/* setmem /32 0x14000090 = 0x0a000100 */
880 +       ldr r1, =0x0a000100
881 +       str r1, [r0, #0x090]
882 +/* setmem /32 0x14000094 = 0x01011f1f */
883 +       ldr r1, =0x01011f1f
884 +       str r1, [r0, #0x094]
885 +/* setmem /32 0x14000098 = 0x01010101 */
886 +       ldr r1, =0x01010101
887 +       str r1, [r0, #0x098]
888 +/* setmem /32 0x1400009c = 0x00030101 */
889 +       ldr r1, =0x00030101
890 +       str r1, [r0, #0x09c]
891 +/* setmem /32 0x140000a4 = 0x00010000 */
892 +       ldr r1, =0x00010000
893 +       str r1, [r0, #0x0a4]
894 +/* setmem /32 0x140000ac = 0x0000ffff */
895 +       ldr r1, =0x0000ffff
896 +       str r1, [r0, #0x0ac]
897 +/* setmem /32 0x140000c8 = 0x02020101 */
898 +       ldr r1, =0x02020101
899 +       str r1, [r0, #0x0c8]
900 +/* setmem /32 0x140000cc = 0x00000000 */
901 +       ldr r1, =0x00000000
902 +       str r1, [r0, #0x0cc]
903 +/* setmem /32 0x140000d0 = 0x01000202 */
904 +       ldr r1, =0x01000202
905 +       str r1, [r0, #0x0d0]
906 +/* setmem /32 0x140000d4 = 0x02030302 */
907 +       ldr r1, =0x02030302
908 +       str r1, [r0, #0x0d4]
909 +/*  setmem /32 0x140000d8 = 0x00000001 */
910 +       ldr r1, =0x00000001
911 +       str r1, [r0, #0x0d8]
912 +/* setmem /32 0x140000dc = 0x0000ffff */
913 +       ldr r1, =0x0000ffff
914 +       str r1, [r0, #0x0dc]
915 +/* setmem /32 0x140000e0 = 0x0000ffff */
916 +       ldr r1, =0x0000ffff
917 +       str r1, [r0, #0x0e0]
918 +/* setmem /32 0x140000e4 = 0x02020000 */
919 +       ldr r1, =0x02020000
920 +       str r1, [r0, #0x0e4]
921 +/* setmem /32 0x140000e8 = 0x02020202 */
922 +       ldr r1, =0x02020202
923 +       str r1, [r0, #0x0e8]
924 +/* setmem /32 0x140000ec = 0x00000202 */
925 +       ldr r1, =0x00000202
926 +       str r1, [r0, #0x0ec]
927 +/* setmem /32 0x140000f0 = 0x01010064 */
928 +       ldr r1, =0x01010064
929 +       str r1, [r0, #0x0f0]
930 +/* setmem /32 0x140000f4 = 0x01010101 */
931 +       ldr r1, =0x01010101
932 +       str r1, [r0, #0x0f4]
933 +/* setmem /32 0x140000f8 = 0x00010101 */
934 +       ldr r1, =0x00010101
935 +       str r1, [r0, #0x0f8]
936 +/* setmem /32 0x140000fc = 0x00000064 */
937 +       ldr r1, =0x00000064
938 +       str r1, [r0, #0x0fc]
939 +/* setmem /32 0x14000104 = 0x02000602 */
940 +       ldr r1, =0x02000602
941 +       str r1, [r0, #0x0104]
942 +/* setmem /32 0x14000108 = 0x06120000 */
943 +       ldr r1, =0x06120000
944 +       str r1, [r0, #0x0108]
945 +/* setmem /32 0x1400010c = 0x06120612 */
946 +       ldr r1, =0x06120612
947 +       str r1, [r0, #0x010c]
948 +/* setmem /32 0x14000110 = 0x06120612 */
949 +       ldr r1, =0x06120612
950 +       str r1, [r0, #0x0110]
951 +/* setmem /32 0x14000114 = 0x01030612 */
952 +       ldr r1, =0x01030612
953 +       str r1, [r0, #0x0114]
954 +/* setmem /32 0x14000118 = 0x01010002 */
955 +       ldr r1, =0x01010002
956 +       str r1, [r0, #0x0118]
957 +
958 +/*=============================================================
959 + *  DDR PHY setting
960 + *===========================================================*/
961 +
962 +/* setmem /32 0x14000200 = 0x00000000 */
963 +       ldr r1, =0x00000000
964 +       str r1, [r0, #0x200]
965 +/* setmem /32 0x14000204 = 0x00000000 */
966 +       ldr r1, =0x00000000
967 +       str r1, [r0, #0x0204]
968 +
969 +/* setmem /32 0x14000208 = 0xf5002725 */
970 +       ldr r1, =0xf5002725
971 +       str r1, [r0, #0x0208]
972 +/* setmem /32 0x14000210 = 0xf5002725 */
973 +       ldr r1, =0xf5002725
974 +       str r1, [r0, #0x210]
975 +/* setmem /32 0x14000218 = 0xf5002725 */
976 +       ldr r1, =0xf5002725
977 +       str r1, [r0, #0x218]
978 +/* setmem /32 0x14000220 = 0xf5002725 */
979 +       ldr r1, =0xf5002725
980 +       str r1, [r0, #0x0220]
981 +/* setmem /32 0x14000228 = 0xf5002725 */
982 +       ldr r1, =0xf5002725
983 +       str r1, [r0, #0x0228]
984 +
985 +/* setmem /32 0x1400020c = 0x070002d0 */
986 +       ldr r1, =0x070002d0
987 +       str r1, [r0, #0x020c]
988 +
989 +/* setmem /32 0x14000214 = 0x074002d0 */
990 +       ldr r1, =0x074002d0
991 +       str r1, [r0, #0x0214]
992 +
993 +/* setmem /32 0x1400021c = 0x074002d0 */
994 +       ldr r1, =0x074002d0
995 +       str r1, [r0, #0x021c]
996 +
997 +/* setmem /32 0x14000224 = 0x074002d0 */
998 +       ldr r1, =0x074002d0
999 +       str r1, [r0, #0x0224]
1000 +
1001 +/* setmem /32 0x1400022c = 0x074002d0 */
1002 +       ldr r1, =0x074002d0
1003 +       str r1, [r0, #0x022c]
1004 +/* setmem /32 0x14000230 = 0x00000000 */
1005 +       ldr r1, =0x00000000
1006 +       str r1, [r0, #0x0230]
1007 +/* setmem /32 0x14000234 = 0x00800006 */
1008 +       ldr r1, =0x00800006
1009 +       str r1, [r0, #0x0234]
1010 +
1011 +/* setmem /32 0x14000238 = 0x200e1014 */
1012 +       ldr r1, =0x200e1014
1013 +       str r1, [r0, #0x0238]
1014 +/* setmem /32 0x14000240 = 0x200e1014 */
1015 +       ldr r1, =0x200e1014
1016 +       str r1, [r0, #0x0240]
1017 +/* setmem /32 0x14000248 = 0x200e1014 */
1018 +       ldr r1, =0x200e1014
1019 +       str r1, [r0, #0x0248]
1020 +/* setmem /32 0x14000250 = 0x200e1014 */
1021 +       ldr r1, =0x200e1014
1022 +       str r1, [r0, #0x0250]
1023 +/* setmem /32 0x14000258 = 0x200e1014 */
1024 +       ldr r1, =0x200e1014
1025 +       str r1, [r0, #0x0258]
1026 +
1027 +/* setmem /32 0x1400023c = 0x000d9f01 */
1028 +       ldr r1, =0x000d9f01
1029 +       str r1, [r0, #0x023c]
1030 +/* setmem /32 0x14000244 = 0x000d9f01 */
1031 +       ldr r1, =0x000d9f01
1032 +       str r1, [r0, #0x0244]
1033 +/* setmem /32 0x1400024c = 0x000d9f01 */
1034 +       ldr r1, =0x000d9f01
1035 +       str r1, [r0, #0x024c]
1036 +/* setmem /32 0x14000254 = 0x000d9f01 */
1037 +       ldr r1, =0x000d9f01
1038 +       str r1, [r0, #0x0254]
1039 +/* setmem /32 0x1400025c = 0x000d9f01 */
1040 +       ldr r1, =0x000d9f01
1041 +       str r1, [r0, #0x025c]
1042 +
1043 +/* Start ddr */
1044 +/* setmem /32 0x14000000 = 0x00000101  // bit[0]: start */
1045 +       ldr r1, =0x00000101
1046 +       str r1, [r0, #0x0]
1047 +/* poll to make sure it is done */
1048 +1:
1049 +       ldr r1, [r0, #0xa8]
1050 +       ands r1, r1, #0x10
1051 +       beq 1b
1052  
1053  #endif
1054  
1055 +/*
1056 + * The following is to fill in those arguments for this ROM function
1057 + * pu_irom_hwcnfg_setup(void **start, size_t *bytes, const void *boot_data)
1058 + *
1059 + * This function is used to copy data from the storage media into DDR.
1060 +
1061 + * start - Initial (possibly partial) image load address on entry.
1062 + * Final image load address on exit.
1063 + * bytes - Initial (possibly partial) image size on entry.
1064 + * Final image size on exit.
1065 + * boot_data - Initial @ref ivt Boot Data load address.
1066 + */
1067 +       adr r0, DDR_DEST_ADDR
1068 +       adr r1, COPY_SIZE
1069 +       adr r2, BOOT_DATA
1070 +
1071 +before_calling_rom___pu_irom_hwcnfg_setup:
1072 +       mov r4, #0x2a00
1073 +       add r4, r4, #0x19
1074 +       blx r4 // This address might change in future ROM versions
1075 +after_calling_rom___pu_irom_hwcnfg_setup:
1076 +
1077 +
1078 +/* To return to ROM from plugin, we need to fill in these argument.
1079 + * Here is what need to do:
1080 + * Need to construct the paramters for this function before return to ROM:
1081 + * plugin_download(void **start, size_t *bytes, UINT32 *ivt_offset)
1082 + */
1083 +       pop {r0-r2, lr}
1084 +       ldr r3, DDR_DEST_ADDR
1085 +       str r3, [r0]
1086 +       ldr r3, COPY_SIZE
1087 +       str r3, [r1]
1088 +       mov r3, #0x400  /* Point to the second IVT table at offset 0x42C */
1089 +       add r3, r3, #0x2C
1090 +       str r3, [r2]
1091 +       mov r0, #1
1092 +       bx lr          /* return back to ROM code */
1093 +
1094 +DDR_DEST_ADDR:    .word   0x77800000
1095 +COPY_SIZE:        .word   0x40000
1096 +BOOT_DATA:        .word   0x77800000
1097 +                  .word   0x40000 /*data be copied by pu_irom_hwcnfg_setup()*/
1098 +                  .word   0
1099 +
1100  #endif
1101 -- 
1102 1.5.4.4
1103