diff options
Diffstat (limited to 'drivers/net/ethernet/socionext/netsec.c')
| -rw-r--r-- | drivers/net/ethernet/socionext/netsec.c | 25 | 
1 files changed, 13 insertions, 12 deletions
| diff --git a/drivers/net/ethernet/socionext/netsec.c b/drivers/net/ethernet/socionext/netsec.c index 3c53051bdacf..dfc85cc68173 100644 --- a/drivers/net/ethernet/socionext/netsec.c +++ b/drivers/net/ethernet/socionext/netsec.c @@ -1715,14 +1715,17 @@ static int netsec_netdev_init(struct net_device *ndev)  		goto err1;  	/* set phy power down */ -	data = netsec_phy_read(priv->mii_bus, priv->phy_addr, MII_BMCR) | -		BMCR_PDOWN; -	netsec_phy_write(priv->mii_bus, priv->phy_addr, MII_BMCR, data); +	data = netsec_phy_read(priv->mii_bus, priv->phy_addr, MII_BMCR); +	netsec_phy_write(priv->mii_bus, priv->phy_addr, MII_BMCR, +			 data | BMCR_PDOWN);  	ret = netsec_reset_hardware(priv, true);  	if (ret)  		goto err2; +	/* Restore phy power state */ +	netsec_phy_write(priv->mii_bus, priv->phy_addr, MII_BMCR, data); +  	spin_lock_init(&priv->desc_ring[NETSEC_RING_TX].lock);  	spin_lock_init(&priv->desc_ring[NETSEC_RING_RX].lock); @@ -1757,8 +1760,7 @@ static int netsec_xdp_xmit(struct net_device *ndev, int n,  {  	struct netsec_priv *priv = netdev_priv(ndev);  	struct netsec_desc_ring *tx_ring = &priv->desc_ring[NETSEC_RING_TX]; -	int drops = 0; -	int i; +	int i, nxmit = 0;  	if (unlikely(flags & ~XDP_XMIT_FLAGS_MASK))  		return -EINVAL; @@ -1769,12 +1771,11 @@ static int netsec_xdp_xmit(struct net_device *ndev, int n,  		int err;  		err = netsec_xdp_queue_one(priv, xdpf, true); -		if (err != NETSEC_XDP_TX) { -			xdp_return_frame_rx_napi(xdpf); -			drops++; -		} else { -			tx_ring->xdp_xmit++; -		} +		if (err != NETSEC_XDP_TX) +			break; + +		tx_ring->xdp_xmit++; +		nxmit++;  	}  	spin_unlock(&tx_ring->lock); @@ -1783,7 +1784,7 @@ static int netsec_xdp_xmit(struct net_device *ndev, int n,  		tx_ring->xdp_xmit = 0;  	} -	return n - drops; +	return nxmit;  }  static int netsec_xdp_setup(struct netsec_priv *priv, struct bpf_prog *prog, | 
