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