]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - board/karo/tx53/lowlevel_init.S
karo: tx53: adjust SDRAM row address bits for 4Gib chips
[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 #define NS_TO_CK100(ns) DIV_ROUND_UP(NS_TO_CK(ns), 100)
109
110         .macro          CK_VAL, name, clks, offs, max
111         .iflt           \clks - \offs
112         .set            \name, 0
113         .else
114         .ifle           \clks - \offs - \max
115         .set            \name, \clks - \offs
116         .else
117         .error          "Value \clks out of range for parameter \name"
118         .endif
119         .endif
120         .endm
121
122         .macro          NS_VAL, name, ns, offs, max
123         .iflt           \ns - \offs
124         .set            \name, 0
125         .else
126         CK_VAL          \name, NS_TO_CK(\ns), \offs, \max
127         .endif
128         .endm
129
130         .macro          CK_MAX, name, ck1, ck2, offs, max
131         .ifgt           \ck1 - \ck2
132         CK_VAL          \name, \ck1, \offs, \max
133         .else
134         CK_VAL          \name, \ck2, \offs, \max
135         .endif
136         .endm
137
138 #define ESDMISC_DDR_TYPE_DDR3           0
139 #define ESDMISC_DDR_TYPE_LPDDR2         1
140 #define ESDMISC_DDR_TYPE_DDR2           2
141
142 #define DIV_ROUND_UP(m,d)               (((m) + (d) - 1) / (d))
143
144 #define CKIL_FREQ_Hz                    32768
145 #define ESDOR_CLK_PERIOD_ns             (1000000000 / CKIL_FREQ_Hz / 2) /* base clock for ESDOR values */
146
147 /* DDR3 SDRAM */
148 #define BANK_ADDR_BITS                  CONFIG_NR_DRAM_BANKS
149 #define SDRAM_BURST_LENGTH              8
150 #define RALAT                           5
151 #define WALAT                           0
152 #define BI_ON                           0
153 #define ADDR_MIRROR                     0
154 #define DDR_TYPE                        ESDMISC_DDR_TYPE_DDR3
155
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 #if SDRAM_SIZE < 2048
176 /* 512/1024MiB SDRAM: NT5CB128M16FP-DII */
177
178 #define ROW_ADDR_BITS                   14
179 #define COL_ADDR_BITS                   10
180
181 /* ESDCFG0 0x0c */
182 NS_VAL  tRFC,   160, 1, 255             /* clks - 1 (0..255) */
183 CK_MAX  tXS,    NS_TO_CK(CK_TO_NS(tRFC + 1) + 10), 5, 1, 255 /* clks - 1 (0..255) tRFC + 10 */
184 CK_MAX  tXP,    NS_TO_CK10(75), 3, 1, 7 /* clks - 1 (0..7) */ /* max(3tCK, 7.5ns) */
185 CK_MAX  tXPDLL, NS_TO_CK(24), 2, 1, 15  /* clks - 1 (0..15) */
186 NS_VAL  tFAW,   50, 1, 31               /* clks - 1 (0..31) */
187 CK_VAL  tCL,    CL_VAL, 3, 8            /* clks - 3 (0..8) CAS Latency */
188
189 /* ESDCFG1 0x10 */
190 CK_VAL  tRCD,   NS_TO_CK10(125), 1, 7   /* clks - 1 (0..7) */ /* 12.5 */
191 CK_VAL  tRP,    NS_TO_CK10(125), 1, 7   /* clks - 1 (0..7) */ /* 12.5 */
192 NS_VAL  tRC,    50, 1, 31               /* clks - 1 (0..31) */
193 CK_VAL  tRAS,   NS_TO_CK10(375), 1, 31  /* clks - 1 (0..31) */ /* 37.5 */
194 CK_VAL  tRPA,   1, 0, 1                 /* clks     (0..1) */
195 NS_VAL  tWR,    15, 1, 15               /* clks - 1 (0..15) */
196 CK_VAL  tMRD,   4, 1, 15                /* clks - 1 (0..15) */
197 CK_VAL  tCWL,   CWL_VAL, 2, 6           /* clks - 2 (0..6) */
198
199 /* ESDCFG2 0x14 */
200 CK_VAL  tDLLK,  512, 1, 511             /* clks - 1 (0..511) */
201 CK_MAX  tRTP,   NS_TO_CK10(75), 4, 1, 7 /* clks - 1 (0..7) */ /* max(4tCK, 7.5ns) */
202 CK_MAX  tWTR,   NS_TO_CK10(75), 4, 1, 7 /* clks - 1 (0..7) */ /* max(4tCK, 7.5ns) */
203 CK_MAX  tRRD,   NS_TO_CK(10), 4, 1, 7   /* clks - 1 (0..7) */
204
205 /* ESDOR 0x30 */
206 CK_MAX  tXPR,   NS_TO_CK(CK_TO_NS(tRFC + 1) + 10), 5, 1, 255 /* clks - 1 (0..255) max(tRFC + 10, 5CK) */
207 #else
208 /* 4096MiB SDRAM: IM4G16D3EABG-125I */
209
210 #define ROW_ADDR_BITS                   15
211 #define COL_ADDR_BITS                   10
212
213 /* ESDCFG0 0x0c */
214 NS_VAL  tRFC,   260, 1, 255             /* clks - 1 (0..255) */
215 CK_MAX  tXS,    NS_TO_CK(CK_TO_NS(tRFC + 1) + 10), 5, 1, 255 /* clks - 1 (0..255) tRFC + 10 */
216 CK_MAX  tXP,    NS_TO_CK(6), 3, 1, 7 /* clks - 1 (0..7) */ /* max(3tCK, 7.5ns) */
217 CK_MAX  tXPDLL, NS_TO_CK(24), 2, 1, 15  /* clks - 1 (0..15) */
218 NS_VAL  tFAW,   30, 1, 31               /* clks - 1 (0..31) */
219 CK_VAL  tCL,    CL_VAL, 3, 8            /* clks - 3 (0..8) CAS Latency */
220
221 /* ESDCFG1 0x10 */
222 CK_VAL  tRCD,   NS_TO_CK100(1375), 1, 7 /* clks - 1 (0..7) */ /* 13.75 */
223 CK_VAL  tRP,    NS_TO_CK100(1375), 1, 7 /* clks - 1 (0..7) */ /* 13.75 */
224 CK_VAL  tRC,    NS_TO_CK100(4875), 1, 31 /* clks - 1 (0..31) */ /* 48.75 */
225 CK_VAL  tRAS,   NS_TO_CK(35), 1, 31     /* clks - 1 (0..31) */ /* 35 */
226 CK_VAL  tRPA,   1, 0, 1                 /* clks     (0..1) */
227 NS_VAL  tWR,    15, 1, 15               /* clks - 1 (0..15) */
228 CK_VAL  tMRD,   4, 1, 15                /* clks - 1 (0..15) */
229 CK_VAL  tCWL,   CWL_VAL, 2, 6           /* clks - 2 (0..6) */
230
231 /* ESDCFG2 0x14 */
232 CK_VAL  tDLLK,  512, 1, 511             /* clks - 1 (0..511) */
233 CK_MAX  tRTP,   NS_TO_CK10(75), 4, 1, 7 /* clks - 1 (0..7) */ /* max(4tCK, 7.5ns) */
234 CK_MAX  tWTR,   NS_TO_CK10(75), 4, 1, 7 /* clks - 1 (0..7) */ /* max(4tCK, 7.5ns) */
235 CK_MAX  tRRD,   NS_TO_CK10(75), 4, 1, 7 /* clks - 1 (0..7) */ /* max(4tCK, 7.5ns) */
236
237 /* ESDOR 0x30 */
238 CK_MAX  tXPR,   NS_TO_CK(CK_TO_NS(tRFC + 1) + 10), 5, 1, 255 /* clks - 1 (0..255) max(tRFC + 10, 5CK) */
239 #endif
240
241 #define tSDE_RST                        (DIV_ROUND_UP(200000, ESDOR_CLK_PERIOD_ns) + 1)
242                                         /* Add an extra (or two?) ESDOR_CLK_PERIOD_ns according to
243                                          * erroneous Erratum Engcm12377
244                                          */
245 #define tRST_CKE                        (DIV_ROUND_UP(500000 + 2 * ESDOR_CLK_PERIOD_ns, ESDOR_CLK_PERIOD_ns) + 1)
246
247 /* ESDOTC 0x08 */
248 CK_VAL  tAOFPD, NS_TO_CK10(85), 1, 7    /* clks - 1 (0..7) */ /* 8.5ns */
249 CK_VAL  tAONPD, NS_TO_CK10(85), 1, 7    /* clks - 1 (0..7) */ /* 8.5ns */
250 CK_VAL  tANPD,  tCWL + 1, 1, 15         /* clks - 1 (0..15) */
251 CK_VAL  tAXPD,  tCWL + 1, 1, 15         /* clks - 1 (0..15) */
252 CK_VAL  tODTLon tCWL, 0, 7              /* clks - 1 (0..7) */ /* CWL+AL-2 */
253 CK_VAL  tODTLoff tCWL, 0, 31            /* clks - 1 (0..31) */ /* CWL+AL-2 */
254
255 /* ESDPDC 0x04 */
256 CK_MAX  tCKE,   NS_TO_CK(5), 3, 1, 7
257 CK_MAX  tCKSRX, NS_TO_CK(10), 5, 0, 7
258 CK_MAX  tCKSRE, NS_TO_CK(10), 5, 0, 7
259
260 #define PRCT            0
261 #define PWDT            5
262 #define SLOW_PD         0
263 #define BOTH_CS_PD      1
264
265 #define ESDPDC_VAL_0    (       \
266         (PRCT << 28) |          \
267         (PRCT << 24) |          \
268         (tCKE << 16) |          \
269         (SLOW_PD << 7) |        \
270         (BOTH_CS_PD << 6) |     \
271         (tCKSRX << 3) |         \
272         (tCKSRE << 0)           \
273         )
274
275 #define ESDPDC_VAL_1    (ESDPDC_VAL_0 |         \
276         (PWDT << 12) |                          \
277         (PWDT << 8)                             \
278         )
279
280 #define Rtt_Nom                         1 /* ODT: 0: off 1: RZQ/4 2: RZQ/2 3: RZQ/6 4: RZQ/12 5: RZQ/8 */
281 #define Rtt_WR                          0 /* Dynamic ODT: 0: off 1: RZQ/4 2: RZQ/2 */
282 #define DLL_DISABLE                     0
283
284         .iflt   tWR - 7
285         .set    mr0_val, (((1 - DLL_DISABLE) << 8) /* DLL Reset */ |    \
286                         (SLOW_PD << 12) /* PD exit: 0: fast 1: slow */ |\
287                         ((tWR + 1 - 4) << 9) |                          \
288                         ((((tCL + 3) - 4) & 0x7) << 4) |                \
289                         ((((tCL + 3) - 4) & 0x8) >> 1))
290         .else
291         .set    mr0_val, ((1 << 8) /* DLL Reset */ |                    \
292                         (SLOW_PD << 12) /* PD exit: 0: fast 1: slow */ |\
293                         (((tWR + 1) / 2) << 9) |        \
294                         ((((tCL + 3) - 4) & 0x7) << 4) | \
295                         ((((tCL + 3) - 4) & 0x8) >> 1))
296         .endif
297
298 #define mr1_val                         (                                       \
299                                          ((Rtt_Nom & 1) << 2) |                 \
300                                          (((Rtt_Nom >> 1) & 1) << 6) |          \
301                                          (((Rtt_Nom >> 2) & 1) << 9) |          \
302                                          (DLL_DISABLE << 0) |                   \
303                                         0)
304 #define mr2_val                         (                                       \
305                                          (Rtt_WR << 9) /* dynamic ODT */ |      \
306                                          (0 << 7) /* SRT: Ext. temp. (mutually exclusive with ASR!) */ | \
307                                          (1 << 6) | /* ASR: Automatic Self Refresh */ \
308                                          (((tCWL + 2) - 5) << 3) |              \
309                                         0)
310 #define mr3_val                         0
311
312 #define ESDSCR_MRS_VAL(cs, mr, val)     (((val) << 16) |                \
313                                         (1 << 15) /* CON_REQ */ |       \
314                                         0x80 |                          \
315                                         (3 << 4) /* MRS command */ |    \
316                                         ((cs) << 3) |                   \
317                                         ((mr) << 0) |                   \
318                                         0)
319
320 #define ESDCFG0_VAL     (       \
321         (tRFC << 24) |          \
322         (tXS << 16) |           \
323         (tXP << 13) |           \
324         (tXPDLL << 9) |         \
325         (tFAW << 4) |           \
326         (tCL << 0))             \
327
328 #define ESDCFG1_VAL     (       \
329         (tRCD << 29) |          \
330         (tRP << 26) |           \
331         (tRC << 21) |           \
332         (tRAS << 16) |          \
333         (tRPA << 15) |          \
334         (tWR << 9) |            \
335         (tMRD << 5) |           \
336         (tCWL << 0))            \
337
338 #define ESDCFG2_VAL     (       \
339         (tDLLK << 16) |         \
340         (tRTP << 6) |           \
341         (tWTR << 3) |           \
342         (tRRD << 0))
343
344 #define BURST_LEN               (SDRAM_BURST_LENGTH / 8) /* 0: 4 byte 1: 8 byte */
345
346 #define ESDCTL_VAL              (((ROW_ADDR_BITS - 11) << 24) |         \
347                                 ((COL_ADDR_BITS - 9) << 20) |           \
348                                 (BURST_LEN << 19) |                     \
349                                 (1 << 16) | /* SDRAM bus width */       \
350                                 ((-1) << (32 - BANK_ADDR_BITS)))
351
352 #define ESDMISC_VAL             ((ADDR_MIRROR << 19) |  \
353                                 (WALAT << 16) |         \
354                                 (BI_ON << 12) |         \
355                                 (0x3 << 9) |            \
356                                 (RALAT << 6) |          \
357                                 (DDR_TYPE << 3))
358
359 #define ESDOR_VAL               ((tXPR << 16) | (tSDE_RST << 8) | (tRST_CKE << 0))
360
361 #define ESDOTC_VAL              ((tAOFPD << 27) |       \
362                                 (tAONPD << 24) |        \
363                                 (tANPD << 20) |         \
364                                 (tAXPD << 16) |         \
365                                 (tODTLon << 12) |       \
366                                 (tODTLoff << 4))
367
368 fcb_start:
369         b       _start
370         .word   0x20424346      /* "FCB " marker */
371         .word   0x01    /* FCB version number */
372         .org    0x68
373         .word   0x0     /* primary image starting page number */
374         .word   0x0     /* secondary image starting page number */
375         .org    0x78
376         .word   0x0     /* DBBT start page (0 == NO DBBT) */
377         .word   0       /* Bad block marker offset in main area (unused) */
378         .org    0xac
379         .word   0       /* BI Swap disabled */
380         .word   0       /* Bad Block marker offset in spare area */
381 fcb_end:
382
383         .org    0x400
384 ivt_header:
385         .word   CPU_2_BE_32((0xd1 << 24) | (32 << 8) | 0x40)
386 app_start_addr:
387         .long   _start
388         .long   0x0
389 dcd_ptr:
390         .long   dcd_hdr
391 boot_data_ptr:
392         .word   boot_data
393 self_ptr:
394         .word   ivt_header
395 app_code_csf:
396         .word   0x0
397         .word   0x0
398 boot_data:
399         .long   fcb_start
400 image_len:
401         .long   __uboot_img_end - fcb_start
402 plugin:
403         .word   0
404 ivt_end:
405 #define DCD_VERSION     0x40
406
407 dcd_hdr:
408         MXC_DCD_START
409         MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE)
410
411         MXC_DCD_ITEM(0x53fa8004, 0x00194005)    @ set LDO to 1.3V
412
413         /* disable all irrelevant clocks */
414         MXC_DCD_ITEM(CCM_BASE_ADDR + REG_CCGR0, 0xffcf0fff)
415         MXC_DCD_ITEM(CCM_BASE_ADDR + REG_CCGR1, 0x000fffcf)
416         MXC_DCD_ITEM(CCM_BASE_ADDR + REG_CCGR2, 0x033c0000)
417         MXC_DCD_ITEM(CCM_BASE_ADDR + REG_CCGR3, 0x000000ff)
418         MXC_DCD_ITEM(CCM_BASE_ADDR + REG_CCGR4, 0x00000000)
419         MXC_DCD_ITEM(CCM_BASE_ADDR + REG_CCGR5, 0x00fff033)
420         MXC_DCD_ITEM(CCM_BASE_ADDR + REG_CCGR6, 0x0f00030f)
421         MXC_DCD_ITEM(CCM_BASE_ADDR + REG_CCGR7, 0xfff00000)
422         MXC_DCD_ITEM(CCM_BASE_ADDR + REG_CMEOR, 0x00000000)
423
424         MXC_DCD_ITEM(IOMUXC_BASE_ADDR + 0x340, 0x11)    /* GPIO_17 => RESET_OUT */
425
426         MXC_DCD_ITEM(0x63fd800c, 0x00000000)    /* M4IF: MUX NFC signals on WEIM */
427 #if SDRAM_CLK > 333
428         MXC_DCD_ITEM(0x53fd4014, 0x00888944)    /* CBCDR */
429 #else
430         MXC_DCD_ITEM(0x53fd4014, 0x00888644)    /* CBCDR */
431 #endif
432         MXC_DCD_ITEM(0x53fd4018, 0x00016154)    /* CBCMR */
433
434         MXC_DCD_ITEM(0x53fd401c, 0xa6a2a020)    /* CSCMR1 */
435         MXC_DCD_ITEM(0x53fd4020, 0xb6b12f0a)    /* CSCMR2 */
436         MXC_DCD_ITEM(0x53fd4024, 0x00080b18)    /* CSCDR1 */
437
438 #define DDR_SEL_VAL     0
439 #define DSE_VAL         6
440 #define ODT_VAL         2
441
442 #define DDR_SEL_SHIFT   25
443 #define ODT_SHIFT       22
444 #define DSE_SHIFT       19
445 #define DDR_INPUT_SHIFT 9
446 #define HYS_SHIFT       8
447 #define PKE_SHIFT       7
448 #define PUE_SHIFT       6
449 #define PUS_SHIFT       4
450
451 #define DDR_SEL_MASK    (DDR_SEL_VAL << DDR_SEL_SHIFT)
452 #define DSE_MASK        (DSE_VAL << DSE_SHIFT)
453 #define ODT_MASK        (ODT_VAL << ODT_SHIFT)
454
455 #define DQM_VAL         DSE_MASK
456 #define SDQS_VAL        (ODT_MASK | DSE_MASK | (1 << PUE_SHIFT))
457 #define SDODT_VAL       (DSE_MASK | (0 << PKE_SHIFT) | (1 << PUE_SHIFT) | (0 << PUS_SHIFT))
458 #define SDCLK_VAL       DSE_MASK
459 #define SDCKE_VAL       ((1 << PKE_SHIFT) | (1 << PUE_SHIFT) | (0 << PUS_SHIFT))
460
461         MXC_DCD_ITEM(0x53fa8724, DDR_SEL_MASK) /* DDR_TYPE: DDR3 */
462         MXC_DCD_ITEM(0x53fa86f4, 0 << DDR_INPUT_SHIFT) /* DDRMODE_CTL */
463         MXC_DCD_ITEM(0x53fa8714, 0 << DDR_INPUT_SHIFT) /* GRP_DDRMODE */
464         MXC_DCD_ITEM(0x53fa86fc, 1 << PKE_SHIFT) /* GRP_DDRPKE */
465         MXC_DCD_ITEM(0x53fa8710, 0 << HYS_SHIFT) /* GRP_DDRHYS */
466         MXC_DCD_ITEM(0x53fa8708, 1 << PUE_SHIFT) /* GRP_DDRPK */
467
468         MXC_DCD_ITEM(0x53fa8584, DQM_VAL) /* DQM0 */
469         MXC_DCD_ITEM(0x53fa8594, DQM_VAL) /* DQM1 */
470         MXC_DCD_ITEM(0x53fa8560, DQM_VAL) /* DQM2 */
471         MXC_DCD_ITEM(0x53fa8554, DQM_VAL) /* DQM3 */
472
473         MXC_DCD_ITEM(0x53fa857c, SDQS_VAL) /* SDQS0 */
474         MXC_DCD_ITEM(0x53fa8590, SDQS_VAL) /* SDQS1 */
475         MXC_DCD_ITEM(0x53fa8568, SDQS_VAL) /* SDQS2 */
476         MXC_DCD_ITEM(0x53fa8558, SDQS_VAL) /* SDQS3 */
477
478         MXC_DCD_ITEM(0x53fa8580, SDODT_VAL) /* SDODT0 */
479         MXC_DCD_ITEM(0x53fa8578, SDCLK_VAL) /* SDCLK0 */
480
481         MXC_DCD_ITEM(0x53fa8564, SDODT_VAL) /* SDODT1 */
482         MXC_DCD_ITEM(0x53fa8570, SDCLK_VAL) /* SDCLK1 */
483
484         MXC_DCD_ITEM(0x53fa858c, SDCKE_VAL) /* SDCKE0 */
485         MXC_DCD_ITEM(0x53fa855c, SDCKE_VAL) /* SDCKE1 */
486
487         MXC_DCD_ITEM(0x53fa8574, DSE_MASK) /* DRAM_CAS */
488         MXC_DCD_ITEM(0x53fa8588, DSE_MASK) /* DRAM_RAS */
489
490         MXC_DCD_ITEM(0x53fa86f0, DSE_MASK) /* GRP_ADDDS */
491         MXC_DCD_ITEM(0x53fa8720, DSE_MASK) /* GRP_CTLDS */
492         MXC_DCD_ITEM(0x53fa8718, DSE_MASK) /* GRP_B0DS */
493         MXC_DCD_ITEM(0x53fa871c, DSE_MASK) /* GRP_B1DS */
494         MXC_DCD_ITEM(0x53fa8728, DSE_MASK) /* GRP_B2DS */
495         MXC_DCD_ITEM(0x53fa872c, DSE_MASK) /* GRP_B3DS */
496
497         /* calibration defaults */
498         MXC_DCD_ITEM(0x63fd904c, 0x001f001f)
499         MXC_DCD_ITEM(0x63fd9050, 0x001f001f)
500         MXC_DCD_ITEM(0x63fd907c, 0x011e011e)
501         MXC_DCD_ITEM(0x63fd9080, 0x011f0120)
502         MXC_DCD_ITEM(0x63fd9088, 0x3a393d3b)
503         MXC_DCD_ITEM(0x63fd9090, 0x3f3f3f3f)
504
505         MXC_DCD_ITEM(0x63fd9018, ESDMISC_VAL)
506         MXC_DCD_ITEM(0x63fd9000, ESDCTL_VAL)
507         MXC_DCD_ITEM(0x63fd900c, ESDCFG0_VAL)
508         MXC_DCD_ITEM(0x63fd9010, ESDCFG1_VAL)
509         MXC_DCD_ITEM(0x63fd9014, ESDCFG2_VAL)
510
511         MXC_DCD_ITEM(0x63fd902c, 0x000026d2)
512         MXC_DCD_ITEM(0x63fd9030, ESDOR_VAL)
513         MXC_DCD_ITEM(0x63fd9008, ESDOTC_VAL)
514         MXC_DCD_ITEM(0x63fd9004, ESDPDC_VAL_0)
515
516         /* MR0..3 - CS0 */
517         MXC_DCD_ITEM(0x63fd901c, 0x00008000) /* CON_REQ */
518         MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_CHK_SET, 0x63fd901c, 0x00004000)
519         MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE)
520
521         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 2, mr2_val)) /* MRS: MR2 */
522         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 3, mr3_val)) /* MRS: MR3 */
523         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 1, mr1_val)) /* MRS: MR1 */
524         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 0, mr0_val)) /* MRS: MR0 */
525 #if BANK_ADDR_BITS > 1
526         /* MR0..3 - CS1 */
527         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(1, 2, 0x0000)) /* MRS: MR2 */
528         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(1, 3, 0x0000)) /* MRS: MR3 */
529         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(1, 1, 0x0040)) /* MRS: MR1 */
530         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(1, 0, mr0_val)) /* MRS: MR0 */
531 #endif
532         MXC_DCD_ITEM(0x63fd9020, 3 << 14) /* disable refresh during calibration */
533         MXC_DCD_ITEM(0x63fd9058, 0x00022222)
534
535         MXC_DCD_ITEM(0x63fd90d0, 0x00000003) /* select default compare pattern for calibration */
536
537         /* ZQ calibration */
538         MXC_DCD_ITEM(0x63fd901c, 0x04008010) /* precharge all */
539         MXC_DCD_ITEM(0x63fd901c, 0x00008040) /* MRS: ZQ calibration */
540         MXC_DCD_ITEM(0x63fd9040, 0x0539002b) /* Force ZQ calibration */
541         MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_CHK_CLR, 0x63fd9040, 0x00010000)
542         MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE)
543
544         /* DQS calibration */
545         MXC_DCD_ITEM(0x63fd901c, 0x04008010) /* precharge all */
546         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 3, (1 << 2))) /* MRS: select MPR */
547         MXC_DCD_ITEM(0x63fd907c, 0x90000000) /* reset RD fifo and start DQS calib. */
548
549         MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_CHK_CLR, 0x63fd907c, 0x90000000)
550         MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE)
551         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 3, 0)) /* MRS: select normal data path */
552
553         /* WR DL calibration */
554         MXC_DCD_ITEM(0x63fd901c, 0x00008000)
555         MXC_DCD_ITEM(0x63fd901c, 0x04008010) /* precharge all */
556         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 3, (1 << 2))) /* MRS: select MPR */
557         MXC_DCD_ITEM(0x63fd90a4, 0x00000010)
558
559         MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_CHK_CLR, 0x63fd90a4, 0x00000010)
560         MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE)
561         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 3, 0)) /* MRS: select normal data path */
562
563         /* RD DL calibration */
564         MXC_DCD_ITEM(0x63fd901c, 0x04008010) /* precharge all */
565         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 3, (1 << 2))) /* MRS: select MPR */
566         MXC_DCD_ITEM(0x63fd90a0, 0x00000010)
567
568         MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_CHK_CLR, 0x63fd90a0, 0x00000010)
569         MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE)
570         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 3, 0)) /* MRS: select normal data path */
571         MXC_DCD_ITEM(0x63fd9020, (3 << 11) | (0 << 14)) /* refresh interval: 4 cycles every 64kHz period */
572         MXC_DCD_ITEM(0x63fd9004, ESDPDC_VAL_1)
573
574         /* DDR calibration done */
575         MXC_DCD_ITEM(0x63fd901c, 0x00000000)
576
577         /* setup NFC pads */
578         /* MUX_SEL */
579         MXC_DCD_ITEM(0x53fa819c, 0x00000000)    @ EIM_DA0
580         MXC_DCD_ITEM(0x53fa81a0, 0x00000000)    @ EIM_DA1
581         MXC_DCD_ITEM(0x53fa81a4, 0x00000000)    @ EIM_DA2
582         MXC_DCD_ITEM(0x53fa81a8, 0x00000000)    @ EIM_DA3
583         MXC_DCD_ITEM(0x53fa81ac, 0x00000000)    @ EIM_DA4
584         MXC_DCD_ITEM(0x53fa81b0, 0x00000000)    @ EIM_DA5
585         MXC_DCD_ITEM(0x53fa81b4, 0x00000000)    @ EIM_DA6
586         MXC_DCD_ITEM(0x53fa81b8, 0x00000000)    @ EIM_DA7
587         MXC_DCD_ITEM(0x53fa81dc, 0x00000000)    @ WE_B
588         MXC_DCD_ITEM(0x53fa81e0, 0x00000000)    @ RE_B
589         MXC_DCD_ITEM(0x53fa8228, 0x00000000)    @ CLE
590         MXC_DCD_ITEM(0x53fa822c, 0x00000000)    @ ALE
591         MXC_DCD_ITEM(0x53fa8230, 0x00000000)    @ WP_B
592         MXC_DCD_ITEM(0x53fa8234, 0x00000000)    @ RB0
593         MXC_DCD_ITEM(0x53fa8238, 0x00000000)    @ CS0
594         /* PAD_CTL */
595         MXC_DCD_ITEM(0x53fa84ec, 0x000000e4)    @ EIM_DA0
596         MXC_DCD_ITEM(0x53fa84f0, 0x000000e4)    @ EIM_DA1
597         MXC_DCD_ITEM(0x53fa84f4, 0x000000e4)    @ EIM_DA2
598         MXC_DCD_ITEM(0x53fa84f8, 0x000000e4)    @ EIM_DA3
599         MXC_DCD_ITEM(0x53fa84fc, 0x000000e4)    @ EIM_DA4
600         MXC_DCD_ITEM(0x53fa8500, 0x000000e4)    @ EIM_DA5
601         MXC_DCD_ITEM(0x53fa8504, 0x000000e4)    @ EIM_DA6
602         MXC_DCD_ITEM(0x53fa8508, 0x000000e4)    @ EIM_DA7
603         MXC_DCD_ITEM(0x53fa852c, 0x00000004)    @ NANDF_WE_B
604         MXC_DCD_ITEM(0x53fa8530, 0x00000004)    @ NANDF_RE_B
605         MXC_DCD_ITEM(0x53fa85a0, 0x00000004)    @ NANDF_CLE_B
606         MXC_DCD_ITEM(0x53fa85a4, 0x00000004)    @ NANDF_ALE_B
607         MXC_DCD_ITEM(0x53fa85a8, 0x000000e4)    @ NANDF_WE_B
608         MXC_DCD_ITEM(0x53fa85ac, 0x000000e4)    @ NANDF_RB0
609         MXC_DCD_ITEM(0x53fa85b0, 0x00000004)    @ NANDF_CS0
610         MXC_DCD_END