]> git.ipfire.org Git - people/ms/u-boot.git/blob - board/amcc/bamboo/bamboo.c
Merge remote branch 'u-boot-ppc4xx/master'
[people/ms/u-boot.git] / board / amcc / bamboo / bamboo.c
1 /*
2 * (C) Copyright 2005-2007
3 * Stefan Roese, DENX Software Engineering, sr@denx.de.
4 *
5 * See file CREDITS for list of people who contributed to this
6 * project.
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License as
10 * published by the Free Software Foundation; either version 2 of
11 * the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21 * MA 02111-1307 USA
22 */
23
24 #include <common.h>
25 #include <asm/processor.h>
26 #include <asm/gpio.h>
27 #include <spd_sdram.h>
28 #include <ppc440.h>
29 #include "bamboo.h"
30
31 void ext_bus_cntlr_init(void);
32 void configure_ppc440ep_pins(void);
33 int is_nand_selected(void);
34
35 #if !(defined(CONFIG_NAND_U_BOOT) || defined(CONFIG_NAND_SPL))
36 /*************************************************************************
37 *
38 * Bamboo has one bank onboard sdram (plus DIMM)
39 *
40 * Fixed memory is composed of :
41 * MT46V16M16TG-75 from Micron (x 2), 256Mb, 16 M x16, DDR266,
42 * 13 row add bits, 10 column add bits (but 12 row used only).
43 * ECC device: MT46V16M8TG-75 from Micron (x 1), 128Mb, x8, DDR266,
44 * 12 row add bits, 10 column add bits.
45 * Prepare a subset (only the used ones) of SPD data
46 *
47 * Note : if the ECC is enabled (SDRAM_ECC_ENABLE) the size of
48 * the corresponding bank is divided by 2 due to number of Row addresses
49 * 12 in the ECC module
50 *
51 * Assumes: 64 MB, ECC, non-registered
52 * PLB @ 133 MHz
53 *
54 ************************************************************************/
55 const unsigned char cfg_simulate_spd_eeprom[128] = {
56 0x80, /* number of SPD bytes used: 128 */
57 0x08, /* total number bytes in SPD device = 256 */
58 0x07, /* DDR ram */
59 #ifdef CONFIG_DDR_ECC
60 0x0C, /* num Row Addr: 12 */
61 #else
62 0x0D, /* num Row Addr: 13 */
63 #endif
64 0x09, /* numColAddr: 9 */
65 0x01, /* numBanks: 1 */
66 0x20, /* Module data width: 32 bits */
67 0x00, /* Module data width continued: +0 */
68 0x04, /* 2.5 Volt */
69 0x75, /* SDRAM Cycle Time (cas latency 2.5) = 7.5 ns */
70 0x00, /* SDRAM Access from clock */
71 #ifdef CONFIG_DDR_ECC
72 0x02, /* ECC ON : 02 OFF : 00 */
73 #else
74 0x00, /* ECC ON : 02 OFF : 00 */
75 #endif
76 0x82, /* refresh Rate Type: Normal (7.8us) + Self refresh */
77 0,
78 0,
79 0x01, /* wcsbc = 1 */
80 0,
81 0,
82 0x0C, /* casBit (2,2.5) */
83 0,
84 0,
85 0x00, /* not registered: 0 registered : 0x02*/
86 0,
87 0xA0, /* SDRAM Cycle Time (cas latency 2) = 10 ns */
88 0,
89 0x00, /* SDRAM Cycle Time (cas latency 1.5) = N.A */
90 0,
91 0x50, /* tRpNs = 20 ns */
92 0,
93 0x50, /* tRcdNs = 20 ns */
94 45, /* tRasNs */
95 #ifdef CONFIG_DDR_ECC
96 0x08, /* bankSizeID: 32MB */
97 #else
98 0x10, /* bankSizeID: 64MB */
99 #endif
100 0,
101 0,
102 0,
103 0,
104 0,
105 0,
106 0,
107 0,
108 0,
109 0,
110 0,
111 0,
112 0,
113 0,
114 0,
115 0,
116 0,
117 0,
118 0,
119 0,
120 0,
121 0,
122 0,
123 0,
124 0,
125 0,
126 0,
127 0,
128 0,
129 0,
130 0,
131 0,
132 0,
133 0,
134 0,
135 0,
136 0,
137 0,
138 0,
139 0,
140 0,
141 0,
142 0,
143 0,
144 0,
145 0,
146 0,
147 0,
148 0,
149 0,
150 0,
151 0,
152 0,
153 0,
154 0,
155 0,
156 0,
157 0,
158 0,
159 0,
160 0,
161 0,
162 0,
163 0,
164 0,
165 0,
166 0,
167 0,
168 0,
169 0,
170 0,
171 0,
172 0,
173 0,
174 0,
175 0,
176 0,
177 0,
178 0,
179 0,
180 0,
181 0,
182 0,
183 0,
184 0,
185 0,
186 0,
187 0,
188 0,
189 0,
190 0,
191 0,
192 0,
193 0,
194 0,
195 0
196 };
197 #endif
198
199 #if 0
200 { /* GPIO Alternate1 Alternate2 Alternate3 */
201 {
202 /* GPIO Core 0 */
203 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_0 -> EBC_ADDR(7) DMA_REQ(2) */
204 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_1 -> EBC_ADDR(6) DMA_ACK(2) */
205 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_2 -> EBC_ADDR(5) DMA_EOT/TC(2) */
206 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_3 -> EBC_ADDR(4) DMA_REQ(3) */
207 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_4 -> EBC_ADDR(3) DMA_ACK(3) */
208 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_5 ................. */
209 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_6 -> EBC_CS_N(1) */
210 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_7 -> EBC_CS_N(2) */
211 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_8 -> EBC_CS_N(3) */
212 { GPIO0_BASE, GPIO_DIS, GPIO_ALT1 }, /* GPIO0_9 -> EBC_CS_N(4) */
213 { GPIO0_BASE, GPIO_OUT, GPIO_ALT1 }, /* GPIO0_10 -> EBC_CS_N(5) */
214 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_11 -> EBC_BUS_ERR */
215 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_12 -> ZII_p0Rxd(0) */
216 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_13 -> ZII_p0Rxd(1) */
217 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_14 -> ZII_p0Rxd(2) */
218 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_15 -> ZII_p0Rxd(3) */
219 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_16 -> ZII_p0Txd(0) */
220 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_17 -> ZII_p0Txd(1) */
221 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_18 -> ZII_p0Txd(2) */
222 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_19 -> ZII_p0Txd(3) */
223 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_20 -> ZII_p0Rx_er */
224 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_21 -> ZII_p0Rx_dv */
225 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_22 -> ZII_p0RxCrs */
226 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_23 -> ZII_p0Tx_er */
227 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_24 -> ZII_p0Tx_en */
228 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_25 -> ZII_p0Col */
229 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_26 -> USB2D_RXVALID */
230 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_27 -> EXT_EBC_REQ USB2D_RXERROR */
231 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_28 -> USB2D_TXVALID */
232 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_29 -> EBC_EXT_HDLA USB2D_PAD_SUSPNDM */
233 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_30 -> EBC_EXT_ACK USB2D_XCVRSELECT */
234 { GPIO0_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO0_31 -> EBC_EXR_BUSREQ USB2D_TERMSELECT */
235 },
236 {
237 /* GPIO Core 1 */
238 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_0 -> USB2D_OPMODE0 */
239 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_1 -> USB2D_OPMODE1 */
240 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_2 -> UART0_DCD_N UART1_DSR_CTS_N UART2_SOUT */
241 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_3 -> UART0_8PIN_DSR_N UART1_RTS_DTR_N UART2_SIN */
242 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_4 -> UART0_8PIN_CTS_N UART3_SIN */
243 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_5 -> UART0_RTS_N */
244 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_6 -> UART0_DTR_N UART1_SOUT */
245 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_7 -> UART0_RI_N UART1_SIN */
246 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_8 -> UIC_IRQ(0) */
247 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_9 -> UIC_IRQ(1) */
248 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_10 -> UIC_IRQ(2) */
249 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_11 -> UIC_IRQ(3) */
250 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_12 -> UIC_IRQ(4) DMA_ACK(1) */
251 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_13 -> UIC_IRQ(6) DMA_EOT/TC(1) */
252 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_14 -> UIC_IRQ(7) DMA_REQ(0) */
253 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_15 -> UIC_IRQ(8) DMA_ACK(0) */
254 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_16 -> UIC_IRQ(9) DMA_EOT/TC(0) */
255 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_17 -> - */
256 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_18 -> | */
257 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_19 -> | */
258 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_20 -> | */
259 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_21 -> | */
260 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_22 -> | */
261 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_23 -> \ Can be unselected thru TraceSelect Bit */
262 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_24 -> / in PowerPC440EP Chip */
263 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_25 -> | */
264 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_26 -> | */
265 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_27 -> | */
266 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_28 -> | */
267 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_29 -> | */
268 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_30 -> | */
269 { GPIO1_BASE, GPIO_DIS, GPIO_SEL }, /* GPIO1_31 -> - */
270 }
271 };
272 #endif
273
274 /*----------------------------------------------------------------------------+
275 | EBC Devices Characteristics
276 | Peripheral Bank Access Parameters - EBC0_BnAP
277 | Peripheral Bank Configuration Register - EBC0_BnCR
278 +----------------------------------------------------------------------------*/
279 /* Small Flash */
280 #define EBC0_BNAP_SMALL_FLASH \
281 EBC0_BNAP_BME_DISABLED | \
282 EBC0_BNAP_TWT_ENCODE(6) | \
283 EBC0_BNAP_CSN_ENCODE(0) | \
284 EBC0_BNAP_OEN_ENCODE(1) | \
285 EBC0_BNAP_WBN_ENCODE(1) | \
286 EBC0_BNAP_WBF_ENCODE(3) | \
287 EBC0_BNAP_TH_ENCODE(1) | \
288 EBC0_BNAP_RE_ENABLED | \
289 EBC0_BNAP_SOR_DELAYED | \
290 EBC0_BNAP_BEM_WRITEONLY | \
291 EBC0_BNAP_PEN_DISABLED
292
293 #define EBC0_BNCR_SMALL_FLASH_CS0 \
294 EBC0_BNCR_BAS_ENCODE(0xFFF00000) | \
295 EBC0_BNCR_BS_1MB | \
296 EBC0_BNCR_BU_RW | \
297 EBC0_BNCR_BW_8BIT
298
299 #define EBC0_BNCR_SMALL_FLASH_CS4 \
300 EBC0_BNCR_BAS_ENCODE(0x87F00000) | \
301 EBC0_BNCR_BS_1MB | \
302 EBC0_BNCR_BU_RW | \
303 EBC0_BNCR_BW_8BIT
304
305 /* Large Flash or SRAM */
306 #define EBC0_BNAP_LARGE_FLASH_OR_SRAM \
307 EBC0_BNAP_BME_DISABLED | \
308 EBC0_BNAP_TWT_ENCODE(8) | \
309 EBC0_BNAP_CSN_ENCODE(0) | \
310 EBC0_BNAP_OEN_ENCODE(1) | \
311 EBC0_BNAP_WBN_ENCODE(1) | \
312 EBC0_BNAP_WBF_ENCODE(1) | \
313 EBC0_BNAP_TH_ENCODE(2) | \
314 EBC0_BNAP_SOR_DELAYED | \
315 EBC0_BNAP_BEM_RW | \
316 EBC0_BNAP_PEN_DISABLED
317
318 #define EBC0_BNCR_LARGE_FLASH_OR_SRAM_CS0 \
319 EBC0_BNCR_BAS_ENCODE(0xFF800000) | \
320 EBC0_BNCR_BS_8MB | \
321 EBC0_BNCR_BU_RW | \
322 EBC0_BNCR_BW_16BIT
323
324
325 #define EBC0_BNCR_LARGE_FLASH_OR_SRAM_CS4 \
326 EBC0_BNCR_BAS_ENCODE(0x87800000) | \
327 EBC0_BNCR_BS_8MB | \
328 EBC0_BNCR_BU_RW | \
329 EBC0_BNCR_BW_16BIT
330
331 /* NVRAM - FPGA */
332 #define EBC0_BNAP_NVRAM_FPGA \
333 EBC0_BNAP_BME_DISABLED | \
334 EBC0_BNAP_TWT_ENCODE(9) | \
335 EBC0_BNAP_CSN_ENCODE(0) | \
336 EBC0_BNAP_OEN_ENCODE(1) | \
337 EBC0_BNAP_WBN_ENCODE(1) | \
338 EBC0_BNAP_WBF_ENCODE(0) | \
339 EBC0_BNAP_TH_ENCODE(2) | \
340 EBC0_BNAP_RE_ENABLED | \
341 EBC0_BNAP_SOR_DELAYED | \
342 EBC0_BNAP_BEM_WRITEONLY | \
343 EBC0_BNAP_PEN_DISABLED
344
345 #define EBC0_BNCR_NVRAM_FPGA_CS5 \
346 EBC0_BNCR_BAS_ENCODE(0x80000000) | \
347 EBC0_BNCR_BS_1MB | \
348 EBC0_BNCR_BU_RW | \
349 EBC0_BNCR_BW_8BIT
350
351 /* Nand Flash */
352 #define EBC0_BNAP_NAND_FLASH \
353 EBC0_BNAP_BME_DISABLED | \
354 EBC0_BNAP_TWT_ENCODE(3) | \
355 EBC0_BNAP_CSN_ENCODE(0) | \
356 EBC0_BNAP_OEN_ENCODE(0) | \
357 EBC0_BNAP_WBN_ENCODE(0) | \
358 EBC0_BNAP_WBF_ENCODE(0) | \
359 EBC0_BNAP_TH_ENCODE(1) | \
360 EBC0_BNAP_RE_ENABLED | \
361 EBC0_BNAP_SOR_NOT_DELAYED | \
362 EBC0_BNAP_BEM_RW | \
363 EBC0_BNAP_PEN_DISABLED
364
365
366 #define EBC0_BNCR_NAND_FLASH_CS0 0xB8400000
367
368 /* NAND0 */
369 #define EBC0_BNCR_NAND_FLASH_CS1 \
370 EBC0_BNCR_BAS_ENCODE(0x90000000) | \
371 EBC0_BNCR_BS_1MB | \
372 EBC0_BNCR_BU_RW | \
373 EBC0_BNCR_BW_32BIT
374 /* NAND1 - Bank2 */
375 #define EBC0_BNCR_NAND_FLASH_CS2 \
376 EBC0_BNCR_BAS_ENCODE(0x94000000) | \
377 EBC0_BNCR_BS_1MB | \
378 EBC0_BNCR_BU_RW | \
379 EBC0_BNCR_BW_32BIT
380
381 /* NAND1 - Bank3 */
382 #define EBC0_BNCR_NAND_FLASH_CS3 \
383 EBC0_BNCR_BAS_ENCODE(0x94000000) | \
384 EBC0_BNCR_BS_1MB | \
385 EBC0_BNCR_BU_RW | \
386 EBC0_BNCR_BW_32BIT
387
388 int board_early_init_f(void)
389 {
390 ext_bus_cntlr_init();
391
392 /*--------------------------------------------------------------------
393 * Setup the interrupt controller polarities, triggers, etc.
394 *-------------------------------------------------------------------*/
395 mtdcr(uic0sr, 0xffffffff); /* clear all */
396 mtdcr(uic0er, 0x00000000); /* disable all */
397 mtdcr(uic0cr, 0x00000009); /* ATI & UIC1 crit are critical */
398 mtdcr(uic0pr, 0xfffffe13); /* per ref-board manual */
399 mtdcr(uic0tr, 0x01c00008); /* per ref-board manual */
400 mtdcr(uic0vr, 0x00000001); /* int31 highest, base=0x000 */
401 mtdcr(uic0sr, 0xffffffff); /* clear all */
402
403 mtdcr(uic1sr, 0xffffffff); /* clear all */
404 mtdcr(uic1er, 0x00000000); /* disable all */
405 mtdcr(uic1cr, 0x00000000); /* all non-critical */
406 mtdcr(uic1pr, 0xffffe0ff); /* per ref-board manual */
407 mtdcr(uic1tr, 0x00ffc000); /* per ref-board manual */
408 mtdcr(uic1vr, 0x00000001); /* int31 highest, base=0x000 */
409 mtdcr(uic1sr, 0xffffffff); /* clear all */
410
411 /*--------------------------------------------------------------------
412 * Setup the GPIO pins
413 *-------------------------------------------------------------------*/
414 out32(GPIO0_OSRL, 0x00000400);
415 out32(GPIO0_OSRH, 0x00000000);
416 out32(GPIO0_TSRL, 0x00000400);
417 out32(GPIO0_TSRH, 0x00000000);
418 out32(GPIO0_ISR1L, 0x00000000);
419 out32(GPIO0_ISR1H, 0x00000000);
420 out32(GPIO0_ISR2L, 0x00000000);
421 out32(GPIO0_ISR2H, 0x00000000);
422 out32(GPIO0_ISR3L, 0x00000000);
423 out32(GPIO0_ISR3H, 0x00000000);
424
425 out32(GPIO1_OSRL, 0x0C380000);
426 out32(GPIO1_OSRH, 0x00000000);
427 out32(GPIO1_TSRL, 0x0C380000);
428 out32(GPIO1_TSRH, 0x00000000);
429 out32(GPIO1_ISR1L, 0x0FC30000);
430 out32(GPIO1_ISR1H, 0x00000000);
431 out32(GPIO1_ISR2L, 0x0C010000);
432 out32(GPIO1_ISR2H, 0x00000000);
433 out32(GPIO1_ISR3L, 0x01400000);
434 out32(GPIO1_ISR3H, 0x00000000);
435
436 configure_ppc440ep_pins();
437
438 return 0;
439 }
440
441 int checkboard(void)
442 {
443 char *s = getenv("serial#");
444
445 printf("Board: Bamboo - AMCC PPC440EP Evaluation Board");
446 if (s != NULL) {
447 puts(", serial# ");
448 puts(s);
449 }
450 putc('\n');
451
452 return (0);
453 }
454
455
456 long int initdram (int board_type)
457 {
458 #if !(defined(CONFIG_NAND_U_BOOT) || defined(CONFIG_NAND_SPL))
459 long dram_size;
460
461 dram_size = spd_sdram();
462
463 return dram_size;
464 #else
465 return CFG_MBYTES_SDRAM << 20;
466 #endif
467 }
468
469 #if defined(CFG_DRAM_TEST)
470 int testdram(void)
471 {
472 unsigned long *mem = (unsigned long *)0;
473 const unsigned long kend = (1024 / sizeof(unsigned long));
474 unsigned long k, n, *p32, ctr;
475 const unsigned long bend = CFG_MBYTES_SDRAM * 1024 * 1024;
476
477 mtmsr(0);
478
479 for (k = 0; k < CFG_MBYTES_SDRAM*1024;
480 ++k, mem += (1024 / sizeof(unsigned long))) {
481 if ((k & 1023) == 0) {
482 printf("%3d MB\r", k / 1024);
483 }
484
485 memset(mem, 0xaaaaaaaa, 1024);
486 for (n = 0; n < kend; ++n) {
487 if (mem[n] != 0xaaaaaaaa) {
488 printf("SDRAM test fails at: %08x\n",
489 (uint) & mem[n]);
490 return 1;
491 }
492 }
493
494 memset(mem, 0x55555555, 1024);
495 for (n = 0; n < kend; ++n) {
496 if (mem[n] != 0x55555555) {
497 printf("SDRAM test fails at: %08x\n",
498 (uint) & mem[n]);
499 return 1;
500 }
501 }
502 }
503
504 /*
505 * Perform a sequence test to ensure that all
506 * memory locations are uniquely addressable
507 */
508 ctr = 0;
509 p32 = 0;
510 while ((unsigned long)p32 != bend) {
511 if (0 == ((unsigned long)p32 & ((1<<20)-1)))
512 printf("Writing %3d MB\r", (unsigned long)p32 >> 20);
513 *p32++ = ctr++;
514 }
515
516 ctr = 0;
517 p32 = 0;
518 while ((unsigned long)p32 != bend) {
519 if (0 == ((unsigned long)p32 & ((1<<20)-1)))
520 printf("Verifying %3d MB\r", (unsigned long)p32 >> 20);
521
522 if (*p32 != ctr) {
523 printf("SDRAM test fails at: %08x\n", p32);
524 return 1;
525 }
526
527 ctr++;
528 p32++;
529 }
530
531 printf("SDRAM test passes\n");
532 return 0;
533 }
534 #endif
535
536 /*************************************************************************
537 * pci_pre_init
538 *
539 * This routine is called just prior to registering the hose and gives
540 * the board the opportunity to check things. Returning a value of zero
541 * indicates that things are bad & PCI initialization should be aborted.
542 *
543 * Different boards may wish to customize the pci controller structure
544 * (add regions, override default access routines, etc) or perform
545 * certain pre-initialization actions.
546 *
547 ************************************************************************/
548 #if defined(CONFIG_PCI)
549 int pci_pre_init(struct pci_controller *hose)
550 {
551 unsigned long addr;
552
553 /*-------------------------------------------------------------------------+
554 | Set priority for all PLB3 devices to 0.
555 | Set PLB3 arbiter to fair mode.
556 +-------------------------------------------------------------------------*/
557 mfsdr(sdr_amp1, addr);
558 mtsdr(sdr_amp1, (addr & 0x000000FF) | 0x0000FF00);
559 addr = mfdcr(plb3_acr);
560 mtdcr(plb3_acr, addr | 0x80000000);
561
562 /*-------------------------------------------------------------------------+
563 | Set priority for all PLB4 devices to 0.
564 +-------------------------------------------------------------------------*/
565 mfsdr(sdr_amp0, addr);
566 mtsdr(sdr_amp0, (addr & 0x000000FF) | 0x0000FF00);
567 addr = mfdcr(plb4_acr) | 0xa0000000; /* Was 0x8---- */
568 mtdcr(plb4_acr, addr);
569
570 /*-------------------------------------------------------------------------+
571 | Set Nebula PLB4 arbiter to fair mode.
572 +-------------------------------------------------------------------------*/
573 /* Segment0 */
574 addr = (mfdcr(plb0_acr) & ~plb0_acr_ppm_mask) | plb0_acr_ppm_fair;
575 addr = (addr & ~plb0_acr_hbu_mask) | plb0_acr_hbu_enabled;
576 addr = (addr & ~plb0_acr_rdp_mask) | plb0_acr_rdp_4deep;
577 addr = (addr & ~plb0_acr_wrp_mask) | plb0_acr_wrp_2deep;
578 mtdcr(plb0_acr, addr);
579
580 /* Segment1 */
581 addr = (mfdcr(plb1_acr) & ~plb1_acr_ppm_mask) | plb1_acr_ppm_fair;
582 addr = (addr & ~plb1_acr_hbu_mask) | plb1_acr_hbu_enabled;
583 addr = (addr & ~plb1_acr_rdp_mask) | plb1_acr_rdp_4deep;
584 addr = (addr & ~plb1_acr_wrp_mask) | plb1_acr_wrp_2deep;
585 mtdcr(plb1_acr, addr);
586
587 return 1;
588 }
589 #endif /* defined(CONFIG_PCI) */
590
591 /*************************************************************************
592 * pci_target_init
593 *
594 * The bootstrap configuration provides default settings for the pci
595 * inbound map (PIM). But the bootstrap config choices are limited and
596 * may not be sufficient for a given board.
597 *
598 ************************************************************************/
599 #if defined(CONFIG_PCI) && defined(CFG_PCI_TARGET_INIT)
600 void pci_target_init(struct pci_controller *hose)
601 {
602 /*--------------------------------------------------------------------------+
603 * Set up Direct MMIO registers
604 *--------------------------------------------------------------------------*/
605 /*--------------------------------------------------------------------------+
606 | PowerPC440 EP PCI Master configuration.
607 | Map one 1Gig range of PLB/processor addresses to PCI memory space.
608 | PLB address 0xA0000000-0xDFFFFFFF ==> PCI address 0xA0000000-0xDFFFFFFF
609 | Use byte reversed out routines to handle endianess.
610 | Make this region non-prefetchable.
611 +--------------------------------------------------------------------------*/
612 out32r(PCIX0_PMM0MA, 0x00000000); /* PMM0 Mask/Attribute - disabled b4 setting */
613 out32r(PCIX0_PMM0LA, CFG_PCI_MEMBASE); /* PMM0 Local Address */
614 out32r(PCIX0_PMM0PCILA, CFG_PCI_MEMBASE); /* PMM0 PCI Low Address */
615 out32r(PCIX0_PMM0PCIHA, 0x00000000); /* PMM0 PCI High Address */
616 out32r(PCIX0_PMM0MA, 0xE0000001); /* 512M + No prefetching, and enable region */
617
618 out32r(PCIX0_PMM1MA, 0x00000000); /* PMM0 Mask/Attribute - disabled b4 setting */
619 out32r(PCIX0_PMM1LA, CFG_PCI_MEMBASE2); /* PMM0 Local Address */
620 out32r(PCIX0_PMM1PCILA, CFG_PCI_MEMBASE2); /* PMM0 PCI Low Address */
621 out32r(PCIX0_PMM1PCIHA, 0x00000000); /* PMM0 PCI High Address */
622 out32r(PCIX0_PMM1MA, 0xE0000001); /* 512M + No prefetching, and enable region */
623
624 out32r(PCIX0_PTM1MS, 0x00000001); /* Memory Size/Attribute */
625 out32r(PCIX0_PTM1LA, 0); /* Local Addr. Reg */
626 out32r(PCIX0_PTM2MS, 0); /* Memory Size/Attribute */
627 out32r(PCIX0_PTM2LA, 0); /* Local Addr. Reg */
628
629 /*--------------------------------------------------------------------------+
630 * Set up Configuration registers
631 *--------------------------------------------------------------------------*/
632
633 /* Program the board's subsystem id/vendor id */
634 pci_write_config_word(0, PCI_SUBSYSTEM_VENDOR_ID,
635 CFG_PCI_SUBSYS_VENDORID);
636 pci_write_config_word(0, PCI_SUBSYSTEM_ID, CFG_PCI_SUBSYS_ID);
637
638 /* Configure command register as bus master */
639 pci_write_config_word(0, PCI_COMMAND, PCI_COMMAND_MASTER);
640
641 /* 240nS PCI clock */
642 pci_write_config_word(0, PCI_LATENCY_TIMER, 1);
643
644 /* No error reporting */
645 pci_write_config_word(0, PCI_ERREN, 0);
646
647 pci_write_config_dword(0, PCI_BRDGOPT2, 0x00000101);
648
649 }
650 #endif /* defined(CONFIG_PCI) && defined(CFG_PCI_TARGET_INIT) */
651
652 /*************************************************************************
653 * pci_master_init
654 *
655 ************************************************************************/
656 #if defined(CONFIG_PCI) && defined(CFG_PCI_MASTER_INIT)
657 void pci_master_init(struct pci_controller *hose)
658 {
659 unsigned short temp_short;
660
661 /*--------------------------------------------------------------------------+
662 | Write the PowerPC440 EP PCI Configuration regs.
663 | Enable PowerPC440 EP to be a master on the PCI bus (PMM).
664 | Enable PowerPC440 EP to act as a PCI memory target (PTM).
665 +--------------------------------------------------------------------------*/
666 pci_read_config_word(0, PCI_COMMAND, &temp_short);
667 pci_write_config_word(0, PCI_COMMAND,
668 temp_short | PCI_COMMAND_MASTER |
669 PCI_COMMAND_MEMORY);
670 }
671 #endif /* defined(CONFIG_PCI) && defined(CFG_PCI_MASTER_INIT) */
672
673 /*************************************************************************
674 * is_pci_host
675 *
676 * This routine is called to determine if a pci scan should be
677 * performed. With various hardware environments (especially cPCI and
678 * PPMC) it's insufficient to depend on the state of the arbiter enable
679 * bit in the strap register, or generic host/adapter assumptions.
680 *
681 * Rather than hard-code a bad assumption in the general 440 code, the
682 * 440 pci code requires the board to decide at runtime.
683 *
684 * Return 0 for adapter mode, non-zero for host (monarch) mode.
685 *
686 *
687 ************************************************************************/
688 #if defined(CONFIG_PCI)
689 int is_pci_host(struct pci_controller *hose)
690 {
691 /* Bamboo is always configured as host. */
692 return (1);
693 }
694 #endif /* defined(CONFIG_PCI) */
695
696 /*----------------------------------------------------------------------------+
697 | is_powerpc440ep_pass1.
698 +----------------------------------------------------------------------------*/
699 int is_powerpc440ep_pass1(void)
700 {
701 unsigned long pvr;
702
703 pvr = get_pvr();
704
705 if (pvr == PVR_POWERPC_440EP_PASS1)
706 return TRUE;
707 else if (pvr == PVR_POWERPC_440EP_PASS2)
708 return FALSE;
709 else {
710 printf("brdutil error 3\n");
711 for (;;)
712 ;
713 }
714
715 return(FALSE);
716 }
717
718 /*----------------------------------------------------------------------------+
719 | is_nand_selected.
720 +----------------------------------------------------------------------------*/
721 int is_nand_selected(void)
722 {
723 #ifdef CONFIG_BAMBOO_NAND
724 return TRUE;
725 #else
726 return FALSE;
727 #endif
728 }
729
730 /*----------------------------------------------------------------------------+
731 | config_on_ebc_cs4_is_small_flash => from EPLD
732 +----------------------------------------------------------------------------*/
733 unsigned char config_on_ebc_cs4_is_small_flash(void)
734 {
735 /* Not implemented yet => returns constant value */
736 return TRUE;
737 }
738
739 /*----------------------------------------------------------------------------+
740 | Ext_bus_cntlr_init.
741 | Initialize the external bus controller
742 +----------------------------------------------------------------------------*/
743 void ext_bus_cntlr_init(void)
744 {
745 unsigned long sdr0_pstrp0, sdr0_sdstp1;
746 unsigned long bootstrap_settings, boot_selection, ebc_boot_size;
747 int computed_boot_device = BOOT_DEVICE_UNKNOWN;
748 unsigned long ebc0_cs0_bnap_value = 0, ebc0_cs0_bncr_value = 0;
749 unsigned long ebc0_cs1_bnap_value = 0, ebc0_cs1_bncr_value = 0;
750 unsigned long ebc0_cs2_bnap_value = 0, ebc0_cs2_bncr_value = 0;
751 unsigned long ebc0_cs3_bnap_value = 0, ebc0_cs3_bncr_value = 0;
752 unsigned long ebc0_cs4_bnap_value = 0, ebc0_cs4_bncr_value = 0;
753
754
755 /*-------------------------------------------------------------------------+
756 |
757 | PART 1 : Initialize EBC Bank 5
758 | ==============================
759 | Bank5 is always associated to the NVRAM/EPLD.
760 | It has to be initialized prior to other banks settings computation since
761 | some board registers values may be needed
762 |
763 +-------------------------------------------------------------------------*/
764 /* NVRAM - FPGA */
765 mtebc(pb5ap, EBC0_BNAP_NVRAM_FPGA);
766 mtebc(pb5cr, EBC0_BNCR_NVRAM_FPGA_CS5);
767
768 /*-------------------------------------------------------------------------+
769 |
770 | PART 2 : Determine which boot device was selected
771 | =========================================
772 |
773 | Read Pin Strap Register in PPC440EP
774 | In case of boot from IIC, read Serial Device Strap Register1
775 |
776 | Result can either be :
777 | - Boot from EBC 8bits => SMALL FLASH
778 | - Boot from EBC 16bits => Large Flash or SRAM
779 | - Boot from NAND Flash
780 | - Boot from PCI
781 |
782 +-------------------------------------------------------------------------*/
783 /* Read Pin Strap Register in PPC440EP */
784 mfsdr(sdr_pstrp0, sdr0_pstrp0);
785 bootstrap_settings = sdr0_pstrp0 & SDR0_PSTRP0_BOOTSTRAP_MASK;
786
787 /*-------------------------------------------------------------------------+
788 | PPC440EP Pass1
789 +-------------------------------------------------------------------------*/
790 if (is_powerpc440ep_pass1() == TRUE) {
791 switch(bootstrap_settings) {
792 case SDR0_PSTRP0_BOOTSTRAP_SETTINGS0:
793 /* Default Strap Settings 0 : CPU 400 - PLB 133 - Boot EBC 8 bit 33MHz */
794 /* Boot from Small Flash */
795 computed_boot_device = BOOT_FROM_SMALL_FLASH;
796 break;
797 case SDR0_PSTRP0_BOOTSTRAP_SETTINGS1:
798 /* Default Strap Settings 1 : CPU 533 - PLB 133 - Boot PCI 66MHz */
799 /* Boot from PCI */
800 computed_boot_device = BOOT_FROM_PCI;
801 break;
802
803 case SDR0_PSTRP0_BOOTSTRAP_SETTINGS2:
804 /* Default Strap Settings 2 : CPU 500 - PLB 100 - Boot NDFC16 66MHz */
805 /* Boot from Nand Flash */
806 computed_boot_device = BOOT_FROM_NAND_FLASH0;
807 break;
808
809 case SDR0_PSTRP0_BOOTSTRAP_SETTINGS3:
810 /* Default Strap Settings 3 : CPU 333 - PLB 133 - Boot EBC 8 bit 66MHz */
811 /* Boot from Small Flash */
812 computed_boot_device = BOOT_FROM_SMALL_FLASH;
813 break;
814
815 case SDR0_PSTRP0_BOOTSTRAP_IIC_A8_EN:
816 case SDR0_PSTRP0_BOOTSTRAP_IIC_A4_EN:
817 /* Boot Settings in IIC EEprom address 0xA8 or 0xA4 */
818 /* Read Serial Device Strap Register1 in PPC440EP */
819 mfsdr(sdr_sdstp1, sdr0_sdstp1);
820 boot_selection = sdr0_sdstp1 & SDR0_SDSTP1_BOOT_SEL_MASK;
821 ebc_boot_size = sdr0_sdstp1 & SDR0_SDSTP1_EBC_ROM_BS_MASK;
822
823 switch(boot_selection) {
824 case SDR0_SDSTP1_BOOT_SEL_EBC:
825 switch(ebc_boot_size) {
826 case SDR0_SDSTP1_EBC_ROM_BS_16BIT:
827 computed_boot_device = BOOT_FROM_LARGE_FLASH_OR_SRAM;
828 break;
829 case SDR0_SDSTP1_EBC_ROM_BS_8BIT:
830 computed_boot_device = BOOT_FROM_SMALL_FLASH;
831 break;
832 }
833 break;
834
835 case SDR0_SDSTP1_BOOT_SEL_PCI:
836 computed_boot_device = BOOT_FROM_PCI;
837 break;
838
839 case SDR0_SDSTP1_BOOT_SEL_NDFC:
840 computed_boot_device = BOOT_FROM_NAND_FLASH0;
841 break;
842 }
843 break;
844 }
845 }
846
847 /*-------------------------------------------------------------------------+
848 | PPC440EP Pass2
849 +-------------------------------------------------------------------------*/
850 else {
851 switch(bootstrap_settings) {
852 case SDR0_PSTRP0_BOOTSTRAP_SETTINGS0:
853 /* Default Strap Settings 0 : CPU 400 - PLB 133 - Boot EBC 8 bit 33MHz */
854 /* Boot from Small Flash */
855 computed_boot_device = BOOT_FROM_SMALL_FLASH;
856 break;
857 case SDR0_PSTRP0_BOOTSTRAP_SETTINGS1:
858 /* Default Strap Settings 1 : CPU 333 - PLB 133 - Boot PCI 66MHz */
859 /* Boot from PCI */
860 computed_boot_device = BOOT_FROM_PCI;
861 break;
862
863 case SDR0_PSTRP0_BOOTSTRAP_SETTINGS2:
864 /* Default Strap Settings 2 : CPU 400 - PLB 100 - Boot NDFC16 33MHz */
865 /* Boot from Nand Flash */
866 computed_boot_device = BOOT_FROM_NAND_FLASH0;
867 break;
868
869 case SDR0_PSTRP0_BOOTSTRAP_SETTINGS3:
870 /* Default Strap Settings 3 : CPU 400 - PLB 100 - Boot EBC 16 bit 33MHz */
871 /* Boot from Large Flash or SRAM */
872 computed_boot_device = BOOT_FROM_LARGE_FLASH_OR_SRAM;
873 break;
874
875 case SDR0_PSTRP0_BOOTSTRAP_SETTINGS4:
876 /* Default Strap Settings 4 : CPU 333 - PLB 133 - Boot EBC 16 bit 66MHz */
877 /* Boot from Large Flash or SRAM */
878 computed_boot_device = BOOT_FROM_LARGE_FLASH_OR_SRAM;
879 break;
880
881 case SDR0_PSTRP0_BOOTSTRAP_SETTINGS6:
882 /* Default Strap Settings 6 : CPU 400 - PLB 100 - Boot PCI 33MHz */
883 /* Boot from PCI */
884 computed_boot_device = BOOT_FROM_PCI;
885 break;
886
887 case SDR0_PSTRP0_BOOTSTRAP_IIC_A8_EN:
888 case SDR0_PSTRP0_BOOTSTRAP_IIC_A4_EN:
889 /* Default Strap Settings 5-7 */
890 /* Boot Settings in IIC EEprom address 0xA8 or 0xA4 */
891 /* Read Serial Device Strap Register1 in PPC440EP */
892 mfsdr(sdr_sdstp1, sdr0_sdstp1);
893 boot_selection = sdr0_sdstp1 & SDR0_SDSTP1_BOOT_SEL_MASK;
894 ebc_boot_size = sdr0_sdstp1 & SDR0_SDSTP1_EBC_ROM_BS_MASK;
895
896 switch(boot_selection) {
897 case SDR0_SDSTP1_BOOT_SEL_EBC:
898 switch(ebc_boot_size) {
899 case SDR0_SDSTP1_EBC_ROM_BS_16BIT:
900 computed_boot_device = BOOT_FROM_LARGE_FLASH_OR_SRAM;
901 break;
902 case SDR0_SDSTP1_EBC_ROM_BS_8BIT:
903 computed_boot_device = BOOT_FROM_SMALL_FLASH;
904 break;
905 }
906 break;
907
908 case SDR0_SDSTP1_BOOT_SEL_PCI:
909 computed_boot_device = BOOT_FROM_PCI;
910 break;
911
912 case SDR0_SDSTP1_BOOT_SEL_NDFC:
913 computed_boot_device = BOOT_FROM_NAND_FLASH0;
914 break;
915 }
916 break;
917 }
918 }
919
920 /*-------------------------------------------------------------------------+
921 |
922 | PART 3 : Compute EBC settings depending on selected boot device
923 | ====== ======================================================
924 |
925 | Resulting EBC init will be among following configurations :
926 |
927 | - Boot from EBC 8bits => boot from SMALL FLASH selected
928 | EBC-CS0 = Small Flash
929 | EBC-CS1,2,3 = NAND Flash or
930 | Exp.Slot depending on Soft Config
931 | EBC-CS4 = SRAM/Large Flash or
932 | Large Flash/SRAM depending on jumpers
933 | EBC-CS5 = NVRAM / EPLD
934 |
935 | - Boot from EBC 16bits => boot from Large Flash or SRAM selected
936 | EBC-CS0 = SRAM/Large Flash or
937 | Large Flash/SRAM depending on jumpers
938 | EBC-CS1,2,3 = NAND Flash or
939 | Exp.Slot depending on Software Configuration
940 | EBC-CS4 = Small Flash
941 | EBC-CS5 = NVRAM / EPLD
942 |
943 | - Boot from NAND Flash
944 | EBC-CS0 = NAND Flash0
945 | EBC-CS1,2,3 = NAND Flash1
946 | EBC-CS4 = SRAM/Large Flash or
947 | Large Flash/SRAM depending on jumpers
948 | EBC-CS5 = NVRAM / EPLD
949 |
950 | - Boot from PCI
951 | EBC-CS0 = ...
952 | EBC-CS1,2,3 = NAND Flash or
953 | Exp.Slot depending on Software Configuration
954 | EBC-CS4 = SRAM/Large Flash or
955 | Large Flash/SRAM or
956 | Small Flash depending on jumpers
957 | EBC-CS5 = NVRAM / EPLD
958 |
959 +-------------------------------------------------------------------------*/
960
961 switch(computed_boot_device) {
962 /*------------------------------------------------------------------------- */
963 case BOOT_FROM_SMALL_FLASH:
964 /*------------------------------------------------------------------------- */
965 ebc0_cs0_bnap_value = EBC0_BNAP_SMALL_FLASH;
966 ebc0_cs0_bncr_value = EBC0_BNCR_SMALL_FLASH_CS0;
967 if ((is_nand_selected()) == TRUE) {
968 /* NAND Flash */
969 ebc0_cs1_bnap_value = EBC0_BNAP_NAND_FLASH;
970 ebc0_cs1_bncr_value = EBC0_BNCR_NAND_FLASH_CS1;
971 ebc0_cs2_bnap_value = EBC0_BNAP_NAND_FLASH;
972 ebc0_cs2_bncr_value = EBC0_BNCR_NAND_FLASH_CS2;
973 ebc0_cs3_bnap_value = 0;
974 ebc0_cs3_bncr_value = 0;
975 } else {
976 /* Expansion Slot */
977 ebc0_cs1_bnap_value = 0;
978 ebc0_cs1_bncr_value = 0;
979 ebc0_cs2_bnap_value = 0;
980 ebc0_cs2_bncr_value = 0;
981 ebc0_cs3_bnap_value = 0;
982 ebc0_cs3_bncr_value = 0;
983 }
984 ebc0_cs4_bnap_value = EBC0_BNAP_LARGE_FLASH_OR_SRAM;
985 ebc0_cs4_bncr_value = EBC0_BNCR_LARGE_FLASH_OR_SRAM_CS4;
986
987 break;
988
989 /*------------------------------------------------------------------------- */
990 case BOOT_FROM_LARGE_FLASH_OR_SRAM:
991 /*------------------------------------------------------------------------- */
992 ebc0_cs0_bnap_value = EBC0_BNAP_LARGE_FLASH_OR_SRAM;
993 ebc0_cs0_bncr_value = EBC0_BNCR_LARGE_FLASH_OR_SRAM_CS0;
994 if ((is_nand_selected()) == TRUE) {
995 /* NAND Flash */
996 ebc0_cs1_bnap_value = EBC0_BNAP_NAND_FLASH;
997 ebc0_cs1_bncr_value = EBC0_BNCR_NAND_FLASH_CS1;
998 ebc0_cs2_bnap_value = 0;
999 ebc0_cs2_bncr_value = 0;
1000 ebc0_cs3_bnap_value = 0;
1001 ebc0_cs3_bncr_value = 0;
1002 } else {
1003 /* Expansion Slot */
1004 ebc0_cs1_bnap_value = 0;
1005 ebc0_cs1_bncr_value = 0;
1006 ebc0_cs2_bnap_value = 0;
1007 ebc0_cs2_bncr_value = 0;
1008 ebc0_cs3_bnap_value = 0;
1009 ebc0_cs3_bncr_value = 0;
1010 }
1011 ebc0_cs4_bnap_value = EBC0_BNAP_SMALL_FLASH;
1012 ebc0_cs4_bncr_value = EBC0_BNCR_SMALL_FLASH_CS4;
1013
1014 break;
1015
1016 /*------------------------------------------------------------------------- */
1017 case BOOT_FROM_NAND_FLASH0:
1018 /*------------------------------------------------------------------------- */
1019 ebc0_cs0_bnap_value = EBC0_BNAP_NAND_FLASH;
1020 ebc0_cs0_bncr_value = EBC0_BNCR_NAND_FLASH_CS1;
1021
1022 ebc0_cs1_bnap_value = 0;
1023 ebc0_cs1_bncr_value = 0;
1024 ebc0_cs2_bnap_value = 0;
1025 ebc0_cs2_bncr_value = 0;
1026 ebc0_cs3_bnap_value = 0;
1027 ebc0_cs3_bncr_value = 0;
1028
1029 /* Large Flash or SRAM */
1030 ebc0_cs4_bnap_value = EBC0_BNAP_LARGE_FLASH_OR_SRAM;
1031 ebc0_cs4_bncr_value = EBC0_BNCR_LARGE_FLASH_OR_SRAM_CS4;
1032
1033 break;
1034
1035 /*------------------------------------------------------------------------- */
1036 case BOOT_FROM_PCI:
1037 /*------------------------------------------------------------------------- */
1038 ebc0_cs0_bnap_value = 0;
1039 ebc0_cs0_bncr_value = 0;
1040
1041 if ((is_nand_selected()) == TRUE) {
1042 /* NAND Flash */
1043 ebc0_cs1_bnap_value = EBC0_BNAP_NAND_FLASH;
1044 ebc0_cs1_bncr_value = EBC0_BNCR_NAND_FLASH_CS1;
1045 ebc0_cs2_bnap_value = 0;
1046 ebc0_cs2_bncr_value = 0;
1047 ebc0_cs3_bnap_value = 0;
1048 ebc0_cs3_bncr_value = 0;
1049 } else {
1050 /* Expansion Slot */
1051 ebc0_cs1_bnap_value = 0;
1052 ebc0_cs1_bncr_value = 0;
1053 ebc0_cs2_bnap_value = 0;
1054 ebc0_cs2_bncr_value = 0;
1055 ebc0_cs3_bnap_value = 0;
1056 ebc0_cs3_bncr_value = 0;
1057 }
1058
1059 if ((config_on_ebc_cs4_is_small_flash()) == TRUE) {
1060 /* Small Flash */
1061 ebc0_cs4_bnap_value = EBC0_BNAP_SMALL_FLASH;
1062 ebc0_cs4_bncr_value = EBC0_BNCR_SMALL_FLASH_CS4;
1063 } else {
1064 /* Large Flash or SRAM */
1065 ebc0_cs4_bnap_value = EBC0_BNAP_LARGE_FLASH_OR_SRAM;
1066 ebc0_cs4_bncr_value = EBC0_BNCR_LARGE_FLASH_OR_SRAM_CS4;
1067 }
1068
1069 break;
1070
1071 /*------------------------------------------------------------------------- */
1072 case BOOT_DEVICE_UNKNOWN:
1073 /*------------------------------------------------------------------------- */
1074 /* Error */
1075 break;
1076
1077 }
1078
1079
1080 /*-------------------------------------------------------------------------+
1081 | Initialize EBC CONFIG
1082 +-------------------------------------------------------------------------*/
1083 mtdcr(ebccfga, xbcfg);
1084 mtdcr(ebccfgd, EBC0_CFG_EBTC_DRIVEN |
1085 EBC0_CFG_PTD_ENABLED |
1086 EBC0_CFG_RTC_2048PERCLK |
1087 EBC0_CFG_EMPL_LOW |
1088 EBC0_CFG_EMPH_LOW |
1089 EBC0_CFG_CSTC_DRIVEN |
1090 EBC0_CFG_BPF_ONEDW |
1091 EBC0_CFG_EMS_8BIT |
1092 EBC0_CFG_PME_DISABLED |
1093 EBC0_CFG_PMT_ENCODE(0) );
1094
1095 /*-------------------------------------------------------------------------+
1096 | Initialize EBC Bank 0-4
1097 +-------------------------------------------------------------------------*/
1098 /* EBC Bank0 */
1099 mtebc(pb0ap, ebc0_cs0_bnap_value);
1100 mtebc(pb0cr, ebc0_cs0_bncr_value);
1101 /* EBC Bank1 */
1102 mtebc(pb1ap, ebc0_cs1_bnap_value);
1103 mtebc(pb1cr, ebc0_cs1_bncr_value);
1104 /* EBC Bank2 */
1105 mtebc(pb2ap, ebc0_cs2_bnap_value);
1106 mtebc(pb2cr, ebc0_cs2_bncr_value);
1107 /* EBC Bank3 */
1108 mtebc(pb3ap, ebc0_cs3_bnap_value);
1109 mtebc(pb3cr, ebc0_cs3_bncr_value);
1110 /* EBC Bank4 */
1111 mtebc(pb4ap, ebc0_cs4_bnap_value);
1112 mtebc(pb4cr, ebc0_cs4_bncr_value);
1113
1114 return;
1115 }
1116
1117
1118 /*----------------------------------------------------------------------------+
1119 | get_uart_configuration.
1120 +----------------------------------------------------------------------------*/
1121 uart_config_nb_t get_uart_configuration(void)
1122 {
1123 return (L4);
1124 }
1125
1126 /*----------------------------------------------------------------------------+
1127 | set_phy_configuration_through_fpga => to EPLD
1128 +----------------------------------------------------------------------------*/
1129 void set_phy_configuration_through_fpga(zmii_config_t config)
1130 {
1131
1132 unsigned long fpga_selection_reg;
1133
1134 fpga_selection_reg = in8(FPGA_SELECTION_1_REG) & ~FPGA_SEL_1_REG_PHY_MASK;
1135
1136 switch(config)
1137 {
1138 case ZMII_CONFIGURATION_IS_MII:
1139 fpga_selection_reg = fpga_selection_reg | FPGA_SEL_1_REG_MII;
1140 break;
1141 case ZMII_CONFIGURATION_IS_RMII:
1142 fpga_selection_reg = fpga_selection_reg | FPGA_SEL_1_REG_RMII;
1143 break;
1144 case ZMII_CONFIGURATION_IS_SMII:
1145 fpga_selection_reg = fpga_selection_reg | FPGA_SEL_1_REG_SMII;
1146 break;
1147 case ZMII_CONFIGURATION_UNKNOWN:
1148 default:
1149 break;
1150 }
1151 out8(FPGA_SELECTION_1_REG,fpga_selection_reg);
1152
1153 }
1154
1155 /*----------------------------------------------------------------------------+
1156 | scp_selection_in_fpga.
1157 +----------------------------------------------------------------------------*/
1158 void scp_selection_in_fpga(void)
1159 {
1160 unsigned long fpga_selection_2_reg;
1161
1162 fpga_selection_2_reg = in8(FPGA_SELECTION_2_REG) & ~FPGA_SEL2_REG_IIC1_SCP_SEL_MASK;
1163 fpga_selection_2_reg |= FPGA_SEL2_REG_SEL_SCP;
1164 out8(FPGA_SELECTION_2_REG,fpga_selection_2_reg);
1165 }
1166
1167 /*----------------------------------------------------------------------------+
1168 | iic1_selection_in_fpga.
1169 +----------------------------------------------------------------------------*/
1170 void iic1_selection_in_fpga(void)
1171 {
1172 unsigned long fpga_selection_2_reg;
1173
1174 fpga_selection_2_reg = in8(FPGA_SELECTION_2_REG) & ~FPGA_SEL2_REG_IIC1_SCP_SEL_MASK;
1175 fpga_selection_2_reg |= FPGA_SEL2_REG_SEL_IIC1;
1176 out8(FPGA_SELECTION_2_REG,fpga_selection_2_reg);
1177 }
1178
1179 /*----------------------------------------------------------------------------+
1180 | dma_a_b_selection_in_fpga.
1181 +----------------------------------------------------------------------------*/
1182 void dma_a_b_selection_in_fpga(void)
1183 {
1184 unsigned long fpga_selection_2_reg;
1185
1186 fpga_selection_2_reg = in8(FPGA_SELECTION_2_REG) | FPGA_SEL2_REG_SEL_DMA_A_B;
1187 out8(FPGA_SELECTION_2_REG,fpga_selection_2_reg);
1188 }
1189
1190 /*----------------------------------------------------------------------------+
1191 | dma_a_b_unselect_in_fpga.
1192 +----------------------------------------------------------------------------*/
1193 void dma_a_b_unselect_in_fpga(void)
1194 {
1195 unsigned long fpga_selection_2_reg;
1196
1197 fpga_selection_2_reg = in8(FPGA_SELECTION_2_REG) & ~FPGA_SEL2_REG_SEL_DMA_A_B;
1198 out8(FPGA_SELECTION_2_REG,fpga_selection_2_reg);
1199 }
1200
1201 /*----------------------------------------------------------------------------+
1202 | dma_c_d_selection_in_fpga.
1203 +----------------------------------------------------------------------------*/
1204 void dma_c_d_selection_in_fpga(void)
1205 {
1206 unsigned long fpga_selection_2_reg;
1207
1208 fpga_selection_2_reg = in8(FPGA_SELECTION_2_REG) | FPGA_SEL2_REG_SEL_DMA_C_D;
1209 out8(FPGA_SELECTION_2_REG,fpga_selection_2_reg);
1210 }
1211
1212 /*----------------------------------------------------------------------------+
1213 | dma_c_d_unselect_in_fpga.
1214 +----------------------------------------------------------------------------*/
1215 void dma_c_d_unselect_in_fpga(void)
1216 {
1217 unsigned long fpga_selection_2_reg;
1218
1219 fpga_selection_2_reg = in8(FPGA_SELECTION_2_REG) & ~FPGA_SEL2_REG_SEL_DMA_C_D;
1220 out8(FPGA_SELECTION_2_REG,fpga_selection_2_reg);
1221 }
1222
1223 /*----------------------------------------------------------------------------+
1224 | usb2_device_selection_in_fpga.
1225 +----------------------------------------------------------------------------*/
1226 void usb2_device_selection_in_fpga(void)
1227 {
1228 unsigned long fpga_selection_1_reg;
1229
1230 fpga_selection_1_reg = in8(FPGA_SELECTION_1_REG) | FPGA_SEL_1_REG_USB2_DEV_SEL;
1231 out8(FPGA_SELECTION_1_REG,fpga_selection_1_reg);
1232 }
1233
1234 /*----------------------------------------------------------------------------+
1235 | usb2_device_reset_through_fpga.
1236 +----------------------------------------------------------------------------*/
1237 void usb2_device_reset_through_fpga(void)
1238 {
1239 /* Perform soft Reset pulse */
1240 unsigned long fpga_reset_reg;
1241 int i;
1242
1243 fpga_reset_reg = in8(FPGA_RESET_REG);
1244 out8(FPGA_RESET_REG,fpga_reset_reg | FPGA_RESET_REG_RESET_USB20_DEV);
1245 for (i=0; i<500; i++)
1246 udelay(1000);
1247 out8(FPGA_RESET_REG,fpga_reset_reg);
1248 }
1249
1250 /*----------------------------------------------------------------------------+
1251 | usb2_host_selection_in_fpga.
1252 +----------------------------------------------------------------------------*/
1253 void usb2_host_selection_in_fpga(void)
1254 {
1255 unsigned long fpga_selection_1_reg;
1256
1257 fpga_selection_1_reg = in8(FPGA_SELECTION_1_REG) | FPGA_SEL_1_REG_USB2_HOST_SEL;
1258 out8(FPGA_SELECTION_1_REG,fpga_selection_1_reg);
1259 }
1260
1261 /*----------------------------------------------------------------------------+
1262 | ndfc_selection_in_fpga.
1263 +----------------------------------------------------------------------------*/
1264 void ndfc_selection_in_fpga(void)
1265 {
1266 unsigned long fpga_selection_1_reg;
1267
1268 fpga_selection_1_reg = in8(FPGA_SELECTION_1_REG) &~FPGA_SEL_1_REG_NF_SELEC_MASK;
1269 fpga_selection_1_reg |= FPGA_SEL_1_REG_NF0_SEL_BY_NFCS1;
1270 fpga_selection_1_reg |= FPGA_SEL_1_REG_NF1_SEL_BY_NFCS2;
1271 out8(FPGA_SELECTION_1_REG,fpga_selection_1_reg);
1272 }
1273
1274 /*----------------------------------------------------------------------------+
1275 | uart_selection_in_fpga.
1276 +----------------------------------------------------------------------------*/
1277 void uart_selection_in_fpga(uart_config_nb_t uart_config)
1278 {
1279 /* FPGA register */
1280 unsigned char fpga_selection_3_reg;
1281
1282 /* Read FPGA Reagister */
1283 fpga_selection_3_reg = in8(FPGA_SELECTION_3_REG);
1284
1285 switch (uart_config)
1286 {
1287 case L1:
1288 /* ----------------------------------------------------------------------- */
1289 /* L1 configuration: UART0 = 8 pins */
1290 /* ----------------------------------------------------------------------- */
1291 /* Configure FPGA */
1292 fpga_selection_3_reg = fpga_selection_3_reg & ~FPGA_SEL3_REG_SEL_UART_CONFIG_MASK;
1293 fpga_selection_3_reg = fpga_selection_3_reg | FPGA_SEL3_REG_SEL_UART_CONFIG1;
1294 out8(FPGA_SELECTION_3_REG, fpga_selection_3_reg);
1295
1296 break;
1297
1298 case L2:
1299 /* ----------------------------------------------------------------------- */
1300 /* L2 configuration: UART0 = 4 pins */
1301 /* UART1 = 4 pins */
1302 /* ----------------------------------------------------------------------- */
1303 /* Configure FPGA */
1304 fpga_selection_3_reg = fpga_selection_3_reg & ~FPGA_SEL3_REG_SEL_UART_CONFIG_MASK;
1305 fpga_selection_3_reg = fpga_selection_3_reg | FPGA_SEL3_REG_SEL_UART_CONFIG2;
1306 out8(FPGA_SELECTION_3_REG, fpga_selection_3_reg);
1307
1308 break;
1309
1310 case L3:
1311 /* ----------------------------------------------------------------------- */
1312 /* L3 configuration: UART0 = 4 pins */
1313 /* UART1 = 2 pins */
1314 /* UART2 = 2 pins */
1315 /* ----------------------------------------------------------------------- */
1316 /* Configure FPGA */
1317 fpga_selection_3_reg = fpga_selection_3_reg & ~FPGA_SEL3_REG_SEL_UART_CONFIG_MASK;
1318 fpga_selection_3_reg = fpga_selection_3_reg | FPGA_SEL3_REG_SEL_UART_CONFIG3;
1319 out8(FPGA_SELECTION_3_REG, fpga_selection_3_reg);
1320 break;
1321
1322 case L4:
1323 /* Configure FPGA */
1324 fpga_selection_3_reg = fpga_selection_3_reg & ~FPGA_SEL3_REG_SEL_UART_CONFIG_MASK;
1325 fpga_selection_3_reg = fpga_selection_3_reg | FPGA_SEL3_REG_SEL_UART_CONFIG4;
1326 out8(FPGA_SELECTION_3_REG, fpga_selection_3_reg);
1327
1328 break;
1329
1330 default:
1331 /* Unsupported UART configuration number */
1332 for (;;)
1333 ;
1334 break;
1335
1336 }
1337 }
1338
1339
1340 /*----------------------------------------------------------------------------+
1341 | init_default_gpio
1342 +----------------------------------------------------------------------------*/
1343 void init_default_gpio(gpio_param_s (*gpio_tab)[GPIO_MAX])
1344 {
1345 int i;
1346
1347 /* Init GPIO0 */
1348 for(i=0; i<GPIO_MAX; i++)
1349 {
1350 gpio_tab[GPIO0][i].add = GPIO0_BASE;
1351 gpio_tab[GPIO0][i].in_out = GPIO_DIS;
1352 gpio_tab[GPIO0][i].alt_nb = GPIO_SEL;
1353 }
1354
1355 /* Init GPIO1 */
1356 for(i=0; i<GPIO_MAX; i++)
1357 {
1358 gpio_tab[GPIO1][i].add = GPIO1_BASE;
1359 gpio_tab[GPIO1][i].in_out = GPIO_DIS;
1360 gpio_tab[GPIO1][i].alt_nb = GPIO_SEL;
1361 }
1362
1363 /* EBC_CS_N(5) - GPIO0_10 */
1364 gpio_tab[GPIO0][10].in_out = GPIO_OUT;
1365 gpio_tab[GPIO0][10].alt_nb = GPIO_ALT1;
1366
1367 /* EBC_CS_N(4) - GPIO0_9 */
1368 gpio_tab[GPIO0][9].in_out = GPIO_OUT;
1369 gpio_tab[GPIO0][9].alt_nb = GPIO_ALT1;
1370 }
1371
1372 /*----------------------------------------------------------------------------+
1373 | update_uart_ios
1374 +------------------------------------------------------------------------------
1375 |
1376 | Set UART Configuration in PowerPC440EP
1377 |
1378 | +---------------------------------------------------------------------+
1379 | | Configuartion | Connector | Nb of pins | Pins | Associated |
1380 | | Number | Port Name | available | naming | CORE |
1381 | +-----------------+---------------+------------+--------+-------------+
1382 | | L1 | Port_A | 8 | UART | UART core 0 |
1383 | +-----------------+---------------+------------+--------+-------------+
1384 | | L2 | Port_A | 4 | UART1 | UART core 0 |
1385 | | (L2D) | Port_B | 4 | UART2 | UART core 1 |
1386 | +-----------------+---------------+------------+--------+-------------+
1387 | | L3 | Port_A | 4 | UART1 | UART core 0 |
1388 | | (L3D) | Port_B | 2 | UART2 | UART core 1 |
1389 | | | Port_C | 2 | UART3 | UART core 2 |
1390 | +-----------------+---------------+------------+--------+-------------+
1391 | | | Port_A | 2 | UART1 | UART core 0 |
1392 | | L4 | Port_B | 2 | UART2 | UART core 1 |
1393 | | (L4D) | Port_C | 2 | UART3 | UART core 2 |
1394 | | | Port_D | 2 | UART4 | UART core 3 |
1395 | +-----------------+---------------+------------+--------+-------------+
1396 |
1397 | Involved GPIOs
1398 |
1399 | +------------------------------------------------------------------------------+
1400 | | GPIO | Aternate 1 | I/O | Alternate 2 | I/O | Alternate 3 | I/O |
1401 | +---------+------------------+-----+-----------------+-----+-------------+-----+
1402 | | GPIO1_2 | UART0_DCD_N | I | UART1_DSR_CTS_N | I | UART2_SOUT | O |
1403 | | GPIO1_3 | UART0_8PIN_DSR_N | I | UART1_RTS_DTR_N | O | UART2_SIN | I |
1404 | | GPIO1_4 | UART0_8PIN_CTS_N | I | NA | NA | UART3_SIN | I |
1405 | | GPIO1_5 | UART0_RTS_N | O | NA | NA | UART3_SOUT | O |
1406 | | GPIO1_6 | UART0_DTR_N | O | UART1_SOUT | O | NA | NA |
1407 | | GPIO1_7 | UART0_RI_N | I | UART1_SIN | I | NA | NA |
1408 | +------------------------------------------------------------------------------+
1409 |
1410 |
1411 +----------------------------------------------------------------------------*/
1412
1413 void update_uart_ios(uart_config_nb_t uart_config, gpio_param_s (*gpio_tab)[GPIO_MAX])
1414 {
1415 switch (uart_config)
1416 {
1417 case L1:
1418 /* ----------------------------------------------------------------------- */
1419 /* L1 configuration: UART0 = 8 pins */
1420 /* ----------------------------------------------------------------------- */
1421 /* Update GPIO Configuration Table */
1422 gpio_tab[GPIO1][2].in_out = GPIO_IN;
1423 gpio_tab[GPIO1][2].alt_nb = GPIO_ALT1;
1424
1425 gpio_tab[GPIO1][3].in_out = GPIO_IN;
1426 gpio_tab[GPIO1][3].alt_nb = GPIO_ALT1;
1427
1428 gpio_tab[GPIO1][4].in_out = GPIO_IN;
1429 gpio_tab[GPIO1][4].alt_nb = GPIO_ALT1;
1430
1431 gpio_tab[GPIO1][5].in_out = GPIO_OUT;
1432 gpio_tab[GPIO1][5].alt_nb = GPIO_ALT1;
1433
1434 gpio_tab[GPIO1][6].in_out = GPIO_OUT;
1435 gpio_tab[GPIO1][6].alt_nb = GPIO_ALT1;
1436
1437 gpio_tab[GPIO1][7].in_out = GPIO_IN;
1438 gpio_tab[GPIO1][7].alt_nb = GPIO_ALT1;
1439
1440 break;
1441
1442 case L2:
1443 /* ----------------------------------------------------------------------- */
1444 /* L2 configuration: UART0 = 4 pins */
1445 /* UART1 = 4 pins */
1446 /* ----------------------------------------------------------------------- */
1447 /* Update GPIO Configuration Table */
1448 gpio_tab[GPIO1][2].in_out = GPIO_IN;
1449 gpio_tab[GPIO1][2].alt_nb = GPIO_ALT2;
1450
1451 gpio_tab[GPIO1][3].in_out = GPIO_OUT;
1452 gpio_tab[GPIO1][3].alt_nb = GPIO_ALT2;
1453
1454 gpio_tab[GPIO1][4].in_out = GPIO_IN;
1455 gpio_tab[GPIO1][4].alt_nb = GPIO_ALT1;
1456
1457 gpio_tab[GPIO1][5].in_out = GPIO_OUT;
1458 gpio_tab[GPIO1][5].alt_nb = GPIO_ALT1;
1459
1460 gpio_tab[GPIO1][6].in_out = GPIO_OUT;
1461 gpio_tab[GPIO1][6].alt_nb = GPIO_ALT2;
1462
1463 gpio_tab[GPIO1][7].in_out = GPIO_IN;
1464 gpio_tab[GPIO1][7].alt_nb = GPIO_ALT2;
1465
1466 break;
1467
1468 case L3:
1469 /* ----------------------------------------------------------------------- */
1470 /* L3 configuration: UART0 = 4 pins */
1471 /* UART1 = 2 pins */
1472 /* UART2 = 2 pins */
1473 /* ----------------------------------------------------------------------- */
1474 /* Update GPIO Configuration Table */
1475 gpio_tab[GPIO1][2].in_out = GPIO_OUT;
1476 gpio_tab[GPIO1][2].alt_nb = GPIO_ALT3;
1477
1478 gpio_tab[GPIO1][3].in_out = GPIO_IN;
1479 gpio_tab[GPIO1][3].alt_nb = GPIO_ALT3;
1480
1481 gpio_tab[GPIO1][4].in_out = GPIO_IN;
1482 gpio_tab[GPIO1][4].alt_nb = GPIO_ALT1;
1483
1484 gpio_tab[GPIO1][5].in_out = GPIO_OUT;
1485 gpio_tab[GPIO1][5].alt_nb = GPIO_ALT1;
1486
1487 gpio_tab[GPIO1][6].in_out = GPIO_OUT;
1488 gpio_tab[GPIO1][6].alt_nb = GPIO_ALT2;
1489
1490 gpio_tab[GPIO1][7].in_out = GPIO_IN;
1491 gpio_tab[GPIO1][7].alt_nb = GPIO_ALT2;
1492
1493 break;
1494
1495 case L4:
1496 /* ----------------------------------------------------------------------- */
1497 /* L4 configuration: UART0 = 2 pins */
1498 /* UART1 = 2 pins */
1499 /* UART2 = 2 pins */
1500 /* UART3 = 2 pins */
1501 /* ----------------------------------------------------------------------- */
1502 /* Update GPIO Configuration Table */
1503 gpio_tab[GPIO1][2].in_out = GPIO_OUT;
1504 gpio_tab[GPIO1][2].alt_nb = GPIO_ALT3;
1505
1506 gpio_tab[GPIO1][3].in_out = GPIO_IN;
1507 gpio_tab[GPIO1][3].alt_nb = GPIO_ALT3;
1508
1509 gpio_tab[GPIO1][4].in_out = GPIO_IN;
1510 gpio_tab[GPIO1][4].alt_nb = GPIO_ALT3;
1511
1512 gpio_tab[GPIO1][5].in_out = GPIO_OUT;
1513 gpio_tab[GPIO1][5].alt_nb = GPIO_ALT3;
1514
1515 gpio_tab[GPIO1][6].in_out = GPIO_OUT;
1516 gpio_tab[GPIO1][6].alt_nb = GPIO_ALT2;
1517
1518 gpio_tab[GPIO1][7].in_out = GPIO_IN;
1519 gpio_tab[GPIO1][7].alt_nb = GPIO_ALT2;
1520
1521 break;
1522
1523 default:
1524 /* Unsupported UART configuration number */
1525 printf("ERROR - Unsupported UART configuration number.\n\n");
1526 for (;;)
1527 ;
1528 break;
1529
1530 }
1531
1532 /* Set input Selection Register on Alt_Receive for UART Input Core */
1533 out32(GPIO1_IS1L, (in32(GPIO1_IS1L) | 0x0FC30000));
1534 out32(GPIO1_IS2L, (in32(GPIO1_IS2L) | 0x0C030000));
1535 out32(GPIO1_IS3L, (in32(GPIO1_IS3L) | 0x03C00000));
1536 }
1537
1538 /*----------------------------------------------------------------------------+
1539 | update_ndfc_ios(void).
1540 +----------------------------------------------------------------------------*/
1541 void update_ndfc_ios(gpio_param_s (*gpio_tab)[GPIO_MAX])
1542 {
1543 /* Update GPIO Configuration Table */
1544 gpio_tab[GPIO0][6].in_out = GPIO_OUT; /* EBC_CS_N(1) */
1545 gpio_tab[GPIO0][6].alt_nb = GPIO_ALT1;
1546
1547 gpio_tab[GPIO0][7].in_out = GPIO_OUT; /* EBC_CS_N(2) */
1548 gpio_tab[GPIO0][7].alt_nb = GPIO_ALT1;
1549
1550 #if 0
1551 gpio_tab[GPIO0][7].in_out = GPIO_OUT; /* EBC_CS_N(3) */
1552 gpio_tab[GPIO0][7].alt_nb = GPIO_ALT1;
1553 #endif
1554 }
1555
1556 /*----------------------------------------------------------------------------+
1557 | update_zii_ios(void).
1558 +----------------------------------------------------------------------------*/
1559 void update_zii_ios(gpio_param_s (*gpio_tab)[GPIO_MAX])
1560 {
1561 /* Update GPIO Configuration Table */
1562 gpio_tab[GPIO0][12].in_out = GPIO_IN; /* ZII_p0Rxd(0) */
1563 gpio_tab[GPIO0][12].alt_nb = GPIO_ALT1;
1564
1565 gpio_tab[GPIO0][13].in_out = GPIO_IN; /* ZII_p0Rxd(1) */
1566 gpio_tab[GPIO0][13].alt_nb = GPIO_ALT1;
1567
1568 gpio_tab[GPIO0][14].in_out = GPIO_IN; /* ZII_p0Rxd(2) */
1569 gpio_tab[GPIO0][14].alt_nb = GPIO_ALT1;
1570
1571 gpio_tab[GPIO0][15].in_out = GPIO_IN; /* ZII_p0Rxd(3) */
1572 gpio_tab[GPIO0][15].alt_nb = GPIO_ALT1;
1573
1574 gpio_tab[GPIO0][16].in_out = GPIO_OUT; /* ZII_p0Txd(0) */
1575 gpio_tab[GPIO0][16].alt_nb = GPIO_ALT1;
1576
1577 gpio_tab[GPIO0][17].in_out = GPIO_OUT; /* ZII_p0Txd(1) */
1578 gpio_tab[GPIO0][17].alt_nb = GPIO_ALT1;
1579
1580 gpio_tab[GPIO0][18].in_out = GPIO_OUT; /* ZII_p0Txd(2) */
1581 gpio_tab[GPIO0][18].alt_nb = GPIO_ALT1;
1582
1583 gpio_tab[GPIO0][19].in_out = GPIO_OUT; /* ZII_p0Txd(3) */
1584 gpio_tab[GPIO0][19].alt_nb = GPIO_ALT1;
1585
1586 gpio_tab[GPIO0][20].in_out = GPIO_IN; /* ZII_p0Rx_er */
1587 gpio_tab[GPIO0][20].alt_nb = GPIO_ALT1;
1588
1589 gpio_tab[GPIO0][21].in_out = GPIO_IN; /* ZII_p0Rx_dv */
1590 gpio_tab[GPIO0][21].alt_nb = GPIO_ALT1;
1591
1592 gpio_tab[GPIO0][22].in_out = GPIO_IN; /* ZII_p0Crs */
1593 gpio_tab[GPIO0][22].alt_nb = GPIO_ALT1;
1594
1595 gpio_tab[GPIO0][23].in_out = GPIO_OUT; /* ZII_p0Tx_er */
1596 gpio_tab[GPIO0][23].alt_nb = GPIO_ALT1;
1597
1598 gpio_tab[GPIO0][24].in_out = GPIO_OUT; /* ZII_p0Tx_en */
1599 gpio_tab[GPIO0][24].alt_nb = GPIO_ALT1;
1600
1601 gpio_tab[GPIO0][25].in_out = GPIO_IN; /* ZII_p0Col */
1602 gpio_tab[GPIO0][25].alt_nb = GPIO_ALT1;
1603
1604 }
1605
1606 /*----------------------------------------------------------------------------+
1607 | update_uic_0_3_irq_ios().
1608 +----------------------------------------------------------------------------*/
1609 void update_uic_0_3_irq_ios(gpio_param_s (*gpio_tab)[GPIO_MAX])
1610 {
1611 gpio_tab[GPIO1][8].in_out = GPIO_IN; /* UIC_IRQ(0) */
1612 gpio_tab[GPIO1][8].alt_nb = GPIO_ALT1;
1613
1614 gpio_tab[GPIO1][9].in_out = GPIO_IN; /* UIC_IRQ(1) */
1615 gpio_tab[GPIO1][9].alt_nb = GPIO_ALT1;
1616
1617 gpio_tab[GPIO1][10].in_out = GPIO_IN; /* UIC_IRQ(2) */
1618 gpio_tab[GPIO1][10].alt_nb = GPIO_ALT1;
1619
1620 gpio_tab[GPIO1][11].in_out = GPIO_IN; /* UIC_IRQ(3) */
1621 gpio_tab[GPIO1][11].alt_nb = GPIO_ALT1;
1622 }
1623
1624 /*----------------------------------------------------------------------------+
1625 | update_uic_4_9_irq_ios().
1626 +----------------------------------------------------------------------------*/
1627 void update_uic_4_9_irq_ios(gpio_param_s (*gpio_tab)[GPIO_MAX])
1628 {
1629 gpio_tab[GPIO1][12].in_out = GPIO_IN; /* UIC_IRQ(4) */
1630 gpio_tab[GPIO1][12].alt_nb = GPIO_ALT1;
1631
1632 gpio_tab[GPIO1][13].in_out = GPIO_IN; /* UIC_IRQ(6) */
1633 gpio_tab[GPIO1][13].alt_nb = GPIO_ALT1;
1634
1635 gpio_tab[GPIO1][14].in_out = GPIO_IN; /* UIC_IRQ(7) */
1636 gpio_tab[GPIO1][14].alt_nb = GPIO_ALT1;
1637
1638 gpio_tab[GPIO1][15].in_out = GPIO_IN; /* UIC_IRQ(8) */
1639 gpio_tab[GPIO1][15].alt_nb = GPIO_ALT1;
1640
1641 gpio_tab[GPIO1][16].in_out = GPIO_IN; /* UIC_IRQ(9) */
1642 gpio_tab[GPIO1][16].alt_nb = GPIO_ALT1;
1643 }
1644
1645 /*----------------------------------------------------------------------------+
1646 | update_dma_a_b_ios().
1647 +----------------------------------------------------------------------------*/
1648 void update_dma_a_b_ios(gpio_param_s (*gpio_tab)[GPIO_MAX])
1649 {
1650 gpio_tab[GPIO1][12].in_out = GPIO_OUT; /* DMA_ACK(1) */
1651 gpio_tab[GPIO1][12].alt_nb = GPIO_ALT2;
1652
1653 gpio_tab[GPIO1][13].in_out = GPIO_BI; /* DMA_EOT/TC(1) */
1654 gpio_tab[GPIO1][13].alt_nb = GPIO_ALT2;
1655
1656 gpio_tab[GPIO1][14].in_out = GPIO_IN; /* DMA_REQ(0) */
1657 gpio_tab[GPIO1][14].alt_nb = GPIO_ALT2;
1658
1659 gpio_tab[GPIO1][15].in_out = GPIO_OUT; /* DMA_ACK(0) */
1660 gpio_tab[GPIO1][15].alt_nb = GPIO_ALT2;
1661
1662 gpio_tab[GPIO1][16].in_out = GPIO_BI; /* DMA_EOT/TC(0) */
1663 gpio_tab[GPIO1][16].alt_nb = GPIO_ALT2;
1664 }
1665
1666 /*----------------------------------------------------------------------------+
1667 | update_dma_c_d_ios().
1668 +----------------------------------------------------------------------------*/
1669 void update_dma_c_d_ios(gpio_param_s (*gpio_tab)[GPIO_MAX])
1670 {
1671 gpio_tab[GPIO0][0].in_out = GPIO_IN; /* DMA_REQ(2) */
1672 gpio_tab[GPIO0][0].alt_nb = GPIO_ALT2;
1673
1674 gpio_tab[GPIO0][1].in_out = GPIO_OUT; /* DMA_ACK(2) */
1675 gpio_tab[GPIO0][1].alt_nb = GPIO_ALT2;
1676
1677 gpio_tab[GPIO0][2].in_out = GPIO_BI; /* DMA_EOT/TC(2) */
1678 gpio_tab[GPIO0][2].alt_nb = GPIO_ALT2;
1679
1680 gpio_tab[GPIO0][3].in_out = GPIO_IN; /* DMA_REQ(3) */
1681 gpio_tab[GPIO0][3].alt_nb = GPIO_ALT2;
1682
1683 gpio_tab[GPIO0][4].in_out = GPIO_OUT; /* DMA_ACK(3) */
1684 gpio_tab[GPIO0][4].alt_nb = GPIO_ALT2;
1685
1686 gpio_tab[GPIO0][5].in_out = GPIO_BI; /* DMA_EOT/TC(3) */
1687 gpio_tab[GPIO0][5].alt_nb = GPIO_ALT2;
1688
1689 }
1690
1691 /*----------------------------------------------------------------------------+
1692 | update_ebc_master_ios().
1693 +----------------------------------------------------------------------------*/
1694 void update_ebc_master_ios(gpio_param_s (*gpio_tab)[GPIO_MAX])
1695 {
1696 gpio_tab[GPIO0][27].in_out = GPIO_IN; /* EXT_EBC_REQ */
1697 gpio_tab[GPIO0][27].alt_nb = GPIO_ALT1;
1698
1699 gpio_tab[GPIO0][29].in_out = GPIO_OUT; /* EBC_EXT_HDLA */
1700 gpio_tab[GPIO0][29].alt_nb = GPIO_ALT1;
1701
1702 gpio_tab[GPIO0][30].in_out = GPIO_OUT; /* EBC_EXT_ACK */
1703 gpio_tab[GPIO0][30].alt_nb = GPIO_ALT1;
1704
1705 gpio_tab[GPIO0][31].in_out = GPIO_OUT; /* EBC_EXR_BUSREQ */
1706 gpio_tab[GPIO0][31].alt_nb = GPIO_ALT1;
1707 }
1708
1709 /*----------------------------------------------------------------------------+
1710 | update_usb2_device_ios().
1711 +----------------------------------------------------------------------------*/
1712 void update_usb2_device_ios(gpio_param_s (*gpio_tab)[GPIO_MAX])
1713 {
1714 gpio_tab[GPIO0][26].in_out = GPIO_IN; /* USB2D_RXVALID */
1715 gpio_tab[GPIO0][26].alt_nb = GPIO_ALT2;
1716
1717 gpio_tab[GPIO0][27].in_out = GPIO_IN; /* USB2D_RXERROR */
1718 gpio_tab[GPIO0][27].alt_nb = GPIO_ALT2;
1719
1720 gpio_tab[GPIO0][28].in_out = GPIO_OUT; /* USB2D_TXVALID */
1721 gpio_tab[GPIO0][28].alt_nb = GPIO_ALT2;
1722
1723 gpio_tab[GPIO0][29].in_out = GPIO_OUT; /* USB2D_PAD_SUSPNDM */
1724 gpio_tab[GPIO0][29].alt_nb = GPIO_ALT2;
1725
1726 gpio_tab[GPIO0][30].in_out = GPIO_OUT; /* USB2D_XCVRSELECT */
1727 gpio_tab[GPIO0][30].alt_nb = GPIO_ALT2;
1728
1729 gpio_tab[GPIO0][31].in_out = GPIO_OUT; /* USB2D_TERMSELECT */
1730 gpio_tab[GPIO0][31].alt_nb = GPIO_ALT2;
1731
1732 gpio_tab[GPIO1][0].in_out = GPIO_OUT; /* USB2D_OPMODE0 */
1733 gpio_tab[GPIO1][0].alt_nb = GPIO_ALT1;
1734
1735 gpio_tab[GPIO1][1].in_out = GPIO_OUT; /* USB2D_OPMODE1 */
1736 gpio_tab[GPIO1][1].alt_nb = GPIO_ALT1;
1737
1738 }
1739
1740 /*----------------------------------------------------------------------------+
1741 | update_pci_patch_ios().
1742 +----------------------------------------------------------------------------*/
1743 void update_pci_patch_ios(gpio_param_s (*gpio_tab)[GPIO_MAX])
1744 {
1745 gpio_tab[GPIO0][29].in_out = GPIO_OUT; /* EBC_EXT_HDLA */
1746 gpio_tab[GPIO0][29].alt_nb = GPIO_ALT1;
1747 }
1748
1749 /*----------------------------------------------------------------------------+
1750 | set_chip_gpio_configuration(unsigned char gpio_core,
1751 | gpio_param_s (*gpio_tab)[GPIO_MAX])
1752 | Put the core impacted by clock modification and sharing in reset.
1753 | Config the select registers to resolve the sharing depending of the config.
1754 | Configure the GPIO registers.
1755 |
1756 +----------------------------------------------------------------------------*/
1757 void set_chip_gpio_configuration(unsigned char gpio_core, gpio_param_s (*gpio_tab)[GPIO_MAX])
1758 {
1759 unsigned char i=0, j=0, reg_offset = 0;
1760 unsigned long gpio_reg, gpio_core_add;
1761
1762 /* GPIO config of the GPIOs 0 to 31 */
1763 for (i=0; i<GPIO_MAX; i++, j++)
1764 {
1765 if (i == GPIO_MAX/2)
1766 {
1767 reg_offset = 4;
1768 j = i-16;
1769 }
1770
1771 gpio_core_add = gpio_tab[gpio_core][i].add;
1772
1773 if ( (gpio_tab[gpio_core][i].in_out == GPIO_IN) ||
1774 (gpio_tab[gpio_core][i].in_out == GPIO_BI ))
1775 {
1776 switch (gpio_tab[gpio_core][i].alt_nb)
1777 {
1778 case GPIO_SEL:
1779 break;
1780
1781 case GPIO_ALT1:
1782 gpio_reg = in32(GPIO_IS1(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2));
1783 gpio_reg = gpio_reg | (GPIO_IN_SEL >> (j*2));
1784 out32(GPIO_IS1(gpio_core_add+reg_offset), gpio_reg);
1785 break;
1786
1787 case GPIO_ALT2:
1788 gpio_reg = in32(GPIO_IS2(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2));
1789 gpio_reg = gpio_reg | (GPIO_IN_SEL >> (j*2));
1790 out32(GPIO_IS2(gpio_core_add+reg_offset), gpio_reg);
1791 break;
1792
1793 case GPIO_ALT3:
1794 gpio_reg = in32(GPIO_IS3(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2));
1795 gpio_reg = gpio_reg | (GPIO_IN_SEL >> (j*2));
1796 out32(GPIO_IS3(gpio_core_add+reg_offset), gpio_reg);
1797 break;
1798 }
1799 }
1800 if ( (gpio_tab[gpio_core][i].in_out == GPIO_OUT) ||
1801 (gpio_tab[gpio_core][i].in_out == GPIO_BI ))
1802 {
1803
1804 switch (gpio_tab[gpio_core][i].alt_nb)
1805 {
1806 case GPIO_SEL:
1807 break;
1808 case GPIO_ALT1:
1809 gpio_reg = in32(GPIO_OS(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2));
1810 gpio_reg = gpio_reg | (GPIO_ALT1_SEL >> (j*2));
1811 out32(GPIO_OS(gpio_core_add+reg_offset), gpio_reg);
1812 gpio_reg = in32(GPIO_TS(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2));
1813 gpio_reg = gpio_reg | (GPIO_ALT1_SEL >> (j*2));
1814 out32(GPIO_TS(gpio_core_add+reg_offset), gpio_reg);
1815 break;
1816 case GPIO_ALT2:
1817 gpio_reg = in32(GPIO_OS(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2));
1818 gpio_reg = gpio_reg | (GPIO_ALT2_SEL >> (j*2));
1819 out32(GPIO_OS(gpio_core_add+reg_offset), gpio_reg);
1820 gpio_reg = in32(GPIO_TS(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2));
1821 gpio_reg = gpio_reg | (GPIO_ALT2_SEL >> (j*2));
1822 out32(GPIO_TS(gpio_core_add+reg_offset), gpio_reg);
1823 break;
1824 case GPIO_ALT3:
1825 gpio_reg = in32(GPIO_OS(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2));
1826 gpio_reg = gpio_reg | (GPIO_ALT3_SEL >> (j*2));
1827 out32(GPIO_OS(gpio_core_add+reg_offset), gpio_reg);
1828 gpio_reg = in32(GPIO_TS(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2));
1829 gpio_reg = gpio_reg | (GPIO_ALT3_SEL >> (j*2));
1830 out32(GPIO_TS(gpio_core_add+reg_offset), gpio_reg);
1831 break;
1832 }
1833 }
1834 }
1835 }
1836
1837 /*----------------------------------------------------------------------------+
1838 | force_bup_core_selection.
1839 +----------------------------------------------------------------------------*/
1840 void force_bup_core_selection(core_selection_t *core_select_P, config_validity_t *config_val_P)
1841 {
1842 /* Pointer invalid */
1843 if (core_select_P == NULL)
1844 {
1845 printf("Configuration invalid pointer 1\n");
1846 for (;;)
1847 ;
1848 }
1849
1850 /* L4 Selection */
1851 *(core_select_P+UART_CORE0) = CORE_SELECTED;
1852 *(core_select_P+UART_CORE1) = CORE_SELECTED;
1853 *(core_select_P+UART_CORE2) = CORE_SELECTED;
1854 *(core_select_P+UART_CORE3) = CORE_SELECTED;
1855
1856 /* RMII Selection */
1857 *(core_select_P+RMII_SEL) = CORE_SELECTED;
1858
1859 /* External Interrupt 0-9 selection */
1860 *(core_select_P+UIC_0_3) = CORE_SELECTED;
1861 *(core_select_P+UIC_4_9) = CORE_SELECTED;
1862
1863 *(core_select_P+SCP_CORE) = CORE_SELECTED;
1864 *(core_select_P+DMA_CHANNEL_CD) = CORE_SELECTED;
1865 *(core_select_P+PACKET_REJ_FUNC_AVAIL) = CORE_SELECTED;
1866 *(core_select_P+USB1_DEVICE) = CORE_SELECTED;
1867
1868 if (is_nand_selected()) {
1869 *(core_select_P+NAND_FLASH) = CORE_SELECTED;
1870 }
1871
1872 *config_val_P = CONFIG_IS_VALID;
1873
1874 }
1875
1876 /*----------------------------------------------------------------------------+
1877 | configure_ppc440ep_pins.
1878 +----------------------------------------------------------------------------*/
1879 void configure_ppc440ep_pins(void)
1880 {
1881 uart_config_nb_t uart_configuration;
1882 config_validity_t config_val = CONFIG_IS_INVALID;
1883
1884 /* Create Core Selection Table */
1885 core_selection_t ppc440ep_core_selection[MAX_CORE_SELECT_NB] =
1886 {
1887 CORE_NOT_SELECTED, /* IIC_CORE, */
1888 CORE_NOT_SELECTED, /* SPC_CORE, */
1889 CORE_NOT_SELECTED, /* DMA_CHANNEL_AB, */
1890 CORE_NOT_SELECTED, /* UIC_4_9, */
1891 CORE_NOT_SELECTED, /* USB2_HOST, */
1892 CORE_NOT_SELECTED, /* DMA_CHANNEL_CD, */
1893 CORE_NOT_SELECTED, /* USB2_DEVICE, */
1894 CORE_NOT_SELECTED, /* PACKET_REJ_FUNC_AVAIL, */
1895 CORE_NOT_SELECTED, /* USB1_DEVICE, */
1896 CORE_NOT_SELECTED, /* EBC_MASTER, */
1897 CORE_NOT_SELECTED, /* NAND_FLASH, */
1898 CORE_NOT_SELECTED, /* UART_CORE0, */
1899 CORE_NOT_SELECTED, /* UART_CORE1, */
1900 CORE_NOT_SELECTED, /* UART_CORE2, */
1901 CORE_NOT_SELECTED, /* UART_CORE3, */
1902 CORE_NOT_SELECTED, /* MII_SEL, */
1903 CORE_NOT_SELECTED, /* RMII_SEL, */
1904 CORE_NOT_SELECTED, /* SMII_SEL, */
1905 CORE_NOT_SELECTED, /* PACKET_REJ_FUNC_EN */
1906 CORE_NOT_SELECTED, /* UIC_0_3 */
1907 CORE_NOT_SELECTED, /* USB1_HOST */
1908 CORE_NOT_SELECTED /* PCI_PATCH */
1909 };
1910
1911 gpio_param_s gpio_tab[GPIO_GROUP_MAX][GPIO_MAX];
1912
1913 /* Table Default Initialisation + FPGA Access */
1914 init_default_gpio(gpio_tab);
1915 set_chip_gpio_configuration(GPIO0, gpio_tab);
1916 set_chip_gpio_configuration(GPIO1, gpio_tab);
1917
1918 /* Update Table */
1919 force_bup_core_selection(ppc440ep_core_selection, &config_val);
1920 #if 0 /* test-only */
1921 /* If we are running PIBS 1, force known configuration */
1922 update_core_selection_table(ppc440ep_core_selection, &config_val);
1923 #endif
1924
1925 /*----------------------------------------------------------------------------+
1926 | SDR + ios table update + fpga initialization
1927 +----------------------------------------------------------------------------*/
1928 unsigned long sdr0_pfc1 = 0;
1929 unsigned long sdr0_usb0 = 0;
1930 unsigned long sdr0_mfr = 0;
1931
1932 /* PCI Always selected */
1933
1934 /* I2C Selection */
1935 if (ppc440ep_core_selection[IIC_CORE] == CORE_SELECTED)
1936 {
1937 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_SIS_MASK) | SDR0_PFC1_SIS_IIC1_SEL;
1938 iic1_selection_in_fpga();
1939 }
1940
1941 /* SCP Selection */
1942 if (ppc440ep_core_selection[SCP_CORE] == CORE_SELECTED)
1943 {
1944 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_SIS_MASK) | SDR0_PFC1_SIS_SCP_SEL;
1945 scp_selection_in_fpga();
1946 }
1947
1948 /* UIC 0:3 Selection */
1949 if (ppc440ep_core_selection[UIC_0_3] == CORE_SELECTED)
1950 {
1951 update_uic_0_3_irq_ios(gpio_tab);
1952 dma_a_b_unselect_in_fpga();
1953 }
1954
1955 /* UIC 4:9 Selection */
1956 if (ppc440ep_core_selection[UIC_4_9] == CORE_SELECTED)
1957 {
1958 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_DIS_MASK) | SDR0_PFC1_DIS_UICIRQ5_SEL;
1959 update_uic_4_9_irq_ios(gpio_tab);
1960 }
1961
1962 /* DMA AB Selection */
1963 if (ppc440ep_core_selection[DMA_CHANNEL_AB] == CORE_SELECTED)
1964 {
1965 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_DIS_MASK) | SDR0_PFC1_DIS_DMAR_SEL;
1966 update_dma_a_b_ios(gpio_tab);
1967 dma_a_b_selection_in_fpga();
1968 }
1969
1970 /* DMA CD Selection */
1971 if (ppc440ep_core_selection[DMA_CHANNEL_CD] == CORE_SELECTED)
1972 {
1973 update_dma_c_d_ios(gpio_tab);
1974 dma_c_d_selection_in_fpga();
1975 }
1976
1977 /* EBC Master Selection */
1978 if (ppc440ep_core_selection[EBC_MASTER] == CORE_SELECTED)
1979 {
1980 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_ERE_MASK) | SDR0_PFC1_ERE_EXTR_SEL;
1981 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_UES_MASK) | SDR0_PFC1_UES_EBCHR_SEL;
1982 update_ebc_master_ios(gpio_tab);
1983 }
1984
1985 /* PCI Patch Enable */
1986 if (ppc440ep_core_selection[PCI_PATCH] == CORE_SELECTED)
1987 {
1988 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_UES_MASK) | SDR0_PFC1_UES_EBCHR_SEL;
1989 update_pci_patch_ios(gpio_tab);
1990 }
1991
1992 /* USB2 Host Selection - Not Implemented in PowerPC 440EP Pass1 */
1993 if (ppc440ep_core_selection[USB2_HOST] == CORE_SELECTED)
1994 {
1995 /* Not Implemented in PowerPC 440EP Pass1-Pass2 */
1996 printf("Invalid configuration => USB2 Host selected\n");
1997 for (;;)
1998 ;
1999 /*usb2_host_selection_in_fpga(); */
2000 }
2001
2002 /* USB2.0 Device Selection */
2003 if (ppc440ep_core_selection[USB2_DEVICE] == CORE_SELECTED)
2004 {
2005 update_usb2_device_ios(gpio_tab);
2006 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_UES_MASK) | SDR0_PFC1_UES_USB2D_SEL;
2007 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_UPR_MASK) | SDR0_PFC1_UPR_DISABLE;
2008
2009 mfsdr(sdr_usb0, sdr0_usb0);
2010 sdr0_usb0 = sdr0_usb0 &~SDR0_USB0_USB_DEVSEL_MASK;
2011 sdr0_usb0 = sdr0_usb0 | SDR0_USB0_USB20D_DEVSEL;
2012 mtsdr(sdr_usb0, sdr0_usb0);
2013
2014 usb2_device_selection_in_fpga();
2015 }
2016
2017 /* USB1.1 Device Selection */
2018 if (ppc440ep_core_selection[USB1_DEVICE] == CORE_SELECTED)
2019 {
2020 mfsdr(sdr_usb0, sdr0_usb0);
2021 sdr0_usb0 = sdr0_usb0 &~SDR0_USB0_USB_DEVSEL_MASK;
2022 sdr0_usb0 = sdr0_usb0 | SDR0_USB0_USB11D_DEVSEL;
2023 mtsdr(sdr_usb0, sdr0_usb0);
2024 }
2025
2026 /* USB1.1 Host Selection */
2027 if (ppc440ep_core_selection[USB1_HOST] == CORE_SELECTED)
2028 {
2029 mfsdr(sdr_usb0, sdr0_usb0);
2030 sdr0_usb0 = sdr0_usb0 &~SDR0_USB0_LEEN_MASK;
2031 sdr0_usb0 = sdr0_usb0 | SDR0_USB0_LEEN_ENABLE;
2032 mtsdr(sdr_usb0, sdr0_usb0);
2033 }
2034
2035 /* NAND Flash Selection */
2036 if (ppc440ep_core_selection[NAND_FLASH] == CORE_SELECTED)
2037 {
2038 update_ndfc_ios(gpio_tab);
2039
2040 #if !(defined(CONFIG_NAND_U_BOOT) || defined(CONFIG_NAND_SPL))
2041 mtsdr(sdr_cust0, SDR0_CUST0_MUX_NDFC_SEL |
2042 SDR0_CUST0_NDFC_ENABLE |
2043 SDR0_CUST0_NDFC_BW_8_BIT |
2044 SDR0_CUST0_NDFC_ARE_MASK |
2045 SDR0_CUST0_CHIPSELGAT_EN1 |
2046 SDR0_CUST0_CHIPSELGAT_EN2);
2047 #else
2048 mtsdr(sdr_cust0, SDR0_CUST0_MUX_NDFC_SEL |
2049 SDR0_CUST0_NDFC_ENABLE |
2050 SDR0_CUST0_NDFC_BW_8_BIT |
2051 SDR0_CUST0_NDFC_ARE_MASK |
2052 SDR0_CUST0_CHIPSELGAT_EN0 |
2053 SDR0_CUST0_CHIPSELGAT_EN2);
2054 #endif
2055
2056 ndfc_selection_in_fpga();
2057 }
2058 else
2059 {
2060 /* Set Mux on EMAC */
2061 mtsdr(sdr_cust0, SDR0_CUST0_MUX_EMAC_SEL);
2062 }
2063
2064 /* MII Selection */
2065 if (ppc440ep_core_selection[MII_SEL] == CORE_SELECTED)
2066 {
2067 update_zii_ios(gpio_tab);
2068 mfsdr(sdr_mfr, sdr0_mfr);
2069 sdr0_mfr = (sdr0_mfr & ~SDR0_MFR_ZMII_MODE_MASK) | SDR0_MFR_ZMII_MODE_MII;
2070 mtsdr(sdr_mfr, sdr0_mfr);
2071
2072 set_phy_configuration_through_fpga(ZMII_CONFIGURATION_IS_MII);
2073 }
2074
2075 /* RMII Selection */
2076 if (ppc440ep_core_selection[RMII_SEL] == CORE_SELECTED)
2077 {
2078 update_zii_ios(gpio_tab);
2079 mfsdr(sdr_mfr, sdr0_mfr);
2080 sdr0_mfr = (sdr0_mfr & ~SDR0_MFR_ZMII_MODE_MASK) | SDR0_MFR_ZMII_MODE_RMII_10M;
2081 mtsdr(sdr_mfr, sdr0_mfr);
2082
2083 set_phy_configuration_through_fpga(ZMII_CONFIGURATION_IS_RMII);
2084 }
2085
2086 /* SMII Selection */
2087 if (ppc440ep_core_selection[SMII_SEL] == CORE_SELECTED)
2088 {
2089 update_zii_ios(gpio_tab);
2090 mfsdr(sdr_mfr, sdr0_mfr);
2091 sdr0_mfr = (sdr0_mfr & ~SDR0_MFR_ZMII_MODE_MASK) | SDR0_MFR_ZMII_MODE_SMII;
2092 mtsdr(sdr_mfr, sdr0_mfr);
2093
2094 set_phy_configuration_through_fpga(ZMII_CONFIGURATION_IS_SMII);
2095 }
2096
2097 /* UART Selection */
2098 uart_configuration = get_uart_configuration();
2099 switch (uart_configuration)
2100 {
2101 case L1: /* L1 Selection */
2102 /* UART0 8 pins Only */
2103 /*sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U0ME_MASK) | SDR0_PFC1_U0ME_DSR_DTR; */
2104 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U0ME_MASK) |SDR0_PFC1_U0ME_CTS_RTS; /* Chip Pb */
2105 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U0IM_MASK) | SDR0_PFC1_U0IM_8PINS;
2106 break;
2107 case L2: /* L2 Selection */
2108 /* UART0 and UART1 4 pins */
2109 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U0ME_MASK) | SDR0_PFC1_U1ME_DSR_DTR;
2110 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U0IM_MASK) | SDR0_PFC1_U0IM_4PINS;
2111 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U1ME_MASK) | SDR0_PFC1_U1ME_DSR_DTR;
2112 break;
2113 case L3: /* L3 Selection */
2114 /* UART0 4 pins, UART1 and UART2 2 pins */
2115 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U0ME_MASK) | SDR0_PFC1_U1ME_DSR_DTR;
2116 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U0IM_MASK) | SDR0_PFC1_U0IM_4PINS;
2117 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U1ME_MASK) | SDR0_PFC1_U1ME_DSR_DTR;
2118 break;
2119 case L4: /* L4 Selection */
2120 /* UART0, UART1, UART2 and UART3 2 pins */
2121 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U0ME_MASK) | SDR0_PFC1_U0ME_DSR_DTR;
2122 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U0IM_MASK) | SDR0_PFC1_U0IM_4PINS;
2123 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U1ME_MASK) | SDR0_PFC1_U1ME_DSR_DTR;
2124 break;
2125 }
2126 update_uart_ios(uart_configuration, gpio_tab);
2127
2128 /* UART Selection in all cases */
2129 uart_selection_in_fpga(uart_configuration);
2130
2131 /* Packet Reject Function Available */
2132 if (ppc440ep_core_selection[PACKET_REJ_FUNC_AVAIL] == CORE_SELECTED)
2133 {
2134 /* Set UPR Bit in SDR0_PFC1 Register */
2135 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_UPR_MASK) | SDR0_PFC1_UPR_ENABLE;
2136 }
2137
2138 /* Packet Reject Function Enable */
2139 if (ppc440ep_core_selection[PACKET_REJ_FUNC_EN] == CORE_SELECTED)
2140 {
2141 mfsdr(sdr_mfr, sdr0_mfr);
2142 sdr0_mfr = (sdr0_mfr & ~SDR0_MFR_PKT_REJ_MASK) | SDR0_MFR_PKT_REJ_EN;;
2143 mtsdr(sdr_mfr, sdr0_mfr);
2144 }
2145
2146 /* Perform effective access to hardware */
2147 mtsdr(sdr_pfc1, sdr0_pfc1);
2148 set_chip_gpio_configuration(GPIO0, gpio_tab);
2149 set_chip_gpio_configuration(GPIO1, gpio_tab);
2150
2151 /* USB2.0 Device Reset must be done after GPIO setting */
2152 if (ppc440ep_core_selection[USB2_DEVICE] == CORE_SELECTED)
2153 usb2_device_reset_through_fpga();
2154
2155 }