diff options
| author | richardretanubun <richardretanubun@ruggedcom.com> | 2008-09-29 18:28:23 -0400 | 
|---|---|---|
| committer | Wolfgang Denk <wd@denx.de> | 2008-10-18 21:54:00 +0200 | 
| commit | c68a05feeb88de9fcf158e67ff6423c4cc988f88 (patch) | |
| tree | f970fa26b563081ab5a61196d696c6d2bd069018 | |
| parent | 41410eee472b0f42e03a77f961bbc55ef58f3c01 (diff) | |
| download | olio-uboot-2014.01-c68a05feeb88de9fcf158e67ff6423c4cc988f88.tar.xz olio-uboot-2014.01-c68a05feeb88de9fcf158e67ff6423c4cc988f88.zip | |
Adds two more ethernet interface to 83xx
Added as a convenience for other platforms that uses MPC8360 (has 8 UCC).
Six eth interface is chosen because the platform I am using combines
UCC1&2 and UCC3&4 as 1000 Eth and the other four UCCs as 10/100 Eth.
Signed-off-by: Richard Retanubun <RichardRetanubun@RugggedCom.com>
Signed-off-by: Ben Warren <biggerbadderben@gmail.com>
| -rw-r--r-- | README | 3 | ||||
| -rw-r--r-- | common/cmd_bdinfo.c | 14 | ||||
| -rw-r--r-- | common/env_common.c | 6 | ||||
| -rw-r--r-- | common/env_embedded.c | 6 | ||||
| -rw-r--r-- | cpu/mpc83xx/fdt.c | 3 | ||||
| -rw-r--r-- | drivers/qe/uec.c | 48 | ||||
| -rw-r--r-- | include/asm-ppc/u-boot.h | 6 | ||||
| -rw-r--r-- | lib_ppc/board.c | 30 | ||||
| -rw-r--r-- | net/eth.c | 6 | ||||
| -rw-r--r-- | tools/env/fw_env.c | 6 | 
10 files changed, 126 insertions, 2 deletions
| @@ -1095,8 +1095,11 @@ The following options need to be configured:  - Ethernet address:  		CONFIG_ETHADDR +		CONFIG_ETH1ADDR  		CONFIG_ETH2ADDR  		CONFIG_ETH3ADDR +		CONFIG_ETH4ADDR +		CONFIG_ETH5ADDR  		Define a default value for Ethernet address to use  		for the respective Ethernet interface, in case this diff --git a/common/cmd_bdinfo.c b/common/cmd_bdinfo.c index f4d9d404e..501893010 100644 --- a/common/cmd_bdinfo.c +++ b/common/cmd_bdinfo.c @@ -117,6 +117,20 @@ int do_bdinfo ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  	}  #endif +#if defined(CONFIG_HAS_ETH4) +       puts ("\neth4addr    ="); +       for (i=0; i<6; ++i) { +		printf ("%c%02X", i ? ':' : ' ', bd->bi_enet4addr[i]); +	} +#endif + +#if defined(CONFIG_HAS_ETH5) +       puts ("\neth5addr    ="); +       for (i=0; i<6; ++i) { +		printf ("%c%02X", i ? ':' : ' ', bd->bi_enet5addr[i]); +	} +#endif +  #ifdef CONFIG_HERMES  	print_str ("ethspeed",	    strmhz(buf, bd->bi_ethspeed));  #endif diff --git a/common/env_common.c b/common/env_common.c index 77f99441a..0fee3affb 100644 --- a/common/env_common.c +++ b/common/env_common.c @@ -91,6 +91,12 @@ uchar default_environment[] = {  #ifdef	CONFIG_ETH3ADDR  	"eth3addr="	MK_STR(CONFIG_ETH3ADDR)		"\0"  #endif +#ifdef	CONFIG_ETH4ADDR +	"eth4addr="	MK_STR(CONFIG_ETH4ADDR)		"\0" +#endif +#ifdef	CONFIG_ETH5ADDR +	"eth5addr="	MK_STR(CONFIG_ETH5ADDR)		"\0" +#endif  #ifdef	CONFIG_IPADDR  	"ipaddr="	MK_STR(CONFIG_IPADDR)		"\0"  #endif diff --git a/common/env_embedded.c b/common/env_embedded.c index 77e561912..e79f843fb 100644 --- a/common/env_embedded.c +++ b/common/env_embedded.c @@ -135,6 +135,12 @@ env_t environment __PPCENV__ = {  #ifdef	CONFIG_ETH3ADDR  	"eth3addr="	MK_STR(CONFIG_ETH3ADDR)		"\0"  #endif +#ifdef	CONFIG_ETH4ADDR +	"eth4addr="	MK_STR(CONFIG_ETH4ADDR)		"\0" +#endif +#ifdef	CONFIG_ETH5ADDR +	"eth5addr="	MK_STR(CONFIG_ETH5ADDR)		"\0" +#endif  #ifdef	CONFIG_ETHPRIME  	"ethprime="	CONFIG_ETHPRIME			"\0"  #endif diff --git a/cpu/mpc83xx/fdt.c b/cpu/mpc83xx/fdt.c index 39bd9dc7d..3e3e1c8ed 100644 --- a/cpu/mpc83xx/fdt.c +++ b/cpu/mpc83xx/fdt.c @@ -52,7 +52,8 @@ void ft_cpu_setup(void *blob, bd_t *bd)  		fdt_fixup_crypto_node(blob, 0x0204);  #if defined(CONFIG_HAS_ETH0) || defined(CONFIG_HAS_ETH1) ||\ -    defined(CONFIG_HAS_ETH2) || defined(CONFIG_HAS_ETH3) +    defined(CONFIG_HAS_ETH2) || defined(CONFIG_HAS_ETH3) ||\ +    defined(CONFIG_HAS_ETH4) || defined(CONFIG_HAS_ETH5)  	fdt_fixup_ethernet(blob);  #endif diff --git a/drivers/qe/uec.c b/drivers/qe/uec.c index 85e2ad358..0d48360a2 100644 --- a/drivers/qe/uec.c +++ b/drivers/qe/uec.c @@ -123,8 +123,54 @@ static uec_info_t eth4_uec_info = {  	.enet_interface		= CFG_UEC4_INTERFACE_MODE,  };  #endif +#ifdef CONFIG_UEC_ETH5 +static uec_info_t eth5_uec_info = { +	.uf_info		= { +		.ucc_num	= CFG_UEC5_UCC_NUM, +		.rx_clock	= CFG_UEC5_RX_CLK, +		.tx_clock	= CFG_UEC5_TX_CLK, +		.eth_type	= CFG_UEC5_ETH_TYPE, +	}, +#if (CFG_UEC5_ETH_TYPE == FAST_ETH) +	.num_threads_tx		= UEC_NUM_OF_THREADS_1, +	.num_threads_rx		= UEC_NUM_OF_THREADS_1, +#else +	.num_threads_tx		= UEC_NUM_OF_THREADS_4, +	.num_threads_rx		= UEC_NUM_OF_THREADS_4, +#endif +	.riscTx			= QE_RISC_ALLOCATION_RISC1_AND_RISC2, +	.riscRx			= QE_RISC_ALLOCATION_RISC1_AND_RISC2, +	.tx_bd_ring_len		= 16, +	.rx_bd_ring_len		= 16, +	.phy_address		= CFG_UEC5_PHY_ADDR, +	.enet_interface		= CFG_UEC5_INTERFACE_MODE, +}; +#endif +#ifdef CONFIG_UEC_ETH6 +static uec_info_t eth6_uec_info = { +	.uf_info		= { +		.ucc_num	= CFG_UEC6_UCC_NUM, +		.rx_clock	= CFG_UEC6_RX_CLK, +		.tx_clock	= CFG_UEC6_TX_CLK, +		.eth_type	= CFG_UEC6_ETH_TYPE, +	}, +#if (CFG_UEC6_ETH_TYPE == FAST_ETH) +	.num_threads_tx		= UEC_NUM_OF_THREADS_1, +	.num_threads_rx		= UEC_NUM_OF_THREADS_1, +#else +	.num_threads_tx		= UEC_NUM_OF_THREADS_4, +	.num_threads_rx		= UEC_NUM_OF_THREADS_4, +#endif +	.riscTx			= QE_RISC_ALLOCATION_RISC1_AND_RISC2, +	.riscRx			= QE_RISC_ALLOCATION_RISC1_AND_RISC2, +	.tx_bd_ring_len		= 16, +	.rx_bd_ring_len		= 16, +	.phy_address		= CFG_UEC6_PHY_ADDR, +	.enet_interface		= CFG_UEC6_INTERFACE_MODE, +}; +#endif -#define MAXCONTROLLERS	(4) +#define MAXCONTROLLERS	(6)  static struct eth_device *devlist[MAXCONTROLLERS]; diff --git a/include/asm-ppc/u-boot.h b/include/asm-ppc/u-boot.h index 54ac01d36..745190584 100644 --- a/include/asm-ppc/u-boot.h +++ b/include/asm-ppc/u-boot.h @@ -111,6 +111,12 @@ typedef struct bd_info {  #ifdef CONFIG_HAS_ETH3  	unsigned char   bi_enet3addr[6];  #endif +#ifdef CONFIG_HAS_ETH4 +	unsigned char   bi_enet4addr[6]; +#endif +#ifdef CONFIG_HAS_ETH5 +	unsigned char   bi_enet5addr[6]; +#endif  #if defined(CONFIG_405GP) || defined(CONFIG_405EP) || \      defined(CONFIG_405EZ) || defined(CONFIG_440GX) || \ diff --git a/lib_ppc/board.c b/lib_ppc/board.c index 865e74f08..3fdd94b73 100644 --- a/lib_ppc/board.c +++ b/lib_ppc/board.c @@ -954,6 +954,36 @@ void board_init_r (gd_t *id, ulong dest_addr)  	}  #endif +#ifdef CONFIG_HAS_ETH4 +	/* handle 5th ethernet address */ +	s = getenv("eth4addr"); +#if defined(CONFIG_XPEDITE1K) || defined(CONFIG_METROBOX) || defined(CONFIG_KAREF) +	if (s == NULL) +		board_get_enetaddr(bd->bi_enet4addr); +	else +#endif +	for (i = 0; i < 6; ++i) { +		bd->bi_enet4addr[i] = s ? simple_strtoul (s, &e, 16) : 0; +		if (s) +			s = (*e) ? e + 1 : e; +	} +#endif + +#ifdef CONFIG_HAS_ETH5 +	/* handle 6th ethernet address */ +	s = getenv("eth5addr"); +#if defined(CONFIG_XPEDITE1K) || defined(CONFIG_METROBOX) || defined(CONFIG_KAREF) +	if (s == NULL) +		board_get_enetaddr(bd->bi_enet5addr); +	else +#endif +	for (i = 0; i < 6; ++i) { +		bd->bi_enet5addr[i] = s ? simple_strtoul (s, &e, 16) : 0; +		if (s) +			s = (*e) ? e + 1 : e; +	} +#endif +  #if defined(CONFIG_TQM8xxL) || defined(CONFIG_TQM8260) || \      defined(CONFIG_TQM8272) || \      defined(CONFIG_CCM) || defined(CONFIG_KUP4K) || \ @@ -180,6 +180,12 @@ int eth_initialize(bd_t *bis)  #if defined(CONFIG_UEC_ETH4)  	uec_initialize(3);  #endif +#if defined(CONFIG_UEC_ETH5) +	uec_initialize(4); +#endif +#if defined(CONFIG_UEC_ETH6) +	uec_initialize(5); +#endif  #if defined(FEC_ENET) || defined(CONFIG_ETHER_ON_FCC)  	fec_initialize(bis); diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c index 46747d337..6e9c34f3d 100644 --- a/tools/env/fw_env.c +++ b/tools/env/fw_env.c @@ -157,6 +157,12 @@ static char default_environment[] = {  #ifdef	CONFIG_ETH3ADDR  	"eth3addr=" MK_STR (CONFIG_ETH3ADDR) "\0"  #endif +#ifdef	CONFIG_ETH4ADDR +	"eth4addr=" MK_STR (CONFIG_ETH4ADDR) "\0" +#endif +#ifdef	CONFIG_ETH5ADDR +	"eth5addr=" MK_STR (CONFIG_ETH5ADDR) "\0" +#endif  #ifdef	CONFIG_ETHPRIME  	"ethprime=" CONFIG_ETHPRIME "\0"  #endif |