arm: mx53: karo: select core voltage according to frequency range rather than single...
[karo-tx-redboot.git] / packages / hal / arm / mx53 / karo / v1_0 / include / hal_platform_setup.h
1 #ifndef CYGONCE_HAL_PLATFORM_SETUP_H
2 #define CYGONCE_HAL_PLATFORM_SETUP_H
3
4 //=============================================================================
5 //
6 //      hal_platform_setup.h
7 //
8 //      Platform specific support for HAL (assembly code)
9 //
10 //=============================================================================
11 //####ECOSGPLCOPYRIGHTBEGIN####
12 // -------------------------------------------
13 // This file is part of eCos, the Embedded Configurable Operating System.
14 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
15 //
16 // eCos is free software; you can redistribute it and/or modify it under
17 // the terms of the GNU General Public License as published by the Free
18 // Software Foundation; either version 2 or (at your option) any later version.
19 //
20 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
21 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
22 // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
23 // for more details.
24 //
25 // You should have received a copy of the GNU General Public License along
26 // with eCos; if not, write to the Free Software Foundation, Inc.,
27 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
28 //
29 // As a special exception, if other files instantiate templates or use macros
30 // or inline functions from this file, or you compile this file and link it
31 // with other works to produce a work based on this file, this file does not
32 // by itself cause the resulting work to be covered by the GNU General Public
33 // License. However the source code for this file must still be made available
34 // in accordance with section (3) of the GNU General Public License.
35 //
36 // This exception does not invalidate any other reasons why a work based on
37 // this file might be covered by the GNU General Public License.
38 //
39 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
40 // at http://sources.redhat.com/ecos/ecos-license/
41 // -------------------------------------------
42 //####ECOSGPLCOPYRIGHTEND####
43 //===========================================================================
44
45 #include <pkgconf/system.h>             // System-wide configuration info
46 #include CYGBLD_HAL_VARIANT_H           // Variant specific configuration
47 #include CYGBLD_HAL_PLATFORM_H          // Platform specific configuration
48 #include <cyg/hal/hal_soc.h>            // Variant specific hardware definitions
49 #include <cyg/hal/hal_mmu.h>            // MMU definitions
50 #include CYGBLD_HAL_PLF_DEFS_H          // Platform specific hardware definitions
51 #include CYGHWR_MEMORY_LAYOUT_H
52
53 #define CPU_CLK                         CYGNUM_HAL_ARM_TX53_CPU_CLK
54
55 #define SDRAM_CLK                       400
56
57 #define DEBUG_LED_BIT                   20
58 #define LED_GPIO_BASE                   GPIO2_BASE_ADDR
59 #define LED_MUX_OFFSET                  0x174
60 #define LED_MUX_MODE                    0x11
61
62 #ifdef CYGOPT_HAL_ARM_TX53_DEBUG
63 #define LED_ON                          bl      led_on
64 #define LED_OFF                         bl      led_off
65 #else
66 #define LED_ON
67 #define LED_OFF
68 #endif
69
70 #if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_ROMRAM)
71 #define PLATFORM_SETUP1 _platform_setup1
72 #define CYGHWR_HAL_ARM_HAS_MMU
73
74 #ifdef CYG_HAL_STARTUP_ROMRAM
75 #define CYGSEM_HAL_ROM_RESET_USES_JUMP
76 #endif
77
78 #define TX53_NAND_PAGE_SIZE             2048
79 #define TX53_NAND_BLKS_PER_PAGE         64
80
81 #define PLATFORM_PREAMBLE flash_header
82
83 #ifdef RAM_BANK1_SIZE
84 #define REDBOOT_RAM_START       (RAM_BANK1_BASE + RAM_BANK1_SIZE - REDBOOT_OFFSET)
85 #else
86 #define REDBOOT_RAM_START       (RAM_BANK0_BASE + RAM_BANK0_SIZE - REDBOOT_OFFSET)
87 #endif
88
89 #define redboot_v2p(v)  ((v) - __text_start + REDBOOT_RAM_START)
90
91 // This macro represents the initial startup code for the platform
92         .macro  _platform_setup1
93 KARO_TX53_SETUP_START:
94         mrs     r0, CPSR
95         bic     r0, r0, #0x1f
96         orr     r0, r0, #0xd3
97         msr     CPSR_fc, r0
98
99         /*
100          * Invalidate L1 I/D
101          */
102         mov     r0, #0                  @ set up for MCR
103         mcr     p15, 0, r0, c8, c7, 0   @ invalidate TLBs
104         mcr     p15, 0, r0, c7, c5, 0   @ invalidate icache
105
106         /*
107          * disable MMU stuff and caches
108          */
109         mrc     p15, 0, r0, c1, c0, 0
110         bic     r0, r0, #0x00002000     @ clear bits 13 (--V-)
111         bic     r0, r0, #0x00000007     @ clear bits 2:0 (-CAM)
112         orr     r0, r0, #0x00000002     @ set bit 1 (--A-) Align
113         orr     r0, r0, #0x00000800     @ set bit 12 (Z---) BTB
114         mcr     p15, 0, r0, c1, c0, 0
115
116         /* ARM errata ID #468414 */
117         mrc     15, 0, r1, c1, c0, 1
118         orr     r1, r1, #(1 << 5)    /* enable L1NEON bit */
119         mcr     15, 0, r1, c1, c0, 1
120
121         // Explicitly disable L2 cache
122         mrc     15, 0, r0, c1, c0, 1
123         bic     r0, r0, #0x2
124         mcr     15, 0, r0, c1, c0, 1
125
126         // reconfigure L2 cache aux control reg
127         mov     r0, #0xC0               // tag RAM
128         add     r0, r0, #0x4            // data RAM
129         orr     r0, r0, #(1 << 24)      // disable write allocate delay
130         orr     r0, r0, #(1 << 23)      // disable write allocate combine
131         orr     r0, r0, #(1 << 22)      // disable write allocate
132
133         mcr     15, 1, r0, c9, c0, 2
134
135 init_aips_start:
136         init_aips
137         /* switch off LCD backlight */
138         ldr     r10, =GPIO1_BASE_ADDR
139
140         ldr     r9, [r10, #GPIO_DR]
141         orr     r9, r9, #(1 << 1)
142         str     r9, [r10, #GPIO_DR]
143
144         ldr     r9, [r10, #GPIO_GDIR]
145         orr     r9, r9, #(1 << 1)
146         str     r9, [r10, #GPIO_GDIR]
147
148         LED_INIT
149
150 init_clock_start:
151         init_clock
152         LED_BLINK #1
153
154 /*
155  * Note:
156  *      IOMUX/PBC setup is done in C function plf_hardware_init() for simplicity
157  */
158 STACK_Setup:
159         @ Set up a stack [for calling C code]
160         /* stack is always in the first memory bank, so there is no
161          * need to fixup the address
162          */
163         ldr     sp, .__startup_stack
164
165         @ Create MMU tables
166
167         LED_BLINK #2
168         bl      hal_mmu_init
169         LED_BLINK #3
170
171         /* Workaround for arm erratum #709718 */
172         @ Setup PRRR so device is always mapped to non-shared
173         mrc     MMU_CP, 0, r1, c10, c2, 0 // Read Primary Region Remap Register
174         bic     r1, #(3 << 16)
175         mcr     MMU_CP, 0, r1, c10, c2, 0 // Write Primary Region Remap Register
176
177         @ Enable MMU
178         adr     r2, mmu_switched
179 #ifdef RAM_BANK1_SIZE
180         ldr     r1, =(__text_start - REDBOOT_RAM_START)
181         sub     r2, r2, r1
182 #endif
183         mrc     MMU_CP, 0, r1, MMU_Control, c0
184         orr     r1, r1, #7                      @ enable MMU bit
185         orr     r1, r1, #0x800                  @ enable z bit
186         orr     r1, r1, #(1 << 28)              @ Enable TEX remap, workaround for L1 cache issue
187         mcr     MMU_CP, 0, r1, MMU_Control, c0
188
189         /* Workaround for arm errata #621766 */
190         mrc     MMU_CP, 0, r1, MMU_Control, c0, 1
191         orr     r1, r1, #(1 << 5)               @ enable L1NEON bit
192         mcr     MMU_CP, 0, r1, MMU_Control, c0, 1
193
194         mov     pc, r2                          @ Change address spaces
195         .ltorg
196         .align  5
197 mmu_switched:
198         LED_BLINK #4
199         .endm   @ _platform_setup1
200
201         /* AIPS setup - Only setup MPROTx registers. The PACR default values are good.*/
202         .macro  init_aips
203         /*
204         * Set all MPROTx to be non-bufferable, trusted for R/W,
205         * not forced to user-mode.
206         */
207         ldr     r0, =AIPS1_CTRL_BASE_ADDR
208         ldr     r1, =0x77777777
209         str     r1, [r0, #0x00]
210         str     r1, [r0, #0x04]
211         ldr     r0, =AIPS2_CTRL_BASE_ADDR
212         str     r1, [r0, #0x00]
213         str     r1, [r0, #0x04]
214         .endm   /* init_aips */
215
216         .macro  init_clock
217         ldr     r0, =CCM_BASE_ADDR
218         ldr     r1, [r0, #CLKCTL_CCR]
219         tst     r1, #(1 << 12)
220         bne     osc_ok
221
222         orr     r1, r1, #(1 << 12)
223         str     r1, [r0, #CLKCTL_CCR]
224 osc_ok:
225         /* Switch ARM to step clock */
226         mov     r1, #0x4
227         str     r1, [r0, #CLKCTL_CCSR]
228
229 #if CPU_CLK == 1000
230         setup_pll PLL1_BASE_ADDR, 1000
231 #elif CPU_CLK == 800
232         setup_pll PLL1_BASE_ADDR, 800
233 #else
234 #error Bad CPU clock
235 #endif
236         setup_pll PLL3_BASE_ADDR, 400
237
238         /* Switch peripherals to PLL3 */
239         ldr     r1, [r0, #CLKCTL_CBCMR]
240         bic     r1, #(3 << 12)
241         orr     r1, #(1 << 12)
242         str     r1, [r0, #CLKCTL_CBCMR]
243
244         ldr     r1, [r0, #CLKCTL_CBCDR]
245         orr     r1, r1, #(1 << 25)
246         str     r1, [r0, #CLKCTL_CBCDR]
247 1:
248         /* make sure change is effective */
249         ldr     r1, [r0, #CLKCTL_CDHIPR]
250         cmp     r1, #0x0
251         bne     1b
252
253 #if SDRAM_CLK == 400
254         setup_pll PLL2_BASE_ADDR, 400
255 #elif SDRAM_CLK == 333
256         setup_pll PLL2_BASE_ADDR, 333
257 #elif SDRAM_CLK == 266
258         setup_pll PLL2_BASE_ADDR, 266
259 #elif SDRAM_CLK == 216
260         setup_pll PLL2_BASE_ADDR, 216
261 #elif SDRAM_CLK == 666
262         setup_pll PLL2_BASE_ADDR, 666
263 #else
264 #error Bad SDRAM_CLK
265 #endif
266         /* Switch peripheral to PLL2 */
267         ldr     r1, [r0, #CLKCTL_CBCDR]
268         bic     r1, #(1 << 25)
269         str     r1, [r0, #CLKCTL_CBCDR]
270
271         ldr     r1, [r0, #CLKCTL_CBCMR]
272         bic     r1, #(3 << 12)
273         orr     r1, #(2 << 12)
274         str     r1, [r0, #CLKCTL_CBCMR]
275
276         /* make sure change is effective */
277 1:
278         ldr     r1, [r0, #CLKCTL_CDHIPR]
279         cmp     r1, #0x0
280         bne     1b
281
282         setup_pll PLL3_BASE_ADDR, 216
283
284         /* Set the platform clock dividers */
285         ldr     r2, =PLATFORM_BASE_ADDR
286         ldr     r1, PLATFORM_CLOCK_DIV
287         str     r1, [r2, #PLATFORM_ICGC]
288
289         mov     r1, #0
290         str     r1, [r0, #CLKCTL_CACRR] /* ARM podf */
291
292         /* Switch ARM back to PLL 1. */
293         mov     r1, #0
294         str     r1, [r0, #CLKCTL_CCSR]
295
296         /* setup the rest */
297         ldr     r1, W_CSCDR1_VAL
298         str     r1, [r0, #CLKCTL_CSCDR1]
299         ldr     r1, W_CSCMR1_VAL
300         str     r1, [r0, #CLKCTL_CSCMR1]
301
302         mov     r1, #0x00000
303         str     r1, [r0, #CLKCTL_CCDR]
304
305         /* for cko - for ARM div by 8 */
306         mov     r1, #0x000A0000
307         orr     r1, r1, #0x00000F0
308         str     r1, [r0, #CLKCTL_CCOSR]
309 end_clk_init:
310         .endm   @ init_clock
311
312         .macro  setup_pll pll, mhz
313         ldr     r2, =\pll
314         ldr     r1, =0x1232
315         str     r1, [r2, #PLL_DP_CTL]           @ Set DPLL ON (set UPEN bit); BRMO=1
316         mov     r1, #0x2
317         str     r1, [r2, #PLL_DP_CONFIG]        @ Enable auto-restart AREN bit
318
319         ldr     r1, W_DP_OP_\mhz
320         str     r1, [r2, #PLL_DP_OP]
321         str     r1, [r2, #PLL_DP_HFS_OP]
322
323         ldr     r1, W_DP_MFD_\mhz
324         str     r1, [r2, #PLL_DP_MFD]
325         str     r1, [r2, #PLL_DP_HFS_MFD]
326
327         ldr     r1, W_DP_MFN_\mhz
328         str     r1, [r2, #PLL_DP_MFN]
329         str     r1, [r2, #PLL_DP_HFS_MFN]
330
331         /* Now restart PLL */
332         ldr     r1, =0x1232
333         str     r1, [r2, #PLL_DP_CTL]
334 101:
335         ldr     r1, [r2, #PLL_DP_CTL]
336         ands    r1, r1, #0x1
337         beq     101b
338         .endm
339 #else // defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_ROMRAM)
340 #define PLATFORM_SETUP1
341 #endif
342 #ifndef CYGOPT_HAL_ARM_TX53_DEBUG
343         .macro  LED_BLINK,val
344         .endm
345         .macro  DELAY,ms
346         .endm
347 #else
348 #define CYGHWR_LED_MACRO        LED_BLINK #\x
349
350         .macro  DELAY,ms
351         ldr     r10, =\ms
352         bl      delay
353         .endm
354
355         .macro  LED_BLINK,val
356         mov     r8, \val
357         bl      led_blink
358         .endm
359 #endif
360
361         .macro  LED_INIT
362         // initialize GPIO4_10 (PAD CSI2_D13) for LED on STK5
363         ldr     r10, =LED_GPIO_BASE
364         // GPIO_DR
365         ldr     r9, [r10, #GPIO_DR]
366         bic     r9, #(1 << DEBUG_LED_BIT)       @ LED OFF
367         str     r9, [r10, #GPIO_DR]
368         // GPIO_GDIR
369         ldr     r9, [r10, #GPIO_GDIR]
370         orr     r9, r9, #(1 << DEBUG_LED_BIT)
371         str     r9, [r10, #GPIO_GDIR]
372         .endm
373
374 #ifdef CYGOPT_HAL_ARM_TX53_DEBUG
375 led_on:
376         ldr     r10, =LED_GPIO_BASE
377         // GPIO_DR
378         ldr     r9, [r10, #GPIO_DR]
379         orr     r9, #(1 << DEBUG_LED_BIT)       @ LED ON
380         str     r9, [r10, #GPIO_DR]
381         mov     pc, lr
382
383 led_off:
384         ldr     r10, =LED_GPIO_BASE
385         // GPIO_DR
386         ldr     r9, [r10, #GPIO_DR]
387         bic     r9, #(1 << DEBUG_LED_BIT)       @ LED OFF
388         str     r9, [r10, #GPIO_DR]
389         mov     pc, lr
390
391 delay:
392         subs    r10, r10, #1
393         movmi   pc, lr
394
395         ldr     r9, =(36000 / 10)
396 2:
397         subs    r9, r9, #1
398         bne     2b
399         b       delay
400
401 led_blink:
402         mov     r7, lr
403 1:
404         subs    r8, r8, #1
405         bmi     2f
406
407         LED_ON
408         DELAY   200
409         LED_OFF
410         DELAY   300
411         b       1b
412 2:
413         DELAY   700
414         mov     pc, r7
415 #endif
416
417 #define PLATFORM_VECTORS         _platform_vectors
418         .macro  _platform_vectors
419         .globl  _KARO_MAGIC
420 _KARO_MAGIC:
421         .ascii  "KARO_CE6"
422         .globl  _KARO_STRUCT_SIZE
423 _KARO_STRUCT_SIZE:
424         .word   0       // reserve space structure length
425
426         .globl  _KARO_CECFG_START
427 _KARO_CECFG_START:
428         .rept   1024 / 4
429         .word   0       // reserve space for CE configuration
430         .endr
431
432         .globl  _KARO_CECFG_END
433 _KARO_CECFG_END:
434         .endm
435
436         .ltorg
437         .align  5
438         .ascii  "KARO TX53 " __DATE__ " " __TIME__
439         .align
440
441 #define CPU_2_BE_32(l)                  \
442         ((((l) << 24) & 0xFF000000) |   \
443         (((l) << 8) & 0x00FF0000) |     \
444         (((l) >> 8) & 0x0000FF00) |     \
445         (((l) >> 24) & 0x000000FF))
446
447 /*
448 CCM register set                 0x53FD4000 0x53FD7FFF
449 EIM register set                 0x63FDA000 0x63FDAFFF
450 NANDFC register set              0xF7FF0000 0xF7FFFFFF
451 IOMUX Control (IOMUXC) registers 0x53FA8000 0x53FABFFF
452 DPLLC1 register                  0x63F80000 0x63F83FFF
453 DPLLC2 register                  0x63F84000 0x63F87FFF
454 DPLLC3 register                  0x63F88000 0x63F8BFFF
455 DPLLC4 register                  0x63F8C000 0x63F8FFFF
456 ESD RAM controller register      0x63FD9000 0x63FD9FFF
457 M4IF register                    0x63FD8000 0x63FD8FFF
458 DDR                              0x70000000 0xEFFFFFFF
459 EIM                              0xF0000000 0xF7FEFFFF
460 NANDFC Buffers                   0xF7FF0000 0xF7FFFFFF
461 IRAM Free Space                  0xF8006000 0xF8017FF0
462 GPU Memory                       0xF8020000 0xF805FFFF
463 */
464 #define CHECK_DCD_ADDR(a)       (                                       \
465         ((a) >= 0x53fd4000 && (a) <= 0x53fd7fff) /* CCM */ ||           \
466         ((a) >= 0x63fda000 && (a) <= 0x63fdafff) /* EIM (CS0) */ ||     \
467         ((a) >= 0x53fa8000 && (a) <= 0x53fabfff) /* IOMUXC */ ||        \
468         ((a) >= 0x63f80000 && (a) <= 0x63f8ffff) /* DPLLC1..4 */ ||             \
469         ((a) >= 0x63fd8000 && (a) <= 0x63fd9fff) /* M4IF & SDRAM Contr. */ || \
470         ((a) >= 0x70000000 && (a) <= 0xefffffff) /* SDRAM */ ||         \
471         ((a) >= 0xf0000000 && (a) <= 0xf7ffffff) /* EIM & NANDFC buffers */ || \
472         ((a) >= 0xf8006000 && (a) <= 0xf8017ff0) /* IRAM free space */ || \
473         ((a) >= 0xf8020000 && (a) <= 0xf805ffff) /* GPU RAM */)
474
475         .macro  mxc_dcd_item    addr, val
476         .ifne   CHECK_DCD_ADDR(\addr)
477         .word   CPU_2_BE_32(\addr), CPU_2_BE_32(\val)
478         .else
479         .error  "Address \addr not accessible from DCD"
480         .endif
481         .endm
482
483 #define MXC_DCD_ITEM(addr, val)         mxc_dcd_item    (addr), (val)
484
485 #define MXC_DCD_CMD_SZ_BYTE             1
486 #define MXC_DCD_CMD_SZ_SHORT            2
487 #define MXC_DCD_CMD_SZ_WORD             4
488 #define MXC_DCD_CMD_FLAG_WRITE          0x0
489 #define MXC_DCD_CMD_FLAG_CLR            0x1
490 #define MXC_DCD_CMD_FLAG_SET            0x3
491 #define MXC_DCD_CMD_FLAG_CHK_ANY        (1 << 0)
492 #define MXC_DCD_CMD_FLAG_CHK_SET        (1 << 1)
493 #define MXC_DCD_CMD_FLAG_CHK_CLR        (0 << 1)
494
495 #define MXC_DCD_CMD_WRT(type, flags, next)                                      \
496         .word   CPU_2_BE_32((0xcc << 24) | (((next) - .) << 8) | ((flags) << 3) | (type))
497
498 #define MXC_DCD_CMD_CHK(type, flags, addr, mask)                                \
499         .word   CPU_2_BE_32((0xcf << 24) | (12 << 8) | ((flags) << 3) | (type)),\
500                 CPU_2_BE_32(addr), CPU_2_BE_32(mask)
501
502 #define MXC_DCD_CMD_CHK_CNT(type, flags, addr, mask, count)                     \
503         .word   CPU_2_BE_32((0xcf << 24) | (16 << 8) | ((flags) << 3) | (type)),\
504                 CPU_2_BE_32(addr), CPU_2_BE_32(mask), CPU_2_BE_32(count)
505
506 #define MXC_DCD_CMD_NOP()                                                       \
507         .word   CPU_2_BE_32((0xc0 << 24) | (4 << 8))
508
509 #define CK_TO_NS(ck)    (((ck) * 1000 + SDRAM_CLK / 2) / SDRAM_CLK)
510 #define NS_TO_CK(ns)    (((ns) * SDRAM_CLK + 999) / 1000)
511 #define NS_TO_CK10(ns)  DIV_ROUND_UP(NS_TO_CK(ns), 10)
512
513         .macro          CK_VAL, name, clks, offs, max
514         .iflt           \clks - \offs
515         .set            \name, 0
516         .else
517         .ifle           \clks - \offs - \max
518         .set            \name, \clks - \offs
519         .else
520         .error          "Value \clks out of range for parameter \name"
521         .endif
522         .endif
523         .endm
524
525         .macro          NS_VAL, name, ns, offs, max
526         .iflt           \ns - \offs
527         .set            \name, 0
528         .else
529         CK_VAL          \name, NS_TO_CK(\ns), \offs, \max
530         .endif
531         .endm
532
533         .macro          CK_MAX, name, ck1, ck2, offs, max
534         .ifgt           \ck1 - \ck2
535         CK_VAL          \name, \ck1, \offs, \max
536         .else
537         CK_VAL          \name, \ck2, \offs, \max
538         .endif
539         .endm
540
541 #define ESDMISC_DDR_TYPE_DDR3           0
542 #define ESDMISC_DDR_TYPE_LPDDR2         1
543 #define ESDMISC_DDR_TYPE_DDR2           2
544
545 #define DIV_ROUND_UP(m,d)               (((m) + (d) - 1) / (d))
546
547 #define CKIL_FREQ_Hz                    32768
548 #define ESDOR_CLK_PERIOD_ns             (1000000000 / CKIL_FREQ_Hz / 2) /* base clock for ESDOR values */
549
550 /* DDR3 SDRAM */
551 #if SDRAM_SIZE > RAM_BANK0_SIZE
552 #define BANK_ADDR_BITS                  2
553 #else
554 #define BANK_ADDR_BITS                  1
555 #endif
556 #define SDRAM_BURST_LENGTH              8
557 #define RALAT                           5
558 #define WALAT                           0
559 #define BI_ON                           0
560 #define ADDR_MIRROR                     0
561 #define DDR_TYPE                        ESDMISC_DDR_TYPE_DDR3
562
563 /* 512/1024MiB SDRAM: NT5CB128M16FP-DII */
564 #if SDRAM_CLK > 666 && SDRAM_CLK <= 800
565 #define CL_VAL  11
566 #define CWL_VAL 8
567 #elif SDRAM_CLK > 533 && SDRAM_CLK <= 666
568 #define CL_VAL  9 // or 10
569 #define CWL_VAL 7
570 #elif SDRAM_CLK > 400 && SDRAM_CLK <= 533
571 #define CL_VAL  7 // or 8
572 #define CWL_VAL 6
573 #elif SDRAM_CLK > 333 && SDRAM_CLK <= 400
574 #define CL_VAL  6
575 #define CWL_VAL 5
576 #elif SDRAM_CLK >= 303 && SDRAM_CLK <= 333
577 #define CL_VAL  5
578 #define CWL_VAL 5
579 #else
580 #error SDRAM clock out of range: 303 .. 800
581 #endif
582
583 /* ESDCFG0 0x0c */
584 NS_VAL  tRFC,   160, 1, 255             /* clks - 1 (0..255) */
585 CK_MAX  tXS,    NS_TO_CK(CK_TO_NS(tRFC + 1) + 10), 5, 1, 255 /* clks - 1 (0..255) tRFC + 10 */
586 CK_MAX  tXP,    NS_TO_CK10(75), 3, 1, 7 /* clks - 1 (0..7) */ /* max(3tCK, 7.5ns) */
587 CK_MAX  tXPDLL, NS_TO_CK(24), 2, 1, 15  /* clks - 1 (0..15) */
588 NS_VAL  tFAW,   50, 1, 31               /* clks - 1 (0..31) */
589 CK_VAL  tCL,    CL_VAL, 3, 8            /* clks - 3 (0..8) CAS Latency */
590
591 /* ESDCFG1 0x10 */
592 CK_VAL  tRCD,   NS_TO_CK10(125), 1, 7   /* clks - 1 (0..7) */ /* 12.5 */
593 CK_VAL  tRP,    NS_TO_CK10(125), 1, 7   /* clks - 1 (0..7) */ /* 12.5 */
594 NS_VAL  tRC,    50, 1, 31               /* clks - 1 (0..31) */
595 CK_VAL  tRAS,   NS_TO_CK10(375), 1, 31  /* clks - 1 (0..31) */ /* 37.5 */
596 CK_VAL  tRPA,   1, 0, 1                 /* clks     (0..1) */
597 NS_VAL  tWR,    15, 1, 15               /* clks - 1 (0..15) */
598 CK_VAL  tMRD,   4, 1, 15                /* clks - 1 (0..15) */
599 CK_VAL  tCWL,   CWL_VAL, 2, 6           /* clks - 2 (0..6) */
600
601 /* ESDCFG2 0x14 */
602 CK_VAL  tDLLK,  512, 1, 511             /* clks - 1 (0..511) */
603 CK_MAX  tRTP,   NS_TO_CK10(75), 4, 1, 7 /* clks - 1 (0..7) */ /* max(4tCK, 7.5ns) */
604 CK_MAX  tWTR,   NS_TO_CK10(75), 4, 1, 7 /* clks - 1 (0..7) */ /* max(4tCK, 7.5ns) */
605 CK_MAX  tRRD,   NS_TO_CK(10), 4, 1, 7   /* clks - 1 (0..7) */
606
607 /* ESDOR 0x30 */
608 CK_MAX  tXPR,   NS_TO_CK(CK_TO_NS(tRFC + 1) + 10), 5, 1, 255 /* clks - 1 (0..255) max(tRFC + 10, 5CK) */
609 #define tSDE_RST                        (DIV_ROUND_UP(200000, ESDOR_CLK_PERIOD_ns) + 1)
610                                         /* Add an extra (or two?) ESDOR_CLK_PERIOD_ns according to
611                                          * erroneous Erratum Engcm12377
612                                          */
613 #define tRST_CKE                        (DIV_ROUND_UP(500000 + 2 * ESDOR_CLK_PERIOD_ns, ESDOR_CLK_PERIOD_ns) + 1)
614
615
616 /* ESDOTC 0x08 */
617 CK_VAL  tAOFPD, NS_TO_CK10(85), 1, 7    /* clks - 1 (0..7) */ /* 8.5ns */
618 CK_VAL  tAONPD, NS_TO_CK10(85), 1, 7    /* clks - 1 (0..7) */ /* 8.5ns */
619 CK_VAL  tANPD,  tCWL + 1, 1, 15         /* clks - 1 (0..15) */
620 CK_VAL  tAXPD,  tCWL + 1, 1, 15         /* clks - 1 (0..15) */
621 CK_VAL  tODTLon tCWL, 0, 7              /* clks - 1 (0..7) */ /* CWL+AL-2 */
622 CK_VAL  tODTLoff tCWL, 0, 31            /* clks - 1 (0..31) */ /* CWL+AL-2 */
623
624 /* ESDPDC 0x04 */
625 CK_MAX  tCKE,   NS_TO_CK(5), 3, 1, 7
626 CK_MAX  tCKSRX, NS_TO_CK(10), 5, 0, 7
627 CK_MAX  tCKSRE, NS_TO_CK(10), 5, 0, 7
628
629 #define PRCT            0
630 #define PWDT            5
631 #define SLOW_PD         0
632 #define BOTH_CS_PD      1
633
634 #define ESDPDC_VAL_0    (       \
635         (PRCT << 28) |          \
636         (PRCT << 24) |          \
637         (tCKE << 16) |          \
638         (SLOW_PD << 7) |        \
639         (BOTH_CS_PD << 6) |     \
640         (tCKSRX << 3) |         \
641         (tCKSRE << 0)           \
642         )
643
644 #define ESDPDC_VAL_1    (ESDPDC_VAL_0 |         \
645         (PWDT << 12) |                          \
646         (PWDT << 8)                             \
647         )
648
649 #define ROW_ADDR_BITS                   14
650 #define COL_ADDR_BITS                   10
651
652 #define Rtt_Nom                         1 /* ODT: 0: off 1: RZQ/4 2: RZQ/2 3: RZQ/6 4: RZQ/12 5: RZQ/8 */
653 #define Rtt_WR                          0 /* Dynamic ODT: 0: off 1: RZQ/4 2: RZQ/2 */
654 #define DLL_DISABLE                     0
655
656         .iflt   tWR - 7
657         .set    mr0_val, (((1 - DLL_DISABLE) << 8) /* DLL Reset */ |    \
658                         (SLOW_PD << 12) /* PD exit: 0: fast 1: slow */ |\
659                         ((tWR + 1 - 4) << 9) |                          \
660                         ((((tCL + 3) - 4) & 0x7) << 4) |                \
661                         ((((tCL + 3) - 4) & 0x8) >> 1))
662         .else
663         .set    mr0_val, ((1 << 8) /* DLL Reset */ |                    \
664                         (SLOW_PD << 12) /* PD exit: 0: fast 1: slow */ |\
665                         (((tWR + 1) / 2) << 9) |        \
666                         ((((tCL + 3) - 4) & 0x7) << 4) | \
667                         ((((tCL + 3) - 4) & 0x8) >> 1))
668         .endif
669
670 #define mr1_val                         (                                       \
671                                          ((Rtt_Nom & 1) << 2) |                 \
672                                          (((Rtt_Nom >> 1) & 1) << 6) |          \
673                                          (((Rtt_Nom >> 2) & 1) << 9) |          \
674                                          (DLL_DISABLE << 0) |                   \
675                                         0)
676 #define mr2_val                         (                                       \
677                                          (Rtt_WR << 9) /* dynamic ODT */ |      \
678                                          (0 << 7) /* SRT: Ext. temp. (mutually exclusive with ASR!) */ | \
679                                          (1 << 6) | /* ASR: Automatic Self Refresh */\
680                                          (((tCWL + 2) - 5) << 3) |              \
681                                         0)
682 #define mr3_val                         0
683
684 #define ESDSCR_MRS_VAL(cs, mr, val)     (((val) << 16) |                        \
685                                         (1 << 15) /* CON_REQ */ |               \
686                                         0x80 |                                  \
687                                         (3 << 4) /* MRS command */ |            \
688                                         ((cs) << 3) |                           \
689                                         ((mr) << 0) |                           \
690                                         0)
691
692 #define ESDCFG0_VAL     (               \
693         (tRFC << 24) |                  \
694         (tXS << 16) |                   \
695         (tXP << 13) |                   \
696         (tXPDLL << 9) |                 \
697         (tFAW << 4) |                   \
698         (tCL << 0))                     \
699
700 #define ESDCFG1_VAL     (               \
701         (tRCD << 29) |                  \
702         (tRP << 26) |                   \
703         (tRC << 21) |                   \
704         (tRAS << 16) |                  \
705         (tRPA << 15) |                  \
706         (tWR << 9) |                    \
707         (tMRD << 5) |                   \
708         (tCWL << 0))                    \
709
710 #define ESDCFG2_VAL     (               \
711         (tDLLK << 16) |                 \
712         (tRTP << 6) |                   \
713         (tWTR << 3) |                   \
714         (tRRD << 0))
715
716 #define BL                              (SDRAM_BURST_LENGTH / 8) /* 0: 4 byte 1: 8 byte */
717 #define ESDCTL_VAL                      (((ROW_ADDR_BITS - 11) << 24) | \
718                                         ((COL_ADDR_BITS - 9) << 20) | \
719                                         (BL << 19) | \
720                                         (1 << 16) | /* SDRAM bus width */ \
721                                         ((-1) << (32 - BANK_ADDR_BITS)))
722
723 #define ESDMISC_VAL                     ((1 << 12) | \
724                                         (0x3 << 9) | \
725                                         (RALAT << 6) | \
726                                         (WALAT << 16) | \
727                                         (ADDR_MIRROR << 19) | \
728                                         (DDR_TYPE << 3))
729
730 #define ESDOR_VAL               ((tXPR << 16) | (tSDE_RST << 8) | (tRST_CKE << 0))
731
732 #define ESDOTC_VAL              ((tAOFPD << 27) |       \
733                                 (tAONPD << 24) |        \
734                                 (tANPD << 20) |         \
735                                 (tAXPD << 16) |         \
736                                 (tODTLon << 12) |       \
737                                 (tODTLoff << 4))
738
739         .macro  flash_header
740 __text_start:
741 fcb_start:
742         b       reset_vector
743         .word   0x20424346      /* "FCB " marker */
744         .word   0x01    /* FCB version number */
745         .org    0x68
746         .word   0x0     /* primary image starting page number */
747         .word   0x0     /* secondary image starting page number */
748         .word   0x6b
749         .word   0x6b
750         .word   0x0     /* DBBT start page (0 == NO DBBT) */
751         .word   0       /* Bad block marker offset in main area (unused) */
752         .org    0xac
753         .word   0       /* BI Swap disabled */
754         .word   0       /* Bad Block marker offset in spare area */
755 fcb_end:
756
757         .org    0x400
758 ivt_header:
759         .word   CPU_2_BE_32((0xd1 << 24) | (32 << 8) | 0x40)
760 app_start_addr:
761         .long   redboot_v2p(reset_vector)
762         .long   0x0
763 dcd_ptr:
764         .long   redboot_v2p(dcd_hdr)
765 boot_data_ptr:
766         .word   redboot_v2p(boot_data)
767 self_ptr:
768         .word   redboot_v2p(ivt_header)
769 app_code_csf:
770         .word   0x0
771         .word   0x0
772 boot_data:
773         .long   redboot_v2p(__text_start)
774 image_len:
775         .long   REDBOOT_IMAGE_SIZE
776 plugin:
777         .word   0
778 ivt_end:
779 #define DCD_VERSION     0x40
780
781 dcd_hdr:
782         .word   CPU_2_BE_32((0xd2 << 24) | ((dcd_end - .) << 8) | DCD_VERSION)
783 dcd_start:
784         MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE, zq_calib)
785
786         MXC_DCD_ITEM(0x53fa8004, 0x00194005)    @ set LDO to 1.3V
787
788         /* disable all irrelevant clocks */
789         MXC_DCD_ITEM(CCM_BASE_ADDR + CLKCTL_CCGR0, 0xffcc0fff)
790         MXC_DCD_ITEM(CCM_BASE_ADDR + CLKCTL_CCGR1, 0x000fffc3)
791         MXC_DCD_ITEM(CCM_BASE_ADDR + CLKCTL_CCGR2, 0x033c0000)
792         MXC_DCD_ITEM(CCM_BASE_ADDR + CLKCTL_CCGR3, 0x00000000)
793         MXC_DCD_ITEM(CCM_BASE_ADDR + CLKCTL_CCGR4, 0x00000000)
794         MXC_DCD_ITEM(CCM_BASE_ADDR + CLKCTL_CCGR5, 0x00fff033)
795         MXC_DCD_ITEM(CCM_BASE_ADDR + CLKCTL_CCGR6, 0x0f00030f)
796         MXC_DCD_ITEM(CCM_BASE_ADDR + CLKCTL_CCGR7, 0xfff00000)
797         MXC_DCD_ITEM(CCM_BASE_ADDR + CLKCTL_CMEOR, 0x00000000)
798
799         MXC_DCD_ITEM(IOMUXC_BASE_ADDR + LED_MUX_OFFSET, LED_MUX_MODE)   /* EIM_D18 => GPIO2[20] STK5-LED */
800         MXC_DCD_ITEM(IOMUXC_BASE_ADDR + 0x318, 0x11)    /* GPIO_1 => LCD Backlight */
801
802         MXC_DCD_ITEM(0x63fd800c, 0x00000000)    /* M4IF: MUX NFC signals on WEIM */
803 #if SDRAM_CLK > 333
804         MXC_DCD_ITEM(0x53fd4014, 0x00888944)    /* CBCDR */
805 #else
806         MXC_DCD_ITEM(0x53fd4014, 0x00888644)    /* CBCDR */
807 #endif
808         MXC_DCD_ITEM(0x53fd4018, 0x00016154)    /* CBCMR */
809
810 #define DDR_SEL_VAL     2
811 #define DSE_VAL         5
812 #define ODT_VAL         2
813
814 #define DDR_SEL_SHIFT   25
815 #define ODT_SHIFT       22
816 #define DSE_SHIFT       19
817 #define DDR_INPUT_SHIFT 9
818 #define HYS_SHIFT       8
819 #define PKE_SHIFT       7
820 #define PUE_SHIFT       6
821 #define PUS_SHIFT       4
822
823 #define DDR_SEL_MASK    (DDR_SEL_VAL << DDR_SEL_SHIFT)
824 #define DSE_MASK        (DSE_VAL << DSE_SHIFT)
825 #define ODT_MASK        (ODT_VAL << ODT_SHIFT)
826
827 #define DQM_VAL         DSE_MASK
828 #define SDQS_VAL        (ODT_MASK | DSE_MASK | (1 << PUE_SHIFT))
829 #define SDODT_VAL       (DSE_MASK | (0 << PKE_SHIFT) | (1 << PUE_SHIFT) | (0 << PUS_SHIFT))
830 #define SDCLK_VAL       DSE_MASK
831 #define SDCKE_VAL       ((1 << PKE_SHIFT) | (1 << PUE_SHIFT) | (0 << PUS_SHIFT))
832
833         MXC_DCD_ITEM(0x53fa8724, DDR_SEL_MASK) /* DDR_TYPE: DDR3 */
834         MXC_DCD_ITEM(0x53fa86f4, 0 << DDR_INPUT_SHIFT) /* DDRMODE_CTL */
835         MXC_DCD_ITEM(0x53fa8714, 0 << DDR_INPUT_SHIFT) /* GRP_DDRMODE */
836         MXC_DCD_ITEM(0x53fa86fc, 1 << PKE_SHIFT) /* GRP_DDRPKE */
837         MXC_DCD_ITEM(0x53fa8710, 0 << HYS_SHIFT) /* GRP_DDRHYS */
838         MXC_DCD_ITEM(0x53fa8708, 1 << PUE_SHIFT) /* GRP_DDRPK */
839
840         MXC_DCD_ITEM(0x53fa8584, DQM_VAL) /* DQM0 */
841         MXC_DCD_ITEM(0x53fa8594, DQM_VAL) /* DQM1 */
842         MXC_DCD_ITEM(0x53fa8560, DQM_VAL) /* DQM2 */
843         MXC_DCD_ITEM(0x53fa8554, DQM_VAL) /* DQM3 */
844
845         MXC_DCD_ITEM(0x53fa857c, SDQS_VAL) /* SDQS0 */
846         MXC_DCD_ITEM(0x53fa8590, SDQS_VAL) /* SDQS1 */
847         MXC_DCD_ITEM(0x53fa8568, SDQS_VAL) /* SDQS2 */
848         MXC_DCD_ITEM(0x53fa8558, SDQS_VAL) /* SDQS3 */
849
850         MXC_DCD_ITEM(0x53fa8580, SDODT_VAL) /* SDODT0 */
851         MXC_DCD_ITEM(0x53fa8578, SDCLK_VAL) /* SDCLK0 */
852
853         MXC_DCD_ITEM(0x53fa8564, SDODT_VAL) /* SDODT1 */
854         MXC_DCD_ITEM(0x53fa8570, SDCLK_VAL) /* SDCLK1 */
855
856         MXC_DCD_ITEM(0x53fa858c, SDCKE_VAL) /* SDCKE0 */
857         MXC_DCD_ITEM(0x53fa855c, SDCKE_VAL) /* SDCKE1 */
858
859         MXC_DCD_ITEM(0x53fa8574, DSE_MASK) /* DRAM_CAS */
860         MXC_DCD_ITEM(0x53fa8588, DSE_MASK) /* DRAM_RAS */
861
862         MXC_DCD_ITEM(0x53fa86f0, DSE_MASK) /* GRP_ADDDS */
863         MXC_DCD_ITEM(0x53fa8720, DSE_MASK) /* GRP_CTLDS */
864         MXC_DCD_ITEM(0x53fa8718, DSE_MASK) /* GRP_B0DS */
865         MXC_DCD_ITEM(0x53fa871c, DSE_MASK) /* GRP_B1DS */
866         MXC_DCD_ITEM(0x53fa8728, DSE_MASK) /* GRP_B2DS */
867         MXC_DCD_ITEM(0x53fa872c, DSE_MASK) /* GRP_B3DS */
868
869         /* calibration defaults */
870         MXC_DCD_ITEM(0x63fd904c, 0x001f001f)
871         MXC_DCD_ITEM(0x63fd9050, 0x001f001f)
872         MXC_DCD_ITEM(0x63fd907c, 0x011e011e)
873         MXC_DCD_ITEM(0x63fd9080, 0x011f0120)
874         MXC_DCD_ITEM(0x63fd9088, 0x3a393d3b)
875         MXC_DCD_ITEM(0x63fd9090, 0x3f3f3f3f)
876
877         MXC_DCD_ITEM(0x63fd9018, ESDMISC_VAL)
878         MXC_DCD_ITEM(0x63fd9000, ESDCTL_VAL)
879         MXC_DCD_ITEM(0x63fd900c, ESDCFG0_VAL)
880         MXC_DCD_ITEM(0x63fd9010, ESDCFG1_VAL)
881         MXC_DCD_ITEM(0x63fd9014, ESDCFG2_VAL)
882
883         MXC_DCD_ITEM(0x63fd902c, 0x000026d2)
884         MXC_DCD_ITEM(0x63fd9030, ESDOR_VAL)
885         MXC_DCD_ITEM(0x63fd9008, ESDOTC_VAL)
886         MXC_DCD_ITEM(0x63fd9004, ESDPDC_VAL_0)
887
888         /* MR0..3 - CS0 */
889         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 2, mr2_val)) /* MRS: MR2 */
890         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 3, mr3_val)) /* MRS: MR3 */
891         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 1, mr1_val)) /* MRS: MR1 */
892         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 0, mr0_val)) /* MRS: MR0 */
893 #if BANK_ADDR_BITS > 1
894         /* MR0..3 - CS1 */
895         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(1, 2, 0x0000)) /* MRS: MR2 */
896         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(1, 3, 0x0000)) /* MRS: MR3 */
897         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(1, 1, 0x0040)) /* MRS: MR1 */
898         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(1, 0, mr0_val)) /* MRS: MR0 */
899 #endif
900         MXC_DCD_ITEM(0x63fd9020, 3 << 14) /* disable refresh during calibration */
901         MXC_DCD_ITEM(0x63fd9058, 0x00022222)
902
903         MXC_DCD_ITEM(0x63fd90d0, 0x00000003) /* select default compare pattern for calibration */
904
905         /* ZQ calibration */
906         MXC_DCD_ITEM(0x63fd901c, 0x04008010) /* precharge all */
907         MXC_DCD_ITEM(0x63fd901c, 0x00008040) /* MRS: ZQ calibration */
908         MXC_DCD_ITEM(0x63fd9040, 0x0539002b) /* Force ZQ calibration */
909 zq_calib:
910         MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, 0, 0x63fd9040, 0x00010000)
911         MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE, wl_calib)
912
913         /* Write Leveling */
914         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 3, (1 << 2))) /* MRS: select MPR */
915         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 1, mr1_val | (1 << 7)) | (1 << 9)) /* MRS: start write leveling */
916         MXC_DCD_ITEM(0x63fd901c, 0x00000000)
917         MXC_DCD_ITEM(0x63fd9048, 0x00000001)
918 wl_calib:
919         MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, 0, 0x63fd9048, 0x00000001)
920         MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE, dqs_calib)
921         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 1, mr1_val)) /* MRS: end write leveling */
922         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 3, 0)) /* MRS: select normal data path */
923
924         /* DQS calibration */
925         MXC_DCD_ITEM(0x63fd901c, 0x04008010) /* precharge all */
926         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 3, (1 << 2))) /* MRS: select MPR */
927         MXC_DCD_ITEM(0x63fd907c, 0x90000000) /* reset RD fifo and start DQS calib. */
928 dqs_calib:
929         MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, 0, 0x63fd907c, 0x90000000)
930         MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE, wr_dl_calib)
931         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 3, 0)) /* MRS: select normal data path */
932
933         /* WR DL calibration */
934         MXC_DCD_ITEM(0x63fd901c, 0x00000000)
935         MXC_DCD_ITEM(0x63fd901c, 0x04008010) /* precharge all */
936         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 3, (1 << 2))) /* MRS: select MPR */
937         MXC_DCD_ITEM(0x63fd90a4, 0x00000010)
938 wr_dl_calib: /* 6c4 */
939         MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, 0, 0x63fd90a4, 0x00000010)
940         MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE, rd_dl_calib)
941         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 3, 0)) /* MRS: select normal data path */
942
943         /* RD DL calibration */
944         MXC_DCD_ITEM(0x63fd901c, 0x04008010) /* precharge all */
945         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 3, (1 << 2))) /* MRS: select MPR */
946         MXC_DCD_ITEM(0x63fd90a0, 0x00000010)
947 rd_dl_calib: /* 70c */
948         MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, 0, 0x63fd90a0, 0x00000010)
949         MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE, dcd_end)
950         MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0, 3, 0)) /* MRS: select normal data path */
951         MXC_DCD_ITEM(0x63fd9020, (3 << 11) | (0 << 14)) /* refresh interval: 4 cycles every 64kHz period */
952         MXC_DCD_ITEM(0x63fd9004, ESDPDC_VAL_1)
953
954         MXC_DCD_ITEM(0x63fd901c, 0x00000000)
955
956         /* setup NFC pads */
957         /* MUX_SEL */
958         MXC_DCD_ITEM(0x53fa819c, 0x00000000)    @ EIM_DA0
959         MXC_DCD_ITEM(0x53fa81a0, 0x00000000)    @ EIM_DA1
960         MXC_DCD_ITEM(0x53fa81a4, 0x00000000)    @ EIM_DA2
961         MXC_DCD_ITEM(0x53fa81a8, 0x00000000)    @ EIM_DA3
962         MXC_DCD_ITEM(0x53fa81ac, 0x00000000)    @ EIM_DA4
963         MXC_DCD_ITEM(0x53fa81b0, 0x00000000)    @ EIM_DA5
964         MXC_DCD_ITEM(0x53fa81b4, 0x00000000)    @ EIM_DA6
965         MXC_DCD_ITEM(0x53fa81b8, 0x00000000)    @ EIM_DA7
966         MXC_DCD_ITEM(0x53fa81dc, 0x00000000)    @ WE_B
967         MXC_DCD_ITEM(0x53fa81e0, 0x00000000)    @ RE_B
968         MXC_DCD_ITEM(0x53fa8228, 0x00000000)    @ CLE
969         MXC_DCD_ITEM(0x53fa822c, 0x00000000)    @ ALE
970         MXC_DCD_ITEM(0x53fa8230, 0x00000000)    @ WP_B
971         MXC_DCD_ITEM(0x53fa8234, 0x00000000)    @ RB0
972         MXC_DCD_ITEM(0x53fa8238, 0x00000000)    @ CS0
973         /* PAD_CTL */
974         MXC_DCD_ITEM(0x53fa84ec, 0x000000e4)    @ EIM_DA0
975         MXC_DCD_ITEM(0x53fa84f0, 0x000000e4)    @ EIM_DA1
976         MXC_DCD_ITEM(0x53fa84f4, 0x000000e4)    @ EIM_DA2
977         MXC_DCD_ITEM(0x53fa84f8, 0x000000e4)    @ EIM_DA3
978         MXC_DCD_ITEM(0x53fa84fc, 0x000000e4)    @ EIM_DA4
979         MXC_DCD_ITEM(0x53fa8500, 0x000000e4)    @ EIM_DA5
980         MXC_DCD_ITEM(0x53fa8504, 0x000000e4)    @ EIM_DA6
981         MXC_DCD_ITEM(0x53fa8508, 0x000000e4)    @ EIM_DA7
982         MXC_DCD_ITEM(0x53fa852c, 0x00000004)    @ NANDF_WE_B
983         MXC_DCD_ITEM(0x53fa8530, 0x00000004)    @ NANDF_RE_B
984         MXC_DCD_ITEM(0x53fa85a0, 0x00000004)    @ NANDF_CLE_B
985         MXC_DCD_ITEM(0x53fa85a4, 0x00000004)    @ NANDF_ALE_B
986         MXC_DCD_ITEM(0x53fa85a8, 0x000000e4)    @ NANDF_WE_B
987         MXC_DCD_ITEM(0x53fa85ac, 0x000000e4)    @ NANDF_RB0
988         MXC_DCD_ITEM(0x53fa85b0, 0x00000004)    @ NANDF_CS0
989 dcd_end:
990         .ifgt   dcd_end - dcd_start - 1768
991         .error  "DCD too large!"
992         .endif
993         .endm
994
995 W_CSCMR1_VAL:           .word   0xa6a2a020
996 W_CSCDR1_VAL:           .word   0x00080b18
997 W_DP_OP_1000:           .word   DP_OP_1000
998 W_DP_MFD_1000:          .word   DP_MFD_1000
999 W_DP_MFN_1000:          .word   DP_MFN_1000
1000 W_DP_OP_800:            .word   DP_OP_800
1001 W_DP_MFD_800:           .word   DP_MFD_800
1002 W_DP_MFN_800:           .word   DP_MFN_800
1003 W_DP_OP_700:            .word   DP_OP_700
1004 W_DP_MFD_700:           .word   DP_MFD_700
1005 W_DP_MFN_700:           .word   DP_MFN_700
1006 W_DP_OP_400:            .word   DP_OP_400
1007 W_DP_MFD_400:           .word   DP_MFD_400
1008 W_DP_MFN_400:           .word   DP_MFN_400
1009 W_DP_OP_532:            .word   DP_OP_532
1010 W_DP_MFD_532:           .word   DP_MFD_532
1011 W_DP_MFN_532:           .word   DP_MFN_532
1012 W_DP_OP_666:            .word   DP_OP_666
1013 W_DP_MFD_666:           .word   DP_MFD_666
1014 W_DP_MFN_666:           .word   DP_MFN_666
1015 W_DP_OP_665:            .word   DP_OP_665
1016 W_DP_MFD_665:           .word   DP_MFD_665
1017 W_DP_MFN_665:           .word   DP_MFN_665
1018 W_DP_OP_216:            .word   DP_OP_216
1019 W_DP_MFD_216:           .word   DP_MFD_216
1020 W_DP_MFN_216:           .word   DP_MFN_216
1021 W_DP_OP_333:            .word   DP_OP_333
1022 W_DP_MFD_333:           .word   DP_MFD_333
1023 W_DP_MFN_333:           .word   DP_MFN_333
1024 W_DP_OP_266:            .word   DP_OP_266
1025 W_DP_MFD_266:           .word   DP_MFD_266
1026 W_DP_MFN_266:           .word   DP_MFN_266
1027 PLATFORM_CLOCK_DIV:     .word   0x00000124
1028
1029 /*----------------------------------------------------------------------*/
1030 /* end of hal_platform_setup.h                                          */
1031 #endif /* CYGONCE_HAL_PLATFORM_SETUP_H */