1 #ifndef CYGONCE_HAL_PLATFORM_SETUP_H
2 #define CYGONCE_HAL_PLATFORM_SETUP_H
4 //=============================================================================
6 // hal_platform_setup.h
8 // Platform specific support for HAL (assembly code)
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.
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.
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
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.
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.
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.
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 //===========================================================================
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
53 #define CPU_CLK CYGNUM_HAL_ARM_TX53_CPU_CLK
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
62 #ifdef CYGOPT_HAL_ARM_TX53_DEBUG
63 #define LED_ON bl led_on
64 #define LED_OFF bl led_off
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
74 #ifdef CYG_HAL_STARTUP_ROMRAM
75 #define CYGSEM_HAL_ROM_RESET_USES_JUMP
78 #define TX53_NAND_PAGE_SIZE 2048
79 #define TX53_NAND_BLKS_PER_PAGE 64
81 #define PLATFORM_PREAMBLE flash_header
84 #define REDBOOT_RAM_START (RAM_BANK1_BASE + RAM_BANK1_SIZE - REDBOOT_OFFSET)
86 #define REDBOOT_RAM_START (RAM_BANK0_BASE + RAM_BANK0_SIZE - REDBOOT_OFFSET)
89 #define redboot_v2p(v) ((v) - __text_start + REDBOOT_RAM_START)
91 // This macro represents the initial startup code for the platform
92 .macro _platform_setup1
93 KARO_TX53_SETUP_START:
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
107 * disable MMU stuff and caches
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
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
121 // Explicitly disable L2 cache
122 mrc 15, 0, r0, c1, c0, 1
124 mcr 15, 0, r0, c1, c0, 1
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
133 mcr 15, 1, r0, c9, c0, 2
137 /* switch off LCD backlight */
138 ldr r10, =GPIO1_BASE_ADDR
140 ldr r9, [r10, #GPIO_DR]
141 orr r9, r9, #(1 << 1)
142 str r9, [r10, #GPIO_DR]
144 ldr r9, [r10, #GPIO_GDIR]
145 orr r9, r9, #(1 << 1)
146 str r9, [r10, #GPIO_GDIR]
156 * IOMUX/PBC setup is done in C function plf_hardware_init() for simplicity
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
163 ldr sp, .__startup_stack
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
175 mcr MMU_CP, 0, r1, c10, c2, 0 // Write Primary Region Remap Register
179 #ifdef RAM_BANK1_SIZE
180 ldr r1, =(__text_start - REDBOOT_RAM_START)
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
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
194 mov pc, r2 @ Change address spaces
199 .endm @ _platform_setup1
201 /* AIPS setup - Only setup MPROTx registers. The PACR default values are good.*/
204 * Set all MPROTx to be non-bufferable, trusted for R/W,
205 * not forced to user-mode.
207 ldr r0, =AIPS1_CTRL_BASE_ADDR
211 ldr r0, =AIPS2_CTRL_BASE_ADDR
214 .endm /* init_aips */
217 ldr r0, =CCM_BASE_ADDR
218 ldr r1, [r0, #CLKCTL_CCR]
222 orr r1, r1, #(1 << 12)
223 str r1, [r0, #CLKCTL_CCR]
225 /* Switch ARM to step clock */
227 str r1, [r0, #CLKCTL_CCSR]
230 setup_pll PLL1_BASE_ADDR, 1000
232 setup_pll PLL1_BASE_ADDR, 800
236 setup_pll PLL3_BASE_ADDR, 400
238 /* Switch peripherals to PLL3 */
239 ldr r1, [r0, #CLKCTL_CBCMR]
242 str r1, [r0, #CLKCTL_CBCMR]
244 ldr r1, [r0, #CLKCTL_CBCDR]
245 orr r1, r1, #(1 << 25)
246 str r1, [r0, #CLKCTL_CBCDR]
248 /* make sure change is effective */
249 ldr r1, [r0, #CLKCTL_CDHIPR]
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
266 /* Switch peripheral to PLL2 */
267 ldr r1, [r0, #CLKCTL_CBCDR]
269 str r1, [r0, #CLKCTL_CBCDR]
271 ldr r1, [r0, #CLKCTL_CBCMR]
274 str r1, [r0, #CLKCTL_CBCMR]
276 /* make sure change is effective */
278 ldr r1, [r0, #CLKCTL_CDHIPR]
282 setup_pll PLL3_BASE_ADDR, 216
284 /* Set the platform clock dividers */
285 ldr r2, =PLATFORM_BASE_ADDR
286 ldr r1, PLATFORM_CLOCK_DIV
287 str r1, [r2, #PLATFORM_ICGC]
290 str r1, [r0, #CLKCTL_CACRR] /* ARM podf */
292 /* Switch ARM back to PLL 1. */
294 str r1, [r0, #CLKCTL_CCSR]
298 str r1, [r0, #CLKCTL_CSCDR1]
300 str r1, [r0, #CLKCTL_CSCMR1]
303 str r1, [r0, #CLKCTL_CCDR]
305 /* for cko - for ARM div by 8 */
307 orr r1, r1, #0x00000F0
308 str r1, [r0, #CLKCTL_CCOSR]
312 .macro setup_pll pll, mhz
315 str r1, [r2, #PLL_DP_CTL] @ Set DPLL ON (set UPEN bit); BRMO=1
317 str r1, [r2, #PLL_DP_CONFIG] @ Enable auto-restart AREN bit
320 str r1, [r2, #PLL_DP_OP]
321 str r1, [r2, #PLL_DP_HFS_OP]
323 ldr r1, W_DP_MFD_\mhz
324 str r1, [r2, #PLL_DP_MFD]
325 str r1, [r2, #PLL_DP_HFS_MFD]
327 ldr r1, W_DP_MFN_\mhz
328 str r1, [r2, #PLL_DP_MFN]
329 str r1, [r2, #PLL_DP_HFS_MFN]
331 /* Now restart PLL */
333 str r1, [r2, #PLL_DP_CTL]
335 ldr r1, [r2, #PLL_DP_CTL]
339 #else // defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_ROMRAM)
340 #define PLATFORM_SETUP1
342 #ifndef CYGOPT_HAL_ARM_TX53_DEBUG
348 #define CYGHWR_LED_MACRO LED_BLINK #\x
362 // initialize GPIO4_10 (PAD CSI2_D13) for LED on STK5
363 ldr r10, =LED_GPIO_BASE
365 ldr r9, [r10, #GPIO_DR]
366 bic r9, #(1 << DEBUG_LED_BIT) @ LED OFF
367 str r9, [r10, #GPIO_DR]
369 ldr r9, [r10, #GPIO_GDIR]
370 orr r9, r9, #(1 << DEBUG_LED_BIT)
371 str r9, [r10, #GPIO_GDIR]
374 #ifdef CYGOPT_HAL_ARM_TX53_DEBUG
376 ldr r10, =LED_GPIO_BASE
378 ldr r9, [r10, #GPIO_DR]
379 orr r9, #(1 << DEBUG_LED_BIT) @ LED ON
380 str r9, [r10, #GPIO_DR]
384 ldr r10, =LED_GPIO_BASE
386 ldr r9, [r10, #GPIO_DR]
387 bic r9, #(1 << DEBUG_LED_BIT) @ LED OFF
388 str r9, [r10, #GPIO_DR]
395 ldr r9, =(36000 / 10)
417 #define PLATFORM_VECTORS _platform_vectors
418 .macro _platform_vectors
422 .globl _KARO_STRUCT_SIZE
424 .word 0 // reserve space structure length
426 .globl _KARO_CECFG_START
429 .word 0 // reserve space for CE configuration
432 .globl _KARO_CECFG_END
438 .ascii "KARO TX53 " __DATE__ " " __TIME__
441 #define CPU_2_BE_32(l) \
442 ((((l) << 24) & 0xFF000000) | \
443 (((l) << 8) & 0x00FF0000) | \
444 (((l) >> 8) & 0x0000FF00) | \
445 (((l) >> 24) & 0x000000FF))
447 #define MXC_DCD_ITEM(addr, val) \
448 .word CPU_2_BE_32(addr), CPU_2_BE_32(val)
450 #define MXC_DCD_CMD_SZ_BYTE 1
451 #define MXC_DCD_CMD_SZ_SHORT 2
452 #define MXC_DCD_CMD_SZ_WORD 4
453 #define MXC_DCD_CMD_FLAG_WRITE 0x0
454 #define MXC_DCD_CMD_FLAG_CLR 0x1
455 #define MXC_DCD_CMD_FLAG_SET 0x3
456 #define MXC_DCD_CMD_FLAG_CHK_ANY (1 << 0)
457 #define MXC_DCD_CMD_FLAG_CHK_SET (1 << 1)
458 #define MXC_DCD_CMD_FLAG_CHK_CLR (0 << 1)
460 #define MXC_DCD_CMD_WRT(type, flags, next) \
461 .word CPU_2_BE_32((0xcc << 24) | (((next) - .) << 8) | ((flags) << 3) | (type))
463 #define MXC_DCD_CMD_CHK(type, flags, addr, mask) \
464 .word CPU_2_BE_32((0xcf << 24) | (12 << 8) | ((flags) << 3) | (type)),\
465 CPU_2_BE_32(addr), CPU_2_BE_32(mask)
467 #define MXC_DCD_CMD_CHK_CNT(type, flags, addr, mask, count) \
468 .word CPU_2_BE_32((0xcf << 24) | (16 << 8) | ((flags) << 3) | (type)),\
469 CPU_2_BE_32(addr), CPU_2_BE_32(mask), CPU_2_BE_32(count)
471 #define MXC_DCD_CMD_NOP() \
472 .word CPU_2_BE_32((0xc0 << 24) | (4 << 8))
474 #define CK_TO_NS(ck) (((ck) * 1000 + SDRAM_CLK / 2) / SDRAM_CLK)
475 #define NS_TO_CK(ns) (((ns) * SDRAM_CLK + 999) / 1000)
477 .macro CK_VAL, name, clks, offs, max
481 .ifle \clks - \offs - \max
482 .set \name, \clks - \offs
487 .macro NS_VAL, name, ns, offs, max
491 CK_VAL \name, NS_TO_CK(\ns), \offs, \max
495 .macro CK_MAX, name, ck1, ck2, offs, max
497 CK_VAL \name, \ck1, \offs, \max
499 CK_VAL \name, \ck2, \offs, \max
503 #define ESDMISC_DDR_TYPE_DDR3 0
504 #define ESDMISC_DDR_TYPE_LPDDR2 1
505 #define ESDMISC_DDR_TYPE_DDR2 2
507 #define DIV_ROUND_UP(m,d) (((m) + (d) - 1) / (d))
509 #define CKIL_FREQ_Hz 32768
510 #define ESDOR_CLK_PERIOD_ns (1000000000 / CKIL_FREQ_Hz / 2) /* base clock for ESDOR values */
513 #if SDRAM_SIZE > RAM_BANK0_SIZE
514 #define BANK_ADDR_BITS 2
516 #define BANK_ADDR_BITS 1
518 #define SDRAM_BURST_LENGTH 8
521 #define ADDR_MIRROR 0
522 #define DDR_TYPE ESDMISC_DDR_TYPE_DDR3
524 /* 512/1024MiB SDRAM: NT5CB128M16P-CG */
526 NS_VAL tRFC, 160, 1, 255 /* clks - 1 (0..255) */
527 CK_MAX tXS, tRFC + 1 + NS_TO_CK(10), 5, 1, 255 /* clks - 1 (0..255) tRFC + 10 */
528 CK_MAX tXP, 3, NS_TO_CK(6), 1, 7 /* clks - 1 (0..7) */ /* max(6ns, 3*CK) */
529 CK_MAX tXPDLL, NS_TO_CK(24), 2, 1, 15 /* clks - 1 (0..15) */
530 NS_VAL tFAW, 45, 1, 31 /* clks - 1 (0..31) */
531 CK_VAL tCL, 9, 3, 8 /* clks - 3 (0..8) CAS Latency */
534 NS_VAL tRCD, 14, 1, 7 /* clks - 1 (0..7) */
535 NS_VAL tRP, 14, 1, 7 /* clks - 1 (0..7) */
536 NS_VAL tRC, 50, 1, 31 /* clks - 1 (0..31) */
537 NS_VAL tRAS, 36, 1, 31 /* clks - 1 (0..31) */
538 CK_VAL tRPA, 0, 0, 1 /* clks (0..1) */
539 NS_VAL tWR, 15, 1, 15 /* clks - 1 (0..15) */
540 CK_VAL tMRD, 4, 1, 15 /* clks - 1 (0..15) */
541 CK_VAL tCWL, 5, 2, 6 /* clks - 2 (0..6) */
544 CK_VAL tDLLK, 512, 1, 511 /* clks - 1 (0..511) */
545 CK_MAX tRTP, 4, NS_TO_CK(8), 1, 7 /* clks - 1 (0..7) */
546 CK_MAX tWTR, 4, NS_TO_CK(8), 1, 7 /* clks - 1 (0..7) */
547 CK_MAX tRRD, 4, NS_TO_CK(8), 1, 7 /* clks - 1 (0..7) */
550 CK_MAX tXPR, NS_TO_CK(CK_TO_NS(tRFC + 1) + 10), 5, 1, 255 /* clks - 1 (0..255) max(tRFC + 10, 5CK) */
553 NS_VAL tAOFPD, 9, 1, 7 /* clks - 1 (0..7) */
554 NS_VAL tAONPD, 9, 1, 7 /* clks - 1 (0..7) */
555 CK_VAL tANPD, tCWL, 1, 15 /* clks - 1 (0..15) */
556 CK_VAL tAXPD, tCWL, 1, 15 /* clks - 1 (0..15) */
557 CK_VAL tODTLon tCWL - 1, 1, 7 /* clks - 1 (0..7) */
558 CK_VAL tODTLoff tCWL - 1, 1, 31 /* clks - 1 (0..31) */
560 #define tSDE_RST (DIV_ROUND_UP(200000, ESDOR_CLK_PERIOD_ns) + 1)
562 /* Add an extra (or two?) ESDOR_CLK_PERIOD_ns according to
563 * erroneous Erratum Engcm12377
565 #define tRST_CKE (DIV_ROUND_UP(500000 + 2 * ESDOR_CLK_PERIOD_ns, ESDOR_CLK_PERIOD_ns) + 1)
567 #define ROW_ADDR_BITS 14
568 #define COL_ADDR_BITS 10
571 .set mrs_val, (0x8080 | \
572 (3 << 4) /* MRS command */ | \
573 ((1 << 8) /* DLL Reset */ | \
574 ((tWR + 1 - 4) << 9) | \
575 (((tCL + 3) - 4) << 4)) << 16)
577 .set mrs_val, (0x8080 | \
578 (3 << 4) /* MRS command */ | \
579 ((1 << 8) /* DLL Reset */ | \
580 (((tWR + 1) / 2) << 9) | \
581 (((tCL + 3) - 4) << 4)) << 16)
583 #define ESDSCR_MRS_VAL(cs) (mrs_val | ((cs) << 3))
585 #define ESDCFG0_VAL ( \
593 #define ESDCFG1_VAL ( \
603 #define ESDCFG2_VAL ( \
609 #define BL (SDRAM_BURST_LENGTH / 8) /* 0: 4 byte 1: 8 byte */
610 #define ESDCTL_VAL (((ROW_ADDR_BITS - 11) << 24) | \
611 ((COL_ADDR_BITS - 9) << 20) | \
613 (1 << 16) | /* SDRAM bus width */ \
614 ((-1) << (32 - BANK_ADDR_BITS)))
616 #define ESDMISC_VAL ((1 << 12) | \
620 (ADDR_MIRROR << 19) | \
623 #define ESDOR_VAL ((tXPR << 16) | (tSDE_RST << 8) | (tRST_CKE << 0))
625 #define ESDOTC_VAL ((tAOFPD << 27) | \
636 .word 0x20424346 /* "FCB " marker */
637 .word 0x01 /* FCB version number */
639 .word 0x0 /* primary image starting page number */
640 .word 0x0 /* secondary image starting page number */
643 .word 0x0 /* DBBT start page (0 == NO DBBT) */
644 .word 0 /* Bad block marker offset in main area (unused) */
646 .word 0 /* BI Swap disabled */
647 .word 0 /* Bad Block marker offset in spare area */
652 .word CPU_2_BE_32((0xd1 << 24) | (32 << 8) | 0x40)
654 .long redboot_v2p(reset_vector)
657 .long redboot_v2p(dcd_hdr)
659 .word redboot_v2p(boot_data)
661 .word redboot_v2p(ivt_header)
666 .long redboot_v2p(__text_start)
668 .long REDBOOT_IMAGE_SIZE
672 #define DCD_VERSION 0x40
675 .word CPU_2_BE_32((0xd2 << 24) | ((dcd_end - .) << 8) | DCD_VERSION)
677 MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE, zq_calib)
678 /* disable all irrelevant clocks */
679 MXC_DCD_ITEM(CCM_BASE_ADDR + CLKCTL_CCGR0, 0xffcc0fff)
680 MXC_DCD_ITEM(CCM_BASE_ADDR + CLKCTL_CCGR1, 0x000fffc3)
681 MXC_DCD_ITEM(CCM_BASE_ADDR + CLKCTL_CCGR2, 0x033c0000)
682 MXC_DCD_ITEM(CCM_BASE_ADDR + CLKCTL_CCGR3, 0x00000000)
683 MXC_DCD_ITEM(CCM_BASE_ADDR + CLKCTL_CCGR4, 0x00000000)
684 MXC_DCD_ITEM(CCM_BASE_ADDR + CLKCTL_CCGR5, 0x00fff033)
685 MXC_DCD_ITEM(CCM_BASE_ADDR + CLKCTL_CCGR6, 0x0f00030f)
686 MXC_DCD_ITEM(CCM_BASE_ADDR + CLKCTL_CCGR7, 0xfff00000)
687 MXC_DCD_ITEM(CCM_BASE_ADDR + CLKCTL_CMEOR, 0x00000000)
689 MXC_DCD_ITEM(IOMUXC_BASE_ADDR + LED_MUX_OFFSET, LED_MUX_MODE) /* EIM_D18 => GPIO2[20] STK5-LED */
690 MXC_DCD_ITEM(IOMUXC_BASE_ADDR + 0x318, 0x11) /* GPIO_1 => LCD Backlight */
692 MXC_DCD_ITEM(0x63fd800c, 0x00000000) /* M4IF: MUX NFC signals on WEIM */
694 MXC_DCD_ITEM(0x53fd4014, 0x00888944) /* CBCDR */
696 MXC_DCD_ITEM(0x53fd4014, 0x00888644) /* CBCDR */
698 MXC_DCD_ITEM(0x53fd4018, 0x00016154) /* CBCMR */
700 #define DDR_SEL_VAL 2
704 #define DDR_SEL_SHIFT 25
707 #define DDR_INPUT_SHIFT 9
713 #define DDR_SEL_MASK (DDR_SEL_VAL << DDR_SEL_SHIFT)
714 #define DSE_MASK (DSE_VAL << DSE_SHIFT)
715 #define ODT_MASK (ODT_VAL << ODT_SHIFT)
717 #define DQM_VAL DSE_MASK
718 #define SDQS_VAL (ODT_MASK | DSE_MASK | (1 << PUE_SHIFT))
719 #define SDODT_VAL (DSE_MASK | (0 << PKE_SHIFT) | (1 << PUE_SHIFT) | (0 << PUS_SHIFT))
720 #define SDCLK_VAL DSE_MASK
721 #define SDCKE_VAL ((1 << PKE_SHIFT) | (1 << PUE_SHIFT) | (0 << PUS_SHIFT))
723 MXC_DCD_ITEM(0x53fa8724, DDR_SEL_MASK) /* DDR_TYPE: DDR3 */
724 MXC_DCD_ITEM(0x53fa86f4, 0 << DDR_INPUT_SHIFT) /* DDRMODE_CTL */
725 MXC_DCD_ITEM(0x53fa8714, 0 << DDR_INPUT_SHIFT) /* GRP_DDRMODE */
726 MXC_DCD_ITEM(0x53fa86fc, 1 << PKE_SHIFT) /* GRP_DDRPKE */
727 MXC_DCD_ITEM(0x53fa8710, 0 << HYS_SHIFT) /* GRP_DDRHYS */
728 MXC_DCD_ITEM(0x53fa8708, 1 << PUE_SHIFT) /* GRP_DDRPK */
730 MXC_DCD_ITEM(0x53fa8584, DQM_VAL) /* DQM0 */
731 MXC_DCD_ITEM(0x53fa8594, DQM_VAL) /* DQM1 */
732 MXC_DCD_ITEM(0x53fa8560, DQM_VAL) /* DQM2 */
733 MXC_DCD_ITEM(0x53fa8554, DQM_VAL) /* DQM3 */
735 MXC_DCD_ITEM(0x53fa857c, SDQS_VAL) /* SDQS0 */
736 MXC_DCD_ITEM(0x53fa8590, SDQS_VAL) /* SDQS1 */
737 MXC_DCD_ITEM(0x53fa8568, SDQS_VAL) /* SDQS2 */
738 MXC_DCD_ITEM(0x53fa8558, SDQS_VAL) /* SDQS3 */
740 MXC_DCD_ITEM(0x53fa8580, SDODT_VAL) /* SDODT0 */
741 MXC_DCD_ITEM(0x53fa8578, SDCLK_VAL) /* SDCLK0 */
743 MXC_DCD_ITEM(0x53fa8564, SDODT_VAL) /* SDODT1 */
744 MXC_DCD_ITEM(0x53fa8570, SDCLK_VAL) /* SDCLK1 */
746 MXC_DCD_ITEM(0x53fa858c, SDCKE_VAL) /* SDCKE0 */
747 MXC_DCD_ITEM(0x53fa855c, SDCKE_VAL) /* SDCKE1 */
749 MXC_DCD_ITEM(0x53fa8574, DSE_MASK) /* DRAM_CAS */
750 MXC_DCD_ITEM(0x53fa8588, DSE_MASK) /* DRAM_RAS */
752 MXC_DCD_ITEM(0x53fa86f0, DSE_MASK) /* GRP_ADDDS */
753 MXC_DCD_ITEM(0x53fa8720, DSE_MASK) /* GRP_CTLDS */
754 MXC_DCD_ITEM(0x53fa8718, DSE_MASK) /* GRP_B0DS */
755 MXC_DCD_ITEM(0x53fa871c, DSE_MASK) /* GRP_B1DS */
756 MXC_DCD_ITEM(0x53fa8728, DSE_MASK) /* GRP_B2DS */
757 MXC_DCD_ITEM(0x53fa872c, DSE_MASK) /* GRP_B3DS */
759 /* calibration defaults */
760 MXC_DCD_ITEM(0x63fd904c, 0x001f001f)
761 MXC_DCD_ITEM(0x63fd9050, 0x001f001f)
762 MXC_DCD_ITEM(0x63fd907c, 0x011e011e)
763 MXC_DCD_ITEM(0x63fd9080, 0x011f0120)
764 MXC_DCD_ITEM(0x63fd9088, 0x3a393d3b)
765 MXC_DCD_ITEM(0x63fd9090, 0x3f3f3f3f)
767 MXC_DCD_ITEM(0x63fd9018, ESDMISC_VAL)
768 MXC_DCD_ITEM(0x63fd9000, ESDCTL_VAL)
769 MXC_DCD_ITEM(0x63fd900c, ESDCFG0_VAL)
770 MXC_DCD_ITEM(0x63fd9010, ESDCFG1_VAL)
771 MXC_DCD_ITEM(0x63fd9014, ESDCFG2_VAL)
773 MXC_DCD_ITEM(0x63fd902c, 0x000026d2)
774 MXC_DCD_ITEM(0x63fd9030, ESDOR_VAL)
775 MXC_DCD_ITEM(0x63fd9008, ESDOTC_VAL)
776 MXC_DCD_ITEM(0x63fd9004, 0x00030012)
779 MXC_DCD_ITEM(0x63fd901c, 0x00008032) /* MRS: MR2 */
780 MXC_DCD_ITEM(0x63fd901c, 0x00008033) /* MRS: MR3 */
781 MXC_DCD_ITEM(0x63fd901c, 0x00408031) /* MRS: MR1 */
782 MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(0)) /* MRS: MR0 */
784 #if BANK_ADDR_BITS > 1
785 MXC_DCD_ITEM(0x63fd901c, 0x0000803a) /* MRS: MR2 */
786 MXC_DCD_ITEM(0x63fd901c, 0x0000803b) /* MRS: MR3 */
787 MXC_DCD_ITEM(0x63fd901c, 0x00408039) /* MRS: MR1 */
788 MXC_DCD_ITEM(0x63fd901c, ESDSCR_MRS_VAL(1)) /* MRS: MR0 */
790 MXC_DCD_ITEM(0x63fd9020, 0x00005800) /* refresh interval */
791 MXC_DCD_ITEM(0x63fd9058, 0x00011112)
793 MXC_DCD_ITEM(0x63fd90d0, 0x00000003) /* select default compare pattern for calibration */
796 MXC_DCD_ITEM(0x63fd901c, 0x04008010) /* precharge all */
797 MXC_DCD_ITEM(0x63fd901c, 0x00008040) /* MRS: ZQ calibration */
798 MXC_DCD_ITEM(0x63fd9040, 0x0539002b) /* Force ZQ calibration */
800 MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, 0, 0x63fd9040, 0x00010000)
801 MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE, wl_calib)
804 MXC_DCD_ITEM(0x63fd901c, 0x00048033) /* MRS: select MPR */
805 MXC_DCD_ITEM(0x63fd901c, 0x00848231) /* MRS: start write leveling */
806 MXC_DCD_ITEM(0x63fd901c, 0x00000000)
807 MXC_DCD_ITEM(0x63fd9048, 0x00000001)
809 MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, 0, 0x63fd9048, 0x00000001)
810 MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE, dqs_calib)
811 MXC_DCD_ITEM(0x63fd901c, 0x00048031) /* MRS: end write leveling */
812 MXC_DCD_ITEM(0x63fd901c, 0x00008033) /* MRS: select normal data path */
814 /* DQS calibration */
815 MXC_DCD_ITEM(0x63fd901c, 0x04008010) /* precharge all */
816 MXC_DCD_ITEM(0x63fd901c, 0x00048033) /* MRS: select MPR */
817 MXC_DCD_ITEM(0x63fd907c, 0x90000000) /* reset RD fifo and start DQS calib. */
819 MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, 0, 0x63fd907c, 0x90000000)
820 MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE, wr_dl_calib)
821 MXC_DCD_ITEM(0x63fd901c, 0x00008033) /* MRS: select normal data path */
823 /* WR DL calibration */
824 MXC_DCD_ITEM(0x63fd901c, 0x00000000)
825 MXC_DCD_ITEM(0x63fd901c, 0x04008010) /* precharge all */
826 MXC_DCD_ITEM(0x63fd901c, 0x00048033) /* MRS: select MPR */
827 MXC_DCD_ITEM(0x63fd90a4, 0x00000010)
828 wr_dl_calib: /* 6c4 */
829 MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, 0, 0x63fd90a4, 0x00000010)
830 MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE, rd_dl_calib)
831 MXC_DCD_ITEM(0x63fd901c, 0x00008033) /* MRS: select normal data path */
833 /* RD DL calibration */
834 MXC_DCD_ITEM(0x63fd901c, 0x04008010) /* precharge all */
835 MXC_DCD_ITEM(0x63fd901c, 0x00048033) /* MRS: select MPR */
836 MXC_DCD_ITEM(0x63fd90a0, 0x00000010)
837 rd_dl_calib: /* 70c */
838 MXC_DCD_CMD_CHK(MXC_DCD_CMD_SZ_WORD, 0, 0x63fd90a0, 0x00000010)
839 MXC_DCD_CMD_WRT(MXC_DCD_CMD_SZ_WORD, MXC_DCD_CMD_FLAG_WRITE, dcd_end)
840 MXC_DCD_ITEM(0x63fd901c, 0x00008033) /* MRS: select normal data path */
842 MXC_DCD_ITEM(0x63fd901c, 0x00000000)
844 MXC_DCD_ITEM(0x53fa8004, 0x00194005) @ set LDO to 1.3V
848 MXC_DCD_ITEM(0x53fa819c, 0x00000000) @ EIM_DA0
849 MXC_DCD_ITEM(0x53fa81a0, 0x00000000) @ EIM_DA1
850 MXC_DCD_ITEM(0x53fa81a4, 0x00000000) @ EIM_DA2
851 MXC_DCD_ITEM(0x53fa81a8, 0x00000000) @ EIM_DA3
852 MXC_DCD_ITEM(0x53fa81ac, 0x00000000) @ EIM_DA4
853 MXC_DCD_ITEM(0x53fa81b0, 0x00000000) @ EIM_DA5
854 MXC_DCD_ITEM(0x53fa81b4, 0x00000000) @ EIM_DA6
855 MXC_DCD_ITEM(0x53fa81b8, 0x00000000) @ EIM_DA7
856 MXC_DCD_ITEM(0x53fa81dc, 0x00000000) @ WE_B
857 MXC_DCD_ITEM(0x53fa81e0, 0x00000000) @ RE_B
858 MXC_DCD_ITEM(0x53fa8228, 0x00000000) @ CLE
859 MXC_DCD_ITEM(0x53fa822c, 0x00000000) @ ALE
860 MXC_DCD_ITEM(0x53fa8230, 0x00000000) @ WP_B
861 MXC_DCD_ITEM(0x53fa8234, 0x00000000) @ RB0
862 MXC_DCD_ITEM(0x53fa8238, 0x00000000) @ CS0
864 MXC_DCD_ITEM(0x53fa84ec, 0x000000e4) @ EIM_DA0
865 MXC_DCD_ITEM(0x53fa84f0, 0x000000e4) @ EIM_DA1
866 MXC_DCD_ITEM(0x53fa84f4, 0x000000e4) @ EIM_DA2
867 MXC_DCD_ITEM(0x53fa84f8, 0x000000e4) @ EIM_DA3
868 MXC_DCD_ITEM(0x53fa84fc, 0x000000e4) @ EIM_DA4
869 MXC_DCD_ITEM(0x53fa8500, 0x000000e4) @ EIM_DA5
870 MXC_DCD_ITEM(0x53fa8504, 0x000000e4) @ EIM_DA6
871 MXC_DCD_ITEM(0x53fa8508, 0x000000e4) @ EIM_DA7
872 MXC_DCD_ITEM(0x53fa852c, 0x00000004) @ NANDF_WE_B
873 MXC_DCD_ITEM(0x53fa8530, 0x00000004) @ NANDF_RE_B
874 MXC_DCD_ITEM(0x53fa85a0, 0x00000004) @ NANDF_CLE_B
875 MXC_DCD_ITEM(0x53fa85a4, 0x00000004) @ NANDF_ALE_B
876 MXC_DCD_ITEM(0x53fa85a8, 0x000000e4) @ NANDF_WE_B
877 MXC_DCD_ITEM(0x53fa85ac, 0x000000e4) @ NANDF_RB0
878 MXC_DCD_ITEM(0x53fa85b0, 0x00000004) @ NANDF_CS0
880 .ifgt dcd_end - dcd_start - 1768
885 W_CSCMR1_VAL: .word 0xa6a2a020
886 W_CSCDR1_VAL: .word 0x00080b18
887 W_DP_OP_1000: .word DP_OP_1000
888 W_DP_MFD_1000: .word DP_MFD_1000
889 W_DP_MFN_1000: .word DP_MFN_1000
890 W_DP_OP_800: .word DP_OP_800
891 W_DP_MFD_800: .word DP_MFD_800
892 W_DP_MFN_800: .word DP_MFN_800
893 W_DP_OP_700: .word DP_OP_700
894 W_DP_MFD_700: .word DP_MFD_700
895 W_DP_MFN_700: .word DP_MFN_700
896 W_DP_OP_400: .word DP_OP_400
897 W_DP_MFD_400: .word DP_MFD_400
898 W_DP_MFN_400: .word DP_MFN_400
899 W_DP_OP_532: .word DP_OP_532
900 W_DP_MFD_532: .word DP_MFD_532
901 W_DP_MFN_532: .word DP_MFN_532
902 W_DP_OP_666: .word DP_OP_666
903 W_DP_MFD_666: .word DP_MFD_666
904 W_DP_MFN_666: .word DP_MFN_666
905 W_DP_OP_665: .word DP_OP_665
906 W_DP_MFD_665: .word DP_MFD_665
907 W_DP_MFN_665: .word DP_MFN_665
908 W_DP_OP_216: .word DP_OP_216
909 W_DP_MFD_216: .word DP_MFD_216
910 W_DP_MFN_216: .word DP_MFN_216
911 W_DP_OP_333: .word DP_OP_333
912 W_DP_MFD_333: .word DP_MFD_333
913 W_DP_MFN_333: .word DP_MFN_333
914 W_DP_OP_266: .word DP_OP_266
915 W_DP_MFD_266: .word DP_MFD_266
916 W_DP_MFN_266: .word DP_MFN_266
917 PLATFORM_CLOCK_DIV: .word 0x00000124
919 /*----------------------------------------------------------------------*/
920 /* end of hal_platform_setup.h */
921 #endif /* CYGONCE_HAL_PLATFORM_SETUP_H */