浏览代码

fec: Add support for Freescale MX27

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Acked-by: Greg Ungerer <gerg@uclinux.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Sascha Hauer 16 年之前
父节点
当前提交
196719ecec
共有 3 个文件被更改,包括 25 次插入7 次删除
  1. 3 3
      drivers/net/Kconfig
  2. 13 2
      drivers/net/fec.c
  3. 9 2
      drivers/net/fec.h

+ 3 - 3
drivers/net/Kconfig

@@ -1828,11 +1828,11 @@ config 68360_ENET
 	  the Motorola 68360 processor.
 	  the Motorola 68360 processor.
 
 
 config FEC
 config FEC
-	bool "FEC ethernet controller (of ColdFire CPUs)"
-	depends on M523x || M527x || M5272 || M528x || M520x
+	bool "FEC ethernet controller (of ColdFire and some i.MX CPUs)"
+	depends on M523x || M527x || M5272 || M528x || M520x || MACH_MX27
 	help
 	help
 	  Say Y here if you want to use the built-in 10/100 Fast ethernet
 	  Say Y here if you want to use the built-in 10/100 Fast ethernet
-	  controller on some Motorola ColdFire processors.
+	  controller on some Motorola ColdFire and Freescale i.MX processors.
 
 
 config FEC2
 config FEC2
 	bool "Second FEC ethernet controller (on some ColdFire CPUs)"
 	bool "Second FEC ethernet controller (on some ColdFire CPUs)"

+ 13 - 2
drivers/net/fec.c

@@ -38,10 +38,14 @@
 #include <linux/bitops.h>
 #include <linux/bitops.h>
 #include <linux/io.h>
 #include <linux/io.h>
 #include <linux/irq.h>
 #include <linux/irq.h>
+#include <linux/clk.h>
 
 
 #include <asm/cacheflush.h>
 #include <asm/cacheflush.h>
+
+#ifndef CONFIG_ARCH_MXC
 #include <asm/coldfire.h>
 #include <asm/coldfire.h>
 #include <asm/mcfsim.h>
 #include <asm/mcfsim.h>
+#endif
 
 
 #include "fec.h"
 #include "fec.h"
 
 
@@ -51,6 +55,13 @@
 #define	FEC_MAX_PORTS	1
 #define	FEC_MAX_PORTS	1
 #endif
 #endif
 
 
+#ifdef CONFIG_ARCH_MXC
+#include <mach/hardware.h>
+#define FEC_ALIGNMENT	0xf
+#else
+#define FEC_ALIGNMENT	0x3
+#endif
+
 #if defined(CONFIG_M5272)
 #if defined(CONFIG_M5272)
 #define HAVE_mii_link_interrupt
 #define HAVE_mii_link_interrupt
 #endif
 #endif
@@ -158,7 +169,7 @@ typedef struct {
  * account when setting it.
  * account when setting it.
  */
  */
 #if defined(CONFIG_M523x) || defined(CONFIG_M527x) || defined(CONFIG_M528x) || \
 #if defined(CONFIG_M523x) || defined(CONFIG_M527x) || defined(CONFIG_M528x) || \
-    defined(CONFIG_M520x) || defined(CONFIG_M532x)
+    defined(CONFIG_M520x) || defined(CONFIG_M532x) || defined(CONFIG_ARCH_MXC)
 #define	OPT_FRAME_SIZE	(PKT_MAXBUF_SIZE << 16)
 #define	OPT_FRAME_SIZE	(PKT_MAXBUF_SIZE << 16)
 #else
 #else
 #define	OPT_FRAME_SIZE	0
 #define	OPT_FRAME_SIZE	0
@@ -339,7 +350,7 @@ fec_enet_start_xmit(struct sk_buff *skb, struct net_device *dev)
 	 *	4-byte boundaries. Use bounce buffers to copy data
 	 *	4-byte boundaries. Use bounce buffers to copy data
 	 *	and get it aligned. Ugh.
 	 *	and get it aligned. Ugh.
 	 */
 	 */
-	if (bdp->cbd_bufaddr & 0x3) {
+	if (bdp->cbd_bufaddr & FEC_ALIGNMENT) {
 		unsigned int index;
 		unsigned int index;
 		index = bdp - fep->tx_bd_base;
 		index = bdp - fep->tx_bd_base;
 		memcpy(fep->tx_bounce[index], (void *)skb->data, skb->len);
 		memcpy(fep->tx_bounce[index], (void *)skb->data, skb->len);

+ 9 - 2
drivers/net/fec.h

@@ -14,7 +14,7 @@
 /****************************************************************************/
 /****************************************************************************/
 
 
 #if defined(CONFIG_M523x) || defined(CONFIG_M527x) || defined(CONFIG_M528x) || \
 #if defined(CONFIG_M523x) || defined(CONFIG_M527x) || defined(CONFIG_M528x) || \
-    defined(CONFIG_M520x) || defined(CONFIG_M532x)
+    defined(CONFIG_M520x) || defined(CONFIG_M532x) || defined(CONFIG_ARCH_MXC)
 /*
 /*
  *	Just figures, Motorola would have to change the offsets for
  *	Just figures, Motorola would have to change the offsets for
  *	registers in the same peripheral device on different models
  *	registers in the same peripheral device on different models
@@ -103,12 +103,19 @@ typedef struct fec {
 /*
 /*
  *	Define the buffer descriptor structure.
  *	Define the buffer descriptor structure.
  */
  */
+#ifdef CONFIG_ARCH_MXC
+typedef struct bufdesc {
+	unsigned short cbd_datlen;	/* Data length */
+	unsigned short cbd_sc;	/* Control and status info */
+	unsigned long cbd_bufaddr;	/* Buffer address */
+} cbd_t;
+#else
 typedef struct bufdesc {
 typedef struct bufdesc {
 	unsigned short	cbd_sc;			/* Control and status info */
 	unsigned short	cbd_sc;			/* Control and status info */
 	unsigned short	cbd_datlen;		/* Data length */
 	unsigned short	cbd_datlen;		/* Data length */
 	unsigned long	cbd_bufaddr;		/* Buffer address */
 	unsigned long	cbd_bufaddr;		/* Buffer address */
 } cbd_t;
 } cbd_t;
-
+#endif
 
 
 /*
 /*
  *	The following definitions courtesy of commproc.h, which where
  *	The following definitions courtesy of commproc.h, which where