]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - board/karo/tx51/lowlevel_init.S
Unified codebase for TX28, TX48, TX51, TX53
[karo-tx-uboot.git] / board / karo / tx51 / lowlevel_init.S
1 #include <config.h>
2 #include <configs/tx51.h>
3 #include <asm/arch/imx-regs.h>
4
5 #define DCDGEN(type, addr, data)  .long type, addr, data
6
7 #define SDRAM_CLK               CONFIG_SYS_SDRAM_CLK
8
9 #ifdef PHYS_SDRAM_2_SIZE
10 #define SDRAM_SIZE              (PHYS_SDRAM_1_SIZE + PHYS_SDRAM_2_SIZE)
11 #else
12 #define SDRAM_SIZE              PHYS_SDRAM_1_SIZE
13 #endif
14
15 #define REG_ESDCTL0             0x00
16 #define REG_ESDCFG0             0x04
17 #define REG_ESDCTL1             0x08
18 #define REG_ESDCFG1             0x0c
19 #define REG_ESDMISC             0x10
20 #define REG_ESDSCR              0x14
21 #define REG_ESDGPR              0x34
22
23 #define REG_CCGR0               0x68
24 #define REG_CCGR1               0x6c
25 #define REG_CCGR2               0x70
26 #define REG_CCGR3               0x74
27 #define REG_CCGR4               0x78
28 #define REG_CCGR5               0x7c
29 #define REG_CCGR6               0x80
30 #define REG_CMEOR               0x84
31
32 /* SDRAM timing setup */
33 #define RALAT           1
34 #define LHD             0
35
36 #if SDRAM_SIZE <= SZ_128M
37 #define RA_BITS         (13 - 11)       /* row addr bits - 11 */
38 #else
39 #define RA_BITS         (14 - 11)       /* row addr bits - 11 */
40 #endif
41
42 #define CA_BITS         (10 - 8)        /* 0-2: col addr bits - 8 3: rsrvd */
43 #define DSIZ            2       /* 0: D[31..16] 1: D[15..D0] 2: D[31..0] 3: rsrvd */
44 #define SREFR           3       /* 0: disabled 1-5: 2^n rows/clock *: rsrvd */
45 #define SRT             0       /* 0: disabled *: 1: self refr. ... */
46 #define PWDT            0       /* 0: disabled 1: precharge pwdn
47                                    2: pwdn after 64 clocks 3: pwdn after 128 clocks */
48 #define ESDCTL_VAL      (0x80000000 | (SREFR << 28) | (RA_BITS << 24) | (CA_BITS << 20) | \
49                          (DSIZ << 16) | (SRT << 14) | (PWDT << 12))
50
51 #define NS_TO_CK(ns)    (((ns) * SDRAM_CLK + 999) / 1000)
52
53         .macro          CK_VAL, name, clks, offs
54         .iflt           \clks - \offs
55         .set            \name, 0
56         .else
57         .set            \name, \clks - \offs
58         .endif
59         .endm
60
61         .macro          NS_VAL, name, ns, offs
62         .iflt           \ns - \offs
63         .set            \name, 0
64         .else
65         CK_VAL          \name, NS_TO_CK(\ns), \offs
66         .endif
67         .endm
68
69 #if SDRAM_CLK < 200
70 /* MT46H32M32LF-6 */
71 NS_VAL  tRFC, 125, 10   /* clks - 10 (0..15) */
72 NS_VAL  tXSR, 138, 25   /* clks - 25 (0..15) */
73 NS_VAL  tXP,   25,  1   /* clks - 1 (0..7)  */
74 CK_VAL  tWTR,   1,  1   /* clks - 1 (0..1)  */
75 NS_VAL  tRP,   18,  2   /* clks - 2 (0..3)  */
76 CK_VAL  tMRD,   2,  1   /* clks - 1 (0..3)  */
77 NS_VAL  tWR,   15,  2   /* clks - 2 (0..1)  */
78 NS_VAL  tRAS,  42,  1   /* clks - 1 (0..15) */
79 NS_VAL  tRRD,  12,  1   /* clks - 1 (0..3)  */
80 NS_VAL  tRCD,  18,  1   /* clks - 1 (0..7) */
81 NS_VAL  tRC,   60,  1   /* 0: 20 *: clks - 1 (0..15) */
82 #else
83 /* MT46H64M32LF-5 or -6 */
84 NS_VAL  tRFC,  72, 10   /* clks - 10 (0..15) */
85 NS_VAL  tXSR, 113, 25   /* clks - 25 (0..15) */
86 CK_VAL  tXP,    2,  1   /* clks - 1 (0..7)  */
87 CK_VAL  tWTR,   2,  1   /* clks - 1 (0..1)  */
88 NS_VAL  tRP,   18,  2   /* clks - 2 (0..3)  */
89 CK_VAL  tMRD,   2,  1   /* clks - 1 (0..3)  */
90 NS_VAL  tWR,   15,  2   /* clks - 2 (0..1)  */
91 NS_VAL  tRAS,  42,  1   /* clks - 1 (0..15) */
92 NS_VAL  tRRD,  12,  1   /* clks - 1 (0..3)  */
93 NS_VAL  tRCD,  18,  1   /* clks - 1 (0..7) */
94 NS_VAL  tRC,   60,  1   /* 0: 20 *: clks - 1 (0..15) */
95 #endif
96
97 #define ESDCFG_VAL      ((tRFC << 28) | (tXSR << 24) | (tXP << 21) | \
98                         (tWTR << 20) | (tRP << 18) | (tMRD << 16) | \
99                         (tRAS << 12) | (tRRD << 10) | (tWR << 7) | \
100                         (tRCD << 4) | (tRC << 0))
101
102 #define ESDMISC_RALAT(n)        (((n) & 0x3) << 7)
103 #define ESDMISC_DDR2_EN(n)      (((n) & 0x1) << 4)
104 #define ESDMISC_DDR_EN(n)       (((n) & 0x1) << 3)
105 #define ESDMISC_AP(n)           (((n) & 0xf) << 16)
106 #define ESDMISC_VAL             (ESDMISC_AP(10) | ESDMISC_RALAT(RALAT) | \
107                                 (LHD << 5) | ESDMISC_DDR2_EN(0) | ESDMISC_DDR_EN(0))
108
109         b       _start
110         .org    0x400
111 app_start_addr:
112         .long   _start
113 app_code_barker:
114         .long   0xB1
115 app_code_csf:
116         .long   0 // 0x97f40000 - 0x1000
117 dcd_ptr_ptr:
118         .long   dcd_ptr
119 super_root_key:
120         .long   0 // hab_super_root_key
121 dcd_ptr:
122         .long   dcd_data
123 app_dest_ptr:
124         .long   CONFIG_SYS_TEXT_BASE
125 dcd_data:
126         .long   0xB17219E9   // Fixed. can't change.
127 dcd_len:
128         .long   dcd_end - dcd_start
129 dcd_start:
130         DCDGEN(4, CCM_BASE_ADDR + REG_CCGR0, 0xffcffffc);
131         DCDGEN(4, CCM_BASE_ADDR + REG_CCGR1, 0x003fffff);
132         DCDGEN(4, CCM_BASE_ADDR + REG_CCGR2, 0x030c003c);
133         DCDGEN(4, CCM_BASE_ADDR + REG_CCGR3, 0x000000ff);
134         DCDGEN(4, CCM_BASE_ADDR + REG_CCGR4, 0x00000000);
135         DCDGEN(4, CCM_BASE_ADDR + REG_CCGR5, 0x003fc003);
136         DCDGEN(4, CCM_BASE_ADDR + REG_CCGR6, 0x00000000);
137         DCDGEN(4, CCM_BASE_ADDR + REG_CMEOR, 0x00000000);
138
139         DCDGEN(4, ESDCTL_BASE_ADDR + REG_ESDCTL0, 0x80000000)
140         DCDGEN(4, ESDCTL_BASE_ADDR + REG_ESDSCR, 0x04008008)
141         DCDGEN(4, ESDCTL_BASE_ADDR + REG_ESDSCR, 0x00008010)
142         DCDGEN(4, ESDCTL_BASE_ADDR + REG_ESDSCR, 0x00008010)
143         DCDGEN(4, ESDCTL_BASE_ADDR + REG_ESDSCR, 0x00338018)
144         DCDGEN(4, ESDCTL_BASE_ADDR + REG_ESDCTL0, ESDCTL_VAL)
145         DCDGEN(4, ESDCTL_BASE_ADDR + REG_ESDCFG0, ESDCFG_VAL)
146 #ifdef RAM_BANK1_SIZE
147         DCDGEN(4, ESDCTL_BASE_ADDR + REG_ESDCTL1, ESDCTL_VAL)
148         DCDGEN(4, ESDCTL_BASE_ADDR + REG_ESDCFG1, ESDCFG_VAL)
149 #endif
150         DCDGEN(4, ESDCTL_BASE_ADDR + REG_ESDGPR, 0x00020000 | ((RALAT & 0x3) << 29))
151         DCDGEN(4, ESDCTL_BASE_ADDR + REG_ESDMISC, ESDMISC_VAL)
152         DCDGEN(4, ESDCTL_BASE_ADDR + REG_ESDSCR, 0x00000000)
153
154         /* UART1_RXD */
155         DCDGEN(4, IOMUXC_BASE_ADDR + 0x228, 0x00000000)
156         DCDGEN(4, IOMUXC_BASE_ADDR + 0x618, 0x000001c1)
157         DCDGEN(4, IOMUXC_BASE_ADDR + 0x9e4, 0x00000000)
158         
159         /* UART1_TXD */
160         DCDGEN(4, IOMUXC_BASE_ADDR + 0x22c, 0x00000000)
161         DCDGEN(4, IOMUXC_BASE_ADDR + 0x61c, 0x000000c5)
162
163         /* UART1_RTS */
164         DCDGEN(4, IOMUXC_BASE_ADDR + 0x230, 0x00000000)
165         DCDGEN(4, IOMUXC_BASE_ADDR + 0x620, 0x000001c1)
166         DCDGEN(4, IOMUXC_BASE_ADDR + 0x9e0, 0x00000000)
167         
168         /* UART1_CTS */
169         DCDGEN(4, IOMUXC_BASE_ADDR + 0x234, 0x00000000)
170         DCDGEN(4, IOMUXC_BASE_ADDR + 0x624, 0x000000c5)
171
172         /* STK5 board LED */
173         DCDGEN(4, IOMUXC_BASE_ADDR + 0x1d0, 0x00000013)
174 dcd_end:
175         .ifgt   dcd_end - dcd_start - 720
176         DCD too large!
177         .endif
178 image_len:
179         .long   CONFIG_U_BOOT_IMG_SIZE