1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#include <common.h>
26#include <config.h>
27#include <mpc8xx.h>
28
29
30
31
32
33
34
35
36
37
38#define _not_used_ 0xffffffff
39
40const uint sdram_table[] = {
41
42 0x1f07fc04, 0xeeaefc04, 0x11adfc04, 0xefbbbc00,
43 0x1ff77c47,
44
45
46
47 0x1ff77c34, 0xefeabc34, 0x1fb57c35,
48
49
50 0x1f07fc04, 0xeeaefc04, 0x10adfc04, 0xf0affc00,
51 0xf0affc00, 0xf1affc00, 0xefbbbc00, 0x1ff77c47,
52 _not_used_, _not_used_, _not_used_, _not_used_,
53 _not_used_, _not_used_, _not_used_, _not_used_,
54
55
56 0x1f27fc04, 0xeeaebc00, 0x01b93c04, 0x1ff77c47,
57 _not_used_, _not_used_, _not_used_, _not_used_,
58
59
60 0x1f07fc04, 0xeeaebc00, 0x10ad7c00, 0xf0affc00,
61 0xf0affc00, 0xe1bbbc04, 0x1ff77c47, _not_used_,
62 _not_used_, _not_used_, _not_used_, _not_used_,
63 _not_used_, _not_used_, _not_used_, _not_used_,
64
65
66 0x1ff5fc84, 0xfffffc04, 0xfffffc04, 0xfffffc04,
67 0xfffffc84, 0xfffffc07, _not_used_, _not_used_,
68 _not_used_, _not_used_, _not_used_, _not_used_,
69
70
71 0x7ffffc07, _not_used_, _not_used_, _not_used_
72};
73
74const uint nand_flash_table[] = {
75
76 0x0ff3fc04, 0x0ff3fc04, 0x0ff3fc04, 0x0ffffc04,
77 0xfffffc00, 0xfffffc05, 0xfffffc05, 0xfffffc05,
78
79
80 0xffffcc05, 0xffffcc05, 0xffffcc05, 0xffffcc05,
81 0xffffcc05, 0xffffcc05, 0xffffcc05, 0xffffcc05,
82 0xffffcc05, 0xffffcc05, 0xffffcc05, 0xffffcc05,
83 0xffffcc05, 0xffffcc05, 0xffffcc05, 0xffffcc05,
84
85
86 0x00fffc04, 0x00fffc04, 0x00fffc04, 0x0ffffc04,
87 0x0ffffc84, 0x0ffffc84, 0xfffffc00, 0xfffffc05,
88
89
90 0xffffcc05, 0xffffcc05, 0xffffcc05, 0xffffcc05,
91 0xffffcc05, 0xffffcc05, 0xffffcc05, 0xffffcc05,
92 0xffffcc05, 0xffffcc05, 0xffffcc05, 0xffffcc05,
93 0xffffcc05, 0xffffcc05, 0xffffcc05, 0xffffcc05,
94
95
96 0xffffcc05, 0xffffcc05, 0xffffcc05, 0xffffcc05,
97 0xffffcc05, 0xffffcc05, 0xffffcc05, 0xffffcc05,
98 0xffffcc05, 0xffffcc05, 0xffffcc05, 0xffffcc05,
99
100
101 0xffffcc05, 0xffffcc05, 0xffffcc05, 0xffffcc05
102};
103
104
105
106
107
108
109
110int checkboard (void)
111{
112#if !defined(CONFIG_CP850)
113 puts ("Board: NC650");
114#else
115 puts ("Board: CP850");
116#endif
117#if defined(CONFIG_IDS852_REV1)
118 puts (" with IDS852 rev 1 module\n");
119#elif defined(CONFIG_IDS852_REV2)
120 puts (" with IDS852 rev 2 module\n");
121#endif
122 return 0;
123}
124
125
126
127static long int dram_size (long int, long int *, long int);
128
129
130
131phys_size_t initdram (int board_type)
132{
133 volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR;
134 volatile memctl8xx_t *memctl = &immap->im_memctl;
135 long int size8, size9;
136 long int size_b0 = 0;
137 unsigned long reg;
138
139 upmconfig (UPMA, (uint *) sdram_table,
140 sizeof (sdram_table) / sizeof (uint));
141
142
143
144
145
146
147
148 memctl->memc_mptpr = CONFIG_SYS_MPTPR_2BK_8K;
149
150 memctl->memc_mar = 0x00000088;
151
152
153
154
155
156
157 memctl->memc_or3 = CONFIG_SYS_OR3_PRELIM;
158 memctl->memc_br3 = CONFIG_SYS_BR3_PRELIM;
159
160 memctl->memc_mamr = CONFIG_SYS_MAMR_8COL & (~(MAMR_PTAE));
161
162 udelay (200);
163
164
165
166 memctl->memc_mcr = 0x80006105;
167 udelay (200);
168 memctl->memc_mcr = 0x80006230;
169 udelay (200);
170
171 memctl->memc_mamr |= MAMR_PTAE;
172
173 udelay (1000);
174
175
176
177
178
179
180 size8 = dram_size (CONFIG_SYS_MAMR_8COL, SDRAM_BASE3_PRELIM, SDRAM_MAX_SIZE);
181
182 udelay (1000);
183
184
185
186
187 size9 = dram_size (CONFIG_SYS_MAMR_9COL, SDRAM_BASE3_PRELIM, SDRAM_MAX_SIZE);
188
189 udelay (1000);
190
191 if (size8 < size9) {
192 size_b0 = size9;
193 } else {
194 size_b0 = size8;
195 memctl->memc_mamr = CONFIG_SYS_MAMR_8COL;
196 udelay (500);
197 }
198
199
200
201
202
203 if ((size_b0 < 0x02000000)) {
204
205 memctl->memc_mptpr = CONFIG_SYS_MPTPR_2BK_4K;
206 udelay (1000);
207 }
208
209
210
211
212
213 memctl->memc_or3 = ((-size_b0) & 0xFFFF0000) | CONFIG_SYS_OR_TIMING_SDRAM;
214 memctl->memc_br3 = (CONFIG_SYS_SDRAM_BASE & BR_BA_MSK) | BR_MS_UPMA | BR_V;
215
216
217 reg = memctl->memc_mptpr;
218 reg >>= 1;
219 memctl->memc_mptpr = reg;
220
221 udelay (10000);
222
223
224 upmconfig (UPMB, (uint *) nand_flash_table,
225 sizeof (nand_flash_table) / sizeof (uint));
226
227 memctl->memc_mbmr = CONFIG_SYS_MBMR_NAND;
228
229 return (size_b0);
230}
231
232
233
234
235
236
237
238
239
240
241
242static long int dram_size (long int mamr_value, long int *base, long int maxsize)
243{
244 volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR;
245 volatile memctl8xx_t *memctl = &immap->im_memctl;
246
247 memctl->memc_mamr = mamr_value;
248
249 return (get_ram_size(base, maxsize));
250}
251
252
253#if defined(CONFIG_CP850)
254
255#define DPRAM_VARNAME "KP850DIP"
256#define PARAM_ADDR 0x7C0
257#define NAME_ADDR 0x7F8
258#define BOARD_NAME "KP01"
259#define DEFAULT_LB "241111"
260
261int misc_init_r(void)
262{
263 int iCompatMode = 0;
264 char *pParam = NULL;
265 char *envlb;
266
267
268
269
270
271
272 pParam = (char*)(CONFIG_SYS_CPLD_BASE);
273 if( *pParam != 0)
274 iCompatMode = 1;
275
276 if ( iCompatMode != 0) {
277
278
279
280
281
282
283
284
285 if ( (envlb = getenv ( DPRAM_VARNAME )) == 0) {
286 setenv( DPRAM_VARNAME, DEFAULT_LB);
287 envlb = DEFAULT_LB;
288 }
289
290
291 printf("Mode: KP852(LB=%s)\n", envlb);
292
293
294 pParam = (char*)(DPRAM_BASE_ADDR + PARAM_ADDR);
295 while (*envlb) {
296 *(pParam++) = *(envlb++) - '0';
297 }
298 *pParam = '\0';
299
300
301 pParam = (char*)(DPRAM_BASE_ADDR + NAME_ADDR);
302 strcpy( pParam, BOARD_NAME);
303 } else {
304 puts("Mode: CP850\n");
305 }
306
307 return 0;
308}
309#endif
310