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