2 #include <configs/tx53.h>
3 #include <asm/arch/imx-regs.h>
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
10 #define SDRAM_CLK CONFIG_SYS_SDRAM_CLK
12 #ifdef PHYS_SDRAM_2_SIZE
13 #define SDRAM_SIZE (PHYS_SDRAM_1_SIZE + PHYS_SDRAM_2_SIZE)
15 #define SDRAM_SIZE PHYS_SDRAM_1_SIZE
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
29 #define CPU_2_BE_32(l) \
30 ((((l) << 24) & 0xFF000000) | \
31 (((l) << 8) & 0x00FF0000) | \
32 (((l) >> 8) & 0x0000FF00) | \
33 (((l) >> 24) & 0x000000FF))
35 #define MXC_DCD_ITEM(addr, val) \
36 .word CPU_2_BE_32(addr), CPU_2_BE_32(val)
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)
48 #define MXC_DCD_CMD_WRT(type, flags, next) \
49 .word CPU_2_BE_32((0xcc << 24) | (((next) - .) << 8) | ((flags) << 3) | (type))
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)
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)
59 #define MXC_DCD_CMD_NOP() \
60 .word CPU_2_BE_32((0xc0 << 24) | (4 << 8))
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)
66 .macro CK_VAL, name, clks, offs, max
70 .ifle \clks - \offs - \max
71 .set \name, \clks - \offs
73 .error "Value \clks out of range for parameter \name"
78 .macro NS_VAL, name, ns, offs, max
82 CK_VAL \name, NS_TO_CK(\ns), \offs, \max
86 .macro CK_MAX, name, ck1, ck2, offs, max
88 CK_VAL \name, \ck1, \offs, \max
90 CK_VAL \name, \ck2, \offs, \max
94 #define ESDMISC_DDR_TYPE_DDR3 0
95 #define ESDMISC_DDR_TYPE_LPDDR2 1
96 #define ESDMISC_DDR_TYPE_DDR2 2
98 #define DIV_ROUND_UP(m,d) (((m) + (d) - 1) / (d))
100 #define CKIL_FREQ_Hz 32768
101 #define ESDOR_CLK_PERIOD_ns (1000000000 / CKIL_FREQ_Hz / 2) /* base clock for ESDOR values */
104 #if SDRAM_SIZE > RAM_BANK0_SIZE
105 #define BANK_ADDR_BITS 2
107 #define BANK_ADDR_BITS 1
109 #define SDRAM_BURST_LENGTH 8
113 #define ADDR_MIRROR 0
114 #define DDR_TYPE ESDMISC_DDR_TYPE_DDR3
116 /* 512/1024MiB SDRAM: NT5CB128M16FP-DII */
117 #if SDRAM_CLK > 666 && SDRAM_CLK <= 800
120 #elif SDRAM_CLK > 533 && SDRAM_CLK <= 666
121 #define CL_VAL 9 // or 10
123 #elif SDRAM_CLK > 400 && SDRAM_CLK <= 533
124 #define CL_VAL 7 // or 8
126 #elif SDRAM_CLK > 333 && SDRAM_CLK <= 400
129 #elif SDRAM_CLK >= 303 && SDRAM_CLK <= 333
133 #error SDRAM clock out of range: 303 .. 800
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 */
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) */
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) */
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
166 #define tRST_CKE (DIV_ROUND_UP(500000 + 2 * ESDOR_CLK_PERIOD_ns, ESDOR_CLK_PERIOD_ns) + 1)
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 */
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
187 #define ESDPDC_VAL_0 ( \
192 (BOTH_CS_PD << 6) | \
197 #define ESDPDC_VAL_1 (ESDPDC_VAL_0 | \
202 #define ROW_ADDR_BITS 14
203 #define COL_ADDR_BITS 10
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
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))
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))
224 ((Rtt_Nom & 1) << 2) | \
225 (((Rtt_Nom >> 1) & 1) << 6) | \
226 (((Rtt_Nom >> 2) & 1) << 9) | \
227 (DLL_DISABLE << 0) | \
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) | \
237 #define ESDSCR_MRS_VAL(cs, mr, val) (((val) << 16) | \
238 (1 << 15) /* CON_REQ */ | \
240 (3 << 4) /* MRS command */ | \
245 #define ESDCFG0_VAL ( \
253 #define ESDCFG1_VAL ( \
263 #define ESDCFG2_VAL ( \
269 #define BURST_LEN (SDRAM_BURST_LENGTH / 8) /* 0: 4 byte 1: 8 byte */
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)))
277 #define ESDMISC_VAL ((ADDR_MIRROR << 19) | \
284 #define ESDOR_VAL ((tXPR << 16) | (tSDE_RST << 8) | (tRST_CKE << 0))
286 #define ESDOTC_VAL ((tAOFPD << 27) | \
295 .word 0x20424346 /* "FCB " marker */
296 .word 0x01 /* FCB version number */
298 .word 0x0 /* primary image starting page number */
299 .word 0x0 /* secondary image starting page number */
302 .word 0x0 /* DBBT start page (0 == NO DBBT) */
303 .word 0 /* Bad block marker offset in main area (unused) */
305 .word 0 /* BI Swap disabled */
306 .word 0 /* Bad Block marker offset in spare area */
311 .word CPU_2_BE_32((0xd1 << 24) | (32 << 8) | 0x40)
327 .long CONFIG_U_BOOT_IMG_SIZE
331 #define DCD_VERSION 0x40
334 .word CPU_2_BE_32((0xd2 << 24) | ((dcd_end - .) << 8) | DCD_VERSION)
336 MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE, zq_calib)
338 MXC_DCD_ITEM(0x53fa8004, 0x00194005) @ set LDO to 1.3V
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)
351 MXC_DCD_ITEM(IOMUXC_BASE_ADDR + 0x340, 0x11) /* GPIO_17 => RESET_OUT */
353 MXC_DCD_ITEM(0x63fd800c, 0x00000000) /* M4IF: MUX NFC signals on WEIM */
355 MXC_DCD_ITEM(0x53fd4014, 0x00888944) /* CBCDR */
357 MXC_DCD_ITEM(0x53fd4014, 0x00888644) /* CBCDR */
359 MXC_DCD_ITEM(0x53fd4018, 0x00016154) /* CBCMR */
361 MXC_DCD_ITEM(0x53fd401c, 0xa6a2a020) /* CSCMR1 */
362 MXC_DCD_ITEM(0x53fd4020, 0xb6b12f0a) /* CSCMR2 */
363 MXC_DCD_ITEM(0x53fd4024, 0x00080b18) /* CSCDR1 */
365 #define DDR_SEL_VAL 2
369 #define DDR_SEL_SHIFT 25
372 #define DDR_INPUT_SHIFT 9
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)
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))
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 */
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 */
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 */
405 MXC_DCD_ITEM(0x53fa8580, SDODT_VAL) /* SDODT0 */
406 MXC_DCD_ITEM(0x53fa8578, SDCLK_VAL) /* SDCLK0 */
408 MXC_DCD_ITEM(0x53fa8564, SDODT_VAL) /* SDODT1 */
409 MXC_DCD_ITEM(0x53fa8570, SDCLK_VAL) /* SDCLK1 */
411 MXC_DCD_ITEM(0x53fa858c, SDCKE_VAL) /* SDCKE0 */
412 MXC_DCD_ITEM(0x53fa855c, SDCKE_VAL) /* SDCKE1 */
414 MXC_DCD_ITEM(0x53fa8574, DSE_MASK) /* DRAM_CAS */
415 MXC_DCD_ITEM(0x53fa8588, DSE_MASK) /* DRAM_RAS */
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 */
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)
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)
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)
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
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 */
455 MXC_DCD_ITEM(0x63fd9020, 3 << 14) /* disable refresh during calibration */
456 MXC_DCD_ITEM(0x63fd9058, 0x00022222)
458 MXC_DCD_ITEM(0x63fd90d0, 0x00000003) /* select default compare pattern for 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 */
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)
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)
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 */
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. */
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 */
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 */
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)
509 MXC_DCD_ITEM(0x63fd901c, 0x00000000)
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
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
545 .ifgt dcd_end - dcd_start - 1768
546 .error "DCD too large!"