]> git.ipfire.org Git - people/ms/u-boot.git/blob - board/amcc/bamboo/bamboo.c
Change initdram() return type to phys_size_t
[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 phys_size_t 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 /*************************************************************************
470 * pci_pre_init
471 *
472 * This routine is called just prior to registering the hose and gives
473 * the board the opportunity to check things. Returning a value of zero
474 * indicates that things are bad & PCI initialization should be aborted.
475 *
476 * Different boards may wish to customize the pci controller structure
477 * (add regions, override default access routines, etc) or perform
478 * certain pre-initialization actions.
479 *
480 ************************************************************************/
481 #if defined(CONFIG_PCI)
482 int pci_pre_init(struct pci_controller *hose)
483 {
484 unsigned long addr;
485
486 /*-------------------------------------------------------------------------+
487 | Set priority for all PLB3 devices to 0.
488 | Set PLB3 arbiter to fair mode.
489 +-------------------------------------------------------------------------*/
490 mfsdr(sdr_amp1, addr);
491 mtsdr(sdr_amp1, (addr & 0x000000FF) | 0x0000FF00);
492 addr = mfdcr(plb3_acr);
493 mtdcr(plb3_acr, addr | 0x80000000);
494
495 /*-------------------------------------------------------------------------+
496 | Set priority for all PLB4 devices to 0.
497 +-------------------------------------------------------------------------*/
498 mfsdr(sdr_amp0, addr);
499 mtsdr(sdr_amp0, (addr & 0x000000FF) | 0x0000FF00);
500 addr = mfdcr(plb4_acr) | 0xa0000000; /* Was 0x8---- */
501 mtdcr(plb4_acr, addr);
502
503 /*-------------------------------------------------------------------------+
504 | Set Nebula PLB4 arbiter to fair mode.
505 +-------------------------------------------------------------------------*/
506 /* Segment0 */
507 addr = (mfdcr(plb0_acr) & ~plb0_acr_ppm_mask) | plb0_acr_ppm_fair;
508 addr = (addr & ~plb0_acr_hbu_mask) | plb0_acr_hbu_enabled;
509 addr = (addr & ~plb0_acr_rdp_mask) | plb0_acr_rdp_4deep;
510 addr = (addr & ~plb0_acr_wrp_mask) | plb0_acr_wrp_2deep;
511 mtdcr(plb0_acr, addr);
512
513 /* Segment1 */
514 addr = (mfdcr(plb1_acr) & ~plb1_acr_ppm_mask) | plb1_acr_ppm_fair;
515 addr = (addr & ~plb1_acr_hbu_mask) | plb1_acr_hbu_enabled;
516 addr = (addr & ~plb1_acr_rdp_mask) | plb1_acr_rdp_4deep;
517 addr = (addr & ~plb1_acr_wrp_mask) | plb1_acr_wrp_2deep;
518 mtdcr(plb1_acr, addr);
519
520 return 1;
521 }
522 #endif /* defined(CONFIG_PCI) */
523
524 /*************************************************************************
525 * pci_target_init
526 *
527 * The bootstrap configuration provides default settings for the pci
528 * inbound map (PIM). But the bootstrap config choices are limited and
529 * may not be sufficient for a given board.
530 *
531 ************************************************************************/
532 #if defined(CONFIG_PCI) && defined(CFG_PCI_TARGET_INIT)
533 void pci_target_init(struct pci_controller *hose)
534 {
535 /*--------------------------------------------------------------------------+
536 * Set up Direct MMIO registers
537 *--------------------------------------------------------------------------*/
538 /*--------------------------------------------------------------------------+
539 | PowerPC440 EP PCI Master configuration.
540 | Map one 1Gig range of PLB/processor addresses to PCI memory space.
541 | PLB address 0xA0000000-0xDFFFFFFF ==> PCI address 0xA0000000-0xDFFFFFFF
542 | Use byte reversed out routines to handle endianess.
543 | Make this region non-prefetchable.
544 +--------------------------------------------------------------------------*/
545 out32r(PCIX0_PMM0MA, 0x00000000); /* PMM0 Mask/Attribute - disabled b4 setting */
546 out32r(PCIX0_PMM0LA, CFG_PCI_MEMBASE); /* PMM0 Local Address */
547 out32r(PCIX0_PMM0PCILA, CFG_PCI_MEMBASE); /* PMM0 PCI Low Address */
548 out32r(PCIX0_PMM0PCIHA, 0x00000000); /* PMM0 PCI High Address */
549 out32r(PCIX0_PMM0MA, 0xE0000001); /* 512M + No prefetching, and enable region */
550
551 out32r(PCIX0_PMM1MA, 0x00000000); /* PMM0 Mask/Attribute - disabled b4 setting */
552 out32r(PCIX0_PMM1LA, CFG_PCI_MEMBASE2); /* PMM0 Local Address */
553 out32r(PCIX0_PMM1PCILA, CFG_PCI_MEMBASE2); /* PMM0 PCI Low Address */
554 out32r(PCIX0_PMM1PCIHA, 0x00000000); /* PMM0 PCI High Address */
555 out32r(PCIX0_PMM1MA, 0xE0000001); /* 512M + No prefetching, and enable region */
556
557 out32r(PCIX0_PTM1MS, 0x00000001); /* Memory Size/Attribute */
558 out32r(PCIX0_PTM1LA, 0); /* Local Addr. Reg */
559 out32r(PCIX0_PTM2MS, 0); /* Memory Size/Attribute */
560 out32r(PCIX0_PTM2LA, 0); /* Local Addr. Reg */
561
562 /*--------------------------------------------------------------------------+
563 * Set up Configuration registers
564 *--------------------------------------------------------------------------*/
565
566 /* Program the board's subsystem id/vendor id */
567 pci_write_config_word(0, PCI_SUBSYSTEM_VENDOR_ID,
568 CFG_PCI_SUBSYS_VENDORID);
569 pci_write_config_word(0, PCI_SUBSYSTEM_ID, CFG_PCI_SUBSYS_ID);
570
571 /* Configure command register as bus master */
572 pci_write_config_word(0, PCI_COMMAND, PCI_COMMAND_MASTER);
573
574 /* 240nS PCI clock */
575 pci_write_config_word(0, PCI_LATENCY_TIMER, 1);
576
577 /* No error reporting */
578 pci_write_config_word(0, PCI_ERREN, 0);
579
580 pci_write_config_dword(0, PCI_BRDGOPT2, 0x00000101);
581
582 }
583 #endif /* defined(CONFIG_PCI) && defined(CFG_PCI_TARGET_INIT) */
584
585 /*************************************************************************
586 * pci_master_init
587 *
588 ************************************************************************/
589 #if defined(CONFIG_PCI) && defined(CFG_PCI_MASTER_INIT)
590 void pci_master_init(struct pci_controller *hose)
591 {
592 unsigned short temp_short;
593
594 /*--------------------------------------------------------------------------+
595 | Write the PowerPC440 EP PCI Configuration regs.
596 | Enable PowerPC440 EP to be a master on the PCI bus (PMM).
597 | Enable PowerPC440 EP to act as a PCI memory target (PTM).
598 +--------------------------------------------------------------------------*/
599 pci_read_config_word(0, PCI_COMMAND, &temp_short);
600 pci_write_config_word(0, PCI_COMMAND,
601 temp_short | PCI_COMMAND_MASTER |
602 PCI_COMMAND_MEMORY);
603 }
604 #endif /* defined(CONFIG_PCI) && defined(CFG_PCI_MASTER_INIT) */
605
606 /*************************************************************************
607 * is_pci_host
608 *
609 * This routine is called to determine if a pci scan should be
610 * performed. With various hardware environments (especially cPCI and
611 * PPMC) it's insufficient to depend on the state of the arbiter enable
612 * bit in the strap register, or generic host/adapter assumptions.
613 *
614 * Rather than hard-code a bad assumption in the general 440 code, the
615 * 440 pci code requires the board to decide at runtime.
616 *
617 * Return 0 for adapter mode, non-zero for host (monarch) mode.
618 *
619 *
620 ************************************************************************/
621 #if defined(CONFIG_PCI)
622 int is_pci_host(struct pci_controller *hose)
623 {
624 /* Bamboo is always configured as host. */
625 return (1);
626 }
627 #endif /* defined(CONFIG_PCI) */
628
629 /*----------------------------------------------------------------------------+
630 | is_powerpc440ep_pass1.
631 +----------------------------------------------------------------------------*/
632 int is_powerpc440ep_pass1(void)
633 {
634 unsigned long pvr;
635
636 pvr = get_pvr();
637
638 if (pvr == PVR_POWERPC_440EP_PASS1)
639 return TRUE;
640 else if (pvr == PVR_POWERPC_440EP_PASS2)
641 return FALSE;
642 else {
643 printf("brdutil error 3\n");
644 for (;;)
645 ;
646 }
647
648 return(FALSE);
649 }
650
651 /*----------------------------------------------------------------------------+
652 | is_nand_selected.
653 +----------------------------------------------------------------------------*/
654 int is_nand_selected(void)
655 {
656 #ifdef CONFIG_BAMBOO_NAND
657 return TRUE;
658 #else
659 return FALSE;
660 #endif
661 }
662
663 /*----------------------------------------------------------------------------+
664 | config_on_ebc_cs4_is_small_flash => from EPLD
665 +----------------------------------------------------------------------------*/
666 unsigned char config_on_ebc_cs4_is_small_flash(void)
667 {
668 /* Not implemented yet => returns constant value */
669 return TRUE;
670 }
671
672 /*----------------------------------------------------------------------------+
673 | Ext_bus_cntlr_init.
674 | Initialize the external bus controller
675 +----------------------------------------------------------------------------*/
676 void ext_bus_cntlr_init(void)
677 {
678 unsigned long sdr0_pstrp0, sdr0_sdstp1;
679 unsigned long bootstrap_settings, boot_selection, ebc_boot_size;
680 int computed_boot_device = BOOT_DEVICE_UNKNOWN;
681 unsigned long ebc0_cs0_bnap_value = 0, ebc0_cs0_bncr_value = 0;
682 unsigned long ebc0_cs1_bnap_value = 0, ebc0_cs1_bncr_value = 0;
683 unsigned long ebc0_cs2_bnap_value = 0, ebc0_cs2_bncr_value = 0;
684 unsigned long ebc0_cs3_bnap_value = 0, ebc0_cs3_bncr_value = 0;
685 unsigned long ebc0_cs4_bnap_value = 0, ebc0_cs4_bncr_value = 0;
686
687
688 /*-------------------------------------------------------------------------+
689 |
690 | PART 1 : Initialize EBC Bank 5
691 | ==============================
692 | Bank5 is always associated to the NVRAM/EPLD.
693 | It has to be initialized prior to other banks settings computation since
694 | some board registers values may be needed
695 |
696 +-------------------------------------------------------------------------*/
697 /* NVRAM - FPGA */
698 mtebc(pb5ap, EBC0_BNAP_NVRAM_FPGA);
699 mtebc(pb5cr, EBC0_BNCR_NVRAM_FPGA_CS5);
700
701 /*-------------------------------------------------------------------------+
702 |
703 | PART 2 : Determine which boot device was selected
704 | =========================================
705 |
706 | Read Pin Strap Register in PPC440EP
707 | In case of boot from IIC, read Serial Device Strap Register1
708 |
709 | Result can either be :
710 | - Boot from EBC 8bits => SMALL FLASH
711 | - Boot from EBC 16bits => Large Flash or SRAM
712 | - Boot from NAND Flash
713 | - Boot from PCI
714 |
715 +-------------------------------------------------------------------------*/
716 /* Read Pin Strap Register in PPC440EP */
717 mfsdr(sdr_pstrp0, sdr0_pstrp0);
718 bootstrap_settings = sdr0_pstrp0 & SDR0_PSTRP0_BOOTSTRAP_MASK;
719
720 /*-------------------------------------------------------------------------+
721 | PPC440EP Pass1
722 +-------------------------------------------------------------------------*/
723 if (is_powerpc440ep_pass1() == TRUE) {
724 switch(bootstrap_settings) {
725 case SDR0_PSTRP0_BOOTSTRAP_SETTINGS0:
726 /* Default Strap Settings 0 : CPU 400 - PLB 133 - Boot EBC 8 bit 33MHz */
727 /* Boot from Small Flash */
728 computed_boot_device = BOOT_FROM_SMALL_FLASH;
729 break;
730 case SDR0_PSTRP0_BOOTSTRAP_SETTINGS1:
731 /* Default Strap Settings 1 : CPU 533 - PLB 133 - Boot PCI 66MHz */
732 /* Boot from PCI */
733 computed_boot_device = BOOT_FROM_PCI;
734 break;
735
736 case SDR0_PSTRP0_BOOTSTRAP_SETTINGS2:
737 /* Default Strap Settings 2 : CPU 500 - PLB 100 - Boot NDFC16 66MHz */
738 /* Boot from Nand Flash */
739 computed_boot_device = BOOT_FROM_NAND_FLASH0;
740 break;
741
742 case SDR0_PSTRP0_BOOTSTRAP_SETTINGS3:
743 /* Default Strap Settings 3 : CPU 333 - PLB 133 - Boot EBC 8 bit 66MHz */
744 /* Boot from Small Flash */
745 computed_boot_device = BOOT_FROM_SMALL_FLASH;
746 break;
747
748 case SDR0_PSTRP0_BOOTSTRAP_IIC_A8_EN:
749 case SDR0_PSTRP0_BOOTSTRAP_IIC_A4_EN:
750 /* Boot Settings in IIC EEprom address 0xA8 or 0xA4 */
751 /* Read Serial Device Strap Register1 in PPC440EP */
752 mfsdr(sdr_sdstp1, sdr0_sdstp1);
753 boot_selection = sdr0_sdstp1 & SDR0_SDSTP1_BOOT_SEL_MASK;
754 ebc_boot_size = sdr0_sdstp1 & SDR0_SDSTP1_EBC_ROM_BS_MASK;
755
756 switch(boot_selection) {
757 case SDR0_SDSTP1_BOOT_SEL_EBC:
758 switch(ebc_boot_size) {
759 case SDR0_SDSTP1_EBC_ROM_BS_16BIT:
760 computed_boot_device = BOOT_FROM_LARGE_FLASH_OR_SRAM;
761 break;
762 case SDR0_SDSTP1_EBC_ROM_BS_8BIT:
763 computed_boot_device = BOOT_FROM_SMALL_FLASH;
764 break;
765 }
766 break;
767
768 case SDR0_SDSTP1_BOOT_SEL_PCI:
769 computed_boot_device = BOOT_FROM_PCI;
770 break;
771
772 case SDR0_SDSTP1_BOOT_SEL_NDFC:
773 computed_boot_device = BOOT_FROM_NAND_FLASH0;
774 break;
775 }
776 break;
777 }
778 }
779
780 /*-------------------------------------------------------------------------+
781 | PPC440EP Pass2
782 +-------------------------------------------------------------------------*/
783 else {
784 switch(bootstrap_settings) {
785 case SDR0_PSTRP0_BOOTSTRAP_SETTINGS0:
786 /* Default Strap Settings 0 : CPU 400 - PLB 133 - Boot EBC 8 bit 33MHz */
787 /* Boot from Small Flash */
788 computed_boot_device = BOOT_FROM_SMALL_FLASH;
789 break;
790 case SDR0_PSTRP0_BOOTSTRAP_SETTINGS1:
791 /* Default Strap Settings 1 : CPU 333 - PLB 133 - Boot PCI 66MHz */
792 /* Boot from PCI */
793 computed_boot_device = BOOT_FROM_PCI;
794 break;
795
796 case SDR0_PSTRP0_BOOTSTRAP_SETTINGS2:
797 /* Default Strap Settings 2 : CPU 400 - PLB 100 - Boot NDFC16 33MHz */
798 /* Boot from Nand Flash */
799 computed_boot_device = BOOT_FROM_NAND_FLASH0;
800 break;
801
802 case SDR0_PSTRP0_BOOTSTRAP_SETTINGS3:
803 /* Default Strap Settings 3 : CPU 400 - PLB 100 - Boot EBC 16 bit 33MHz */
804 /* Boot from Large Flash or SRAM */
805 computed_boot_device = BOOT_FROM_LARGE_FLASH_OR_SRAM;
806 break;
807
808 case SDR0_PSTRP0_BOOTSTRAP_SETTINGS4:
809 /* Default Strap Settings 4 : CPU 333 - PLB 133 - Boot EBC 16 bit 66MHz */
810 /* Boot from Large Flash or SRAM */
811 computed_boot_device = BOOT_FROM_LARGE_FLASH_OR_SRAM;
812 break;
813
814 case SDR0_PSTRP0_BOOTSTRAP_SETTINGS6:
815 /* Default Strap Settings 6 : CPU 400 - PLB 100 - Boot PCI 33MHz */
816 /* Boot from PCI */
817 computed_boot_device = BOOT_FROM_PCI;
818 break;
819
820 case SDR0_PSTRP0_BOOTSTRAP_IIC_A8_EN:
821 case SDR0_PSTRP0_BOOTSTRAP_IIC_A4_EN:
822 /* Default Strap Settings 5-7 */
823 /* Boot Settings in IIC EEprom address 0xA8 or 0xA4 */
824 /* Read Serial Device Strap Register1 in PPC440EP */
825 mfsdr(sdr_sdstp1, sdr0_sdstp1);
826 boot_selection = sdr0_sdstp1 & SDR0_SDSTP1_BOOT_SEL_MASK;
827 ebc_boot_size = sdr0_sdstp1 & SDR0_SDSTP1_EBC_ROM_BS_MASK;
828
829 switch(boot_selection) {
830 case SDR0_SDSTP1_BOOT_SEL_EBC:
831 switch(ebc_boot_size) {
832 case SDR0_SDSTP1_EBC_ROM_BS_16BIT:
833 computed_boot_device = BOOT_FROM_LARGE_FLASH_OR_SRAM;
834 break;
835 case SDR0_SDSTP1_EBC_ROM_BS_8BIT:
836 computed_boot_device = BOOT_FROM_SMALL_FLASH;
837 break;
838 }
839 break;
840
841 case SDR0_SDSTP1_BOOT_SEL_PCI:
842 computed_boot_device = BOOT_FROM_PCI;
843 break;
844
845 case SDR0_SDSTP1_BOOT_SEL_NDFC:
846 computed_boot_device = BOOT_FROM_NAND_FLASH0;
847 break;
848 }
849 break;
850 }
851 }
852
853 /*-------------------------------------------------------------------------+
854 |
855 | PART 3 : Compute EBC settings depending on selected boot device
856 | ====== ======================================================
857 |
858 | Resulting EBC init will be among following configurations :
859 |
860 | - Boot from EBC 8bits => boot from SMALL FLASH selected
861 | EBC-CS0 = Small Flash
862 | EBC-CS1,2,3 = NAND Flash or
863 | Exp.Slot depending on Soft Config
864 | EBC-CS4 = SRAM/Large Flash or
865 | Large Flash/SRAM depending on jumpers
866 | EBC-CS5 = NVRAM / EPLD
867 |
868 | - Boot from EBC 16bits => boot from Large Flash or SRAM selected
869 | EBC-CS0 = SRAM/Large Flash or
870 | Large Flash/SRAM depending on jumpers
871 | EBC-CS1,2,3 = NAND Flash or
872 | Exp.Slot depending on Software Configuration
873 | EBC-CS4 = Small Flash
874 | EBC-CS5 = NVRAM / EPLD
875 |
876 | - Boot from NAND Flash
877 | EBC-CS0 = NAND Flash0
878 | EBC-CS1,2,3 = NAND Flash1
879 | EBC-CS4 = SRAM/Large Flash or
880 | Large Flash/SRAM depending on jumpers
881 | EBC-CS5 = NVRAM / EPLD
882 |
883 | - Boot from PCI
884 | EBC-CS0 = ...
885 | EBC-CS1,2,3 = NAND Flash or
886 | Exp.Slot depending on Software Configuration
887 | EBC-CS4 = SRAM/Large Flash or
888 | Large Flash/SRAM or
889 | Small Flash depending on jumpers
890 | EBC-CS5 = NVRAM / EPLD
891 |
892 +-------------------------------------------------------------------------*/
893
894 switch(computed_boot_device) {
895 /*------------------------------------------------------------------------- */
896 case BOOT_FROM_SMALL_FLASH:
897 /*------------------------------------------------------------------------- */
898 ebc0_cs0_bnap_value = EBC0_BNAP_SMALL_FLASH;
899 ebc0_cs0_bncr_value = EBC0_BNCR_SMALL_FLASH_CS0;
900 if ((is_nand_selected()) == TRUE) {
901 /* NAND Flash */
902 ebc0_cs1_bnap_value = EBC0_BNAP_NAND_FLASH;
903 ebc0_cs1_bncr_value = EBC0_BNCR_NAND_FLASH_CS1;
904 ebc0_cs2_bnap_value = EBC0_BNAP_NAND_FLASH;
905 ebc0_cs2_bncr_value = EBC0_BNCR_NAND_FLASH_CS2;
906 ebc0_cs3_bnap_value = 0;
907 ebc0_cs3_bncr_value = 0;
908 } else {
909 /* Expansion Slot */
910 ebc0_cs1_bnap_value = 0;
911 ebc0_cs1_bncr_value = 0;
912 ebc0_cs2_bnap_value = 0;
913 ebc0_cs2_bncr_value = 0;
914 ebc0_cs3_bnap_value = 0;
915 ebc0_cs3_bncr_value = 0;
916 }
917 ebc0_cs4_bnap_value = EBC0_BNAP_LARGE_FLASH_OR_SRAM;
918 ebc0_cs4_bncr_value = EBC0_BNCR_LARGE_FLASH_OR_SRAM_CS4;
919
920 break;
921
922 /*------------------------------------------------------------------------- */
923 case BOOT_FROM_LARGE_FLASH_OR_SRAM:
924 /*------------------------------------------------------------------------- */
925 ebc0_cs0_bnap_value = EBC0_BNAP_LARGE_FLASH_OR_SRAM;
926 ebc0_cs0_bncr_value = EBC0_BNCR_LARGE_FLASH_OR_SRAM_CS0;
927 if ((is_nand_selected()) == TRUE) {
928 /* NAND Flash */
929 ebc0_cs1_bnap_value = EBC0_BNAP_NAND_FLASH;
930 ebc0_cs1_bncr_value = EBC0_BNCR_NAND_FLASH_CS1;
931 ebc0_cs2_bnap_value = 0;
932 ebc0_cs2_bncr_value = 0;
933 ebc0_cs3_bnap_value = 0;
934 ebc0_cs3_bncr_value = 0;
935 } else {
936 /* Expansion Slot */
937 ebc0_cs1_bnap_value = 0;
938 ebc0_cs1_bncr_value = 0;
939 ebc0_cs2_bnap_value = 0;
940 ebc0_cs2_bncr_value = 0;
941 ebc0_cs3_bnap_value = 0;
942 ebc0_cs3_bncr_value = 0;
943 }
944 ebc0_cs4_bnap_value = EBC0_BNAP_SMALL_FLASH;
945 ebc0_cs4_bncr_value = EBC0_BNCR_SMALL_FLASH_CS4;
946
947 break;
948
949 /*------------------------------------------------------------------------- */
950 case BOOT_FROM_NAND_FLASH0:
951 /*------------------------------------------------------------------------- */
952 ebc0_cs0_bnap_value = EBC0_BNAP_NAND_FLASH;
953 ebc0_cs0_bncr_value = EBC0_BNCR_NAND_FLASH_CS1;
954
955 ebc0_cs1_bnap_value = 0;
956 ebc0_cs1_bncr_value = 0;
957 ebc0_cs2_bnap_value = 0;
958 ebc0_cs2_bncr_value = 0;
959 ebc0_cs3_bnap_value = 0;
960 ebc0_cs3_bncr_value = 0;
961
962 /* Large Flash or SRAM */
963 ebc0_cs4_bnap_value = EBC0_BNAP_LARGE_FLASH_OR_SRAM;
964 ebc0_cs4_bncr_value = EBC0_BNCR_LARGE_FLASH_OR_SRAM_CS4;
965
966 break;
967
968 /*------------------------------------------------------------------------- */
969 case BOOT_FROM_PCI:
970 /*------------------------------------------------------------------------- */
971 ebc0_cs0_bnap_value = 0;
972 ebc0_cs0_bncr_value = 0;
973
974 if ((is_nand_selected()) == TRUE) {
975 /* NAND Flash */
976 ebc0_cs1_bnap_value = EBC0_BNAP_NAND_FLASH;
977 ebc0_cs1_bncr_value = EBC0_BNCR_NAND_FLASH_CS1;
978 ebc0_cs2_bnap_value = 0;
979 ebc0_cs2_bncr_value = 0;
980 ebc0_cs3_bnap_value = 0;
981 ebc0_cs3_bncr_value = 0;
982 } else {
983 /* Expansion Slot */
984 ebc0_cs1_bnap_value = 0;
985 ebc0_cs1_bncr_value = 0;
986 ebc0_cs2_bnap_value = 0;
987 ebc0_cs2_bncr_value = 0;
988 ebc0_cs3_bnap_value = 0;
989 ebc0_cs3_bncr_value = 0;
990 }
991
992 if ((config_on_ebc_cs4_is_small_flash()) == TRUE) {
993 /* Small Flash */
994 ebc0_cs4_bnap_value = EBC0_BNAP_SMALL_FLASH;
995 ebc0_cs4_bncr_value = EBC0_BNCR_SMALL_FLASH_CS4;
996 } else {
997 /* Large Flash or SRAM */
998 ebc0_cs4_bnap_value = EBC0_BNAP_LARGE_FLASH_OR_SRAM;
999 ebc0_cs4_bncr_value = EBC0_BNCR_LARGE_FLASH_OR_SRAM_CS4;
1000 }
1001
1002 break;
1003
1004 /*------------------------------------------------------------------------- */
1005 case BOOT_DEVICE_UNKNOWN:
1006 /*------------------------------------------------------------------------- */
1007 /* Error */
1008 break;
1009
1010 }
1011
1012
1013 /*-------------------------------------------------------------------------+
1014 | Initialize EBC CONFIG
1015 +-------------------------------------------------------------------------*/
1016 mtdcr(ebccfga, xbcfg);
1017 mtdcr(ebccfgd, EBC0_CFG_EBTC_DRIVEN |
1018 EBC0_CFG_PTD_ENABLED |
1019 EBC0_CFG_RTC_2048PERCLK |
1020 EBC0_CFG_EMPL_LOW |
1021 EBC0_CFG_EMPH_LOW |
1022 EBC0_CFG_CSTC_DRIVEN |
1023 EBC0_CFG_BPF_ONEDW |
1024 EBC0_CFG_EMS_8BIT |
1025 EBC0_CFG_PME_DISABLED |
1026 EBC0_CFG_PMT_ENCODE(0) );
1027
1028 /*-------------------------------------------------------------------------+
1029 | Initialize EBC Bank 0-4
1030 +-------------------------------------------------------------------------*/
1031 /* EBC Bank0 */
1032 mtebc(pb0ap, ebc0_cs0_bnap_value);
1033 mtebc(pb0cr, ebc0_cs0_bncr_value);
1034 /* EBC Bank1 */
1035 mtebc(pb1ap, ebc0_cs1_bnap_value);
1036 mtebc(pb1cr, ebc0_cs1_bncr_value);
1037 /* EBC Bank2 */
1038 mtebc(pb2ap, ebc0_cs2_bnap_value);
1039 mtebc(pb2cr, ebc0_cs2_bncr_value);
1040 /* EBC Bank3 */
1041 mtebc(pb3ap, ebc0_cs3_bnap_value);
1042 mtebc(pb3cr, ebc0_cs3_bncr_value);
1043 /* EBC Bank4 */
1044 mtebc(pb4ap, ebc0_cs4_bnap_value);
1045 mtebc(pb4cr, ebc0_cs4_bncr_value);
1046
1047 return;
1048 }
1049
1050
1051 /*----------------------------------------------------------------------------+
1052 | get_uart_configuration.
1053 +----------------------------------------------------------------------------*/
1054 uart_config_nb_t get_uart_configuration(void)
1055 {
1056 return (L4);
1057 }
1058
1059 /*----------------------------------------------------------------------------+
1060 | set_phy_configuration_through_fpga => to EPLD
1061 +----------------------------------------------------------------------------*/
1062 void set_phy_configuration_through_fpga(zmii_config_t config)
1063 {
1064
1065 unsigned long fpga_selection_reg;
1066
1067 fpga_selection_reg = in8(FPGA_SELECTION_1_REG) & ~FPGA_SEL_1_REG_PHY_MASK;
1068
1069 switch(config)
1070 {
1071 case ZMII_CONFIGURATION_IS_MII:
1072 fpga_selection_reg = fpga_selection_reg | FPGA_SEL_1_REG_MII;
1073 break;
1074 case ZMII_CONFIGURATION_IS_RMII:
1075 fpga_selection_reg = fpga_selection_reg | FPGA_SEL_1_REG_RMII;
1076 break;
1077 case ZMII_CONFIGURATION_IS_SMII:
1078 fpga_selection_reg = fpga_selection_reg | FPGA_SEL_1_REG_SMII;
1079 break;
1080 case ZMII_CONFIGURATION_UNKNOWN:
1081 default:
1082 break;
1083 }
1084 out8(FPGA_SELECTION_1_REG,fpga_selection_reg);
1085
1086 }
1087
1088 /*----------------------------------------------------------------------------+
1089 | scp_selection_in_fpga.
1090 +----------------------------------------------------------------------------*/
1091 void scp_selection_in_fpga(void)
1092 {
1093 unsigned long fpga_selection_2_reg;
1094
1095 fpga_selection_2_reg = in8(FPGA_SELECTION_2_REG) & ~FPGA_SEL2_REG_IIC1_SCP_SEL_MASK;
1096 fpga_selection_2_reg |= FPGA_SEL2_REG_SEL_SCP;
1097 out8(FPGA_SELECTION_2_REG,fpga_selection_2_reg);
1098 }
1099
1100 /*----------------------------------------------------------------------------+
1101 | iic1_selection_in_fpga.
1102 +----------------------------------------------------------------------------*/
1103 void iic1_selection_in_fpga(void)
1104 {
1105 unsigned long fpga_selection_2_reg;
1106
1107 fpga_selection_2_reg = in8(FPGA_SELECTION_2_REG) & ~FPGA_SEL2_REG_IIC1_SCP_SEL_MASK;
1108 fpga_selection_2_reg |= FPGA_SEL2_REG_SEL_IIC1;
1109 out8(FPGA_SELECTION_2_REG,fpga_selection_2_reg);
1110 }
1111
1112 /*----------------------------------------------------------------------------+
1113 | dma_a_b_selection_in_fpga.
1114 +----------------------------------------------------------------------------*/
1115 void dma_a_b_selection_in_fpga(void)
1116 {
1117 unsigned long fpga_selection_2_reg;
1118
1119 fpga_selection_2_reg = in8(FPGA_SELECTION_2_REG) | FPGA_SEL2_REG_SEL_DMA_A_B;
1120 out8(FPGA_SELECTION_2_REG,fpga_selection_2_reg);
1121 }
1122
1123 /*----------------------------------------------------------------------------+
1124 | dma_a_b_unselect_in_fpga.
1125 +----------------------------------------------------------------------------*/
1126 void dma_a_b_unselect_in_fpga(void)
1127 {
1128 unsigned long fpga_selection_2_reg;
1129
1130 fpga_selection_2_reg = in8(FPGA_SELECTION_2_REG) & ~FPGA_SEL2_REG_SEL_DMA_A_B;
1131 out8(FPGA_SELECTION_2_REG,fpga_selection_2_reg);
1132 }
1133
1134 /*----------------------------------------------------------------------------+
1135 | dma_c_d_selection_in_fpga.
1136 +----------------------------------------------------------------------------*/
1137 void dma_c_d_selection_in_fpga(void)
1138 {
1139 unsigned long fpga_selection_2_reg;
1140
1141 fpga_selection_2_reg = in8(FPGA_SELECTION_2_REG) | FPGA_SEL2_REG_SEL_DMA_C_D;
1142 out8(FPGA_SELECTION_2_REG,fpga_selection_2_reg);
1143 }
1144
1145 /*----------------------------------------------------------------------------+
1146 | dma_c_d_unselect_in_fpga.
1147 +----------------------------------------------------------------------------*/
1148 void dma_c_d_unselect_in_fpga(void)
1149 {
1150 unsigned long fpga_selection_2_reg;
1151
1152 fpga_selection_2_reg = in8(FPGA_SELECTION_2_REG) & ~FPGA_SEL2_REG_SEL_DMA_C_D;
1153 out8(FPGA_SELECTION_2_REG,fpga_selection_2_reg);
1154 }
1155
1156 /*----------------------------------------------------------------------------+
1157 | usb2_device_selection_in_fpga.
1158 +----------------------------------------------------------------------------*/
1159 void usb2_device_selection_in_fpga(void)
1160 {
1161 unsigned long fpga_selection_1_reg;
1162
1163 fpga_selection_1_reg = in8(FPGA_SELECTION_1_REG) | FPGA_SEL_1_REG_USB2_DEV_SEL;
1164 out8(FPGA_SELECTION_1_REG,fpga_selection_1_reg);
1165 }
1166
1167 /*----------------------------------------------------------------------------+
1168 | usb2_device_reset_through_fpga.
1169 +----------------------------------------------------------------------------*/
1170 void usb2_device_reset_through_fpga(void)
1171 {
1172 /* Perform soft Reset pulse */
1173 unsigned long fpga_reset_reg;
1174 int i;
1175
1176 fpga_reset_reg = in8(FPGA_RESET_REG);
1177 out8(FPGA_RESET_REG,fpga_reset_reg | FPGA_RESET_REG_RESET_USB20_DEV);
1178 for (i=0; i<500; i++)
1179 udelay(1000);
1180 out8(FPGA_RESET_REG,fpga_reset_reg);
1181 }
1182
1183 /*----------------------------------------------------------------------------+
1184 | usb2_host_selection_in_fpga.
1185 +----------------------------------------------------------------------------*/
1186 void usb2_host_selection_in_fpga(void)
1187 {
1188 unsigned long fpga_selection_1_reg;
1189
1190 fpga_selection_1_reg = in8(FPGA_SELECTION_1_REG) | FPGA_SEL_1_REG_USB2_HOST_SEL;
1191 out8(FPGA_SELECTION_1_REG,fpga_selection_1_reg);
1192 }
1193
1194 /*----------------------------------------------------------------------------+
1195 | ndfc_selection_in_fpga.
1196 +----------------------------------------------------------------------------*/
1197 void ndfc_selection_in_fpga(void)
1198 {
1199 unsigned long fpga_selection_1_reg;
1200
1201 fpga_selection_1_reg = in8(FPGA_SELECTION_1_REG) &~FPGA_SEL_1_REG_NF_SELEC_MASK;
1202 fpga_selection_1_reg |= FPGA_SEL_1_REG_NF0_SEL_BY_NFCS1;
1203 fpga_selection_1_reg |= FPGA_SEL_1_REG_NF1_SEL_BY_NFCS2;
1204 out8(FPGA_SELECTION_1_REG,fpga_selection_1_reg);
1205 }
1206
1207 /*----------------------------------------------------------------------------+
1208 | uart_selection_in_fpga.
1209 +----------------------------------------------------------------------------*/
1210 void uart_selection_in_fpga(uart_config_nb_t uart_config)
1211 {
1212 /* FPGA register */
1213 unsigned char fpga_selection_3_reg;
1214
1215 /* Read FPGA Reagister */
1216 fpga_selection_3_reg = in8(FPGA_SELECTION_3_REG);
1217
1218 switch (uart_config)
1219 {
1220 case L1:
1221 /* ----------------------------------------------------------------------- */
1222 /* L1 configuration: UART0 = 8 pins */
1223 /* ----------------------------------------------------------------------- */
1224 /* Configure FPGA */
1225 fpga_selection_3_reg = fpga_selection_3_reg & ~FPGA_SEL3_REG_SEL_UART_CONFIG_MASK;
1226 fpga_selection_3_reg = fpga_selection_3_reg | FPGA_SEL3_REG_SEL_UART_CONFIG1;
1227 out8(FPGA_SELECTION_3_REG, fpga_selection_3_reg);
1228
1229 break;
1230
1231 case L2:
1232 /* ----------------------------------------------------------------------- */
1233 /* L2 configuration: UART0 = 4 pins */
1234 /* UART1 = 4 pins */
1235 /* ----------------------------------------------------------------------- */
1236 /* Configure FPGA */
1237 fpga_selection_3_reg = fpga_selection_3_reg & ~FPGA_SEL3_REG_SEL_UART_CONFIG_MASK;
1238 fpga_selection_3_reg = fpga_selection_3_reg | FPGA_SEL3_REG_SEL_UART_CONFIG2;
1239 out8(FPGA_SELECTION_3_REG, fpga_selection_3_reg);
1240
1241 break;
1242
1243 case L3:
1244 /* ----------------------------------------------------------------------- */
1245 /* L3 configuration: UART0 = 4 pins */
1246 /* UART1 = 2 pins */
1247 /* UART2 = 2 pins */
1248 /* ----------------------------------------------------------------------- */
1249 /* Configure FPGA */
1250 fpga_selection_3_reg = fpga_selection_3_reg & ~FPGA_SEL3_REG_SEL_UART_CONFIG_MASK;
1251 fpga_selection_3_reg = fpga_selection_3_reg | FPGA_SEL3_REG_SEL_UART_CONFIG3;
1252 out8(FPGA_SELECTION_3_REG, fpga_selection_3_reg);
1253 break;
1254
1255 case L4:
1256 /* Configure FPGA */
1257 fpga_selection_3_reg = fpga_selection_3_reg & ~FPGA_SEL3_REG_SEL_UART_CONFIG_MASK;
1258 fpga_selection_3_reg = fpga_selection_3_reg | FPGA_SEL3_REG_SEL_UART_CONFIG4;
1259 out8(FPGA_SELECTION_3_REG, fpga_selection_3_reg);
1260
1261 break;
1262
1263 default:
1264 /* Unsupported UART configuration number */
1265 for (;;)
1266 ;
1267 break;
1268
1269 }
1270 }
1271
1272
1273 /*----------------------------------------------------------------------------+
1274 | init_default_gpio
1275 +----------------------------------------------------------------------------*/
1276 void init_default_gpio(gpio_param_s (*gpio_tab)[GPIO_MAX])
1277 {
1278 int i;
1279
1280 /* Init GPIO0 */
1281 for(i=0; i<GPIO_MAX; i++)
1282 {
1283 gpio_tab[GPIO0][i].add = GPIO0_BASE;
1284 gpio_tab[GPIO0][i].in_out = GPIO_DIS;
1285 gpio_tab[GPIO0][i].alt_nb = GPIO_SEL;
1286 }
1287
1288 /* Init GPIO1 */
1289 for(i=0; i<GPIO_MAX; i++)
1290 {
1291 gpio_tab[GPIO1][i].add = GPIO1_BASE;
1292 gpio_tab[GPIO1][i].in_out = GPIO_DIS;
1293 gpio_tab[GPIO1][i].alt_nb = GPIO_SEL;
1294 }
1295
1296 /* EBC_CS_N(5) - GPIO0_10 */
1297 gpio_tab[GPIO0][10].in_out = GPIO_OUT;
1298 gpio_tab[GPIO0][10].alt_nb = GPIO_ALT1;
1299
1300 /* EBC_CS_N(4) - GPIO0_9 */
1301 gpio_tab[GPIO0][9].in_out = GPIO_OUT;
1302 gpio_tab[GPIO0][9].alt_nb = GPIO_ALT1;
1303 }
1304
1305 /*----------------------------------------------------------------------------+
1306 | update_uart_ios
1307 +------------------------------------------------------------------------------
1308 |
1309 | Set UART Configuration in PowerPC440EP
1310 |
1311 | +---------------------------------------------------------------------+
1312 | | Configuartion | Connector | Nb of pins | Pins | Associated |
1313 | | Number | Port Name | available | naming | CORE |
1314 | +-----------------+---------------+------------+--------+-------------+
1315 | | L1 | Port_A | 8 | UART | UART core 0 |
1316 | +-----------------+---------------+------------+--------+-------------+
1317 | | L2 | Port_A | 4 | UART1 | UART core 0 |
1318 | | (L2D) | Port_B | 4 | UART2 | UART core 1 |
1319 | +-----------------+---------------+------------+--------+-------------+
1320 | | L3 | Port_A | 4 | UART1 | UART core 0 |
1321 | | (L3D) | Port_B | 2 | UART2 | UART core 1 |
1322 | | | Port_C | 2 | UART3 | UART core 2 |
1323 | +-----------------+---------------+------------+--------+-------------+
1324 | | | Port_A | 2 | UART1 | UART core 0 |
1325 | | L4 | Port_B | 2 | UART2 | UART core 1 |
1326 | | (L4D) | Port_C | 2 | UART3 | UART core 2 |
1327 | | | Port_D | 2 | UART4 | UART core 3 |
1328 | +-----------------+---------------+------------+--------+-------------+
1329 |
1330 | Involved GPIOs
1331 |
1332 | +------------------------------------------------------------------------------+
1333 | | GPIO | Aternate 1 | I/O | Alternate 2 | I/O | Alternate 3 | I/O |
1334 | +---------+------------------+-----+-----------------+-----+-------------+-----+
1335 | | GPIO1_2 | UART0_DCD_N | I | UART1_DSR_CTS_N | I | UART2_SOUT | O |
1336 | | GPIO1_3 | UART0_8PIN_DSR_N | I | UART1_RTS_DTR_N | O | UART2_SIN | I |
1337 | | GPIO1_4 | UART0_8PIN_CTS_N | I | NA | NA | UART3_SIN | I |
1338 | | GPIO1_5 | UART0_RTS_N | O | NA | NA | UART3_SOUT | O |
1339 | | GPIO1_6 | UART0_DTR_N | O | UART1_SOUT | O | NA | NA |
1340 | | GPIO1_7 | UART0_RI_N | I | UART1_SIN | I | NA | NA |
1341 | +------------------------------------------------------------------------------+
1342 |
1343 |
1344 +----------------------------------------------------------------------------*/
1345
1346 void update_uart_ios(uart_config_nb_t uart_config, gpio_param_s (*gpio_tab)[GPIO_MAX])
1347 {
1348 switch (uart_config)
1349 {
1350 case L1:
1351 /* ----------------------------------------------------------------------- */
1352 /* L1 configuration: UART0 = 8 pins */
1353 /* ----------------------------------------------------------------------- */
1354 /* Update GPIO Configuration Table */
1355 gpio_tab[GPIO1][2].in_out = GPIO_IN;
1356 gpio_tab[GPIO1][2].alt_nb = GPIO_ALT1;
1357
1358 gpio_tab[GPIO1][3].in_out = GPIO_IN;
1359 gpio_tab[GPIO1][3].alt_nb = GPIO_ALT1;
1360
1361 gpio_tab[GPIO1][4].in_out = GPIO_IN;
1362 gpio_tab[GPIO1][4].alt_nb = GPIO_ALT1;
1363
1364 gpio_tab[GPIO1][5].in_out = GPIO_OUT;
1365 gpio_tab[GPIO1][5].alt_nb = GPIO_ALT1;
1366
1367 gpio_tab[GPIO1][6].in_out = GPIO_OUT;
1368 gpio_tab[GPIO1][6].alt_nb = GPIO_ALT1;
1369
1370 gpio_tab[GPIO1][7].in_out = GPIO_IN;
1371 gpio_tab[GPIO1][7].alt_nb = GPIO_ALT1;
1372
1373 break;
1374
1375 case L2:
1376 /* ----------------------------------------------------------------------- */
1377 /* L2 configuration: UART0 = 4 pins */
1378 /* UART1 = 4 pins */
1379 /* ----------------------------------------------------------------------- */
1380 /* Update GPIO Configuration Table */
1381 gpio_tab[GPIO1][2].in_out = GPIO_IN;
1382 gpio_tab[GPIO1][2].alt_nb = GPIO_ALT2;
1383
1384 gpio_tab[GPIO1][3].in_out = GPIO_OUT;
1385 gpio_tab[GPIO1][3].alt_nb = GPIO_ALT2;
1386
1387 gpio_tab[GPIO1][4].in_out = GPIO_IN;
1388 gpio_tab[GPIO1][4].alt_nb = GPIO_ALT1;
1389
1390 gpio_tab[GPIO1][5].in_out = GPIO_OUT;
1391 gpio_tab[GPIO1][5].alt_nb = GPIO_ALT1;
1392
1393 gpio_tab[GPIO1][6].in_out = GPIO_OUT;
1394 gpio_tab[GPIO1][6].alt_nb = GPIO_ALT2;
1395
1396 gpio_tab[GPIO1][7].in_out = GPIO_IN;
1397 gpio_tab[GPIO1][7].alt_nb = GPIO_ALT2;
1398
1399 break;
1400
1401 case L3:
1402 /* ----------------------------------------------------------------------- */
1403 /* L3 configuration: UART0 = 4 pins */
1404 /* UART1 = 2 pins */
1405 /* UART2 = 2 pins */
1406 /* ----------------------------------------------------------------------- */
1407 /* Update GPIO Configuration Table */
1408 gpio_tab[GPIO1][2].in_out = GPIO_OUT;
1409 gpio_tab[GPIO1][2].alt_nb = GPIO_ALT3;
1410
1411 gpio_tab[GPIO1][3].in_out = GPIO_IN;
1412 gpio_tab[GPIO1][3].alt_nb = GPIO_ALT3;
1413
1414 gpio_tab[GPIO1][4].in_out = GPIO_IN;
1415 gpio_tab[GPIO1][4].alt_nb = GPIO_ALT1;
1416
1417 gpio_tab[GPIO1][5].in_out = GPIO_OUT;
1418 gpio_tab[GPIO1][5].alt_nb = GPIO_ALT1;
1419
1420 gpio_tab[GPIO1][6].in_out = GPIO_OUT;
1421 gpio_tab[GPIO1][6].alt_nb = GPIO_ALT2;
1422
1423 gpio_tab[GPIO1][7].in_out = GPIO_IN;
1424 gpio_tab[GPIO1][7].alt_nb = GPIO_ALT2;
1425
1426 break;
1427
1428 case L4:
1429 /* ----------------------------------------------------------------------- */
1430 /* L4 configuration: UART0 = 2 pins */
1431 /* UART1 = 2 pins */
1432 /* UART2 = 2 pins */
1433 /* UART3 = 2 pins */
1434 /* ----------------------------------------------------------------------- */
1435 /* Update GPIO Configuration Table */
1436 gpio_tab[GPIO1][2].in_out = GPIO_OUT;
1437 gpio_tab[GPIO1][2].alt_nb = GPIO_ALT3;
1438
1439 gpio_tab[GPIO1][3].in_out = GPIO_IN;
1440 gpio_tab[GPIO1][3].alt_nb = GPIO_ALT3;
1441
1442 gpio_tab[GPIO1][4].in_out = GPIO_IN;
1443 gpio_tab[GPIO1][4].alt_nb = GPIO_ALT3;
1444
1445 gpio_tab[GPIO1][5].in_out = GPIO_OUT;
1446 gpio_tab[GPIO1][5].alt_nb = GPIO_ALT3;
1447
1448 gpio_tab[GPIO1][6].in_out = GPIO_OUT;
1449 gpio_tab[GPIO1][6].alt_nb = GPIO_ALT2;
1450
1451 gpio_tab[GPIO1][7].in_out = GPIO_IN;
1452 gpio_tab[GPIO1][7].alt_nb = GPIO_ALT2;
1453
1454 break;
1455
1456 default:
1457 /* Unsupported UART configuration number */
1458 printf("ERROR - Unsupported UART configuration number.\n\n");
1459 for (;;)
1460 ;
1461 break;
1462
1463 }
1464
1465 /* Set input Selection Register on Alt_Receive for UART Input Core */
1466 out32(GPIO1_IS1L, (in32(GPIO1_IS1L) | 0x0FC30000));
1467 out32(GPIO1_IS2L, (in32(GPIO1_IS2L) | 0x0C030000));
1468 out32(GPIO1_IS3L, (in32(GPIO1_IS3L) | 0x03C00000));
1469 }
1470
1471 /*----------------------------------------------------------------------------+
1472 | update_ndfc_ios(void).
1473 +----------------------------------------------------------------------------*/
1474 void update_ndfc_ios(gpio_param_s (*gpio_tab)[GPIO_MAX])
1475 {
1476 /* Update GPIO Configuration Table */
1477 gpio_tab[GPIO0][6].in_out = GPIO_OUT; /* EBC_CS_N(1) */
1478 gpio_tab[GPIO0][6].alt_nb = GPIO_ALT1;
1479
1480 gpio_tab[GPIO0][7].in_out = GPIO_OUT; /* EBC_CS_N(2) */
1481 gpio_tab[GPIO0][7].alt_nb = GPIO_ALT1;
1482
1483 #if 0
1484 gpio_tab[GPIO0][7].in_out = GPIO_OUT; /* EBC_CS_N(3) */
1485 gpio_tab[GPIO0][7].alt_nb = GPIO_ALT1;
1486 #endif
1487 }
1488
1489 /*----------------------------------------------------------------------------+
1490 | update_zii_ios(void).
1491 +----------------------------------------------------------------------------*/
1492 void update_zii_ios(gpio_param_s (*gpio_tab)[GPIO_MAX])
1493 {
1494 /* Update GPIO Configuration Table */
1495 gpio_tab[GPIO0][12].in_out = GPIO_IN; /* ZII_p0Rxd(0) */
1496 gpio_tab[GPIO0][12].alt_nb = GPIO_ALT1;
1497
1498 gpio_tab[GPIO0][13].in_out = GPIO_IN; /* ZII_p0Rxd(1) */
1499 gpio_tab[GPIO0][13].alt_nb = GPIO_ALT1;
1500
1501 gpio_tab[GPIO0][14].in_out = GPIO_IN; /* ZII_p0Rxd(2) */
1502 gpio_tab[GPIO0][14].alt_nb = GPIO_ALT1;
1503
1504 gpio_tab[GPIO0][15].in_out = GPIO_IN; /* ZII_p0Rxd(3) */
1505 gpio_tab[GPIO0][15].alt_nb = GPIO_ALT1;
1506
1507 gpio_tab[GPIO0][16].in_out = GPIO_OUT; /* ZII_p0Txd(0) */
1508 gpio_tab[GPIO0][16].alt_nb = GPIO_ALT1;
1509
1510 gpio_tab[GPIO0][17].in_out = GPIO_OUT; /* ZII_p0Txd(1) */
1511 gpio_tab[GPIO0][17].alt_nb = GPIO_ALT1;
1512
1513 gpio_tab[GPIO0][18].in_out = GPIO_OUT; /* ZII_p0Txd(2) */
1514 gpio_tab[GPIO0][18].alt_nb = GPIO_ALT1;
1515
1516 gpio_tab[GPIO0][19].in_out = GPIO_OUT; /* ZII_p0Txd(3) */
1517 gpio_tab[GPIO0][19].alt_nb = GPIO_ALT1;
1518
1519 gpio_tab[GPIO0][20].in_out = GPIO_IN; /* ZII_p0Rx_er */
1520 gpio_tab[GPIO0][20].alt_nb = GPIO_ALT1;
1521
1522 gpio_tab[GPIO0][21].in_out = GPIO_IN; /* ZII_p0Rx_dv */
1523 gpio_tab[GPIO0][21].alt_nb = GPIO_ALT1;
1524
1525 gpio_tab[GPIO0][22].in_out = GPIO_IN; /* ZII_p0Crs */
1526 gpio_tab[GPIO0][22].alt_nb = GPIO_ALT1;
1527
1528 gpio_tab[GPIO0][23].in_out = GPIO_OUT; /* ZII_p0Tx_er */
1529 gpio_tab[GPIO0][23].alt_nb = GPIO_ALT1;
1530
1531 gpio_tab[GPIO0][24].in_out = GPIO_OUT; /* ZII_p0Tx_en */
1532 gpio_tab[GPIO0][24].alt_nb = GPIO_ALT1;
1533
1534 gpio_tab[GPIO0][25].in_out = GPIO_IN; /* ZII_p0Col */
1535 gpio_tab[GPIO0][25].alt_nb = GPIO_ALT1;
1536
1537 }
1538
1539 /*----------------------------------------------------------------------------+
1540 | update_uic_0_3_irq_ios().
1541 +----------------------------------------------------------------------------*/
1542 void update_uic_0_3_irq_ios(gpio_param_s (*gpio_tab)[GPIO_MAX])
1543 {
1544 gpio_tab[GPIO1][8].in_out = GPIO_IN; /* UIC_IRQ(0) */
1545 gpio_tab[GPIO1][8].alt_nb = GPIO_ALT1;
1546
1547 gpio_tab[GPIO1][9].in_out = GPIO_IN; /* UIC_IRQ(1) */
1548 gpio_tab[GPIO1][9].alt_nb = GPIO_ALT1;
1549
1550 gpio_tab[GPIO1][10].in_out = GPIO_IN; /* UIC_IRQ(2) */
1551 gpio_tab[GPIO1][10].alt_nb = GPIO_ALT1;
1552
1553 gpio_tab[GPIO1][11].in_out = GPIO_IN; /* UIC_IRQ(3) */
1554 gpio_tab[GPIO1][11].alt_nb = GPIO_ALT1;
1555 }
1556
1557 /*----------------------------------------------------------------------------+
1558 | update_uic_4_9_irq_ios().
1559 +----------------------------------------------------------------------------*/
1560 void update_uic_4_9_irq_ios(gpio_param_s (*gpio_tab)[GPIO_MAX])
1561 {
1562 gpio_tab[GPIO1][12].in_out = GPIO_IN; /* UIC_IRQ(4) */
1563 gpio_tab[GPIO1][12].alt_nb = GPIO_ALT1;
1564
1565 gpio_tab[GPIO1][13].in_out = GPIO_IN; /* UIC_IRQ(6) */
1566 gpio_tab[GPIO1][13].alt_nb = GPIO_ALT1;
1567
1568 gpio_tab[GPIO1][14].in_out = GPIO_IN; /* UIC_IRQ(7) */
1569 gpio_tab[GPIO1][14].alt_nb = GPIO_ALT1;
1570
1571 gpio_tab[GPIO1][15].in_out = GPIO_IN; /* UIC_IRQ(8) */
1572 gpio_tab[GPIO1][15].alt_nb = GPIO_ALT1;
1573
1574 gpio_tab[GPIO1][16].in_out = GPIO_IN; /* UIC_IRQ(9) */
1575 gpio_tab[GPIO1][16].alt_nb = GPIO_ALT1;
1576 }
1577
1578 /*----------------------------------------------------------------------------+
1579 | update_dma_a_b_ios().
1580 +----------------------------------------------------------------------------*/
1581 void update_dma_a_b_ios(gpio_param_s (*gpio_tab)[GPIO_MAX])
1582 {
1583 gpio_tab[GPIO1][12].in_out = GPIO_OUT; /* DMA_ACK(1) */
1584 gpio_tab[GPIO1][12].alt_nb = GPIO_ALT2;
1585
1586 gpio_tab[GPIO1][13].in_out = GPIO_BI; /* DMA_EOT/TC(1) */
1587 gpio_tab[GPIO1][13].alt_nb = GPIO_ALT2;
1588
1589 gpio_tab[GPIO1][14].in_out = GPIO_IN; /* DMA_REQ(0) */
1590 gpio_tab[GPIO1][14].alt_nb = GPIO_ALT2;
1591
1592 gpio_tab[GPIO1][15].in_out = GPIO_OUT; /* DMA_ACK(0) */
1593 gpio_tab[GPIO1][15].alt_nb = GPIO_ALT2;
1594
1595 gpio_tab[GPIO1][16].in_out = GPIO_BI; /* DMA_EOT/TC(0) */
1596 gpio_tab[GPIO1][16].alt_nb = GPIO_ALT2;
1597 }
1598
1599 /*----------------------------------------------------------------------------+
1600 | update_dma_c_d_ios().
1601 +----------------------------------------------------------------------------*/
1602 void update_dma_c_d_ios(gpio_param_s (*gpio_tab)[GPIO_MAX])
1603 {
1604 gpio_tab[GPIO0][0].in_out = GPIO_IN; /* DMA_REQ(2) */
1605 gpio_tab[GPIO0][0].alt_nb = GPIO_ALT2;
1606
1607 gpio_tab[GPIO0][1].in_out = GPIO_OUT; /* DMA_ACK(2) */
1608 gpio_tab[GPIO0][1].alt_nb = GPIO_ALT2;
1609
1610 gpio_tab[GPIO0][2].in_out = GPIO_BI; /* DMA_EOT/TC(2) */
1611 gpio_tab[GPIO0][2].alt_nb = GPIO_ALT2;
1612
1613 gpio_tab[GPIO0][3].in_out = GPIO_IN; /* DMA_REQ(3) */
1614 gpio_tab[GPIO0][3].alt_nb = GPIO_ALT2;
1615
1616 gpio_tab[GPIO0][4].in_out = GPIO_OUT; /* DMA_ACK(3) */
1617 gpio_tab[GPIO0][4].alt_nb = GPIO_ALT2;
1618
1619 gpio_tab[GPIO0][5].in_out = GPIO_BI; /* DMA_EOT/TC(3) */
1620 gpio_tab[GPIO0][5].alt_nb = GPIO_ALT2;
1621
1622 }
1623
1624 /*----------------------------------------------------------------------------+
1625 | update_ebc_master_ios().
1626 +----------------------------------------------------------------------------*/
1627 void update_ebc_master_ios(gpio_param_s (*gpio_tab)[GPIO_MAX])
1628 {
1629 gpio_tab[GPIO0][27].in_out = GPIO_IN; /* EXT_EBC_REQ */
1630 gpio_tab[GPIO0][27].alt_nb = GPIO_ALT1;
1631
1632 gpio_tab[GPIO0][29].in_out = GPIO_OUT; /* EBC_EXT_HDLA */
1633 gpio_tab[GPIO0][29].alt_nb = GPIO_ALT1;
1634
1635 gpio_tab[GPIO0][30].in_out = GPIO_OUT; /* EBC_EXT_ACK */
1636 gpio_tab[GPIO0][30].alt_nb = GPIO_ALT1;
1637
1638 gpio_tab[GPIO0][31].in_out = GPIO_OUT; /* EBC_EXR_BUSREQ */
1639 gpio_tab[GPIO0][31].alt_nb = GPIO_ALT1;
1640 }
1641
1642 /*----------------------------------------------------------------------------+
1643 | update_usb2_device_ios().
1644 +----------------------------------------------------------------------------*/
1645 void update_usb2_device_ios(gpio_param_s (*gpio_tab)[GPIO_MAX])
1646 {
1647 gpio_tab[GPIO0][26].in_out = GPIO_IN; /* USB2D_RXVALID */
1648 gpio_tab[GPIO0][26].alt_nb = GPIO_ALT2;
1649
1650 gpio_tab[GPIO0][27].in_out = GPIO_IN; /* USB2D_RXERROR */
1651 gpio_tab[GPIO0][27].alt_nb = GPIO_ALT2;
1652
1653 gpio_tab[GPIO0][28].in_out = GPIO_OUT; /* USB2D_TXVALID */
1654 gpio_tab[GPIO0][28].alt_nb = GPIO_ALT2;
1655
1656 gpio_tab[GPIO0][29].in_out = GPIO_OUT; /* USB2D_PAD_SUSPNDM */
1657 gpio_tab[GPIO0][29].alt_nb = GPIO_ALT2;
1658
1659 gpio_tab[GPIO0][30].in_out = GPIO_OUT; /* USB2D_XCVRSELECT */
1660 gpio_tab[GPIO0][30].alt_nb = GPIO_ALT2;
1661
1662 gpio_tab[GPIO0][31].in_out = GPIO_OUT; /* USB2D_TERMSELECT */
1663 gpio_tab[GPIO0][31].alt_nb = GPIO_ALT2;
1664
1665 gpio_tab[GPIO1][0].in_out = GPIO_OUT; /* USB2D_OPMODE0 */
1666 gpio_tab[GPIO1][0].alt_nb = GPIO_ALT1;
1667
1668 gpio_tab[GPIO1][1].in_out = GPIO_OUT; /* USB2D_OPMODE1 */
1669 gpio_tab[GPIO1][1].alt_nb = GPIO_ALT1;
1670
1671 }
1672
1673 /*----------------------------------------------------------------------------+
1674 | update_pci_patch_ios().
1675 +----------------------------------------------------------------------------*/
1676 void update_pci_patch_ios(gpio_param_s (*gpio_tab)[GPIO_MAX])
1677 {
1678 gpio_tab[GPIO0][29].in_out = GPIO_OUT; /* EBC_EXT_HDLA */
1679 gpio_tab[GPIO0][29].alt_nb = GPIO_ALT1;
1680 }
1681
1682 /*----------------------------------------------------------------------------+
1683 | set_chip_gpio_configuration(unsigned char gpio_core,
1684 | gpio_param_s (*gpio_tab)[GPIO_MAX])
1685 | Put the core impacted by clock modification and sharing in reset.
1686 | Config the select registers to resolve the sharing depending of the config.
1687 | Configure the GPIO registers.
1688 |
1689 +----------------------------------------------------------------------------*/
1690 void set_chip_gpio_configuration(unsigned char gpio_core, gpio_param_s (*gpio_tab)[GPIO_MAX])
1691 {
1692 unsigned char i=0, j=0, reg_offset = 0;
1693 unsigned long gpio_reg, gpio_core_add;
1694
1695 /* GPIO config of the GPIOs 0 to 31 */
1696 for (i=0; i<GPIO_MAX; i++, j++)
1697 {
1698 if (i == GPIO_MAX/2)
1699 {
1700 reg_offset = 4;
1701 j = i-16;
1702 }
1703
1704 gpio_core_add = gpio_tab[gpio_core][i].add;
1705
1706 if ( (gpio_tab[gpio_core][i].in_out == GPIO_IN) ||
1707 (gpio_tab[gpio_core][i].in_out == GPIO_BI ))
1708 {
1709 switch (gpio_tab[gpio_core][i].alt_nb)
1710 {
1711 case GPIO_SEL:
1712 break;
1713
1714 case GPIO_ALT1:
1715 gpio_reg = in32(GPIO_IS1(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2));
1716 gpio_reg = gpio_reg | (GPIO_IN_SEL >> (j*2));
1717 out32(GPIO_IS1(gpio_core_add+reg_offset), gpio_reg);
1718 break;
1719
1720 case GPIO_ALT2:
1721 gpio_reg = in32(GPIO_IS2(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2));
1722 gpio_reg = gpio_reg | (GPIO_IN_SEL >> (j*2));
1723 out32(GPIO_IS2(gpio_core_add+reg_offset), gpio_reg);
1724 break;
1725
1726 case GPIO_ALT3:
1727 gpio_reg = in32(GPIO_IS3(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2));
1728 gpio_reg = gpio_reg | (GPIO_IN_SEL >> (j*2));
1729 out32(GPIO_IS3(gpio_core_add+reg_offset), gpio_reg);
1730 break;
1731 }
1732 }
1733 if ( (gpio_tab[gpio_core][i].in_out == GPIO_OUT) ||
1734 (gpio_tab[gpio_core][i].in_out == GPIO_BI ))
1735 {
1736
1737 switch (gpio_tab[gpio_core][i].alt_nb)
1738 {
1739 case GPIO_SEL:
1740 break;
1741 case GPIO_ALT1:
1742 gpio_reg = in32(GPIO_OS(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2));
1743 gpio_reg = gpio_reg | (GPIO_ALT1_SEL >> (j*2));
1744 out32(GPIO_OS(gpio_core_add+reg_offset), gpio_reg);
1745 gpio_reg = in32(GPIO_TS(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2));
1746 gpio_reg = gpio_reg | (GPIO_ALT1_SEL >> (j*2));
1747 out32(GPIO_TS(gpio_core_add+reg_offset), gpio_reg);
1748 break;
1749 case GPIO_ALT2:
1750 gpio_reg = in32(GPIO_OS(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2));
1751 gpio_reg = gpio_reg | (GPIO_ALT2_SEL >> (j*2));
1752 out32(GPIO_OS(gpio_core_add+reg_offset), gpio_reg);
1753 gpio_reg = in32(GPIO_TS(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2));
1754 gpio_reg = gpio_reg | (GPIO_ALT2_SEL >> (j*2));
1755 out32(GPIO_TS(gpio_core_add+reg_offset), gpio_reg);
1756 break;
1757 case GPIO_ALT3:
1758 gpio_reg = in32(GPIO_OS(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2));
1759 gpio_reg = gpio_reg | (GPIO_ALT3_SEL >> (j*2));
1760 out32(GPIO_OS(gpio_core_add+reg_offset), gpio_reg);
1761 gpio_reg = in32(GPIO_TS(gpio_core_add+reg_offset)) & ~(GPIO_MASK >> (j*2));
1762 gpio_reg = gpio_reg | (GPIO_ALT3_SEL >> (j*2));
1763 out32(GPIO_TS(gpio_core_add+reg_offset), gpio_reg);
1764 break;
1765 }
1766 }
1767 }
1768 }
1769
1770 /*----------------------------------------------------------------------------+
1771 | force_bup_core_selection.
1772 +----------------------------------------------------------------------------*/
1773 void force_bup_core_selection(core_selection_t *core_select_P, config_validity_t *config_val_P)
1774 {
1775 /* Pointer invalid */
1776 if (core_select_P == NULL)
1777 {
1778 printf("Configuration invalid pointer 1\n");
1779 for (;;)
1780 ;
1781 }
1782
1783 /* L4 Selection */
1784 *(core_select_P+UART_CORE0) = CORE_SELECTED;
1785 *(core_select_P+UART_CORE1) = CORE_SELECTED;
1786 *(core_select_P+UART_CORE2) = CORE_SELECTED;
1787 *(core_select_P+UART_CORE3) = CORE_SELECTED;
1788
1789 /* RMII Selection */
1790 *(core_select_P+RMII_SEL) = CORE_SELECTED;
1791
1792 /* External Interrupt 0-9 selection */
1793 *(core_select_P+UIC_0_3) = CORE_SELECTED;
1794 *(core_select_P+UIC_4_9) = CORE_SELECTED;
1795
1796 *(core_select_P+SCP_CORE) = CORE_SELECTED;
1797 *(core_select_P+DMA_CHANNEL_CD) = CORE_SELECTED;
1798 *(core_select_P+PACKET_REJ_FUNC_AVAIL) = CORE_SELECTED;
1799 *(core_select_P+USB1_DEVICE) = CORE_SELECTED;
1800
1801 if (is_nand_selected()) {
1802 *(core_select_P+NAND_FLASH) = CORE_SELECTED;
1803 }
1804
1805 *config_val_P = CONFIG_IS_VALID;
1806
1807 }
1808
1809 /*----------------------------------------------------------------------------+
1810 | configure_ppc440ep_pins.
1811 +----------------------------------------------------------------------------*/
1812 void configure_ppc440ep_pins(void)
1813 {
1814 uart_config_nb_t uart_configuration;
1815 config_validity_t config_val = CONFIG_IS_INVALID;
1816
1817 /* Create Core Selection Table */
1818 core_selection_t ppc440ep_core_selection[MAX_CORE_SELECT_NB] =
1819 {
1820 CORE_NOT_SELECTED, /* IIC_CORE, */
1821 CORE_NOT_SELECTED, /* SPC_CORE, */
1822 CORE_NOT_SELECTED, /* DMA_CHANNEL_AB, */
1823 CORE_NOT_SELECTED, /* UIC_4_9, */
1824 CORE_NOT_SELECTED, /* USB2_HOST, */
1825 CORE_NOT_SELECTED, /* DMA_CHANNEL_CD, */
1826 CORE_NOT_SELECTED, /* USB2_DEVICE, */
1827 CORE_NOT_SELECTED, /* PACKET_REJ_FUNC_AVAIL, */
1828 CORE_NOT_SELECTED, /* USB1_DEVICE, */
1829 CORE_NOT_SELECTED, /* EBC_MASTER, */
1830 CORE_NOT_SELECTED, /* NAND_FLASH, */
1831 CORE_NOT_SELECTED, /* UART_CORE0, */
1832 CORE_NOT_SELECTED, /* UART_CORE1, */
1833 CORE_NOT_SELECTED, /* UART_CORE2, */
1834 CORE_NOT_SELECTED, /* UART_CORE3, */
1835 CORE_NOT_SELECTED, /* MII_SEL, */
1836 CORE_NOT_SELECTED, /* RMII_SEL, */
1837 CORE_NOT_SELECTED, /* SMII_SEL, */
1838 CORE_NOT_SELECTED, /* PACKET_REJ_FUNC_EN */
1839 CORE_NOT_SELECTED, /* UIC_0_3 */
1840 CORE_NOT_SELECTED, /* USB1_HOST */
1841 CORE_NOT_SELECTED /* PCI_PATCH */
1842 };
1843
1844 gpio_param_s gpio_tab[GPIO_GROUP_MAX][GPIO_MAX];
1845
1846 /* Table Default Initialisation + FPGA Access */
1847 init_default_gpio(gpio_tab);
1848 set_chip_gpio_configuration(GPIO0, gpio_tab);
1849 set_chip_gpio_configuration(GPIO1, gpio_tab);
1850
1851 /* Update Table */
1852 force_bup_core_selection(ppc440ep_core_selection, &config_val);
1853 #if 0 /* test-only */
1854 /* If we are running PIBS 1, force known configuration */
1855 update_core_selection_table(ppc440ep_core_selection, &config_val);
1856 #endif
1857
1858 /*----------------------------------------------------------------------------+
1859 | SDR + ios table update + fpga initialization
1860 +----------------------------------------------------------------------------*/
1861 unsigned long sdr0_pfc1 = 0;
1862 unsigned long sdr0_usb0 = 0;
1863 unsigned long sdr0_mfr = 0;
1864
1865 /* PCI Always selected */
1866
1867 /* I2C Selection */
1868 if (ppc440ep_core_selection[IIC_CORE] == CORE_SELECTED)
1869 {
1870 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_SIS_MASK) | SDR0_PFC1_SIS_IIC1_SEL;
1871 iic1_selection_in_fpga();
1872 }
1873
1874 /* SCP Selection */
1875 if (ppc440ep_core_selection[SCP_CORE] == CORE_SELECTED)
1876 {
1877 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_SIS_MASK) | SDR0_PFC1_SIS_SCP_SEL;
1878 scp_selection_in_fpga();
1879 }
1880
1881 /* UIC 0:3 Selection */
1882 if (ppc440ep_core_selection[UIC_0_3] == CORE_SELECTED)
1883 {
1884 update_uic_0_3_irq_ios(gpio_tab);
1885 dma_a_b_unselect_in_fpga();
1886 }
1887
1888 /* UIC 4:9 Selection */
1889 if (ppc440ep_core_selection[UIC_4_9] == CORE_SELECTED)
1890 {
1891 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_DIS_MASK) | SDR0_PFC1_DIS_UICIRQ5_SEL;
1892 update_uic_4_9_irq_ios(gpio_tab);
1893 }
1894
1895 /* DMA AB Selection */
1896 if (ppc440ep_core_selection[DMA_CHANNEL_AB] == CORE_SELECTED)
1897 {
1898 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_DIS_MASK) | SDR0_PFC1_DIS_DMAR_SEL;
1899 update_dma_a_b_ios(gpio_tab);
1900 dma_a_b_selection_in_fpga();
1901 }
1902
1903 /* DMA CD Selection */
1904 if (ppc440ep_core_selection[DMA_CHANNEL_CD] == CORE_SELECTED)
1905 {
1906 update_dma_c_d_ios(gpio_tab);
1907 dma_c_d_selection_in_fpga();
1908 }
1909
1910 /* EBC Master Selection */
1911 if (ppc440ep_core_selection[EBC_MASTER] == CORE_SELECTED)
1912 {
1913 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_ERE_MASK) | SDR0_PFC1_ERE_EXTR_SEL;
1914 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_UES_MASK) | SDR0_PFC1_UES_EBCHR_SEL;
1915 update_ebc_master_ios(gpio_tab);
1916 }
1917
1918 /* PCI Patch Enable */
1919 if (ppc440ep_core_selection[PCI_PATCH] == CORE_SELECTED)
1920 {
1921 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_UES_MASK) | SDR0_PFC1_UES_EBCHR_SEL;
1922 update_pci_patch_ios(gpio_tab);
1923 }
1924
1925 /* USB2 Host Selection - Not Implemented in PowerPC 440EP Pass1 */
1926 if (ppc440ep_core_selection[USB2_HOST] == CORE_SELECTED)
1927 {
1928 /* Not Implemented in PowerPC 440EP Pass1-Pass2 */
1929 printf("Invalid configuration => USB2 Host selected\n");
1930 for (;;)
1931 ;
1932 /*usb2_host_selection_in_fpga(); */
1933 }
1934
1935 /* USB2.0 Device Selection */
1936 if (ppc440ep_core_selection[USB2_DEVICE] == CORE_SELECTED)
1937 {
1938 update_usb2_device_ios(gpio_tab);
1939 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_UES_MASK) | SDR0_PFC1_UES_USB2D_SEL;
1940 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_UPR_MASK) | SDR0_PFC1_UPR_DISABLE;
1941
1942 mfsdr(sdr_usb0, sdr0_usb0);
1943 sdr0_usb0 = sdr0_usb0 &~SDR0_USB0_USB_DEVSEL_MASK;
1944 sdr0_usb0 = sdr0_usb0 | SDR0_USB0_USB20D_DEVSEL;
1945 mtsdr(sdr_usb0, sdr0_usb0);
1946
1947 usb2_device_selection_in_fpga();
1948 }
1949
1950 /* USB1.1 Device Selection */
1951 if (ppc440ep_core_selection[USB1_DEVICE] == CORE_SELECTED)
1952 {
1953 mfsdr(sdr_usb0, sdr0_usb0);
1954 sdr0_usb0 = sdr0_usb0 &~SDR0_USB0_USB_DEVSEL_MASK;
1955 sdr0_usb0 = sdr0_usb0 | SDR0_USB0_USB11D_DEVSEL;
1956 mtsdr(sdr_usb0, sdr0_usb0);
1957 }
1958
1959 /* USB1.1 Host Selection */
1960 if (ppc440ep_core_selection[USB1_HOST] == CORE_SELECTED)
1961 {
1962 mfsdr(sdr_usb0, sdr0_usb0);
1963 sdr0_usb0 = sdr0_usb0 &~SDR0_USB0_LEEN_MASK;
1964 sdr0_usb0 = sdr0_usb0 | SDR0_USB0_LEEN_ENABLE;
1965 mtsdr(sdr_usb0, sdr0_usb0);
1966 }
1967
1968 /* NAND Flash Selection */
1969 if (ppc440ep_core_selection[NAND_FLASH] == CORE_SELECTED)
1970 {
1971 update_ndfc_ios(gpio_tab);
1972
1973 #if !(defined(CONFIG_NAND_U_BOOT) || defined(CONFIG_NAND_SPL))
1974 mtsdr(sdr_cust0, SDR0_CUST0_MUX_NDFC_SEL |
1975 SDR0_CUST0_NDFC_ENABLE |
1976 SDR0_CUST0_NDFC_BW_8_BIT |
1977 SDR0_CUST0_NDFC_ARE_MASK |
1978 SDR0_CUST0_CHIPSELGAT_EN1 |
1979 SDR0_CUST0_CHIPSELGAT_EN2);
1980 #else
1981 mtsdr(sdr_cust0, SDR0_CUST0_MUX_NDFC_SEL |
1982 SDR0_CUST0_NDFC_ENABLE |
1983 SDR0_CUST0_NDFC_BW_8_BIT |
1984 SDR0_CUST0_NDFC_ARE_MASK |
1985 SDR0_CUST0_CHIPSELGAT_EN0 |
1986 SDR0_CUST0_CHIPSELGAT_EN2);
1987 #endif
1988
1989 ndfc_selection_in_fpga();
1990 }
1991 else
1992 {
1993 /* Set Mux on EMAC */
1994 mtsdr(sdr_cust0, SDR0_CUST0_MUX_EMAC_SEL);
1995 }
1996
1997 /* MII Selection */
1998 if (ppc440ep_core_selection[MII_SEL] == CORE_SELECTED)
1999 {
2000 update_zii_ios(gpio_tab);
2001 mfsdr(sdr_mfr, sdr0_mfr);
2002 sdr0_mfr = (sdr0_mfr & ~SDR0_MFR_ZMII_MODE_MASK) | SDR0_MFR_ZMII_MODE_MII;
2003 mtsdr(sdr_mfr, sdr0_mfr);
2004
2005 set_phy_configuration_through_fpga(ZMII_CONFIGURATION_IS_MII);
2006 }
2007
2008 /* RMII Selection */
2009 if (ppc440ep_core_selection[RMII_SEL] == CORE_SELECTED)
2010 {
2011 update_zii_ios(gpio_tab);
2012 mfsdr(sdr_mfr, sdr0_mfr);
2013 sdr0_mfr = (sdr0_mfr & ~SDR0_MFR_ZMII_MODE_MASK) | SDR0_MFR_ZMII_MODE_RMII_10M;
2014 mtsdr(sdr_mfr, sdr0_mfr);
2015
2016 set_phy_configuration_through_fpga(ZMII_CONFIGURATION_IS_RMII);
2017 }
2018
2019 /* SMII Selection */
2020 if (ppc440ep_core_selection[SMII_SEL] == CORE_SELECTED)
2021 {
2022 update_zii_ios(gpio_tab);
2023 mfsdr(sdr_mfr, sdr0_mfr);
2024 sdr0_mfr = (sdr0_mfr & ~SDR0_MFR_ZMII_MODE_MASK) | SDR0_MFR_ZMII_MODE_SMII;
2025 mtsdr(sdr_mfr, sdr0_mfr);
2026
2027 set_phy_configuration_through_fpga(ZMII_CONFIGURATION_IS_SMII);
2028 }
2029
2030 /* UART Selection */
2031 uart_configuration = get_uart_configuration();
2032 switch (uart_configuration)
2033 {
2034 case L1: /* L1 Selection */
2035 /* UART0 8 pins Only */
2036 /*sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U0ME_MASK) | SDR0_PFC1_U0ME_DSR_DTR; */
2037 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U0ME_MASK) |SDR0_PFC1_U0ME_CTS_RTS; /* Chip Pb */
2038 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U0IM_MASK) | SDR0_PFC1_U0IM_8PINS;
2039 break;
2040 case L2: /* L2 Selection */
2041 /* UART0 and UART1 4 pins */
2042 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U0ME_MASK) | SDR0_PFC1_U1ME_DSR_DTR;
2043 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U0IM_MASK) | SDR0_PFC1_U0IM_4PINS;
2044 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U1ME_MASK) | SDR0_PFC1_U1ME_DSR_DTR;
2045 break;
2046 case L3: /* L3 Selection */
2047 /* UART0 4 pins, UART1 and UART2 2 pins */
2048 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U0ME_MASK) | SDR0_PFC1_U1ME_DSR_DTR;
2049 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U0IM_MASK) | SDR0_PFC1_U0IM_4PINS;
2050 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U1ME_MASK) | SDR0_PFC1_U1ME_DSR_DTR;
2051 break;
2052 case L4: /* L4 Selection */
2053 /* UART0, UART1, UART2 and UART3 2 pins */
2054 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U0ME_MASK) | SDR0_PFC1_U0ME_DSR_DTR;
2055 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U0IM_MASK) | SDR0_PFC1_U0IM_4PINS;
2056 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_U1ME_MASK) | SDR0_PFC1_U1ME_DSR_DTR;
2057 break;
2058 }
2059 update_uart_ios(uart_configuration, gpio_tab);
2060
2061 /* UART Selection in all cases */
2062 uart_selection_in_fpga(uart_configuration);
2063
2064 /* Packet Reject Function Available */
2065 if (ppc440ep_core_selection[PACKET_REJ_FUNC_AVAIL] == CORE_SELECTED)
2066 {
2067 /* Set UPR Bit in SDR0_PFC1 Register */
2068 sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_UPR_MASK) | SDR0_PFC1_UPR_ENABLE;
2069 }
2070
2071 /* Packet Reject Function Enable */
2072 if (ppc440ep_core_selection[PACKET_REJ_FUNC_EN] == CORE_SELECTED)
2073 {
2074 mfsdr(sdr_mfr, sdr0_mfr);
2075 sdr0_mfr = (sdr0_mfr & ~SDR0_MFR_PKT_REJ_MASK) | SDR0_MFR_PKT_REJ_EN;;
2076 mtsdr(sdr_mfr, sdr0_mfr);
2077 }
2078
2079 /* Perform effective access to hardware */
2080 mtsdr(sdr_pfc1, sdr0_pfc1);
2081 set_chip_gpio_configuration(GPIO0, gpio_tab);
2082 set_chip_gpio_configuration(GPIO1, gpio_tab);
2083
2084 /* USB2.0 Device Reset must be done after GPIO setting */
2085 if (ppc440ep_core_selection[USB2_DEVICE] == CORE_SELECTED)
2086 usb2_device_reset_through_fpga();
2087
2088 }