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