lkml.org 
[lkml]   [2019]   [Feb]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 061/152] net: stmmac: dwxgmac2: Only clear interrupts that are active
    Date
    4.19-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    [ Upstream commit fcc509eb10ff4794641e6ad3082118287a750d0a ]

    In DMA interrupt handler we were clearing all interrupts status, even
    the ones that were not active. Fix this and only clear the active
    interrupts.

    Cc: Joao Pinto <jpinto@synopsys.com>
    Cc: David S. Miller <davem@davemloft.net>
    Cc: Giuseppe Cavallaro <peppe.cavallaro@st.com>
    Cc: Alexandre Torgue <alexandre.torgue@st.com>
    Signed-off-by: Jose Abreu <joabreu@synopsys.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c | 6 +++---
    1 file changed, 3 insertions(+), 3 deletions(-)

    diff --git a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c b/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c
    index 20909036e0028..1c39305274440 100644
    --- a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c
    +++ b/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c
    @@ -260,6 +260,7 @@ static int dwxgmac2_dma_interrupt(void __iomem *ioaddr,
    struct stmmac_extra_stats *x, u32 chan)
    {
    u32 intr_status = readl(ioaddr + XGMAC_DMA_CH_STATUS(chan));
    + u32 intr_en = readl(ioaddr + XGMAC_DMA_CH_INT_EN(chan));
    int ret = 0;

    /* ABNORMAL interrupts */
    @@ -279,8 +280,7 @@ static int dwxgmac2_dma_interrupt(void __iomem *ioaddr,
    x->normal_irq_n++;

    if (likely(intr_status & XGMAC_RI)) {
    - u32 value = readl(ioaddr + XGMAC_DMA_CH_INT_EN(chan));
    - if (likely(value & XGMAC_RIE)) {
    + if (likely(intr_en & XGMAC_RIE)) {
    x->rx_normal_irq_n++;
    ret |= handle_rx;
    }
    @@ -292,7 +292,7 @@ static int dwxgmac2_dma_interrupt(void __iomem *ioaddr,
    }

    /* Clear interrupts */
    - writel(~0x0, ioaddr + XGMAC_DMA_CH_STATUS(chan));
    + writel(intr_en & intr_status, ioaddr + XGMAC_DMA_CH_STATUS(chan));

    return ret;
    }
    --
    2.19.1


    \
     
     \ /
      Last update: 2019-02-25 22:51    [W:2.919 / U:0.080 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site