Commit ae9f346d authored by Jose Abreu's avatar Jose Abreu Committed by David S. Miller

net: stmmac: dwxgmac2: Also use TBU interrupt to clean TX path

TBU interrupt is a normal interrupt and can be used to trigger the
cleaning of TX path. Lets check if it's active in DMA interrupt handler.

While at it, refactor a little bit the function:
	- Don't check if RI is enabled because at function exit we will
	  only clear the interrupts that are enabled so, no event will
	  be missed.

In my tests withe XGMAC2 this increased performance.
Signed-off-by: default avatarJose Abreu <joabreu@synopsys.com>
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: default avatarDavid S. Miller <davem@davemloft.net>
parent 1103d3a5
...@@ -193,9 +193,10 @@ ...@@ -193,9 +193,10 @@
#define XGMAC_AIE BIT(14) #define XGMAC_AIE BIT(14)
#define XGMAC_RBUE BIT(7) #define XGMAC_RBUE BIT(7)
#define XGMAC_RIE BIT(6) #define XGMAC_RIE BIT(6)
#define XGMAC_TBUE BIT(2)
#define XGMAC_TIE BIT(0) #define XGMAC_TIE BIT(0)
#define XGMAC_DMA_INT_DEFAULT_EN (XGMAC_NIE | XGMAC_AIE | XGMAC_RBUE | \ #define XGMAC_DMA_INT_DEFAULT_EN (XGMAC_NIE | XGMAC_AIE | XGMAC_RBUE | \
XGMAC_RIE | XGMAC_TIE) XGMAC_RIE | XGMAC_TBUE | XGMAC_TIE)
#define XGMAC_DMA_CH_Rx_WATCHDOG(x) (0x0000313c + (0x80 * (x))) #define XGMAC_DMA_CH_Rx_WATCHDOG(x) (0x0000313c + (0x80 * (x)))
#define XGMAC_RWT GENMASK(7, 0) #define XGMAC_RWT GENMASK(7, 0)
#define XGMAC_DMA_CH_STATUS(x) (0x00003160 + (0x80 * (x))) #define XGMAC_DMA_CH_STATUS(x) (0x00003160 + (0x80 * (x)))
...@@ -204,6 +205,7 @@ ...@@ -204,6 +205,7 @@
#define XGMAC_FBE BIT(12) #define XGMAC_FBE BIT(12)
#define XGMAC_RBU BIT(7) #define XGMAC_RBU BIT(7)
#define XGMAC_RI BIT(6) #define XGMAC_RI BIT(6)
#define XGMAC_TBU BIT(2)
#define XGMAC_TPS BIT(1) #define XGMAC_TPS BIT(1)
#define XGMAC_TI BIT(0) #define XGMAC_TI BIT(0)
......
...@@ -283,12 +283,10 @@ static int dwxgmac2_dma_interrupt(void __iomem *ioaddr, ...@@ -283,12 +283,10 @@ static int dwxgmac2_dma_interrupt(void __iomem *ioaddr,
x->normal_irq_n++; x->normal_irq_n++;
if (likely(intr_status & XGMAC_RI)) { if (likely(intr_status & XGMAC_RI)) {
if (likely(intr_en & XGMAC_RIE)) { x->rx_normal_irq_n++;
x->rx_normal_irq_n++; ret |= handle_rx;
ret |= handle_rx;
}
} }
if (likely(intr_status & XGMAC_TI)) { if (likely(intr_status & (XGMAC_TI | XGMAC_TBU))) {
x->tx_normal_irq_n++; x->tx_normal_irq_n++;
ret |= handle_tx; ret |= handle_tx;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment