Commit 9a9a7a57 authored by David S. Miller's avatar David S. Miller

Merge branch 'stmmac-cleanups'

Corentin Labbe says:

====================
net: stmmac: misc fix

I am currently working on dwmac-sun8i glue driver for Allwinner H3/A83T/A64.
This series is the result of all minor problem found in the stmmac driver.

All patch are tested on cubieboard2 via dwmac-sunxi and on pine64/orangepis via dwmac-sun8i.

Changes since v1:
- Removed netdev_dbg() in "net: stmmac: print phy information"
- Removed patch "net: stmmac: Implement NAPI for TX", it will be reworked
- Changed error message in "Correct the error message about invalid speed"
- Added some acked-by
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents c502faf9 a6a3e026
...@@ -16,10 +16,6 @@ ...@@ -16,10 +16,6 @@
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details. more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in The full GNU General Public License is included in this distribution in
the file called "COPYING". the file called "COPYING".
......
...@@ -12,10 +12,6 @@ ...@@ -12,10 +12,6 @@
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details. more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in The full GNU General Public License is included in this distribution in
the file called "COPYING". the file called "COPYING".
...@@ -71,7 +67,7 @@ struct stmmac_extra_stats { ...@@ -71,7 +67,7 @@ struct stmmac_extra_stats {
unsigned long overflow_error; unsigned long overflow_error;
unsigned long ipc_csum_error; unsigned long ipc_csum_error;
unsigned long rx_collision; unsigned long rx_collision;
unsigned long rx_crc; unsigned long rx_crc_errors;
unsigned long dribbling_bit; unsigned long dribbling_bit;
unsigned long rx_length; unsigned long rx_length;
unsigned long rx_mii; unsigned long rx_mii;
...@@ -343,7 +339,7 @@ struct dma_features { ...@@ -343,7 +339,7 @@ struct dma_features {
/* Common MAC defines */ /* Common MAC defines */
#define MAC_CTRL_REG 0x00000000 /* MAC Control */ #define MAC_CTRL_REG 0x00000000 /* MAC Control */
#define MAC_ENABLE_TX 0x00000008 /* Transmitter Enable */ #define MAC_ENABLE_TX 0x00000008 /* Transmitter Enable */
#define MAC_RNABLE_RX 0x00000004 /* Receiver Enable */ #define MAC_ENABLE_RX 0x00000004 /* Receiver Enable */
/* Default LPI timers */ /* Default LPI timers */
#define STMMAC_DEFAULT_LIT_LS 0x3E8 #define STMMAC_DEFAULT_LIT_LS 0x3E8
......
...@@ -11,10 +11,6 @@ ...@@ -11,10 +11,6 @@
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details. more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in The full GNU General Public License is included in this distribution in
the file called "COPYING". the file called "COPYING".
......
...@@ -17,10 +17,6 @@ ...@@ -17,10 +17,6 @@
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details. more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in The full GNU General Public License is included in this distribution in
the file called "COPYING". the file called "COPYING".
......
...@@ -12,10 +12,6 @@ ...@@ -12,10 +12,6 @@
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details. more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in The full GNU General Public License is included in this distribution in
the file called "COPYING". the file called "COPYING".
......
...@@ -10,10 +10,6 @@ ...@@ -10,10 +10,6 @@
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details. more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in The full GNU General Public License is included in this distribution in
the file called "COPYING". the file called "COPYING".
......
...@@ -16,10 +16,6 @@ ...@@ -16,10 +16,6 @@
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details. more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in The full GNU General Public License is included in this distribution in
the file called "COPYING". the file called "COPYING".
......
...@@ -16,10 +16,6 @@ ...@@ -16,10 +16,6 @@
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details. more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in The full GNU General Public License is included in this distribution in
the file called "COPYING". the file called "COPYING".
......
...@@ -18,10 +18,6 @@ ...@@ -18,10 +18,6 @@
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details. more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in The full GNU General Public License is included in this distribution in
the file called "COPYING". the file called "COPYING".
......
...@@ -18,10 +18,6 @@ ...@@ -18,10 +18,6 @@
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details. more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in The full GNU General Public License is included in this distribution in
the file called "COPYING". the file called "COPYING".
......
...@@ -103,7 +103,7 @@ static int dwmac4_wrback_get_rx_status(void *data, struct stmmac_extra_stats *x, ...@@ -103,7 +103,7 @@ static int dwmac4_wrback_get_rx_status(void *data, struct stmmac_extra_stats *x,
x->rx_mii++; x->rx_mii++;
if (unlikely(rdes3 & RDES3_CRC_ERROR)) { if (unlikely(rdes3 & RDES3_CRC_ERROR)) {
x->rx_crc++; x->rx_crc_errors++;
stats->rx_crc_errors++; stats->rx_crc_errors++;
} }
......
...@@ -12,10 +12,6 @@ ...@@ -12,10 +12,6 @@
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details. more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in The full GNU General Public License is included in this distribution in
the file called "COPYING". the file called "COPYING".
......
...@@ -10,10 +10,6 @@ ...@@ -10,10 +10,6 @@
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details. more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in The full GNU General Public License is included in this distribution in
the file called "COPYING". the file called "COPYING".
...@@ -21,6 +17,7 @@ ...@@ -21,6 +17,7 @@
*******************************************************************************/ *******************************************************************************/
#include <linux/io.h> #include <linux/io.h>
#include <linux/iopoll.h>
#include "common.h" #include "common.h"
#include "dwmac_dma.h" #include "dwmac_dma.h"
...@@ -29,19 +26,16 @@ ...@@ -29,19 +26,16 @@
int dwmac_dma_reset(void __iomem *ioaddr) int dwmac_dma_reset(void __iomem *ioaddr)
{ {
u32 value = readl(ioaddr + DMA_BUS_MODE); u32 value = readl(ioaddr + DMA_BUS_MODE);
int limit; int err;
/* DMA SW reset */ /* DMA SW reset */
value |= DMA_BUS_MODE_SFT_RESET; value |= DMA_BUS_MODE_SFT_RESET;
writel(value, ioaddr + DMA_BUS_MODE); writel(value, ioaddr + DMA_BUS_MODE);
limit = 10;
while (limit--) {
if (!(readl(ioaddr + DMA_BUS_MODE) & DMA_BUS_MODE_SFT_RESET))
break;
mdelay(10);
}
if (limit < 0) err = readl_poll_timeout(ioaddr + DMA_BUS_MODE, value,
!(value & DMA_BUS_MODE_SFT_RESET),
100000, 10000);
if (err)
return -EBUSY; return -EBUSY;
return 0; return 0;
...@@ -102,7 +96,7 @@ static void show_tx_process_state(unsigned int status) ...@@ -102,7 +96,7 @@ static void show_tx_process_state(unsigned int status)
pr_debug("- TX (Stopped): Reset or Stop command\n"); pr_debug("- TX (Stopped): Reset or Stop command\n");
break; break;
case 1: case 1:
pr_debug("- TX (Running):Fetching the Tx desc\n"); pr_debug("- TX (Running): Fetching the Tx desc\n");
break; break;
case 2: case 2:
pr_debug("- TX (Running): Waiting for end of tx\n"); pr_debug("- TX (Running): Waiting for end of tx\n");
...@@ -136,7 +130,7 @@ static void show_rx_process_state(unsigned int status) ...@@ -136,7 +130,7 @@ static void show_rx_process_state(unsigned int status)
pr_debug("- RX (Running): Fetching the Rx desc\n"); pr_debug("- RX (Running): Fetching the Rx desc\n");
break; break;
case 2: case 2:
pr_debug("- RX (Running):Checking for end of pkt\n"); pr_debug("- RX (Running): Checking for end of pkt\n");
break; break;
case 3: case 3:
pr_debug("- RX (Running): Waiting for Rx pkt\n"); pr_debug("- RX (Running): Waiting for Rx pkt\n");
...@@ -246,7 +240,7 @@ void stmmac_set_mac_addr(void __iomem *ioaddr, u8 addr[6], ...@@ -246,7 +240,7 @@ void stmmac_set_mac_addr(void __iomem *ioaddr, u8 addr[6],
unsigned long data; unsigned long data;
data = (addr[5] << 8) | addr[4]; data = (addr[5] << 8) | addr[4];
/* For MAC Addr registers se have to set the Address Enable (AE) /* For MAC Addr registers we have to set the Address Enable (AE)
* bit that has no effect on the High Reg 0 where the bit 31 (MO) * bit that has no effect on the High Reg 0 where the bit 31 (MO)
* is RO. * is RO.
*/ */
...@@ -261,9 +255,9 @@ void stmmac_set_mac(void __iomem *ioaddr, bool enable) ...@@ -261,9 +255,9 @@ void stmmac_set_mac(void __iomem *ioaddr, bool enable)
u32 value = readl(ioaddr + MAC_CTRL_REG); u32 value = readl(ioaddr + MAC_CTRL_REG);
if (enable) if (enable)
value |= MAC_RNABLE_RX | MAC_ENABLE_TX; value |= MAC_ENABLE_RX | MAC_ENABLE_TX;
else else
value &= ~(MAC_ENABLE_TX | MAC_RNABLE_RX); value &= ~(MAC_ENABLE_TX | MAC_ENABLE_RX);
writel(value, ioaddr + MAC_CTRL_REG); writel(value, ioaddr + MAC_CTRL_REG);
} }
......
...@@ -12,10 +12,6 @@ ...@@ -12,10 +12,6 @@
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details. more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in The full GNU General Public License is included in this distribution in
the file called "COPYING". the file called "COPYING".
...@@ -225,7 +221,7 @@ static int enh_desc_get_rx_status(void *data, struct stmmac_extra_stats *x, ...@@ -225,7 +221,7 @@ static int enh_desc_get_rx_status(void *data, struct stmmac_extra_stats *x,
x->rx_mii++; x->rx_mii++;
if (unlikely(rdes0 & RDES0_CRC_ERROR)) { if (unlikely(rdes0 & RDES0_CRC_ERROR)) {
x->rx_crc++; x->rx_crc_errors++;
stats->rx_crc_errors++; stats->rx_crc_errors++;
} }
ret = discard_frame; ret = discard_frame;
......
...@@ -12,10 +12,6 @@ ...@@ -12,10 +12,6 @@
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details. more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in The full GNU General Public License is included in this distribution in
the file called "COPYING". the file called "COPYING".
......
...@@ -12,10 +12,6 @@ ...@@ -12,10 +12,6 @@
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details. more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in The full GNU General Public License is included in this distribution in
the file called "COPYING". the file called "COPYING".
......
...@@ -12,10 +12,6 @@ ...@@ -12,10 +12,6 @@
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details. more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in The full GNU General Public License is included in this distribution in
the file called "COPYING". the file called "COPYING".
...@@ -115,7 +111,7 @@ static int ndesc_get_rx_status(void *data, struct stmmac_extra_stats *x, ...@@ -115,7 +111,7 @@ static int ndesc_get_rx_status(void *data, struct stmmac_extra_stats *x,
stats->collisions++; stats->collisions++;
} }
if (unlikely(rdes0 & RDES0_CRC_ERROR)) { if (unlikely(rdes0 & RDES0_CRC_ERROR)) {
x->rx_crc++; x->rx_crc_errors++;
stats->rx_crc_errors++; stats->rx_crc_errors++;
} }
ret = discard_frame; ret = discard_frame;
......
...@@ -16,10 +16,6 @@ ...@@ -16,10 +16,6 @@
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details. more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in The full GNU General Public License is included in this distribution in
the file called "COPYING". the file called "COPYING".
......
...@@ -10,10 +10,6 @@ ...@@ -10,10 +10,6 @@
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details. more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in The full GNU General Public License is included in this distribution in
the file called "COPYING". the file called "COPYING".
......
...@@ -12,10 +12,6 @@ ...@@ -12,10 +12,6 @@
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details. more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in The full GNU General Public License is included in this distribution in
the file called "COPYING". the file called "COPYING".
...@@ -65,7 +61,7 @@ static const struct stmmac_stats stmmac_gstrings_stats[] = { ...@@ -65,7 +61,7 @@ static const struct stmmac_stats stmmac_gstrings_stats[] = {
STMMAC_STAT(overflow_error), STMMAC_STAT(overflow_error),
STMMAC_STAT(ipc_csum_error), STMMAC_STAT(ipc_csum_error),
STMMAC_STAT(rx_collision), STMMAC_STAT(rx_collision),
STMMAC_STAT(rx_crc), STMMAC_STAT(rx_crc_errors),
STMMAC_STAT(dribbling_bit), STMMAC_STAT(dribbling_bit),
STMMAC_STAT(rx_length), STMMAC_STAT(rx_length),
STMMAC_STAT(rx_mii), STMMAC_STAT(rx_mii),
......
...@@ -12,10 +12,6 @@ ...@@ -12,10 +12,6 @@
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details. more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in The full GNU General Public License is included in this distribution in
the file called "COPYING". the file called "COPYING".
......
...@@ -13,10 +13,6 @@ ...@@ -13,10 +13,6 @@
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details. more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in The full GNU General Public License is included in this distribution in
the file called "COPYING". the file called "COPYING".
...@@ -191,7 +187,7 @@ static void print_pkt(unsigned char *buf, int len) ...@@ -191,7 +187,7 @@ static void print_pkt(unsigned char *buf, int len)
static inline u32 stmmac_tx_avail(struct stmmac_priv *priv) static inline u32 stmmac_tx_avail(struct stmmac_priv *priv)
{ {
unsigned avail; u32 avail;
if (priv->dirty_tx > priv->cur_tx) if (priv->dirty_tx > priv->cur_tx)
avail = priv->dirty_tx - priv->cur_tx - 1; avail = priv->dirty_tx - priv->cur_tx - 1;
...@@ -203,7 +199,7 @@ static inline u32 stmmac_tx_avail(struct stmmac_priv *priv) ...@@ -203,7 +199,7 @@ static inline u32 stmmac_tx_avail(struct stmmac_priv *priv)
static inline u32 stmmac_rx_dirty(struct stmmac_priv *priv) static inline u32 stmmac_rx_dirty(struct stmmac_priv *priv)
{ {
unsigned dirty; u32 dirty;
if (priv->dirty_rx <= priv->cur_rx) if (priv->dirty_rx <= priv->cur_rx)
dirty = priv->cur_rx - priv->dirty_rx; dirty = priv->cur_rx - priv->dirty_rx;
...@@ -216,7 +212,7 @@ static inline u32 stmmac_rx_dirty(struct stmmac_priv *priv) ...@@ -216,7 +212,7 @@ static inline u32 stmmac_rx_dirty(struct stmmac_priv *priv)
/** /**
* stmmac_hw_fix_mac_speed - callback for speed selection * stmmac_hw_fix_mac_speed - callback for speed selection
* @priv: driver private structure * @priv: driver private structure
* Description: on some platforms (e.g. ST), some HW system configuraton * Description: on some platforms (e.g. ST), some HW system configuration
* registers have to be set according to the link speed negotiated. * registers have to be set according to the link speed negotiated.
*/ */
static inline void stmmac_hw_fix_mac_speed(struct stmmac_priv *priv) static inline void stmmac_hw_fix_mac_speed(struct stmmac_priv *priv)
...@@ -416,7 +412,7 @@ static void stmmac_get_rx_hwtstamp(struct stmmac_priv *priv, struct dma_desc *p, ...@@ -416,7 +412,7 @@ static void stmmac_get_rx_hwtstamp(struct stmmac_priv *priv, struct dma_desc *p,
/** /**
* stmmac_hwtstamp_ioctl - control hardware timestamping. * stmmac_hwtstamp_ioctl - control hardware timestamping.
* @dev: device pointer. * @dev: device pointer.
* @ifr: An IOCTL specefic structure, that can contain a pointer to * @ifr: An IOCTL specific structure, that can contain a pointer to
* a proprietary structure used to pass information to the driver. * a proprietary structure used to pass information to the driver.
* Description: * Description:
* This function configures the MAC to enable/disable both outgoing(TX) * This function configures the MAC to enable/disable both outgoing(TX)
...@@ -693,7 +689,7 @@ static void stmmac_adjust_link(struct net_device *dev) ...@@ -693,7 +689,7 @@ static void stmmac_adjust_link(struct net_device *dev)
int new_state = 0; int new_state = 0;
unsigned int fc = priv->flow_ctrl, pause_time = priv->pause; unsigned int fc = priv->flow_ctrl, pause_time = priv->pause;
if (phydev == NULL) if (!phydev)
return; return;
spin_lock_irqsave(&priv->lock, flags); spin_lock_irqsave(&priv->lock, flags);
...@@ -742,8 +738,7 @@ static void stmmac_adjust_link(struct net_device *dev) ...@@ -742,8 +738,7 @@ static void stmmac_adjust_link(struct net_device *dev)
break; break;
default: default:
netif_warn(priv, link, priv->dev, netif_warn(priv, link, priv->dev,
"Speed (%d) not 10/100\n", "broken speed: %d\n", phydev->speed);
phydev->speed);
break; break;
} }
...@@ -875,9 +870,7 @@ static int stmmac_init_phy(struct net_device *dev) ...@@ -875,9 +870,7 @@ static int stmmac_init_phy(struct net_device *dev)
if (phydev->is_pseudo_fixed_link) if (phydev->is_pseudo_fixed_link)
phydev->irq = PHY_POLL; phydev->irq = PHY_POLL;
netdev_dbg(priv->dev, "%s: attached to PHY (UID 0x%x) Link = %d\n", phy_attached_info(phydev);
__func__, phydev->phy_id, phydev->link);
return 0; return 0;
} }
...@@ -1003,7 +996,7 @@ static void stmmac_free_rx_buffers(struct stmmac_priv *priv, int i) ...@@ -1003,7 +996,7 @@ static void stmmac_free_rx_buffers(struct stmmac_priv *priv, int i)
* @dev: net device structure * @dev: net device structure
* @flags: gfp flag. * @flags: gfp flag.
* Description: this function initializes the DMA RX/TX descriptors * Description: this function initializes the DMA RX/TX descriptors
* and allocates the socket buffers. It suppors the chained and ring * and allocates the socket buffers. It supports the chained and ring
* modes. * modes.
*/ */
static int init_dma_desc_rings(struct net_device *dev, gfp_t flags) static int init_dma_desc_rings(struct net_device *dev, gfp_t flags)
...@@ -1116,13 +1109,6 @@ static void dma_free_tx_skbufs(struct stmmac_priv *priv) ...@@ -1116,13 +1109,6 @@ static void dma_free_tx_skbufs(struct stmmac_priv *priv)
int i; int i;
for (i = 0; i < DMA_TX_SIZE; i++) { for (i = 0; i < DMA_TX_SIZE; i++) {
struct dma_desc *p;
if (priv->extend_desc)
p = &((priv->dma_etx + i)->basic);
else
p = priv->dma_tx + i;
if (priv->tx_skbuff_dma[i].buf) { if (priv->tx_skbuff_dma[i].buf) {
if (priv->tx_skbuff_dma[i].map_as_page) if (priv->tx_skbuff_dma[i].map_as_page)
dma_unmap_page(priv->device, dma_unmap_page(priv->device,
...@@ -1136,7 +1122,7 @@ static void dma_free_tx_skbufs(struct stmmac_priv *priv) ...@@ -1136,7 +1122,7 @@ static void dma_free_tx_skbufs(struct stmmac_priv *priv)
DMA_TO_DEVICE); DMA_TO_DEVICE);
} }
if (priv->tx_skbuff[i] != NULL) { if (priv->tx_skbuff[i]) {
dev_kfree_skb_any(priv->tx_skbuff[i]); dev_kfree_skb_any(priv->tx_skbuff[i]);
priv->tx_skbuff[i] = NULL; priv->tx_skbuff[i] = NULL;
priv->tx_skbuff_dma[i].buf = 0; priv->tx_skbuff_dma[i].buf = 0;
...@@ -1682,10 +1668,6 @@ static int stmmac_hw_setup(struct net_device *dev, bool init_ptp) ...@@ -1682,10 +1668,6 @@ static int stmmac_hw_setup(struct net_device *dev, bool init_ptp)
/* Copy the MAC addr into the HW */ /* Copy the MAC addr into the HW */
priv->hw->mac->set_umac_addr(priv->hw, dev->dev_addr, 0); priv->hw->mac->set_umac_addr(priv->hw, dev->dev_addr, 0);
/* If required, perform hw setup of the bus. */
if (priv->plat->bus_setup)
priv->plat->bus_setup(priv->ioaddr);
/* PS and related bits will be programmed according to the speed */ /* PS and related bits will be programmed according to the speed */
if (priv->hw->pcs) { if (priv->hw->pcs) {
int speed = priv->plat->mac_port_sel_speed; int speed = priv->plat->mac_port_sel_speed;
...@@ -2536,7 +2518,7 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit) ...@@ -2536,7 +2518,7 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit)
if (unlikely(status == discard_frame)) { if (unlikely(status == discard_frame)) {
priv->dev->stats.rx_errors++; priv->dev->stats.rx_errors++;
if (priv->hwts_rx_en && !priv->extend_desc) { if (priv->hwts_rx_en && !priv->extend_desc) {
/* DESC2 & DESC3 will be overwitten by device /* DESC2 & DESC3 will be overwritten by device
* with timestamp value, hence reinitialize * with timestamp value, hence reinitialize
* them in stmmac_rx_refill() function so that * them in stmmac_rx_refill() function so that
* device can reuse it. * device can reuse it.
...@@ -2559,7 +2541,7 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit) ...@@ -2559,7 +2541,7 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit)
frame_len = priv->hw->desc->get_rx_frame_len(p, coe); frame_len = priv->hw->desc->get_rx_frame_len(p, coe);
/* If frame length is greather than skb buffer size /* If frame length is greater than skb buffer size
* (preallocated during init) then the packet is * (preallocated during init) then the packet is
* ignored * ignored
*/ */
...@@ -2765,7 +2747,7 @@ static netdev_features_t stmmac_fix_features(struct net_device *dev, ...@@ -2765,7 +2747,7 @@ static netdev_features_t stmmac_fix_features(struct net_device *dev,
/* Some GMAC devices have a bugged Jumbo frame support that /* Some GMAC devices have a bugged Jumbo frame support that
* needs to have the Tx COE disabled for oversized frames * needs to have the Tx COE disabled for oversized frames
* (due to limited buffer sizes). In this case we disable * (due to limited buffer sizes). In this case we disable
* the TX csum insertionin the TDES and not use SF. * the TX csum insertion in the TDES and not use SF.
*/ */
if (priv->plat->bugged_jumbo && (dev->mtu > ETH_DATA_LEN)) if (priv->plat->bugged_jumbo && (dev->mtu > ETH_DATA_LEN))
features &= ~NETIF_F_CSUM_MASK; features &= ~NETIF_F_CSUM_MASK;
...@@ -2911,9 +2893,7 @@ static void sysfs_display_ring(void *head, int size, int extend_desc, ...@@ -2911,9 +2893,7 @@ static void sysfs_display_ring(void *head, int size, int extend_desc,
struct dma_desc *p = (struct dma_desc *)head; struct dma_desc *p = (struct dma_desc *)head;
for (i = 0; i < size; i++) { for (i = 0; i < size; i++) {
u64 x;
if (extend_desc) { if (extend_desc) {
x = *(u64 *) ep;
seq_printf(seq, "%d [0x%x]: 0x%x 0x%x 0x%x 0x%x\n", seq_printf(seq, "%d [0x%x]: 0x%x 0x%x 0x%x 0x%x\n",
i, (unsigned int)virt_to_phys(ep), i, (unsigned int)virt_to_phys(ep),
le32_to_cpu(ep->basic.des0), le32_to_cpu(ep->basic.des0),
...@@ -2922,7 +2902,6 @@ static void sysfs_display_ring(void *head, int size, int extend_desc, ...@@ -2922,7 +2902,6 @@ static void sysfs_display_ring(void *head, int size, int extend_desc,
le32_to_cpu(ep->basic.des3)); le32_to_cpu(ep->basic.des3));
ep++; ep++;
} else { } else {
x = *(u64 *) p;
seq_printf(seq, "%d [0x%x]: 0x%x 0x%x 0x%x 0x%x\n", seq_printf(seq, "%d [0x%x]: 0x%x 0x%x 0x%x 0x%x\n",
i, (unsigned int)virt_to_phys(ep), i, (unsigned int)virt_to_phys(ep),
le32_to_cpu(p->des0), le32_to_cpu(p->des1), le32_to_cpu(p->des0), le32_to_cpu(p->des1),
...@@ -2992,7 +2971,7 @@ static int stmmac_sysfs_dma_cap_read(struct seq_file *seq, void *v) ...@@ -2992,7 +2971,7 @@ static int stmmac_sysfs_dma_cap_read(struct seq_file *seq, void *v)
(priv->dma_cap.hash_filter) ? "Y" : "N"); (priv->dma_cap.hash_filter) ? "Y" : "N");
seq_printf(seq, "\tMultiple MAC address registers: %s\n", seq_printf(seq, "\tMultiple MAC address registers: %s\n",
(priv->dma_cap.multi_addr) ? "Y" : "N"); (priv->dma_cap.multi_addr) ? "Y" : "N");
seq_printf(seq, "\tPCS (TBI/SGMII/RTBI PHY interfatces): %s\n", seq_printf(seq, "\tPCS (TBI/SGMII/RTBI PHY interfaces): %s\n",
(priv->dma_cap.pcs) ? "Y" : "N"); (priv->dma_cap.pcs) ? "Y" : "N");
seq_printf(seq, "\tSMA (MDIO) Interface: %s\n", seq_printf(seq, "\tSMA (MDIO) Interface: %s\n",
(priv->dma_cap.sma_mdio) ? "Y" : "N"); (priv->dma_cap.sma_mdio) ? "Y" : "N");
...@@ -3489,7 +3468,7 @@ int stmmac_resume(struct device *dev) ...@@ -3489,7 +3468,7 @@ int stmmac_resume(struct device *dev)
priv->irq_wake = 0; priv->irq_wake = 0;
} else { } else {
pinctrl_pm_select_default_state(priv->device); pinctrl_pm_select_default_state(priv->device);
/* enable the clk prevously disabled */ /* enable the clk previously disabled */
clk_enable(priv->plat->stmmac_clk); clk_enable(priv->plat->stmmac_clk);
clk_enable(priv->plat->pclk); clk_enable(priv->plat->pclk);
/* reset the phy so that it's ready */ /* reset the phy so that it's ready */
......
...@@ -13,10 +13,6 @@ ...@@ -13,10 +13,6 @@
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details. more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in The full GNU General Public License is included in this distribution in
the file called "COPYING". the file called "COPYING".
...@@ -24,13 +20,14 @@ ...@@ -24,13 +20,14 @@
Maintainer: Giuseppe Cavallaro <peppe.cavallaro@st.com> Maintainer: Giuseppe Cavallaro <peppe.cavallaro@st.com>
*******************************************************************************/ *******************************************************************************/
#include <linux/io.h>
#include <linux/iopoll.h>
#include <linux/mii.h> #include <linux/mii.h>
#include <linux/phy.h>
#include <linux/slab.h>
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_gpio.h> #include <linux/of_gpio.h>
#include <linux/of_mdio.h> #include <linux/of_mdio.h>
#include <asm/io.h> #include <linux/phy.h>
#include <linux/slab.h>
#include "stmmac.h" #include "stmmac.h"
...@@ -42,22 +39,6 @@ ...@@ -42,22 +39,6 @@
#define MII_GMAC4_WRITE (1 << MII_GMAC4_GOC_SHIFT) #define MII_GMAC4_WRITE (1 << MII_GMAC4_GOC_SHIFT)
#define MII_GMAC4_READ (3 << MII_GMAC4_GOC_SHIFT) #define MII_GMAC4_READ (3 << MII_GMAC4_GOC_SHIFT)
static int stmmac_mdio_busy_wait(void __iomem *ioaddr, unsigned int mii_addr)
{
unsigned long curr;
unsigned long finish = jiffies + 3 * HZ;
do {
curr = jiffies;
if (readl(ioaddr + mii_addr) & MII_BUSY)
cpu_relax();
else
return 0;
} while (!time_after_eq(curr, finish));
return -EBUSY;
}
/** /**
* stmmac_mdio_read * stmmac_mdio_read
* @bus: points to the mii_bus structure * @bus: points to the mii_bus structure
...@@ -74,7 +55,7 @@ static int stmmac_mdio_read(struct mii_bus *bus, int phyaddr, int phyreg) ...@@ -74,7 +55,7 @@ static int stmmac_mdio_read(struct mii_bus *bus, int phyaddr, int phyreg)
struct stmmac_priv *priv = netdev_priv(ndev); struct stmmac_priv *priv = netdev_priv(ndev);
unsigned int mii_address = priv->hw->mii.addr; unsigned int mii_address = priv->hw->mii.addr;
unsigned int mii_data = priv->hw->mii.data; unsigned int mii_data = priv->hw->mii.data;
u32 v;
int data; int data;
u32 value = MII_BUSY; u32 value = MII_BUSY;
...@@ -86,12 +67,14 @@ static int stmmac_mdio_read(struct mii_bus *bus, int phyaddr, int phyreg) ...@@ -86,12 +67,14 @@ static int stmmac_mdio_read(struct mii_bus *bus, int phyaddr, int phyreg)
if (priv->plat->has_gmac4) if (priv->plat->has_gmac4)
value |= MII_GMAC4_READ; value |= MII_GMAC4_READ;
if (stmmac_mdio_busy_wait(priv->ioaddr, mii_address)) if (readl_poll_timeout(priv->ioaddr + mii_address, v, !(v & MII_BUSY),
100, 10000))
return -EBUSY; return -EBUSY;
writel(value, priv->ioaddr + mii_address); writel(value, priv->ioaddr + mii_address);
if (stmmac_mdio_busy_wait(priv->ioaddr, mii_address)) if (readl_poll_timeout(priv->ioaddr + mii_address, v, !(v & MII_BUSY),
100, 10000))
return -EBUSY; return -EBUSY;
/* Read the data from the MII data register */ /* Read the data from the MII data register */
...@@ -115,7 +98,7 @@ static int stmmac_mdio_write(struct mii_bus *bus, int phyaddr, int phyreg, ...@@ -115,7 +98,7 @@ static int stmmac_mdio_write(struct mii_bus *bus, int phyaddr, int phyreg,
struct stmmac_priv *priv = netdev_priv(ndev); struct stmmac_priv *priv = netdev_priv(ndev);
unsigned int mii_address = priv->hw->mii.addr; unsigned int mii_address = priv->hw->mii.addr;
unsigned int mii_data = priv->hw->mii.data; unsigned int mii_data = priv->hw->mii.data;
u32 v;
u32 value = MII_BUSY; u32 value = MII_BUSY;
value |= (phyaddr << priv->hw->mii.addr_shift) value |= (phyaddr << priv->hw->mii.addr_shift)
...@@ -130,7 +113,8 @@ static int stmmac_mdio_write(struct mii_bus *bus, int phyaddr, int phyreg, ...@@ -130,7 +113,8 @@ static int stmmac_mdio_write(struct mii_bus *bus, int phyaddr, int phyreg,
value |= MII_WRITE; value |= MII_WRITE;
/* Wait until any existing MII operation is complete */ /* Wait until any existing MII operation is complete */
if (stmmac_mdio_busy_wait(priv->ioaddr, mii_address)) if (readl_poll_timeout(priv->ioaddr + mii_address, v, !(v & MII_BUSY),
100, 10000))
return -EBUSY; return -EBUSY;
/* Set the MII address register to write */ /* Set the MII address register to write */
...@@ -138,7 +122,8 @@ static int stmmac_mdio_write(struct mii_bus *bus, int phyaddr, int phyreg, ...@@ -138,7 +122,8 @@ static int stmmac_mdio_write(struct mii_bus *bus, int phyaddr, int phyreg,
writel(value, priv->ioaddr + mii_address); writel(value, priv->ioaddr + mii_address);
/* Wait until any existing MII operation is complete */ /* Wait until any existing MII operation is complete */
return stmmac_mdio_busy_wait(priv->ioaddr, mii_address); return readl_poll_timeout(priv->ioaddr + mii_address, v, !(v & MII_BUSY),
100, 10000);
} }
/** /**
...@@ -156,9 +141,9 @@ int stmmac_mdio_reset(struct mii_bus *bus) ...@@ -156,9 +141,9 @@ int stmmac_mdio_reset(struct mii_bus *bus)
#ifdef CONFIG_OF #ifdef CONFIG_OF
if (priv->device->of_node) { if (priv->device->of_node) {
if (data->reset_gpio < 0) { if (data->reset_gpio < 0) {
struct device_node *np = priv->device->of_node; struct device_node *np = priv->device->of_node;
if (!np) if (!np)
return 0; return 0;
...@@ -198,7 +183,7 @@ int stmmac_mdio_reset(struct mii_bus *bus) ...@@ -198,7 +183,7 @@ int stmmac_mdio_reset(struct mii_bus *bus)
/* This is a workaround for problems with the STE101P PHY. /* This is a workaround for problems with the STE101P PHY.
* It doesn't complete its reset until at least one clock cycle * It doesn't complete its reset until at least one clock cycle
* on MDC, so perform a dummy mdio read. To be upadted for GMAC4 * on MDC, so perform a dummy mdio read. To be updated for GMAC4
* if needed. * if needed.
*/ */
if (!priv->plat->has_gmac4) if (!priv->plat->has_gmac4)
...@@ -225,7 +210,7 @@ int stmmac_mdio_register(struct net_device *ndev) ...@@ -225,7 +210,7 @@ int stmmac_mdio_register(struct net_device *ndev)
return 0; return 0;
new_bus = mdiobus_alloc(); new_bus = mdiobus_alloc();
if (new_bus == NULL) if (!new_bus)
return -ENOMEM; return -ENOMEM;
if (mdio_bus_data->irqs) if (mdio_bus_data->irqs)
...@@ -262,6 +247,7 @@ int stmmac_mdio_register(struct net_device *ndev) ...@@ -262,6 +247,7 @@ int stmmac_mdio_register(struct net_device *ndev)
found = 0; found = 0;
for (addr = 0; addr < PHY_MAX_ADDR; addr++) { for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
struct phy_device *phydev = mdiobus_get_phy(new_bus, addr); struct phy_device *phydev = mdiobus_get_phy(new_bus, addr);
if (phydev) { if (phydev) {
int act = 0; int act = 0;
char irq_num[4]; char irq_num[4];
...@@ -271,7 +257,7 @@ int stmmac_mdio_register(struct net_device *ndev) ...@@ -271,7 +257,7 @@ int stmmac_mdio_register(struct net_device *ndev)
* If an IRQ was provided to be assigned after * If an IRQ was provided to be assigned after
* the bus probe, do it here. * the bus probe, do it here.
*/ */
if ((mdio_bus_data->irqs == NULL) && if ((!mdio_bus_data->irqs) &&
(mdio_bus_data->probed_phy_irq > 0)) { (mdio_bus_data->probed_phy_irq > 0)) {
new_bus->irq[addr] = new_bus->irq[addr] =
mdio_bus_data->probed_phy_irq; mdio_bus_data->probed_phy_irq;
......
...@@ -12,10 +12,6 @@ ...@@ -12,10 +12,6 @@
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details. more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in The full GNU General Public License is included in this distribution in
the file called "COPYING". the file called "COPYING".
......
...@@ -12,10 +12,6 @@ ...@@ -12,10 +12,6 @@
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details. more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in The full GNU General Public License is included in this distribution in
the file called "COPYING". the file called "COPYING".
...@@ -415,7 +411,7 @@ void stmmac_remove_config_dt(struct platform_device *pdev, ...@@ -415,7 +411,7 @@ void stmmac_remove_config_dt(struct platform_device *pdev,
struct plat_stmmacenet_data * struct plat_stmmacenet_data *
stmmac_probe_config_dt(struct platform_device *pdev, const char **mac) stmmac_probe_config_dt(struct platform_device *pdev, const char **mac)
{ {
return ERR_PTR(-ENOSYS); return ERR_PTR(-EINVAL);
} }
void stmmac_remove_config_dt(struct platform_device *pdev, void stmmac_remove_config_dt(struct platform_device *pdev,
......
...@@ -12,10 +12,6 @@ ...@@ -12,10 +12,6 @@
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details. more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in The full GNU General Public License is included in this distribution in
the file called "COPYING". the file called "COPYING".
......
...@@ -12,10 +12,6 @@ ...@@ -12,10 +12,6 @@
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details. more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in The full GNU General Public License is included in this distribution in
the file called "COPYING". the file called "COPYING".
......
...@@ -134,7 +134,6 @@ struct plat_stmmacenet_data { ...@@ -134,7 +134,6 @@ struct plat_stmmacenet_data {
int tx_fifo_size; int tx_fifo_size;
int rx_fifo_size; int rx_fifo_size;
void (*fix_mac_speed)(void *priv, unsigned int speed); void (*fix_mac_speed)(void *priv, unsigned int speed);
void (*bus_setup)(void __iomem *ioaddr);
int (*init)(struct platform_device *pdev, void *priv); int (*init)(struct platform_device *pdev, void *priv);
void (*exit)(struct platform_device *pdev, void *priv); void (*exit)(struct platform_device *pdev, void *priv);
void *bsp_priv; void *bsp_priv;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment