net/faraday: Clear stale interrupts
authorGavin Shan <gwshan@linux.vnet.ibm.com>
Wed, 21 Sep 2016 23:05:01 +0000 (08:35 +0930)
committerDavid S. Miller <davem@davemloft.net>
Thu, 22 Sep 2016 07:31:14 +0000 (03:31 -0400)
There is stale interrupt (PHYSTS_CHG in ISR, bit#6 in 0x0) from
the bootloader (uboot) when enabling the MAC. The stale interrupts
aren't part of kernel and should be cleared.

This clears the stale interrupts in ISR (0x0) when enabling the MAC.

Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
Signed-off-by: Joel Stanley <joel@jms.id.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/faraday/ftgmac100.c

index 47f512224b573c8367feb40388f583f015ca0f40..189373743ddfcb594326590e11d5cc4c89fa2f77 100644 (file)
@@ -1112,6 +1112,7 @@ static int ftgmac100_poll(struct napi_struct *napi, int budget)
 static int ftgmac100_open(struct net_device *netdev)
 {
        struct ftgmac100 *priv = netdev_priv(netdev);
+       unsigned int status;
        int err;
 
        err = ftgmac100_alloc_buffers(priv);
@@ -1137,6 +1138,11 @@ static int ftgmac100_open(struct net_device *netdev)
 
        ftgmac100_init_hw(priv);
        ftgmac100_start_hw(priv, priv->use_ncsi ? 100 : 10);
+
+       /* Clear stale interrupts */
+       status = ioread32(priv->base + FTGMAC100_OFFSET_ISR);
+       iowrite32(status, priv->base + FTGMAC100_OFFSET_ISR);
+
        if (netdev->phydev)
                phy_start(netdev->phydev);
        else if (priv->use_ncsi)