net: stmmac: discard disabled flags in interrupt status register
authorNiklas Cassel <niklas.cassel@axis.com>
Fri, 9 Feb 2018 16:22:45 +0000 (17:22 +0100)
committerDavid S. Miller <davem@davemloft.net>
Fri, 9 Feb 2018 19:23:04 +0000 (14:23 -0500)
The interrupt status register in both dwmac1000 and dwmac4 ignores
interrupt enable (for dwmac4) / interrupt mask (for dwmac1000).
Therefore, if we want to check only the bits that can actually trigger
an irq, we have to filter the interrupt status register manually.

Commit 0a764db10337 ("stmmac: Discard masked flags in interrupt status
register") fixed this for dwmac1000. Fix the same issue for dwmac4.

Just like commit 0a764db10337 ("stmmac: Discard masked flags in
interrupt status register"), this makes sure that we do not get
spurious link up/link down prints.

Signed-off-by: Niklas Cassel <niklas.cassel@axis.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c

index ed222b20fcf19795ef8cdc1bc95cec8b8ed4f0f9..1e0a7668b7529155c48158668efc11e02f9906ba 100644 (file)
@@ -572,10 +572,12 @@ static int dwmac4_irq_status(struct mac_device_info *hw,
                             struct stmmac_extra_stats *x)
 {
        void __iomem *ioaddr = hw->pcsr;
-       u32 intr_status;
+       u32 intr_status = readl(ioaddr + GMAC_INT_STATUS);
+       u32 intr_enable = readl(ioaddr + GMAC_INT_EN);
        int ret = 0;
 
-       intr_status = readl(ioaddr + GMAC_INT_STATUS);
+       /* Discard disabled bits */
+       intr_status &= intr_enable;
 
        /* Not used events (e.g. MMC interrupts) are not handled. */
        if ((intr_status & mmc_tx_irq))