]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - board/karo/tx53/lowlevel_init.S
15f2245c41b77ea65e894e08f1829a4932fcae91
[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 SDRAM_CLK               CONFIG_SYS_SDRAM_CLK
11 #define SDRAM_SIZE              (CONFIG_SYS_SDRAM_SIZE / SZ_1M)
12
13 #define REG_CCGR0               0x68
14 #define REG_CCGR1               0x6c
15 #define REG_CCGR2               0x70
16 #define REG_CCGR3               0x74
17 #define REG_CCGR4               0x78
18 #define REG_CCGR5               0x7c
19 #define REG_CCGR6               0x80
20 #define REG_CCGR7               0x84
21 #define REG_CMEOR               0x88
22
23 #define CPU_2_BE_32(l)                  \
24         ((((l) << 24) & 0xFF000000) |   \
25         (((l) << 8) & 0x00FF0000) |     \
26         (((l) >> 8) & 0x0000FF00) |     \
27         (((l) >> 24) & 0x000000FF))
28
29 /*
30 CCM register set                 0x53FD4000 0x53FD7FFF
31 EIM register set                 0x63FDA000 0x63FDAFFF
32 NANDFC register set              0xF7FF0000 0xF7FFFFFF
33 IOMUX Control (IOMUXC) registers 0x53FA8000 0x53FABFFF
34 DPLLC1 register                  0x63F80000 0x63F83FFF
35 DPLLC2 register                  0x63F84000 0x63F87FFF
36 DPLLC3 register                  0x63F88000 0x63F8BFFF
37 DPLLC4 register                  0x63F8C000 0x63F8FFFF
38 ESD RAM controller register      0x63FD9000 0x63FD9FFF
39 M4IF register                    0x63FD8000 0x63FD8FFF
40 DDR                              0x70000000 0xEFFFFFFF
41 EIM                              0xF0000000 0xF7FEFFFF
42 NANDFC Buffers                   0xF7FF0000 0xF7FFFFFF
43 IRAM Free Space                  0xF8006000 0xF8017FF0
44 GPU Memory                       0xF8020000 0xF805FFFF
45 */
46 #define CHECK_DCD_ADDR(a)       (                                       \
47         ((a) >= 0x53fd4000 && (a) <= 0x53fd7fff) /* CCM */ ||           \
48         ((a) >= 0x63fda000 && (a) <= 0x63fdafff) /* EIM (CS0) */ ||     \
49         ((a) >= 0x53fa8000 && (a) <= 0x53fabfff) /* IOMUXC */ ||        \
50         ((a) >= 0x63f80000 && (a) <= 0x63f8ffff) /* DPLLC1..4 */ ||             \
51         ((a) >= 0x63fd8000 && (a) <= 0x63fd9fff) /* M4IF & SDRAM Contr. */ || \
52         ((a) >= 0x70000000 && (a) <= 0xefffffff) /* SDRAM */ ||         \
53         ((a) >= 0xf0000000 && (a) <= 0xf7ffffff) /* EIM & NANDFC buffers */ || \
54         ((a) >= 0xf8006000 && (a) <= 0xf8017ff0) /* IRAM free space */ || \
55         ((a) >= 0xf8020000 && (a) <= 0xf805ffff) /* GPU RAM */)
56
57         .macro  mxc_dcd_item    addr, val
58         .ifne   CHECK_DCD_ADDR(\addr)
59         .word   CPU_2_BE_32(\addr), CPU_2_BE_32(\val)
60         .else
61         .error  "Address \addr not accessible from DCD"
62         .endif
63         .endm
64
65 #define MXC_DCD_ITEM(addr, val)         mxc_dcd_item    (addr), (val)
66
67 #define MXC_DCD_CMD_SZ_BYTE             1
68 #define MXC_DCD_CMD_SZ_SHORT            2
69 #define MXC_DCD_CMD_SZ_WORD             4
70 #define MXC_DCD_CMD_FLAG_WRITE          0x0
71 #define MXC_DCD_CMD_FLAG_CLR            0x1
72 #define MXC_DCD_CMD_FLAG_SET            0x3
73 #define MXC_DCD_CMD_FLAG_CHK_CLR        ((0 << 0) | (0 << 1))
74 #define MXC_DCD_CMD_FLAG_CHK_SET        ((0 << 0) | (1 << 1))
75 #define MXC_DCD_CMD_FLAG_CHK_ANY_CLR    ((1 << 0) | (0 << 1))
76 #define MXC_DCD_CMD_FLAG_CHK_ANY_SET    ((1 << 0) | (1 << 1))
77
78 #define MXC_DCD_START                                                   \
79         .word   CPU_2_BE_32((0xd2 << 24) | ((dcd_end - .) << 8) | DCD_VERSION) ; \
80 dcd_start:
81
82         .macro  MXC_DCD_END
83 1:
84         .ifgt   . - dcd_start - 1768
85         .error  "DCD too large!"
86         .endif
87 dcd_end:
88         .endm
89
90 #define MXC_DCD_CMD_WRT(type, flags)                                    \
91 1:      .word   CPU_2_BE_32((0xcc << 24) | ((1f - .) << 8) | ((flags) << 3) | (type))
92
93 #define MXC_DCD_CMD_CHK(type, flags, addr, mask)                        \
94 1:      .word   CPU_2_BE_32((0xcf << 24) | (12 << 8) | ((flags) << 3) | (type)), \
95                 CPU_2_BE_32(addr), CPU_2_BE_32(mask)
96
97 #define MXC_DCD_CMD_CHK_CNT(type, flags, addr, mask, count)             \
98 1:      .word   CPU_2_BE_32((0xcf << 24) | (16 << 8) | ((flags) << 3) | (type)), \
99                 CPU_2_BE_32(addr), CPU_2_BE_32(mask), CPU_2_BE_32(count)
100
101 #define MXC_DCD_CMD_NOP()                               \
102 1:      .word   CPU_2_BE_32((0xc0 << 24) | (4 << 8))
103
104
105 #define CK_TO_NS(ck)    (((ck) * 1000 + SDRAM_CLK / 2) / SDRAM_CLK)
106 #define NS_TO_CK(ns)    (((ns) * SDRAM_CLK + 999) / 1000)
107 #define NS_TO_CK10(ns)  DIV_ROUND_UP(NS_TO_CK(ns), 10)
108
109         .macro          CK_VAL, name, clks, offs, max
110         .iflt           \clks - \offs
111         .set            \name, 0
112         .else
113         .ifle           \clks - \offs - \max
114         .set            \name, \clks - \offs
115         .else
116         .error          "Value \clks out of range for parameter \name"
117         .endif
118         .endif
119         .endm
120
121         .macro          NS_VAL, name, ns, offs, max
122         .iflt           \ns - \offs
123         .set            \name, 0
124         .else
125         CK_VAL          \name, NS_TO_CK(\ns), \offs, \max
126         .endif
127         .endm
128
129         .macro          CK_MAX, name, ck1, ck2, offs, max
130         .ifgt           \ck1 - \ck2
131         CK_VAL          \name, \ck1, \offs, \max
132         .else
133         CK_VAL          \name, \ck2, \offs, \max
134         .endif
135         .endm
136
137 #define ESDMISC_DDR_TYPE_DDR3           0
138 #define ESDMISC_DDR_TYPE_LPDDR2         1
139 #define ESDMISC_DDR_TYPE_DDR2           2
140
141 #define DIV_ROUND_UP(m,d)               (((m) + (d) - 1) / (d))
142
143 #define CKIL_FREQ_Hz                    32768
144 #define ESDOR_CLK_PERIOD_ns             (1000000000 / CKIL_FREQ_Hz / 2) /* base clock for ESDOR values */
145
146 /* DDR3 SDRAM */
147 #define BANK_ADDR_BITS                  CONFIG_NR_DRAM_BANKS
148 #define SDRAM_BURST_LENGTH              8
149 #define RALAT                           5
150 #define WALAT                           0
151 #define BI_ON                           0
152 #define ADDR_MIRROR                     0
153 #define DDR_TYPE                        ESDMISC_DDR_TYPE_DDR3
154
155 /* 512/1024MiB SDRAM: NT5CB128M16FP-DII */
156 #if SDRAM_CLK > 666 && SDRAM_CLK <= 800
157 #define CL_VAL  11
158 #define CWL_VAL 8
159 #elif SDRAM_CLK > 533 && SDRAM_CLK <= 666
160 #define CL_VAL  9 // or 10
161 #define CWL_VAL 7
162 #elif SDRAM_CLK > 400 && SDRAM_CLK <= 533
163 #define CL_VAL  7 // or 8
164 #define CWL_VAL 6
165 #elif SDRAM_CLK > 333 && SDRAM_CLK <= 400
166 #define CL_VAL  6
167 #define CWL_VAL 5
168 #elif SDRAM_CLK >= 303 && SDRAM_CLK <= 333
169 #define CL_VAL  5
170 #define CWL_VAL 5
171 #else
172 #error SDRAM clock out of range: 303 .. 800
173 #endif
174
175 /* ESDCFG0 0x0c */
176 NS_VAL  tRFC,   160, 1, 255             /* clks - 1 (0..255) */
177 CK_MAX  tXS,    NS_TO_CK(CK_TO_NS(tRFC + 1) + 10), 5, 1, 255 /* clks - 1 (0..255) tRFC + 10 */
178 CK_MAX  tXP,    NS_TO_CK10(75), 3, 1, 7 /* clks - 1 (0..7) */ /* max(3tCK, 7.5ns) */
179 CK_MAX  tXPDLL, NS_TO_CK(24), 2, 1, 15  /* clks - 1 (0..15) */
180 NS_VAL  tFAW,   50, 1, 31               /* clks - 1 (0..31) */
181 CK_VAL  tCL,    CL_VAL, 3, 8            /* clks - 3 (0..8) CAS Latency */
182
183 /* ESDCFG1 0x10 */
184 CK_VAL  tRCD,   NS_TO_CK10(125), 1, 7   /* clks - 1 (0..7) */ /* 12.5 */
185 CK_VAL  tRP,    NS_TO_CK10(125), 1, 7   /* clks - 1 (0..7) */ /* 12.5 */
186 NS_VAL  tRC,    50, 1, 31               /* clks - 1 (0..31) */
187 CK_VAL  tRAS,   NS_TO_CK10(375), 1, 31  /* clks - 1 (0..31) */ /* 37.5 */
188 CK_VAL  tRPA,   1, 0, 1                 /* clks     (0..1) */
189 NS_VAL  tWR,    15, 1, 15               /* clks - 1 (0..15) */
190 CK_VAL  tMRD,   4, 1, 15                /* clks - 1 (0..15) */
191 CK_VAL  tCWL,   CWL_VAL, 2, 6           /* clks - 2 (0..6) */
192
193 /* ESDCFG2 0x14 */
194 CK_VAL  tDLLK,  512, 1, 511             /* clks - 1 (0..511) */
195 CK_MAX  tRTP,   NS_TO_CK10(75), 4, 1, 7 /* clks - 1 (0..7) */ /* max(4tCK, 7.5ns) */
196 CK_MAX  tWTR,   NS_TO_CK10(75), 4, 1, 7 /* clks - 1 (0..7) */ /* max(4tCK, 7.5ns) */
197 CK_MAX  tRRD,   NS_TO_CK(10), 4, 1, 7   /* clks - 1 (0..7) */
198
199 /* ESDOR 0x30 */
200 CK_MAX  tXPR,   NS_TO_CK(CK_TO_NS(tRFC + 1) + 10), 5, 1, 255 /* clks - 1 (0..255) max(tRFC + 10, 5CK) */
201 #define tSDE_RST                        (DIV_ROUND_UP(200000, ESDOR_CLK_PERIOD_ns) + 1)
202                                         /* Add an extra (or two?) ESDOR_CLK_PERIOD_ns according to
203                                          * erroneous Erratum Engcm12377
204                                          */
205 #define tRST_CKE                        (DIV_ROUND_UP(500000 + 2 * ESDOR_CLK_PERIOD_ns, ESDOR_CLK_PERIOD_ns) + 1)
206
207
208 /* ESDOTC 0x08 */
209 CK_VAL  tAOFPD, NS_TO_CK10(85), 1, 7    /* clks - 1 (0..7) */ /* 8.5ns */
210 CK_VAL  tAONPD, NS_TO_CK10(85), 1, 7    /* clks - 1 (0..7) */ /* 8.5ns */
211 CK_VAL  tANPD,  tCWL + 1, 1, 15         /* clks - 1 (0..15) */
212 CK_VAL  tAXPD,  tCWL + 1, 1, 15         /* clks - 1 (0..15) */
213 CK_VAL  tODTLon tCWL, 0, 7              /* clks - 1 (0..7) */ /* CWL+AL-2 */
214 CK_VAL  tODTLoff tCWL, 0, 31            /* clks - 1 (0..31) */ /* CWL+AL-2 */
215
216 /* ESDPDC 0x04 */
217 CK_MAX  tCKE,   NS_TO_CK(5), 3, 1, 7
218 CK_MAX  tCKSRX, NS_TO_CK(10), 5, 0, 7
219 CK_MAX  tCKSRE, NS_TO_CK(10), 5, 0, 7
220
221 #define PRCT            0
222 #define PWDT            5
223 #define SLOW_PD         0
224 #define BOTH_CS_PD      1
225
226 #define ESDPDC_VAL_0    (       \
227         (PRCT << 28) |          \
228         (PRCT << 24) |          \
229         (tCKE << 16) |          \
230         (SLOW_PD << 7) |        \
231         (BOTH_CS_PD << 6) |     \
232         (tCKSRX << 3) |         \
233         (tCKSRE << 0)           \
234         )
235
236 #define ESDPDC_VAL_1    (ESDPDC_VAL_0 |         \
237         (PWDT << 12) |                          \
238         (PWDT << 8)                             \
239         )
240
241 #define ROW_ADDR_BITS                   14
242 #define COL_ADDR_BITS                   10
243
244 #define Rtt_Nom                         1 /* ODT: 0: off 1: RZQ/4 2: RZQ/2 3: RZQ/6 4: RZQ/12 5: RZQ/8 */
245 #define Rtt_WR                          0 /* Dynamic ODT: 0: off 1: RZQ/4 2: RZQ/2 */
246 #define DLL_DISABLE                     0
247
248         .iflt   tWR - 7
249         .set    mr0_val, (((1 - DLL_DISABLE) << 8) /* DLL Reset */ |    \
250                         (SLOW_PD << 12) /* PD exit: 0: fast 1: slow */ |\
251                         ((tWR + 1 - 4) << 9) |                          \
252                         ((((tCL + 3) - 4) & 0x7) << 4) |                \
253                         ((((tCL + 3) - 4) & 0x8) >> 1))
254         .else
255         .set    mr0_val, ((1 << 8) /* DLL Reset */ |                    \
256                         (SLOW_PD << 12) /* PD exit: 0: fast 1: slow */ |\
257                         (((tWR + 1) / 2) << 9) |        \
258                         ((((tCL + 3) - 4) & 0x7) << 4) | \
259                         ((((tCL + 3) - 4) & 0x8) >> 1))
260         .endif
261
262 #define mr1_val                         (                                       \
263                                          ((Rtt_Nom & 1) << 2) |                 \
264                                          (((Rtt_Nom >> 1) & 1) << 6) |          \
265                                          (((Rtt_Nom >> 2) & 1) << 9) |          \
266                                          (DLL_DISABLE << 0) |                   \
267                                         0)
268 #define mr2_val                         (                                       \
269                                          (Rtt_WR << 9) /* dynamic ODT */ |      \
270                                          (0 << 7) /* SRT: Ext. temp. (mutually exclusive with ASR!) */ | \
271                                          (1 << 6) | /* ASR: Automatic Self Refresh */ \
272                                          (((tCWL + 2) - 5) << 3) |              \
273                                         0)
274 #define mr3_val                         0
275
276 #define ESDSCR_MRS_VAL(cs, mr, val)     (((val) << 16) |                \
277                                         (1 << 15) /* CON_REQ */ |       \
278                                         0x80 |                          \
279                                         (3 << 4) /* MRS command */ |    \
280                                         ((cs) << 3) |                   \
281                                         ((mr) << 0) |                   \
282                                         0)
283
284 #define ESDCFG0_VAL     (       \
285         (tRFC << 24) |          \
286         (tXS << 16) |           \
287         (tXP << 13) |           \
288         (tXPDLL << 9) |         \
289         (tFAW << 4) |           \
290         (tCL << 0))             \
291
292 #define ESDCFG1_VAL     (       \
293         (tRCD << 29) |          \
294         (tRP << 26) |           \
295         (tRC << 21) |           \
296         (tRAS << 16) |          \
297         (tRPA << 15) |          \
298         (tWR << 9) |            \
299         (tMRD << 5) |           \
300         (tCWL << 0))            \
301
302 #define ESDCFG2_VAL     (       \
303         (tDLLK << 16) |         \
304         (tRTP << 6) |           \
305         (tWTR << 3) |           \
306         (tRRD << 0))
307
308 #define BURST_LEN               (SDRAM_BURST_LENGTH / 8) /* 0: 4 byte 1: 8 byte */
309
310 #define ESDCTL_VAL              (((ROW_ADDR_BITS - 11) << 24) |         \
311                                 ((COL_ADDR_BITS - 9) << 20) |           \
312                                 (BURST_LEN << 19) |                     \
313                                 (1 << 16) | /* SDRAM bus width */       \
314                                 ((-1) << (32 - BANK_ADDR_BITS)))
315
316 #define ESDMISC_VAL             ((ADDR_MIRROR << 19) |  \
317                                 (WALAT << 16) |         \
318                                 (BI_ON << 12) |         \
319                                 (0x3 << 9) |            \
320                                 (RALAT << 6) |          \
321                                 (DDR_TYPE << 3))
322
323 #define ESDOR_VAL               ((tXPR << 16) | (tSDE_RST << 8) | (tRST_CKE << 0))
324
325 #define ESDOTC_VAL              ((tAOFPD << 27) |       \
326                                 (tAONPD << 24) |        \
327                                 (tANPD << 20) |         \
328                                 (tAXPD << 16) |         \
329                                 (tODTLon << 12) |       \
330                                 (tODTLoff << 4))
331
332 fcb_start:
333         b       _start
334         .word   0x20424346      /* "FCB " marker */
335         .word   0x01    /* FCB version number */
336         .org    0x68
337         .word   0x0     /* primary image starting page number */
338         .word   0x0     /* secondary image starting page number */
339         .org    0x78
340         .word   0x0     /* DBBT start page (0 == NO DBBT) */
341         .word   0       /* Bad block marker offset in main area (unused) */
342         .org    0xac
343         .word   0       /* BI Swap disabled */
344         .word   0       /* Bad Block marker offset in spare area */
345 fcb_end:
346
347         .org    0x400
348 ivt_header:
349         .word   CPU_2_BE_32((0xd1 << 24) | (32 << 8) | 0x40)
350 app_start_addr:
351         .long   _start
352         .long   0x0
353 dcd_ptr:
354         .long   dcd_hdr
355 boot_data_ptr:
356         .word   boot_data
357 self_ptr:
358         .word   ivt_header
359 app_code_csf:
360         .word   0x0
361         .word   0x0
362 boot_data:
363         .long   fcb_start
364 image_len:
365         .long   __uboot_img_end - fcb_start
366 plugin:
367         .word   0
368 ivt_end:
369 #define DCD_VERSION     0x40
370
371 dcd_hdr:
372         MXC_DCD_START
373         MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE)
374
375         MXC_DCD_ITEM(0x53fa8004, 0x00194005)    @ set LDO to 1.3V
376
377         /* disable all irrelevant clocks */
378         MXC_DCD_ITEM(CCM_BASE_ADDR + REG_CCGR0, 0xffcf0fff)
379         MXC_DCD_ITEM(CCM_BASE_ADDR + REG_CCGR1, 0x000fffcf)
380         MXC_DCD_ITEM(CCM_BASE_ADDR + REG_CCGR2, 0x033c0000)
381         MXC_DCD_ITEM(CCM_BASE_ADDR + REG_CCGR3, 0x000000ff)
382         MXC_DCD_ITEM(CCM_BASE_ADDR + REG_CCGR4, 0x00000000)
383         MXC_DCD_ITEM(CCM_BASE_ADDR + REG_CCGR5, 0x00fff033)
384         MXC_DCD_ITEM(CCM_BASE_ADDR + REG_CCGR6, 0x0f00030f)
385         MXC_DCD_ITEM(CCM_BASE_ADDR + REG_CCGR7, 0xfff00000)
386         MXC_DCD_ITEM(CCM_BASE_ADDR + REG_CMEOR, 0x00000000)
387
388         MXC_DCD_ITEM(IOMUXC_BASE_ADDR + 0x340, 0x11)    /* GPIO_17 => RESET_OUT */
389
390         MXC_DCD_ITEM(0x63fd800c, 0x00000000)    /* M4IF: MUX NFC signals on WEIM */
391 #if SDRAM_CLK > 333
392         MXC_DCD_ITEM(0x53fd4014, 0x00888944)    /* CBCDR */
393 #else
394         MXC_DCD_ITEM(0x53fd4014, 0x00888644)    /* CBCDR */
395 #endif
396         MXC_DCD_ITEM(0x53fd4018, 0x00016154)    /* CBCMR */
397
398         MXC_DCD_ITEM(0x53fd401c, 0xa6a2a020)    /* CSCMR1 */
399         MXC_DCD_ITEM(0x53fd4020, 0xb6b12f0a)    /* CSCMR2 */
400         MXC_DCD_ITEM(0x53fd4024, 0x00080b18)    /* CSCDR1 */
401
402 #define DDR_SEL_VAL     0
403 #define DSE_VAL         6
404 #define ODT_VAL         2
405
406 #define DDR_SEL_SHIFT   25
407 #define ODT_SHIFT       22
408 #define DSE_SHIFT       19
409 #define DDR_INPUT_SHIFT 9
410 #define HYS_SHIFT       8
411 #define PKE_SHIFT       7
412 #define PUE_SHIFT       6
413 #define PUS_SHIFT       4
414
415 #define DDR_SEL_MASK    (DDR_SEL_VAL << DDR_SEL_SHIFT)
416 #define DSE_MASK        (DSE_VAL << DSE_SHIFT)
417 #define ODT_MASK        (ODT_VAL << ODT_SHIFT)
418
419 #define DQM_VAL         DSE_MASK
420 #define SDQS_VAL        (ODT_MASK | DSE_MASK | (1 << PUE_SHIFT))
421 #define SDODT_VAL       (DSE_MASK | (0 << PKE_SHIFT) | (1 << PUE_SHIFT) | (0 << PUS_SHIFT))
422 #define SDCLK_VAL       DSE_MASK
423 #define SDCKE_VAL       ((1 << PKE_SHIFT) | (1 << PUE_SHIFT) | (0 << PUS_SHIFT))
424
425         MXC_DCD_ITEM(0x53fa8724, DDR_SEL_MASK) /* DDR_TYPE: DDR3 */
426         MXC_DCD_ITEM(0x53fa86f4, 0 << DDR_INPUT_SHIFT) /* DDRMODE_CTL */
427         MXC_DCD_ITEM(0x53fa8714, 0 << DDR_INPUT_SHIFT) /* GRP_DDRMODE */
428         MXC_DCD_ITEM(0x53fa86fc, 1 << PKE_SHIFT) /* GRP_DDRPKE */
429         MXC_DCD_ITEM(0x53fa8710, 0 << HYS_SHIFT) /* GRP_DDRHYS */
430         MXC_DCD_ITEM(0x53fa8708, 1 << PUE_SHIFT) /* GRP_DDRPK */
431
432         MXC_DCD_ITEM(0x53fa8584, DQM_VAL) /* DQM0 */
433         MXC_DCD_ITEM(0x53fa8594, DQM_VAL) /* DQM1 */
434         MXC_DCD_ITEM(0x53fa8560, DQM_VAL) /* DQM2 */
435         MXC_DCD_ITEM(0x53fa8554, DQM_VAL) /* DQM3 */
436
437         MXC_DCD_ITEM(0x53fa857c, SDQS_VAL) /* SDQS0 */
438         MXC_DCD_ITEM(0x53fa8590, SDQS_VAL) /* SDQS1 */
439         MXC_DCD_ITEM(0x53fa8568, SDQS_VAL) /* SDQS2 */
440         MXC_DCD_ITEM(0x53fa8558, SDQS_VAL) /* SDQS3 */
441
442         MXC_DCD_ITEM(0x53fa8580, SDODT_VAL) /* SDODT0 */
443         MXC_DCD_ITEM(0x53fa8578, SDCLK_VAL) /* SDCLK0 */
444
445         MXC_DCD_ITEM(0x53fa8564, SDODT_VAL) /* SDODT1 */
446         MXC_DCD_ITEM(0x53fa8570, SDCLK_VAL) /* SDCLK1 */
447
448         MXC_DCD_ITEM(0x53fa858c, SDCKE_VAL) /* SDCKE0 */
449         MXC_DCD_ITEM(0x53fa855c, SDCKE_VAL) /* SDCKE1 */
450
451         MXC_DCD_ITEM(0x53fa8574, DSE_MASK) /* DRAM_CAS */
452         MXC_DCD_ITEM(0x53fa8588, DSE_MASK) /* DRAM_RAS */
453
454         MXC_DCD_ITEM(0x53fa86f0, DSE_MASK) /* GRP_ADDDS */
455         MXC_DCD_ITEM(0x53fa8720, DSE_MASK) /* GRP_CTLDS */
456         MXC_DCD_ITEM(0x53fa8718, DSE_MASK) /* GRP_B0DS */
457         MXC_DCD_ITEM(0x53fa871c, DSE_MASK) /* GRP_B1DS */
458         MXC_DCD_ITEM(0x53fa8728, DSE_MASK) /* GRP_B2DS */
459         MXC_DCD_ITEM(0x53fa872c, DSE_MASK) /* GRP_B3DS */
460
461         /* calibration defaults */
462         MXC_DCD_ITEM(0x63fd904c, 0x001f001f)
463         MXC_DCD_ITEM(0x63fd9050, 0x001f001f)
464         MXC_DCD_ITEM(0x63fd907c, 0x011e011e)
465         MXC_DCD_ITEM(0x63fd9080, 0x011f0120)
466         MXC_DCD_ITEM(0x63fd9088, 0x3a393d3b)
467         MXC_DCD_ITEM(0x63fd9090, 0x3f3f3f3f)
468
469         MXC_DCD_ITEM(0x63fd9018, ESDMISC_VAL)
470         MXC_DCD_ITEM(0x63fd9000, ESDCTL_VAL)
471         MXC_DCD_ITEM(0x63fd900c, ESDCFG0_VAL)
472         MXC_DCD_ITEM(0x63fd9010, ESDCFG1_VAL)
473         MXC_DCD_ITEM(0x63fd9014, ESDCFG2_VAL)
474
475         MXC_DCD_ITEM(0x63fd902c, 0x000026d2)
476         MXC_DCD_ITEM(0x63fd9030, ESDOR_VAL)
477         MXC_DCD_ITEM(0x63fd9008, ESDOTC_VAL)
478         MXC_DCD_ITEM(0x63fd9004, ESDPDC_VAL_0)
479
480         /* MR0..3 - CS0 */
481         MXC_DCD_ITEM(0x63fd901c, 0x00008000) /* CON_REQ */
482         MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_CHK_SET, 0x63fd901c, 0x00004000)
483         MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE)
484
485         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 2, mr2_val)) /* MRS: MR2 */
486         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 3, mr3_val)) /* MRS: MR3 */
487         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 1, mr1_val)) /* MRS: MR1 */
488         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 0, mr0_val)) /* MRS: MR0 */
489 #if BANK_ADDR_BITS > 1
490         /* MR0..3 - CS1 */
491         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(1, 2, 0x0000)) /* MRS: MR2 */
492         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(1, 3, 0x0000)) /* MRS: MR3 */
493         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(1, 1, 0x0040)) /* MRS: MR1 */
494         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(1, 0, mr0_val)) /* MRS: MR0 */
495 #endif
496         MXC_DCD_ITEM(0x63fd9020, 3 << 14) /* disable refresh during calibration */
497         MXC_DCD_ITEM(0x63fd9058, 0x00022222)
498
499         MXC_DCD_ITEM(0x63fd90d0, 0x00000003) /* select default compare pattern for calibration */
500
501         /* ZQ calibration */
502         MXC_DCD_ITEM(0x63fd901c, 0x04008010) /* precharge all */
503         MXC_DCD_ITEM(0x63fd901c, 0x00008040) /* MRS: ZQ calibration */
504         MXC_DCD_ITEM(0x63fd9040, 0x0539002b) /* Force ZQ calibration */
505         MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_CHK_CLR, 0x63fd9040, 0x00010000)
506         MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE)
507
508         /* DQS calibration */
509         MXC_DCD_ITEM(0x63fd901c, 0x04008010) /* precharge all */
510         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 3, (1 << 2))) /* MRS: select MPR */
511         MXC_DCD_ITEM(0x63fd907c, 0x90000000) /* reset RD fifo and start DQS calib. */
512
513         MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_CHK_CLR, 0x63fd907c, 0x90000000)
514         MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE)
515         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 3, 0)) /* MRS: select normal data path */
516
517         /* WR DL calibration */
518         MXC_DCD_ITEM(0x63fd901c, 0x00008000)
519         MXC_DCD_ITEM(0x63fd901c, 0x04008010) /* precharge all */
520         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 3, (1 << 2))) /* MRS: select MPR */
521         MXC_DCD_ITEM(0x63fd90a4, 0x00000010)
522
523         MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_CHK_CLR, 0x63fd90a4, 0x00000010)
524         MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE)
525         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 3, 0)) /* MRS: select normal data path */
526
527         /* RD DL calibration */
528         MXC_DCD_ITEM(0x63fd901c, 0x04008010) /* precharge all */
529         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 3, (1 << 2))) /* MRS: select MPR */
530         MXC_DCD_ITEM(0x63fd90a0, 0x00000010)
531
532         MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_CHK_CLR, 0x63fd90a0, 0x00000010)
533         MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE)
534         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 3, 0)) /* MRS: select normal data path */
535         MXC_DCD_ITEM(0x63fd9020, (3 << 11) | (0 << 14)) /* refresh interval: 4 cycles every 64kHz period */
536         MXC_DCD_ITEM(0x63fd9004, ESDPDC_VAL_1)
537
538         /* DDR calibration done */
539         MXC_DCD_ITEM(0x63fd901c, 0x00000000)
540
541         /* setup NFC pads */
542         /* MUX_SEL */
543         MXC_DCD_ITEM(0x53fa819c, 0x00000000)    @ EIM_DA0
544         MXC_DCD_ITEM(0x53fa81a0, 0x00000000)    @ EIM_DA1
545         MXC_DCD_ITEM(0x53fa81a4, 0x00000000)    @ EIM_DA2
546         MXC_DCD_ITEM(0x53fa81a8, 0x00000000)    @ EIM_DA3
547         MXC_DCD_ITEM(0x53fa81ac, 0x00000000)    @ EIM_DA4
548         MXC_DCD_ITEM(0x53fa81b0, 0x00000000)    @ EIM_DA5
549         MXC_DCD_ITEM(0x53fa81b4, 0x00000000)    @ EIM_DA6
550         MXC_DCD_ITEM(0x53fa81b8, 0x00000000)    @ EIM_DA7
551         MXC_DCD_ITEM(0x53fa81dc, 0x00000000)    @ WE_B
552         MXC_DCD_ITEM(0x53fa81e0, 0x00000000)    @ RE_B
553         MXC_DCD_ITEM(0x53fa8228, 0x00000000)    @ CLE
554         MXC_DCD_ITEM(0x53fa822c, 0x00000000)    @ ALE
555         MXC_DCD_ITEM(0x53fa8230, 0x00000000)    @ WP_B
556         MXC_DCD_ITEM(0x53fa8234, 0x00000000)    @ RB0
557         MXC_DCD_ITEM(0x53fa8238, 0x00000000)    @ CS0
558         /* PAD_CTL */
559         MXC_DCD_ITEM(0x53fa84ec, 0x000000e4)    @ EIM_DA0
560         MXC_DCD_ITEM(0x53fa84f0, 0x000000e4)    @ EIM_DA1
561         MXC_DCD_ITEM(0x53fa84f4, 0x000000e4)    @ EIM_DA2
562         MXC_DCD_ITEM(0x53fa84f8, 0x000000e4)    @ EIM_DA3
563         MXC_DCD_ITEM(0x53fa84fc, 0x000000e4)    @ EIM_DA4
564         MXC_DCD_ITEM(0x53fa8500, 0x000000e4)    @ EIM_DA5
565         MXC_DCD_ITEM(0x53fa8504, 0x000000e4)    @ EIM_DA6
566         MXC_DCD_ITEM(0x53fa8508, 0x000000e4)    @ EIM_DA7
567         MXC_DCD_ITEM(0x53fa852c, 0x00000004)    @ NANDF_WE_B
568         MXC_DCD_ITEM(0x53fa8530, 0x00000004)    @ NANDF_RE_B
569         MXC_DCD_ITEM(0x53fa85a0, 0x00000004)    @ NANDF_CLE_B
570         MXC_DCD_ITEM(0x53fa85a4, 0x00000004)    @ NANDF_ALE_B
571         MXC_DCD_ITEM(0x53fa85a8, 0x000000e4)    @ NANDF_WE_B
572         MXC_DCD_ITEM(0x53fa85ac, 0x000000e4)    @ NANDF_RB0
573         MXC_DCD_ITEM(0x53fa85b0, 0x00000004)    @ NANDF_CS0
574         MXC_DCD_END