From: Joe Hershberger Date: Wed, 6 Jun 2012 02:10:39 +0000 (-0500) Subject: Xilinx: ARM: net: Move the Zynq GEM driver to drivers/net X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=27033864520d9492ba3f9a5829d5ce5876be3890;p=thirdparty%2Fu-boot.git Xilinx: ARM: net: Move the Zynq GEM driver to drivers/net The Gigabit Ethernet Mac driver for Zynq should be available to any board that uses Zynq Signed-off-by: Joe Hershberger --- diff --git a/board/xilinx/zynq_common/Makefile b/board/xilinx/zynq_common/Makefile index de16eae7340..64ad496d32f 100644 --- a/board/xilinx/zynq_common/Makefile +++ b/board/xilinx/zynq_common/Makefile @@ -31,10 +31,6 @@ LIB = $(obj)lib$(BOARD).o COBJS-y := board.o \ ../common/xbasic_types.o -COBJS-$(CONFIG_CMD_NET) += xemacps_g.o xemacps_control.o \ - xemacps_sinit.o xemacps_bdring.o \ - xemacps.o xgmac.o - COBJS := $(sort $(COBJS-y)) SOBJS := lowlevel_init.o diff --git a/board/xilinx/zynq_common/board.c b/board/xilinx/zynq_common/board.c index 6a029fd11c1..212f96cfae4 100644 --- a/board/xilinx/zynq_common/board.c +++ b/board/xilinx/zynq_common/board.c @@ -671,7 +671,7 @@ int board_late_init (void) #ifdef CONFIG_CMD_NET int board_eth_init(bd_t *bis) { - return Xgmac_register(bis); + return zynq_gem_initialize(bis); } #endif diff --git a/board/xilinx/zynq_common/xgmac.h b/board/xilinx/zynq_common/xgmac.h deleted file mode 100644 index 58b225266cc..00000000000 --- a/board/xilinx/zynq_common/xgmac.h +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Harvested from Cadence driver. - */ - -#ifndef __XZYNQETH_H__ -#define __XZYNQETH_H__ - -#define XZYNQETH_RX_BUF_SIZE 128 - -#define XZYNQETH_RBQ_LENGTH 128 -#define XZYNQETH_TBQ_LENGTH 128 - -#define XZYNQETH_MDIO_ENABLED (GEM_MDIO_EN) - -#define XZYNQETH_DEF_PCLK_DIV (MDC_DIV_32) - -#define XZYNQETH_DEF_AHB_WIDTH (AMBA_AHB_32) - -#define XZYNQETH_DEF_DUPLEX (GEM_FULL_DUPLEX) - -#define XZYNQETH_DEF_SPEED (SPEED_100M) - -#define XZYNQETH_DEF_LOOP (LB_NONE) - -#define XZYNQETH_READ_SNAP (1<<14) /* Read snapshot register */ -#define XZYNQETH_TAKE_SNAP (1<<13) /* Take a snapshot */ -/* Transmit zero quantum pause frame */ -#define XZYNQETH_TX_0Q_PAUSE (1<<12) -#define XZYNQETH_TX_PAUSE (1<<11) /* Transmit pause frame */ -/* Halt transmission after curr frame */ -#define XZYNQETH_TX_HALT (1<<10) -#define XZYNQETH_TX_START (1<<9) /* Start tx (tx_go) */ -/* Enable writing to stat registers */ -#define XZYNQETH_STATS_WR_EN (1<<7) -#define XZYNQETH_STATS_INC (1<<6) /* Increment statistic registers */ -#define XZYNQETH_STATS_CLR (1<<5) /* Clear statistic registers */ -#define XZYNQETH_MDIO_EN (1<<4) /* Enable MDIO port */ -#define XZYNQETH_TX_EN (1<<3) /* Enable transmit circuits */ -#define XZYNQETH_RX_EN (1<<2) /* Enable receive circuits */ -#define XZYNQETH_LB_MAC (1<<1) /* Perform local loopback at MAC */ -/* Perform ext loopback through PHY */ -#define XZYNQETH_LB_PHY (1<<0) - -/* Do not copy pause frames to memory */ -#define XZYNQETH_RX_NO_PAUSE (1<<23) -#define XZYNQETH_AHB_WIDTH1 (1<<22) /* Bit 1 for defining AHB width */ -#define XZYNQETH_AHB_WIDTH0 (1<<21) /* Bit 0 for defining AHB width */ -#define XZYNQETH_MDC_DIV2 (1<<20) /* PCLK divisor for MDC, bit 2 */ -#define XZYNQETH_MDC_DIV1 (1<<19) /* PCLK divisor for MDC, bit 1 */ -#define XZYNQETH_MDC_DIV0 (1<<18) /* PCLK divisor for MDC, bit 0 */ -/* Discard FCS from received frames. */ -#define XZYNQETH_RX_NO_FCS (1<<17) -#define XZYNQETH_RX_LEN_CHK (1<<16) /* Receive length check. */ -/* Pos of LSB for rx buffer offsets. */ -#define XZYNQETH_RX_OFFSET_BASE 14 -/* RX offset bit 1 */ -#define XZYNQETH_RX_OFFSET1 (1<<(GEM_RX_OFFSET_BASE + 1)) -/* RX offset bit 0 */ -#define XZYNQETH_RX_OFFSET0 (1<tbq_end) -#define gem_get_tbq_current(mac) ((mac)->tbq_current) - -#define gem_get_rbq_end(mac) ((mac)->rbq_end) -#define gem_get_rbq_current(mac) ((mac)->rbq_current) - -#define gem_check_free_tbq_buf(mac) \ - -#define gem_check_a_free_tbq_buf(mac, index) \ - -#define gem_get_free_tbq_num(mac, free_tbq_num) \ - diff --git a/drivers/net/Makefile b/drivers/net/Makefile index fd9d0b4be11..24d860d4cd7 100644 --- a/drivers/net/Makefile +++ b/drivers/net/Makefile @@ -84,6 +84,8 @@ COBJS-$(CONFIG_TSI108_ETH) += tsi108_eth.o COBJS-$(CONFIG_ULI526X) += uli526x.o COBJS-$(CONFIG_VSC7385_ENET) += vsc7385.o COBJS-$(CONFIG_XILINX_EMACLITE) += xilinx_emaclite.o +COBJS-$(CONFIG_ZYNQ_GEM) += zynq_gem.o zynq_gem_bdring.o zynq_gem_control.o \ + zynq_gem_g.o zynq_gem_sinit.o zynq_gem_wrap.o COBJS := $(sort $(COBJS-y)) SRCS := $(COBJS:.o=.c) diff --git a/board/xilinx/zynq_common/xemacps.c b/drivers/net/zynq_gem.c similarity index 99% rename from board/xilinx/zynq_common/xemacps.c rename to drivers/net/zynq_gem.c index b28af0f1886..32c6548415b 100644 --- a/board/xilinx/zynq_common/xemacps.c +++ b/drivers/net/zynq_gem.c @@ -41,10 +41,10 @@ /*****************************************************************************/ /** * -* @file xemacps.c +* @file zynq_gem.c * * The XEmacPss driver. Functions in this file are the minimum required functions -* for this driver. See xemacps.h for a detailed description of the driver. +* for this driver. See zynq_gem.h for a detailed description of the driver. * *
 * MODIFICATION HISTORY:
@@ -57,7 +57,7 @@
 
 /***************************** Include Files *********************************/
 
-#include "xemacps.h"
+#include "zynq_gem.h"
 
 /************************** Constant Definitions *****************************/
 
diff --git a/board/xilinx/zynq_common/xemacps.h b/drivers/net/zynq_gem.h
similarity index 98%
rename from board/xilinx/zynq_common/xemacps.h
rename to drivers/net/zynq_gem.h
index 08e2de4db7c..912d2c1841c 100644
--- a/board/xilinx/zynq_common/xemacps.h
+++ b/drivers/net/zynq_gem.h
@@ -41,7 +41,7 @@
 /****************************************************************************/
 /**
  *
- * @file xemacps.h
+ * @file zynq_gem.h
  *
  * The Xilinx Embedded Processor Block Ethernet driver.
  *
@@ -117,7 +117,7 @@
  *
  * This API requires the user to understand how the DMA operates. The
  * following paragraphs provide some explanation, but the user is encouraged
- * to read documentation in xemacps_bdring.h as well as study example code
+ * to read documentation in zynq_gem_bdring.h as well as study example code
  * that accompanies this driver.
  *
  * The API is designed to get BDs to and from the DMA engine in the most
@@ -174,7 +174,7 @@
  * Alignment & Data Cache Restrictions
  *
  * Due to the design of the hardware, all RX buffers, BDs need to be 4-byte
- * aligned. Please reference xemacps_bd.h for cache related macros.
+ * aligned. Please reference zynq_gem_bd.h for cache related macros.
  *
  * DMA Tx:
  *
@@ -289,9 +289,9 @@ extern "C" {
 
 #include "xbasic_types.h"
 #include "xstatus.h"
-#include "xemacps_hw.h"
-#include "xemacps_bd.h"
-#include "xemacps_bdring.h"
+#include "zynq_gem_hw.h"
+#include "zynq_gem_bd.h"
+#include "zynq_gem_bdring.h"
 
 /************************** Constant Definitions ****************************/
 
@@ -430,7 +430,7 @@ extern "C" {
  * @param CallBackRef is user data assigned when the callback was set.
  *
  * @note
- * See xemacps_hw.h for bitmasks definitions and the device hardware spec for
+ * See zynq_gem_hw.h for bitmasks definitions and the device hardware spec for
  * further information on their meaning.
  *
  */
@@ -632,7 +632,7 @@ typedef struct XEmacPss {
 /************************** Function Prototypes *****************************/
 
 /*
- * Initialization functions in xemacps.c
+ * Initialization functions in zynq_gem.c
  */
 int XEmacPss_CfgInitialize(XEmacPss *InstancePtr, XEmacPss_Config *CfgPtr,
 			   u32 EffectiveAddress);
@@ -641,7 +641,7 @@ void XEmacPss_Stop(XEmacPss *InstancePtr);
 void XEmacPss_Reset(XEmacPss *InstancePtr);
 
 /*
- * Lookup configuration in xemacps_sinit.c
+ * Lookup configuration in zynq_gem_sinit.c
  */
 XEmacPss_Config *XEmacPss_LookupConfig(u16 DeviceId);
 
@@ -654,7 +654,7 @@ int XEmacPss_SetHandler(XEmacPss *InstancePtr, u32 HandlerType,
 void XEmacPss_IntrHandler(void *InstancePtr);
 
 /*
- * MAC configuration/control functions in XEmacPss_control.c
+ * MAC configuration/control functions in zynq_gem_control.c
  */
 int XEmacPss_SetOptions(XEmacPss *InstancePtr, u32 Options);
 int XEmacPss_ClearOptions(XEmacPss *InstancePtr, u32 Options);
diff --git a/board/xilinx/zynq_common/xemacps_bd.h b/drivers/net/zynq_gem_bd.h
similarity index 99%
rename from board/xilinx/zynq_common/xemacps_bd.h
rename to drivers/net/zynq_gem_bd.h
index 74778b2c24d..c2f0d2ad214 100644
--- a/board/xilinx/zynq_common/xemacps_bd.h
+++ b/drivers/net/zynq_gem_bd.h
@@ -41,7 +41,7 @@
 /*****************************************************************************/
 /**
  *
- * @file xemacps_bd.h
+ * @file zynq_gem_bd.h
  *
  * This header provides operations to manage buffer descriptors in support
  * of scatter-gather DMA.
diff --git a/board/xilinx/zynq_common/xemacps_bdring.c b/drivers/net/zynq_gem_bdring.c
similarity index 99%
rename from board/xilinx/zynq_common/xemacps_bdring.c
rename to drivers/net/zynq_gem_bdring.c
index 8224d62e9c3..58134b2d206 100644
--- a/board/xilinx/zynq_common/xemacps_bdring.c
+++ b/drivers/net/zynq_gem_bdring.c
@@ -41,7 +41,7 @@
 /*****************************************************************************/
 /**
 *
-* @file xemacps_bdring.c
+* @file zynq_gem_bdring.c
 *
 * This file implements buffer descriptor ring related functions.
 *
@@ -58,9 +58,9 @@
 
 #include "xstatus.h"
 //#include "xcache.h"
-#include "xemacps_hw.h"
-#include "xemacps_bd.h"
-#include "xemacps_bdring.h"
+#include "zynq_gem_hw.h"
+#include "zynq_gem_bd.h"
+#include "zynq_gem_bdring.h"
 
 /************************** Constant Definitions *****************************/
 
@@ -415,7 +415,7 @@ int XEmacPss_BdRingClone(XEmacPss_BdRing * RingPtr, XEmacPss_Bd * SrcBdPtr,
  *        XEmacPss_BdRingToHw(MyRingPtr, NumBd1, MySet1);
  * 
* - * Use the API defined in xemacps_bd.h to modify individual BDs. Traversal + * Use the API defined in zynq_gem_bd.h to modify individual BDs. Traversal * of the BD set can be done using XEmacPss_BdRingNext() and * XEmacPss_BdRingPrev(). * diff --git a/board/xilinx/zynq_common/xemacps_bdring.h b/drivers/net/zynq_gem_bdring.h similarity index 99% rename from board/xilinx/zynq_common/xemacps_bdring.h rename to drivers/net/zynq_gem_bdring.h index 9beaae6a91f..e97284de44d 100644 --- a/board/xilinx/zynq_common/xemacps_bdring.h +++ b/drivers/net/zynq_gem_bdring.h @@ -41,7 +41,7 @@ /*****************************************************************************/ /** * -* @file xemacps_bdring.h +* @file zynq_gem_bdring.h * * The Xiline EmacPss Buffer Descriptor ring driver. This is part of EmacPss * DMA functionalities. @@ -213,7 +213,7 @@ typedef struct { /************************** Function Prototypes ******************************/ /* - * Scatter gather DMA related functions in xemacps_bdring.c + * Scatter gather DMA related functions in zynq_gem_bdring.c */ int XEmacPss_BdRingCreate(XEmacPss_BdRing * RingPtr, u32 PhysAddr, u32 VirtAddr, u32 Alignment, unsigned BdCount); diff --git a/board/xilinx/zynq_common/xemacps_control.c b/drivers/net/zynq_gem_control.c similarity index 99% rename from board/xilinx/zynq_common/xemacps_control.c rename to drivers/net/zynq_gem_control.c index 1f605cb3d0a..316139d0208 100644 --- a/board/xilinx/zynq_common/xemacps_control.c +++ b/drivers/net/zynq_gem_control.c @@ -41,10 +41,10 @@ /*****************************************************************************/ /** * - * @file xemacps_control.c + * @file zynq_gem_control.c * * Functions in this file implement general purpose command and control related - * functionality. See xemacps.h for a detailed description of the driver. + * functionality. See zynq_gem.h for a detailed description of the driver. * *
  * MODIFICATION HISTORY:
@@ -57,7 +57,7 @@
 
 /***************************** Include Files *********************************/
 
-#include "xemacps.h"
+#include "zynq_gem.h"
 
 /************************** Constant Definitions *****************************/
 
@@ -371,7 +371,7 @@ int XEmacPss_SetTypeIdCheck(XEmacPss *InstancePtr, u32 Id_Check, u8 Index)
  * - XST_DEVICE_IS_STARTED if the device has not yet been stopped
  *
  * @note
- * See xemacps.h for a description of the available options.
+ * See zynq_gem.h for a description of the available options.
  *
  *****************************************************************************/
 int XEmacPss_SetOptions(XEmacPss *InstancePtr, u32 Options)
@@ -506,7 +506,7 @@ int XEmacPss_SetOptions(XEmacPss *InstancePtr, u32 Options)
  * - XST_DEVICE_IS_STARTED if the device has not yet been stopped
  *
  * @note
- * See xemacps.h for a description of the available options.
+ * See zynq_gem.h for a description of the available options.
  *
  *****************************************************************************/
 int XEmacPss_ClearOptions(XEmacPss *InstancePtr, u32 Options)
@@ -638,7 +638,7 @@ int XEmacPss_ClearOptions(XEmacPss *InstancePtr, u32 Options)
  * as a set opion.
  *
  * @note
- * See xemacps.h for a description of the available options.
+ * See zynq_gem.h for a description of the available options.
  *
  *****************************************************************************/
 u32 XEmacPss_GetOptions(XEmacPss *InstancePtr)
diff --git a/board/xilinx/zynq_common/xemacps_g.c b/drivers/net/zynq_gem_g.c
similarity index 98%
rename from board/xilinx/zynq_common/xemacps_g.c
rename to drivers/net/zynq_gem_g.c
index f3ab32168b4..149d317519d 100644
--- a/board/xilinx/zynq_common/xemacps_g.c
+++ b/drivers/net/zynq_gem_g.c
@@ -41,7 +41,7 @@
 /*****************************************************************************/
 /**
 *
-* @file xemacps_g.c
+* @file zynq_gem_g.c
 *
 * This file contains a configuration table that specifies the configuration of
 * ethernet devices in the system.
@@ -65,7 +65,7 @@
 
 /***************************** Include Files *********************************/
 
-#include "xemacps.h"
+#include "zynq_gem.h"
 
 /************************** Constant Definitions *****************************/
 
diff --git a/board/xilinx/zynq_common/xemacps_hw.h b/drivers/net/zynq_gem_hw.h
similarity index 99%
rename from board/xilinx/zynq_common/xemacps_hw.h
rename to drivers/net/zynq_gem_hw.h
index 24b3442cf01..4e11d2198fe 100644
--- a/board/xilinx/zynq_common/xemacps_hw.h
+++ b/drivers/net/zynq_gem_hw.h
@@ -41,11 +41,11 @@
 /*****************************************************************************/
 /**
 *
-* @file xemacps_hw.h
+* @file zynq_gem_hw.h
 *
 * This header file contains identifiers and low-level driver functions (or
 * macros) that can be used to access the PSS Ethernet MAC (XEmacPss) device.
-* High-level driver functions are defined in xemacps.h.
+* High-level driver functions are defined in zynq_gem.h.
 *
 * @note
 *
@@ -528,7 +528,7 @@ typedef enum { XMDC_DIV_8 = 0, XMDC_DIV_16, XMDC_DIV_32, XMDC_DIV_48,
  * Define appropriate I/O access method to mempry mapped I/O or other
  * intarfce if necessary.
  */
-/* Defined in xemacps_control.c*/
+/* Defined in zynq_gem_control.c*/
 void XIo_Out32(u32 OutAddress, u32 Value);
 u32 XIo_In32(u32 InAddress);
 
diff --git a/board/xilinx/zynq_common/xemacps_sinit.c b/drivers/net/zynq_gem_sinit.c
similarity index 98%
rename from board/xilinx/zynq_common/xemacps_sinit.c
rename to drivers/net/zynq_gem_sinit.c
index dd055081716..1af1e0c646f 100644
--- a/board/xilinx/zynq_common/xemacps_sinit.c
+++ b/drivers/net/zynq_gem_sinit.c
@@ -41,7 +41,7 @@
 /*****************************************************************************/
 /**
 *
-* @file xemacps_sinit.c
+* @file zynq_gem_sinit.c
 *
 * This file contains lookup method by device ID when success, it returns
 * pointer to config table to be used to initialize the device.
@@ -58,7 +58,7 @@
 
 /***************************** Include Files *********************************/
 
-#include "xemacps.h"
+#include "zynq_gem.h"
 
 /************************** Constant Definitions *****************************/
 
diff --git a/board/xilinx/zynq_common/xgmac.c b/drivers/net/zynq_gem_wrap.c
similarity index 99%
rename from board/xilinx/zynq_common/xgmac.c
rename to drivers/net/zynq_gem_wrap.c
index 5c7484b2cf1..5b1f06ce6df 100644
--- a/board/xilinx/zynq_common/xgmac.c
+++ b/drivers/net/zynq_gem_wrap.c
@@ -6,7 +6,7 @@
 #include 
 #include 
 
-#include "xemacps.h"
+#include "zynq_gem.h"
 
 /************************ Forward function declaration **********************/
 
@@ -58,7 +58,7 @@ XEmacPss EmacPssInstance;
 /*
 *	Following are the supporting functions to read and write GEM PHY registers.
 */
-int Xgmac_phy_mgmt_idle(XEmacPss * EmacPssInstancePtr)
+static int Xgmac_phy_mgmt_idle(XEmacPss * EmacPssInstancePtr)
 {
 	return ((XEmacPss_ReadReg
 		 (EmacPssInstancePtr->Config.BaseAddress, XEMACPSS_NWSR_OFFSET)
@@ -508,7 +508,7 @@ static int Xgmac_write_hwaddr(struct eth_device *dev)
 	return 0;
 }
 
-int Xgmac_register(bd_t *bis)
+int zynq_gem_initialize(bd_t *bis)
 {
 	struct eth_device *dev;
 	dev = malloc(sizeof(*dev));
@@ -516,10 +516,10 @@ int Xgmac_register(bd_t *bis)
 		return 1;
 
 	memset(dev, 0, sizeof(*dev));
-	sprintf(dev->name, "xgmac");
+	sprintf(dev->name, "zynq_gem");
 
 	if (Xgmac_one_time_init() < 0) {
-		printf("xgmac init failed!");
+		printf("zynq_gem init failed!");
 		return -1;
 	}
 	dev->iobase = EmacPssInstance.Config.BaseAddress;
diff --git a/include/configs/zynq_ep107.h b/include/configs/zynq_ep107.h
index be454265283..4e81ad7de58 100644
--- a/include/configs/zynq_ep107.h
+++ b/include/configs/zynq_ep107.h
@@ -73,6 +73,7 @@
 # define CONFIG_UART0
 #define CONFIG_TTC0
 #define CONFIG_GEM0
+#define CONFIG_ZYNQ_GEM
 #define CONFIG_NET_MULTI
 #define CONFIG_XGMAC_PHY_ADDR 0x17
 
diff --git a/include/configs/zynq_zc702.h b/include/configs/zynq_zc702.h
index a57b9b1fb08..dfeda24f216 100644
--- a/include/configs/zynq_zc702.h
+++ b/include/configs/zynq_zc702.h
@@ -48,6 +48,7 @@
 #define CONFIG_UART1
 #define CONFIG_TTC0
 #define CONFIG_GEM0
+#define CONFIG_ZYNQ_GEM
 #define CONFIG_NET_MULTI
 #define CONFIG_XGMAC_PHY_ADDR 0x7
 
diff --git a/include/configs/zynq_zc770.h b/include/configs/zynq_zc770.h
index a444ea5147f..9cf2cdcf6bd 100644
--- a/include/configs/zynq_zc770.h
+++ b/include/configs/zynq_zc770.h
@@ -94,6 +94,7 @@
  */
 #if defined(CONFIG_ZC770_XM010) || defined(CONFIG_ZC770_XM013)
 #define CONFIG_CMD_PING
+#define CONFIG_ZYNQ_GEM
 #define CONFIG_NET_MULTI
 #define CONFIG_XGMAC_PHY_ADDR 0x7
 #else
diff --git a/include/configs/zynq_zed.h b/include/configs/zynq_zed.h
index 3e922288a07..d8e6525c624 100644
--- a/include/configs/zynq_zed.h
+++ b/include/configs/zynq_zed.h
@@ -85,8 +85,9 @@
 # define CONFIG_UART1
 #define CONFIG_TTC0
 #define CONFIG_GEM0
-#define CONFIG_XGMAC_PHY_ADDR 0
+#define CONFIG_ZYNQ_GEM
 #define CONFIG_NET_MULTI
+#define CONFIG_XGMAC_PHY_ADDR 0
 
 /*
  * Physical Memory map
diff --git a/include/netdev.h b/include/netdev.h
index 303af033413..0c263f32f64 100644
--- a/include/netdev.h
+++ b/include/netdev.h
@@ -94,7 +94,7 @@ int xilinx_emaclite_initialize (bd_t *bis, int base_addr);
 int sh_eth_initialize(bd_t *bis);
 int dm9000_initialize(bd_t *bis);
 int fecmxc_initialize(bd_t *bis);
-int Xgmac_register(bd_t *bis);
+int zynq_gem_initialize(bd_t *bis);
 
 /* Boards with PCI network controllers can call this from their board_eth_init()
  * function to initialize whatever's on board.