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: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
9a9a7a5727
|
@ -16,10 +16,6 @@
|
|||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
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 file called "COPYING".
|
||||
|
||||
|
|
|
@ -12,10 +12,6 @@
|
|||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
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 file called "COPYING".
|
||||
|
||||
|
@ -71,7 +67,7 @@ struct stmmac_extra_stats {
|
|||
unsigned long overflow_error;
|
||||
unsigned long ipc_csum_error;
|
||||
unsigned long rx_collision;
|
||||
unsigned long rx_crc;
|
||||
unsigned long rx_crc_errors;
|
||||
unsigned long dribbling_bit;
|
||||
unsigned long rx_length;
|
||||
unsigned long rx_mii;
|
||||
|
@ -343,7 +339,7 @@ struct dma_features {
|
|||
/* Common MAC defines */
|
||||
#define MAC_CTRL_REG 0x00000000 /* MAC Control */
|
||||
#define MAC_ENABLE_TX 0x00000008 /* Transmitter Enable */
|
||||
#define MAC_RNABLE_RX 0x00000004 /* Receiver Enable */
|
||||
#define MAC_ENABLE_RX 0x00000004 /* Receiver Enable */
|
||||
|
||||
/* Default LPI timers */
|
||||
#define STMMAC_DEFAULT_LIT_LS 0x3E8
|
||||
|
|
|
@ -11,10 +11,6 @@
|
|||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
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 file called "COPYING".
|
||||
|
||||
|
|
|
@ -17,10 +17,6 @@
|
|||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
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 file called "COPYING".
|
||||
|
||||
|
|
|
@ -12,10 +12,6 @@
|
|||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
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 file called "COPYING".
|
||||
|
||||
|
|
|
@ -10,10 +10,6 @@
|
|||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
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 file called "COPYING".
|
||||
|
||||
|
|
|
@ -16,10 +16,6 @@
|
|||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
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 file called "COPYING".
|
||||
|
||||
|
|
|
@ -16,10 +16,6 @@
|
|||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
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 file called "COPYING".
|
||||
|
||||
|
|
|
@ -18,10 +18,6 @@
|
|||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
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 file called "COPYING".
|
||||
|
||||
|
|
|
@ -18,10 +18,6 @@
|
|||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
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 file called "COPYING".
|
||||
|
||||
|
|
|
@ -103,7 +103,7 @@ static int dwmac4_wrback_get_rx_status(void *data, struct stmmac_extra_stats *x,
|
|||
x->rx_mii++;
|
||||
|
||||
if (unlikely(rdes3 & RDES3_CRC_ERROR)) {
|
||||
x->rx_crc++;
|
||||
x->rx_crc_errors++;
|
||||
stats->rx_crc_errors++;
|
||||
}
|
||||
|
||||
|
|
|
@ -12,10 +12,6 @@
|
|||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
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 file called "COPYING".
|
||||
|
||||
|
|
|
@ -10,10 +10,6 @@
|
|||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
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 file called "COPYING".
|
||||
|
||||
|
@ -21,6 +17,7 @@
|
|||
*******************************************************************************/
|
||||
|
||||
#include <linux/io.h>
|
||||
#include <linux/iopoll.h>
|
||||
#include "common.h"
|
||||
#include "dwmac_dma.h"
|
||||
|
||||
|
@ -29,19 +26,16 @@
|
|||
int dwmac_dma_reset(void __iomem *ioaddr)
|
||||
{
|
||||
u32 value = readl(ioaddr + DMA_BUS_MODE);
|
||||
int limit;
|
||||
int err;
|
||||
|
||||
/* DMA SW reset */
|
||||
value |= DMA_BUS_MODE_SFT_RESET;
|
||||
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 0;
|
||||
|
@ -102,7 +96,7 @@ static void show_tx_process_state(unsigned int status)
|
|||
pr_debug("- TX (Stopped): Reset or Stop command\n");
|
||||
break;
|
||||
case 1:
|
||||
pr_debug("- TX (Running):Fetching the Tx desc\n");
|
||||
pr_debug("- TX (Running): Fetching the Tx desc\n");
|
||||
break;
|
||||
case 2:
|
||||
pr_debug("- TX (Running): Waiting for end of tx\n");
|
||||
|
@ -136,7 +130,7 @@ static void show_rx_process_state(unsigned int status)
|
|||
pr_debug("- RX (Running): Fetching the Rx desc\n");
|
||||
break;
|
||||
case 2:
|
||||
pr_debug("- RX (Running):Checking for end of pkt\n");
|
||||
pr_debug("- RX (Running): Checking for end of pkt\n");
|
||||
break;
|
||||
case 3:
|
||||
pr_debug("- RX (Running): Waiting for Rx pkt\n");
|
||||
|
@ -246,7 +240,7 @@ void stmmac_set_mac_addr(void __iomem *ioaddr, u8 addr[6],
|
|||
unsigned long data;
|
||||
|
||||
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)
|
||||
* is RO.
|
||||
*/
|
||||
|
@ -261,9 +255,9 @@ void stmmac_set_mac(void __iomem *ioaddr, bool enable)
|
|||
u32 value = readl(ioaddr + MAC_CTRL_REG);
|
||||
|
||||
if (enable)
|
||||
value |= MAC_RNABLE_RX | MAC_ENABLE_TX;
|
||||
value |= MAC_ENABLE_RX | MAC_ENABLE_TX;
|
||||
else
|
||||
value &= ~(MAC_ENABLE_TX | MAC_RNABLE_RX);
|
||||
value &= ~(MAC_ENABLE_TX | MAC_ENABLE_RX);
|
||||
|
||||
writel(value, ioaddr + MAC_CTRL_REG);
|
||||
}
|
||||
|
|
|
@ -12,10 +12,6 @@
|
|||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
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 file called "COPYING".
|
||||
|
||||
|
@ -225,7 +221,7 @@ static int enh_desc_get_rx_status(void *data, struct stmmac_extra_stats *x,
|
|||
x->rx_mii++;
|
||||
|
||||
if (unlikely(rdes0 & RDES0_CRC_ERROR)) {
|
||||
x->rx_crc++;
|
||||
x->rx_crc_errors++;
|
||||
stats->rx_crc_errors++;
|
||||
}
|
||||
ret = discard_frame;
|
||||
|
|
|
@ -12,10 +12,6 @@
|
|||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
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 file called "COPYING".
|
||||
|
||||
|
|
|
@ -12,10 +12,6 @@
|
|||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
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 file called "COPYING".
|
||||
|
||||
|
|
|
@ -12,10 +12,6 @@
|
|||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
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 file called "COPYING".
|
||||
|
||||
|
@ -115,7 +111,7 @@ static int ndesc_get_rx_status(void *data, struct stmmac_extra_stats *x,
|
|||
stats->collisions++;
|
||||
}
|
||||
if (unlikely(rdes0 & RDES0_CRC_ERROR)) {
|
||||
x->rx_crc++;
|
||||
x->rx_crc_errors++;
|
||||
stats->rx_crc_errors++;
|
||||
}
|
||||
ret = discard_frame;
|
||||
|
|
|
@ -16,10 +16,6 @@
|
|||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
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 file called "COPYING".
|
||||
|
||||
|
|
|
@ -10,10 +10,6 @@
|
|||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
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 file called "COPYING".
|
||||
|
||||
|
|
|
@ -12,10 +12,6 @@
|
|||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
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 file called "COPYING".
|
||||
|
||||
|
@ -65,7 +61,7 @@ static const struct stmmac_stats stmmac_gstrings_stats[] = {
|
|||
STMMAC_STAT(overflow_error),
|
||||
STMMAC_STAT(ipc_csum_error),
|
||||
STMMAC_STAT(rx_collision),
|
||||
STMMAC_STAT(rx_crc),
|
||||
STMMAC_STAT(rx_crc_errors),
|
||||
STMMAC_STAT(dribbling_bit),
|
||||
STMMAC_STAT(rx_length),
|
||||
STMMAC_STAT(rx_mii),
|
||||
|
|
|
@ -12,10 +12,6 @@
|
|||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
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 file called "COPYING".
|
||||
|
||||
|
|
|
@ -13,10 +13,6 @@
|
|||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
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 file called "COPYING".
|
||||
|
||||
|
@ -191,7 +187,7 @@ static void print_pkt(unsigned char *buf, int len)
|
|||
|
||||
static inline u32 stmmac_tx_avail(struct stmmac_priv *priv)
|
||||
{
|
||||
unsigned avail;
|
||||
u32 avail;
|
||||
|
||||
if (priv->dirty_tx > priv->cur_tx)
|
||||
avail = priv->dirty_tx - priv->cur_tx - 1;
|
||||
|
@ -203,7 +199,7 @@ static inline u32 stmmac_tx_avail(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)
|
||||
dirty = priv->cur_rx - priv->dirty_rx;
|
||||
|
@ -216,7 +212,7 @@ static inline u32 stmmac_rx_dirty(struct stmmac_priv *priv)
|
|||
/**
|
||||
* stmmac_hw_fix_mac_speed - callback for speed selection
|
||||
* @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.
|
||||
*/
|
||||
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,
|
|||
/**
|
||||
* stmmac_hwtstamp_ioctl - control hardware timestamping.
|
||||
* @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.
|
||||
* Description:
|
||||
* This function configures the MAC to enable/disable both outgoing(TX)
|
||||
|
@ -693,7 +689,7 @@ static void stmmac_adjust_link(struct net_device *dev)
|
|||
int new_state = 0;
|
||||
unsigned int fc = priv->flow_ctrl, pause_time = priv->pause;
|
||||
|
||||
if (phydev == NULL)
|
||||
if (!phydev)
|
||||
return;
|
||||
|
||||
spin_lock_irqsave(&priv->lock, flags);
|
||||
|
@ -742,8 +738,7 @@ static void stmmac_adjust_link(struct net_device *dev)
|
|||
break;
|
||||
default:
|
||||
netif_warn(priv, link, priv->dev,
|
||||
"Speed (%d) not 10/100\n",
|
||||
phydev->speed);
|
||||
"broken speed: %d\n", phydev->speed);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -875,9 +870,7 @@ static int stmmac_init_phy(struct net_device *dev)
|
|||
if (phydev->is_pseudo_fixed_link)
|
||||
phydev->irq = PHY_POLL;
|
||||
|
||||
netdev_dbg(priv->dev, "%s: attached to PHY (UID 0x%x) Link = %d\n",
|
||||
__func__, phydev->phy_id, phydev->link);
|
||||
|
||||
phy_attached_info(phydev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1003,7 +996,7 @@ static void stmmac_free_rx_buffers(struct stmmac_priv *priv, int i)
|
|||
* @dev: net device structure
|
||||
* @flags: gfp flag.
|
||||
* 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.
|
||||
*/
|
||||
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)
|
|||
int 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].map_as_page)
|
||||
dma_unmap_page(priv->device,
|
||||
|
@ -1136,7 +1122,7 @@ static void dma_free_tx_skbufs(struct stmmac_priv *priv)
|
|||
DMA_TO_DEVICE);
|
||||
}
|
||||
|
||||
if (priv->tx_skbuff[i] != NULL) {
|
||||
if (priv->tx_skbuff[i]) {
|
||||
dev_kfree_skb_any(priv->tx_skbuff[i]);
|
||||
priv->tx_skbuff[i] = NULL;
|
||||
priv->tx_skbuff_dma[i].buf = 0;
|
||||
|
@ -1682,10 +1668,6 @@ static int stmmac_hw_setup(struct net_device *dev, bool init_ptp)
|
|||
/* Copy the MAC addr into the HW */
|
||||
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 */
|
||||
if (priv->hw->pcs) {
|
||||
int speed = priv->plat->mac_port_sel_speed;
|
||||
|
@ -2536,7 +2518,7 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit)
|
|||
if (unlikely(status == discard_frame)) {
|
||||
priv->dev->stats.rx_errors++;
|
||||
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
|
||||
* them in stmmac_rx_refill() function so that
|
||||
* device can reuse it.
|
||||
|
@ -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);
|
||||
|
||||
/* 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
|
||||
* ignored
|
||||
*/
|
||||
|
@ -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
|
||||
* needs to have the Tx COE disabled for oversized frames
|
||||
* (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))
|
||||
features &= ~NETIF_F_CSUM_MASK;
|
||||
|
@ -2911,9 +2893,7 @@ static void sysfs_display_ring(void *head, int size, int extend_desc,
|
|||
struct dma_desc *p = (struct dma_desc *)head;
|
||||
|
||||
for (i = 0; i < size; i++) {
|
||||
u64 x;
|
||||
if (extend_desc) {
|
||||
x = *(u64 *) ep;
|
||||
seq_printf(seq, "%d [0x%x]: 0x%x 0x%x 0x%x 0x%x\n",
|
||||
i, (unsigned int)virt_to_phys(ep),
|
||||
le32_to_cpu(ep->basic.des0),
|
||||
|
@ -2922,7 +2902,6 @@ static void sysfs_display_ring(void *head, int size, int extend_desc,
|
|||
le32_to_cpu(ep->basic.des3));
|
||||
ep++;
|
||||
} else {
|
||||
x = *(u64 *) p;
|
||||
seq_printf(seq, "%d [0x%x]: 0x%x 0x%x 0x%x 0x%x\n",
|
||||
i, (unsigned int)virt_to_phys(ep),
|
||||
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)
|
|||
(priv->dma_cap.hash_filter) ? "Y" : "N");
|
||||
seq_printf(seq, "\tMultiple MAC address registers: %s\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");
|
||||
seq_printf(seq, "\tSMA (MDIO) Interface: %s\n",
|
||||
(priv->dma_cap.sma_mdio) ? "Y" : "N");
|
||||
|
@ -3489,7 +3468,7 @@ int stmmac_resume(struct device *dev)
|
|||
priv->irq_wake = 0;
|
||||
} else {
|
||||
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->pclk);
|
||||
/* reset the phy so that it's ready */
|
||||
|
|
|
@ -13,10 +13,6 @@
|
|||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
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 file called "COPYING".
|
||||
|
||||
|
@ -24,13 +20,14 @@
|
|||
Maintainer: Giuseppe Cavallaro <peppe.cavallaro@st.com>
|
||||
*******************************************************************************/
|
||||
|
||||
#include <linux/io.h>
|
||||
#include <linux/iopoll.h>
|
||||
#include <linux/mii.h>
|
||||
#include <linux/phy.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_gpio.h>
|
||||
#include <linux/of_mdio.h>
|
||||
#include <asm/io.h>
|
||||
#include <linux/phy.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
#include "stmmac.h"
|
||||
|
||||
|
@ -42,22 +39,6 @@
|
|||
#define MII_GMAC4_WRITE (1 << 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
|
||||
* @bus: points to the mii_bus structure
|
||||
|
@ -74,7 +55,7 @@ static int stmmac_mdio_read(struct mii_bus *bus, int phyaddr, int phyreg)
|
|||
struct stmmac_priv *priv = netdev_priv(ndev);
|
||||
unsigned int mii_address = priv->hw->mii.addr;
|
||||
unsigned int mii_data = priv->hw->mii.data;
|
||||
|
||||
u32 v;
|
||||
int data;
|
||||
u32 value = MII_BUSY;
|
||||
|
||||
|
@ -86,12 +67,14 @@ static int stmmac_mdio_read(struct mii_bus *bus, int phyaddr, int phyreg)
|
|||
if (priv->plat->has_gmac4)
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
/* 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,
|
|||
struct stmmac_priv *priv = netdev_priv(ndev);
|
||||
unsigned int mii_address = priv->hw->mii.addr;
|
||||
unsigned int mii_data = priv->hw->mii.data;
|
||||
|
||||
u32 v;
|
||||
u32 value = MII_BUSY;
|
||||
|
||||
value |= (phyaddr << priv->hw->mii.addr_shift)
|
||||
|
@ -130,7 +113,8 @@ static int stmmac_mdio_write(struct mii_bus *bus, int phyaddr, int phyreg,
|
|||
value |= MII_WRITE;
|
||||
|
||||
/* 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;
|
||||
|
||||
/* Set the MII address register to write */
|
||||
|
@ -138,7 +122,8 @@ static int stmmac_mdio_write(struct mii_bus *bus, int phyaddr, int phyreg,
|
|||
writel(value, priv->ioaddr + mii_address);
|
||||
|
||||
/* 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)
|
|||
|
||||
#ifdef CONFIG_OF
|
||||
if (priv->device->of_node) {
|
||||
|
||||
if (data->reset_gpio < 0) {
|
||||
struct device_node *np = priv->device->of_node;
|
||||
|
||||
if (!np)
|
||||
return 0;
|
||||
|
||||
|
@ -198,7 +183,7 @@ int stmmac_mdio_reset(struct mii_bus *bus)
|
|||
|
||||
/* This is a workaround for problems with the STE101P PHY.
|
||||
* 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 (!priv->plat->has_gmac4)
|
||||
|
@ -225,7 +210,7 @@ int stmmac_mdio_register(struct net_device *ndev)
|
|||
return 0;
|
||||
|
||||
new_bus = mdiobus_alloc();
|
||||
if (new_bus == NULL)
|
||||
if (!new_bus)
|
||||
return -ENOMEM;
|
||||
|
||||
if (mdio_bus_data->irqs)
|
||||
|
@ -262,6 +247,7 @@ int stmmac_mdio_register(struct net_device *ndev)
|
|||
found = 0;
|
||||
for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
|
||||
struct phy_device *phydev = mdiobus_get_phy(new_bus, addr);
|
||||
|
||||
if (phydev) {
|
||||
int act = 0;
|
||||
char irq_num[4];
|
||||
|
@ -271,7 +257,7 @@ int stmmac_mdio_register(struct net_device *ndev)
|
|||
* If an IRQ was provided to be assigned after
|
||||
* the bus probe, do it here.
|
||||
*/
|
||||
if ((mdio_bus_data->irqs == NULL) &&
|
||||
if ((!mdio_bus_data->irqs) &&
|
||||
(mdio_bus_data->probed_phy_irq > 0)) {
|
||||
new_bus->irq[addr] =
|
||||
mdio_bus_data->probed_phy_irq;
|
||||
|
|
|
@ -12,10 +12,6 @@
|
|||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
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 file called "COPYING".
|
||||
|
||||
|
|
|
@ -12,10 +12,6 @@
|
|||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
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 file called "COPYING".
|
||||
|
||||
|
@ -415,7 +411,7 @@ void stmmac_remove_config_dt(struct platform_device *pdev,
|
|||
struct plat_stmmacenet_data *
|
||||
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,
|
||||
|
|
|
@ -12,10 +12,6 @@
|
|||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
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 file called "COPYING".
|
||||
|
||||
|
|
|
@ -12,10 +12,6 @@
|
|||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
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 file called "COPYING".
|
||||
|
||||
|
|
|
@ -134,7 +134,6 @@ struct plat_stmmacenet_data {
|
|||
int tx_fifo_size;
|
||||
int rx_fifo_size;
|
||||
void (*fix_mac_speed)(void *priv, unsigned int speed);
|
||||
void (*bus_setup)(void __iomem *ioaddr);
|
||||
int (*init)(struct platform_device *pdev, void *priv);
|
||||
void (*exit)(struct platform_device *pdev, void *priv);
|
||||
void *bsp_priv;
|
||||
|
|
Loading…
Reference in New Issue