diff options
| author | Dirk Eibach <eibach@gdsys.de> | 2011-10-20 11:12:55 +0200 | 
|---|---|---|
| committer | Stefan Roese <sr@denx.de> | 2011-12-01 09:10:57 +0100 | 
| commit | 255ef4d9091fe896ff152629a8cb290ee92c9fde (patch) | |
| tree | 4cd49edfd10397a89e5cab891c2ac4c461fbe350 | |
| parent | a6569c63b368efeff262e11586319b8c8515ca00 (diff) | |
| download | olio-uboot-2014.01-255ef4d9091fe896ff152629a8cb290ee92c9fde.tar.xz olio-uboot-2014.01-255ef4d9091fe896ff152629a8cb290ee92c9fde.zip | |
ppc4xx: Add Io64 board support
Board support for the Guntermann & Drunck Io64.
Signed-off-by: Dirk Eibach <eibach@gdsys.de>
Signed-off-by: Stefan Roese <sr@denx.de>
| -rw-r--r-- | MAINTAINERS | 1 | ||||
| -rw-r--r-- | board/gdsys/405ex/405ex.c | 250 | ||||
| -rw-r--r-- | board/gdsys/405ex/405ex.h | 10 | ||||
| -rw-r--r-- | board/gdsys/405ex/Makefile | 53 | ||||
| -rw-r--r-- | board/gdsys/405ex/chip_config.c | 96 | ||||
| -rw-r--r-- | board/gdsys/405ex/io64.c | 384 | ||||
| -rw-r--r-- | board/gdsys/common/Makefile | 1 | ||||
| -rw-r--r-- | board/gdsys/common/miiphybb.c | 58 | ||||
| -rw-r--r-- | boards.cfg | 1 | ||||
| -rw-r--r-- | include/configs/io64.h | 566 | ||||
| -rw-r--r-- | include/gdsys_fpga.h | 19 | 
11 files changed, 1431 insertions, 8 deletions
| diff --git a/MAINTAINERS b/MAINTAINERS index c68842e03..7c219815e 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -150,6 +150,7 @@ Dirk Eibach <eibach@gdsys.de>  	gdppc440etx	PPC440EP/GR  	intip		PPC460EX  	io		PPC405EP +	io64		PPC405EX  	iocon		PPC405EP  	neo		PPC405EP diff --git a/board/gdsys/405ex/405ex.c b/board/gdsys/405ex/405ex.c new file mode 100644 index 000000000..0d25214f4 --- /dev/null +++ b/board/gdsys/405ex/405ex.c @@ -0,0 +1,250 @@ +#include <common.h> +#include <asm/ppc4xx.h> +#include <asm/ppc405.h> +#include <asm/processor.h> +#include <asm/io.h> + +#include <gdsys_fpga.h> + +#include "405ex.h" + +#define REFLECTION_TESTPATTERN 0xdede +#define REFLECTION_TESTPATTERN_INV (~REFLECTION_TESTPATTERN & 0xffff) + +DECLARE_GLOBAL_DATA_PTR; + +int get_fpga_state(unsigned dev) +{ +	return gd->fpga_state[dev]; +} + +void print_fpga_state(unsigned dev) +{ +	if (gd->fpga_state[dev] & FPGA_STATE_DONE_FAILED) +		puts("       Waiting for FPGA-DONE timed out.\n"); +	if (gd->fpga_state[dev] & FPGA_STATE_REFLECTION_FAILED) +		puts("       FPGA reflection test failed.\n"); +} + +int board_early_init_f(void) +{ +	u32 val; + +	/*--------------------------------------------------------------------+ +	 | Interrupt controller setup +	 +--------------------------------------------------------------------+ +	+---------------------------------------------------------------------+ +	|Interrupt| Source                            | Pol.  | Sensi.| Crit. | +	+---------+-----------------------------------+-------+-------+-------+ +	| IRQ 00  | UART0                             | High  | Level | Non   | +	| IRQ 01  | UART1                             | High  | Level | Non   | +	| IRQ 02  | IIC0                              | High  | Level | Non   | +	| IRQ 03  | TBD                               | High  | Level | Non   | +	| IRQ 04  | TBD                               | High  | Level | Non   | +	| IRQ 05  | EBM                               | High  | Level | Non   | +	| IRQ 06  | BGI                               | High  | Level | Non   | +	| IRQ 07  | IIC1                              | Rising| Edge  | Non   | +	| IRQ 08  | SPI                               | High  | Lvl/ed| Non   | +	| IRQ 09  | External IRQ 0 - (PCI-Express)    | pgm H | Pgm   | Non   | +	| IRQ 10  | MAL TX EOB                        | High  | Level | Non   | +	| IRQ 11  | MAL RX EOB                        | High  | Level | Non   | +	| IRQ 12  | DMA Channel 0 FIFO Full           | High  | Level | Non   | +	| IRQ 13  | DMA Channel 0 Stat FIFO           | High  | Level | Non   | +	| IRQ 14  | DMA Channel 1 FIFO Full           | High  | Level | Non   | +	| IRQ 15  | DMA Channel 1 Stat FIFO           | High  | Level | Non   | +	| IRQ 16  | PCIE0 AL                          | high  | Level | Non   | +	| IRQ 17  | PCIE0 VPD access                  | rising| Edge  | Non   | +	| IRQ 18  | PCIE0 hot reset request           | rising| Edge  | Non   | +	| IRQ 19  | PCIE0 hot reset request           | faling| Edge  | Non   | +	| IRQ 20  | PCIE0 TCR                         | High  | Level | Non   | +	| IRQ 21  | PCIE0 MSI level0                  | High  | Level | Non   | +	| IRQ 22  | PCIE0 MSI level1                  | High  | Level | Non   | +	| IRQ 23  | Security EIP-94                   | High  | Level | Non   | +	| IRQ 24  | EMAC0 interrupt                   | High  | Level | Non   | +	| IRQ 25  | EMAC1 interrupt                   | High  | Level | Non   | +	| IRQ 26  | PCIE0 MSI level2                  | High  | Level | Non   | +	| IRQ 27  | External IRQ 4                    | pgm H | Pgm   | Non   | +	| IRQ 28  | UIC2 Non-critical Int.            | High  | Level | Non   | +	| IRQ 29  | UIC2 Critical Interrupt           | High  | Level | Crit. | +	| IRQ 30  | UIC1 Non-critical Int.            | High  | Level | Non   | +	| IRQ 31  | UIC1 Critical Interrupt           | High  | Level | Crit. | +	|---------------------------------------------------------------------- +	| IRQ 32  | MAL Serr                          | High  | Level | Non   | +	| IRQ 33  | MAL Txde                          | High  | Level | Non   | +	| IRQ 34  | MAL Rxde                          | High  | Level | Non   | +	| IRQ 35  | PCIE0 bus master VC0              |falling| Edge  | Non   | +	| IRQ 36  | PCIE0 DCR Error                   | High  | Level | Non   | +	| IRQ 37  | EBC                               | High  |Lvl Edg| Non   | +	| IRQ 38  | NDFC                              | High  | Level | Non   | +	| IRQ 39  | GPT Compare Timer 8               | Risin | Edge  | Non   | +	| IRQ 40  | GPT Compare Timer 9               | Risin | Edge  | Non   | +	| IRQ 41  | PCIE1 AL                          | high  | Level | Non   | +	| IRQ 42  | PCIE1 VPD access                  | rising| edge  | Non   | +	| IRQ 43  | PCIE1 hot reset request           | rising| Edge  | Non   | +	| IRQ 44  | PCIE1 hot reset request           | faling| Edge  | Non   | +	| IRQ 45  | PCIE1 TCR                         | High  | Level | Non   | +	| IRQ 46  | PCIE1 bus master VC0              |falling| Edge  | Non   | +	| IRQ 47  | GPT Compare Timer 3               | Risin | Edge  | Non   | +	| IRQ 48  | GPT Compare Timer 4               | Risin | Edge  | Non   | +	| IRQ 49  | Ext. IRQ 7                        |pgm/Fal|pgm/Lvl| Non   | +	| IRQ 50  | Ext. IRQ 8 -                      |pgm (H)|pgm/Lvl| Non   | +	| IRQ 51  | Ext. IRQ 9                        |pgm (H)|pgm/Lvl| Non   | +	| IRQ 52  | GPT Compare Timer 5               | high  | Edge  | Non   | +	| IRQ 53  | GPT Compare Timer 6               | high  | Edge  | Non   | +	| IRQ 54  | GPT Compare Timer 7               | high  | Edge  | Non   | +	| IRQ 55  | Serial ROM                        | High  | Level | Non   | +	| IRQ 56  | GPT Decrement Pulse               | High  | Level | Non   | +	| IRQ 57  | Ext. IRQ 2                        |pgm/Fal|pgm/Lvl| Non   | +	| IRQ 58  | Ext. IRQ 5                        |pgm/Fal|pgm/Lvl| Non   | +	| IRQ 59  | Ext. IRQ 6                        |pgm/Fal|pgm/Lvl| Non   | +	| IRQ 60  | EMAC0 Wake-up                     | High  | Level | Non   | +	| IRQ 61  | Ext. IRQ 1                        |pgm/Fal|pgm/Lvl| Non   | +	| IRQ 62  | EMAC1 Wake-up                     | High  | Level | Non   | +	|---------------------------------------------------------------------- +	| IRQ 64  | PE0 AL                            | High  | Level | Non   | +	| IRQ 65  | PE0 VPD Access                    | Risin | Edge  | Non   | +	| IRQ 66  | PE0 Hot Reset Request             | Risin | Edge  | Non   | +	| IRQ 67  | PE0 Hot Reset Request             | Falli | Edge  | Non   | +	| IRQ 68  | PE0 TCR                           | High  | Level | Non   | +	| IRQ 69  | PE0 BusMaster VCO                 | Falli | Edge  | Non   | +	| IRQ 70  | PE0 DCR Error                     | High  | Level | Non   | +	| IRQ 71  | Reserved                          | N/A   | N/A   | Non   | +	| IRQ 72  | PE1 AL                            | High  | Level | Non   | +	| IRQ 73  | PE1 VPD Access                    | Risin | Edge  | Non   | +	| IRQ 74  | PE1 Hot Reset Request             | Risin | Edge  | Non   | +	| IRQ 75  | PE1 Hot Reset Request             | Falli | Edge  | Non   | +	| IRQ 76  | PE1 TCR                           | High  | Level | Non   | +	| IRQ 77  | PE1 BusMaster VCO                 | Falli | Edge  | Non   | +	| IRQ 78  | PE1 DCR Error                     | High  | Level | Non   | +	| IRQ 79  | Reserved                          | N/A   | N/A   | Non   | +	| IRQ 80  | PE2 AL                            | High  | Level | Non   | +	| IRQ 81  | PE2 VPD Access                    | Risin | Edge  | Non   | +	| IRQ 82  | PE2 Hot Reset Request             | Risin | Edge  | Non   | +	| IRQ 83  | PE2 Hot Reset Request             | Falli | Edge  | Non   | +	| IRQ 84  | PE2 TCR                           | High  | Level | Non   | +	| IRQ 85  | PE2 BusMaster VCO                 | Falli | Edge  | Non   | +	| IRQ 86  | PE2 DCR Error                     | High  | Level | Non   | +	| IRQ 87  | Reserved                          | N/A   | N/A   | Non   | +	| IRQ 88  | External IRQ(5)                   | Progr | Progr | Non   | +	| IRQ 89  | External IRQ 4 - Ethernet         | Progr | Progr | Non   | +	| IRQ 90  | External IRQ 3 - PCI-X            | Progr | Progr | Non   | +	| IRQ 91  | External IRQ 2 - PCI-X            | Progr | Progr | Non   | +	| IRQ 92  | External IRQ 1 - PCI-X            | Progr | Progr | Non   | +	| IRQ 93  | External IRQ 0 - PCI-X            | Progr | Progr | Non   | +	| IRQ 94  | Reserved                          | N/A   | N/A   | Non   | +	| IRQ 95  | Reserved                          | N/A   | N/A   | Non   | +	|--------------------------------------------------------------------- +	+---------+-----------------------------------+-------+-------+------*/ +	/*--------------------------------------------------------------------+ +	 | Initialise UIC registers.  Clear all interrupts.  Disable all +	 | interrupts. +	 | Set critical interrupt values.  Set interrupt polarities.  Set +	 | interrupt trigger levels.  Make bit 0 High  priority.  Clear all +	 | interrupts again. +	 +-------------------------------------------------------------------*/ + +	mtdcr(UIC2SR, 0xffffffff); /* Clear all interrupts */ +	mtdcr(UIC2ER, 0x00000000); /* disable all interrupts */ +	mtdcr(UIC2CR, 0x00000000); /* Set Critical / Non Critical interrupts */ +	mtdcr(UIC2PR, 0xf7ffffff); /* Set Interrupt Polarities */ +	mtdcr(UIC2TR, 0x01e1fff8); /* Set Interrupt Trigger Levels */ +	mtdcr(UIC2VR, 0x00000001); /* Set Vect base=0,INT31 Highest priority */ +	mtdcr(UIC2SR, 0x00000000); /* clear all interrupts */ +	mtdcr(UIC2SR, 0xffffffff); /* clear all interrupts */ + +	mtdcr(UIC1SR, 0xffffffff); /* Clear all interrupts */ +	mtdcr(UIC1ER, 0x00000000); /* disable all interrupts */ +	mtdcr(UIC1CR, 0x00000000); /* Set Critical / Non Critical interrupts */ +	mtdcr(UIC1PR, 0xfffac785); /* Set Interrupt Polarities */ +	mtdcr(UIC1TR, 0x001d0040); /* Set Interrupt Trigger Levels */ +	mtdcr(UIC1VR, 0x00000001); /* Set Vect base=0,INT31 Highest priority */ +	mtdcr(UIC1SR, 0x00000000); /* clear all interrupts */ +	mtdcr(UIC1SR, 0xffffffff); /* clear all interrupts */ + +	mtdcr(UIC0SR, 0xffffffff); /* Clear all interrupts */ +	mtdcr(UIC0ER, 0x0000000a); /* Disable all interrupts */ +				   /* Except cascade UIC0 and UIC1 */ +	mtdcr(UIC0CR, 0x00000000); /* Set Critical / Non Critical interrupts */ +	mtdcr(UIC0PR, 0xffbfefef); /* Set Interrupt Polarities */ +	mtdcr(UIC0TR, 0x00007000); /* Set Interrupt Trigger Levels */ +	mtdcr(UIC0VR, 0x00000001); /* Set Vect base=0,INT31 Highest priority */ +	mtdcr(UIC0SR, 0x00000000); /* clear all interrupts */ +	mtdcr(UIC0SR, 0xffffffff); /* clear all interrupts */ + +	/* +	 * Note: Some cores are still in reset when the chip starts, so +	 * take them out of reset +	 */ +	mtsdr(SDR0_SRST, 0); + +	/* +	 * Configure PFC (Pin Function Control) registers +	 */ +	val = SDR0_PFC1_GPT_FREQ; +	mtsdr(SDR0_PFC1, val); + +	return 0; +} + +int board_early_init_r(void) +{ +	unsigned k; +	unsigned ctr; + +	for (k = 0; k < CONFIG_SYS_FPGA_COUNT; ++k) +		gd->fpga_state[k] = 0; + +	/* +	 * reset FPGA +	 */ +	gd405ex_init(); + +	gd405ex_set_fpga_reset(1); + +	gd405ex_setup_hw(); + +	for (k = 0; k < CONFIG_SYS_FPGA_COUNT; ++k) { +		ctr = 0; +		while (!gd405ex_get_fpga_done(k)) { +			udelay(100000); +			if (ctr++ > 5) { +				gd->fpga_state[k] |= FPGA_STATE_DONE_FAILED; +				break; +			} +		} +	} + +	udelay(10); + +	gd405ex_set_fpga_reset(0); + +	for (k = 0; k < CONFIG_SYS_FPGA_COUNT; ++k) { +		ihs_fpga_t *fpga = (ihs_fpga_t *) CONFIG_SYS_FPGA_BASE(k); +#ifdef CONFIG_SYS_FPGA_NO_RFL_HI +		u16 *reflection_target = &fpga->reflection_low; +#else +		u16 *reflection_target = &fpga->reflection_high; +#endif +		/* +		 * wait for fpga out of reset +		 */ +		ctr = 0; +		while (1) { +			out_le16(&fpga->reflection_low, +				REFLECTION_TESTPATTERN); + +			if (in_le16(reflection_target) == +				REFLECTION_TESTPATTERN_INV) +				break; + +			udelay(100000); +			if (ctr++ > 5) { +				gd->fpga_state[k] |= +					FPGA_STATE_REFLECTION_FAILED; +				break; +			} +		} +	} + +	return 0; +} diff --git a/board/gdsys/405ex/405ex.h b/board/gdsys/405ex/405ex.h new file mode 100644 index 000000000..b15623f3f --- /dev/null +++ b/board/gdsys/405ex/405ex.h @@ -0,0 +1,10 @@ +#ifndef __405EX_H_ +#define __405EX_H_ + +/* functions to be provided by board implementation */ +void gd405ex_init(void); +void gd405ex_set_fpga_reset(unsigned state); +void gd405ex_setup_hw(void); +int gd405ex_get_fpga_done(unsigned fpga); + +#endif /* __405EX_H_ */ diff --git a/board/gdsys/405ex/Makefile b/board/gdsys/405ex/Makefile new file mode 100644 index 000000000..4549705e5 --- /dev/null +++ b/board/gdsys/405ex/Makefile @@ -0,0 +1,53 @@ +# +# (C) Copyright 2007 +# Stefan Roese, DENX Software Engineering, sr@denx.de. +# +# See file CREDITS for list of people who contributed to this +# project. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# + +include $(TOPDIR)/config.mk + +LIB	= $(obj)lib$(BOARD).o + +COBJS-$(CONFIG_IO64) += io64.o + +COBJS-$(CONFIG_CMD_CHIP_CONFIG) += chip_config.o + +COBJS   := $(BOARD).o $(COBJS-y) + +SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c) +OBJS	:= $(addprefix $(obj),$(SOBJS) $(COBJS)) + +$(LIB):	$(obj).depend $(OBJS) +	$(call cmd_link_o_target, $(OBJS)) + +clean: +	rm -f $(OBJS) + +distclean:	clean +	rm -f $(LIB) core *.bak $(obj).depend + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/board/gdsys/405ex/chip_config.c b/board/gdsys/405ex/chip_config.c new file mode 100644 index 000000000..12cb3bf16 --- /dev/null +++ b/board/gdsys/405ex/chip_config.c @@ -0,0 +1,96 @@ +/* + * (C) Copyright 2009 + * Stefan Roese, DENX Software Engineering, sr@denx.de. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + */ + +#include <common.h> +#include <asm/ppc4xx_config.h> + +/* NAND booting versions differ in bytes: 6, 8, 9, 11, 12 */ + +struct ppc4xx_config ppc4xx_config_val[] = { +	{ +		"333-nor", "NOR  CPU: 333 PLB: 166 OPB:  83 EBC:  83", +		{ +			0x8c, 0x12, 0xec, 0x12, 0x98, 0x00, 0x0a, 0x00, +			0x40, 0x08, 0x23, 0x50, 0x00, 0x05, 0x00, 0x00 +		} +	}, +	{ +		"400-133-nor", "NOR  CPU: 400 PLB: 133 OPB:  66 EBC:  66", +		{ +			0x8e, 0x0e, 0xe8, 0x13, 0x98, 0x00, 0x0a, 0x00, +			0x40, 0x08, 0x23, 0x50, 0x00, 0x05, 0x00, 0x00 +		} +	}, +	{ +		"400-200-66-nor", "NOR  CPU: 400 PLB: 200 OPB:  66 EBC:  66", +		{ +			0x8e, 0x0e, 0xe8, 0x12, 0xd8, 0x00, 0x0a, 0x00, +			0x40, 0x08, 0x23, 0x50, 0x00, 0x05, 0x00, 0x00 +		} +	}, +	{ +		"400-nor", "NOR  CPU: 400 PLB: 200 OPB: 100 EBC: 100", +		{ +			0x8e, 0x0e, 0xe8, 0x12, 0x98, 0x00, 0x0a, 0x00, +			0x40, 0x08, 0x23, 0x50, 0x00, 0x05, 0x00, 0x00 +		} +	}, +	{ +		"533-nor", "NOR  CPU: 533 PLB: 177 OPB:  88 EBC:  88", +		{ +			0x8e, 0x43, 0x60, 0x13, 0x98, 0x00, 0x0a, 0x00, +			0x40, 0x08, 0x23, 0x50, 0x00, 0x05, 0x00, 0x00 +		} +	}, +	{ +		"533-nand", "NOR  CPU: 533 PLB: 177 OPB:  88 EBC:  88", +		{ +			0x8e, 0x43, 0x60, 0x13, 0x98, 0x00, 0x0f, 0x00, +			0xa0, 0x68, 0x23, 0x58, 0x0d, 0x05, 0x00, 0x00 +		} +	}, +	{ +		"600-nor", "NOR  CPU: 600 PLB: 200 OPB: 100 EBC: 100", +		{ +			0x8d, 0x02, 0x34, 0x13, 0x98, 0x00, 0x0a, 0x00, +			0x40, 0x08, 0x23, 0x50, 0x00, 0x05, 0x00, 0x00 +		} +	}, +	{ +		"600-nand", "NOR  CPU: 600 PLB: 200 OPB: 100 EBC: 100", +		{ +			0x8d, 0x02, 0x34, 0x13, 0x98, 0x00, 0x0f, 0x00, +			0xa0, 0x68, 0x23, 0x58, 0x0d, 0x05, 0x00, 0x00 +		} +	}, +	{ +		"666-nor", "NOR  CPU: 666 PLB: 222 OPB: 111 EBC: 111", +		{ +			0x8d, 0x03, 0x78, 0x13, 0x98, 0x00, 0x0a, 0x00, +			0x40, 0x08, 0x23, 0x50, 0x00, 0x05, 0x00, 0x00 +		} +	}, +}; + +int ppc4xx_config_count = ARRAY_SIZE(ppc4xx_config_val); diff --git a/board/gdsys/405ex/io64.c b/board/gdsys/405ex/io64.c new file mode 100644 index 000000000..a997571f0 --- /dev/null +++ b/board/gdsys/405ex/io64.c @@ -0,0 +1,384 @@ +/* + * (C) Copyright 2010 + * Dirk Eibach,  Guntermann & Drunck GmbH, eibach@gdsys.de + * + * based on kilauea.c + * by Stefan Roese, DENX Software Engineering, sr@denx.de. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#include <common.h> +#include <asm/ppc4xx.h> +#include <asm/ppc405.h> +#include <libfdt.h> +#include <fdt_support.h> +#include <asm/processor.h> +#include <asm/io.h> +#include <asm/errno.h> +#include <asm/ppc4xx-gpio.h> +#include <flash.h> + +#include <pca9698.h> + +#include "405ex.h" +#include <gdsys_fpga.h> + +#include <miiphy.h> +#include <i2c.h> +#include <dtt.h> + +DECLARE_GLOBAL_DATA_PTR; + +#define PHYREG_CONTROL				0 +#define PHYREG_PAGE_ADDRESS			22 +#define PHYREG_PG0_COPPER_SPECIFIC_CONTROL_1	16 +#define PHYREG_PG2_COPPER_SPECIFIC_CONTROL_2	26 +#define PHYREG_PG2_MAC_SPECIFIC_STATUS_1	17 +#define PHYREG_PG2_MAC_SPECIFIC_CONTROL		21 + +#define LATCH0_BASE (CONFIG_SYS_LATCH_BASE) +#define LATCH1_BASE (CONFIG_SYS_LATCH_BASE + 0x100) +#define LATCH2_BASE (CONFIG_SYS_LATCH_BASE + 0x200) +#define LATCH3_BASE (CONFIG_SYS_LATCH_BASE + 0x300) + +enum { +	UNITTYPE_CCD_SWITCH = 1, +}; + +enum { +	HWVER_100 = 0, +	HWVER_110 = 1, +}; + +static inline void blank_string(int size) +{ +	int i; + +	for (i = 0; i < size; i++) +		putc('\b'); +	for (i = 0; i < size; i++) +		putc(' '); +	for (i = 0; i < size; i++) +		putc('\b'); +} + +/* + * Board early initialization function + */ +int misc_init_r(void) +{ +	/* startup fans */ +	dtt_init(); + +#ifdef CONFIG_ENV_IS_IN_FLASH +	/* Monitor protection ON by default */ +	flash_protect(FLAG_PROTECT_SET, +		      -CONFIG_SYS_MONITOR_LEN, +		      0xffffffff, +		      &flash_info[0]); +#endif + +	return 0; +} + +static void print_fpga_info(unsigned dev) +{ +	ihs_fpga_t *fpga = (ihs_fpga_t *) CONFIG_SYS_FPGA_BASE(dev); +	u16 versions = in_le16(&fpga->versions); +	u16 fpga_version = in_le16(&fpga->fpga_version); +	u16 fpga_features = in_le16(&fpga->fpga_features); +	int fpga_state = get_fpga_state(dev); + +	unsigned unit_type; +	unsigned hardware_version; +	unsigned feature_channels; +	unsigned feature_expansion; + +	printf("FPGA%d: ", dev); +	if (fpga_state & FPGA_STATE_PLATFORM) +		printf("(legacy) "); + +	if (fpga_state & FPGA_STATE_DONE_FAILED) { +		printf(" done timed out\n"); +		return; +	} + +	if (fpga_state & FPGA_STATE_REFLECTION_FAILED) { +		printf(" refelectione test failed\n"); +		return; +	} + +	unit_type = (versions & 0xf000) >> 12; +	hardware_version = versions & 0x000f; +	feature_channels = fpga_features & 0x007f; +	feature_expansion = fpga_features & (1<<15); + +	switch (unit_type) { +	case UNITTYPE_CCD_SWITCH: +		printf("CCD-Switch"); +		break; + +	default: +		printf("UnitType %d(not supported)", unit_type); +		break; +	} + +	switch (hardware_version) { +	case HWVER_100: +		printf(" HW-Ver 1.00\n"); +		break; + +	case HWVER_110: +		printf(" HW-Ver 1.10\n"); +		break; + +	default: +		printf(" HW-Ver %d(not supported)\n", +		       hardware_version); +		break; +	} + +	printf("       FPGA V %d.%02d, features:", +		fpga_version / 100, fpga_version % 100); + +	printf(" %d channel(s)", feature_channels); + +	printf(", expansion %ssupported\n", feature_expansion ? "" : "un"); +} + +int checkboard(void) +{ +	char *s = getenv("serial#"); + +	printf("Board: CATCenter Io64\n"); + +	if (s != NULL) { +		puts(", serial# "); +		puts(s); +	} + +	return 0; +} + +int configure_gbit_phy(char *bus, unsigned char addr) +{ +	unsigned short value; + +	/* select page 0 */ +	if (miiphy_write(bus, addr, PHYREG_PAGE_ADDRESS, 0x0000)) +		goto err_out; +	/* switch to powerdown */ +	if (miiphy_read(bus, addr, PHYREG_PG0_COPPER_SPECIFIC_CONTROL_1, +		&value)) +		goto err_out; +	if (miiphy_write(bus, addr, PHYREG_PG0_COPPER_SPECIFIC_CONTROL_1, +		value | 0x0004)) +		goto err_out; +	/* select page 2 */ +	if (miiphy_write(bus, addr, PHYREG_PAGE_ADDRESS, 0x0002)) +		goto err_out; +	/* disable SGMII autonegotiation */ +	if (miiphy_write(bus, addr, PHYREG_PG2_MAC_SPECIFIC_CONTROL, 48)) +		goto err_out; +	/* select page 0 */ +	if (miiphy_write(bus, addr, PHYREG_PAGE_ADDRESS, 0x0000)) +		goto err_out; +	/* switch from powerdown to normal operation */ +	if (miiphy_read(bus, addr, PHYREG_PG0_COPPER_SPECIFIC_CONTROL_1, +		&value)) +		goto err_out; +	if (miiphy_write(bus, addr, PHYREG_PG0_COPPER_SPECIFIC_CONTROL_1, +		value & ~0x0004)) +		goto err_out; +	/* reset phy so settings take effect */ +	if (miiphy_write(bus, addr, PHYREG_CONTROL, 0x9140)) +		goto err_out; + +	return 0; + +err_out: +	printf("Error writing to the PHY addr=%02x\n", addr); +	return -1; +} + +int verify_gbit_phy(char *bus, unsigned char addr) +{ +	unsigned short value; + +	/* select page 2 */ +	if (miiphy_write(bus, addr, PHYREG_PAGE_ADDRESS, 0x0002)) +		goto err_out; +	/* verify SGMII link status */ +	if (miiphy_read(bus, addr, PHYREG_PG2_MAC_SPECIFIC_STATUS_1, &value)) +		goto err_out; +	if (!(value & (1 << 10))) +		return -2; + +	return 0; + +err_out: +	printf("Error writing to the PHY addr=%02x\n", addr); +	return -1; +} + +int last_stage_init(void) +{ +	unsigned int k; +	unsigned int fpga; +	ihs_fpga_t *fpga0 = (ihs_fpga_t *) CONFIG_SYS_FPGA_BASE(0); +	ihs_fpga_t *fpga1 = (ihs_fpga_t *) CONFIG_SYS_FPGA_BASE(1); +	int failed = 0; +	char str_phys[] = "Setup PHYs -"; +	char str_serdes[] = "Start SERDES blocks"; +	char str_channels[] = "Start FPGA channels"; +	char str_locks[] = "Verify SERDES locks"; +	char str_status[] = "Verify PHY status -"; +	char slash[] = "\\|/-\\|/-"; + +	print_fpga_info(0); +	print_fpga_info(1); + +	/* setup Gbit PHYs */ +	puts("TRANS: "); +	puts(str_phys); +	miiphy_register(CONFIG_SYS_GBIT_MII_BUSNAME, +		bb_miiphy_read, bb_miiphy_write); + +	for (k = 0; k < 32; ++k) { +		configure_gbit_phy(CONFIG_SYS_GBIT_MII_BUSNAME, k); +		putc('\b'); +		putc(slash[k % 8]); +	} + +	miiphy_register(CONFIG_SYS_GBIT_MII1_BUSNAME, +		bb_miiphy_read, bb_miiphy_write); + +	for (k = 0; k < 32; ++k) { +		configure_gbit_phy(CONFIG_SYS_GBIT_MII1_BUSNAME, k); +		putc('\b'); +		putc(slash[k % 8]); +	} +	blank_string(strlen(str_phys)); + +	/* take fpga serdes blocks out of reset */ +	puts(str_serdes); +	udelay(500000); +	out_le16(&fpga0->quad_serdes_reset, 0); +	out_le16(&fpga1->quad_serdes_reset, 0); +	blank_string(strlen(str_serdes)); + +	/* take channels out of reset */ +	puts(str_channels); +	udelay(500000); +	for (fpga = 0; fpga < 2; ++fpga) { +		u16 *ch0_config_int = &(fpga ? fpga1 : fpga0)->ch0_config_int; +		for (k = 0; k < 32; ++k) +			out_le16(ch0_config_int + 4 * k, 0); +	} +	blank_string(strlen(str_channels)); + +	/* verify channels serdes lock */ +	puts(str_locks); +	udelay(500000); +	for (fpga = 0; fpga < 2; ++fpga) { +		u16 *ch0_status_int = &(fpga ? fpga1 : fpga0)->ch0_status_int; +		for (k = 0; k < 32; ++k) { +			u16 status = in_le16(ch0_status_int + 4*k); +			if (!(status & (1 << 4))) { +				failed = 1; +				printf("fpga %d channel %d: no serdes lock\n", +					fpga, k); +			} +			/* reset events */ +			out_le16(ch0_status_int + 4*k, status); +		} +	} +	blank_string(strlen(str_locks)); + +	/* verify phy status */ +	puts(str_status); +	for (k = 0; k < 32; ++k) { +		if (verify_gbit_phy(CONFIG_SYS_GBIT_MII_BUSNAME, k)) { +			printf("verify baseboard phy %d failed\n", k); +			failed = 1; +		} +		putc('\b'); +		putc(slash[k % 8]); +	} +	for (k = 0; k < 32; ++k) { +		if (verify_gbit_phy(CONFIG_SYS_GBIT_MII1_BUSNAME, k)) { +			printf("verify extensionboard phy %d failed\n", k); +			failed = 1; +		} +		putc('\b'); +		putc(slash[k % 8]); +	} +	blank_string(strlen(str_status)); + +	printf("Starting 64 channels %s\n", failed ? "failed" : "ok"); + +	return 0; +} + +void gd405ex_init(void) +{ +	unsigned int k; + +	if (i2c_probe(0x22)) { /* i2c_probe returns 0 on success */ +		for (k = 0; k < CONFIG_SYS_FPGA_COUNT; ++k) +			gd->fpga_state[k] |= FPGA_STATE_PLATFORM; +	} else { +		pca9698_direction_output(0x22, 39, 1); +	} +} + +void gd405ex_set_fpga_reset(unsigned state) +{ +	int legacy = get_fpga_state(0) & FPGA_STATE_PLATFORM; + +	if (legacy) { +		if (state) { +			out_le16((void *)LATCH0_BASE, CONFIG_SYS_LATCH0_RESET); +			out_le16((void *)LATCH1_BASE, CONFIG_SYS_LATCH1_RESET); +		} else { +			out_le16((void *)LATCH0_BASE, CONFIG_SYS_LATCH0_BOOT); +			out_le16((void *)LATCH1_BASE, CONFIG_SYS_LATCH1_BOOT); +		} +	} else { +		pca9698_set_value(0x22, 39, state ? 0 : 1); +	} +} + +void gd405ex_setup_hw(void) +{ +	gpio_write_bit(CONFIG_SYS_GPIO_STARTUP_FINISHED_N, 0); +	gpio_write_bit(CONFIG_SYS_GPIO_STARTUP_FINISHED, 1); +} + +int gd405ex_get_fpga_done(unsigned fpga) +{ +	int legacy = get_fpga_state(0) & FPGA_STATE_PLATFORM; + +	if (legacy) +		return in_le16((void *)LATCH3_BASE) +			& CONFIG_SYS_FPGA_DONE(fpga); +	else +		return pca9698_get_value(0x22, fpga ? 9 : 8); +} diff --git a/board/gdsys/common/Makefile b/board/gdsys/common/Makefile index 2868cc8bd..05dd65df7 100644 --- a/board/gdsys/common/Makefile +++ b/board/gdsys/common/Makefile @@ -30,6 +30,7 @@ endif  LIB	= $(obj)lib$(VENDOR).o  COBJS-$(CONFIG_IO) += miiphybb.o +COBJS-$(CONFIG_IO64) += miiphybb.o  COBJS-$(CONFIG_IOCON) += osd.o  COBJS-$(CONFIG_DLVISION_10G) += osd.o diff --git a/board/gdsys/common/miiphybb.c b/board/gdsys/common/miiphybb.c index e56e96650..46f1a1ecb 100644 --- a/board/gdsys/common/miiphybb.c +++ b/board/gdsys/common/miiphybb.c @@ -26,6 +26,11 @@  #include <asm/io.h> +struct io_bb_pinset { +	int mdio; +	int mdc; +}; +  static int io_bb_mii_init(struct bb_miiphy_bus *bus)  {  	return 0; @@ -33,47 +38,57 @@ static int io_bb_mii_init(struct bb_miiphy_bus *bus)  static int io_bb_mdio_active(struct bb_miiphy_bus *bus)  { +	struct io_bb_pinset *pins = bus->priv; +  	out_be32((void *)GPIO0_TCR, -		in_be32((void *)GPIO0_TCR) | CONFIG_SYS_MDIO_PIN); +		in_be32((void *)GPIO0_TCR) | pins->mdio);  	return 0;  }  static int io_bb_mdio_tristate(struct bb_miiphy_bus *bus)  { +	struct io_bb_pinset *pins = bus->priv; +  	out_be32((void *)GPIO0_TCR, -		in_be32((void *)GPIO0_TCR) & ~CONFIG_SYS_MDIO_PIN); +		in_be32((void *)GPIO0_TCR) & ~pins->mdio);  	return 0;  }  static int io_bb_set_mdio(struct bb_miiphy_bus *bus, int v)  { +	struct io_bb_pinset *pins = bus->priv; +  	if (v)  		out_be32((void *)GPIO0_OR, -			in_be32((void *)GPIO0_OR) | CONFIG_SYS_MDIO_PIN); +			in_be32((void *)GPIO0_OR) | pins->mdio);  	else  		out_be32((void *)GPIO0_OR, -			in_be32((void *)GPIO0_OR) & ~CONFIG_SYS_MDIO_PIN); +			in_be32((void *)GPIO0_OR) & ~pins->mdio);  	return 0;  }  static int io_bb_get_mdio(struct bb_miiphy_bus *bus, int *v)  { -	*v = ((in_be32((void *)GPIO0_IR) & CONFIG_SYS_MDIO_PIN) != 0); +	struct io_bb_pinset *pins = bus->priv; + +	*v = ((in_be32((void *)GPIO0_IR) & pins->mdio) != 0);  	return 0;  }  static int io_bb_set_mdc(struct bb_miiphy_bus *bus, int v)  { +	struct io_bb_pinset *pins = bus->priv; +  	if (v)  		out_be32((void *)GPIO0_OR, -			in_be32((void *)GPIO0_OR) | CONFIG_SYS_MDC_PIN); +			in_be32((void *)GPIO0_OR) | pins->mdc);  	else  		out_be32((void *)GPIO0_OR, -			in_be32((void *)GPIO0_OR) & ~CONFIG_SYS_MDC_PIN); +			in_be32((void *)GPIO0_OR) & ~pins->mdc);  	return 0;  } @@ -85,6 +100,19 @@ static int io_bb_delay(struct bb_miiphy_bus *bus)  	return 0;  } +struct io_bb_pinset io_bb_pinsets[] = { +	{ +		.mdio = CONFIG_SYS_MDIO_PIN, +		.mdc = CONFIG_SYS_MDC_PIN, +	}, +#ifdef CONFIG_SYS_GBIT_MII1_BUSNAME +	{ +		.mdio = CONFIG_SYS_MDIO1_PIN, +		.mdc = CONFIG_SYS_MDC1_PIN, +	}, +#endif +}; +  struct bb_miiphy_bus bb_miiphy_buses[] = {  	{  		.name = CONFIG_SYS_GBIT_MII_BUSNAME, @@ -95,7 +123,21 @@ struct bb_miiphy_bus bb_miiphy_buses[] = {  		.get_mdio = io_bb_get_mdio,  		.set_mdc = io_bb_set_mdc,  		.delay = io_bb_delay, -	} +		.priv = &io_bb_pinsets[0], +	}, +#ifdef CONFIG_SYS_GBIT_MII1_BUSNAME +	{ +		.name = CONFIG_SYS_GBIT_MII1_BUSNAME, +		.init = io_bb_mii_init, +		.mdio_active = io_bb_mdio_active, +		.mdio_tristate = io_bb_mdio_tristate, +		.set_mdio = io_bb_set_mdio, +		.get_mdio = io_bb_get_mdio, +		.set_mdc = io_bb_set_mdc, +		.delay = io_bb_delay, +		.priv = &io_bb_pinsets[1], +	}, +#endif  };  int bb_miiphy_buses_num = sizeof(bb_miiphy_buses) / diff --git a/boards.cfg b/boards.cfg index c83d8616e..d13c47ae1 100644 --- a/boards.cfg +++ b/boards.cfg @@ -954,6 +954,7 @@ dlvision-10g                 powerpc     ppc4xx      405ep               gdsys  gdppc440etx                  powerpc     ppc4xx      -                   gdsys  intip                        powerpc     ppc4xx      intip               gdsys          -           intip:INTIB  io                           powerpc     ppc4xx      405ep               gdsys +io64                         powerpc     ppc4xx      405ex               gdsys  iocon                        powerpc     ppc4xx      405ep               gdsys  neo                          powerpc     ppc4xx      -                   gdsys  icon                         powerpc     ppc4xx      -                   mosaixtech diff --git a/include/configs/io64.h b/include/configs/io64.h new file mode 100644 index 000000000..51b2dd1c1 --- /dev/null +++ b/include/configs/io64.h @@ -0,0 +1,566 @@ +/* + * (C) Copyright 2011 + * Dirk Eibach,  Guntermann & Drunck GmbH, eibach@gdsys.de + * + * based on kilauea.h + * by Stefan Roese, DENX Software Engineering, sr@denx.de. + * and Grant Erickson <gerickson@nuovations.com> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +/************************************************************************ + * io64.h - configuration for Guntermann & Drunck Io64 (405EX) + ***********************************************************************/ + +#ifndef __CONFIG_H +#define __CONFIG_H + +/*----------------------------------------------------------------------- + * High Level Configuration Options + *----------------------------------------------------------------------*/ +#define CONFIG_IO64		1		/* Board is Io64 */ +#define CONFIG_4xx		1		/* ... PPC4xx family */ +#define CONFIG_405EX		1		/* Specifc 405EX support*/ +#define CONFIG_SYS_CLK_FREQ	33333333	/* ext frequency to pll */ + +#ifndef CONFIG_SYS_TEXT_BASE +#define CONFIG_SYS_TEXT_BASE	0xFFFA0000 +#endif + +/* + * CHIP_21 errata + */ +#define CONFIG_SYS_4xx_CHIP_21_405EX_SECURITY + +/* + * Include common defines/options for all AMCC eval boards + */ +#define CONFIG_HOSTNAME		io64 +#define CONFIG_IDENT_STRING	" io64 0.01" +#include "amcc-common.h" + +#define CONFIG_BOARD_EARLY_INIT_F +#define CONFIG_BOARD_EARLY_INIT_R +#define CONFIG_MISC_INIT_R +#define CONFIG_LAST_STAGE_INIT + +#undef CONFIG_ZERO_BOOTDELAY_CHECK	/* ignore keypress on bootdelay==0 */ +#define CONFIG_AUTOBOOT_KEYED		/* use key strings to stop autoboot */ +#define CONFIG_AUTOBOOT_STOP_STR " " + +/* new uImage format support */ +#define CONFIG_FIT +#define CONFIG_FIT_VERBOSE + +/*----------------------------------------------------------------------- + * Base addresses -- Note these are effective addresses where the + * actual resources get mapped (not physical addresses) + *----------------------------------------------------------------------*/ +#define CONFIG_SYS_FLASH_BASE		0xFC000000 +#define CONFIG_SYS_NVRAM_BASE		0xF0000000 +#define CONFIG_SYS_FPGA0_BASE		0xF0100000 +#define CONFIG_SYS_FPGA1_BASE		0xF0108000 +#define CONFIG_SYS_LATCH_BASE		0xF0200000 + +/*----------------------------------------------------------------------- + * Initial RAM & Stack Pointer Configuration Options + * + *   There are traditionally three options for the primordial + *   (i.e. initial) stack usage on the 405-series: + * + *      1) On-chip Memory (OCM) (i.e. SRAM) + *      2) Data cache + *      3) SDRAM + * + *   For the 405EX(r), there is no OCM, so we are left with (2) or (3) + *   the latter of which is less than desireable since it requires + *   setting up the SDRAM and ECC in assembly code. + * + *   To use (2), define 'CONFIG_SYS_INIT_DCACHE_CS' to be an unused chip + *   select on the External Bus Controller (EBC) and then select a + *   value for 'CONFIG_SYS_INIT_RAM_ADDR' outside of the range of valid, + *   physical SDRAM. Otherwise, undefine 'CONFIG_SYS_INIT_DCACHE_CS' and + *   select a value for 'CONFIG_SYS_INIT_RAM_ADDR' within the range of valid, + *   physical SDRAM to use (3). + *-----------------------------------------------------------------------*/ + +#define CONFIG_SYS_INIT_DCACHE_CS	4 + +#if defined(CONFIG_SYS_INIT_DCACHE_CS) +#define CONFIG_SYS_INIT_RAM_ADDR \ +	(CONFIG_SYS_SDRAM_BASE + (1 << 30))	/*  1 GiB */ +#else +#define CONFIG_SYS_INIT_RAM_ADDR \ +	(CONFIG_SYS_SDRAM_BASE + (32 << 20))	/* 32 MiB */ +#endif /* defined(CONFIG_SYS_INIT_DCACHE_CS) */ + +#define CONFIG_SYS_INIT_RAM_SIZE \ +	(4 << 10)				/*  4 KiB */ +#define CONFIG_SYS_GBL_DATA_OFFSET \ +	(CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE) + +/* + * If the data cache is being used for the primordial stack and global + * data area, the POST word must be placed somewhere else. The General + * Purpose Timer (GPT) is unused by u-boot and the kernel and preserves + * its compare and mask register contents across reset, so it is used + * for the POST word. + */ + +#if defined(CONFIG_SYS_INIT_DCACHE_CS) +# define CONFIG_SYS_INIT_SP_OFFSET	CONFIG_SYS_GBL_DATA_OFFSET +# define CONFIG_SYS_POST_WORD_ADDR \ +	(CONFIG_SYS_PERIPHERAL_BASE + GPT0_COMP6) +#else +# define CONFIG_SYS_INIT_EXTRA_SIZE	16 +# define CONFIG_SYS_INIT_SP_OFFSET \ +	(CONFIG_SYS_GBL_DATA_OFFSET - CONFIG_SYS_INIT_EXTRA_SIZE) +# define CONFIG_SYS_OCM_DATA_ADDR	CONFIG_SYS_INIT_RAM_ADDR +#endif /* defined(CONFIG_SYS_INIT_DCACHE_CS) */ + +/*----------------------------------------------------------------------- + * Serial Port + *----------------------------------------------------------------------*/ +#define CONFIG_CONS_INDEX	1	/* Use UART0 */ +#define CONFIG_SYS_BASE_BAUD	691200 + +/*----------------------------------------------------------------------- + * Environment + *----------------------------------------------------------------------*/ +#define CONFIG_ENV_IS_IN_FLASH	1	/* use FLASH for environment vars */ + +/*----------------------------------------------------------------------- + * FLASH related + *----------------------------------------------------------------------*/ +#define CONFIG_SYS_FLASH_CFI		/* The flash is CFI compatible */ +#define CONFIG_FLASH_CFI_DRIVER		/* Use common CFI driver */ + +#define CONFIG_SYS_FLASH_BANKS_LIST    {CONFIG_SYS_FLASH_BASE} +#define CONFIG_SYS_MAX_FLASH_BANKS	1 +#define CONFIG_SYS_MAX_FLASH_SECT	512 + +#define CONFIG_SYS_FLASH_ERASE_TOUT	120000 +#define CONFIG_SYS_FLASH_WRITE_TOUT	500 + +#define CONFIG_SYS_FLASH_USE_BUFFER_WRITE +#define CONFIG_SYS_FLASH_EMPTY_INFO + +#ifdef CONFIG_ENV_IS_IN_FLASH +#define CONFIG_ENV_SECT_SIZE	0x20000	/* size of one complete sector */ +#define CONFIG_ENV_ADDR		(CONFIG_SYS_MONITOR_BASE-CONFIG_ENV_SECT_SIZE) +#define	CONFIG_ENV_SIZE		0x4000	/* Total Size of Environment Sector */ + +/* Address and size of Redundant Environment Sector */ +#define CONFIG_ENV_ADDR_REDUND	(CONFIG_ENV_ADDR-CONFIG_ENV_SECT_SIZE) +#define CONFIG_ENV_SIZE_REDUND	(CONFIG_ENV_SIZE) +#endif /* CONFIG_ENV_IS_IN_FLASH */ + +/* Gbit PHYs */ +#define CONFIG_BITBANGMII		/* bit-bang MII PHY management */ +#define CONFIG_BITBANGMII_MULTI + +#define CONFIG_SYS_MDIO_PIN  (0x80000000 >> 12)	/* MDIO is GPIO12 */ +#define CONFIG_SYS_MDC_PIN   (0x80000000 >> 13)	/* MDC  is GPIO13 */ + +#define CONFIG_SYS_GBIT_MII_BUSNAME	"io_miiphy0" + +#define CONFIG_SYS_MDIO1_PIN  (0x80000000 >> 2)	/* MDIO is GPIO2 */ +#define CONFIG_SYS_MDC1_PIN   (0x80000000 >> 3)	/* MDC  is GPIO3 */ + +#define CONFIG_SYS_GBIT_MII1_BUSNAME	"io_miiphy1" + +/*----------------------------------------------------------------------- + * DDR SDRAM + *----------------------------------------------------------------------*/ +#define CONFIG_SYS_MBYTES_SDRAM        (128)	/* 128MB */ + +/* + * CONFIG_PPC4xx_DDR_AUTOCALIBRATION + * + * Note: DDR Autocalibration Method_A scans the full range of possible PPC4xx + *       SDRAM Controller DDR autocalibration values and takes a lot longer + *       to run than Method_B. + * (See the Method_A and Method_B algorithm discription in the file: + *	arch/powerpc/cpu/ppc4xx/4xx_ibm_ddr2_autocalib.c) + * Define CONFIG_PPC4xx_DDR_METHOD_A to use DDR autocalibration Method_A + * + * DDR Autocalibration Method_B is the default. + */ +#define	CONFIG_PPC4xx_DDR_AUTOCALIBRATION +#define	DEBUG_PPC4xx_DDR_AUTOCALIBRATION +#undef	CONFIG_PPC4xx_DDR_METHOD_A + +#define	CONFIG_SYS_SDRAM0_MB0CF_BASE	((0 << 20) + CONFIG_SYS_SDRAM_BASE) + +/* DDR1/2 SDRAM Device Control Register Data Values */ +#define CONFIG_SYS_SDRAM0_MB0CF	((CONFIG_SYS_SDRAM0_MB0CF_BASE >> 3) | \ +				 SDRAM_RXBAS_SDSZ_128MB | \ +				 SDRAM_RXBAS_SDAM_MODE2 | \ +				 SDRAM_RXBAS_SDBE_ENABLE) +#define CONFIG_SYS_SDRAM0_MB1CF	SDRAM_RXBAS_SDBE_DISABLE +#define CONFIG_SYS_SDRAM0_MB2CF	SDRAM_RXBAS_SDBE_DISABLE +#define CONFIG_SYS_SDRAM0_MB3CF	SDRAM_RXBAS_SDBE_DISABLE +#define CONFIG_SYS_SDRAM0_MCOPT1	(SDRAM_MCOPT1_PMU_OPEN | \ +				 SDRAM_MCOPT1_4_BANKS | \ +				 SDRAM_MCOPT1_DDR2_TYPE | \ +				 SDRAM_MCOPT1_QDEP | \ +				 SDRAM_MCOPT1_DCOO_DISABLED) +#define CONFIG_SYS_SDRAM0_MCOPT2	0x00000000 +#define CONFIG_SYS_SDRAM0_MODT0	(SDRAM_MODT_EB0W_ENABLE | \ +				 SDRAM_MODT_EB0R_ENABLE) +#define CONFIG_SYS_SDRAM0_MODT1	0x00000000 +#define CONFIG_SYS_SDRAM0_CODT		(SDRAM_CODT_RK0R_ON | \ +				 SDRAM_CODT_CKLZ_36OHM | \ +				 SDRAM_CODT_DQS_1_8_V_DDR2 | \ +				 SDRAM_CODT_IO_NMODE) +#define CONFIG_SYS_SDRAM0_RTR		SDRAM_RTR_RINT_ENCODE(1560) +#define CONFIG_SYS_SDRAM0_INITPLR0	(SDRAM_INITPLR_ENABLE | \ +		SDRAM_INITPLR_IMWT_ENCODE(80) | \ +		SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_NOP)) +#define CONFIG_SYS_SDRAM0_INITPLR1	(SDRAM_INITPLR_ENABLE | \ +		SDRAM_INITPLR_IMWT_ENCODE(3) | \ +		SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_PRECHARGE) | \ +		SDRAM_INITPLR_IBA_ENCODE(JEDEC_BA_MR) | \ +		SDRAM_INITPLR_IMA_ENCODE(JEDEC_MA_PRECHARGE_ALL)) +#define CONFIG_SYS_SDRAM0_INITPLR2	(SDRAM_INITPLR_ENABLE | \ +		SDRAM_INITPLR_IMWT_ENCODE(2) | \ +		SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_EMR) | \ +		SDRAM_INITPLR_IBA_ENCODE(JEDEC_BA_EMR2) | \ +		SDRAM_INITPLR_IMA_ENCODE(JEDEC_MA_EMR2_TEMP_COMMERCIAL)) +#define CONFIG_SYS_SDRAM0_INITPLR3	(SDRAM_INITPLR_ENABLE | \ +		SDRAM_INITPLR_IMWT_ENCODE(2) | \ +		SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_EMR) | \ +		SDRAM_INITPLR_IBA_ENCODE(JEDEC_BA_EMR3) | \ +		SDRAM_INITPLR_IMA_ENCODE(0)) +#define CONFIG_SYS_SDRAM0_INITPLR4	(SDRAM_INITPLR_ENABLE | \ +		SDRAM_INITPLR_IMWT_ENCODE(2) | \ +		SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_EMR) | \ +		SDRAM_INITPLR_IBA_ENCODE(JEDEC_BA_EMR) | \ +		SDRAM_INITPLR_IMA_ENCODE(JEDEC_MA_EMR_DQS_DISABLE | \ +					 JEDEC_MA_EMR_RTT_75OHM)) +#define CONFIG_SYS_SDRAM0_INITPLR5	(SDRAM_INITPLR_ENABLE | \ +		SDRAM_INITPLR_IMWT_ENCODE(2) | \ +		SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_EMR) | \ +		SDRAM_INITPLR_IBA_ENCODE(JEDEC_BA_MR) | \ +		SDRAM_INITPLR_IMA_ENCODE(JEDEC_MA_MR_WR_DDR2_3_CYC | \ +					 JEDEC_MA_MR_CL_DDR2_5_0_CLK | \ +					 JEDEC_MA_MR_BLEN_4 | \ +					 JEDEC_MA_MR_DLL_RESET)) +#define CONFIG_SYS_SDRAM0_INITPLR6	(SDRAM_INITPLR_ENABLE | \ +		SDRAM_INITPLR_IMWT_ENCODE(3) | \ +		SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_PRECHARGE) | \ +		SDRAM_INITPLR_IBA_ENCODE(0x0) | \ +		SDRAM_INITPLR_IMA_ENCODE(JEDEC_MA_PRECHARGE_ALL)) +#define CONFIG_SYS_SDRAM0_INITPLR7	(SDRAM_INITPLR_ENABLE | \ +		SDRAM_INITPLR_IMWT_ENCODE(26) | \ +		SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_REFRESH)) +#define CONFIG_SYS_SDRAM0_INITPLR8	(SDRAM_INITPLR_ENABLE | \ +		SDRAM_INITPLR_IMWT_ENCODE(26) | \ +		SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_REFRESH)) +#define CONFIG_SYS_SDRAM0_INITPLR9	(SDRAM_INITPLR_ENABLE | \ +		SDRAM_INITPLR_IMWT_ENCODE(26) | \ +		SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_REFRESH)) +#define CONFIG_SYS_SDRAM0_INITPLR10	(SDRAM_INITPLR_ENABLE | \ +		SDRAM_INITPLR_IMWT_ENCODE(26) | \ +		SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_REFRESH)) +#define CONFIG_SYS_SDRAM0_INITPLR11	(SDRAM_INITPLR_ENABLE | \ +		SDRAM_INITPLR_IMWT_ENCODE(2) | \ +		SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_EMR) | \ +		SDRAM_INITPLR_IBA_ENCODE(JEDEC_BA_MR) | \ +		SDRAM_INITPLR_IMA_ENCODE(JEDEC_MA_MR_WR_DDR2_3_CYC | \ +					 JEDEC_MA_MR_CL_DDR2_5_0_CLK | \ +					 JEDEC_MA_MR_BLEN_4)) +#define CONFIG_SYS_SDRAM0_INITPLR12	(SDRAM_INITPLR_ENABLE | \ +		SDRAM_INITPLR_IMWT_ENCODE(2) | \ +		SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_EMR) | \ +		SDRAM_INITPLR_IBA_ENCODE(JEDEC_BA_EMR) | \ +		SDRAM_INITPLR_IMA_ENCODE(JEDEC_MA_EMR_OCD_ENTER | \ +					 JEDEC_MA_EMR_RDQS_DISABLE | \ +					 JEDEC_MA_EMR_DQS_DISABLE | \ +					 JEDEC_MA_EMR_RTT_DISABLED | \ +					 JEDEC_MA_EMR_ODS_NORMAL)) +#define CONFIG_SYS_SDRAM0_INITPLR13	(SDRAM_INITPLR_ENABLE | \ +		SDRAM_INITPLR_IMWT_ENCODE(2) | \ +		SDRAM_INITPLR_ICMD_ENCODE(JEDEC_CMD_EMR) | \ +		SDRAM_INITPLR_IBA_ENCODE(JEDEC_BA_EMR) | \ +		SDRAM_INITPLR_IMA_ENCODE(JEDEC_MA_EMR_OCD_EXIT | \ +					 JEDEC_MA_EMR_RDQS_DISABLE | \ +					 JEDEC_MA_EMR_DQS_DISABLE | \ +					 JEDEC_MA_EMR_RTT_DISABLED | \ +					 JEDEC_MA_EMR_ODS_NORMAL)) +#define CONFIG_SYS_SDRAM0_INITPLR14	(SDRAM_INITPLR_DISABLE) +#define CONFIG_SYS_SDRAM0_INITPLR15	(SDRAM_INITPLR_DISABLE) +#define CONFIG_SYS_SDRAM0_RQDC		(SDRAM_RQDC_RQDE_ENABLE | \ +				 SDRAM_RQDC_RQFD_ENCODE(56)) +#define CONFIG_SYS_SDRAM0_RFDC		SDRAM_RFDC_RFFD_ENCODE(521) +#define CONFIG_SYS_SDRAM0_RDCC		(SDRAM_RDCC_RDSS_T2) +#define CONFIG_SYS_SDRAM0_DLCR		(SDRAM_DLCR_DCLM_AUTO | \ +				 SDRAM_DLCR_DLCS_CONT_DONE | \ +				 SDRAM_DLCR_DLCV_ENCODE(165)) +#define CONFIG_SYS_SDRAM0_CLKTR	(SDRAM_CLKTR_CLKP_180_DEG_ADV) +#define CONFIG_SYS_SDRAM0_WRDTR	0x00000000 +#define CONFIG_SYS_SDRAM0_SDTR1	(SDRAM_SDTR1_LDOF_2_CLK | \ +				 SDRAM_SDTR1_RTW_2_CLK | \ +				 SDRAM_SDTR1_WTWO_1_CLK | \ +				 SDRAM_SDTR1_RTRO_1_CLK) +#define CONFIG_SYS_SDRAM0_SDTR2	(SDRAM_SDTR2_RCD_3_CLK | \ +				 SDRAM_SDTR2_WTR_2_CLK | \ +				 SDRAM_SDTR2_XSNR_32_CLK | \ +				 SDRAM_SDTR2_WPC_4_CLK | \ +				 SDRAM_SDTR2_RPC_2_CLK | \ +				 SDRAM_SDTR2_RP_3_CLK | \ +				 SDRAM_SDTR2_RRD_2_CLK) +#define CONFIG_SYS_SDRAM0_SDTR3	(SDRAM_SDTR3_RAS_ENCODE(9) | \ +				 SDRAM_SDTR3_RC_ENCODE(12) | \ +				 SDRAM_SDTR3_XCS | \ +				 SDRAM_SDTR3_RFC_ENCODE(21)) +#define CONFIG_SYS_SDRAM0_MMODE	(SDRAM_MMODE_WR_DDR2_3_CYC | \ +				 SDRAM_MMODE_DCL_DDR2_5_0_CLK | \ +				 SDRAM_MMODE_BLEN_4) +#define CONFIG_SYS_SDRAM0_MEMODE	(SDRAM_MEMODE_DQS_DISABLE | \ +				 SDRAM_MEMODE_RTT_75OHM) + +/*----------------------------------------------------------------------- + * I2C + *----------------------------------------------------------------------*/ +#define CONFIG_SYS_I2C_SPEED	400000	/* I2C speed and slave address */ + +#define CONFIG_PCA9698		1	/* NXP PCA9698 */ + +#define CONFIG_SYS_I2C_EEPROM_ADDR	0x52	/* I2C boot EEPROM (24C02BN) */ +#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN	1	/* Bytes of address */ +#define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS	3 +#define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS	10 + +/* I2C bootstrap EEPROM */ +#define CONFIG_4xx_CONFIG_I2C_EEPROM_ADDR	0x54 +#define CONFIG_4xx_CONFIG_I2C_EEPROM_OFFSET	0 +#define CONFIG_4xx_CONFIG_BLOCKSIZE		16 + +/* Temp sensor/hwmon/dtt */ +#define CONFIG_DTT_LM63		1	/* National LM63 */ +#define CONFIG_DTT_SENSORS	{ 0x18, 0x4c, 0x4e }	/* Sensor addresses */ +#define CONFIG_DTT_PWM_LOOKUPTABLE	\ +		{ { 40, 10 }, { 43, 13 }, { 46, 16 },  \ +		  { 50, 20 }, { 53, 27 }, { 56, 34 }, { 60, 40 } } +#define CONFIG_DTT_TACH_LIMIT	0xa10 + +/*----------------------------------------------------------------------- + * Ethernet + *----------------------------------------------------------------------*/ +#define CONFIG_M88E1111_PHY	1 +#define CONFIG_IBM_EMAC4_V4	1 +#define CONFIG_EMAC_PHY_MODE	EMAC_PHY_MODE_RGMII_RGMII +#define CONFIG_PHY_ADDR		0x12	/* PHY address, See schematics */ + +#define CONFIG_PHY_RESET	1	/* reset phy upon startup */ +#define CONFIG_PHY_GIGE		1	/* Include GbE speed/duplex detection */ + +#define CONFIG_HAS_ETH0		1 + +#define CONFIG_HAS_ETH1		1	/* add support for "eth1addr"   */ +#define CONFIG_PHY1_ADDR	0x13 + +/* Debug messages for the DDR autocalibration */ +#define CONFIG_AUTOCALIB		"silent\0" + +/* + * Default environment variables + */ +#define	CONFIG_EXTRA_ENV_SETTINGS					\ +	CONFIG_AMCC_DEF_ENV						\ +	CONFIG_AMCC_DEF_ENV_POWERPC					\ +	CONFIG_AMCC_DEF_ENV_PPC_OLD					\ +	CONFIG_AMCC_DEF_ENV_NOR_UPD					\ +	"logversion=2\0"						\ +	"kernel_addr=fc000000\0"					\ +	"fdt_addr=fc1e0000\0"						\ +	"ramdisk_addr=fc200000\0"					\ +	"pciconfighost=1\0"						\ +	"pcie_mode=RP:RP\0"						\ +	"" + +/* + * Commands additional to the ones defined in amcc-common.h + */ +#define CONFIG_CMD_CHIP_CONFIG +#define CONFIG_CMD_DTT + +#define CONFIG_SYS_POST_MEMORY_ON	CONFIG_SYS_POST_MEMORY + +/* POST support */ +#define CONFIG_POST		(CONFIG_SYS_POST_CACHE		| \ +				 CONFIG_SYS_POST_CPU		| \ +				 CONFIG_SYS_POST_ETHER		| \ +				 CONFIG_SYS_POST_I2C		| \ +				 CONFIG_SYS_POST_MEMORY_ON	| \ +				 CONFIG_SYS_POST_UART) + +/* Define here the base-addresses of the UARTs to test in POST */ +#define CONFIG_SYS_POST_UART_TABLE	{ CONFIG_SYS_NS16550_COM1, \ +			CONFIG_SYS_NS16550_COM2 } + +#define CONFIG_LOGBUFFER +#define CONFIG_SYS_POST_CACHE_ADDR	0x00800000 /* free virtual address */ + +#define CONFIG_SYS_CONSOLE_IS_IN_ENV + +/*----------------------------------------------------------------------- + * External Bus Controller (EBC) Setup + *----------------------------------------------------------------------*/ + +/* Memory Bank 0 (NOR-flash) */ +#define CONFIG_SYS_EBC_PB0AP	(EBC_BXAP_BME_DISABLED		|	\ +				 EBC_BXAP_TWT_ENCODE(11)	|	\ +				 EBC_BXAP_BCE_DISABLE		|	\ +				 EBC_BXAP_BCT_2TRANS		|	\ +				 EBC_BXAP_CSN_ENCODE(0)		|	\ +				 EBC_BXAP_OEN_ENCODE(0)		|	\ +				 EBC_BXAP_WBN_ENCODE(1)		|	\ +				 EBC_BXAP_WBF_ENCODE(2)		|	\ +				 EBC_BXAP_TH_ENCODE(2)		|	\ +				 EBC_BXAP_RE_DISABLED		|	\ +				 EBC_BXAP_SOR_NONDELAYED	|	\ +				 EBC_BXAP_BEM_WRITEONLY		|	\ +				 EBC_BXAP_PEN_DISABLED) +#define CONFIG_SYS_EBC_PB0CR	(EBC_BXCR_BAS_ENCODE(CONFIG_SYS_FLASH_BASE) | \ +				 EBC_BXCR_BS_64MB		|	\ +				 EBC_BXCR_BU_RW			|	\ +				 EBC_BXCR_BW_16BIT) + +/* Memory Bank 1 (NVRAM/Uart) */ +#define CONFIG_SYS_EBC_PB1AP	(EBC_BXAP_BME_ENABLED		|	\ +				 EBC_BXAP_FWT_ENCODE(8)		|	\ +				 EBC_BXAP_BWT_ENCODE(4)		|	\ +				 EBC_BXAP_BCE_DISABLE		|	\ +				 EBC_BXAP_BCT_2TRANS		|	\ +				 EBC_BXAP_CSN_ENCODE(0)		|	\ +				 EBC_BXAP_OEN_ENCODE(1)		|	\ +				 EBC_BXAP_WBN_ENCODE(1)		|	\ +				 EBC_BXAP_WBF_ENCODE(1)		|	\ +				 EBC_BXAP_TH_ENCODE(2)		|	\ +				 EBC_BXAP_RE_DISABLED		|	\ +				 EBC_BXAP_SOR_NONDELAYED	|	\ +				 EBC_BXAP_BEM_WRITEONLY		|	\ +				 EBC_BXAP_PEN_DISABLED) +#define CONFIG_SYS_EBC_PB1CR	(EBC_BXCR_BAS_ENCODE(CONFIG_SYS_NVRAM_BASE) | \ +				 EBC_BXCR_BS_1MB		|	\ +				 EBC_BXCR_BU_RW			|	\ +				 EBC_BXCR_BW_8BIT) + +/* Memory Bank 2 (FPGA) */ +#define CONFIG_SYS_EBC_PB2AP	(EBC_BXAP_BME_DISABLED		|	\ +				 EBC_BXAP_TWT_ENCODE(5)		|	\ +				 EBC_BXAP_BCE_DISABLE		|	\ +				 EBC_BXAP_BCT_2TRANS		|	\ +				 EBC_BXAP_CSN_ENCODE(0)		|	\ +				 EBC_BXAP_OEN_ENCODE(2)		|	\ +				 EBC_BXAP_WBN_ENCODE(1)		|	\ +				 EBC_BXAP_WBF_ENCODE(1)		|	\ +				 EBC_BXAP_TH_ENCODE(0)		|	\ +				 EBC_BXAP_RE_DISABLED		|	\ +				 EBC_BXAP_SOR_NONDELAYED	|	\ +				 EBC_BXAP_BEM_WRITEONLY		|	\ +				 EBC_BXAP_PEN_DISABLED) +#define CONFIG_SYS_EBC_PB2CR	(EBC_BXCR_BAS_ENCODE(CONFIG_SYS_FPGA0_BASE) | \ +				 EBC_BXCR_BS_1MB		|	\ +				 EBC_BXCR_BU_RW			|	\ +				 EBC_BXCR_BW_16BIT) + +/* Memory Bank 3 (Latches) */ +#define CONFIG_SYS_EBC_PB3AP	(EBC_BXAP_BME_ENABLED		|	\ +				 EBC_BXAP_FWT_ENCODE(8)		|	\ +				 EBC_BXAP_BWT_ENCODE(4)		|	\ +				 EBC_BXAP_BCE_DISABLE		|	\ +				 EBC_BXAP_BCT_2TRANS		|	\ +				 EBC_BXAP_CSN_ENCODE(0)		|	\ +				 EBC_BXAP_OEN_ENCODE(1)		|	\ +				 EBC_BXAP_WBN_ENCODE(1)		|	\ +				 EBC_BXAP_WBF_ENCODE(1)		|	\ +				 EBC_BXAP_TH_ENCODE(2)		|	\ +				 EBC_BXAP_RE_DISABLED		|	\ +				 EBC_BXAP_SOR_NONDELAYED	|	\ +				 EBC_BXAP_BEM_WRITEONLY		|	\ +				 EBC_BXAP_PEN_DISABLED) +#define CONFIG_SYS_EBC_PB3CR	(EBC_BXCR_BAS_ENCODE(CONFIG_SYS_LATCH_BASE) | \ +				 EBC_BXCR_BS_1MB		|	\ +				 EBC_BXCR_BU_RW			|	\ +				 EBC_BXCR_BW_16BIT) + +/* EBC peripherals */ + +#define CONFIG_SYS_FPGA_BASE(k) \ +	(k ? CONFIG_SYS_FPGA1_BASE : CONFIG_SYS_FPGA0_BASE) + +#define CONFIG_SYS_FPGA_DONE(k) \ +	(k ? 0x0040 : 0x0080) + +#define CONFIG_SYS_FPGA_COUNT		2 + +#define CONFIG_SYS_LATCH0_RESET		0xffff +#define CONFIG_SYS_LATCH0_BOOT		0xffff +#define CONFIG_SYS_LATCH1_RESET		0xffbf +#define CONFIG_SYS_LATCH1_BOOT		0xffff + +/*----------------------------------------------------------------------- + * GPIO Setup + *----------------------------------------------------------------------*/ +#define CONFIG_SYS_4xx_GPIO_TABLE { /*	  Out		GPIO */ \ +{ \ +/* GPIO Core 0 */ \ +{GPIO0_BASE, GPIO_OUT, GPIO_SEL,  GPIO_OUT_1     }, /* GPIO0 */ \ +{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_NO_CHG}, /* GPIO1 */ \ +{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_NO_CHG}, /* GPIO2 */ \ +{GPIO0_BASE, GPIO_OUT, GPIO_SEL,  GPIO_OUT_1     }, /* GPIO3 */ \ +{GPIO0_BASE, GPIO_OUT, GPIO_SEL,  GPIO_OUT_NO_CHG}, /* GPIO4 */ \ +{GPIO0_BASE, GPIO_OUT, GPIO_SEL,  GPIO_OUT_NO_CHG}, /* GPIO5 */ \ +{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_NO_CHG}, /* GPIO6 */ \ +{GPIO0_BASE, GPIO_OUT, GPIO_SEL,  GPIO_OUT_1     }, /* GPIO7 */ \ +{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0     }, /* GPIO8 */ \ +{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0     }, /* GPIO9 */ \ +{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0     }, /* GPIO10 */ \ +{GPIO0_BASE, GPIO_OUT, GPIO_SEL,  GPIO_OUT_1     }, /* GPIO11 */ \ +{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_NO_CHG}, /* GPIO12 */ \ +{GPIO0_BASE, GPIO_OUT, GPIO_SEL,  GPIO_OUT_1     }, /* GPIO13 */ \ +{GPIO0_BASE, GPIO_OUT, GPIO_SEL,  GPIO_OUT_NO_CHG}, /* GPIO14 */ \ +{GPIO0_BASE, GPIO_OUT, GPIO_SEL,  GPIO_OUT_NO_CHG}, /* GPIO15 */ \ +{GPIO0_BASE, GPIO_IN,  GPIO_ALT1, GPIO_OUT_0     }, /* GPIO16 */ \ +{GPIO0_BASE, GPIO_IN,  GPIO_ALT1, GPIO_OUT_0     }, /* GPIO17 */ \ +{GPIO0_BASE, GPIO_IN,  GPIO_ALT1, GPIO_OUT_0     }, /* GPIO18 */ \ +{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0     }, /* GPIO19 */ \ +{GPIO0_BASE, GPIO_OUT, GPIO_ALT2, GPIO_OUT_0     }, /* GPIO20 */ \ +{GPIO0_BASE, GPIO_IN,  GPIO_ALT2, GPIO_OUT_0     }, /* GPIO21 */ \ +{GPIO0_BASE, GPIO_OUT, GPIO_SEL,  GPIO_OUT_NO_CHG}, /* GPIO22 */ \ +{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_NO_CHG}, /* GPIO23 */ \ +{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0     }, /* GPIO24 */ \ +{GPIO0_BASE, GPIO_IN,  GPIO_ALT3, GPIO_OUT_0     }, /* GPIO25 */ \ +{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0     }, /* GPIO26 */ \ +{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0     }, /* GPIO27 */ \ +{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0     }, /* GPIO28 */ \ +{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0     }, /* GPIO29 */ \ +{GPIO0_BASE, GPIO_IN,  GPIO_ALT2, GPIO_OUT_0     }, /* GPIO30 */ \ +{GPIO0_BASE, GPIO_IN,  GPIO_ALT2, GPIO_OUT_0     }, /* GPIO31 */ \ +} \ +} + +#define CONFIG_SYS_GPIO_STARTUP_FINISHED	15 +#define CONFIG_SYS_GPIO_STARTUP_FINISHED_N	14 + +#endif	/* __CONFIG_H */ diff --git a/include/gdsys_fpga.h b/include/gdsys_fpga.h index c0b1b5c3d..e7a072bbe 100644 --- a/include/gdsys_fpga.h +++ b/include/gdsys_fpga.h @@ -24,9 +24,12 @@  #ifndef __GDSYS_FPGA_H  #define __GDSYS_FPGA_H +int init_func_fpga(void); +  enum {  	FPGA_STATE_DONE_FAILED = 1 << 0,  	FPGA_STATE_REFLECTION_FAILED = 1 << 1, +	FPGA_STATE_PLATFORM = 1 << 2,  };  int get_fpga_state(unsigned dev); @@ -68,6 +71,22 @@ typedef struct ihs_fpga {  } ihs_fpga_t;  #endif +#ifdef CONFIG_IO64 +typedef struct ihs_fpga { +	u16 reflection_low;	/* 0x0000 */ +	u16 versions;		/* 0x0002 */ +	u16 fpga_features;	/* 0x0004 */ +	u16 fpga_version;	/* 0x0006 */ +	u16 reserved_0[5];	/* 0x0008 */ +	u16 quad_serdes_reset;	/* 0x0012 */ +	u16 reserved_1[502];	/* 0x0014 */ +	u16 ch0_status_int;	/* 0x0400 */ +	u16 ch0_config_int;	/* 0x0402 */ +	u16 reserved_2[7677];	/* 0x0404 */ +	u16 reflection_high;	/* 0x3ffe */ +} ihs_fpga_t; +#endif +  #ifdef CONFIG_IOCON  typedef struct ihs_fpga {  	u16 reflection_low;	/* 0x0000 */ |