[PATCH] sky2: fix receive flush/pause issues

Fix issues with pause and flush. This code works on
all chip versions tested.

Signed-off-by: Stephen Hemminger <shemminger@osdl.org>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
index 0b9b701..83361ae 100644
--- a/drivers/net/sky2.c
+++ b/drivers/net/sky2.c
@@ -485,8 +485,8 @@
 	int i;
 	const u8 *addr = hw->dev[port]->dev_addr;
 
-	sky2_write8(hw, SK_REG(port, GPHY_CTRL), GPC_RST_SET);
-	sky2_write8(hw, SK_REG(port, GPHY_CTRL), GPC_RST_CLR);
+	sky2_write32(hw, SK_REG(port, GPHY_CTRL), GPC_RST_SET);
+	sky2_write32(hw, SK_REG(port, GPHY_CTRL), GPC_RST_CLR|GPC_ENA_PAUSE);
 
 	sky2_write8(hw, SK_REG(port, GMAC_CTRL), GMC_RST_CLR);
 
@@ -589,11 +589,8 @@
 		     GMF_RX_CTRL_DEF);
 
 	/* Flush Rx MAC FIFO on any flow control or error */
-	reg = GMR_FS_ANY_ERR;
-	if (hw->chip_id == CHIP_ID_YUKON_XL && hw->chip_rev <= 1)
-		reg = 0;	/* WA dev #4.115 */
+	sky2_write16(hw, SK_REG(port, RX_GMF_FL_MSK), GMR_FS_ANY_ERR);
 
-	sky2_write16(hw, SK_REG(port, RX_GMF_FL_MSK), reg);
 	/* Set threshold to 0xa (64 bytes)
 	 *  ASF disabled so no need to do WA dev #4.30
 	 */
@@ -1363,9 +1360,6 @@
 	unsigned port = sky2->port;
 	u16 reg;
 
-	/* disable Rx GMAC FIFO flush mode */
-	sky2_write8(hw, SK_REG(port, RX_GMF_CTRL_T), GMF_RX_F_FL_OFF);
-
 	/* Enable Transmit FIFO Underrun */
 	sky2_write8(hw, SK_REG(port, GMAC_IRQ_MSK), GMAC_DEF_MSK);
 
@@ -1611,9 +1605,12 @@
 
 	sky2->rx_next = (sky2->rx_next + 1) % sky2->rx_pending;
 
-	if (!(status & GMR_FS_RX_OK) || (status & GMR_FS_ANY_ERR))
+	if (status & GMR_FS_ANY_ERR)
 		goto error;
 
+	if (!(status & GMR_FS_RX_OK))
+		goto resubmit;
+
 	if (length < RX_COPY_THRESHOLD) {
 		skb = alloc_skb(length + 2, GFP_ATOMIC);
 		if (!skb)
@@ -1662,9 +1659,6 @@
 	return skb;
 
 error:
-	if (status & GMR_FS_GOOD_FC)
-		goto resubmit;
-
 	if (netif_msg_rx_err(sky2))
 		printk(KERN_INFO PFX "%s: rx error, status 0x%x length %d\n",
 		       sky2->netdev->name, status, length);