Search
SailfishOS Open Build Service
>
Projects
>
home:sledge
:
beagle
>
kernel-adaptation-dm3730
> 0024-smsc911x-removed-spinlocks.patch
Log In
Username
Password
Cancel
Overview
Repositories
Revisions
Requests
Users
Advanced
Attributes
Meta
File 0024-smsc911x-removed-spinlocks.patch of Package kernel-adaptation-dm3730
From b36f5ebd04cc05d30c1be965a07f70045d14c610 Mon Sep 17 00:00:00 2001 From: MediStream-Devel-VM <info@berlinux-solutions.de> Date: Mon, 18 Mar 2013 10:34:25 +0100 Subject: [PATCH] smsc911x: -removed spinlocks --- drivers/net/ethernet/smsc/smsc911x.c | 113 ++++++++++----------------------- 1 files changed, 34 insertions(+), 79 deletions(-) diff --git a/drivers/net/ethernet/smsc/smsc911x.c b/drivers/net/ethernet/smsc/smsc911x.c index b146030..39c8fe3 100644 --- a/drivers/net/ethernet/smsc/smsc911x.c +++ b/drivers/net/ethernet/smsc/smsc911x.c @@ -107,9 +107,6 @@ struct smsc911x_data { */ spinlock_t mac_lock; - /* spinlock to ensure register accesses are serialised */ - spinlock_t dev_lock; - struct phy_device *phy_dev; struct mii_bus *mii_bus; int phy_irq[PHY_MAX_ADDR]; @@ -149,7 +146,7 @@ struct smsc911x_data { /* Easy access to information */ #define __smsc_shift(pdata, reg) ((reg) << ((pdata)->config.shift)) -static inline u32 __smsc911x_reg_read(struct smsc911x_data *pdata, u32 reg) +static inline u32 smsc911x_reg_read(struct smsc911x_data *pdata, u32 reg) { if (pdata->config.flags & SMSC911X_USE_32BIT) return readl(pdata->ioaddr + reg); @@ -163,7 +160,7 @@ static inline u32 __smsc911x_reg_read(struct smsc911x_data *pdata, u32 reg) } static inline u32 -__smsc911x_reg_read_shift(struct smsc911x_data *pdata, u32 reg) +smsc911x_reg_read_shift(struct smsc911x_data *pdata, u32 reg) { if (pdata->config.flags & SMSC911X_USE_32BIT) return readl(pdata->ioaddr + __smsc_shift(pdata, reg)); @@ -178,19 +175,7 @@ __smsc911x_reg_read_shift(struct smsc911x_data *pdata, u32 reg) return 0; } -static inline u32 smsc911x_reg_read(struct smsc911x_data *pdata, u32 reg) -{ - u32 data; - unsigned long flags; - - spin_lock_irqsave(&pdata->dev_lock, flags); - data = pdata->ops->reg_read(pdata, reg); - spin_unlock_irqrestore(&pdata->dev_lock, flags); - - return data; -} - -static inline void __smsc911x_reg_write(struct smsc911x_data *pdata, u32 reg, +static inline void smsc911x_reg_write(struct smsc911x_data *pdata, u32 reg, u32 val) { if (pdata->config.flags & SMSC911X_USE_32BIT) { @@ -208,7 +193,7 @@ static inline void __smsc911x_reg_write(struct smsc911x_data *pdata, u32 reg, } static inline void -__smsc911x_reg_write_shift(struct smsc911x_data *pdata, u32 reg, u32 val) +smsc911x_reg_write_shift(struct smsc911x_data *pdata, u32 reg, u32 val) { if (pdata->config.flags & SMSC911X_USE_32BIT) { writel(val, pdata->ioaddr + __smsc_shift(pdata, reg)); @@ -226,46 +211,30 @@ __smsc911x_reg_write_shift(struct smsc911x_data *pdata, u32 reg, u32 val) BUG(); } -static inline void smsc911x_reg_write(struct smsc911x_data *pdata, u32 reg, - u32 val) -{ - unsigned long flags; - - spin_lock_irqsave(&pdata->dev_lock, flags); - pdata->ops->reg_write(pdata, reg, val); - spin_unlock_irqrestore(&pdata->dev_lock, flags); -} - /* Writes a packet to the TX_DATA_FIFO */ static inline void smsc911x_tx_writefifo(struct smsc911x_data *pdata, unsigned int *buf, unsigned int wordcount) { - unsigned long flags; - - spin_lock_irqsave(&pdata->dev_lock, flags); - if (pdata->config.flags & SMSC911X_SWAP_FIFO) { while (wordcount--) - __smsc911x_reg_write(pdata, TX_DATA_FIFO, + smsc911x_reg_write(pdata, TX_DATA_FIFO, swab32(*buf++)); - goto out; + return; } if (pdata->config.flags & SMSC911X_USE_32BIT) { writesl(pdata->ioaddr + TX_DATA_FIFO, buf, wordcount); - goto out; + return; } if (pdata->config.flags & SMSC911X_USE_16BIT) { while (wordcount--) - __smsc911x_reg_write(pdata, TX_DATA_FIFO, *buf++); - goto out; + smsc911x_reg_write(pdata, TX_DATA_FIFO, *buf++); + return; } BUG(); -out: - spin_unlock_irqrestore(&pdata->dev_lock, flags); } /* Writes a packet to the TX_DATA_FIFO - shifted version */ @@ -273,33 +242,27 @@ static inline void smsc911x_tx_writefifo_shift(struct smsc911x_data *pdata, unsigned int *buf, unsigned int wordcount) { - unsigned long flags; - - spin_lock_irqsave(&pdata->dev_lock, flags); - if (pdata->config.flags & SMSC911X_SWAP_FIFO) { while (wordcount--) - __smsc911x_reg_write_shift(pdata, TX_DATA_FIFO, + smsc911x_reg_write_shift(pdata, TX_DATA_FIFO, swab32(*buf++)); - goto out; + return; } if (pdata->config.flags & SMSC911X_USE_32BIT) { writesl(pdata->ioaddr + __smsc_shift(pdata, TX_DATA_FIFO), buf, wordcount); - goto out; + return; } if (pdata->config.flags & SMSC911X_USE_16BIT) { while (wordcount--) - __smsc911x_reg_write_shift(pdata, + smsc911x_reg_write_shift(pdata, TX_DATA_FIFO, *buf++); - goto out; + return; } BUG(); -out: - spin_unlock_irqrestore(&pdata->dev_lock, flags); } /* Reads a packet out of the RX_DATA_FIFO */ @@ -307,31 +270,25 @@ static inline void smsc911x_rx_readfifo(struct smsc911x_data *pdata, unsigned int *buf, unsigned int wordcount) { - unsigned long flags; - - spin_lock_irqsave(&pdata->dev_lock, flags); - if (pdata->config.flags & SMSC911X_SWAP_FIFO) { while (wordcount--) - *buf++ = swab32(__smsc911x_reg_read(pdata, + *buf++ = swab32(smsc911x_reg_read(pdata, RX_DATA_FIFO)); - goto out; + return; } if (pdata->config.flags & SMSC911X_USE_32BIT) { readsl(pdata->ioaddr + RX_DATA_FIFO, buf, wordcount); - goto out; + return; } if (pdata->config.flags & SMSC911X_USE_16BIT) { while (wordcount--) - *buf++ = __smsc911x_reg_read(pdata, RX_DATA_FIFO); - goto out; + *buf++ = smsc911x_reg_read(pdata, RX_DATA_FIFO); + return; } BUG(); -out: - spin_unlock_irqrestore(&pdata->dev_lock, flags); } /* Reads a packet out of the RX_DATA_FIFO - shifted version */ @@ -339,33 +296,27 @@ static inline void smsc911x_rx_readfifo_shift(struct smsc911x_data *pdata, unsigned int *buf, unsigned int wordcount) { - unsigned long flags; - - spin_lock_irqsave(&pdata->dev_lock, flags); - if (pdata->config.flags & SMSC911X_SWAP_FIFO) { while (wordcount--) - *buf++ = swab32(__smsc911x_reg_read_shift(pdata, + *buf++ = swab32(smsc911x_reg_read_shift(pdata, RX_DATA_FIFO)); - goto out; + return; } if (pdata->config.flags & SMSC911X_USE_32BIT) { readsl(pdata->ioaddr + __smsc_shift(pdata, RX_DATA_FIFO), buf, wordcount); - goto out; + return; } if (pdata->config.flags & SMSC911X_USE_16BIT) { while (wordcount--) - *buf++ = __smsc911x_reg_read_shift(pdata, + *buf++ = smsc911x_reg_read_shift(pdata, RX_DATA_FIFO); - goto out; + return; } BUG(); -out: - spin_unlock_irqrestore(&pdata->dev_lock, flags); } /* @@ -1394,6 +1345,7 @@ static int smsc911x_soft_reset(struct smsc911x_data *pdata) * the MAC chip to be software reseted. So we have to wakeup the PHY * before. */ +#if 0 if (pdata->generation == 4) { ret = smsc911x_phy_disable_energy_detect(pdata); @@ -1402,6 +1354,7 @@ static int smsc911x_soft_reset(struct smsc911x_data *pdata) return ret; } } +#endif /* Reset the LAN911x */ smsc911x_reg_write(pdata, HW_CFG, HW_CFG_SRST_); @@ -1416,6 +1369,7 @@ static int smsc911x_soft_reset(struct smsc911x_data *pdata) return -EIO; } +#if 0 if (pdata->generation == 4) { ret = smsc911x_phy_enable_energy_detect(pdata); @@ -1424,6 +1378,7 @@ static int smsc911x_soft_reset(struct smsc911x_data *pdata) return ret; } } +#endif return 0; } @@ -1467,7 +1422,8 @@ static int smsc911x_open(struct net_device *dev) } /* decrease tx fifo size to 4KB */ - smsc911x_reg_write(pdata, HW_CFG, 0x00040000); + //smsc911x_reg_write(pdata, HW_CFG, 0x00040000); + smsc911x_reg_write(pdata, HW_CFG, 0x00050000); smsc911x_reg_write(pdata, AFC_CFG, 0x006E3740); @@ -2114,7 +2070,6 @@ static int __devinit smsc911x_init(struct net_device *dev) SMSC_TRACE(pdata, probe, "PHY will be autodetected."); SMSC_TRACE(pdata, probe, "BITS: %d", (pdata->config.flags & SMSC911X_USE_32BIT ? 32 : 16)); - spin_lock_init(&pdata->dev_lock); spin_lock_init(&pdata->mac_lock); if (pdata->ioaddr == 0) { @@ -2271,16 +2226,16 @@ static int __devexit smsc911x_drv_remove(struct platform_device *pdev) /* standard register acces */ static const struct smsc911x_ops standard_smsc911x_ops = { - .reg_read = __smsc911x_reg_read, - .reg_write = __smsc911x_reg_write, + .reg_read = smsc911x_reg_read, + .reg_write = smsc911x_reg_write, .rx_readfifo = smsc911x_rx_readfifo, .tx_writefifo = smsc911x_tx_writefifo, }; /* shifted register access */ static const struct smsc911x_ops shifted_smsc911x_ops = { - .reg_read = __smsc911x_reg_read_shift, - .reg_write = __smsc911x_reg_write_shift, + .reg_read = smsc911x_reg_read_shift, + .reg_write = smsc911x_reg_write_shift, .rx_readfifo = smsc911x_rx_readfifo_shift, .tx_writefifo = smsc911x_tx_writefifo_shift, }; -- 1.7.5.4