net: bcmgenet: handle UMAC_IRQ_MPD_R interrupt bit
authorFlorian Fainelli <f.fainelli@gmail.com>
Mon, 21 Jul 2014 22:29:26 +0000 (15:29 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 21 Jul 2014 23:04:31 +0000 (16:04 -0700)
Handle UMAC_IRQ_MPD_R interrupt bit in our workqueue to make sure that
we properly re-configure the GENET adapter from Wake-on-LAN.

bcmgenet_power_up() makes sure that we will not leave the UniMAC
hardware in MagicPacket matching mode, since that would prevent any
other packet from being received.

Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/genet/bcmgenet.c

index f5118f4cccf3a8ff53e0bf1be703b218fbf30843..319b94381d2e17156dad3452a30fd7dd76ee0ca1 100644 (file)
@@ -1836,6 +1836,13 @@ static void bcmgenet_irq_task(struct work_struct *work)
 
        netif_dbg(priv, intr, priv->dev, "%s\n", __func__);
 
+       if (priv->irq0_stat & UMAC_IRQ_MPD_R) {
+               priv->irq0_stat &= ~UMAC_IRQ_MPD_R;
+               netif_dbg(priv, wol, priv->dev,
+                         "magic packet detected, waking up\n");
+               bcmgenet_power_up(priv, GENET_POWER_WOL_MAGIC);
+       }
+
        /* Link UP/DOWN event */
        if ((priv->hw_params->flags & GENET_HAS_MDIO_INTR) &&
                (priv->irq0_stat & (UMAC_IRQ_LINK_UP|UMAC_IRQ_LINK_DOWN))) {