From 1a23f719a1409f1a5867b5c359fc18a8d1e045d2 Mon Sep 17 00:00:00 2001 From: Joe Hershberger Date: Thu, 23 Feb 2012 10:05:52 -0600 Subject: [PATCH] Xilinx: ARM: net: Update xgmac driver to use the NET_MULTI API The NET_MULTI API is required in the upstream u-boot. Get it closer to a state where it could live in the real world. Signed-off-by: Joe Hershberger --- board/xilinx/dfe/board.c | 10 +++++ board/xilinx/dfe/xgmac.c | 78 +++++++++++++++++++++++++----------- include/configs/xpele.h | 1 + include/configs/zynq_zc702.h | 1 + include/configs/zynq_zc770.h | 1 + 5 files changed, 67 insertions(+), 24 deletions(-) diff --git a/board/xilinx/dfe/board.c b/board/xilinx/dfe/board.c index 1a1892c682b..2ca3190edea 100644 --- a/board/xilinx/dfe/board.c +++ b/board/xilinx/dfe/board.c @@ -627,6 +627,16 @@ int board_late_init (void) setenv("modeboot", ""); break; } + + return 0; +} + +extern int Xgmac_register(bd_t *bis); + +int board_eth_init(bd_t *bis) +{ + Xgmac_register(bis); + return 0; } diff --git a/board/xilinx/dfe/xgmac.c b/board/xilinx/dfe/xgmac.c index b70ca16c344..e6effda6152 100644 --- a/board/xilinx/dfe/xgmac.c +++ b/board/xilinx/dfe/xgmac.c @@ -2,20 +2,21 @@ */ #include +#include #include #include "xemacpss.h" /************************ Forward function declaration **********************/ -int Xgmac_process_rx(XEmacPss * EmacPssInstancePtr); -int Xgmac_init_rxq(XEmacPss * EmacPssInstancePtr, void *bd_start, int num_elem); -int Xgmac_make_rxbuff_mem(XEmacPss * EmacPssInstancePtr, void *rx_buf_start, +static int Xgmac_process_rx(XEmacPss * EmacPssInstancePtr); +static int Xgmac_init_rxq(XEmacPss * EmacPssInstancePtr, void *bd_start, int num_elem); +static int Xgmac_make_rxbuff_mem(XEmacPss * EmacPssInstancePtr, void *rx_buf_start, u32 rx_buffsize); -int Xgmac_next_rx_buf(XEmacPss * EmacPssInstancePtr); -int Xgmac_phy_mgmt_idle(XEmacPss * EmacPssInstancePtr); +static int Xgmac_next_rx_buf(XEmacPss * EmacPssInstancePtr); +static int Xgmac_phy_mgmt_idle(XEmacPss * EmacPssInstancePtr); -void set_eth_advertise(XEmacPss * EmacPssInstancePtr, int link_speed); +static void Xgmac_set_eth_advertise(XEmacPss * EmacPssInstancePtr, int link_speed); /*************************** Constant Definitions ***************************/ @@ -93,7 +94,7 @@ static void phy_rst(XEmacPss * e) tmp++; if (tmp > 1000) { /* stalled if reset unfinished after 10 seconds */ puts("***Error: Reset stalled...\n"); - return -1; + return; } } puts("\nPHY reset complete.\n"); @@ -107,12 +108,7 @@ static void Out32(u32 OutAddress, u32 Value) /*****************************************************************************/ -void eth_halt(void) -{ - return; -} - -int eth_init(bd_t * bis) +int Xgmac_one_time_init(void) { int tmp; int link_speed; @@ -121,11 +117,8 @@ int eth_init(bd_t * bis) XEmacPss *EmacPssInstancePtr = &EmacPssInstance; XEmacPss_Bd BdTemplate; - if (ethstate.initialized) { + if (ethstate.initialized) return 1; - } - - ethstate.initialized = 0; Config = XEmacPss_LookupConfig(EMACPSS_DEVICE_ID); @@ -261,9 +254,10 @@ int eth_init(bd_t * bis) /***** Try to establish a link at the highest speed possible *****/ #ifdef CONFIG_EP107 - set_eth_advertise(EmacPssInstancePtr, 100); + Xgmac_set_eth_advertise(EmacPssInstancePtr, 100); #else - set_eth_advertise(EmacPssInstancePtr, 100); + /* Could be 1000 if an unknown bug is fixed */ + Xgmac_set_eth_advertise(EmacPssInstancePtr, 100); #endif phy_rst(EmacPssInstancePtr); @@ -349,7 +343,17 @@ int eth_init(bd_t * bis) return 0; } -int eth_send(volatile void *ptr, int len) +int Xgmac_init(struct eth_device *dev, bd_t * bis) +{ + return 0; +} + +void Xgmac_halt(struct eth_device *dev) +{ + return; +} + +int Xgmac_send(struct eth_device *dev, volatile void *packet, int length) { volatile int Status; XEmacPss_Bd *BdPtr; @@ -371,8 +375,8 @@ int eth_send(volatile void *ptr, int len) /* * Setup TxBD */ - XEmacPss_BdSetAddressTx(BdPtr, (u32) ptr); - XEmacPss_BdSetLength(BdPtr, len); + XEmacPss_BdSetAddressTx(BdPtr, (u32)packet); + XEmacPss_BdSetLength(BdPtr, length); XEmacPss_BdClearTxUsed(BdPtr); XEmacPss_BdSetLast(BdPtr); @@ -432,7 +436,7 @@ int eth_send(volatile void *ptr, int len) } -int eth_rx(void) +int Xgmac_rx(struct eth_device *dev) { u32 status, retval; XEmacPss *EmacPssInstancePtr = &EmacPssInstance; @@ -457,6 +461,32 @@ int eth_rx(void) return 1; } +int Xgmac_register(bd_t * bis) +{ + struct eth_device *dev; + dev = malloc(sizeof(*dev)); + if (dev == NULL) { + return 1; + } + memset(dev, 0, sizeof(*dev)); + sprintf(dev->name, "xgmac"); + + if (Xgmac_one_time_init() < 0) { + printf("xgmac init failed!"); + return -1; + } + dev->iobase = EmacPssInstance.Config.BaseAddress; + dev->priv = &EmacPssInstance; + dev->init = Xgmac_init; + dev->halt = Xgmac_halt; + dev->send = Xgmac_send; + dev->recv = Xgmac_rx; + + eth_register(dev); + + return 0; +} + /*============================================================================= * * Xgmac_process_rx- process the next incoming packet @@ -614,7 +644,7 @@ int Xgmac_next_rx_buf(XEmacPss * EmacPssInstancePtr) return 0; } -void set_eth_advertise(XEmacPss * EmacPssInstancePtr, int link_speed) { +void Xgmac_set_eth_advertise(XEmacPss * EmacPssInstancePtr, int link_speed) { int tmp; diff --git a/include/configs/xpele.h b/include/configs/xpele.h index 0334ee3b487..a7ef962a028 100644 --- a/include/configs/xpele.h +++ b/include/configs/xpele.h @@ -180,6 +180,7 @@ #endif #define CONFIG_TTC0 1 #define CONFIG_GEM0 1 +#define CONFIG_NET_MULTI #ifdef CONFIG_EP107 # define CONFIG_XGMAC_PHY_ADDR 0x17 diff --git a/include/configs/zynq_zc702.h b/include/configs/zynq_zc702.h index c4e8e31cd91..22ea8eee816 100644 --- a/include/configs/zynq_zc702.h +++ b/include/configs/zynq_zc702.h @@ -171,6 +171,7 @@ # define CONFIG_UART1 1 #define CONFIG_TTC0 1 #define CONFIG_GEM0 1 +#define CONFIG_NET_MULTI #define CONFIG_XGMAC_PHY_ADDR 0x7 #define TIMER_INPUT_CLOCK XPAR_CPU_CORTEXA9_CORE_CLOCK_FREQ_HZ / 2 diff --git a/include/configs/zynq_zc770.h b/include/configs/zynq_zc770.h index 6789c1b0a86..621dad66927 100644 --- a/include/configs/zynq_zc770.h +++ b/include/configs/zynq_zc770.h @@ -171,6 +171,7 @@ # define CONFIG_UART1 1 #define CONFIG_TTC0 1 #define CONFIG_GEM0 1 +#define CONFIG_NET_MULTI #define CONFIG_XGMAC_PHY_ADDR 0x7 #define TIMER_INPUT_CLOCK XPAR_CPU_CORTEXA9_CORE_CLOCK_FREQ_HZ / 2 -- 2.47.3