]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
Xilinx: ARM: net: Update xgmac driver to use the NET_MULTI API
authorJoe Hershberger <joe.hershberger@ni.com>
Thu, 23 Feb 2012 16:05:52 +0000 (10:05 -0600)
committerJagan <jaganna@xilinx.com>
Thu, 31 May 2012 07:39:53 +0000 (13:09 +0530)
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 <joe.hershberger@ni.com>
board/xilinx/dfe/board.c
board/xilinx/dfe/xgmac.c
include/configs/xpele.h
include/configs/zynq_zc702.h
include/configs/zynq_zc770.h

index 1a1892c682bd2dbed83f6cd4e30780bbbded8d78..2ca3190edea1afe63446af4f1104f927099b0dce 100644 (file)
@@ -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;
 }
 
index b70ca16c344a2c4537fb8955de5aa3250fac7534..e6effda6152a4751dc33d738be071e18ed7b98bb 100644 (file)
@@ -2,20 +2,21 @@
  */
 
 #include <common.h>
+#include <malloc.h>
 #include <net.h>
 
 #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;
 
index 0334ee3b48717ee9275be1b809ec2eaa1da9b4ec..a7ef962a028819f0a092a785f85fa75cd57eb0b5 100644 (file)
 #endif
 #define CONFIG_TTC0    1
 #define CONFIG_GEM0    1
+#define CONFIG_NET_MULTI
 
 #ifdef CONFIG_EP107
 # define CONFIG_XGMAC_PHY_ADDR 0x17
index c4e8e31cd9192d0c709823e801ab9091ee4b239d..22ea8eee81677d0b70d95743964832c28ff9ed25 100644 (file)
 # 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
index 6789c1b0a86e3184a0b6da71185f99cc579b7da0..621dad66927470b336ece2da0d4ba145b9e02bf8 100644 (file)
 # 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