
Added for convenience for other platforms that uses MPC8360 (has eight UCC). Six eth interface is chosen because the platform I am using combines UCC1&2 and UCC3&4 as two gigEth and the other four UCC as 10/100 Eth.
Signed-off-by: Richard Retanubun RichardRetanubun@RugggedCom.com --- V2 of this patch adds CONFIG_ETH6ADDR to README and removes #if defined(CONFIG_HAS_ETH0) from common/cmd_bdinfo.c
README | 3 ++ common/cmd_bdinfo.c | 14 +++++++++++++ common/env_common.c | 9 ++++++++ common/env_embedded.c | 9 ++++++++ cpu/mpc83xx/fdt.c | 3 +- drivers/qe/uec.c | 48 +++++++++++++++++++++++++++++++++++++++++++++- include/asm-ppc/u-boot.h | 6 +++++ lib_ppc/board.c | 30 ++++++++++++++++++++++++++++ net/eth.c | 6 +++++ tools/env/fw_env.c | 9 ++++++++ 10 files changed, 135 insertions(+), 2 deletions(-)
diff --git a/README b/README index ccd839c..d623037 100644 --- a/README +++ b/README @@ -1097,6 +1097,9 @@ The following options need to be configured: CONFIG_ETHADDR CONFIG_ETH2ADDR CONFIG_ETH3ADDR + CONFIG_ETH4ADDR + CONFIG_ETH5ADDR + CONFIG_ETH6ADDR
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 f4d9d40..5018930 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 77f9944..d536137 100644 --- a/common/env_common.c +++ b/common/env_common.c @@ -91,6 +91,15 @@ 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_ETH6ADDR + "eth6addr=" MK_STR(CONFIG_ETH6ADDR) "\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 77e5619..4848bf1 100644 --- a/common/env_embedded.c +++ b/common/env_embedded.c @@ -135,6 +135,15 @@ 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_ETH6ADDR + "eth6addr=" MK_STR(CONFIG_ETH6ADDR) "\0" +#endif #ifdef CONFIG_ETHPRIME "ethprime=" CONFIG_ETHPRIME "\0" #endif diff --git a/cpu/mpc83xx/fdt.c b/cpu/mpc83xx/fdt.c index 39bd9dc..3e3e1c8 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 344c649..e1dec5e 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 54ac01d..7451905 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 c02ac62..d440722 100644 --- a/lib_ppc/board.c +++ b/lib_ppc/board.c @@ -944,6 +944,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) || \ diff --git a/net/eth.c b/net/eth.c index 432dd60..ccd871a 100644 --- a/net/eth.c +++ b/net/eth.c @@ -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 46747d3..d41175f 100644 --- a/tools/env/fw_env.c +++ b/tools/env/fw_env.c @@ -157,6 +157,15 @@ 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_ETH6ADDR + "eth6addr=" MK_STR (CONFIG_ETH6ADDR) "\0" +#endif #ifdef CONFIG_ETHPRIME "ethprime=" CONFIG_ETHPRIME "\0" #endif