]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - board/karo/tx53/lowlevel_init.S
add TX53 support
[karo-tx-uboot.git] / board / karo / tx53 / lowlevel_init.S
1 #include <config.h>
2 #include <configs/tx53.h>
3 #include <asm/arch/imx-regs.h>
4
5 #define DEBUG_LED_BIT                   20
6 #define LED_GPIO_BASE                   GPIO2_BASE_ADDR
7 #define LED_MUX_OFFSET                  0x174
8 #define LED_MUX_MODE                    0x11
9
10 #define DCDGEN(type, addr, data)  .long type, addr, data
11
12 #define SDRAM_CLK               CONFIG_SYS_SDRAM_CLK
13
14 #ifdef PHYS_SDRAM_2_SIZE
15 #define SDRAM_SIZE              (PHYS_SDRAM_1_SIZE + PHYS_SDRAM_2_SIZE)
16 #else
17 #define SDRAM_SIZE              PHYS_SDRAM_1_SIZE
18 #endif
19
20 //#define ESDCTL_BASE_ADDR      0x63fd9000
21 #define REG_ESDCTL0             0x00
22 #define REG_ESDCFG0             0x04
23 #define REG_ESDCTL1             0x08
24 #define REG_ESDCFG1             0x0c
25 #define REG_ESDMISC             0x10
26 #define REG_ESDSCR              0x14
27 #define REG_ESDGPR              0x34
28
29 //#define IOMUXC_BASE_ADDR      0x53fa8000
30
31 #define CPU_2_BE_32(l)                  \
32         ((((l) << 24) & 0xFF000000) |   \
33         (((l) << 8) & 0x00FF0000) |     \
34         (((l) >> 8) & 0x0000FF00) |     \
35         (((l) >> 24) & 0x000000FF))
36
37 #define MXC_DCD_ITEM(addr, val)         \
38         .word   CPU_2_BE_32(addr), CPU_2_BE_32(val)
39
40 #define MXC_DCD_CMD_SZ_BYTE             1
41 #define MXC_DCD_CMD_SZ_SHORT            2
42 #define MXC_DCD_CMD_SZ_WORD             4
43 #define MXC_DCD_CMD_FLAG_WRITE          0x0
44 #define MXC_DCD_CMD_FLAG_CLR            0x1
45 #define MXC_DCD_CMD_FLAG_SET            0x3
46 #define MXC_DCD_CMD_FLAG_CHK_ANY        (1 << 0)
47 #define MXC_DCD_CMD_FLAG_CHK_SET        (1 << 1)
48 #define MXC_DCD_CMD_FLAG_CHK_CLR        (0 << 1)
49
50 #define MXC_DCD_CMD_WRT(type, flags, next)                                      \
51         .word   CPU_2_BE_32((0xcc << 24) | (((next) - .) << 8) | ((flags) << 3) | (type))
52
53 #define MXC_DCD_CMD_CHK(type, flags, addr, mask)                                \
54         .word   CPU_2_BE_32((0xcf << 24) | (12 << 8) | ((flags) << 3) | (type)),\
55                 CPU_2_BE_32(addr), CPU_2_BE_32(mask)
56
57 #define MXC_DCD_CMD_CHK_CNT(type, flags, addr, mask, count)                     \
58         .word   CPU_2_BE_32((0xcf << 24) | (16 << 8) | ((flags) << 3) | (type)),\
59                 CPU_2_BE_32(addr), CPU_2_BE_32(mask), CPU_2_BE_32(count)
60
61 #define MXC_DCD_CMD_NOP()                                                       \
62         .word   CPU_2_BE_32((0xc0 << 24) | (4 << 8))
63
64 #define CK_TO_NS(ck)    (((ck) * 1000 + SDRAM_CLK / 2) / SDRAM_CLK)
65 #define NS_TO_CK(ns)    (((ns) * SDRAM_CLK + 999) / 1000)
66
67         .macro          CK_VAL, name, clks, offs, max
68         .iflt           \clks - \offs
69         .set            \name, 0
70         .else
71         .ifle           \clks - \offs - \max
72         .set            \name, \clks - \offs
73         .endif
74         .endif
75         .endm
76
77         .macro          NS_VAL, name, ns, offs, max
78         .iflt           \ns - \offs
79         .set            \name, 0
80         .else
81         CK_VAL          \name, NS_TO_CK(\ns), \offs, \max
82         .endif
83         .endm
84
85         .macro          CK_MAX, name, ck1, ck2, offs, max
86         .ifgt           \ck1 - \ck2
87         CK_VAL          \name, \ck1, \offs, \max
88         .else
89         CK_VAL          \name, \ck2, \offs, \max
90         .endif
91         .endm
92
93 #define ESDMISC_DDR_TYPE_DDR3           0
94 #define ESDMISC_DDR_TYPE_LPDDR2         1
95 #define ESDMISC_DDR_TYPE_DDR2           2
96
97 #define DIV_ROUND_UP(m,d)               (((m) + (d) - 1) / (d))
98
99 #define CKIL_FREQ_Hz                    32768
100 #define ESDOR_CLK_PERIOD_ns             (1000000000 / CKIL_FREQ_Hz / 2) /* base clock for ESDOR values */
101
102 /* DDR3 SDRAM */
103 #if SDRAM_SIZE > RAM_BANK0_SIZE
104 #define BANK_ADDR_BITS                  2
105 #else
106 #define BANK_ADDR_BITS                  1
107 #endif
108 #define SDRAM_BURST_LENGTH              8
109 #define RALAT                           5
110 #define WALAT                           1
111 #define ADDR_MIRROR                     0
112 #define DDR_TYPE                        ESDMISC_DDR_TYPE_DDR3
113
114 /* 512/1024MiB SDRAM: NT5CB128M16P-CG */
115 /* ESDCFG0 0x0c */
116 NS_VAL  tRFC,   160, 1, 255             /* clks - 1 (0..255) */
117 CK_MAX  tXS,    tRFC + 1 + NS_TO_CK(10), 5, 1, 255 /* clks - 1 (0..255) tRFC + 10 */
118 CK_MAX  tXP,    3, NS_TO_CK(6), 1, 7    /* clks - 1 (0..7) */ /* max(6ns, 3*CK) */
119 CK_MAX  tXPDLL, NS_TO_CK(24), 2, 1, 15  /* clks - 1 (0..15) */
120 NS_VAL  tFAW,   45, 1, 31               /* clks - 1 (0..31) */
121 CK_VAL  tCL,    9, 3, 8                 /* clks - 3 (0..8) CAS Latency */
122
123 /* ESDCFG1 0x10 */
124 NS_VAL  tRCD,   14, 1, 7                /* clks - 1 (0..7) */
125 NS_VAL  tRP,    14, 1, 7                /* clks - 1 (0..7) */
126 NS_VAL  tRC,    50, 1, 31               /* clks - 1 (0..31) */
127 NS_VAL  tRAS,   36, 1, 31               /* clks - 1 (0..31) */
128 CK_VAL  tRPA,   0, 0, 1                 /* clks     (0..1) */
129 NS_VAL  tWR,    15, 1, 15               /* clks - 1 (0..15) */
130 CK_VAL  tMRD,   4, 1, 15                /* clks - 1 (0..15) */
131 CK_VAL  tCWL,   5, 2, 6                 /* clks - 2 (0..6) */
132
133 /* ESDCFG2 0x14 */
134 CK_VAL  tDLLK,  512, 1, 511             /* clks - 1 (0..511) */
135 CK_MAX  tRTP,   4, NS_TO_CK(8), 1, 7    /* clks - 1 (0..7) */
136 CK_MAX  tWTR,   4, NS_TO_CK(8), 1, 7    /* clks - 1 (0..7) */
137 CK_MAX  tRRD,   4, NS_TO_CK(8), 1, 7    /* clks - 1 (0..7) */
138
139 /* ESDOR 0x30 */
140 CK_MAX  tXPR,   NS_TO_CK(CK_TO_NS(tRFC + 1) + 10), 5, 1, 255 /* clks - 1 (0..255) max(tRFC + 10, 5CK) */
141
142 /* ESDOTC 0x08 */
143 NS_VAL  tAOFPD, 9, 1, 7                 /* clks - 1 (0..7) */
144 NS_VAL  tAONPD, 9, 1, 7                 /* clks - 1 (0..7) */
145 CK_VAL  tANPD,  tCWL, 1, 15             /* clks - 1 (0..15) */
146 CK_VAL  tAXPD,  tCWL, 1, 15             /* clks - 1 (0..15) */
147 CK_VAL  tODTLon tCWL - 1, 1, 7          /* clks - 1 (0..7) */
148 CK_VAL  tODTLoff tCWL - 1, 1, 31        /* clks - 1 (0..31) */
149
150 #define tSDE_RST                        (DIV_ROUND_UP(200000, ESDOR_CLK_PERIOD_ns) + 1)
151
152                                         /* Add an extra (or two?) ESDOR_CLK_PERIOD_ns according to
153                                          * erroneous Erratum Engcm12377
154                                          */
155 #define tRST_CKE                        (DIV_ROUND_UP(500000 + 2 * ESDOR_CLK_PERIOD_ns, ESDOR_CLK_PERIOD_ns) + 1)
156
157 #define ROW_ADDR_BITS                   14
158 #define COL_ADDR_BITS                   10
159
160         .iflt   tWR - 7
161         .set    mrs_val, (0x8080 | \
162                         (3 << 4) /* MRS command */ | \
163                         ((1 << 8) /* DLL Reset */ | \
164                         ((tWR + 1 - 4) << 9) | \
165                         (((tCL + 3) - 4) << 4)) << 16)
166         .else
167         .set    mrs_val, (0x8080 | \
168                         (3 << 4) /* MRS command */ | \
169                         ((1 << 8) /* DLL Reset */ | \
170                         (((tWR + 1) / 2) << 9) | \
171                         (((tCL + 3) - 4) << 4)) << 16)
172         .endif
173 #define ESDSCR_MRS_VAL(cs)      (mrs_val | ((cs) << 3))
174
175 #define ESDCFG0_VAL     (               \
176         (tRFC << 24) |                  \
177         (tXS << 16) |                   \
178         (tXP << 13) |                   \
179         (tXPDLL << 9) |                 \
180         (tFAW << 4) |                   \
181         (tCL << 0))                     \
182
183 #define ESDCFG1_VAL     (               \
184         (tRCD << 29) |                  \
185         (tRP << 26) |                   \
186         (tRC << 21) |                   \
187         (tRAS << 16) |                  \
188         (tRPA << 15) |                  \
189         (tWR << 9) |                    \
190         (tMRD << 5) |                   \
191         (tCWL << 0))                    \
192
193 #define ESDCFG2_VAL     (               \
194         (tDLLK << 16) |                 \
195         (tRTP << 6) |                   \
196         (tWTR << 3) |                   \
197         (tRRD << 0))
198
199 #define BURST_LEN                       (SDRAM_BURST_LENGTH / 8) /* 0: 4 byte 1: 8 byte */
200 #define ESDCTL_VAL                      (((ROW_ADDR_BITS - 11) << 24) | \
201                                         ((COL_ADDR_BITS - 9) << 20) | \
202                                         (BURST_LEN << 19) | \
203                                         (1 << 16) | /* SDRAM bus width */ \
204                                         ((-1) << (32 - BANK_ADDR_BITS)))
205
206 #define ESDMISC_VAL                     ((1 << 12) | \
207                                         (0x3 << 9) | \
208                                         (RALAT << 6) | \
209                                         (WALAT << 16) | \
210                                         (ADDR_MIRROR << 19) | \
211                                         (DDR_TYPE << 3))
212
213 #define ESDOR_VAL               ((tXPR << 16) | (tSDE_RST << 8) | (tRST_CKE << 0))
214
215 #define ESDOTC_VAL              ((tAOFPD << 27) |       \
216                                 (tAONPD << 24) |        \
217                                 (tANPD << 20) |         \
218                                 (tAXPD << 16) |         \
219                                 (tODTLon << 12) |       \
220                                 (tODTLoff << 4))
221
222 fcb_start:
223         b       _start
224         .word   0x20424346      /* "FCB " marker */
225         .word   0x01    /* FCB version number */
226         .org    0x68
227         .word   0x0     /* primary image starting page number */
228         .word   0x0     /* secondary image starting page number */
229         .word   0x6b
230         .word   0x6b
231         .word   0x0     /* DBBT start page (0 == NO DBBT) */
232         .word   0       /* Bad block marker offset in main area (unused) */
233         .org    0xac
234         .word   0       /* BI Swap disabled */
235         .word   0       /* Bad Block marker offset in spare area */
236 fcb_end:
237
238         .org    0x400
239 ivt_header:
240         .word   CPU_2_BE_32((0xd1 << 24) | (32 << 8) | 0x40)
241 app_start_addr:
242         .long   _start
243         .long   0x0
244 dcd_ptr:
245         .long   dcd_hdr
246 boot_data_ptr:
247         .word   boot_data
248 self_ptr:
249         .word   ivt_header
250 app_code_csf:
251         .word   0x0
252         .word   0x0
253 boot_data:
254         .long   fcb_start
255 image_len:
256         .long   CONFIG_U_BOOT_IMG_SIZE
257 plugin:
258         .word   0
259 ivt_end:
260 #define DCD_VERSION     0x40
261
262 #define CLKCTL_CCGR0    0x68
263 #define CLKCTL_CCGR1    0x6c
264 #define CLKCTL_CCGR2    0x70
265 #define CLKCTL_CCGR3    0x74
266 #define CLKCTL_CCGR4    0x78
267 #define CLKCTL_CCGR5    0x7c
268 #define CLKCTL_CCGR6    0x80
269 #define CLKCTL_CCGR7    0x84
270 #define CLKCTL_CMEOR    0x88
271
272 dcd_hdr:
273         .word   CPU_2_BE_32((0xd2 << 24) | ((dcd_end - .) << 8) | DCD_VERSION)
274 dcd_start:
275         MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE, zq_calib)
276         /* disable all irrelevant clocks */
277         MXC_DCD_ITEM(CCM_BASE_ADDR + CLKCTL_CCGR0, 0xffcf0fff)
278         MXC_DCD_ITEM(CCM_BASE_ADDR + CLKCTL_CCGR1, 0x000fffc3)
279         MXC_DCD_ITEM(CCM_BASE_ADDR + CLKCTL_CCGR2, 0x033c0000)
280         MXC_DCD_ITEM(CCM_BASE_ADDR + CLKCTL_CCGR3, 0x000000ff)
281         MXC_DCD_ITEM(CCM_BASE_ADDR + CLKCTL_CCGR4, 0x00000000)
282         MXC_DCD_ITEM(CCM_BASE_ADDR + CLKCTL_CCGR5, 0x00fff033)
283         MXC_DCD_ITEM(CCM_BASE_ADDR + CLKCTL_CCGR6, 0x0f00030f)
284         MXC_DCD_ITEM(CCM_BASE_ADDR + CLKCTL_CCGR7, 0xfff00000)
285         MXC_DCD_ITEM(CCM_BASE_ADDR + CLKCTL_CMEOR, 0x00000000)
286
287         MXC_DCD_ITEM(IOMUXC_BASE_ADDR + LED_MUX_OFFSET, LED_MUX_MODE)   /* EIM_D18 => GPIO2[20] STK5-LED */
288         MXC_DCD_ITEM(IOMUXC_BASE_ADDR + 0x318, 0x11)    /* GPIO_1 => LCD Backlight */
289
290         MXC_DCD_ITEM(0x63fd800c, 0x00000000)    /* M4IF: MUX NFC signals on WEIM */
291 #if SDRAM_CLK > 333
292         MXC_DCD_ITEM(0x53fd4014, 0x00888944)    /* CBCDR */
293 #else
294         MXC_DCD_ITEM(0x53fd4014, 0x00888644)    /* CBCDR */
295 #endif
296         MXC_DCD_ITEM(0x53fd4018, 0x00016154)    /* CBCMR */
297
298         MXC_DCD_ITEM(0x53fd401c, 0xa6a2a020)    /* CSCMR1 */
299         MXC_DCD_ITEM(0x53fd4020, 0xb6b12f0a)    /* CSCMR2 */
300         MXC_DCD_ITEM(0x53fd4024, 0x00080b18)    /* CSCDR1 */
301
302 #define DDR_SEL_VAL     2
303 #define DSE_VAL         5
304 #define ODT_VAL         2
305
306 #define DDR_SEL_SHIFT   25
307 #define ODT_SHIFT       22
308 #define DSE_SHIFT       19
309 #define DDR_INPUT_SHIFT 9
310 #define HYS_SHIFT       8
311 #define PKE_SHIFT       7
312 #define PUE_SHIFT       6
313 #define PUS_SHIFT       4
314
315 #define DDR_SEL_MASK    (DDR_SEL_VAL << DDR_SEL_SHIFT)
316 #define DSE_MASK        (DSE_VAL << DSE_SHIFT)
317 #define ODT_MASK        (ODT_VAL << ODT_SHIFT)
318
319 #define DQM_VAL         DSE_MASK
320 #define SDQS_VAL        (ODT_MASK | DSE_MASK | (1 << PUE_SHIFT))
321 #define SDODT_VAL       (DSE_MASK | (0 << PKE_SHIFT) | (1 << PUE_SHIFT) | (0 << PUS_SHIFT))
322 #define SDCLK_VAL       DSE_MASK
323 #define SDCKE_VAL       ((1 << PKE_SHIFT) | (1 << PUE_SHIFT) | (0 << PUS_SHIFT))
324
325         MXC_DCD_ITEM(0x53fa8724, DDR_SEL_MASK) /* DDR_TYPE: DDR3 */
326         MXC_DCD_ITEM(0x53fa86f4, 0 << DDR_INPUT_SHIFT) /* DDRMODE_CTL */
327         MXC_DCD_ITEM(0x53fa8714, 0 << DDR_INPUT_SHIFT) /* GRP_DDRMODE */
328         MXC_DCD_ITEM(0x53fa86fc, 1 << PKE_SHIFT) /* GRP_DDRPKE */
329         MXC_DCD_ITEM(0x53fa8710, 0 << HYS_SHIFT) /* GRP_DDRHYS */
330         MXC_DCD_ITEM(0x53fa8708, 1 << PUE_SHIFT) /* GRP_DDRPK */
331
332         MXC_DCD_ITEM(0x53fa8584, DQM_VAL) /* DQM0 */
333         MXC_DCD_ITEM(0x53fa8594, DQM_VAL) /* DQM1 */
334         MXC_DCD_ITEM(0x53fa8560, DQM_VAL) /* DQM2 */
335         MXC_DCD_ITEM(0x53fa8554, DQM_VAL) /* DQM3 */
336
337         MXC_DCD_ITEM(0x53fa857c, SDQS_VAL) /* SDQS0 */
338         MXC_DCD_ITEM(0x53fa8590, SDQS_VAL) /* SDQS1 */
339         MXC_DCD_ITEM(0x53fa8568, SDQS_VAL) /* SDQS2 */
340         MXC_DCD_ITEM(0x53fa8558, SDQS_VAL) /* SDQS3 */
341
342         MXC_DCD_ITEM(0x53fa8580, SDODT_VAL) /* SDODT0 */
343         MXC_DCD_ITEM(0x53fa8578, SDCLK_VAL) /* SDCLK0 */
344
345         MXC_DCD_ITEM(0x53fa8564, SDODT_VAL) /* SDODT1 */
346         MXC_DCD_ITEM(0x53fa8570, SDCLK_VAL) /* SDCLK1 */
347
348         MXC_DCD_ITEM(0x53fa858c, SDCKE_VAL) /* SDCKE0 */
349         MXC_DCD_ITEM(0x53fa855c, SDCKE_VAL) /* SDCKE1 */
350
351         MXC_DCD_ITEM(0x53fa8574, DSE_MASK) /* DRAM_CAS */
352         MXC_DCD_ITEM(0x53fa8588, DSE_MASK) /* DRAM_RAS */
353
354         MXC_DCD_ITEM(0x53fa86f0, DSE_MASK) /* GRP_ADDDS */
355         MXC_DCD_ITEM(0x53fa8720, DSE_MASK) /* GRP_CTLDS */
356         MXC_DCD_ITEM(0x53fa8718, DSE_MASK) /* GRP_B0DS */
357         MXC_DCD_ITEM(0x53fa871c, DSE_MASK) /* GRP_B1DS */
358         MXC_DCD_ITEM(0x53fa8728, DSE_MASK) /* GRP_B2DS */
359         MXC_DCD_ITEM(0x53fa872c, DSE_MASK) /* GRP_B3DS */
360
361         /* calibration defaults */
362         MXC_DCD_ITEM(0x63fd904c, 0x001f001f)
363         MXC_DCD_ITEM(0x63fd9050, 0x001f001f)
364         MXC_DCD_ITEM(0x63fd907c, 0x011e011e)
365         MXC_DCD_ITEM(0x63fd9080, 0x011f0120)
366         MXC_DCD_ITEM(0x63fd9088, 0x3a393d3b)
367         MXC_DCD_ITEM(0x63fd9090, 0x3f3f3f3f)
368
369         MXC_DCD_ITEM(0x63fd9018, ESDMISC_VAL)
370         MXC_DCD_ITEM(0x63fd9000, ESDCTL_VAL)
371         MXC_DCD_ITEM(0x63fd900c, ESDCFG0_VAL)
372         MXC_DCD_ITEM(0x63fd9010, ESDCFG1_VAL)
373         MXC_DCD_ITEM(0x63fd9014, ESDCFG2_VAL)
374
375         MXC_DCD_ITEM(0x63fd902c, 0x000026d2)
376         MXC_DCD_ITEM(0x63fd9030, ESDOR_VAL)
377         MXC_DCD_ITEM(0x63fd9008, ESDOTC_VAL)
378         MXC_DCD_ITEM(0x63fd9004, 0x00030012)
379
380         /* MR0 - CS0 */
381         MXC_DCD_ITEM(0x63fd901c, 0x00008032) /* MRS: MR2 */
382         MXC_DCD_ITEM(0x63fd901c, 0x00008033) /* MRS: MR3 */
383         MXC_DCD_ITEM(0x63fd901c, 0x00408031) /* MRS: MR1 */
384         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0)) /* MRS: MR0 */
385         /* MR0 - CS1 */
386 #if BANK_ADDR_BITS > 1
387         MXC_DCD_ITEM(0x63fd901c, 0x0000803a) /* MRS: MR2 */
388         MXC_DCD_ITEM(0x63fd901c, 0x0000803b) /* MRS: MR3 */
389         MXC_DCD_ITEM(0x63fd901c, 0x00408039) /* MRS: MR1 */
390         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(1)) /* MRS: MR0 */
391 #endif
392         MXC_DCD_ITEM(0x63fd9020, 0x00005800) /* refresh interval */
393         MXC_DCD_ITEM(0x63fd9058, 0x00011112)
394
395         MXC_DCD_ITEM(0x63fd90d0, 0x00000003) /* select default compare pattern for calibration */
396
397         /* ZQ calibration */
398         MXC_DCD_ITEM(0x63fd901c, 0x04008010) /* precharge all */
399         MXC_DCD_ITEM(0x63fd901c, 0x00008040) /* MRS: ZQ calibration */
400         MXC_DCD_ITEM(0x63fd9040, 0x0539002b) /* Force ZQ calibration */
401 zq_calib:
402         MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, 0, 0x63fd9040, 0x00010000)
403         MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE, wl_calib)
404
405         /* Write Leveling */
406         MXC_DCD_ITEM(0x63fd901c, 0x00048033) /* MRS: select MPR */
407         MXC_DCD_ITEM(0x63fd901c, 0x00848231) /* MRS: start write leveling */
408         MXC_DCD_ITEM(0x63fd901c, 0x00000000)
409         MXC_DCD_ITEM(0x63fd9048, 0x00000001)
410 wl_calib:
411         MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, 0, 0x63fd9048, 0x00000001)
412         MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE, dqs_calib)
413         MXC_DCD_ITEM(0x63fd901c, 0x00048031) /* MRS: end write leveling */
414         MXC_DCD_ITEM(0x63fd901c, 0x00008033) /* MRS: select normal data path */
415
416         /* DQS calibration */
417         MXC_DCD_ITEM(0x63fd901c, 0x04008010) /* precharge all */
418         MXC_DCD_ITEM(0x63fd901c, 0x00048033) /* MRS: select MPR */
419         MXC_DCD_ITEM(0x63fd907c, 0x90000000) /* reset RD fifo and start DQS calib. */
420 dqs_calib:
421         MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, 0, 0x63fd907c, 0x90000000)
422         MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE, wr_dl_calib)
423         MXC_DCD_ITEM(0x63fd901c, 0x00008033) /* MRS: select normal data path */
424
425         /* WR DL calibration */
426         MXC_DCD_ITEM(0x63fd901c, 0x00000000)
427         MXC_DCD_ITEM(0x63fd901c, 0x04008010) /* precharge all */
428         MXC_DCD_ITEM(0x63fd901c, 0x00048033) /* MRS: select MPR */
429         MXC_DCD_ITEM(0x63fd90a4, 0x00000010)
430 wr_dl_calib: /* 6c4 */
431         MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, 0, 0x63fd90a4, 0x00000010)
432         MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE, rd_dl_calib)
433         MXC_DCD_ITEM(0x63fd901c, 0x00008033) /* MRS: select normal data path */
434
435         /* RD DL calibration */
436         MXC_DCD_ITEM(0x63fd901c, 0x04008010) /* precharge all */
437         MXC_DCD_ITEM(0x63fd901c, 0x00048033) /* MRS: select MPR */
438         MXC_DCD_ITEM(0x63fd90a0, 0x00000010)
439 rd_dl_calib: /* 70c */
440         MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, 0, 0x63fd90a0, 0x00000010)
441         MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE, dcd_end)
442         MXC_DCD_ITEM(0x63fd901c, 0x00008033) /* MRS: select normal data path */
443
444         MXC_DCD_ITEM(0x63fd901c, 0x00000000)
445
446         MXC_DCD_ITEM(0x53fa8004, 0x00194005)    @ set LDO to 1.3V
447
448         /* setup NFC pads */
449         /* MUX_SEL */
450         MXC_DCD_ITEM(0x53fa819c, 0x00000000)    @ EIM_DA0
451         MXC_DCD_ITEM(0x53fa81a0, 0x00000000)    @ EIM_DA1
452         MXC_DCD_ITEM(0x53fa81a4, 0x00000000)    @ EIM_DA2
453         MXC_DCD_ITEM(0x53fa81a8, 0x00000000)    @ EIM_DA3
454         MXC_DCD_ITEM(0x53fa81ac, 0x00000000)    @ EIM_DA4
455         MXC_DCD_ITEM(0x53fa81b0, 0x00000000)    @ EIM_DA5
456         MXC_DCD_ITEM(0x53fa81b4, 0x00000000)    @ EIM_DA6
457         MXC_DCD_ITEM(0x53fa81b8, 0x00000000)    @ EIM_DA7
458         MXC_DCD_ITEM(0x53fa81dc, 0x00000000)    @ WE_B
459         MXC_DCD_ITEM(0x53fa81e0, 0x00000000)    @ RE_B
460         MXC_DCD_ITEM(0x53fa8228, 0x00000000)    @ CLE
461         MXC_DCD_ITEM(0x53fa822c, 0x00000000)    @ ALE
462         MXC_DCD_ITEM(0x53fa8230, 0x00000000)    @ WP_B
463         MXC_DCD_ITEM(0x53fa8234, 0x00000000)    @ RB0
464         MXC_DCD_ITEM(0x53fa8238, 0x00000000)    @ CS0
465         /* PAD_CTL */
466         MXC_DCD_ITEM(0x53fa84ec, 0x000000e4)    @ EIM_DA0
467         MXC_DCD_ITEM(0x53fa84f0, 0x000000e4)    @ EIM_DA1
468         MXC_DCD_ITEM(0x53fa84f4, 0x000000e4)    @ EIM_DA2
469         MXC_DCD_ITEM(0x53fa84f8, 0x000000e4)    @ EIM_DA3
470         MXC_DCD_ITEM(0x53fa84fc, 0x000000e4)    @ EIM_DA4
471         MXC_DCD_ITEM(0x53fa8500, 0x000000e4)    @ EIM_DA5
472         MXC_DCD_ITEM(0x53fa8504, 0x000000e4)    @ EIM_DA6
473         MXC_DCD_ITEM(0x53fa8508, 0x000000e4)    @ EIM_DA7
474         MXC_DCD_ITEM(0x53fa852c, 0x00000004)    @ NANDF_WE_B
475         MXC_DCD_ITEM(0x53fa8530, 0x00000004)    @ NANDF_RE_B
476         MXC_DCD_ITEM(0x53fa85a0, 0x00000004)    @ NANDF_CLE_B
477         MXC_DCD_ITEM(0x53fa85a4, 0x00000004)    @ NANDF_ALE_B
478         MXC_DCD_ITEM(0x53fa85a8, 0x000000e4)    @ NANDF_WE_B
479         MXC_DCD_ITEM(0x53fa85ac, 0x000000e4)    @ NANDF_RB0
480         MXC_DCD_ITEM(0x53fa85b0, 0x00000004)    @ NANDF_CS0
481 dcd_end:
482         .ifgt   dcd_end - dcd_start - 1768
483         DCD too large!
484         .endif