|
@@ -1499,6 +1499,11 @@ static int sky2_down(struct net_device *dev)
|
|
|
/* Stop more packets from being queued */
|
|
|
netif_stop_queue(dev);
|
|
|
|
|
|
+ /* Disable port IRQ */
|
|
|
+ imask = sky2_read32(hw, B0_IMSK);
|
|
|
+ imask &= ~portirq_msk[port];
|
|
|
+ sky2_write32(hw, B0_IMSK, imask);
|
|
|
+
|
|
|
sky2_gmac_reset(hw, port);
|
|
|
|
|
|
/* Stop transmitter */
|
|
@@ -1549,11 +1554,6 @@ static int sky2_down(struct net_device *dev)
|
|
|
sky2_write8(hw, SK_REG(port, RX_GMF_CTRL_T), GMF_RST_SET);
|
|
|
sky2_write8(hw, SK_REG(port, TX_GMF_CTRL_T), GMF_RST_SET);
|
|
|
|
|
|
- /* Disable port IRQ */
|
|
|
- imask = sky2_read32(hw, B0_IMSK);
|
|
|
- imask &= ~portirq_msk[port];
|
|
|
- sky2_write32(hw, B0_IMSK, imask);
|
|
|
-
|
|
|
sky2_phy_power(hw, port, 0);
|
|
|
|
|
|
/* turn off LED's */
|
|
@@ -1750,13 +1750,13 @@ static void sky2_phy_intr(struct sky2_hw *hw, unsigned port)
|
|
|
struct sky2_port *sky2 = netdev_priv(dev);
|
|
|
u16 istatus, phystat;
|
|
|
|
|
|
+ if (!netif_running(dev))
|
|
|
+ return;
|
|
|
+
|
|
|
spin_lock(&sky2->phy_lock);
|
|
|
istatus = gm_phy_read(hw, port, PHY_MARV_INT_STAT);
|
|
|
phystat = gm_phy_read(hw, port, PHY_MARV_PHY_STAT);
|
|
|
|
|
|
- if (!netif_running(dev))
|
|
|
- goto out;
|
|
|
-
|
|
|
if (netif_msg_intr(sky2))
|
|
|
printk(KERN_INFO PFX "%s: phy interrupt status 0x%x 0x%x\n",
|
|
|
sky2->netdev->name, istatus, phystat);
|