diff options
Diffstat (limited to 'drivers/net/ethernet/freescale/fec_main.c')
| -rw-r--r-- | drivers/net/ethernet/freescale/fec_main.c | 17 | 
1 files changed, 9 insertions, 8 deletions
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c index d4782b42401b..479a7cba45c0 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -389,12 +389,6 @@ fec_enet_start_xmit(struct sk_buff *skb, struct net_device *ndev)  			netdev_err(ndev, "Tx DMA memory map failed\n");  		return NETDEV_TX_OK;  	} -	/* Send it on its way.  Tell FEC it's ready, interrupt when done, -	 * it's the last BD of the frame, and to put the CRC on the end. -	 */ -	status |= (BD_ENET_TX_READY | BD_ENET_TX_INTR -			| BD_ENET_TX_LAST | BD_ENET_TX_TC); -	bdp->cbd_sc = status;  	if (fep->bufdesc_ex) { @@ -416,6 +410,13 @@ fec_enet_start_xmit(struct sk_buff *skb, struct net_device *ndev)  		}  	} +	/* Send it on its way.  Tell FEC it's ready, interrupt when done, +	 * it's the last BD of the frame, and to put the CRC on the end. +	 */ +	status |= (BD_ENET_TX_READY | BD_ENET_TX_INTR +			| BD_ENET_TX_LAST | BD_ENET_TX_TC); +	bdp->cbd_sc = status; +  	bdp_pre = fec_enet_get_prevdesc(bdp, fep);  	if ((id_entry->driver_data & FEC_QUIRK_ERR006358) &&  	    !(bdp_pre->cbd_sc & BD_ENET_TX_READY)) { @@ -1778,8 +1779,6 @@ fec_enet_open(struct net_device *ndev)  	struct fec_enet_private *fep = netdev_priv(ndev);  	int ret; -	napi_enable(&fep->napi); -  	/* I should reset the ring buffers here, but I don't yet know  	 * a simple way to do that.  	 */ @@ -1794,6 +1793,8 @@ fec_enet_open(struct net_device *ndev)  		fec_enet_free_buffers(ndev);  		return ret;  	} + +	napi_enable(&fep->napi);  	phy_start(fep->phy_dev);  	netif_start_queue(ndev);  	fep->opened = 1;  |