diff options
Diffstat (limited to 'drivers/net/ethernet/ibm/emac')
| -rw-r--r-- | drivers/net/ethernet/ibm/emac/core.c | 6 | ||||
| -rw-r--r-- | drivers/net/ethernet/ibm/emac/core.h | 1 | ||||
| -rw-r--r-- | drivers/net/ethernet/ibm/emac/debug.h | 14 | ||||
| -rw-r--r-- | drivers/net/ethernet/ibm/emac/mal.c | 22 | ||||
| -rw-r--r-- | drivers/net/ethernet/ibm/emac/mal.h | 20 | ||||
| -rw-r--r-- | drivers/net/ethernet/ibm/emac/rgmii.c | 4 | ||||
| -rw-r--r-- | drivers/net/ethernet/ibm/emac/rgmii.h | 18 | ||||
| -rw-r--r-- | drivers/net/ethernet/ibm/emac/tah.c | 1 | ||||
| -rw-r--r-- | drivers/net/ethernet/ibm/emac/tah.h | 14 | ||||
| -rw-r--r-- | drivers/net/ethernet/ibm/emac/zmii.c | 1 | ||||
| -rw-r--r-- | drivers/net/ethernet/ibm/emac/zmii.h | 18 | 
11 files changed, 60 insertions, 59 deletions
diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c index 6b5c7222342..87bd953cc2e 100644 --- a/drivers/net/ethernet/ibm/emac/core.c +++ b/drivers/net/ethernet/ibm/emac/core.c @@ -39,6 +39,8 @@  #include <linux/bitops.h>  #include <linux/workqueue.h>  #include <linux/of.h> +#include <linux/of_address.h> +#include <linux/of_irq.h>  #include <linux/of_net.h>  #include <linux/slab.h> @@ -2676,7 +2678,7 @@ static int emac_init_config(struct emac_instance *dev)  		       np->full_name);  		return -ENXIO;  	} -	memcpy(dev->ndev->dev_addr, p, 6); +	memcpy(dev->ndev->dev_addr, p, ETH_ALEN);  	/* IAHT and GAHT filter parameterization */  	if (emac_has_feature(dev, EMAC_FTR_EMAC4SYNC)) { @@ -2877,7 +2879,7 @@ static int emac_probe(struct platform_device *ofdev)  		dev->commac.ops = &emac_commac_sg_ops;  	} else  		ndev->netdev_ops = &emac_netdev_ops; -	SET_ETHTOOL_OPS(ndev, &emac_ethtool_ops); +	ndev->ethtool_ops = &emac_ethtool_ops;  	netif_carrier_off(ndev); diff --git a/drivers/net/ethernet/ibm/emac/core.h b/drivers/net/ethernet/ibm/emac/core.h index 70074792bde..67f342a9f65 100644 --- a/drivers/net/ethernet/ibm/emac/core.h +++ b/drivers/net/ethernet/ibm/emac/core.h @@ -26,7 +26,6 @@  #define __IBM_NEWEMAC_CORE_H  #include <linux/module.h> -#include <linux/init.h>  #include <linux/list.h>  #include <linux/kernel.h>  #include <linux/interrupt.h> diff --git a/drivers/net/ethernet/ibm/emac/debug.h b/drivers/net/ethernet/ibm/emac/debug.h index 59a92d5870b..9c45efe4c8f 100644 --- a/drivers/net/ethernet/ibm/emac/debug.h +++ b/drivers/net/ethernet/ibm/emac/debug.h @@ -29,13 +29,13 @@  struct emac_instance;  struct mal_instance; -extern void emac_dbg_register(struct emac_instance *dev); -extern void emac_dbg_unregister(struct emac_instance *dev); -extern void mal_dbg_register(struct mal_instance *mal); -extern void mal_dbg_unregister(struct mal_instance *mal); -extern int emac_init_debug(void) __init; -extern void emac_fini_debug(void) __exit; -extern void emac_dbg_dump_all(void); +void emac_dbg_register(struct emac_instance *dev); +void emac_dbg_unregister(struct emac_instance *dev); +void mal_dbg_register(struct mal_instance *mal); +void mal_dbg_unregister(struct mal_instance *mal); +int emac_init_debug(void) __init; +void emac_fini_debug(void) __exit; +void emac_dbg_dump_all(void);  # define DBG_LEVEL		1 diff --git a/drivers/net/ethernet/ibm/emac/mal.c b/drivers/net/ethernet/ibm/emac/mal.c index dac564c2544..63eb959a28a 100644 --- a/drivers/net/ethernet/ibm/emac/mal.c +++ b/drivers/net/ethernet/ibm/emac/mal.c @@ -27,6 +27,7 @@  #include <linux/delay.h>  #include <linux/slab.h> +#include <linux/of_irq.h>  #include "core.h"  #include <asm/dcr-regs.h> @@ -263,7 +264,9 @@ static inline void mal_schedule_poll(struct mal_instance *mal)  {  	if (likely(napi_schedule_prep(&mal->napi))) {  		MAL_DBG2(mal, "schedule_poll" NL); +		spin_lock(&mal->lock);  		mal_disable_eob_irq(mal); +		spin_unlock(&mal->lock);  		__napi_schedule(&mal->napi);  	} else  		MAL_DBG2(mal, "already in poll" NL); @@ -442,15 +445,13 @@ static int mal_poll(struct napi_struct *napi, int budget)  		if (unlikely(mc->ops->peek_rx(mc->dev) ||  			     test_bit(MAL_COMMAC_RX_STOPPED, &mc->flags))) {  			MAL_DBG2(mal, "rotting packet" NL); -			if (napi_reschedule(napi)) -				mal_disable_eob_irq(mal); -			else -				MAL_DBG2(mal, "already in poll list" NL); - -			if (budget > 0) -				goto again; -			else +			if (!napi_reschedule(napi))  				goto more_work; + +			spin_lock_irqsave(&mal->lock, flags); +			mal_disable_eob_irq(mal); +			spin_unlock_irqrestore(&mal->lock, flags); +			goto again;  		}  		mc->ops->poll_tx(mc->dev);  	} @@ -681,10 +682,7 @@ static int mal_probe(struct platform_device *ofdev)  		goto fail6;  	/* Enable all MAL SERR interrupt sources */ -	if (mal->version == 2) -		set_mal_dcrn(mal, MAL_IER, MAL2_IER_EVENTS); -	else -		set_mal_dcrn(mal, MAL_IER, MAL1_IER_EVENTS); +	set_mal_dcrn(mal, MAL_IER, MAL_IER_EVENTS);  	/* Enable EOB interrupt */  	mal_enable_eob_irq(mal); diff --git a/drivers/net/ethernet/ibm/emac/mal.h b/drivers/net/ethernet/ibm/emac/mal.h index e431a32e3d6..eeade2ea833 100644 --- a/drivers/net/ethernet/ibm/emac/mal.h +++ b/drivers/net/ethernet/ibm/emac/mal.h @@ -95,24 +95,20 @@  #define MAL_IER			0x02 +/* MAL IER bits */  #define   MAL_IER_DE		0x00000010  #define   MAL_IER_OTE		0x00000004  #define   MAL_IER_OE		0x00000002  #define   MAL_IER_PE		0x00000001 -/* MAL V1 IER bits */ -#define   MAL1_IER_NWE		0x00000008 -#define   MAL1_IER_SOC_EVENTS	MAL1_IER_NWE -#define   MAL1_IER_EVENTS	(MAL1_IER_SOC_EVENTS | MAL_IER_DE | \ -				 MAL_IER_OTE | MAL_IER_OE | MAL_IER_PE) -/* MAL V2 IER bits */ -#define   MAL2_IER_PT		0x00000080 -#define   MAL2_IER_PRE		0x00000040 -#define   MAL2_IER_PWE		0x00000020 -#define   MAL2_IER_SOC_EVENTS	(MAL2_IER_PT | MAL2_IER_PRE | MAL2_IER_PWE) -#define   MAL2_IER_EVENTS	(MAL2_IER_SOC_EVENTS | MAL_IER_DE | \ -				 MAL_IER_OTE | MAL_IER_OE | MAL_IER_PE) +/* PLB read/write/timeout errors */ +#define   MAL_IER_PTE		0x00000080 +#define   MAL_IER_PRE		0x00000040 +#define   MAL_IER_PWE		0x00000020 +#define   MAL_IER_SOC_EVENTS	(MAL_IER_PTE | MAL_IER_PRE | MAL_IER_PWE) +#define   MAL_IER_EVENTS	(MAL_IER_SOC_EVENTS | MAL_IER_DE | \ +				 MAL_IER_OTE | MAL_IER_OE | MAL_IER_PE)  #define MAL_TXCASR		0x04  #define MAL_TXCARR		0x05 diff --git a/drivers/net/ethernet/ibm/emac/rgmii.c b/drivers/net/ethernet/ibm/emac/rgmii.c index c47e23d6eea..a01182cce96 100644 --- a/drivers/net/ethernet/ibm/emac/rgmii.c +++ b/drivers/net/ethernet/ibm/emac/rgmii.c @@ -24,6 +24,7 @@  #include <linux/slab.h>  #include <linux/kernel.h>  #include <linux/ethtool.h> +#include <linux/of_address.h>  #include <asm/io.h>  #include "emac.h" @@ -44,6 +45,7 @@  /* RGMIIx_SSR */  #define RGMII_SSR_MASK(idx)	(0x7 << ((idx) * 8)) +#define RGMII_SSR_10(idx)	(0x1 << ((idx) * 8))  #define RGMII_SSR_100(idx)	(0x2 << ((idx) * 8))  #define RGMII_SSR_1000(idx)	(0x4 << ((idx) * 8)) @@ -138,6 +140,8 @@ void rgmii_set_speed(struct platform_device *ofdev, int input, int speed)  		ssr |= RGMII_SSR_1000(input);  	else if (speed == SPEED_100)  		ssr |= RGMII_SSR_100(input); +	else if (speed == SPEED_10) +		ssr |= RGMII_SSR_10(input);  	out_be32(&p->ssr, ssr); diff --git a/drivers/net/ethernet/ibm/emac/rgmii.h b/drivers/net/ethernet/ibm/emac/rgmii.h index 668bceeff4a..d4f1374d190 100644 --- a/drivers/net/ethernet/ibm/emac/rgmii.h +++ b/drivers/net/ethernet/ibm/emac/rgmii.h @@ -56,15 +56,15 @@ struct rgmii_instance {  #ifdef CONFIG_IBM_EMAC_RGMII -extern int rgmii_init(void); -extern void rgmii_exit(void); -extern int rgmii_attach(struct platform_device *ofdev, int input, int mode); -extern void rgmii_detach(struct platform_device *ofdev, int input); -extern void rgmii_get_mdio(struct platform_device *ofdev, int input); -extern void rgmii_put_mdio(struct platform_device *ofdev, int input); -extern void rgmii_set_speed(struct platform_device *ofdev, int input, int speed); -extern int rgmii_get_regs_len(struct platform_device *ofdev); -extern void *rgmii_dump_regs(struct platform_device *ofdev, void *buf); +int rgmii_init(void); +void rgmii_exit(void); +int rgmii_attach(struct platform_device *ofdev, int input, int mode); +void rgmii_detach(struct platform_device *ofdev, int input); +void rgmii_get_mdio(struct platform_device *ofdev, int input); +void rgmii_put_mdio(struct platform_device *ofdev, int input); +void rgmii_set_speed(struct platform_device *ofdev, int input, int speed); +int rgmii_get_regs_len(struct platform_device *ofdev); +void *rgmii_dump_regs(struct platform_device *ofdev, void *buf);  #else diff --git a/drivers/net/ethernet/ibm/emac/tah.c b/drivers/net/ethernet/ibm/emac/tah.c index c231a4a32c4..9f24769ed82 100644 --- a/drivers/net/ethernet/ibm/emac/tah.c +++ b/drivers/net/ethernet/ibm/emac/tah.c @@ -18,6 +18,7 @@   * Free Software Foundation;  either version 2 of the  License, or (at your   * option) any later version.   */ +#include <linux/of_address.h>  #include <asm/io.h>  #include "emac.h" diff --git a/drivers/net/ethernet/ibm/emac/tah.h b/drivers/net/ethernet/ibm/emac/tah.h index 350b7096a04..4d5f336f07b 100644 --- a/drivers/net/ethernet/ibm/emac/tah.h +++ b/drivers/net/ethernet/ibm/emac/tah.h @@ -72,13 +72,13 @@ struct tah_instance {  #ifdef CONFIG_IBM_EMAC_TAH -extern int tah_init(void); -extern void tah_exit(void); -extern int tah_attach(struct platform_device *ofdev, int channel); -extern void tah_detach(struct platform_device *ofdev, int channel); -extern void tah_reset(struct platform_device *ofdev); -extern int tah_get_regs_len(struct platform_device *ofdev); -extern void *tah_dump_regs(struct platform_device *ofdev, void *buf); +int tah_init(void); +void tah_exit(void); +int tah_attach(struct platform_device *ofdev, int channel); +void tah_detach(struct platform_device *ofdev, int channel); +void tah_reset(struct platform_device *ofdev); +int tah_get_regs_len(struct platform_device *ofdev); +void *tah_dump_regs(struct platform_device *ofdev, void *buf);  #else diff --git a/drivers/net/ethernet/ibm/emac/zmii.c b/drivers/net/ethernet/ibm/emac/zmii.c index 4cdf286f7ee..9ca67a38c06 100644 --- a/drivers/net/ethernet/ibm/emac/zmii.c +++ b/drivers/net/ethernet/ibm/emac/zmii.c @@ -24,6 +24,7 @@  #include <linux/slab.h>  #include <linux/kernel.h>  #include <linux/ethtool.h> +#include <linux/of_address.h>  #include <asm/io.h>  #include "emac.h" diff --git a/drivers/net/ethernet/ibm/emac/zmii.h b/drivers/net/ethernet/ibm/emac/zmii.h index 455bfb08549..0959c55b145 100644 --- a/drivers/net/ethernet/ibm/emac/zmii.h +++ b/drivers/net/ethernet/ibm/emac/zmii.h @@ -53,15 +53,15 @@ struct zmii_instance {  #ifdef CONFIG_IBM_EMAC_ZMII -extern int zmii_init(void); -extern void zmii_exit(void); -extern int zmii_attach(struct platform_device *ofdev, int input, int *mode); -extern void zmii_detach(struct platform_device *ofdev, int input); -extern void zmii_get_mdio(struct platform_device *ofdev, int input); -extern void zmii_put_mdio(struct platform_device *ofdev, int input); -extern void zmii_set_speed(struct platform_device *ofdev, int input, int speed); -extern int zmii_get_regs_len(struct platform_device *ocpdev); -extern void *zmii_dump_regs(struct platform_device *ofdev, void *buf); +int zmii_init(void); +void zmii_exit(void); +int zmii_attach(struct platform_device *ofdev, int input, int *mode); +void zmii_detach(struct platform_device *ofdev, int input); +void zmii_get_mdio(struct platform_device *ofdev, int input); +void zmii_put_mdio(struct platform_device *ofdev, int input); +void zmii_set_speed(struct platform_device *ofdev, int input, int speed); +int zmii_get_regs_len(struct platform_device *ocpdev); +void *zmii_dump_regs(struct platform_device *ofdev, void *buf);  #else  # define zmii_init()		0  | 
