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
18 #define REG_CCOSR 0x60
20 #define REG_CCGR0 0x68
21 #define REG_CCGR1 0x6c
22 #define REG_CCGR2 0x70
23 #define REG_CCGR3 0x74
24 #define REG_CCGR4 0x78
25 #define REG_CCGR5 0x7c
26 #define REG_CCGR6 0x80
27 #define REG_CCGR7 0x84
28 #define REG_CMEOR 0x88
30 #define CPU_2_BE_32(l) \
31 ((((l) << 24) & 0xFF000000) | \
32 (((l) << 8) & 0x00FF0000) | \
33 (((l) >> 8) & 0x0000FF00) | \
34 (((l) >> 24) & 0x000000FF))
37 CCM register set 0x53FD4000 0x53FD7FFF
38 EIM register set 0x63FDA000 0x63FDAFFF
39 NANDFC register set 0xF7FF0000 0xF7FFFFFF
40 IOMUX Control (IOMUXC) registers 0x53FA8000 0x53FABFFF
41 DPLLC1 register 0x63F80000 0x63F83FFF
42 DPLLC2 register 0x63F84000 0x63F87FFF
43 DPLLC3 register 0x63F88000 0x63F8BFFF
44 DPLLC4 register 0x63F8C000 0x63F8FFFF
45 ESD RAM controller register 0x63FD9000 0x63FD9FFF
46 M4IF register 0x63FD8000 0x63FD8FFF
47 DDR 0x70000000 0xEFFFFFFF
48 EIM 0xF0000000 0xF7FEFFFF
49 NANDFC Buffers 0xF7FF0000 0xF7FFFFFF
50 IRAM Free Space 0xF8006000 0xF8017FF0
51 GPU Memory 0xF8020000 0xF805FFFF
53 #define CHECK_DCD_ADDR(a) ( \
54 ((a) >= 0x53fd4000 && (a) <= 0x53fd7fff) /* CCM */ || \
55 ((a) >= 0x63fda000 && (a) <= 0x63fdafff) /* EIM (CS0) */ || \
56 ((a) >= 0x53fa8000 && (a) <= 0x53fabfff) /* IOMUXC */ || \
57 ((a) >= 0x63f80000 && (a) <= 0x63f8ffff) /* DPLLC1..4 */ || \
58 ((a) >= 0x63fd8000 && (a) <= 0x63fd9fff) /* M4IF & SDRAM Contr. */ || \
59 ((a) >= 0x70000000 && (a) <= 0xefffffff) /* SDRAM */ || \
60 ((a) >= 0xf0000000 && (a) <= 0xf7ffffff) /* EIM & NANDFC buffers */ || \
61 ((a) >= 0xf8006000 && (a) <= 0xf8017ff0) /* IRAM free space */ || \
62 ((a) >= 0xf8020000 && (a) <= 0xf805ffff) /* GPU RAM */)
64 .macro mxc_dcd_item addr, val
65 .ifne CHECK_DCD_ADDR(\addr)
66 .word CPU_2_BE_32(\addr), CPU_2_BE_32(\val)
68 .error "Address \addr not accessible from DCD"
72 #define MXC_DCD_ITEM(addr, val) mxc_dcd_item addr, val
74 #define MXC_DCD_CMD_SZ_BYTE 1
75 #define MXC_DCD_CMD_SZ_SHORT 2
76 #define MXC_DCD_CMD_SZ_WORD 4
77 #define MXC_DCD_CMD_FLAG_WRITE 0x0
78 #define MXC_DCD_CMD_FLAG_CLR 0x1
79 #define MXC_DCD_CMD_FLAG_SET 0x3
80 #define MXC_DCD_CMD_FLAG_CHK_ANY (1 << 0)
81 #define MXC_DCD_CMD_FLAG_CHK_SET (1 << 1)
82 #define MXC_DCD_CMD_FLAG_CHK_CLR (0 << 1)
84 #define MXC_DCD_CMD_WRT(type, flags, next) \
85 .word CPU_2_BE_32((0xcc << 24) | (((next) - .) << 8) | ((flags) << 3) | (type))
87 #define MXC_DCD_CMD_CHK(type, flags, addr, mask) \
88 .word CPU_2_BE_32((0xcf << 24) | (12 << 8) | ((flags) << 3) | (type)),\
89 CPU_2_BE_32(addr), CPU_2_BE_32(mask)
91 #define MXC_DCD_CMD_CHK_CNT(type, flags, addr, mask, count) \
92 .word CPU_2_BE_32((0xcf << 24) | (16 << 8) | ((flags) << 3) | (type)),\
93 CPU_2_BE_32(addr), CPU_2_BE_32(mask), CPU_2_BE_32(count)
95 #define MXC_DCD_CMD_NOP() \
96 .word CPU_2_BE_32((0xc0 << 24) | (4 << 8))
98 #define CK_TO_NS(ck) (((ck) * 1000 + SDRAM_CLK / 2) / SDRAM_CLK)
99 #define NS_TO_CK(ns) (((ns) * SDRAM_CLK + 999) / 1000)
100 #define NS_TO_CK10(ns) DIV_ROUND_UP(NS_TO_CK(ns), 10)
102 .macro CK_VAL, name, clks, offs, max
106 .ifle \clks - \offs - \max
107 .set \name, \clks - \offs
109 .error "Value \clks out of range for parameter \name"
114 .macro NS_VAL, name, ns, offs, max
118 CK_VAL \name, NS_TO_CK(\ns), \offs, \max
122 .macro CK_MAX, name, ck1, ck2, offs, max
124 CK_VAL \name, \ck1, \offs, \max
126 CK_VAL \name, \ck2, \offs, \max
130 #define ESDMISC_DDR_TYPE_DDR3 0
131 #define ESDMISC_DDR_TYPE_LPDDR2 1
132 #define ESDMISC_DDR_TYPE_DDR2 2
134 #define DIV_ROUND_UP(m,d) (((m) + (d) - 1) / (d))
136 #define CKIL_FREQ_Hz 32768
137 #define ESDOR_CLK_PERIOD_ns (1000000000 / CKIL_FREQ_Hz / 2) /* base clock for ESDOR values */
140 #if SDRAM_SIZE > PHYS_SDRAM_1_SIZE
141 #define BANK_ADDR_BITS 2
143 #define BANK_ADDR_BITS 1
145 #define SDRAM_BURST_LENGTH 8
149 #define ADDR_MIRROR 0
150 #define DDR_TYPE ESDMISC_DDR_TYPE_DDR3
152 /* 512/1024MiB SDRAM: NT5CB128M16FP-DII */
153 #if SDRAM_CLK > 666 && SDRAM_CLK <= 800
156 #elif SDRAM_CLK > 533 && SDRAM_CLK <= 666
157 #define CL_VAL 9 // or 10
159 #elif SDRAM_CLK > 400 && SDRAM_CLK <= 533
160 #define CL_VAL 7 // or 8
162 #elif SDRAM_CLK > 333 && SDRAM_CLK <= 400
165 #elif SDRAM_CLK >= 303 && SDRAM_CLK <= 333
169 #error SDRAM clock out of range: 303 .. 800
173 NS_VAL tRFC, 160, 1, 255 /* clks - 1 (0..255) */
174 CK_MAX tXS, NS_TO_CK(CK_TO_NS(tRFC + 1) + 10), 5, 1, 255 /* clks - 1 (0..255) tRFC + 10 */
175 CK_MAX tXP, NS_TO_CK10(75), 3, 1, 7 /* clks - 1 (0..7) */ /* max(3tCK, 7.5ns) */
176 CK_MAX tXPDLL, NS_TO_CK(24), 2, 1, 15 /* clks - 1 (0..15) */
177 NS_VAL tFAW, 50, 1, 31 /* clks - 1 (0..31) */
178 CK_VAL tCL, CL_VAL, 3, 8 /* clks - 3 (0..8) CAS Latency */
181 CK_VAL tRCD, NS_TO_CK10(125), 1, 7 /* clks - 1 (0..7) */ /* 12.5 */
182 CK_VAL tRP, NS_TO_CK10(125), 1, 7 /* clks - 1 (0..7) */ /* 12.5 */
183 NS_VAL tRC, 50, 1, 31 /* clks - 1 (0..31) */
184 CK_VAL tRAS, NS_TO_CK10(375), 1, 31 /* clks - 1 (0..31) */ /* 37.5 */
185 CK_VAL tRPA, 1, 0, 1 /* clks (0..1) */
186 NS_VAL tWR, 15, 1, 15 /* clks - 1 (0..15) */
187 CK_VAL tMRD, 4, 1, 15 /* clks - 1 (0..15) */
188 CK_VAL tCWL, CWL_VAL, 2, 6 /* clks - 2 (0..6) */
191 CK_VAL tDLLK, 512, 1, 511 /* clks - 1 (0..511) */
192 CK_MAX tRTP, NS_TO_CK10(75), 4, 1, 7 /* clks - 1 (0..7) */ /* max(4tCK, 7.5ns) */
193 CK_MAX tWTR, NS_TO_CK10(75), 4, 1, 7 /* clks - 1 (0..7) */ /* max(4tCK, 7.5ns) */
194 CK_MAX tRRD, NS_TO_CK(10), 4, 1, 7 /* clks - 1 (0..7) */
197 CK_MAX tXPR, NS_TO_CK(CK_TO_NS(tRFC + 1) + 10), 5, 1, 255 /* clks - 1 (0..255) max(tRFC + 10, 5CK) */
198 #define tSDE_RST (DIV_ROUND_UP(200000, ESDOR_CLK_PERIOD_ns) + 1)
199 /* Add an extra (or two?) ESDOR_CLK_PERIOD_ns according to
200 * erroneous Erratum Engcm12377
202 #define tRST_CKE (DIV_ROUND_UP(500000 + 2 * ESDOR_CLK_PERIOD_ns, ESDOR_CLK_PERIOD_ns) + 1)
206 CK_VAL tAOFPD, NS_TO_CK10(85), 1, 7 /* clks - 1 (0..7) */ /* 8.5ns */
207 CK_VAL tAONPD, NS_TO_CK10(85), 1, 7 /* clks - 1 (0..7) */ /* 8.5ns */
208 CK_VAL tANPD, tCWL + 1, 1, 15 /* clks - 1 (0..15) */
209 CK_VAL tAXPD, tCWL + 1, 1, 15 /* clks - 1 (0..15) */
210 CK_VAL tODTLon tCWL, 0, 7 /* clks - 1 (0..7) */ /* CWL+AL-2 */
211 CK_VAL tODTLoff tCWL, 0, 31 /* clks - 1 (0..31) */ /* CWL+AL-2 */
214 CK_MAX tCKE, NS_TO_CK(5), 3, 1, 7
215 CK_MAX tCKSRX, NS_TO_CK(10), 5, 0, 7
216 CK_MAX tCKSRE, NS_TO_CK(10), 5, 0, 7
223 #define ESDPDC_VAL_0 ( \
228 (BOTH_CS_PD << 6) | \
233 #define ESDPDC_VAL_1 (ESDPDC_VAL_0 | \
238 #define ROW_ADDR_BITS 14
239 #define COL_ADDR_BITS 10
241 #define Rtt_Nom 1 /* ODT: 0: off 1: RZQ/4 2: RZQ/2 3: RZQ/6 4: RZQ/12 5: RZQ/8 */
242 #define Rtt_WR 0 /* Dynamic ODT: 0: off 1: RZQ/4 2: RZQ/2 */
243 #define DLL_DISABLE 0
246 .set mr0_val, (((1 - DLL_DISABLE) << 8) /* DLL Reset */ | \
247 (SLOW_PD << 12) /* PD exit: 0: fast 1: slow */ |\
248 ((tWR + 1 - 4) << 9) | \
249 ((((tCL + 3) - 4) & 0x7) << 4) | \
250 ((((tCL + 3) - 4) & 0x8) >> 1))
252 .set mr0_val, ((1 << 8) /* DLL Reset */ | \
253 (SLOW_PD << 12) /* PD exit: 0: fast 1: slow */ |\
254 (((tWR + 1) / 2) << 9) | \
255 ((((tCL + 3) - 4) & 0x7) << 4) | \
256 ((((tCL + 3) - 4) & 0x8) >> 1))
260 ((Rtt_Nom & 1) << 2) | \
261 (((Rtt_Nom >> 1) & 1) << 6) | \
262 (((Rtt_Nom >> 2) & 1) << 9) | \
263 (DLL_DISABLE << 0) | \
266 (Rtt_WR << 9) /* dynamic ODT */ | \
267 (0 << 7) /* SRT: Ext. temp. (mutually exclusive with ASR!) */ | \
268 (1 << 6) | /* ASR: Automatic Self Refresh */ \
269 (((tCWL + 2) - 5) << 3) | \
273 #define ESDSCR_MRS_VAL(cs, mr, val) (((val) << 16) | \
274 (1 << 15) /* CON_REQ */ | \
276 (3 << 4) /* MRS command */ | \
281 #define ESDCFG0_VAL ( \
289 #define ESDCFG1_VAL ( \
299 #define ESDCFG2_VAL ( \
305 #define BURST_LEN (SDRAM_BURST_LENGTH / 8) /* 0: 4 byte 1: 8 byte */
307 #define ESDCTL_VAL (((ROW_ADDR_BITS - 11) << 24) | \
308 ((COL_ADDR_BITS - 9) << 20) | \
309 (BURST_LEN << 19) | \
310 (1 << 16) | /* SDRAM bus width */ \
311 ((-1) << (32 - BANK_ADDR_BITS)))
313 #define ESDMISC_VAL ((ADDR_MIRROR << 19) | \
320 #define ESDOR_VAL ((tXPR << 16) | (tSDE_RST << 8) | (tRST_CKE << 0))
322 #define ESDOTC_VAL ((tAOFPD << 27) | \
331 .word 0x20424346 /* "FCB " marker */
332 .word 0x01 /* FCB version number */
334 .word 0x0 /* primary image starting page number */
335 .word 0x0 /* secondary image starting page number */
338 .word 0x0 /* DBBT start page (0 == NO DBBT) */
339 .word 0 /* Bad block marker offset in main area (unused) */
341 .word 0 /* BI Swap disabled */
342 .word 0 /* Bad Block marker offset in spare area */
347 .word CPU_2_BE_32((0xd1 << 24) | (32 << 8) | 0x40)
363 .long CONFIG_U_BOOT_IMG_SIZE
367 #define DCD_VERSION 0x40
370 .word CPU_2_BE_32((0xd2 << 24) | ((dcd_end - .) << 8) | DCD_VERSION)
372 MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE, zq_calib)
374 MXC_DCD_ITEM(0x53fa8004, 0x00194005) @ set LDO to 1.3V
376 /* disable all irrelevant clocks */
377 MXC_DCD_ITEM(CCM_BASE_ADDR + REG_CCGR0, 0xffcf0fff)
378 MXC_DCD_ITEM(CCM_BASE_ADDR + REG_CCGR1, 0x000fffc3)
379 MXC_DCD_ITEM(CCM_BASE_ADDR + REG_CCGR2, 0x033c0000)
380 MXC_DCD_ITEM(CCM_BASE_ADDR + REG_CCGR3, 0x000000ff)
381 MXC_DCD_ITEM(CCM_BASE_ADDR + REG_CCGR4, 0x00000000)
382 MXC_DCD_ITEM(CCM_BASE_ADDR + REG_CCGR5, 0x00fff033)
383 MXC_DCD_ITEM(CCM_BASE_ADDR + REG_CCGR6, 0x0f00030f)
384 MXC_DCD_ITEM(CCM_BASE_ADDR + REG_CCGR7, 0xfff00000)
385 MXC_DCD_ITEM(CCM_BASE_ADDR + REG_CMEOR, 0x00000000)
387 MXC_DCD_ITEM(CCM_BASE_ADDR + REG_CCOSR, (1 << 24) | (0xe << 16))
388 MXC_DCD_ITEM(IOMUXC_BASE_ADDR + 0x320, 0x4) /* GPIO_3 => CLKO2 */
390 MXC_DCD_ITEM(IOMUXC_BASE_ADDR + 0x340, 0x11) /* GPIO_17 => RESET_OUT */
392 MXC_DCD_ITEM(0x63fd800c, 0x00000000) /* M4IF: MUX NFC signals on WEIM */
394 MXC_DCD_ITEM(0x53fd4014, 0x00888944) /* CBCDR */
396 MXC_DCD_ITEM(0x53fd4014, 0x00888644) /* CBCDR */
398 MXC_DCD_ITEM(0x53fd4018, 0x00016154) /* CBCMR */
400 MXC_DCD_ITEM(0x53fd401c, 0xa6a2a020) /* CSCMR1 */
401 MXC_DCD_ITEM(0x53fd4020, 0xb6b12f0a) /* CSCMR2 */
402 MXC_DCD_ITEM(0x53fd4024, 0x00080b18) /* CSCDR1 */
404 #define DDR_SEL_VAL 2
408 #define DDR_SEL_SHIFT 25
411 #define DDR_INPUT_SHIFT 9
417 #define DDR_SEL_MASK (DDR_SEL_VAL << DDR_SEL_SHIFT)
418 #define DSE_MASK (DSE_VAL << DSE_SHIFT)
419 #define ODT_MASK (ODT_VAL << ODT_SHIFT)
421 #define DQM_VAL DSE_MASK
422 #define SDQS_VAL (ODT_MASK | DSE_MASK | (1 << PUE_SHIFT))
423 #define SDODT_VAL (DSE_MASK | (0 << PKE_SHIFT) | (1 << PUE_SHIFT) | (0 << PUS_SHIFT))
424 #define SDCLK_VAL DSE_MASK
425 #define SDCKE_VAL ((1 << PKE_SHIFT) | (1 << PUE_SHIFT) | (0 << PUS_SHIFT))
427 MXC_DCD_ITEM(0x53fa8724, DDR_SEL_MASK) /* DDR_TYPE: DDR3 */
428 MXC_DCD_ITEM(0x53fa86f4, 0 << DDR_INPUT_SHIFT) /* DDRMODE_CTL */
429 MXC_DCD_ITEM(0x53fa8714, 0 << DDR_INPUT_SHIFT) /* GRP_DDRMODE */
430 MXC_DCD_ITEM(0x53fa86fc, 1 << PKE_SHIFT) /* GRP_DDRPKE */
431 MXC_DCD_ITEM(0x53fa8710, 0 << HYS_SHIFT) /* GRP_DDRHYS */
432 MXC_DCD_ITEM(0x53fa8708, 1 << PUE_SHIFT) /* GRP_DDRPK */
434 MXC_DCD_ITEM(0x53fa8584, DQM_VAL) /* DQM0 */
435 MXC_DCD_ITEM(0x53fa8594, DQM_VAL) /* DQM1 */
436 MXC_DCD_ITEM(0x53fa8560, DQM_VAL) /* DQM2 */
437 MXC_DCD_ITEM(0x53fa8554, DQM_VAL) /* DQM3 */
439 MXC_DCD_ITEM(0x53fa857c, SDQS_VAL) /* SDQS0 */
440 MXC_DCD_ITEM(0x53fa8590, SDQS_VAL) /* SDQS1 */
441 MXC_DCD_ITEM(0x53fa8568, SDQS_VAL) /* SDQS2 */
442 MXC_DCD_ITEM(0x53fa8558, SDQS_VAL) /* SDQS3 */
444 MXC_DCD_ITEM(0x53fa8580, SDODT_VAL) /* SDODT0 */
445 MXC_DCD_ITEM(0x53fa8578, SDCLK_VAL) /* SDCLK0 */
447 MXC_DCD_ITEM(0x53fa8564, SDODT_VAL) /* SDODT1 */
448 MXC_DCD_ITEM(0x53fa8570, SDCLK_VAL) /* SDCLK1 */
450 MXC_DCD_ITEM(0x53fa858c, SDCKE_VAL) /* SDCKE0 */
451 MXC_DCD_ITEM(0x53fa855c, SDCKE_VAL) /* SDCKE1 */
453 MXC_DCD_ITEM(0x53fa8574, DSE_MASK) /* DRAM_CAS */
454 MXC_DCD_ITEM(0x53fa8588, DSE_MASK) /* DRAM_RAS */
456 MXC_DCD_ITEM(0x53fa86f0, DSE_MASK) /* GRP_ADDDS */
457 MXC_DCD_ITEM(0x53fa8720, DSE_MASK) /* GRP_CTLDS */
458 MXC_DCD_ITEM(0x53fa8718, DSE_MASK) /* GRP_B0DS */
459 MXC_DCD_ITEM(0x53fa871c, DSE_MASK) /* GRP_B1DS */
460 MXC_DCD_ITEM(0x53fa8728, DSE_MASK) /* GRP_B2DS */
461 MXC_DCD_ITEM(0x53fa872c, DSE_MASK) /* GRP_B3DS */
463 /* calibration defaults */
464 MXC_DCD_ITEM(0x63fd904c, 0x001f001f)
465 MXC_DCD_ITEM(0x63fd9050, 0x001f001f)
466 MXC_DCD_ITEM(0x63fd907c, 0x011e011e)
467 MXC_DCD_ITEM(0x63fd9080, 0x011f0120)
468 MXC_DCD_ITEM(0x63fd9088, 0x3a393d3b)
469 MXC_DCD_ITEM(0x63fd9090, 0x3f3f3f3f)
471 MXC_DCD_ITEM(0x63fd9018, ESDMISC_VAL)
472 MXC_DCD_ITEM(0x63fd9000, ESDCTL_VAL)
473 MXC_DCD_ITEM(0x63fd900c, ESDCFG0_VAL)
474 MXC_DCD_ITEM(0x63fd9010, ESDCFG1_VAL)
475 MXC_DCD_ITEM(0x63fd9014, ESDCFG2_VAL)
477 MXC_DCD_ITEM(0x63fd902c, 0x000026d2)
478 MXC_DCD_ITEM(0x63fd9030, ESDOR_VAL)
479 MXC_DCD_ITEM(0x63fd9008, ESDOTC_VAL)
480 MXC_DCD_ITEM(0x63fd9004, ESDPDC_VAL_0)
483 MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 2, mr2_val)) /* MRS: MR2 */
484 MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 3, mr3_val)) /* MRS: MR3 */
485 MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 1, mr1_val)) /* MRS: MR1 */
486 MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 0, mr0_val)) /* MRS: MR0 */
487 #if BANK_ADDR_BITS > 1
489 MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(1, 2, 0x0000)) /* MRS: MR2 */
490 MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(1, 3, 0x0000)) /* MRS: MR3 */
491 MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(1, 1, 0x0040)) /* MRS: MR1 */
492 MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(1, 0, mr0_val)) /* MRS: MR0 */
494 MXC_DCD_ITEM(0x63fd9020, 3 << 14) /* disable refresh during calibration */
495 MXC_DCD_ITEM(0x63fd9058, 0x00022222)
497 MXC_DCD_ITEM(0x63fd90d0, 0x00000003) /* select default compare pattern for calibration */
500 MXC_DCD_ITEM(0x63fd901c, 0x04008010) /* precharge all */
501 MXC_DCD_ITEM(0x63fd901c, 0x00008040) /* MRS: ZQ calibration */
502 MXC_DCD_ITEM(0x63fd9040, 0x0539002b) /* Force ZQ calibration */
504 MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, 0, 0x63fd9040, 0x00010000)
505 MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE, wl_calib)
508 MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 3, (1 << 2))) /* MRS: select MPR */
509 MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 1, mr1_val | (1 << 7)) | (1 << 9)) /* MRS: start write leveling */
510 MXC_DCD_ITEM(0x63fd901c, 0x00000000)
511 MXC_DCD_ITEM(0x63fd9048, 0x00000001)
513 MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, 0, 0x63fd9048, 0x00000001)
514 MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE, dqs_calib)
515 MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 1, mr1_val)) /* MRS: end write leveling */
516 MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 3, 0)) /* MRS: select normal data path */
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. */
523 MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, 0, 0x63fd907c, 0x90000000)
524 MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE, wr_dl_calib)
525 MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 3, 0)) /* MRS: select normal data path */
527 /* WR DL calibration */
528 MXC_DCD_ITEM(0x63fd901c, 0x00000000)
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 wr_dl_calib: /* 6c4 */
533 MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, 0, 0x63fd90a4, 0x00000010)
534 MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE, rd_dl_calib)
535 MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 3, 0)) /* MRS: select normal data path */
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 rd_dl_calib: /* 70c */
542 MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, 0, 0x63fd90a0, 0x00000010)
543 MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE, dcd_end)
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)
548 MXC_DCD_ITEM(0x63fd901c, 0x00000000)
552 MXC_DCD_ITEM(0x53fa819c, 0x00000000) @ EIM_DA0
553 MXC_DCD_ITEM(0x53fa81a0, 0x00000000) @ EIM_DA1
554 MXC_DCD_ITEM(0x53fa81a4, 0x00000000) @ EIM_DA2
555 MXC_DCD_ITEM(0x53fa81a8, 0x00000000) @ EIM_DA3
556 MXC_DCD_ITEM(0x53fa81ac, 0x00000000) @ EIM_DA4
557 MXC_DCD_ITEM(0x53fa81b0, 0x00000000) @ EIM_DA5
558 MXC_DCD_ITEM(0x53fa81b4, 0x00000000) @ EIM_DA6
559 MXC_DCD_ITEM(0x53fa81b8, 0x00000000) @ EIM_DA7
560 MXC_DCD_ITEM(0x53fa81dc, 0x00000000) @ WE_B
561 MXC_DCD_ITEM(0x53fa81e0, 0x00000000) @ RE_B
562 MXC_DCD_ITEM(0x53fa8228, 0x00000000) @ CLE
563 MXC_DCD_ITEM(0x53fa822c, 0x00000000) @ ALE
564 MXC_DCD_ITEM(0x53fa8230, 0x00000000) @ WP_B
565 MXC_DCD_ITEM(0x53fa8234, 0x00000000) @ RB0
566 MXC_DCD_ITEM(0x53fa8238, 0x00000000) @ CS0
568 MXC_DCD_ITEM(0x53fa84ec, 0x000000e4) @ EIM_DA0
569 MXC_DCD_ITEM(0x53fa84f0, 0x000000e4) @ EIM_DA1
570 MXC_DCD_ITEM(0x53fa84f4, 0x000000e4) @ EIM_DA2
571 MXC_DCD_ITEM(0x53fa84f8, 0x000000e4) @ EIM_DA3
572 MXC_DCD_ITEM(0x53fa84fc, 0x000000e4) @ EIM_DA4
573 MXC_DCD_ITEM(0x53fa8500, 0x000000e4) @ EIM_DA5
574 MXC_DCD_ITEM(0x53fa8504, 0x000000e4) @ EIM_DA6
575 MXC_DCD_ITEM(0x53fa8508, 0x000000e4) @ EIM_DA7
576 MXC_DCD_ITEM(0x53fa852c, 0x00000004) @ NANDF_WE_B
577 MXC_DCD_ITEM(0x53fa8530, 0x00000004) @ NANDF_RE_B
578 MXC_DCD_ITEM(0x53fa85a0, 0x00000004) @ NANDF_CLE_B
579 MXC_DCD_ITEM(0x53fa85a4, 0x00000004) @ NANDF_ALE_B
580 MXC_DCD_ITEM(0x53fa85a8, 0x000000e4) @ NANDF_WE_B
581 MXC_DCD_ITEM(0x53fa85ac, 0x000000e4) @ NANDF_RB0
582 MXC_DCD_ITEM(0x53fa85b0, 0x00000004) @ NANDF_CS0
584 .ifgt dcd_end - dcd_start - 1768
585 .error "DCD too large!"