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