netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/5] fixup locking on m68knommu fec
@ 2008-04-02 20:58 Sebastian Siewior
  2008-04-02 20:58 ` [PATCH 3/5] m68knommu: fec typedef a function Sebastian Siewior
                   ` (5 more replies)
  0 siblings, 6 replies; 14+ messages in thread
From: Sebastian Siewior @ 2008-04-02 20:58 UTC (permalink / raw)
  To: Greg Ungerer; +Cc: Jeff Garzik, netdev, uclinux-dev

This series basically fixes my locking problem. We have here:
#1 the old one which removes some undefined vars.
#2 cleans the file with lident. I had trouble reading the code...
#3 type def a function pointer so we don't have the long defines
   and move the callback after releasing the lock.
#4 This one fixes the locking I guess. My mcf5235 did not race anymore
   after that one. I saw 0a504779d while forming the patch so I guess
   we could revert that one, Greg?
#5 removes the registration of interrupt handlers & enabling interrupt
   sources that are not handled. I stepped into this after I thought that
   it is over :) Greg, Should we also remove that part where we enable
   the irq controller (I though request_irq() is doing that).

Sebastian


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 3/5] m68knommu: fec typedef a function
  2008-04-02 20:58 [PATCH 0/5] fixup locking on m68knommu fec Sebastian Siewior
@ 2008-04-02 20:58 ` Sebastian Siewior
  2008-04-02 20:58 ` [PATCH 2/5] m68knommu: fec: small coding style cleanup Sebastian Siewior
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 14+ messages in thread
From: Sebastian Siewior @ 2008-04-02 20:58 UTC (permalink / raw)
  To: Greg Ungerer; +Cc: Jeff Garzik, netdev, uclinux-dev

[-- Attachment #1: m68knommu-fec-typedef_mii_func.diff --]
[-- Type: text/plain, Size: 1852 bytes --]

Make a typedef for a function that is refered as a function pointer.
Also move the conditial call of the callback function in fec_enet_mii()
of the area that is protected with spinlock beacause the callbacked
function might grab the same lock.

Signed-off-by: Sebastian Siewior <bigeasy@linutronix.de>
--- a/drivers/net/fec.c
+++ b/drivers/net/fec.c
@@ -116,10 +116,10 @@ static unsigned char fec_mac_default[] =
 
 /* Forward declarations of some structures to support different PHYs
 */
-
+typedef void (mii_func)(uint val, struct net_device *dev);
 typedef struct {
 	uint mii_data;
-	void (*funct)(uint mii_reg, struct net_device *dev);
+	mii_func *funct;
 } phy_cmd_t;
 
 typedef struct {
@@ -258,8 +258,7 @@ static mii_list_t *mii_free;
 static mii_list_t *mii_head;
 static mii_list_t *mii_tail;
 
-static int mii_queue(struct net_device *dev, int request,
-		     void (*func) (uint, struct net_device *));
+static int mii_queue(struct net_device *dev, int request, mii_func *funct);
 
 /* Make MII read/write commands for the FEC.
 */
@@ -693,6 +692,7 @@ static void fec_enet_mii(struct net_devi
 	volatile fec_t *ep;
 	mii_list_t *mip;
 	uint mii_reg;
+	mii_func *mii_func = NULL;
 
 	fep = netdev_priv(dev);
 	ep = fep->hwp;
@@ -706,7 +706,7 @@ static void fec_enet_mii(struct net_devi
 	}
 
 	if (mip->mii_func != NULL)
-		(*(mip->mii_func)) (mii_reg, dev);
+		mii_func = *(mip->mii_func);
 
 	mii_head = mip->mii_next;
 	mip->mii_next = mii_free;
@@ -717,11 +717,11 @@ static void fec_enet_mii(struct net_devi
 
 unlock:
 	spin_unlock(&fep->lock);
+	if (mii_func)
+		mii_func(mii_reg, dev);
 }
 
-static int
-mii_queue(struct net_device *dev, int regval,
-	  void (*func) (uint, struct net_device *))
+static int mii_queue(struct net_device *dev, int regval, mii_func *func)
 {
 	struct fec_enet_private *fep;
 	unsigned long flags;

-- 


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 5/5] m68knommu: dont allocate unused interrupts
  2008-04-02 20:58 [PATCH 0/5] fixup locking on m68knommu fec Sebastian Siewior
  2008-04-02 20:58 ` [PATCH 3/5] m68knommu: fec typedef a function Sebastian Siewior
  2008-04-02 20:58 ` [PATCH 2/5] m68knommu: fec: small coding style cleanup Sebastian Siewior
@ 2008-04-02 20:58 ` Sebastian Siewior
  2008-04-03  6:47   ` Greg Ungerer
  2008-04-02 20:58 ` [PATCH 4/5] m68knommu: fec fixup locking Sebastian Siewior
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 14+ messages in thread
From: Sebastian Siewior @ 2008-04-02 20:58 UTC (permalink / raw)
  To: Greg Ungerer; +Cc: Jeff Garzik, netdev, uclinux-dev, Sebastian Siewior

[-- Attachment #1: m69knommu-fec_register_only_used_irqs.patch --]
[-- Type: text/plain, Size: 6028 bytes --]

After fixing (hopefully) fixing locking I run into this:
|irq 88: nobody cared (try booting with the "irqpoll" option)
|Stack from 00214b74:
|        00214b88 00047940 00179b88 00046c36 00179b88 00214bc8 00047b20 00000058
|        00179b88 00000000 00000058 00179bb8 002cdf40 001415ba 00242000 0014163e
|        00179b88 00046c36 0014163e 000479a6 00179b88 00214bfc 00046da8 00000058
|        00179b88 00000000 00000000 00241c00 00247484 40001000 002473e0 002cf080
|        00247000 002334ac 00214c0c 00020a56 00000058 002cf088 00214c58 000238a6
|        00000058 00214c1c ffff9c00 002cf088 00241c00 00247484 40001000 00214000
|Call Trace:
| [00047940] __report_bad_irq+0x32/0x98
| [00047b20] note_interrupt+0x17a/0x28e
| [00046da8] __do_IRQ+0xe4/0x13a
| [00020a56] do_IRQ+0x26/0x3c
| [000238a6] inthandler+0x6a/0x74
| [000c7da0] fec_enet_start_xmit+0xc0/0x154
| [000ef11e] dev_hard_start_xmit+0x152/0x268
| [000fcba4] __qdisc_run+0x158/0x1e0
| [000f1cb6] dev_queue_xmit+0x218/0x2de
| [0010a284] ip_finish_output+0xe8/0x2c4
| [0010a508] ip_output+0x7a/0x86
| [001097bc] ip_push_pending_frames+0x1d4/0x3bc
| [00129d5e] icmp_push_reply+0xda/0x106
| [00129f40] icmp_reply+0x11c/0x1e4
| [0012a49a] icmp_echo+0x4a/0x50
| [0012a166] icmp_rcv+0x15e/0x174
| [00105e7c] ip_local_deliver+0xac/0x16a
| [001061ae] ip_rcv+0x274/0x4b6
| [000eeb4e] netif_receive_skb+0x166/0x232
| [000f1926] process_backlog+0x74/0x104
| [000f13d4] net_rx_action+0xac/0x188
| [0002e2b0] __do_softirq+0x84/0xae
| [0002e316] do_softirq+0x3c/0x40
| [0002e664] ksoftirqd+0x66/0xf0
| [0003cae2] kthread+0x64/0x80
| [00020ce8] kernel_thread+0x2a/0x3a
|
|handlers:
|[<000c710c>] (fec_enet_interrupt+0x0/0x426)
|Disabling IRQ #88

This is because we register & enable way more interrupt sources than we
actually handle. FEC_ENET_RXF (packet received), FEC_ENET_TXF (packet
trasmitted) and FEC_ENET_MII (mii command done) are handled by the ISR.
In my case FEC_ENET_RXB caused this because it was not handled, registered and
rarely the only flag in the status reg. Registering an interrupt source without
enabling it is also pointless.
This patch removes them all except the three that are handled by the isr.

Signed-off-by: Sebastian Siewior <sebastian@linutronix.de>
--- a/drivers/net/fec.c
+++ b/drivers/net/fec.c
@@ -1257,12 +1257,15 @@ static void fec_request_intrs(struct net
 		unsigned short irq;
 		irq_handler_t handler;
 	} *idp, id[] = {
-		{
-		"fec(RX)", 86, fec_enet_interrupt}, {
-		"fec(TX)", 87, fec_enet_interrupt}, {
-		"fec(OTHER)", 88, fec_enet_interrupt}, {
-		"fec(MII)", 66, mii_link_interrupt}, {
-	NULL},};
+		/*
+		 * Available but not allocated because not handled:
+		 * fec(OTHER) 88
+		 */
+		{ "fec(RX)", 86, fec_enet_interrupt},
+		{ "fec(TX)", 87, fec_enet_interrupt},
+		{ "fec(MII)", 66, mii_link_interrupt},
+		{ NULL, 0 },
+	};
 
 	/* Setup interrupt handlers. */
 	for (idp = id; idp->name; idp++) {
@@ -1381,21 +1384,17 @@ static void fec_request_intrs(struct net
 		char *name;
 		unsigned short irq;
 	} *idp, id[] = {
-		{
-		"fec(TXF)", 23}, {
-		"fec(TXB)", 24}, {
-		"fec(TXFIFO)", 25}, {
-		"fec(TXCR)", 26}, {
-		"fec(RXF)", 27}, {
-		"fec(RXB)", 28}, {
-		"fec(MII)", 29}, {
-		"fec(LC)", 30}, {
-		"fec(HBERR)", 31}, {
-		"fec(GRA)", 32}, {
-		"fec(EBERR)", 33}, {
-		"fec(BABT)", 34}, {
-		"fec(BABR)", 35}, {
-	NULL},};
+		/*
+		 * Available but not allocated because not handled:
+		 * fec(TXB) 24, fec(TXFIFO) 25, fec(TXCR) 26, fec(RXB) 28,
+		 * fec(LC) 30, fec(HBERR) 31, fec(GRA) 32, fec(EBERR) 33,
+		 * fec(BABT) 34, fec(BABR), 35
+		 */
+		{ "fec(TXF)", 23},
+		{ "fec(RXF)", 27},
+		{ "fec(MII)", 29},
+		{ NULL, 0},
+	};
 
 	fep = netdev_priv(dev);
 	b = (fep->index) ? 128 : 64;
@@ -1559,21 +1558,17 @@ static void fec_request_intrs(struct net
 		char *name;
 		unsigned short irq;
 	} *idp, id[] = {
-		{
-		"fec(TXF)", 23}, {
-		"fec(TXB)", 24}, {
-		"fec(TXFIFO)", 25}, {
-		"fec(TXCR)", 26}, {
-		"fec(RXF)", 27}, {
-		"fec(RXB)", 28}, {
-		"fec(MII)", 29}, {
-		"fec(LC)", 30}, {
-		"fec(HBERR)", 31}, {
-		"fec(GRA)", 32}, {
-		"fec(EBERR)", 33}, {
-		"fec(BABT)", 34}, {
-		"fec(BABR)", 35}, {
-	NULL},};
+		/*
+		 * Available but not allocated because not handled:
+		 * fec(TXB) 24, fec(TXFIFO) 25, fec(TXCR) 26, fec(RXB) 28,
+		 * fec(LC) 30, fec(HBERR) 31, fec(GRA) 32, fec(EBERR) 33,
+		 * fec(BABT) 34, fec(BABR) 35
+		 */
+		{ "fec(TXF)", 23},
+		{ "fec(RXF)", 27},
+		{ "fec(MII)", 29},
+		{ NULL, 0},
+	};
 
 	fep = netdev_priv(dev);
 	b = 64 + 13;
@@ -1693,21 +1688,17 @@ static void fec_request_intrs(struct net
 		char *name;
 		unsigned short irq;
 	} *idp, id[] = {
-		{
-		"fec(TXF)", 36}, {
-		"fec(TXB)", 37}, {
-		"fec(TXFIFO)", 38}, {
-		"fec(TXCR)", 39}, {
-		"fec(RXF)", 40}, {
-		"fec(RXB)", 41}, {
-		"fec(MII)", 42}, {
-		"fec(LC)", 43}, {
-		"fec(HBERR)", 44}, {
-		"fec(GRA)", 45}, {
-		"fec(EBERR)", 46}, {
-		"fec(BABT)", 47}, {
-		"fec(BABR)", 48}, {
-	NULL},};
+		/*
+		 * Available but not allocated because not handled:
+		 * fec(TXB) 37, fec(TXFIFO) 38, fec(TXCR) 39, fec(RXB) 41,
+		 * fec(LC) 43, fec(HBERR) 44, fec(GRA) 45, fec(EBERR) 46,
+		 * fec(BABT) 47, fec(BABR) 48
+		 */
+		{ "fec(TXF)", 36},
+		{ "fec(RXF)", 40},
+		{ "fec(MII)", 42},
+		{ NULL, 0},
+	};
 
 	fep = netdev_priv(dev);
 	b = (fep->index) ? 128 : 64;
@@ -2503,8 +2494,7 @@ int __init fec_enet_init(struct net_devi
 
 	/* Clear and enable interrupts */
 	fecp->fec_ievent = 0xffc00000;
-	fecp->fec_imask = (FEC_ENET_TXF | FEC_ENET_TXB |
-			   FEC_ENET_RXF | FEC_ENET_RXB | FEC_ENET_MII);
+	fecp->fec_imask = (FEC_ENET_TXF | FEC_ENET_RXF | FEC_ENET_MII);
 
 	/* Queue up command to detect the PHY and initialize the
 	 * remainder of the interface.
@@ -2630,8 +2620,7 @@ static void fec_restart(struct net_devic
 
 	/* Enable interrupts we wish to service.
 	 */
-	fecp->fec_imask = (FEC_ENET_TXF | FEC_ENET_TXB |
-			   FEC_ENET_RXF | FEC_ENET_RXB | FEC_ENET_MII);
+	fecp->fec_imask = (FEC_ENET_TXF | FEC_ENET_RXF | FEC_ENET_MII);
 }
 
 static void fec_stop(struct net_device *dev)

-- 


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 1/5] fec: kill warnings
  2008-04-02 20:58 [PATCH 0/5] fixup locking on m68knommu fec Sebastian Siewior
                   ` (3 preceding siblings ...)
  2008-04-02 20:58 ` [PATCH 4/5] m68knommu: fec fixup locking Sebastian Siewior
@ 2008-04-02 20:58 ` Sebastian Siewior
  2008-04-03  6:30   ` Greg Ungerer
  2008-04-03  6:54 ` [PATCH 0/5] fixup locking on m68knommu fec Greg Ungerer
  5 siblings, 1 reply; 14+ messages in thread
From: Sebastian Siewior @ 2008-04-02 20:58 UTC (permalink / raw)
  To: Greg Ungerer; +Cc: Jeff Garzik, netdev, uclinux-dev

[-- Attachment #1: m68knommu_remove_unused_var.patch --]
[-- Type: text/plain, Size: 1586 bytes --]

linux-2.6-mk68/drivers/net/fec.c: In function 'fec_enet_module_init':
linux-2.6-mk68/drivers/net/fec.c:2627: warning: unused variable 'j'
linux-2.6-mk68/drivers/net/fec.c: At top level:
linux-2.6-mk68/drivers/net/fec.c:2136: warning: 'mii_link_interrupt' defined but not used

Signed-off-by: Sebastian Siewior <bigeasy@linutronix.de>
--- a/drivers/net/fec.c
+++ b/drivers/net/fec.c
@@ -67,6 +67,11 @@
 #define	FEC_MAX_PORTS	1
 #endif
 
+#if defined(CONFIG_M523x) || defined(CONFIG_M527x) || defined(CONFIG_M528x) || \
+	defined(CONFIG_M520x) || defined(CONFIG_M532x)
+#define DONT_NEED_mii_link_interrupt
+#endif
+
 /*
  * Define the fixed address of the FEC hardware.
  */
@@ -1222,7 +1227,7 @@ static phy_info_t const * const phy_info
 };
 
 /* ------------------------------------------------------------------------- */
-#if !defined(CONFIG_M532x)
+#ifndef DONT_NEED_mii_link_interrupt
 #ifdef CONFIG_RPXCLASSIC
 static void
 mii_link_interrupt(void *dev_id);
@@ -2126,6 +2131,7 @@ mii_discover_phy(uint mii_reg, struct ne
 
 /* This interrupt occurs when the PHY detects a link change.
 */
+#ifndef DONT_NEED_mii_link_interrupt
 #ifdef CONFIG_RPXCLASSIC
 static void
 mii_link_interrupt(void *dev_id)
@@ -2148,6 +2154,7 @@ mii_link_interrupt(int irq, void * dev_i
 
 	return IRQ_HANDLED;
 }
+#endif
 
 static int
 fec_enet_open(struct net_device *dev)
@@ -2624,7 +2631,7 @@ fec_stop(struct net_device *dev)
 static int __init fec_enet_module_init(void)
 {
 	struct net_device *dev;
-	int i, j, err;
+	int i, err;
 	DECLARE_MAC_BUF(mac);
 
 	printk("FEC ENET Version 0.2\n");

-- 


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 2/5] m68knommu: fec: small coding style cleanup
  2008-04-02 20:58 [PATCH 0/5] fixup locking on m68knommu fec Sebastian Siewior
  2008-04-02 20:58 ` [PATCH 3/5] m68knommu: fec typedef a function Sebastian Siewior
@ 2008-04-02 20:58 ` Sebastian Siewior
  2008-04-02 20:58 ` [PATCH 5/5] m68knommu: dont allocate unused interrupts Sebastian Siewior
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 14+ messages in thread
From: Sebastian Siewior @ 2008-04-02 20:58 UTC (permalink / raw)
  To: Greg Ungerer; +Cc: Jeff Garzik, netdev, uclinux-dev, Sebastian Siewior

[-- Attachment #1: m68knommu-cleanup-the-code.diff --]
[-- Type: text/plain, Size: 81699 bytes --]

this is basically
- lident
- a few returns in set_multicast_list() in order to get less ident levels
  because there is no else
- remove __inline__

Signed-off-by: Sebastian Siewior <sebastian@linutronix.de>
--- a/drivers/net/fec.c
+++ b/drivers/net/fec.c
@@ -84,15 +84,15 @@ static unsigned int fec_hw[] = {
 #elif defined(CONFIG_M523x) || defined(CONFIG_M528x)
 	(MCF_MBAR + 0x1000),
 #elif defined(CONFIG_M520x)
-	(MCF_MBAR+0x30000),
+	(MCF_MBAR + 0x30000),
 #elif defined(CONFIG_M532x)
-	(MCF_MBAR+0xfc030000),
+	(MCF_MBAR + 0xfc030000),
 #else
-	&(((immap_t *)IMAP_ADDR)->im_cpm.cp_fec),
+	&(((immap_t *) IMAP_ADDR)->im_cpm.cp_fec),
 #endif
 };
 
-static unsigned char	fec_mac_default[] = {
+static unsigned char fec_mac_default[] = {
 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 };
 
@@ -106,10 +106,10 @@ static unsigned char	fec_mac_default[] =
 #define	FEC_FLASHMAC	0xf0006000
 #elif defined(CONFIG_CANCam)
 #define	FEC_FLASHMAC	0xf0020000
-#elif defined (CONFIG_M5272C3)
+#elif defined(CONFIG_M5272C3)
 #define	FEC_FLASHMAC	(0xffe04000 + 4)
 #elif defined(CONFIG_MOD5272)
-#define FEC_FLASHMAC 	0xffc0406b
+#define FEC_FLASHMAC	0xffc0406b
 #else
 #define	FEC_FLASHMAC	0
 #endif
@@ -170,7 +170,6 @@ typedef struct {
 #define PKT_MINBUF_SIZE		64
 #define PKT_MAXBLR_SIZE		1520
 
-
 /*
  * The 5270/5271/5280/5282/532x RX control register also contains maximum frame
  * size bits. Other FEC hardware does not, so we need to take that into
@@ -193,48 +192,48 @@ typedef struct {
  */
 struct fec_enet_private {
 	/* Hardware registers of the FEC device */
-	volatile fec_t	*hwp;
+	volatile fec_t *hwp;
 
 	struct net_device *netdev;
 
 	/* The saved address of a sent-in-place packet/buffer, for skfree(). */
 	unsigned char *tx_bounce[TX_RING_SIZE];
-	struct	sk_buff* tx_skbuff[TX_RING_SIZE];
-	ushort	skb_cur;
-	ushort	skb_dirty;
+	struct sk_buff *tx_skbuff[TX_RING_SIZE];
+	ushort skb_cur;
+	ushort skb_dirty;
 
 	/* CPM dual port RAM relative addresses.
-	*/
-	cbd_t	*rx_bd_base;		/* Address of Rx and Tx buffers. */
-	cbd_t	*tx_bd_base;
-	cbd_t	*cur_rx, *cur_tx;		/* The next free ring entry */
-	cbd_t	*dirty_tx;	/* The ring entries to be free()ed. */
-	uint	tx_full;
+	 */
+	cbd_t *rx_bd_base;	/* Address of Rx and Tx buffers. */
+	cbd_t *tx_bd_base;
+	cbd_t *cur_rx, *cur_tx;	/* The next free ring entry */
+	cbd_t *dirty_tx;	/* The ring entries to be free()ed. */
+	uint tx_full;
 	spinlock_t lock;
 
-	uint	phy_id;
-	uint	phy_id_done;
-	uint	phy_status;
-	uint	phy_speed;
-	phy_info_t const	*phy;
+	uint phy_id;
+	uint phy_id_done;
+	uint phy_status;
+	uint phy_speed;
+	phy_info_t const *phy;
 	struct work_struct phy_task;
 
-	uint	sequence_done;
-	uint	mii_phy_task_queued;
+	uint sequence_done;
+	uint mii_phy_task_queued;
 
-	uint	phy_addr;
+	uint phy_addr;
 
-	int	index;
-	int	opened;
-	int	link;
-	int	old_link;
-	int	full_duplex;
+	int index;
+	int opened;
+	int link;
+	int old_link;
+	int full_duplex;
 };
 
 static int fec_enet_open(struct net_device *dev);
 static int fec_enet_start_xmit(struct sk_buff *skb, struct net_device *dev);
 static void fec_enet_mii(struct net_device *dev);
-static irqreturn_t fec_enet_interrupt(int irq, void * dev_id);
+static irqreturn_t fec_enet_interrupt(int irq, void *dev_id);
 static void fec_enet_tx(struct net_device *dev);
 static void fec_enet_rx(struct net_device *dev);
 static int fec_enet_close(struct net_device *dev);
@@ -243,25 +242,24 @@ static void fec_restart(struct net_devic
 static void fec_stop(struct net_device *dev);
 static void fec_set_mac_address(struct net_device *dev);
 
-
 /* MII processing.  We keep this as simple as possible.  Requests are
  * placed on the list (if there is room).  When the request is finished
  * by the MII, an optional function may be called.
  */
 typedef struct mii_list {
-	uint	mii_regval;
-	void	(*mii_func)(uint val, struct net_device *dev);
-	struct	mii_list *mii_next;
+	uint mii_regval;
+	void (*mii_func)(uint val, struct net_device *dev);
+	struct mii_list *mii_next;
 } mii_list_t;
 
-#define		NMII	20
-static mii_list_t	mii_cmds[NMII];
-static mii_list_t	*mii_free;
-static mii_list_t	*mii_head;
-static mii_list_t	*mii_tail;
+#define NMII 20
+static mii_list_t mii_cmds[NMII];
+static mii_list_t *mii_free;
+static mii_list_t *mii_head;
+static mii_list_t *mii_tail;
 
-static int	mii_queue(struct net_device *dev, int request,
-				void (*func)(uint, struct net_device *));
+static int mii_queue(struct net_device *dev, int request,
+		     void (*func) (uint, struct net_device *));
 
 /* Make MII read/write commands for the FEC.
 */
@@ -277,46 +275,44 @@ static int	mii_queue(struct net_device *
 /* Register definitions for the PHY.
 */
 
-#define MII_REG_CR          0  /* Control Register                         */
-#define MII_REG_SR          1  /* Status Register                          */
-#define MII_REG_PHYIR1      2  /* PHY Identification Register 1            */
-#define MII_REG_PHYIR2      3  /* PHY Identification Register 2            */
-#define MII_REG_ANAR        4  /* A-N Advertisement Register               */
-#define MII_REG_ANLPAR      5  /* A-N Link Partner Ability Register        */
-#define MII_REG_ANER        6  /* A-N Expansion Register                   */
-#define MII_REG_ANNPTR      7  /* A-N Next Page Transmit Register          */
-#define MII_REG_ANLPRNPR    8  /* A-N Link Partner Received Next Page Reg. */
+#define MII_REG_CR          0	/* Control Register                         */
+#define MII_REG_SR          1	/* Status Register                          */
+#define MII_REG_PHYIR1      2	/* PHY Identification Register 1            */
+#define MII_REG_PHYIR2      3	/* PHY Identification Register 2            */
+#define MII_REG_ANAR        4	/* A-N Advertisement Register               */
+#define MII_REG_ANLPAR      5	/* A-N Link Partner Ability Register        */
+#define MII_REG_ANER        6	/* A-N Expansion Register                   */
+#define MII_REG_ANNPTR      7	/* A-N Next Page Transmit Register          */
+#define MII_REG_ANLPRNPR    8	/* A-N Link Partner Received Next Page Reg. */
 
 /* values for phy_status */
 
-#define PHY_CONF_ANE	0x0001  /* 1 auto-negotiation enabled */
-#define PHY_CONF_LOOP	0x0002  /* 1 loopback mode enabled */
-#define PHY_CONF_SPMASK	0x00f0  /* mask for speed */
-#define PHY_CONF_10HDX	0x0010  /* 10 Mbit half duplex supported */
-#define PHY_CONF_10FDX	0x0020  /* 10 Mbit full duplex supported */
-#define PHY_CONF_100HDX	0x0040  /* 100 Mbit half duplex supported */
-#define PHY_CONF_100FDX	0x0080  /* 100 Mbit full duplex supported */
-
-#define PHY_STAT_LINK	0x0100  /* 1 up - 0 down */
-#define PHY_STAT_FAULT	0x0200  /* 1 remote fault */
-#define PHY_STAT_ANC	0x0400  /* 1 auto-negotiation complete	*/
-#define PHY_STAT_SPMASK	0xf000  /* mask for speed */
-#define PHY_STAT_10HDX	0x1000  /* 10 Mbit half duplex selected	*/
-#define PHY_STAT_10FDX	0x2000  /* 10 Mbit full duplex selected	*/
-#define PHY_STAT_100HDX	0x4000  /* 100 Mbit half duplex selected */
-#define PHY_STAT_100FDX	0x8000  /* 100 Mbit full duplex selected */
+#define PHY_CONF_ANE	0x0001	/* 1 auto-negotiation enabled */
+#define PHY_CONF_LOOP	0x0002	/* 1 loopback mode enabled */
+#define PHY_CONF_SPMASK	0x00f0	/* mask for speed */
+#define PHY_CONF_10HDX	0x0010	/* 10 Mbit half duplex supported */
+#define PHY_CONF_10FDX	0x0020	/* 10 Mbit full duplex supported */
+#define PHY_CONF_100HDX	0x0040	/* 100 Mbit half duplex supported */
+#define PHY_CONF_100FDX	0x0080	/* 100 Mbit full duplex supported */
+
+#define PHY_STAT_LINK	0x0100	/* 1 up - 0 down */
+#define PHY_STAT_FAULT	0x0200	/* 1 remote fault */
+#define PHY_STAT_ANC	0x0400	/* 1 auto-negotiation complete  */
+#define PHY_STAT_SPMASK	0xf000	/* mask for speed */
+#define PHY_STAT_10HDX	0x1000	/* 10 Mbit half duplex selected */
+#define PHY_STAT_10FDX	0x2000	/* 10 Mbit full duplex selected */
+#define PHY_STAT_100HDX	0x4000	/* 100 Mbit half duplex selected */
+#define PHY_STAT_100FDX	0x8000	/* 100 Mbit full duplex selected */
 
-
-static int
-fec_enet_start_xmit(struct sk_buff *skb, struct net_device *dev)
+static int fec_enet_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
 	struct fec_enet_private *fep;
-	volatile fec_t	*fecp;
-	volatile cbd_t	*bdp;
-	unsigned short	status;
+	volatile fec_t *fecp;
+	volatile cbd_t *bdp;
+	unsigned short status;
 
 	fep = netdev_priv(dev);
-	fecp = (volatile fec_t*)dev->base_addr;
+	fecp = (volatile fec_t *)dev->base_addr;
 
 	if (!fep->link) {
 		/* Link is down or autonegotiation is in progress. */
@@ -342,28 +338,29 @@ fec_enet_start_xmit(struct sk_buff *skb,
 	status &= ~BD_ENET_TX_STATS;
 
 	/* Set buffer length and buffer pointer.
-	*/
+	 */
 	bdp->cbd_bufaddr = __pa(skb->data);
 	bdp->cbd_datlen = skb->len;
 
 	/*
-	 *	On some FEC implementations data must be aligned on
-	 *	4-byte boundaries. Use bounce buffers to copy data
-	 *	and get it aligned. Ugh.
+	 *      On some FEC implementations data must be aligned on
+	 *      4-byte boundaries. Use bounce buffers to copy data
+	 *      and get it aligned. Ugh.
 	 */
 	if (bdp->cbd_bufaddr & 0x3) {
 		unsigned int index;
 		index = bdp - fep->tx_bd_base;
-		memcpy(fep->tx_bounce[index], (void *) bdp->cbd_bufaddr, bdp->cbd_datlen);
+		memcpy(fep->tx_bounce[index], (void *)bdp->cbd_bufaddr,
+		       bdp->cbd_datlen);
 		bdp->cbd_bufaddr = __pa(fep->tx_bounce[index]);
 	}
 
 	/* Save skb pointer.
-	*/
+	 */
 	fep->tx_skbuff[fep->skb_cur] = skb;
 
 	dev->stats.tx_bytes += skb->len;
-	fep->skb_cur = (fep->skb_cur+1) & TX_RING_MOD_MASK;
+	fep->skb_cur = (fep->skb_cur + 1) & TX_RING_MOD_MASK;
 
 	/* Push the data cache so the CPM does not get stale memory
 	 * data.
@@ -378,7 +375,7 @@ fec_enet_start_xmit(struct sk_buff *skb,
 	 */
 
 	status |= (BD_ENET_TX_READY | BD_ENET_TX_INTR
-			| BD_ENET_TX_LAST | BD_ENET_TX_TC);
+		   | BD_ENET_TX_LAST | BD_ENET_TX_TC);
 	bdp->cbd_sc = status;
 
 	dev->trans_start = jiffies;
@@ -387,7 +384,7 @@ fec_enet_start_xmit(struct sk_buff *skb,
 	fecp->fec_x_des_active = 0;
 
 	/* If this was the last BD in the ring, start at the beginning again.
-	*/
+	 */
 	if (status & BD_ENET_TX_WRAP) {
 		bdp = fep->tx_bd_base;
 	} else {
@@ -399,15 +396,14 @@ fec_enet_start_xmit(struct sk_buff *skb,
 		netif_stop_queue(dev);
 	}
 
-	fep->cur_tx = (cbd_t *)bdp;
+	fep->cur_tx = (cbd_t *) bdp;
 
 	spin_unlock_irq(&fep->lock);
 
 	return 0;
 }
 
-static void
-fec_timeout(struct net_device *dev)
+static void fec_timeout(struct net_device *dev)
 {
 	struct fec_enet_private *fep = netdev_priv(dev);
 
@@ -415,35 +411,33 @@ fec_timeout(struct net_device *dev)
 	dev->stats.tx_errors++;
 #ifndef final_version
 	{
-	int	i;
-	cbd_t	*bdp;
+		int i;
+		cbd_t *bdp;
 
-	printk("Ring data dump: cur_tx %lx%s, dirty_tx %lx cur_rx: %lx\n",
-	       (unsigned long)fep->cur_tx, fep->tx_full ? " (full)" : "",
-	       (unsigned long)fep->dirty_tx,
-	       (unsigned long)fep->cur_rx);
+		printk
+		    ("Ring data dump: cur_tx %lx%s, dirty_tx %lx cur_rx: %lx\n",
+		     (unsigned long)fep->cur_tx, fep->tx_full ? " (full)" : "",
+		     (unsigned long)fep->dirty_tx, (unsigned long)fep->cur_rx);
 
-	bdp = fep->tx_bd_base;
-	printk(" tx: %u buffers\n",  TX_RING_SIZE);
-	for (i = 0 ; i < TX_RING_SIZE; i++) {
-		printk("  %08x: %04x %04x %08x\n",
-		       (uint) bdp,
-		       bdp->cbd_sc,
-		       bdp->cbd_datlen,
-		       (int) bdp->cbd_bufaddr);
-		bdp++;
-	}
+		bdp = fep->tx_bd_base;
+		printk(" tx: %u buffers\n", TX_RING_SIZE);
+		for (i = 0; i < TX_RING_SIZE; i++) {
+			printk("  %08x: %04x %04x %08x\n",
+			       (uint) bdp,
+			       bdp->cbd_sc,
+			       bdp->cbd_datlen, (int)bdp->cbd_bufaddr);
+			bdp++;
+		}
 
-	bdp = fep->rx_bd_base;
-	printk(" rx: %lu buffers\n",  (unsigned long) RX_RING_SIZE);
-	for (i = 0 ; i < RX_RING_SIZE; i++) {
-		printk("  %08x: %04x %04x %08x\n",
-		       (uint) bdp,
-		       bdp->cbd_sc,
-		       bdp->cbd_datlen,
-		       (int) bdp->cbd_bufaddr);
-		bdp++;
-	}
+		bdp = fep->rx_bd_base;
+		printk(" rx: %lu buffers\n", (unsigned long)RX_RING_SIZE);
+		for (i = 0; i < RX_RING_SIZE; i++) {
+			printk("  %08x: %04x %04x %08x\n",
+			       (uint) bdp,
+			       bdp->cbd_sc,
+			       bdp->cbd_datlen, (int)bdp->cbd_bufaddr);
+			bdp++;
+		}
 	}
 #endif
 	fec_restart(dev, fep->full_duplex);
@@ -453,18 +447,17 @@ fec_timeout(struct net_device *dev)
 /* The interrupt handler.
  * This is called from the MPC core interrupt.
  */
-static irqreturn_t
-fec_enet_interrupt(int irq, void * dev_id)
+static irqreturn_t fec_enet_interrupt(int irq, void *dev_id)
 {
-	struct	net_device *dev = dev_id;
-	volatile fec_t	*fecp;
-	uint	int_events;
+	struct net_device *dev = dev_id;
+	volatile fec_t *fecp;
+	uint int_events;
 	int handled = 0;
 
-	fecp = (volatile fec_t*)dev->base_addr;
+	fecp = (volatile fec_t *)dev->base_addr;
 
 	/* Get the interrupt events that caused us to be here.
-	*/
+	 */
 	while ((int_events = fecp->fec_ievent) != 0) {
 		fecp->fec_ievent = int_events;
 
@@ -478,7 +471,7 @@ fec_enet_interrupt(int irq, void * dev_i
 		/* Transmit OK, or non-fatal error. Update the buffer
 		   descriptors. FEC handles all errors, we just discover
 		   them as part of the transmit process.
-		*/
+		 */
 		if (int_events & FEC_ENET_TXF) {
 			handled = 1;
 			fec_enet_tx(dev);
@@ -493,37 +486,35 @@ fec_enet_interrupt(int irq, void * dev_i
 	return IRQ_RETVAL(handled);
 }
 
-
-static void
-fec_enet_tx(struct net_device *dev)
+static void fec_enet_tx(struct net_device *dev)
 {
-	struct	fec_enet_private *fep;
-	volatile cbd_t	*bdp;
+	struct fec_enet_private *fep;
+	volatile cbd_t *bdp;
 	unsigned short status;
-	struct	sk_buff	*skb;
+	struct sk_buff *skb;
 
 	fep = netdev_priv(dev);
 	spin_lock(&fep->lock);
 	bdp = fep->dirty_tx;
 
 	while (((status = bdp->cbd_sc) & BD_ENET_TX_READY) == 0) {
-		if (bdp == fep->cur_tx && fep->tx_full == 0) break;
+		if (bdp == fep->cur_tx && fep->tx_full == 0)
+			break;
 
 		skb = fep->tx_skbuff[fep->skb_dirty];
 		/* Check for errors. */
 		if (status & (BD_ENET_TX_HB | BD_ENET_TX_LC |
-				   BD_ENET_TX_RL | BD_ENET_TX_UN |
-				   BD_ENET_TX_CSL)) {
+			      BD_ENET_TX_RL | BD_ENET_TX_UN | BD_ENET_TX_CSL)) {
 			dev->stats.tx_errors++;
-			if (status & BD_ENET_TX_HB)  /* No heartbeat */
+			if (status & BD_ENET_TX_HB)	/* No heartbeat */
 				dev->stats.tx_heartbeat_errors++;
-			if (status & BD_ENET_TX_LC)  /* Late collision */
+			if (status & BD_ENET_TX_LC)	/* Late collision */
 				dev->stats.tx_window_errors++;
-			if (status & BD_ENET_TX_RL)  /* Retrans limit */
+			if (status & BD_ENET_TX_RL)	/* Retrans limit */
 				dev->stats.tx_aborted_errors++;
-			if (status & BD_ENET_TX_UN)  /* Underrun */
+			if (status & BD_ENET_TX_UN)	/* Underrun */
 				dev->stats.tx_fifo_errors++;
-			if (status & BD_ENET_TX_CSL) /* Carrier lost */
+			if (status & BD_ENET_TX_CSL)	/* Carrier lost */
 				dev->stats.tx_carrier_errors++;
 		} else {
 			dev->stats.tx_packets++;
@@ -561,25 +552,23 @@ fec_enet_tx(struct net_device *dev)
 				netif_wake_queue(dev);
 		}
 	}
-	fep->dirty_tx = (cbd_t *)bdp;
+	fep->dirty_tx = (cbd_t *) bdp;
 	spin_unlock(&fep->lock);
 }
 
-
 /* During a receive, the cur_rx points to the current incoming buffer.
  * When we update through the ring, if the next incoming buffer has
  * not been given to the system, we just set the empty indicator,
  * effectively tossing the packet.
  */
-static void
-fec_enet_rx(struct net_device *dev)
+static void fec_enet_rx(struct net_device *dev)
 {
-	struct	fec_enet_private *fep;
-	volatile fec_t	*fecp;
+	struct fec_enet_private *fep;
+	volatile fec_t *fecp;
 	volatile cbd_t *bdp;
 	unsigned short status;
-	struct	sk_buff	*skb;
-	ushort	pkt_len;
+	struct sk_buff *skb;
+	ushort pkt_len;
 	__u8 *data;
 
 #ifdef CONFIG_M532x
@@ -587,102 +576,103 @@ fec_enet_rx(struct net_device *dev)
 #endif
 
 	fep = netdev_priv(dev);
-	fecp = (volatile fec_t*)dev->base_addr;
+	fecp = (volatile fec_t *)dev->base_addr;
 
 	/* First, grab all of the stats for the incoming packet.
 	 * These get messed up if we get called due to a busy condition.
 	 */
 	bdp = fep->cur_rx;
 
-while (!((status = bdp->cbd_sc) & BD_ENET_RX_EMPTY)) {
+	while (!((status = bdp->cbd_sc) & BD_ENET_RX_EMPTY)) {
 
 #ifndef final_version
-	/* Since we have allocated space to hold a complete frame,
-	 * the last indicator should be set.
-	 */
-	if ((status & BD_ENET_RX_LAST) == 0)
-		printk("FEC ENET: rcv is not +last\n");
+		/* Since we have allocated space to hold a complete frame,
+		 * the last indicator should be set.
+		 */
+		if ((status & BD_ENET_RX_LAST) == 0)
+			printk("FEC ENET: rcv is not +last\n");
 #endif
 
-	if (!fep->opened)
-		goto rx_processing_done;
-
-	/* Check for errors. */
-	if (status & (BD_ENET_RX_LG | BD_ENET_RX_SH | BD_ENET_RX_NO |
-			   BD_ENET_RX_CR | BD_ENET_RX_OV)) {
-		dev->stats.rx_errors++;
-		if (status & (BD_ENET_RX_LG | BD_ENET_RX_SH)) {
-		/* Frame too long or too short. */
-			dev->stats.rx_length_errors++;
+		if (!fep->opened)
+			goto rx_processing_done;
+
+		/* Check for errors. */
+		if (status & (BD_ENET_RX_LG | BD_ENET_RX_SH | BD_ENET_RX_NO |
+			      BD_ENET_RX_CR | BD_ENET_RX_OV)) {
+			dev->stats.rx_errors++;
+			if (status & (BD_ENET_RX_LG | BD_ENET_RX_SH)) {
+				/* Frame too long or too short. */
+				dev->stats.rx_length_errors++;
+			}
+			if (status & BD_ENET_RX_NO)	/* Frame alignment */
+				dev->stats.rx_frame_errors++;
+			if (status & BD_ENET_RX_CR)	/* CRC Error */
+				dev->stats.rx_crc_errors++;
+			if (status & BD_ENET_RX_OV)	/* FIFO overrun */
+				dev->stats.rx_fifo_errors++;
 		}
-		if (status & BD_ENET_RX_NO)	/* Frame alignment */
+
+		/* Report late collisions as a frame error.
+		 * On this error, the BD is closed, but we don't know what we
+		 * have in the buffer.  So, just drop this frame on the floor.
+		 */
+		if (status & BD_ENET_RX_CL) {
+			dev->stats.rx_errors++;
 			dev->stats.rx_frame_errors++;
-		if (status & BD_ENET_RX_CR)	/* CRC Error */
-			dev->stats.rx_crc_errors++;
-		if (status & BD_ENET_RX_OV)	/* FIFO overrun */
-			dev->stats.rx_fifo_errors++;
-	}
+			goto rx_processing_done;
+		}
 
-	/* Report late collisions as a frame error.
-	 * On this error, the BD is closed, but we don't know what we
-	 * have in the buffer.  So, just drop this frame on the floor.
-	 */
-	if (status & BD_ENET_RX_CL) {
-		dev->stats.rx_errors++;
-		dev->stats.rx_frame_errors++;
-		goto rx_processing_done;
-	}
+		/* Process the incoming frame.
+		 */
+		dev->stats.rx_packets++;
+		pkt_len = bdp->cbd_datlen;
+		dev->stats.rx_bytes += pkt_len;
+		data = (__u8 *) __va(bdp->cbd_bufaddr);
+
+		/* This does 16 byte alignment, exactly what we need.
+		 * The packet length includes FCS, but we don't want to
+		 * include that when passing upstream as it messes up
+		 * bridging applications.
+		 */
+		skb = dev_alloc_skb(pkt_len - 4);
 
-	/* Process the incoming frame.
-	 */
-	dev->stats.rx_packets++;
-	pkt_len = bdp->cbd_datlen;
-	dev->stats.rx_bytes += pkt_len;
-	data = (__u8*)__va(bdp->cbd_bufaddr);
+		if (skb == NULL) {
+			printk("%s: Memory squeeze, dropping packet.\n",
+			       dev->name);
+			dev->stats.rx_dropped++;
+		} else {
+			skb_put(skb, pkt_len - 4);	/* Make room */
+			skb_copy_to_linear_data(skb, data, pkt_len - 4);
+			skb->protocol = eth_type_trans(skb, dev);
+			netif_rx(skb);
+		}
+rx_processing_done:
 
-	/* This does 16 byte alignment, exactly what we need.
-	 * The packet length includes FCS, but we don't want to
-	 * include that when passing upstream as it messes up
-	 * bridging applications.
-	 */
-	skb = dev_alloc_skb(pkt_len-4);
+		/* Clear the status flags for this buffer.
+		 */
+		status &= ~BD_ENET_RX_STATS;
 
-	if (skb == NULL) {
-		printk("%s: Memory squeeze, dropping packet.\n", dev->name);
-		dev->stats.rx_dropped++;
-	} else {
-		skb_put(skb,pkt_len-4);	/* Make room */
-		skb_copy_to_linear_data(skb, data, pkt_len-4);
-		skb->protocol=eth_type_trans(skb,dev);
-		netif_rx(skb);
-	}
-  rx_processing_done:
-
-	/* Clear the status flags for this buffer.
-	*/
-	status &= ~BD_ENET_RX_STATS;
-
-	/* Mark the buffer empty.
-	*/
-	status |= BD_ENET_RX_EMPTY;
-	bdp->cbd_sc = status;
+		/* Mark the buffer empty.
+		 */
+		status |= BD_ENET_RX_EMPTY;
+		bdp->cbd_sc = status;
 
-	/* Update BD pointer to next entry.
-	*/
-	if (status & BD_ENET_RX_WRAP)
-		bdp = fep->rx_bd_base;
-	else
-		bdp++;
+		/* Update BD pointer to next entry.
+		 */
+		if (status & BD_ENET_RX_WRAP)
+			bdp = fep->rx_bd_base;
+		else
+			bdp++;
 
 #if 1
-	/* Doing this here will keep the FEC running while we process
-	 * incoming frames.  On a heavily loaded network, we should be
-	 * able to keep up at the expense of system resources.
-	 */
-	fecp->fec_r_des_active = 0;
+		/* Doing this here will keep the FEC running while we process
+		 * incoming frames.  On a heavily loaded network, we should be
+		 * able to keep up at the expense of system resources.
+		 */
+		fecp->fec_r_des_active = 0;
 #endif
-   } /* while (!((status = bdp->cbd_sc) & BD_ENET_RX_EMPTY)) */
-	fep->cur_rx = (cbd_t *)bdp;
+	}	/* while (!((status = bdp->cbd_sc) & BD_ENET_RX_EMPTY)) */
+	fep->cur_rx = (cbd_t *) bdp;
 
 #if 0
 	/* Doing this here will allow us to process all frames in the
@@ -696,15 +686,13 @@ while (!((status = bdp->cbd_sc) & BD_ENE
 #endif
 }
 
-
 /* called from interrupt context */
-static void
-fec_enet_mii(struct net_device *dev)
+static void fec_enet_mii(struct net_device *dev)
 {
-	struct	fec_enet_private *fep;
-	volatile fec_t	*ep;
-	mii_list_t	*mip;
-	uint		mii_reg;
+	struct fec_enet_private *fep;
+	volatile fec_t *ep;
+	mii_list_t *mip;
+	uint mii_reg;
 
 	fep = netdev_priv(dev);
 	ep = fep->hwp;
@@ -718,7 +706,7 @@ fec_enet_mii(struct net_device *dev)
 	}
 
 	if (mip->mii_func != NULL)
-		(*(mip->mii_func))(mii_reg, dev);
+		(*(mip->mii_func)) (mii_reg, dev);
 
 	mii_head = mip->mii_next;
 	mip->mii_next = mii_free;
@@ -732,21 +720,22 @@ unlock:
 }
 
 static int
-mii_queue(struct net_device *dev, int regval, void (*func)(uint, struct net_device *))
+mii_queue(struct net_device *dev, int regval,
+	  void (*func) (uint, struct net_device *))
 {
 	struct fec_enet_private *fep;
-	unsigned long	flags;
-	mii_list_t	*mip;
-	int		retval;
+	unsigned long flags;
+	mii_list_t *mip;
+	int retval;
 
 	/* Add PHY address to register command.
-	*/
+	 */
 	fep = netdev_priv(dev);
 	regval |= fep->phy_addr << 23;
 
 	retval = 0;
 
-	spin_lock_irqsave(&fep->lock,flags);
+	spin_lock_irqsave(&fep->lock, flags);
 
 	if ((mip = mii_free) != NULL) {
 		mii_free = mip->mii_next;
@@ -764,14 +753,14 @@ mii_queue(struct net_device *dev, int re
 		retval = 1;
 	}
 
-	spin_unlock_irqrestore(&fep->lock,flags);
+	spin_unlock_irqrestore(&fep->lock, flags);
 
-	return(retval);
+	return (retval);
 }
 
 static void mii_do_cmd(struct net_device *dev, const phy_cmd_t *c)
 {
-	if(!c)
+	if (!c)
 		return;
 
 	for (; c->mii_data != mk_mii_end; c++)
@@ -832,11 +821,11 @@ static void mii_parse_anar(uint mii_reg,
 /* ------------------------------------------------------------------------- */
 /* The Level one LXT970 is used by many boards				     */
 
-#define MII_LXT970_MIRROR    16  /* Mirror register           */
-#define MII_LXT970_IER       17  /* Interrupt Enable Register */
-#define MII_LXT970_ISR       18  /* Interrupt Status Register */
-#define MII_LXT970_CONFIG    19  /* Configuration Register    */
-#define MII_LXT970_CSR       20  /* Chip Status Register      */
+#define MII_LXT970_MIRROR    16	/* Mirror register           */
+#define MII_LXT970_IER       17	/* Interrupt Enable Register */
+#define MII_LXT970_ISR       18	/* Interrupt Status Register */
+#define MII_LXT970_CONFIG    19	/* Configuration Register    */
+#define MII_LXT970_CSR       20	/* Chip Status Register      */
 
 static void mii_parse_lxt970_csr(uint mii_reg, struct net_device *dev)
 {
@@ -860,28 +849,28 @@ static void mii_parse_lxt970_csr(uint mi
 }
 
 static phy_cmd_t const phy_cmd_lxt970_config[] = {
-		{ mk_mii_read(MII_REG_CR), mii_parse_cr },
-		{ mk_mii_read(MII_REG_ANAR), mii_parse_anar },
-		{ mk_mii_end, }
-	};
-static phy_cmd_t const phy_cmd_lxt970_startup[] = { /* enable interrupts */
-		{ mk_mii_write(MII_LXT970_IER, 0x0002), NULL },
-		{ mk_mii_write(MII_REG_CR, 0x1200), NULL }, /* autonegotiate */
-		{ mk_mii_end, }
-	};
+	{mk_mii_read(MII_REG_CR), mii_parse_cr},
+	{mk_mii_read(MII_REG_ANAR), mii_parse_anar},
+	{mk_mii_end,}
+};
+static phy_cmd_t const phy_cmd_lxt970_startup[] = {	/* enable interrupts */
+	{mk_mii_write(MII_LXT970_IER, 0x0002), NULL},
+	{mk_mii_write(MII_REG_CR, 0x1200), NULL},	/* autonegotiate */
+	{mk_mii_end,}
+};
 static phy_cmd_t const phy_cmd_lxt970_ack_int[] = {
-		/* read SR and ISR to acknowledge */
-		{ mk_mii_read(MII_REG_SR), mii_parse_sr },
-		{ mk_mii_read(MII_LXT970_ISR), NULL },
-
-		/* find out the current status */
-		{ mk_mii_read(MII_LXT970_CSR), mii_parse_lxt970_csr },
-		{ mk_mii_end, }
-	};
-static phy_cmd_t const phy_cmd_lxt970_shutdown[] = { /* disable interrupts */
-		{ mk_mii_write(MII_LXT970_IER, 0x0000), NULL },
-		{ mk_mii_end, }
-	};
+	/* read SR and ISR to acknowledge */
+	{mk_mii_read(MII_REG_SR), mii_parse_sr},
+	{mk_mii_read(MII_LXT970_ISR), NULL},
+
+	/* find out the current status */
+	{mk_mii_read(MII_LXT970_CSR), mii_parse_lxt970_csr},
+	{mk_mii_end,}
+};
+static phy_cmd_t const phy_cmd_lxt970_shutdown[] = {	/* disable interrupts */
+	{mk_mii_write(MII_LXT970_IER, 0x0000), NULL},
+	{mk_mii_end,}
+};
 static phy_info_t const phy_info_lxt970 = {
 	.id = 0x07810000,
 	.name = "LXT970",
@@ -896,12 +885,12 @@ static phy_info_t const phy_info_lxt970 
 
 /* register definitions for the 971 */
 
-#define MII_LXT971_PCR       16  /* Port Control Register     */
-#define MII_LXT971_SR2       17  /* Status Register 2         */
-#define MII_LXT971_IER       18  /* Interrupt Enable Register */
-#define MII_LXT971_ISR       19  /* Interrupt Status Register */
-#define MII_LXT971_LCR       20  /* LED Control Register      */
-#define MII_LXT971_TCR       30  /* Transmit Control Register */
+#define MII_LXT971_PCR       16	/* Port Control Register     */
+#define MII_LXT971_SR2       17	/* Status Register 2         */
+#define MII_LXT971_IER       18	/* Interrupt Enable Register */
+#define MII_LXT971_ISR       19	/* Interrupt Status Register */
+#define MII_LXT971_LCR       20	/* LED Control Register      */
+#define MII_LXT971_TCR       30	/* Transmit Control Register */
 
 /*
  * I had some nice ideas of running the MDIO faster...
@@ -943,35 +932,35 @@ static void mii_parse_lxt971_sr2(uint mi
 }
 
 static phy_cmd_t const phy_cmd_lxt971_config[] = {
-		/* limit to 10MBit because my prototype board
-		 * doesn't work with 100. */
-		{ mk_mii_read(MII_REG_CR), mii_parse_cr },
-		{ mk_mii_read(MII_REG_ANAR), mii_parse_anar },
-		{ mk_mii_read(MII_LXT971_SR2), mii_parse_lxt971_sr2 },
-		{ mk_mii_end, }
-	};
-static phy_cmd_t const phy_cmd_lxt971_startup[] = {  /* enable interrupts */
-		{ mk_mii_write(MII_LXT971_IER, 0x00f2), NULL },
-		{ mk_mii_write(MII_REG_CR, 0x1200), NULL }, /* autonegotiate */
-		{ mk_mii_write(MII_LXT971_LCR, 0xd422), NULL }, /* LED config */
-		/* Somehow does the 971 tell me that the link is down
-		 * the first read after power-up.
-		 * read here to get a valid value in ack_int */
-		{ mk_mii_read(MII_REG_SR), mii_parse_sr },
-		{ mk_mii_end, }
-	};
+	/* limit to 10MBit because my prototype board
+	 * doesn't work with 100. */
+	{mk_mii_read(MII_REG_CR), mii_parse_cr},
+	{mk_mii_read(MII_REG_ANAR), mii_parse_anar},
+	{mk_mii_read(MII_LXT971_SR2), mii_parse_lxt971_sr2},
+	{mk_mii_end,}
+};
+static phy_cmd_t const phy_cmd_lxt971_startup[] = {	/* enable interrupts */
+	{mk_mii_write(MII_LXT971_IER, 0x00f2), NULL},
+	{mk_mii_write(MII_REG_CR, 0x1200), NULL},	/* autonegotiate */
+	{mk_mii_write(MII_LXT971_LCR, 0xd422), NULL},	/* LED config */
+	/* Somehow does the 971 tell me that the link is down
+	 * the first read after power-up.
+	 * read here to get a valid value in ack_int */
+	{mk_mii_read(MII_REG_SR), mii_parse_sr},
+	{mk_mii_end,}
+};
 static phy_cmd_t const phy_cmd_lxt971_ack_int[] = {
-		/* acknowledge the int before reading status ! */
-		{ mk_mii_read(MII_LXT971_ISR), NULL },
-		/* find out the current status */
-		{ mk_mii_read(MII_REG_SR), mii_parse_sr },
-		{ mk_mii_read(MII_LXT971_SR2), mii_parse_lxt971_sr2 },
-		{ mk_mii_end, }
-	};
-static phy_cmd_t const phy_cmd_lxt971_shutdown[] = { /* disable interrupts */
-		{ mk_mii_write(MII_LXT971_IER, 0x0000), NULL },
-		{ mk_mii_end, }
-	};
+	/* acknowledge the int before reading status ! */
+	{mk_mii_read(MII_LXT971_ISR), NULL},
+	/* find out the current status */
+	{mk_mii_read(MII_REG_SR), mii_parse_sr},
+	{mk_mii_read(MII_LXT971_SR2), mii_parse_lxt971_sr2},
+	{mk_mii_end,}
+};
+static phy_cmd_t const phy_cmd_lxt971_shutdown[] = {	/* disable interrupts */
+	{mk_mii_write(MII_LXT971_IER, 0x0000), NULL},
+	{mk_mii_end,}
+};
 static phy_info_t const phy_info_lxt971 = {
 	.id = 0x0001378e,
 	.name = "LXT971",
@@ -986,12 +975,12 @@ static phy_info_t const phy_info_lxt971 
 
 /* register definitions */
 
-#define MII_QS6612_MCR       17  /* Mode Control Register      */
-#define MII_QS6612_FTR       27  /* Factory Test Register      */
-#define MII_QS6612_MCO       28  /* Misc. Control Register     */
-#define MII_QS6612_ISR       29  /* Interrupt Source Register  */
-#define MII_QS6612_IMR       30  /* Interrupt Mask Register    */
-#define MII_QS6612_PCR       31  /* 100BaseTx PHY Control Reg. */
+#define MII_QS6612_MCR       17	/* Mode Control Register      */
+#define MII_QS6612_FTR       27	/* Factory Test Register      */
+#define MII_QS6612_MCO       28	/* Misc. Control Register     */
+#define MII_QS6612_ISR       29	/* Interrupt Source Register  */
+#define MII_QS6612_IMR       30	/* Interrupt Mask Register    */
+#define MII_QS6612_PCR       31	/* 100BaseTx PHY Control Reg. */
 
 static void mii_parse_qs6612_pcr(uint mii_reg, struct net_device *dev)
 {
@@ -1001,46 +990,54 @@ static void mii_parse_qs6612_pcr(uint mi
 
 	status = *s & ~(PHY_STAT_SPMASK);
 
-	switch((mii_reg >> 2) & 7) {
-	case 1: status |= PHY_STAT_10HDX; break;
-	case 2: status |= PHY_STAT_100HDX; break;
-	case 5: status |= PHY_STAT_10FDX; break;
-	case 6: status |= PHY_STAT_100FDX; break;
-}
+	switch ((mii_reg >> 2) & 7) {
+	case 1:
+		status |= PHY_STAT_10HDX;
+		break;
+	case 2:
+		status |= PHY_STAT_100HDX;
+		break;
+	case 5:
+		status |= PHY_STAT_10FDX;
+		break;
+	case 6:
+		status |= PHY_STAT_100FDX;
+		break;
+	}
 
 	*s = status;
 }
 
 static phy_cmd_t const phy_cmd_qs6612_config[] = {
-		/* The PHY powers up isolated on the RPX,
-		 * so send a command to allow operation.
-		 */
-		{ mk_mii_write(MII_QS6612_PCR, 0x0dc0), NULL },
+	/* The PHY powers up isolated on the RPX,
+	 * so send a command to allow operation.
+	 */
+	{mk_mii_write(MII_QS6612_PCR, 0x0dc0), NULL},
 
-		/* parse cr and anar to get some info */
-		{ mk_mii_read(MII_REG_CR), mii_parse_cr },
-		{ mk_mii_read(MII_REG_ANAR), mii_parse_anar },
-		{ mk_mii_end, }
-	};
-static phy_cmd_t const phy_cmd_qs6612_startup[] = {  /* enable interrupts */
-		{ mk_mii_write(MII_QS6612_IMR, 0x003a), NULL },
-		{ mk_mii_write(MII_REG_CR, 0x1200), NULL }, /* autonegotiate */
-		{ mk_mii_end, }
-	};
+	/* parse cr and anar to get some info */
+	{mk_mii_read(MII_REG_CR), mii_parse_cr},
+	{mk_mii_read(MII_REG_ANAR), mii_parse_anar},
+	{mk_mii_end,}
+};
+static phy_cmd_t const phy_cmd_qs6612_startup[] = {	/* enable interrupts */
+	{mk_mii_write(MII_QS6612_IMR, 0x003a), NULL},
+	{mk_mii_write(MII_REG_CR, 0x1200), NULL},	/* autonegotiate */
+	{mk_mii_end,}
+};
 static phy_cmd_t const phy_cmd_qs6612_ack_int[] = {
-		/* we need to read ISR, SR and ANER to acknowledge */
-		{ mk_mii_read(MII_QS6612_ISR), NULL },
-		{ mk_mii_read(MII_REG_SR), mii_parse_sr },
-		{ mk_mii_read(MII_REG_ANER), NULL },
-
-		/* read pcr to get info */
-		{ mk_mii_read(MII_QS6612_PCR), mii_parse_qs6612_pcr },
-		{ mk_mii_end, }
-	};
-static phy_cmd_t const phy_cmd_qs6612_shutdown[] = { /* disable interrupts */
-		{ mk_mii_write(MII_QS6612_IMR, 0x0000), NULL },
-		{ mk_mii_end, }
-	};
+	/* we need to read ISR, SR and ANER to acknowledge */
+	{mk_mii_read(MII_QS6612_ISR), NULL},
+	{mk_mii_read(MII_REG_SR), mii_parse_sr},
+	{mk_mii_read(MII_REG_ANER), NULL},
+
+	/* read pcr to get info */
+	{mk_mii_read(MII_QS6612_PCR), mii_parse_qs6612_pcr},
+	{mk_mii_end,}
+};
+static phy_cmd_t const phy_cmd_qs6612_shutdown[] = {	/* disable interrupts */
+	{mk_mii_write(MII_QS6612_IMR, 0x0000), NULL},
+	{mk_mii_end,}
+};
 static phy_info_t const phy_info_qs6612 = {
 	.id = 0x00181440,
 	.name = "QS6612",
@@ -1055,13 +1052,13 @@ static phy_info_t const phy_info_qs6612 
 
 /* register definitions for the 874 */
 
-#define MII_AM79C874_MFR       16  /* Miscellaneous Feature Register */
-#define MII_AM79C874_ICSR      17  /* Interrupt/Status Register      */
-#define MII_AM79C874_DR        18  /* Diagnostic Register            */
-#define MII_AM79C874_PMLR      19  /* Power and Loopback Register    */
-#define MII_AM79C874_MCR       21  /* ModeControl Register           */
-#define MII_AM79C874_DC        23  /* Disconnect Counter             */
-#define MII_AM79C874_REC       24  /* Recieve Error Counter          */
+#define MII_AM79C874_MFR       16	/* Miscellaneous Feature Register */
+#define MII_AM79C874_ICSR      17	/* Interrupt/Status Register      */
+#define MII_AM79C874_DR        18	/* Diagnostic Register            */
+#define MII_AM79C874_PMLR      19	/* Power and Loopback Register    */
+#define MII_AM79C874_MCR       21	/* ModeControl Register           */
+#define MII_AM79C874_DC        23	/* Disconnect Counter             */
+#define MII_AM79C874_REC       24	/* Recieve Error Counter          */
 
 static void mii_parse_am79c874_dr(uint mii_reg, struct net_device *dev)
 {
@@ -1074,37 +1071,39 @@ static void mii_parse_am79c874_dr(uint m
 	if (mii_reg & 0x0080)
 		status |= PHY_STAT_ANC;
 	if (mii_reg & 0x0400)
-		status |= ((mii_reg & 0x0800) ? PHY_STAT_100FDX : PHY_STAT_100HDX);
+		status |=
+		    ((mii_reg & 0x0800) ? PHY_STAT_100FDX : PHY_STAT_100HDX);
 	else
-		status |= ((mii_reg & 0x0800) ? PHY_STAT_10FDX : PHY_STAT_10HDX);
+		status |=
+		    ((mii_reg & 0x0800) ? PHY_STAT_10FDX : PHY_STAT_10HDX);
 
 	*s = status;
 }
 
 static phy_cmd_t const phy_cmd_am79c874_config[] = {
-		{ mk_mii_read(MII_REG_CR), mii_parse_cr },
-		{ mk_mii_read(MII_REG_ANAR), mii_parse_anar },
-		{ mk_mii_read(MII_AM79C874_DR), mii_parse_am79c874_dr },
-		{ mk_mii_end, }
-	};
-static phy_cmd_t const phy_cmd_am79c874_startup[] = {  /* enable interrupts */
-		{ mk_mii_write(MII_AM79C874_ICSR, 0xff00), NULL },
-		{ mk_mii_write(MII_REG_CR, 0x1200), NULL }, /* autonegotiate */
-		{ mk_mii_read(MII_REG_SR), mii_parse_sr },
-		{ mk_mii_end, }
-	};
+	{mk_mii_read(MII_REG_CR), mii_parse_cr},
+	{mk_mii_read(MII_REG_ANAR), mii_parse_anar},
+	{mk_mii_read(MII_AM79C874_DR), mii_parse_am79c874_dr},
+	{mk_mii_end,}
+};
+static phy_cmd_t const phy_cmd_am79c874_startup[] = {	/* enable interrupts */
+	{mk_mii_write(MII_AM79C874_ICSR, 0xff00), NULL},
+	{mk_mii_write(MII_REG_CR, 0x1200), NULL},	/* autonegotiate */
+	{mk_mii_read(MII_REG_SR), mii_parse_sr},
+	{mk_mii_end,}
+};
 static phy_cmd_t const phy_cmd_am79c874_ack_int[] = {
-		/* find out the current status */
-		{ mk_mii_read(MII_REG_SR), mii_parse_sr },
-		{ mk_mii_read(MII_AM79C874_DR), mii_parse_am79c874_dr },
-		/* we only need to read ISR to acknowledge */
-		{ mk_mii_read(MII_AM79C874_ICSR), NULL },
-		{ mk_mii_end, }
-	};
-static phy_cmd_t const phy_cmd_am79c874_shutdown[] = { /* disable interrupts */
-		{ mk_mii_write(MII_AM79C874_ICSR, 0x0000), NULL },
-		{ mk_mii_end, }
-	};
+	/* find out the current status */
+	{mk_mii_read(MII_REG_SR), mii_parse_sr},
+	{mk_mii_read(MII_AM79C874_DR), mii_parse_am79c874_dr},
+	/* we only need to read ISR to acknowledge */
+	{mk_mii_read(MII_AM79C874_ICSR), NULL},
+	{mk_mii_end,}
+};
+static phy_cmd_t const phy_cmd_am79c874_shutdown[] = {	/* disable interrupts */
+	{mk_mii_write(MII_AM79C874_ICSR, 0x0000), NULL},
+	{mk_mii_end,}
+};
 static phy_info_t const phy_info_am79c874 = {
 	.id = 0x00022561,
 	.name = "AM79C874",
@@ -1114,7 +1113,6 @@ static phy_info_t const phy_info_am79c87
 	.shutdown = phy_cmd_am79c874_shutdown
 };
 
-
 /* ------------------------------------------------------------------------- */
 /* Kendin KS8721BL phy                                                       */
 
@@ -1125,27 +1123,27 @@ static phy_info_t const phy_info_am79c87
 #define	MII_KS8721BL_PHYCR	31
 
 static phy_cmd_t const phy_cmd_ks8721bl_config[] = {
-		{ mk_mii_read(MII_REG_CR), mii_parse_cr },
-		{ mk_mii_read(MII_REG_ANAR), mii_parse_anar },
-		{ mk_mii_end, }
-	};
-static phy_cmd_t const phy_cmd_ks8721bl_startup[] = {  /* enable interrupts */
-		{ mk_mii_write(MII_KS8721BL_ICSR, 0xff00), NULL },
-		{ mk_mii_write(MII_REG_CR, 0x1200), NULL }, /* autonegotiate */
-		{ mk_mii_read(MII_REG_SR), mii_parse_sr },
-		{ mk_mii_end, }
-	};
+	{mk_mii_read(MII_REG_CR), mii_parse_cr},
+	{mk_mii_read(MII_REG_ANAR), mii_parse_anar},
+	{mk_mii_end,}
+};
+static phy_cmd_t const phy_cmd_ks8721bl_startup[] = {	/* enable interrupts */
+	{mk_mii_write(MII_KS8721BL_ICSR, 0xff00), NULL},
+	{mk_mii_write(MII_REG_CR, 0x1200), NULL},	/* autonegotiate */
+	{mk_mii_read(MII_REG_SR), mii_parse_sr},
+	{mk_mii_end,}
+};
 static phy_cmd_t const phy_cmd_ks8721bl_ack_int[] = {
-		/* find out the current status */
-		{ mk_mii_read(MII_REG_SR), mii_parse_sr },
-		/* we only need to read ISR to acknowledge */
-		{ mk_mii_read(MII_KS8721BL_ICSR), NULL },
-		{ mk_mii_end, }
-	};
-static phy_cmd_t const phy_cmd_ks8721bl_shutdown[] = { /* disable interrupts */
-		{ mk_mii_write(MII_KS8721BL_ICSR, 0x0000), NULL },
-		{ mk_mii_end, }
-	};
+	/* find out the current status */
+	{mk_mii_read(MII_REG_SR), mii_parse_sr},
+	/* we only need to read ISR to acknowledge */
+	{mk_mii_read(MII_KS8721BL_ICSR), NULL},
+	{mk_mii_end,}
+};
+static phy_cmd_t const phy_cmd_ks8721bl_shutdown[] = {	/* disable interrupts */
+	{mk_mii_write(MII_KS8721BL_ICSR, 0x0000), NULL},
+	{mk_mii_end,}
+};
 static phy_info_t const phy_info_ks8721bl = {
 	.id = 0x00022161,
 	.name = "KS8721BL",
@@ -1158,7 +1156,7 @@ static phy_info_t const phy_info_ks8721b
 /* ------------------------------------------------------------------------- */
 /* register definitions for the DP83848 */
 
-#define MII_DP8384X_PHYSTST    16  /* PHY Status Register */
+#define MII_DP8384X_PHYSTST    16	/* PHY Status Register */
 
 static void mii_parse_dp8384x_sr2(uint mii_reg, struct net_device *dev)
 {
@@ -1174,15 +1172,19 @@ static void mii_parse_dp8384x_sr2(uint m
 	} else
 		fep->link = 0;
 	/* Status of link */
-	if (mii_reg & 0x0010)   /* Autonegotioation complete */
+	if (mii_reg & 0x0010)	/* Autonegotioation complete */
 		*s |= PHY_STAT_ANC;
-	if (mii_reg & 0x0002) {   /* 10MBps? */
-		if (mii_reg & 0x0004)   /* Full Duplex? */
+	/* 10MBps? */
+	if (mii_reg & 0x0002) {
+		/* Full Duplex? */
+		if (mii_reg & 0x0004)
 			*s |= PHY_STAT_10FDX;
 		else
 			*s |= PHY_STAT_10HDX;
-	} else {                  /* 100 Mbps? */
-		if (mii_reg & 0x0004)   /* Full Duplex? */
+	} else {
+		/* 100 Mbps then */
+		/* Full Duplex? */
+		if (mii_reg & 0x0004)
 			*s |= PHY_STAT_100FDX;
 		else
 			*s |= PHY_STAT_100HDX;
@@ -1191,32 +1193,33 @@ static void mii_parse_dp8384x_sr2(uint m
 		*s |= PHY_STAT_FAULT;
 }
 
-static phy_info_t phy_info_dp83848= {
+static phy_info_t phy_info_dp83848 = {
 	0x020005c9,
 	"DP83848",
 
-	(const phy_cmd_t []) {  /* config */
-		{ mk_mii_read(MII_REG_CR), mii_parse_cr },
-		{ mk_mii_read(MII_REG_ANAR), mii_parse_anar },
-		{ mk_mii_read(MII_DP8384X_PHYSTST), mii_parse_dp8384x_sr2 },
-		{ mk_mii_end, }
+	(const phy_cmd_t[]){	/* config */
+		{mk_mii_read(MII_REG_CR), mii_parse_cr},
+		{mk_mii_read(MII_REG_ANAR), mii_parse_anar},
+		{mk_mii_read(MII_DP8384X_PHYSTST),
+			mii_parse_dp8384x_sr2},
+		{mk_mii_end,}
 	},
-	(const phy_cmd_t []) {  /* startup - enable interrupts */
-		{ mk_mii_write(MII_REG_CR, 0x1200), NULL }, /* autonegotiate */
-		{ mk_mii_read(MII_REG_SR), mii_parse_sr },
-		{ mk_mii_end, }
+	(const phy_cmd_t[]){	/* startup - enable interrupts */
+		{mk_mii_write(MII_REG_CR, 0x1200), NULL}, /* autonegotiate */
+		{mk_mii_read(MII_REG_SR), mii_parse_sr},
+		{mk_mii_end,}
 	},
-	(const phy_cmd_t []) { /* ack_int - never happens, no interrupt */
-		{ mk_mii_end, }
+	(const phy_cmd_t[]){	/* ack_int - never happens, no interrupt */
+		{mk_mii_end,}
 	},
-	(const phy_cmd_t []) {  /* shutdown */
-		{ mk_mii_end, }
+	(const phy_cmd_t[]){	/* shutdown */
+		{mk_mii_end,}
 	},
 };
 
 /* ------------------------------------------------------------------------- */
 
-static phy_info_t const * const phy_info[] = {
+static phy_info_t const *const phy_info[] = {
 	&phy_info_lxt970,
 	&phy_info_lxt971,
 	&phy_info_qs6612,
@@ -1229,11 +1232,9 @@ static phy_info_t const * const phy_info
 /* ------------------------------------------------------------------------- */
 #ifndef DONT_NEED_mii_link_interrupt
 #ifdef CONFIG_RPXCLASSIC
-static void
-mii_link_interrupt(void *dev_id);
+static void mii_link_interrupt(void *dev_id);
 #else
-static irqreturn_t
-mii_link_interrupt(int irq, void * dev_id);
+static irqreturn_t mii_link_interrupt(int irq, void *dev_id);
 #endif
 #endif
 
@@ -1241,7 +1242,7 @@ mii_link_interrupt(int irq, void * dev_i
 /*
  *	Code specific to Coldfire 5272 setup.
  */
-static void __inline__ fec_request_intrs(struct net_device *dev)
+static void fec_request_intrs(struct net_device *dev)
 {
 	volatile unsigned long *icrp;
 	static const struct idesc {
@@ -1249,27 +1250,33 @@ static void __inline__ fec_request_intrs
 		unsigned short irq;
 		irq_handler_t handler;
 	} *idp, id[] = {
-		{ "fec(RX)", 86, fec_enet_interrupt },
-		{ "fec(TX)", 87, fec_enet_interrupt },
-		{ "fec(OTHER)", 88, fec_enet_interrupt },
-		{ "fec(MII)", 66, mii_link_interrupt },
-		{ NULL },
-	};
+		{
+		"fec(RX)", 86, fec_enet_interrupt}, {
+		"fec(TX)", 87, fec_enet_interrupt}, {
+		"fec(OTHER)", 88, fec_enet_interrupt}, {
+		"fec(MII)", 66, mii_link_interrupt}, {
+	NULL},};
 
 	/* Setup interrupt handlers. */
 	for (idp = id; idp->name; idp++) {
-		if (request_irq(idp->irq, idp->handler, IRQF_DISABLED, idp->name, dev) != 0)
-			printk("FEC: Could not allocate %s IRQ(%d)!\n", idp->name, idp->irq);
+	    int ret;
+
+	    ret =request_irq(idp->irq, idp->handler, IRQF_DISABLED, idp->name,
+		    dev);
+	    if (ret)
+		printk("FEC: Could not allocate %s IRQ(%d)!\n",
+			idp->name, idp->irq);
 	}
 
 	/* Unmask interrupt at ColdFire 5272 SIM */
-	icrp = (volatile unsigned long *) (MCF_MBAR + MCFSIM_ICR3);
+	icrp = (volatile unsigned long *)(MCF_MBAR + MCFSIM_ICR3);
 	*icrp = 0x00000ddd;
-	icrp = (volatile unsigned long *) (MCF_MBAR + MCFSIM_ICR1);
+	icrp = (volatile unsigned long *)(MCF_MBAR + MCFSIM_ICR1);
 	*icrp = 0x0d000000;
 }
 
-static void __inline__ fec_set_mii(struct net_device *dev, struct fec_enet_private *fep)
+static void fec_set_mii(struct net_device *dev,
+				   struct fec_enet_private *fep)
 {
 	volatile fec_t *fecp;
 
@@ -1287,7 +1294,7 @@ static void __inline__ fec_set_mii(struc
 	fec_restart(dev, 0);
 }
 
-static void __inline__ fec_get_mac(struct net_device *dev)
+static void fec_get_mac(struct net_device *dev)
 {
 	struct fec_enet_private *fep = netdev_priv(dev);
 	volatile fec_t *fecp;
@@ -1308,8 +1315,8 @@ static void __inline__ fec_get_mac(struc
 		    (iap[3] == 0xff) && (iap[4] == 0xff) && (iap[5] == 0xff))
 			iap = fec_mac_default;
 	} else {
-		*((unsigned long *) &tmpaddr[0]) = fecp->fec_addr_low;
-		*((unsigned short *) &tmpaddr[4]) = (fecp->fec_addr_high >> 16);
+		*((unsigned long *)&tmpaddr[0]) = fecp->fec_addr_low;
+		*((unsigned short *)&tmpaddr[4]) = (fecp->fec_addr_high >> 16);
 		iap = &tmpaddr[0];
 	}
 
@@ -1317,36 +1324,37 @@ static void __inline__ fec_get_mac(struc
 
 	/* Adjust MAC if using default MAC address */
 	if (iap == fec_mac_default)
-		 dev->dev_addr[ETH_ALEN-1] = fec_mac_default[ETH_ALEN-1] + fep->index;
+		dev->dev_addr[ETH_ALEN - 1] =
+		    fec_mac_default[ETH_ALEN - 1] + fep->index;
 }
 
-static void __inline__ fec_enable_phy_intr(void)
+static void fec_enable_phy_intr(void)
 {
 }
 
-static void __inline__ fec_disable_phy_intr(void)
+static void fec_disable_phy_intr(void)
 {
 	volatile unsigned long *icrp;
-	icrp = (volatile unsigned long *) (MCF_MBAR + MCFSIM_ICR1);
+	icrp = (volatile unsigned long *)(MCF_MBAR + MCFSIM_ICR1);
 	*icrp = 0x08000000;
 }
 
-static void __inline__ fec_phy_ack_intr(void)
+static void fec_phy_ack_intr(void)
 {
 	volatile unsigned long *icrp;
 	/* Acknowledge the interrupt */
-	icrp = (volatile unsigned long *) (MCF_MBAR + MCFSIM_ICR1);
+	icrp = (volatile unsigned long *)(MCF_MBAR + MCFSIM_ICR1);
 	*icrp = 0x0d000000;
 }
 
-static void __inline__ fec_localhw_setup(void)
+static void fec_localhw_setup(void)
 {
 }
 
 /*
  *	Do not need to make region uncached on 5272.
  */
-static void __inline__ fec_uncache(unsigned long addr)
+static void fec_uncache(unsigned long addr)
 {
 }
 
@@ -1358,7 +1366,7 @@ static void __inline__ fec_uncache(unsig
  *	Code specific to Coldfire 5230/5231/5232/5234/5235,
  *	the 5270/5271/5274/5275 and 5280/5282 setups.
  */
-static void __inline__ fec_request_intrs(struct net_device *dev)
+static void fec_request_intrs(struct net_device *dev)
 {
 	struct fec_enet_private *fep;
 	int b;
@@ -1366,48 +1374,53 @@ static void __inline__ fec_request_intrs
 		char *name;
 		unsigned short irq;
 	} *idp, id[] = {
-		{ "fec(TXF)", 23 },
-		{ "fec(TXB)", 24 },
-		{ "fec(TXFIFO)", 25 },
-		{ "fec(TXCR)", 26 },
-		{ "fec(RXF)", 27 },
-		{ "fec(RXB)", 28 },
-		{ "fec(MII)", 29 },
-		{ "fec(LC)", 30 },
-		{ "fec(HBERR)", 31 },
-		{ "fec(GRA)", 32 },
-		{ "fec(EBERR)", 33 },
-		{ "fec(BABT)", 34 },
-		{ "fec(BABR)", 35 },
-		{ NULL },
-	};
+		{
+		"fec(TXF)", 23}, {
+		"fec(TXB)", 24}, {
+		"fec(TXFIFO)", 25}, {
+		"fec(TXCR)", 26}, {
+		"fec(RXF)", 27}, {
+		"fec(RXB)", 28}, {
+		"fec(MII)", 29}, {
+		"fec(LC)", 30}, {
+		"fec(HBERR)", 31}, {
+		"fec(GRA)", 32}, {
+		"fec(EBERR)", 33}, {
+		"fec(BABT)", 34}, {
+		"fec(BABR)", 35}, {
+	NULL},};
 
 	fep = netdev_priv(dev);
 	b = (fep->index) ? 128 : 64;
 
 	/* Setup interrupt handlers. */
 	for (idp = id; idp->name; idp++) {
-		if (request_irq(b+idp->irq, fec_enet_interrupt, IRQF_DISABLED, idp->name, dev) != 0)
-			printk("FEC: Could not allocate %s IRQ(%d)!\n", idp->name, b+idp->irq);
+	    int ret;
+
+	    ret = request_irq(b + idp->irq, fec_enet_interrupt, IRQF_DISABLED,
+		    idp->name, dev);
+	    if (ret)
+		printk("FEC: Could not allocate %s IRQ(%d)!\n",
+			idp->name, b + idp->irq);
 	}
 
 	/* Unmask interrupts at ColdFire 5280/5282 interrupt controller */
 	{
-		volatile unsigned char  *icrp;
-		volatile unsigned long  *imrp;
+		volatile unsigned char *icrp;
+		volatile unsigned long *imrp;
 		int i, ilip;
 
 		b = (fep->index) ? MCFICM_INTC1 : MCFICM_INTC0;
-		icrp = (volatile unsigned char *) (MCF_IPSBAR + b +
-			MCFINTC_ICR0);
+		icrp = (volatile unsigned char *)(MCF_IPSBAR + b +
+						  MCFINTC_ICR0);
 		for (i = 23, ilip = 0x28; (i < 36); i++)
 			icrp[i] = ilip--;
 
-		imrp = (volatile unsigned long *) (MCF_IPSBAR + b +
-			MCFINTC_IMRH);
+		imrp = (volatile unsigned long *)(MCF_IPSBAR + b +
+						  MCFINTC_IMRH);
 		*imrp &= ~0x0000000f;
-		imrp = (volatile unsigned long *) (MCF_IPSBAR + b +
-			MCFINTC_IMRL);
+		imrp = (volatile unsigned long *)(MCF_IPSBAR + b +
+						  MCFINTC_IMRL);
 		*imrp &= ~0xff800001;
 	}
 
@@ -1417,8 +1430,8 @@ static void __inline__ fec_request_intrs
 		volatile u16 *gpio_paspar;
 		volatile u8 *gpio_pehlpar;
 
-		gpio_paspar = (volatile u16 *) (MCF_IPSBAR + 0x100056);
-		gpio_pehlpar = (volatile u16 *) (MCF_IPSBAR + 0x100058);
+		gpio_paspar = (volatile u16 *)(MCF_IPSBAR + 0x100056);
+		gpio_pehlpar = (volatile u16 *)(MCF_IPSBAR + 0x100058);
 		*gpio_paspar |= 0x0f00;
 		*gpio_pehlpar = 0xc0;
 	}
@@ -1448,7 +1461,8 @@ static void __inline__ fec_request_intrs
 #endif /* CONFIG_M527x */
 }
 
-static void __inline__ fec_set_mii(struct net_device *dev, struct fec_enet_private *fep)
+static void fec_set_mii(struct net_device *dev,
+				   struct fec_enet_private *fep)
 {
 	volatile fec_t *fecp;
 
@@ -1466,7 +1480,7 @@ static void __inline__ fec_set_mii(struc
 	fec_restart(dev, 0);
 }
 
-static void __inline__ fec_get_mac(struct net_device *dev)
+static void fec_get_mac(struct net_device *dev)
 {
 	struct fec_enet_private *fep = netdev_priv(dev);
 	volatile fec_t *fecp;
@@ -1487,8 +1501,8 @@ static void __inline__ fec_get_mac(struc
 		    (iap[3] == 0xff) && (iap[4] == 0xff) && (iap[5] == 0xff))
 			iap = fec_mac_default;
 	} else {
-		*((unsigned long *) &tmpaddr[0]) = fecp->fec_addr_low;
-		*((unsigned short *) &tmpaddr[4]) = (fecp->fec_addr_high >> 16);
+		*((unsigned long *)&tmpaddr[0]) = fecp->fec_addr_low;
+		*((unsigned short *)&tmpaddr[4]) = (fecp->fec_addr_high >> 16);
 		iap = &tmpaddr[0];
 	}
 
@@ -1496,29 +1510,30 @@ static void __inline__ fec_get_mac(struc
 
 	/* Adjust MAC if using default MAC address */
 	if (iap == fec_mac_default)
-		dev->dev_addr[ETH_ALEN-1] = fec_mac_default[ETH_ALEN-1] + fep->index;
+		dev->dev_addr[ETH_ALEN - 1] =
+		    fec_mac_default[ETH_ALEN - 1] + fep->index;
 }
 
-static void __inline__ fec_enable_phy_intr(void)
+static void fec_enable_phy_intr(void)
 {
 }
 
-static void __inline__ fec_disable_phy_intr(void)
+static void fec_disable_phy_intr(void)
 {
 }
 
-static void __inline__ fec_phy_ack_intr(void)
+static void fec_phy_ack_intr(void)
 {
 }
 
-static void __inline__ fec_localhw_setup(void)
+static void fec_localhw_setup(void)
 {
 }
 
 /*
  *	Do not need to make region uncached on 5272.
  */
-static void __inline__ fec_uncache(unsigned long addr)
+static void fec_uncache(unsigned long addr)
 {
 }
 
@@ -1529,7 +1544,7 @@ static void __inline__ fec_uncache(unsig
 /*
  *	Code specific to Coldfire 520x
  */
-static void __inline__ fec_request_intrs(struct net_device *dev)
+static void fec_request_intrs(struct net_device *dev)
 {
 	struct fec_enet_private *fep;
 	int b;
@@ -1537,49 +1552,55 @@ static void __inline__ fec_request_intrs
 		char *name;
 		unsigned short irq;
 	} *idp, id[] = {
-		{ "fec(TXF)", 23 },
-		{ "fec(TXB)", 24 },
-		{ "fec(TXFIFO)", 25 },
-		{ "fec(TXCR)", 26 },
-		{ "fec(RXF)", 27 },
-		{ "fec(RXB)", 28 },
-		{ "fec(MII)", 29 },
-		{ "fec(LC)", 30 },
-		{ "fec(HBERR)", 31 },
-		{ "fec(GRA)", 32 },
-		{ "fec(EBERR)", 33 },
-		{ "fec(BABT)", 34 },
-		{ "fec(BABR)", 35 },
-		{ NULL },
-	};
+		{
+		"fec(TXF)", 23}, {
+		"fec(TXB)", 24}, {
+		"fec(TXFIFO)", 25}, {
+		"fec(TXCR)", 26}, {
+		"fec(RXF)", 27}, {
+		"fec(RXB)", 28}, {
+		"fec(MII)", 29}, {
+		"fec(LC)", 30}, {
+		"fec(HBERR)", 31}, {
+		"fec(GRA)", 32}, {
+		"fec(EBERR)", 33}, {
+		"fec(BABT)", 34}, {
+		"fec(BABR)", 35}, {
+	NULL},};
 
 	fep = netdev_priv(dev);
 	b = 64 + 13;
 
 	/* Setup interrupt handlers. */
 	for (idp = id; idp->name; idp++) {
-		if (request_irq(b+idp->irq, fec_enet_interrupt, IRQF_DISABLED, idp->name,dev) != 0)
-			printk("FEC: Could not allocate %s IRQ(%d)!\n", idp->name, b+idp->irq);
+	    int ret;
+
+	    ret = request_irq(b + idp->irq, fec_enet_interrupt, IRQF_DISABLED,
+		    idp->name, dev);
+	    if (ret)
+		printk("FEC: Could not allocate %s IRQ(%d)!\n",
+			idp->name, b + idp->irq);
 	}
 
 	/* Unmask interrupts at ColdFire interrupt controller */
 	{
-		volatile unsigned char  *icrp;
-		volatile unsigned long  *imrp;
+		volatile unsigned char *icrp;
+		volatile unsigned long *imrp;
 
-		icrp = (volatile unsigned char *) (MCF_IPSBAR + MCFICM_INTC0 +
-			MCFINTC_ICR0);
+		icrp = (volatile unsigned char *)(MCF_IPSBAR + MCFICM_INTC0 +
+						  MCFINTC_ICR0);
 		for (b = 36; (b < 49); b++)
 			icrp[b] = 0x04;
-		imrp = (volatile unsigned long *) (MCF_IPSBAR + MCFICM_INTC0 +
-			MCFINTC_IMRH);
+		imrp = (volatile unsigned long *)(MCF_IPSBAR + MCFICM_INTC0 +
+						  MCFINTC_IMRH);
 		*imrp &= ~0x0001FFF0;
 	}
 	*(volatile unsigned char *)(MCF_IPSBAR + MCF_GPIO_PAR_FEC) |= 0xf0;
 	*(volatile unsigned char *)(MCF_IPSBAR + MCF_GPIO_PAR_FECI2C) |= 0x0f;
 }
 
-static void __inline__ fec_set_mii(struct net_device *dev, struct fec_enet_private *fep)
+static void fec_set_mii(struct net_device *dev,
+				   struct fec_enet_private *fep)
 {
 	volatile fec_t *fecp;
 
@@ -1597,7 +1618,7 @@ static void __inline__ fec_set_mii(struc
 	fec_restart(dev, 0);
 }
 
-static void __inline__ fec_get_mac(struct net_device *dev)
+static void fec_get_mac(struct net_device *dev)
 {
 	struct fec_enet_private *fep = netdev_priv(dev);
 	volatile fec_t *fecp;
@@ -1612,14 +1633,14 @@ static void __inline__ fec_get_mac(struc
 		 */
 		iap = FEC_FLASHMAC;
 		if ((iap[0] == 0) && (iap[1] == 0) && (iap[2] == 0) &&
-		   (iap[3] == 0) && (iap[4] == 0) && (iap[5] == 0))
+		    (iap[3] == 0) && (iap[4] == 0) && (iap[5] == 0))
 			iap = fec_mac_default;
 		if ((iap[0] == 0xff) && (iap[1] == 0xff) && (iap[2] == 0xff) &&
-		   (iap[3] == 0xff) && (iap[4] == 0xff) && (iap[5] == 0xff))
+		    (iap[3] == 0xff) && (iap[4] == 0xff) && (iap[5] == 0xff))
 			iap = fec_mac_default;
 	} else {
-		*((unsigned long *) &tmpaddr[0]) = fecp->fec_addr_low;
-		*((unsigned short *) &tmpaddr[4]) = (fecp->fec_addr_high >> 16);
+		*((unsigned long *)&tmpaddr[0]) = fecp->fec_addr_low;
+		*((unsigned short *)&tmpaddr[4]) = (fecp->fec_addr_high >> 16);
 		iap = &tmpaddr[0];
 	}
 
@@ -1627,26 +1648,27 @@ static void __inline__ fec_get_mac(struc
 
 	/* Adjust MAC if using default MAC address */
 	if (iap == fec_mac_default)
-		dev->dev_addr[ETH_ALEN-1] = fec_mac_default[ETH_ALEN-1] + fep->index;
+		dev->dev_addr[ETH_ALEN - 1] =
+		    fec_mac_default[ETH_ALEN - 1] + fep->index;
 }
 
-static void __inline__ fec_enable_phy_intr(void)
+static void fec_enable_phy_intr(void)
 {
 }
 
-static void __inline__ fec_disable_phy_intr(void)
+static void fec_disable_phy_intr(void)
 {
 }
 
-static void __inline__ fec_phy_ack_intr(void)
+static void fec_phy_ack_intr(void)
 {
 }
 
-static void __inline__ fec_localhw_setup(void)
+static void fec_localhw_setup(void)
 {
 }
 
-static void __inline__ fec_uncache(unsigned long addr)
+static void fec_uncache(unsigned long addr)
 {
 }
 
@@ -1656,7 +1678,7 @@ static void __inline__ fec_uncache(unsig
 /*
  * Code specific for M532x
  */
-static void __inline__ fec_request_intrs(struct net_device *dev)
+static void fec_request_intrs(struct net_device *dev)
 {
 	struct fec_enet_private *fep;
 	int b;
@@ -1664,30 +1686,34 @@ static void __inline__ fec_request_intrs
 		char *name;
 		unsigned short irq;
 	} *idp, id[] = {
-	    { "fec(TXF)", 36 },
-	    { "fec(TXB)", 37 },
-	    { "fec(TXFIFO)", 38 },
-	    { "fec(TXCR)", 39 },
-	    { "fec(RXF)", 40 },
-	    { "fec(RXB)", 41 },
-	    { "fec(MII)", 42 },
-	    { "fec(LC)", 43 },
-	    { "fec(HBERR)", 44 },
-	    { "fec(GRA)", 45 },
-	    { "fec(EBERR)", 46 },
-	    { "fec(BABT)", 47 },
-	    { "fec(BABR)", 48 },
-	    { NULL },
-	};
+		{
+		"fec(TXF)", 36}, {
+		"fec(TXB)", 37}, {
+		"fec(TXFIFO)", 38}, {
+		"fec(TXCR)", 39}, {
+		"fec(RXF)", 40}, {
+		"fec(RXB)", 41}, {
+		"fec(MII)", 42}, {
+		"fec(LC)", 43}, {
+		"fec(HBERR)", 44}, {
+		"fec(GRA)", 45}, {
+		"fec(EBERR)", 46}, {
+		"fec(BABT)", 47}, {
+		"fec(BABR)", 48}, {
+	NULL},};
 
 	fep = netdev_priv(dev);
 	b = (fep->index) ? 128 : 64;
 
 	/* Setup interrupt handlers. */
 	for (idp = id; idp->name; idp++) {
-		if (request_irq(b+idp->irq, fec_enet_interrupt, IRQF_DISABLED, idp->name,dev) != 0)
-			printk("FEC: Could not allocate %s IRQ(%d)!\n",
-				idp->name, b+idp->irq);
+	    int ret;
+
+	    ret = request_irq(b + idp->irq, fec_enet_interrupt, IRQF_DISABLED,
+		    idp->name, dev);
+	   if (ret)
+	       printk("FEC: Could not allocate %s IRQ(%d)!\n",
+		       idp->name, b + idp->irq);
 	}
 
 	/* Unmask interrupts */
@@ -1705,31 +1731,31 @@ static void __inline__ fec_request_intrs
 	MCF_INTC0_ICR47 = 0x2;
 	MCF_INTC0_ICR48 = 0x2;
 
-	MCF_INTC0_IMRH &= ~(
-		MCF_INTC_IMRH_INT_MASK36 |
-		MCF_INTC_IMRH_INT_MASK37 |
-		MCF_INTC_IMRH_INT_MASK38 |
-		MCF_INTC_IMRH_INT_MASK39 |
-		MCF_INTC_IMRH_INT_MASK40 |
-		MCF_INTC_IMRH_INT_MASK41 |
-		MCF_INTC_IMRH_INT_MASK42 |
-		MCF_INTC_IMRH_INT_MASK43 |
-		MCF_INTC_IMRH_INT_MASK44 |
-		MCF_INTC_IMRH_INT_MASK45 |
-		MCF_INTC_IMRH_INT_MASK46 |
-		MCF_INTC_IMRH_INT_MASK47 |
-		MCF_INTC_IMRH_INT_MASK48 );
+	MCF_INTC0_IMRH &= ~(MCF_INTC_IMRH_INT_MASK36 |
+			    MCF_INTC_IMRH_INT_MASK37 |
+			    MCF_INTC_IMRH_INT_MASK38 |
+			    MCF_INTC_IMRH_INT_MASK39 |
+			    MCF_INTC_IMRH_INT_MASK40 |
+			    MCF_INTC_IMRH_INT_MASK41 |
+			    MCF_INTC_IMRH_INT_MASK42 |
+			    MCF_INTC_IMRH_INT_MASK43 |
+			    MCF_INTC_IMRH_INT_MASK44 |
+			    MCF_INTC_IMRH_INT_MASK45 |
+			    MCF_INTC_IMRH_INT_MASK46 |
+			    MCF_INTC_IMRH_INT_MASK47 |
+			    MCF_INTC_IMRH_INT_MASK48);
 
 	/* Set up gpio outputs for MII lines */
 	MCF_GPIO_PAR_FECI2C |= (0 |
-		MCF_GPIO_PAR_FECI2C_PAR_MDC_EMDC |
-		MCF_GPIO_PAR_FECI2C_PAR_MDIO_EMDIO);
+				MCF_GPIO_PAR_FECI2C_PAR_MDC_EMDC |
+				MCF_GPIO_PAR_FECI2C_PAR_MDIO_EMDIO);
 	MCF_GPIO_PAR_FEC = (0 |
-		MCF_GPIO_PAR_FEC_PAR_FEC_7W_FEC |
-		MCF_GPIO_PAR_FEC_PAR_FEC_MII_FEC);
+			    MCF_GPIO_PAR_FEC_PAR_FEC_7W_FEC |
+			    MCF_GPIO_PAR_FEC_PAR_FEC_MII_FEC);
 }
 
-static void __inline__ fec_set_mii(struct net_device *dev, struct fec_enet_private *fep)
+static void fec_set_mii(struct net_device *dev,
+				   struct fec_enet_private *fep)
 {
 	volatile fec_t *fecp;
 
@@ -1746,7 +1772,7 @@ static void __inline__ fec_set_mii(struc
 	fec_restart(dev, 0);
 }
 
-static void __inline__ fec_get_mac(struct net_device *dev)
+static void fec_get_mac(struct net_device *dev)
 {
 	struct fec_enet_private *fep = netdev_priv(dev);
 	volatile fec_t *fecp;
@@ -1767,8 +1793,8 @@ static void __inline__ fec_get_mac(struc
 		    (iap[3] == 0xff) && (iap[4] == 0xff) && (iap[5] == 0xff))
 			iap = fec_mac_default;
 	} else {
-		*((unsigned long *) &tmpaddr[0]) = fecp->fec_addr_low;
-		*((unsigned short *) &tmpaddr[4]) = (fecp->fec_addr_high >> 16);
+		*((unsigned long *)&tmpaddr[0]) = fecp->fec_addr_low;
+		*((unsigned short *)&tmpaddr[4]) = (fecp->fec_addr_high >> 16);
 		iap = &tmpaddr[0];
 	}
 
@@ -1776,52 +1802,53 @@ static void __inline__ fec_get_mac(struc
 
 	/* Adjust MAC if using default MAC address */
 	if (iap == fec_mac_default)
-		dev->dev_addr[ETH_ALEN-1] = fec_mac_default[ETH_ALEN-1] + fep->index;
+		dev->dev_addr[ETH_ALEN - 1] =
+		    fec_mac_default[ETH_ALEN - 1] + fep->index;
 }
 
-static void __inline__ fec_enable_phy_intr(void)
+static void fec_enable_phy_intr(void)
 {
 }
 
-static void __inline__ fec_disable_phy_intr(void)
+static void fec_disable_phy_intr(void)
 {
 }
 
-static void __inline__ fec_phy_ack_intr(void)
+static void fec_phy_ack_intr(void)
 {
 }
 
-static void __inline__ fec_localhw_setup(void)
+static void fec_localhw_setup(void)
 {
 }
 
 /*
  *	Do not need to make region uncached on 532x.
  */
-static void __inline__ fec_uncache(unsigned long addr)
+static void fec_uncache(unsigned long addr)
 {
 }
 
 /* ------------------------------------------------------------------------- */
 
-
 #else
 
 /*
  *	Code specific to the MPC860T setup.
  */
-static void __inline__ fec_request_intrs(struct net_device *dev)
+static void fec_request_intrs(struct net_device *dev)
 {
 	volatile immap_t *immap;
 
-	immap = (immap_t *)IMAP_ADDR;	/* pointer to internal registers */
+	immap = (immap_t *) IMAP_ADDR;	/* pointer to internal registers */
 
-	if (request_8xxirq(FEC_INTERRUPT, fec_enet_interrupt, 0, "fec", dev) != 0)
+	if (request_8xxirq(FEC_INTERRUPT, fec_enet_interrupt, 0, "fec", dev) !=
+	    0)
 		panic("Could not allocate FEC IRQ!");
 
 #ifdef CONFIG_RPXCLASSIC
 	/* Make Port C, bit 15 an input that causes interrupts.
-	*/
+	 */
 	immap->im_ioport.iop_pcpar &= ~0x0001;
 	immap->im_ioport.iop_pcdir &= ~0x0001;
 	immap->im_ioport.iop_pcso &= ~0x0001;
@@ -1829,7 +1856,7 @@ static void __inline__ fec_request_intrs
 	cpm_install_handler(CPMVEC_PIO_PC15, mii_link_interrupt, dev);
 
 	/* Make LEDS reflect Link status.
-	*/
+	 */
 	*((uint *) RPX_CSR_ADDR) &= ~BCSR2_FETHLEDMODE;
 #endif
 #ifdef CONFIG_FADS
@@ -1838,11 +1865,11 @@ static void __inline__ fec_request_intrs
 #endif
 }
 
-static void __inline__ fec_get_mac(struct net_device *dev)
+static void fec_get_mac(struct net_device *dev)
 {
 	bd_t *bd;
 
-	bd = (bd_t *)__res;
+	bd = (bd_t *) __res;
 	memcpy(dev->dev_addr, bd->bi_enetaddr, ETH_ALEN);
 
 #ifdef CONFIG_RPXCLASSIC
@@ -1856,63 +1883,64 @@ static void __inline__ fec_get_mac(struc
 #endif
 }
 
-static void __inline__ fec_set_mii(struct net_device *dev, struct fec_enet_private *fep)
+static void fec_set_mii(struct net_device *dev,
+				   struct fec_enet_private *fep)
 {
 	extern uint _get_IMMR(void);
 	volatile immap_t *immap;
 	volatile fec_t *fecp;
 
 	fecp = fep->hwp;
-	immap = (immap_t *)IMAP_ADDR;	/* pointer to internal registers */
+	immap = (immap_t *) IMAP_ADDR;	/* pointer to internal registers */
 
 	/* Configure all of port D for MII.
-	*/
+	 */
 	immap->im_ioport.iop_pdpar = 0x1fff;
 
 	/* Bits moved from Rev. D onward.
-	*/
+	 */
 	if ((_get_IMMR() & 0xffff) < 0x0501)
 		immap->im_ioport.iop_pddir = 0x1c58;	/* Pre rev. D */
 	else
 		immap->im_ioport.iop_pddir = 0x1fff;	/* Rev. D and later */
 
 	/* Set MII speed to 2.5 MHz
-	*/
+	 */
 	fecp->fec_mii_speed = fep->phy_speed =
-		((bd->bi_busfreq * 1000000) / 2500000) & 0x7e;
+	    ((bd->bi_busfreq * 1000000) / 2500000) & 0x7e;
 }
 
-static void __inline__ fec_enable_phy_intr(void)
+static void fec_enable_phy_intr(void)
 {
 	volatile fec_t *fecp;
 
 	fecp = fep->hwp;
 
 	/* Enable MII command finished interrupt
-	*/
-	fecp->fec_ivec = (FEC_INTERRUPT/2) << 29;
+	 */
+	fecp->fec_ivec = (FEC_INTERRUPT / 2) << 29;
 }
 
-static void __inline__ fec_disable_phy_intr(void)
+static void fec_disable_phy_intr(void)
 {
 }
 
-static void __inline__ fec_phy_ack_intr(void)
+static void fec_phy_ack_intr(void)
 {
 }
 
-static void __inline__ fec_localhw_setup(void)
+static void fec_localhw_setup(void)
 {
 	volatile fec_t *fecp;
 
 	fecp = fep->hwp;
 	fecp->fec_r_hash = PKT_MAXBUF_SIZE;
 	/* Enable big endian and don't care about SDMA FC.
-	*/
+	 */
 	fecp->fec_fun_code = 0x78000000;
 }
 
-static void __inline__ fec_uncache(unsigned long addr)
+static void fec_uncache(unsigned long addr)
 {
 	pte_t *pte;
 	pte = va_to_pte(mem_addr);
@@ -1941,11 +1969,19 @@ static void mii_display_status(struct ne
 	} else {
 		printk("link up");
 
-		switch(*s & PHY_STAT_SPMASK) {
-		case PHY_STAT_100FDX: printk(", 100MBit Full Duplex"); break;
-		case PHY_STAT_100HDX: printk(", 100MBit Half Duplex"); break;
-		case PHY_STAT_10FDX: printk(", 10MBit Full Duplex"); break;
-		case PHY_STAT_10HDX: printk(", 10MBit Half Duplex"); break;
+		switch (*s & PHY_STAT_SPMASK) {
+		case PHY_STAT_100FDX:
+			printk(", 100MBit Full Duplex");
+			break;
+		case PHY_STAT_100HDX:
+			printk(", 100MBit Half Duplex");
+			break;
+		case PHY_STAT_10FDX:
+			printk(", 10MBit Full Duplex");
+			break;
+		case PHY_STAT_10HDX:
+			printk(", 10MBit Half Duplex");
+			break;
 		default:
 			printk(", Unknown speed/duplex");
 		}
@@ -1962,14 +1998,15 @@ static void mii_display_status(struct ne
 
 static void mii_display_config(struct work_struct *work)
 {
-	struct fec_enet_private *fep = container_of(work, struct fec_enet_private, phy_task);
+	struct fec_enet_private *fep =
+	    container_of(work, struct fec_enet_private, phy_task);
 	struct net_device *dev = fep->netdev;
 	uint status = fep->phy_status;
 
 	/*
-	** When we get here, phy_task is already removed from
-	** the workqueue.  It is thus safe to allow to reuse it.
-	*/
+	 ** When we get here, phy_task is already removed from
+	 ** the workqueue.  It is thus safe to allow to reuse it.
+	 */
 	fep->mii_phy_task_queued = 0;
 	printk("%s: config: auto-negotiation ", dev->name);
 
@@ -1999,14 +2036,15 @@ static void mii_display_config(struct wo
 
 static void mii_relink(struct work_struct *work)
 {
-	struct fec_enet_private *fep = container_of(work, struct fec_enet_private, phy_task);
+	struct fec_enet_private *fep =
+	    container_of(work, struct fec_enet_private, phy_task);
 	struct net_device *dev = fep->netdev;
 	int duplex;
 
 	/*
-	** When we get here, phy_task is already removed from
-	** the workqueue.  It is thus safe to allow to reuse it.
-	*/
+	 ** When we get here, phy_task is already removed from
+	 ** the workqueue.  It is thus safe to allow to reuse it.
+	 */
 	fep->mii_phy_task_queued = 0;
 	fep->link = (fep->phy_status & PHY_STAT_LINK) ? 1 : 0;
 	mii_display_status(dev);
@@ -2014,8 +2052,7 @@ static void mii_relink(struct work_struc
 
 	if (fep->link) {
 		duplex = 0;
-		if (fep->phy_status
-		    & (PHY_STAT_100FDX | PHY_STAT_10FDX))
+		if (fep->phy_status & (PHY_STAT_100FDX | PHY_STAT_10FDX))
 			duplex = 1;
 		fec_restart(dev, duplex);
 	} else
@@ -2033,12 +2070,12 @@ static void mii_queue_relink(uint mii_re
 	struct fec_enet_private *fep = netdev_priv(dev);
 
 	/*
-	** We cannot queue phy_task twice in the workqueue.  It
-	** would cause an endless loop in the workqueue.
-	** Fortunately, if the last mii_relink entry has not yet been
-	** executed now, it will do the job for the current interrupt,
-	** which is just what we want.
-	*/
+	 ** We cannot queue phy_task twice in the workqueue.  It
+	 ** would cause an endless loop in the workqueue.
+	 ** Fortunately, if the last mii_relink entry has not yet been
+	 ** executed now, it will do the job for the current interrupt,
+	 ** which is just what we want.
+	 */
 	if (fep->mii_phy_task_queued)
 		return;
 
@@ -2061,18 +2098,17 @@ static void mii_queue_config(uint mii_re
 }
 
 phy_cmd_t const phy_cmd_relink[] = {
-	{ mk_mii_read(MII_REG_CR), mii_queue_relink },
-	{ mk_mii_end, }
-	};
+	{mk_mii_read(MII_REG_CR), mii_queue_relink},
+	{mk_mii_end,}
+};
 phy_cmd_t const phy_cmd_config[] = {
-	{ mk_mii_read(MII_REG_CR), mii_queue_config },
-	{ mk_mii_end, }
-	};
+	{mk_mii_read(MII_REG_CR), mii_queue_config},
+	{mk_mii_end,}
+};
 
 /* Read remainder of PHY ID.
 */
-static void
-mii_discover_phy3(uint mii_reg, struct net_device *dev)
+static void mii_discover_phy3(uint mii_reg, struct net_device *dev)
 {
 	struct fec_enet_private *fep;
 	int i;
@@ -2081,8 +2117,8 @@ mii_discover_phy3(uint mii_reg, struct n
 	fep->phy_id |= (mii_reg & 0xffff);
 	printk("fec: PHY @ 0x%x, ID 0x%08x", fep->phy_addr, fep->phy_id);
 
-	for(i = 0; phy_info[i]; i++) {
-		if(phy_info[i]->id == (fep->phy_id >> 4))
+	for (i = 0; phy_info[i]; i++) {
+		if (phy_info[i]->id == (fep->phy_id >> 4))
 			break;
 	}
 
@@ -2098,8 +2134,7 @@ mii_discover_phy3(uint mii_reg, struct n
 /* Scan all of the MII PHY addresses looking for someone to respond
  * with a valid ID.  This usually happens quickly.
  */
-static void
-mii_discover_phy(uint mii_reg, struct net_device *dev)
+static void mii_discover_phy(uint mii_reg, struct net_device *dev)
 {
 	struct fec_enet_private *fep;
 	volatile fec_t *fecp;
@@ -2112,14 +2147,14 @@ mii_discover_phy(uint mii_reg, struct ne
 		if ((phytype = (mii_reg & 0xffff)) != 0xffff && phytype != 0) {
 
 			/* Got first part of ID, now get remainder.
-			*/
+			 */
 			fep->phy_id = phytype << 16;
 			mii_queue(dev, mk_mii_read(MII_REG_PHYIR2),
-							mii_discover_phy3);
+				  mii_discover_phy3);
 		} else {
 			fep->phy_addr++;
 			mii_queue(dev, mk_mii_read(MII_REG_PHYIR1),
-							mii_discover_phy);
+				  mii_discover_phy);
 		}
 	} else {
 		printk("FEC: No PHY device found.\n");
@@ -2133,31 +2168,28 @@ mii_discover_phy(uint mii_reg, struct ne
 */
 #ifndef DONT_NEED_mii_link_interrupt
 #ifdef CONFIG_RPXCLASSIC
-static void
-mii_link_interrupt(void *dev_id)
+static void mii_link_interrupt(void *dev_id)
 #else
-static irqreturn_t
-mii_link_interrupt(int irq, void * dev_id)
+static irqreturn_t mii_link_interrupt(int irq, void *dev_id)
 #endif
 {
-	struct	net_device *dev = dev_id;
+	struct net_device *dev = dev_id;
 	struct fec_enet_private *fep = netdev_priv(dev);
 
 	fec_phy_ack_intr();
 
 #if 0
-	disable_irq(fep->mii_irq);  /* disable now, enable later */
+	disable_irq(fep->mii_irq);	/* disable now, enable later */
 #endif
 
 	mii_do_cmd(dev, fep->phy->ack_int);
-	mii_do_cmd(dev, phy_cmd_relink);  /* restart and display status */
+	mii_do_cmd(dev, phy_cmd_relink);	/* restart and display status */
 
 	return IRQ_HANDLED;
 }
 #endif
 
-static int
-fec_enet_open(struct net_device *dev)
+static int fec_enet_open(struct net_device *dev)
 {
 	struct fec_enet_private *fep = netdev_priv(dev);
 
@@ -2172,7 +2204,7 @@ fec_enet_open(struct net_device *dev)
 	if (fep->phy) {
 		mii_do_cmd(dev, fep->phy->ack_int);
 		mii_do_cmd(dev, fep->phy->config);
-		mii_do_cmd(dev, phy_cmd_config);  /* display configuration */
+		mii_do_cmd(dev, phy_cmd_config);	/* display configuration */
 
 		/* Poll until the PHY tells us its configuration
 		 * (not link state).
@@ -2181,7 +2213,7 @@ fec_enet_open(struct net_device *dev)
 		 * This should take about 25 usec per register at 2.5 MHz,
 		 * and we read approximately 5 registers.
 		 */
-		while(!fep->sequence_done)
+		while (!fep->sequence_done)
 			schedule();
 
 		mii_do_cmd(dev, fep->phy->startup);
@@ -2192,7 +2224,7 @@ fec_enet_open(struct net_device *dev)
 		 */
 		fep->link = 1;
 	} else {
-		fep->link = 1; /* lets just try it and see */
+		fep->link = 1;	/* lets just try it and see */
 		/* no phy,  go full duplex,  it's most likely a hub chip */
 		fec_restart(dev, 1);
 	}
@@ -2202,13 +2234,12 @@ fec_enet_open(struct net_device *dev)
 	return 0;		/* Success */
 }
 
-static int
-fec_enet_close(struct net_device *dev)
+static int fec_enet_close(struct net_device *dev)
 {
 	struct fec_enet_private *fep = netdev_priv(dev);
 
 	/* Don't know what to do yet.
-	*/
+	 */
 	fep->opened = 0;
 	netif_stop_queue(dev);
 	fec_stop(dev);
@@ -2226,7 +2257,7 @@ fec_enet_close(struct net_device *dev)
  * this kind of feature?).
  */
 
-#define HASH_BITS	6		/* #bits in hash */
+#define HASH_BITS	6	/* #bits in hash */
 #define CRC32_POLY	0xEDB88320
 
 static void set_multicast_list(struct net_device *dev)
@@ -2240,65 +2271,66 @@ static void set_multicast_list(struct ne
 	fep = netdev_priv(dev);
 	ep = fep->hwp;
 
-	if (dev->flags&IFF_PROMISC) {
+	if (dev->flags & IFF_PROMISC) {
 		ep->fec_r_cntrl |= 0x0008;
-	} else {
+		return ;
+	}
 
-		ep->fec_r_cntrl &= ~0x0008;
+	ep->fec_r_cntrl &= ~0x0008;
 
-		if (dev->flags & IFF_ALLMULTI) {
-			/* Catch all multicast addresses, so set the
-			 * filter to all 1's.
-			 */
-			ep->fec_hash_table_high = 0xffffffff;
-			ep->fec_hash_table_low = 0xffffffff;
-		} else {
-			/* Clear filter and add the addresses in hash register.
-			*/
-			ep->fec_hash_table_high = 0;
-			ep->fec_hash_table_low = 0;
-
-			dmi = dev->mc_list;
-
-			for (j = 0; j < dev->mc_count; j++, dmi = dmi->next)
-			{
-				/* Only support group multicast for now.
-				*/
-				if (!(dmi->dmi_addr[0] & 1))
-					continue;
-
-				/* calculate crc32 value of mac address
-				*/
-				crc = 0xffffffff;
-
-				for (i = 0; i < dmi->dmi_addrlen; i++)
-				{
-					data = dmi->dmi_addr[i];
-					for (bit = 0; bit < 8; bit++, data >>= 1)
-					{
-						crc = (crc >> 1) ^
-						(((crc ^ data) & 1) ? CRC32_POLY : 0);
-					}
-				}
-
-				/* only upper 6 bits (HASH_BITS) are used
-				   which point to specific bit in he hash registers
-				*/
-				hash = (crc >> (32 - HASH_BITS)) & 0x3f;
-
-				if (hash > 31)
-					ep->fec_hash_table_high |= 1 << (hash - 32);
-				else
-					ep->fec_hash_table_low |= 1 << hash;
+	if (dev->flags & IFF_ALLMULTI) {
+		/* Catch all multicast addresses, so set the
+		 * filter to all 1's.
+		 */
+		ep->fec_hash_table_high = 0xffffffff;
+		ep->fec_hash_table_low = 0xffffffff;
+		return ;
+	}
+	/*
+	 * Clear filter and add the addresses in hash register.
+	 */
+	ep->fec_hash_table_high = 0;
+	ep->fec_hash_table_low = 0;
+
+	dmi = dev->mc_list;
+
+	for (j = 0; j < dev->mc_count; j++, dmi = dmi->next) {
+		/* Only support group multicast for now.
+		*/
+		if (!(dmi->dmi_addr[0] & 1))
+			continue;
+
+		/* calculate crc32 value of mac address
+		*/
+		crc = 0xffffffff;
+
+		for (i = 0; i < dmi->dmi_addrlen; i++) {
+			data = dmi->dmi_addr[i];
+			for (bit = 0; bit < 8;
+					bit++, data >>= 1) {
+				crc =
+					(crc >> 1) ^
+					(((crc ^ data) & 1) ?
+					 CRC32_POLY : 0);
 			}
 		}
+
+		/* only upper 6 bits (HASH_BITS) are used
+		   which point to specific bit in he hash registers
+		   */
+		hash = (crc >> (32 - HASH_BITS)) & 0x3f;
+
+		if (hash > 31)
+			ep->fec_hash_table_high |=
+				1 << (hash - 32);
+		else
+			ep->fec_hash_table_low |= 1 << hash;
 	}
 }
 
 /* Set a MAC change in hardware.
  */
-static void
-fec_set_mac_address(struct net_device *dev)
+static void fec_set_mac_address(struct net_device *dev)
 {
 	volatile fec_t *fecp;
 
@@ -2306,9 +2338,9 @@ fec_set_mac_address(struct net_device *d
 
 	/* Set station address. */
 	fecp->fec_addr_low = dev->dev_addr[3] | (dev->dev_addr[2] << 8) |
-		(dev->dev_addr[1] << 16) | (dev->dev_addr[0] << 24);
+	    (dev->dev_addr[1] << 16) | (dev->dev_addr[0] << 24);
 	fecp->fec_addr_high = (dev->dev_addr[5] << 16) |
-		(dev->dev_addr[4] << 24);
+	    (dev->dev_addr[4] << 24);
 
 }
 
@@ -2317,22 +2349,22 @@ fec_set_mac_address(struct net_device *d
  /*
   * XXX:  We need to clean up on failure exits here.
   */
+static int index;
 int __init fec_enet_init(struct net_device *dev)
 {
 	struct fec_enet_private *fep = netdev_priv(dev);
-	unsigned long	mem_addr;
-	volatile cbd_t	*bdp;
-	cbd_t		*cbd_base;
-	volatile fec_t	*fecp;
-	int 		i, j;
-	static int	index = 0;
+	unsigned long mem_addr;
+	volatile cbd_t *bdp;
+	cbd_t *cbd_base;
+	volatile fec_t *fecp;
+	int i, j;
 
 	/* Only allow us to be probed once. */
 	if (index >= FEC_MAX_PORTS)
 		return -ENXIO;
 
 	/* Allocate memory for buffer descriptors.
-	*/
+	 */
 	mem_addr = __get_free_page(GFP_KERNEL);
 	if (mem_addr == 0) {
 		printk("FEC: allocate descriptor memory failed?\n");
@@ -2340,15 +2372,15 @@ int __init fec_enet_init(struct net_devi
 	}
 
 	/* Create an Ethernet device instance.
-	*/
-	fecp = (volatile fec_t *) fec_hw[index];
+	 */
+	fecp = (volatile fec_t *)fec_hw[index];
 
 	fep->index = index;
 	fep->hwp = fecp;
 	fep->netdev = dev;
 
 	/* Whack a reset.  We should wait for this.
-	*/
+	 */
 	fecp->fec_ecntrl = 1;
 	udelay(10);
 
@@ -2360,13 +2392,12 @@ int __init fec_enet_init(struct net_devi
 	 */
 	fec_get_mac(dev);
 
-	cbd_base = (cbd_t *)mem_addr;
-	/* XXX: missing check for allocation failure */
+	cbd_base = (cbd_t *) mem_addr;
 
 	fec_uncache(mem_addr);
 
 	/* Set receive and transmit descriptor base.
-	*/
+	 */
 	fep->rx_bd_base = cbd_base;
 	fep->tx_bd_base = cbd_base + RX_RING_SIZE;
 
@@ -2376,20 +2407,20 @@ int __init fec_enet_init(struct net_devi
 	fep->skb_cur = fep->skb_dirty = 0;
 
 	/* Initialize the receive buffer descriptors.
-	*/
+	 */
 	bdp = fep->rx_bd_base;
-	for (i=0; i<FEC_ENET_RX_PAGES; i++) {
+	for (i = 0; i < FEC_ENET_RX_PAGES; i++) {
 
 		/* Allocate a page.
-		*/
+		 */
 		mem_addr = __get_free_page(GFP_KERNEL);
 		/* XXX: missing check for allocation failure */
 
 		fec_uncache(mem_addr);
 
 		/* Initialize the BD for every fragment in the page.
-		*/
-		for (j=0; j<FEC_ENET_RX_FRPPG; j++) {
+		 */
+		for (j = 0; j < FEC_ENET_RX_FRPPG; j++) {
 			bdp->cbd_sc = BD_ENET_RX_EMPTY;
 			bdp->cbd_bufaddr = __pa(mem_addr);
 			mem_addr += FEC_ENET_RX_FRSIZE;
@@ -2398,43 +2429,44 @@ int __init fec_enet_init(struct net_devi
 	}
 
 	/* Set the last buffer to wrap.
-	*/
+	 */
 	bdp--;
 	bdp->cbd_sc |= BD_SC_WRAP;
 
 	/* ...and the same for transmmit.
-	*/
+	 */
 	bdp = fep->tx_bd_base;
-	for (i=0, j=FEC_ENET_TX_FRPPG; i<TX_RING_SIZE; i++) {
+	for (i = 0, j = FEC_ENET_TX_FRPPG; i < TX_RING_SIZE; i++) {
 		if (j >= FEC_ENET_TX_FRPPG) {
+			/* XXX: missing check for allocation failure */
 			mem_addr = __get_free_page(GFP_KERNEL);
 			j = 1;
 		} else {
 			mem_addr += FEC_ENET_TX_FRSIZE;
 			j++;
 		}
-		fep->tx_bounce[i] = (unsigned char *) mem_addr;
+		fep->tx_bounce[i] = (unsigned char *)mem_addr;
 
 		/* Initialize the BD for every fragment in the page.
-		*/
+		 */
 		bdp->cbd_sc = 0;
 		bdp->cbd_bufaddr = 0;
 		bdp++;
 	}
 
 	/* Set the last buffer to wrap.
-	*/
+	 */
 	bdp--;
 	bdp->cbd_sc |= BD_SC_WRAP;
 
 	/* Set receive and transmit descriptor base.
-	*/
-	fecp->fec_r_des_start = __pa((uint)(fep->rx_bd_base));
-	fecp->fec_x_des_start = __pa((uint)(fep->tx_bd_base));
+	 */
+	fecp->fec_r_des_start = __pa((uint) (fep->rx_bd_base));
+	fecp->fec_x_des_start = __pa((uint) (fep->tx_bd_base));
 
 	/* Install our interrupt handlers. This varies depending on
 	 * the architecture.
-	*/
+	 */
 	fec_request_intrs(dev);
 
 	fecp->fec_hash_table_high = 0;
@@ -2453,8 +2485,8 @@ int __init fec_enet_init(struct net_devi
 	dev->stop = fec_enet_close;
 	dev->set_multicast_list = set_multicast_list;
 
-	for (i=0; i<NMII-1; i++)
-		mii_cmds[i].mii_next = &mii_cmds[i+1];
+	for (i = 0; i < NMII - 1; i++)
+		mii_cmds[i].mii_next = &mii_cmds[i + 1];
 	mii_free = mii_cmds;
 
 	/* setup MII interface */
@@ -2463,7 +2495,7 @@ int __init fec_enet_init(struct net_devi
 	/* Clear and enable interrupts */
 	fecp->fec_ievent = 0xffc00000;
 	fecp->fec_imask = (FEC_ENET_TXF | FEC_ENET_TXB |
-		FEC_ENET_RXF | FEC_ENET_RXB | FEC_ENET_MII);
+			   FEC_ENET_RXF | FEC_ENET_RXB | FEC_ENET_MII);
 
 	/* Queue up command to detect the PHY and initialize the
 	 * remainder of the interface.
@@ -2480,8 +2512,7 @@ int __init fec_enet_init(struct net_devi
  * change.  This only happens when switching between half and full
  * duplex.
  */
-static void
-fec_restart(struct net_device *dev, int duplex)
+static void fec_restart(struct net_device *dev, int duplex)
 {
 	struct fec_enet_private *fep;
 	volatile cbd_t *bdp;
@@ -2492,42 +2523,42 @@ fec_restart(struct net_device *dev, int 
 	fecp = fep->hwp;
 
 	/* Whack a reset.  We should wait for this.
-	*/
+	 */
 	fecp->fec_ecntrl = 1;
 	udelay(10);
 
 	/* Clear any outstanding interrupt.
-	*/
+	 */
 	fecp->fec_ievent = 0xffc00000;
 	fec_enable_phy_intr();
 
 	/* Set station address.
-	*/
+	 */
 	fec_set_mac_address(dev);
 
 	/* Reset all multicast.
-	*/
+	 */
 	fecp->fec_hash_table_high = 0;
 	fecp->fec_hash_table_low = 0;
 
 	/* Set maximum receive buffer size.
-	*/
+	 */
 	fecp->fec_r_buff_size = PKT_MAXBLR_SIZE;
 
 	fec_localhw_setup();
 
 	/* Set receive and transmit descriptor base.
-	*/
-	fecp->fec_r_des_start = __pa((uint)(fep->rx_bd_base));
-	fecp->fec_x_des_start = __pa((uint)(fep->tx_bd_base));
+	 */
+	fecp->fec_r_des_start = __pa((uint) (fep->rx_bd_base));
+	fecp->fec_x_des_start = __pa((uint) (fep->tx_bd_base));
 
 	fep->dirty_tx = fep->cur_tx = fep->tx_bd_base;
 	fep->cur_rx = fep->rx_bd_base;
 
 	/* Reset SKB transmit buffers.
-	*/
+	 */
 	fep->skb_cur = fep->skb_dirty = 0;
-	for (i=0; i<=TX_RING_MOD_MASK; i++) {
+	for (i = 0; i <= TX_RING_MOD_MASK; i++) {
 		if (fep->tx_skbuff[i] != NULL) {
 			dev_kfree_skb_any(fep->tx_skbuff[i]);
 			fep->tx_skbuff[i] = NULL;
@@ -2535,43 +2566,43 @@ fec_restart(struct net_device *dev, int 
 	}
 
 	/* Initialize the receive buffer descriptors.
-	*/
+	 */
 	bdp = fep->rx_bd_base;
-	for (i=0; i<RX_RING_SIZE; i++) {
+	for (i = 0; i < RX_RING_SIZE; i++) {
 
 		/* Initialize the BD for every fragment in the page.
-		*/
+		 */
 		bdp->cbd_sc = BD_ENET_RX_EMPTY;
 		bdp++;
 	}
 
 	/* Set the last buffer to wrap.
-	*/
+	 */
 	bdp--;
 	bdp->cbd_sc |= BD_SC_WRAP;
 
 	/* ...and the same for transmmit.
-	*/
+	 */
 	bdp = fep->tx_bd_base;
-	for (i=0; i<TX_RING_SIZE; i++) {
+	for (i = 0; i < TX_RING_SIZE; i++) {
 
 		/* Initialize the BD for every fragment in the page.
-		*/
+		 */
 		bdp->cbd_sc = 0;
 		bdp->cbd_bufaddr = 0;
 		bdp++;
 	}
 
 	/* Set the last buffer to wrap.
-	*/
+	 */
 	bdp--;
 	bdp->cbd_sc |= BD_SC_WRAP;
 
 	/* Enable MII mode.
-	*/
+	 */
 	if (duplex) {
-		fecp->fec_r_cntrl = OPT_FRAME_SIZE | 0x04;/* MII enable */
-		fecp->fec_x_cntrl = 0x04;		  /* FD enable */
+		fecp->fec_r_cntrl = OPT_FRAME_SIZE | 0x04;	/* MII enable */
+		fecp->fec_x_cntrl = 0x04;	/* FD enable */
 	} else {
 		/* MII enable|No Rcv on Xmit */
 		fecp->fec_r_cntrl = OPT_FRAME_SIZE | 0x06;
@@ -2580,22 +2611,21 @@ fec_restart(struct net_device *dev, int 
 	fep->full_duplex = duplex;
 
 	/* Set MII speed.
-	*/
+	 */
 	fecp->fec_mii_speed = fep->phy_speed;
 
 	/* And last, enable the transmit and receive processing.
-	*/
+	 */
 	fecp->fec_ecntrl = 2;
 	fecp->fec_r_des_active = 0;
 
 	/* Enable interrupts we wish to service.
-	*/
+	 */
 	fecp->fec_imask = (FEC_ENET_TXF | FEC_ENET_TXB |
-		FEC_ENET_RXF | FEC_ENET_RXB | FEC_ENET_MII);
+			   FEC_ENET_RXF | FEC_ENET_RXB | FEC_ENET_MII);
 }
 
-static void
-fec_stop(struct net_device *dev)
+static void fec_stop(struct net_device *dev)
 {
 	volatile fec_t *fecp;
 	struct fec_enet_private *fep;
@@ -2604,23 +2634,23 @@ fec_stop(struct net_device *dev)
 	fecp = fep->hwp;
 
 	/*
-	** We cannot expect a graceful transmit stop without link !!!
-	*/
-	if (fep->link)
-		{
+	 ** We cannot expect a graceful transmit stop without link !!!
+	 */
+	if (fep->link) {
 		fecp->fec_x_cntrl = 0x01;	/* Graceful transmit stop */
 		udelay(10);
 		if (!(fecp->fec_ievent & FEC_ENET_GRA))
-			printk("fec_stop : Graceful transmit stop did not complete !\n");
-		}
+			printk
+			    ("fec_stop : Graceful transmit stop did not complete !\n");
+	}
 
 	/* Whack a reset.  We should wait for this.
-	*/
+	 */
 	fecp->fec_ecntrl = 1;
 	udelay(10);
 
 	/* Clear outstanding MII command interrupts.
-	*/
+	 */
 	fecp->fec_ievent = FEC_ENET_MII;
 	fec_enable_phy_intr();
 
@@ -2658,5 +2688,4 @@ static int __init fec_enet_module_init(v
 }
 
 module_init(fec_enet_module_init);
-
 MODULE_LICENSE("GPL");

-- 


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 4/5] m68knommu: fec fixup locking
  2008-04-02 20:58 [PATCH 0/5] fixup locking on m68knommu fec Sebastian Siewior
                   ` (2 preceding siblings ...)
  2008-04-02 20:58 ` [PATCH 5/5] m68knommu: dont allocate unused interrupts Sebastian Siewior
@ 2008-04-02 20:58 ` Sebastian Siewior
  2008-04-02 20:58 ` [PATCH 1/5] fec: kill warnings Sebastian Siewior
  2008-04-03  6:54 ` [PATCH 0/5] fixup locking on m68knommu fec Greg Ungerer
  5 siblings, 0 replies; 14+ messages in thread
From: Sebastian Siewior @ 2008-04-02 20:58 UTC (permalink / raw)
  To: Greg Ungerer; +Cc: Jeff Garzik, netdev, uclinux-dev

[-- Attachment #1: m68knommu-fec_fixup_spinlock.patch --]
[-- Type: text/plain, Size: 5496 bytes --]

Now there are two spinlocks:
- one for HW access like the RX/TX buffer & friends (but the MAC address)
- one for the mii lists.

Theoretically those two spinlocks could become one, but that way it looks
better.
The locks are taken before the first access to the HW (like retrieving the
current pointer to the ring buffer) and released after we finished. This
fixes some races that were covered / fixed by 0a504779d.

Signed-off-by: Sebastian Siewior <bigeasy@linutronix.de>
--- a/drivers/net/fec.c
+++ b/drivers/net/fec.c
@@ -209,7 +209,10 @@ struct fec_enet_private {
 	cbd_t *cur_rx, *cur_tx;	/* The next free ring entry */
 	cbd_t *dirty_tx;	/* The ring entries to be free()ed. */
 	uint tx_full;
-	spinlock_t lock;
+	/* hold while accessing the HW like ringbuffer for tx/rx but not MAC */
+	spinlock_t hw_lock;
+	/* hold while accessing the mii_list_t() elements */
+	spinlock_t mii_lock;
 
 	uint phy_id;
 	uint phy_id_done;
@@ -309,6 +312,7 @@ static int fec_enet_start_xmit(struct sk
 	volatile fec_t *fecp;
 	volatile cbd_t *bdp;
 	unsigned short status;
+	unsigned long flags;
 
 	fep = netdev_priv(dev);
 	fecp = (volatile fec_t *)dev->base_addr;
@@ -318,6 +322,7 @@ static int fec_enet_start_xmit(struct sk
 		return 1;
 	}
 
+	spin_lock_irqsave(&fep->hw_lock, flags);
 	/* Fill in a Tx ring entry */
 	bdp = fep->cur_tx;
 
@@ -328,6 +333,7 @@ static int fec_enet_start_xmit(struct sk
 		 * This should not happen, since dev->tbusy should be set.
 		 */
 		printk("%s: tx queue full!.\n", dev->name);
+		spin_unlock_irqrestore(&fep->hw_lock, flags);
 		return 1;
 	}
 #endif
@@ -367,7 +373,6 @@ static int fec_enet_start_xmit(struct sk
 	flush_dcache_range((unsigned long)skb->data,
 			   (unsigned long)skb->data + skb->len);
 
-	spin_lock_irq(&fep->lock);
 
 	/* Send it on its way.  Tell FEC it's ready, interrupt when done,
 	 * it's the last BD of the frame, and to put the CRC on the end.
@@ -397,7 +402,7 @@ static int fec_enet_start_xmit(struct sk
 
 	fep->cur_tx = (cbd_t *) bdp;
 
-	spin_unlock_irq(&fep->lock);
+	spin_unlock_irqrestore(&fep->hw_lock, flags);
 
 	return 0;
 }
@@ -451,19 +456,20 @@ static irqreturn_t fec_enet_interrupt(in
 	struct net_device *dev = dev_id;
 	volatile fec_t *fecp;
 	uint int_events;
-	int handled = 0;
+	irqreturn_t ret = IRQ_NONE;
 
 	fecp = (volatile fec_t *)dev->base_addr;
 
 	/* Get the interrupt events that caused us to be here.
 	 */
-	while ((int_events = fecp->fec_ievent) != 0) {
+	do {
+		int_events = fecp->fec_ievent;
 		fecp->fec_ievent = int_events;
 
 		/* Handle receive event in its own function.
 		 */
 		if (int_events & FEC_ENET_RXF) {
-			handled = 1;
+			ret = IRQ_HANDLED;
 			fec_enet_rx(dev);
 		}
 
@@ -472,17 +478,18 @@ static irqreturn_t fec_enet_interrupt(in
 		   them as part of the transmit process.
 		 */
 		if (int_events & FEC_ENET_TXF) {
-			handled = 1;
+			ret = IRQ_HANDLED;
 			fec_enet_tx(dev);
 		}
 
 		if (int_events & FEC_ENET_MII) {
-			handled = 1;
+			ret = IRQ_HANDLED;
 			fec_enet_mii(dev);
 		}
 
-	}
-	return IRQ_RETVAL(handled);
+	} while (int_events);
+
+	return ret;
 }
 
 static void fec_enet_tx(struct net_device *dev)
@@ -493,7 +500,7 @@ static void fec_enet_tx(struct net_devic
 	struct sk_buff *skb;
 
 	fep = netdev_priv(dev);
-	spin_lock(&fep->lock);
+	spin_lock_irq(&fep->hw_lock);
 	bdp = fep->dirty_tx;
 
 	while (((status = bdp->cbd_sc) & BD_ENET_TX_READY) == 0) {
@@ -552,7 +559,7 @@ static void fec_enet_tx(struct net_devic
 		}
 	}
 	fep->dirty_tx = (cbd_t *) bdp;
-	spin_unlock(&fep->lock);
+	spin_unlock_irq(&fep->hw_lock);
 }
 
 /* During a receive, the cur_rx points to the current incoming buffer.
@@ -575,6 +582,7 @@ static void fec_enet_rx(struct net_devic
 #endif
 
 	fep = netdev_priv(dev);
+	spin_lock_irq(&fep->hw_lock);
 	fecp = (volatile fec_t *)dev->base_addr;
 
 	/* First, grab all of the stats for the incoming packet.
@@ -683,6 +691,7 @@ rx_processing_done:
 	 */
 	fecp->fec_r_des_active = 0;
 #endif
+	spin_unlock_irq(&fep->hw_lock);
 }
 
 /* called from interrupt context */
@@ -695,11 +704,11 @@ static void fec_enet_mii(struct net_devi
 	mii_func *mii_func = NULL;
 
 	fep = netdev_priv(dev);
+	spin_lock_irq(&fep->mii_lock);
+
 	ep = fep->hwp;
 	mii_reg = ep->fec_mii_data;
 
-	spin_lock(&fep->lock);
-
 	if ((mip = mii_head) == NULL) {
 		printk("MII and no head!\n");
 		goto unlock;
@@ -716,7 +725,7 @@ static void fec_enet_mii(struct net_devi
 		ep->fec_mii_data = mip->mii_regval;
 
 unlock:
-	spin_unlock(&fep->lock);
+	spin_unlock_irq(&fep->mii_lock);
 	if (mii_func)
 		mii_func(mii_reg, dev);
 }
@@ -731,12 +740,11 @@ static int mii_queue(struct net_device *
 	/* Add PHY address to register command.
 	 */
 	fep = netdev_priv(dev);
-	regval |= fep->phy_addr << 23;
+	spin_lock_irqsave(&fep->mii_lock, flags);
 
+	regval |= fep->phy_addr << 23;
 	retval = 0;
 
-	spin_lock_irqsave(&fep->lock, flags);
-
 	if ((mip = mii_free) != NULL) {
 		mii_free = mip->mii_next;
 		mip->mii_regval = regval;
@@ -753,9 +761,8 @@ static int mii_queue(struct net_device *
 		retval = 1;
 	}
 
-	spin_unlock_irqrestore(&fep->lock, flags);
-
-	return (retval);
+	spin_unlock_irqrestore(&fep->mii_lock, flags);
+	return retval;
 }
 
 static void mii_do_cmd(struct net_device *dev, const phy_cmd_t *c)
@@ -2371,6 +2378,8 @@ int __init fec_enet_init(struct net_devi
 		return -ENOMEM;
 	}
 
+	spin_lock_init(&fep->hw_lock);
+	spin_lock_init(&fep->mii_lock);
 	/* Create an Ethernet device instance.
 	 */
 	fecp = (volatile fec_t *)fec_hw[index];

-- 


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 1/5] fec: kill warnings
  2008-04-02 20:58 ` [PATCH 1/5] fec: kill warnings Sebastian Siewior
@ 2008-04-03  6:30   ` Greg Ungerer
  2008-04-03  7:44     ` Sebastian Siewior
  0 siblings, 1 reply; 14+ messages in thread
From: Greg Ungerer @ 2008-04-03  6:30 UTC (permalink / raw)
  To: Sebastian Siewior; +Cc: Jeff Garzik, netdev, uclinux-dev

Hi Sebastian,

Sebastian Siewior wrote:
> linux-2.6-mk68/drivers/net/fec.c: In function 'fec_enet_module_init':
> linux-2.6-mk68/drivers/net/fec.c:2627: warning: unused variable 'j'
> linux-2.6-mk68/drivers/net/fec.c: At top level:
> linux-2.6-mk68/drivers/net/fec.c:2136: warning: 'mii_link_interrupt' defined but not used
> 
> Signed-off-by: Sebastian Siewior <bigeasy@linutronix.de>
> --- a/drivers/net/fec.c
> +++ b/drivers/net/fec.c
> @@ -67,6 +67,11 @@
>  #define	FEC_MAX_PORTS	1
>  #endif
>  
> +#if defined(CONFIG_M523x) || defined(CONFIG_M527x) || defined(CONFIG_M528x) || \
> +	defined(CONFIG_M520x) || defined(CONFIG_M532x)
> +#define DONT_NEED_mii_link_interrupt

I think using normal positive logic would be clearer, eg:

   HAVE_mii_link_interupt

Very few of the boards I have come across with the FEC silicon
actually hook up the MII interrupt, so the list of devices that
have it will be smaller.

Regards
Greg



> +#endif
> +
>  /*
>   * Define the fixed address of the FEC hardware.
>   */
> @@ -1222,7 +1227,7 @@ static phy_info_t const * const phy_info
>  };
>  
>  /* ------------------------------------------------------------------------- */
> -#if !defined(CONFIG_M532x)
> +#ifndef DONT_NEED_mii_link_interrupt
>  #ifdef CONFIG_RPXCLASSIC
>  static void
>  mii_link_interrupt(void *dev_id);
> @@ -2126,6 +2131,7 @@ mii_discover_phy(uint mii_reg, struct ne
>  
>  /* This interrupt occurs when the PHY detects a link change.
>  */
> +#ifndef DONT_NEED_mii_link_interrupt
>  #ifdef CONFIG_RPXCLASSIC
>  static void
>  mii_link_interrupt(void *dev_id)
> @@ -2148,6 +2154,7 @@ mii_link_interrupt(int irq, void * dev_i
>  
>  	return IRQ_HANDLED;
>  }
> +#endif
>  
>  static int
>  fec_enet_open(struct net_device *dev)
> @@ -2624,7 +2631,7 @@ fec_stop(struct net_device *dev)
>  static int __init fec_enet_module_init(void)
>  {
>  	struct net_device *dev;
> -	int i, j, err;
> +	int i, err;
>  	DECLARE_MAC_BUF(mac);
>  
>  	printk("FEC ENET Version 0.2\n");
> 

-- 
------------------------------------------------------------------------
Greg Ungerer  --  Chief Software Dude       EMAIL:     gerg@snapgear.com
Secure Computing Corporation                PHONE:       +61 7 3435 2888
825 Stanley St,                             FAX:         +61 7 3891 3630
Woolloongabba, QLD, 4102, Australia         WEB: http://www.SnapGear.com

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 5/5] m68knommu: dont allocate unused interrupts
  2008-04-02 20:58 ` [PATCH 5/5] m68knommu: dont allocate unused interrupts Sebastian Siewior
@ 2008-04-03  6:47   ` Greg Ungerer
  2008-04-03  7:43     ` Sebastian Siewior
  0 siblings, 1 reply; 14+ messages in thread
From: Greg Ungerer @ 2008-04-03  6:47 UTC (permalink / raw)
  To: Sebastian Siewior; +Cc: netdev, Sebastian Siewior, Jeff Garzik, uclinux-dev

Hi Sebastian,

Sebastian Siewior wrote:
> After fixing (hopefully) fixing locking I run into this:
> |irq 88: nobody cared (try booting with the "irqpoll" option)
> |Stack from 00214b74:
> |        00214b88 00047940 00179b88 00046c36 00179b88 00214bc8 00047b20 00000058
> |        00179b88 00000000 00000058 00179bb8 002cdf40 001415ba 00242000 0014163e
> |        00179b88 00046c36 0014163e 000479a6 00179b88 00214bfc 00046da8 00000058
> |        00179b88 00000000 00000000 00241c00 00247484 40001000 002473e0 002cf080
> |        00247000 002334ac 00214c0c 00020a56 00000058 002cf088 00214c58 000238a6
> |        00000058 00214c1c ffff9c00 002cf088 00241c00 00247484 40001000 00214000
> |Call Trace:
> | [00047940] __report_bad_irq+0x32/0x98
> | [00047b20] note_interrupt+0x17a/0x28e
> | [00046da8] __do_IRQ+0xe4/0x13a
> | [00020a56] do_IRQ+0x26/0x3c
> | [000238a6] inthandler+0x6a/0x74
> | [000c7da0] fec_enet_start_xmit+0xc0/0x154
> | [000ef11e] dev_hard_start_xmit+0x152/0x268
> | [000fcba4] __qdisc_run+0x158/0x1e0
> | [000f1cb6] dev_queue_xmit+0x218/0x2de
> | [0010a284] ip_finish_output+0xe8/0x2c4
> | [0010a508] ip_output+0x7a/0x86
> | [001097bc] ip_push_pending_frames+0x1d4/0x3bc
> | [00129d5e] icmp_push_reply+0xda/0x106
> | [00129f40] icmp_reply+0x11c/0x1e4
> | [0012a49a] icmp_echo+0x4a/0x50
> | [0012a166] icmp_rcv+0x15e/0x174
> | [00105e7c] ip_local_deliver+0xac/0x16a
> | [001061ae] ip_rcv+0x274/0x4b6
> | [000eeb4e] netif_receive_skb+0x166/0x232
> | [000f1926] process_backlog+0x74/0x104
> | [000f13d4] net_rx_action+0xac/0x188
> | [0002e2b0] __do_softirq+0x84/0xae
> | [0002e316] do_softirq+0x3c/0x40
> | [0002e664] ksoftirqd+0x66/0xf0
> | [0003cae2] kthread+0x64/0x80
> | [00020ce8] kernel_thread+0x2a/0x3a
> |
> |handlers:
> |[<000c710c>] (fec_enet_interrupt+0x0/0x426)
> |Disabling IRQ #88
> 
> This is because we register & enable way more interrupt sources than we
> actually handle. FEC_ENET_RXF (packet received), FEC_ENET_TXF (packet
> trasmitted) and FEC_ENET_MII (mii command done) are handled by the ISR.
> In my case FEC_ENET_RXB caused this because it was not handled, registered and
> rarely the only flag in the status reg. Registering an interrupt source without
> enabling it is also pointless.
> This patch removes them all except the three that are handled by the isr.

After the last discussions on uclinux-dev about this I have
a patch virtualy identical to this prepared for inclusion
in the 2.6.26 merge window.

Regards
Greg



> Signed-off-by: Sebastian Siewior <sebastian@linutronix.de>
> --- a/drivers/net/fec.c
> +++ b/drivers/net/fec.c
> @@ -1257,12 +1257,15 @@ static void fec_request_intrs(struct net
>  		unsigned short irq;
>  		irq_handler_t handler;
>  	} *idp, id[] = {
> -		{
> -		"fec(RX)", 86, fec_enet_interrupt}, {
> -		"fec(TX)", 87, fec_enet_interrupt}, {
> -		"fec(OTHER)", 88, fec_enet_interrupt}, {
> -		"fec(MII)", 66, mii_link_interrupt}, {
> -	NULL},};
> +		/*
> +		 * Available but not allocated because not handled:
> +		 * fec(OTHER) 88
> +		 */
> +		{ "fec(RX)", 86, fec_enet_interrupt},
> +		{ "fec(TX)", 87, fec_enet_interrupt},
> +		{ "fec(MII)", 66, mii_link_interrupt},
> +		{ NULL, 0 },
> +	};
>  
>  	/* Setup interrupt handlers. */
>  	for (idp = id; idp->name; idp++) {
> @@ -1381,21 +1384,17 @@ static void fec_request_intrs(struct net
>  		char *name;
>  		unsigned short irq;
>  	} *idp, id[] = {
> -		{
> -		"fec(TXF)", 23}, {
> -		"fec(TXB)", 24}, {
> -		"fec(TXFIFO)", 25}, {
> -		"fec(TXCR)", 26}, {
> -		"fec(RXF)", 27}, {
> -		"fec(RXB)", 28}, {
> -		"fec(MII)", 29}, {
> -		"fec(LC)", 30}, {
> -		"fec(HBERR)", 31}, {
> -		"fec(GRA)", 32}, {
> -		"fec(EBERR)", 33}, {
> -		"fec(BABT)", 34}, {
> -		"fec(BABR)", 35}, {
> -	NULL},};
> +		/*
> +		 * Available but not allocated because not handled:
> +		 * fec(TXB) 24, fec(TXFIFO) 25, fec(TXCR) 26, fec(RXB) 28,
> +		 * fec(LC) 30, fec(HBERR) 31, fec(GRA) 32, fec(EBERR) 33,
> +		 * fec(BABT) 34, fec(BABR), 35
> +		 */
> +		{ "fec(TXF)", 23},
> +		{ "fec(RXF)", 27},
> +		{ "fec(MII)", 29},
> +		{ NULL, 0},
> +	};
>  
>  	fep = netdev_priv(dev);
>  	b = (fep->index) ? 128 : 64;
> @@ -1559,21 +1558,17 @@ static void fec_request_intrs(struct net
>  		char *name;
>  		unsigned short irq;
>  	} *idp, id[] = {
> -		{
> -		"fec(TXF)", 23}, {
> -		"fec(TXB)", 24}, {
> -		"fec(TXFIFO)", 25}, {
> -		"fec(TXCR)", 26}, {
> -		"fec(RXF)", 27}, {
> -		"fec(RXB)", 28}, {
> -		"fec(MII)", 29}, {
> -		"fec(LC)", 30}, {
> -		"fec(HBERR)", 31}, {
> -		"fec(GRA)", 32}, {
> -		"fec(EBERR)", 33}, {
> -		"fec(BABT)", 34}, {
> -		"fec(BABR)", 35}, {
> -	NULL},};
> +		/*
> +		 * Available but not allocated because not handled:
> +		 * fec(TXB) 24, fec(TXFIFO) 25, fec(TXCR) 26, fec(RXB) 28,
> +		 * fec(LC) 30, fec(HBERR) 31, fec(GRA) 32, fec(EBERR) 33,
> +		 * fec(BABT) 34, fec(BABR) 35
> +		 */
> +		{ "fec(TXF)", 23},
> +		{ "fec(RXF)", 27},
> +		{ "fec(MII)", 29},
> +		{ NULL, 0},
> +	};
>  
>  	fep = netdev_priv(dev);
>  	b = 64 + 13;
> @@ -1693,21 +1688,17 @@ static void fec_request_intrs(struct net
>  		char *name;
>  		unsigned short irq;
>  	} *idp, id[] = {
> -		{
> -		"fec(TXF)", 36}, {
> -		"fec(TXB)", 37}, {
> -		"fec(TXFIFO)", 38}, {
> -		"fec(TXCR)", 39}, {
> -		"fec(RXF)", 40}, {
> -		"fec(RXB)", 41}, {
> -		"fec(MII)", 42}, {
> -		"fec(LC)", 43}, {
> -		"fec(HBERR)", 44}, {
> -		"fec(GRA)", 45}, {
> -		"fec(EBERR)", 46}, {
> -		"fec(BABT)", 47}, {
> -		"fec(BABR)", 48}, {
> -	NULL},};
> +		/*
> +		 * Available but not allocated because not handled:
> +		 * fec(TXB) 37, fec(TXFIFO) 38, fec(TXCR) 39, fec(RXB) 41,
> +		 * fec(LC) 43, fec(HBERR) 44, fec(GRA) 45, fec(EBERR) 46,
> +		 * fec(BABT) 47, fec(BABR) 48
> +		 */
> +		{ "fec(TXF)", 36},
> +		{ "fec(RXF)", 40},
> +		{ "fec(MII)", 42},
> +		{ NULL, 0},
> +	};
>  
>  	fep = netdev_priv(dev);
>  	b = (fep->index) ? 128 : 64;
> @@ -2503,8 +2494,7 @@ int __init fec_enet_init(struct net_devi
>  
>  	/* Clear and enable interrupts */
>  	fecp->fec_ievent = 0xffc00000;
> -	fecp->fec_imask = (FEC_ENET_TXF | FEC_ENET_TXB |
> -			   FEC_ENET_RXF | FEC_ENET_RXB | FEC_ENET_MII);
> +	fecp->fec_imask = (FEC_ENET_TXF | FEC_ENET_RXF | FEC_ENET_MII);
>  
>  	/* Queue up command to detect the PHY and initialize the
>  	 * remainder of the interface.
> @@ -2630,8 +2620,7 @@ static void fec_restart(struct net_devic
>  
>  	/* Enable interrupts we wish to service.
>  	 */
> -	fecp->fec_imask = (FEC_ENET_TXF | FEC_ENET_TXB |
> -			   FEC_ENET_RXF | FEC_ENET_RXB | FEC_ENET_MII);
> +	fecp->fec_imask = (FEC_ENET_TXF | FEC_ENET_RXF | FEC_ENET_MII);
>  }
>  
>  static void fec_stop(struct net_device *dev)
> 

-- 
------------------------------------------------------------------------
Greg Ungerer  --  Chief Software Dude       EMAIL:     gerg@snapgear.com
Secure Computing Corporation                PHONE:       +61 7 3435 2888
825 Stanley St,                             FAX:         +61 7 3891 3630
Woolloongabba, QLD, 4102, Australia         WEB: http://www.SnapGear.com
_______________________________________________
uClinux-dev mailing list
uClinux-dev@uclinux.org
http://mailman.uclinux.org/mailman/listinfo/uclinux-dev
This message was resent by uclinux-dev@uclinux.org
To unsubscribe see:
http://mailman.uclinux.org/mailman/options/uclinux-dev

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 0/5] fixup locking on m68knommu fec
  2008-04-02 20:58 [PATCH 0/5] fixup locking on m68knommu fec Sebastian Siewior
                   ` (4 preceding siblings ...)
  2008-04-02 20:58 ` [PATCH 1/5] fec: kill warnings Sebastian Siewior
@ 2008-04-03  6:54 ` Greg Ungerer
  2008-04-03  7:52   ` Sebastian Siewior
  5 siblings, 1 reply; 14+ messages in thread
From: Greg Ungerer @ 2008-04-03  6:54 UTC (permalink / raw)
  To: Sebastian Siewior; +Cc: Jeff Garzik, netdev, uclinux-dev

Hi Sebastian,

Sebastian Siewior wrote:
> This series basically fixes my locking problem. We have here:
> #1 the old one which removes some undefined vars.
> #2 cleans the file with lident. I had trouble reading the code...
> #3 type def a function pointer so we don't have the long defines
>    and move the callback after releasing the lock.
> #4 This one fixes the locking I guess. My mcf5235 did not race anymore
>    after that one. I saw 0a504779d while forming the patch so I guess
>    we could revert that one, Greg?

Yes, certainly we can.
I'd like to do some testing on this as well :-)


> #5 removes the registration of interrupt handlers & enabling interrupt
>    sources that are not handled. I stepped into this after I thought that
>    it is over :) Greg, Should we also remove that part where we enable
>    the irq controller (I though request_irq() is doing that).

Currently it doesn't. The main sticking point is what to do
with the hardware based priority setting logic. We don't really
rely on it, but they need to be set to sane values.

Need to expand the interrupt controller setup code some more
before we can take that out.

Regards
Greg



------------------------------------------------------------------------
Greg Ungerer  --  Chief Software Dude       EMAIL:     gerg@snapgear.com
Secure Computing Corporation                PHONE:       +61 7 3435 2888
825 Stanley St,                             FAX:         +61 7 3891 3630
Woolloongabba, QLD, 4102, Australia         WEB: http://www.SnapGear.com

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 5/5] m68knommu: dont allocate unused interrupts
  2008-04-03  6:47   ` Greg Ungerer
@ 2008-04-03  7:43     ` Sebastian Siewior
  2008-04-03  9:34       ` Greg Ungerer
  0 siblings, 1 reply; 14+ messages in thread
From: Sebastian Siewior @ 2008-04-03  7:43 UTC (permalink / raw)
  To: Greg Ungerer; +Cc: Jeff Garzik, netdev, uclinux-dev

* Greg Ungerer | 2008-04-03 16:47:58 [+1000]:

> Hi Sebastian,
Hi Greg,

>> This is because we register & enable way more interrupt sources than we
>> actually handle. FEC_ENET_RXF (packet received), FEC_ENET_TXF (packet
>> trasmitted) and FEC_ENET_MII (mii command done) are handled by the ISR.
>> In my case FEC_ENET_RXB caused this because it was not handled, registered 
>> and
>> rarely the only flag in the status reg. Registering an interrupt source 
>> without
>> enabling it is also pointless.
>> This patch removes them all except the three that are handled by the isr.
>
> After the last discussions on uclinux-dev about this I have
> a patch virtualy identical to this prepared for inclusion
> in the 2.6.26 merge window.

So you drop this one. Great. That's why I asked you about a devel tree.
The latest uclinux patch is linux-2.6.24-uc0.patch.gz which does not
contain such a fix. The latest dist snapshot patch is from 2008-03-05
and is about 147 MiB. I took a look at the diffstat
(9.67 KB/s) - `uClinux-dist-20070130-20080305.diffstat' saved
and yes, there are some modifications to fec.c but 10KiB/sec take me
forever. I stared leeching it. The CVS [1] has no linux-2.6 directory.
Therefore I assumed that is the latest one.
I've been browsing the mailing list archive and did not find anything
close to it (I found multicast discussions for instance).

Could please Cc me in future on your m68k patches? I would setup a git
tree and feed them there. Alternatively I would be pleased if you could
give me a pointer to your quilt series since I'm obviously not clever
enough to find it.

[1] http://cvs.uclinux.org/cgi-bin/cvsweb.cgi/uClinux-dist/

> Regards
> Greg

Sebastian

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 1/5] fec: kill warnings
  2008-04-03  6:30   ` Greg Ungerer
@ 2008-04-03  7:44     ` Sebastian Siewior
  2008-04-03  9:30       ` Greg Ungerer
  0 siblings, 1 reply; 14+ messages in thread
From: Sebastian Siewior @ 2008-04-03  7:44 UTC (permalink / raw)
  To: Greg Ungerer; +Cc: Jeff Garzik, netdev, uclinux-dev

* Greg Ungerer | 2008-04-03 16:30:48 [+1000]:

> Hi Sebastian,
>
> Sebastian Siewior wrote:
>> linux-2.6-mk68/drivers/net/fec.c: In function 'fec_enet_module_init':
>> linux-2.6-mk68/drivers/net/fec.c:2627: warning: unused variable 'j'
>> linux-2.6-mk68/drivers/net/fec.c: At top level:
>> linux-2.6-mk68/drivers/net/fec.c:2136: warning: 'mii_link_interrupt' 
>> defined but not used
>> Signed-off-by: Sebastian Siewior <bigeasy@linutronix.de>
>> --- a/drivers/net/fec.c
>> +++ b/drivers/net/fec.c
>> @@ -67,6 +67,11 @@
>>  #define	FEC_MAX_PORTS	1
>>  #endif
>>  +#if defined(CONFIG_M523x) || defined(CONFIG_M527x) || 
>> defined(CONFIG_M528x) || \
>> +	defined(CONFIG_M520x) || defined(CONFIG_M532x)
>> +#define DONT_NEED_mii_link_interrupt
>
> I think using normal positive logic would be clearer, eg:
>
>   HAVE_mii_link_interupt
Will do it.

> Very few of the boards I have come across with the FEC silicon
> actually hook up the MII interrupt, so the list of devices that
> have it will be smaller.
This doesn't mean we get rid of it, does it? :)

>
> Regards
> Greg
Sebastian

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 0/5] fixup locking on m68knommu fec
  2008-04-03  6:54 ` [PATCH 0/5] fixup locking on m68knommu fec Greg Ungerer
@ 2008-04-03  7:52   ` Sebastian Siewior
  0 siblings, 0 replies; 14+ messages in thread
From: Sebastian Siewior @ 2008-04-03  7:52 UTC (permalink / raw)
  To: Greg Ungerer; +Cc: Jeff Garzik, netdev, uclinux-dev

* Greg Ungerer | 2008-04-03 16:54:06 [+1000]:

> Hi Sebastian,
Hi Greg,

> Sebastian Siewior wrote:
>> This series basically fixes my locking problem. We have here:
>> #1 the old one which removes some undefined vars.
>> #2 cleans the file with lident. I had trouble reading the code...
>> #3 type def a function pointer so we don't have the long defines
>>    and move the callback after releasing the lock.
>> #4 This one fixes the locking I guess. My mcf5235 did not race anymore
>>    after that one. I saw 0a504779d while forming the patch so I guess
>>    we could revert that one, Greg?
>
> Yes, certainly we can.
> I'd like to do some testing on this as well :-)
No problem. I did ping -f from one box and a single ping from another
box for like an hour.
The only thing I don't really like is that do { } while (int flags) in
the ISR. Is the interrupt level or edge? /proc/interrupts wasn't clear on
this if I remember correctly.

>> #5 removes the registration of interrupt handlers & enabling interrupt
>>    sources that are not handled. I stepped into this after I thought that
>>    it is over :) Greg, Should we also remove that part where we enable
>>    the irq controller (I though request_irq() is doing that).
>
> Currently it doesn't. The main sticking point is what to do
> with the hardware based priority setting logic. We don't really
> rely on it, but they need to be set to sane values.
>
> Need to expand the interrupt controller setup code some more
> before we can take that out.
Okey.

> Regards
> Greg

Sebastian

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 1/5] fec: kill warnings
  2008-04-03  7:44     ` Sebastian Siewior
@ 2008-04-03  9:30       ` Greg Ungerer
  0 siblings, 0 replies; 14+ messages in thread
From: Greg Ungerer @ 2008-04-03  9:30 UTC (permalink / raw)
  To: Sebastian Siewior; +Cc: Jeff Garzik, netdev, uclinux-dev

Sebastian Siewior wrote:
> * Greg Ungerer | 2008-04-03 16:30:48 [+1000]:
> 
>> Hi Sebastian,
>>
>> Sebastian Siewior wrote:
>>> linux-2.6-mk68/drivers/net/fec.c: In function 'fec_enet_module_init':
>>> linux-2.6-mk68/drivers/net/fec.c:2627: warning: unused variable 'j'
>>> linux-2.6-mk68/drivers/net/fec.c: At top level:
>>> linux-2.6-mk68/drivers/net/fec.c:2136: warning: 'mii_link_interrupt' 
>>> defined but not used
>>> Signed-off-by: Sebastian Siewior <bigeasy@linutronix.de>
>>> --- a/drivers/net/fec.c
>>> +++ b/drivers/net/fec.c
>>> @@ -67,6 +67,11 @@
>>>  #define	FEC_MAX_PORTS	1
>>>  #endif
>>>  +#if defined(CONFIG_M523x) || defined(CONFIG_M527x) || 
>>> defined(CONFIG_M528x) || \
>>> +	defined(CONFIG_M520x) || defined(CONFIG_M532x)
>>> +#define DONT_NEED_mii_link_interrupt
>> I think using normal positive logic would be clearer, eg:
>>
>>   HAVE_mii_link_interupt
> Will do it.
> 
>> Very few of the boards I have come across with the FEC silicon
>> actually hook up the MII interrupt, so the list of devices that
>> have it will be smaller.
> This doesn't mean we get rid of it, does it? :)

No, no. It nice for those that do it.

Regards
Greg


------------------------------------------------------------------------
Greg Ungerer  --  Chief Software Dude       EMAIL:     gerg@snapgear.com
SnapGear -- a Secure Computing Company      PHONE:       +61 7 3435 2888
825 Stanley St,                             FAX:         +61 7 3891 3630
Woolloongabba, QLD, 4102, Australia         WEB: http://www.SnapGear.com

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 5/5] m68knommu: dont allocate unused interrupts
  2008-04-03  7:43     ` Sebastian Siewior
@ 2008-04-03  9:34       ` Greg Ungerer
  0 siblings, 0 replies; 14+ messages in thread
From: Greg Ungerer @ 2008-04-03  9:34 UTC (permalink / raw)
  To: Sebastian Siewior; +Cc: Jeff Garzik, netdev, uclinux-dev

Sebastian Siewior wrote:
> * Greg Ungerer | 2008-04-03 16:47:58 [+1000]:
>>> This is because we register & enable way more interrupt sources than we
>>> actually handle. FEC_ENET_RXF (packet received), FEC_ENET_TXF (packet
>>> trasmitted) and FEC_ENET_MII (mii command done) are handled by the ISR.
>>> In my case FEC_ENET_RXB caused this because it was not handled, registered 
>>> and
>>> rarely the only flag in the status reg. Registering an interrupt source 
>>> without
>>> enabling it is also pointless.
>>> This patch removes them all except the three that are handled by the isr.
>> After the last discussions on uclinux-dev about this I have
>> a patch virtualy identical to this prepared for inclusion
>> in the 2.6.26 merge window.
> 
> So you drop this one. Great. That's why I asked you about a devel tree.
> The latest uclinux patch is linux-2.6.24-uc0.patch.gz which does not
> contain such a fix. The latest dist snapshot patch is from 2008-03-05
> and is about 147 MiB. I took a look at the diffstat
> (9.67 KB/s) - `uClinux-dist-20070130-20080305.diffstat' saved
> and yes, there are some modifications to fec.c but 10KiB/sec take me
> forever. I stared leeching it. The CVS [1] has no linux-2.6 directory.
> Therefore I assumed that is the latest one.
> I've been browsing the mailing list archive and did not find anything
> close to it (I found multicast discussions for instance).
> 
> Could please Cc me in future on your m68k patches? I would setup a git
> tree and feed them there. Alternatively I would be pleased if you could
> give me a pointer to your quilt series since I'm obviously not clever
> enough to find it.

I don't keep a quilt series or a git tree currently.

I release periodically in the form of the -uc patch series.

Regards
Greg


> [1] http://cvs.uclinux.org/cgi-bin/cvsweb.cgi/uClinux-dist/
> 
>> Regards
>> Greg
> 
> Sebastian
> 


-- 
------------------------------------------------------------------------
Greg Ungerer  --  Chief Software Dude       EMAIL:     gerg@snapgear.com
SnapGear -- a Secure Computing Company      PHONE:       +61 7 3435 2888
825 Stanley St,                             FAX:         +61 7 3891 3630
Woolloongabba, QLD, 4102, Australia         WEB: http://www.SnapGear.com

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2008-04-03  9:34 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-04-02 20:58 [PATCH 0/5] fixup locking on m68knommu fec Sebastian Siewior
2008-04-02 20:58 ` [PATCH 3/5] m68knommu: fec typedef a function Sebastian Siewior
2008-04-02 20:58 ` [PATCH 2/5] m68knommu: fec: small coding style cleanup Sebastian Siewior
2008-04-02 20:58 ` [PATCH 5/5] m68knommu: dont allocate unused interrupts Sebastian Siewior
2008-04-03  6:47   ` Greg Ungerer
2008-04-03  7:43     ` Sebastian Siewior
2008-04-03  9:34       ` Greg Ungerer
2008-04-02 20:58 ` [PATCH 4/5] m68knommu: fec fixup locking Sebastian Siewior
2008-04-02 20:58 ` [PATCH 1/5] fec: kill warnings Sebastian Siewior
2008-04-03  6:30   ` Greg Ungerer
2008-04-03  7:44     ` Sebastian Siewior
2008-04-03  9:30       ` Greg Ungerer
2008-04-03  6:54 ` [PATCH 0/5] fixup locking on m68knommu fec Greg Ungerer
2008-04-03  7:52   ` Sebastian Siewior

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).