Skip to content

Commit

Permalink
Merge branch 'mediatek-rx-path-enhancements'
Browse files Browse the repository at this point in the history
Sean Wang says:

====================
net: ethernet: mediatek: add enhancements to RX path

Changes since v1:
- fix message typos and add coverletter

Changes since v2:
- split from the previous series for submitting add enhancements as
a series targeting 'net-next' and add indents before comments.

Changes since v3:
- merge the patch using PDMA RX path
- fixed the input of mtk_poll_rx is with the remaining budget

Changes since v4:
- save one wmb and register update when no packet is being handled
inside mtk_poll_rx call
- fixed incorrect return packet count from mtk_napi_rx
====================

Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
David S. Miller committed Sep 6, 2016
2 parents 0da4d28 + 41156ce commit bc58493
Showing 1 changed file with 15 additions and 11 deletions.
26 changes: 15 additions & 11 deletions drivers/net/ethernet/mediatek/mtk_eth_soc.c
Original file line number Diff line number Diff line change
Expand Up @@ -895,17 +895,18 @@ static int mtk_poll_rx(struct napi_struct *napi, int budget,
rxd->rxd2 = RX_DMA_PLEN0(ring->buf_size);

ring->calc_idx = idx;

done++;
}

if (done) {
/* make sure that all changes to the dma ring are flushed before
* we continue
*/
wmb();
mtk_w32(eth, ring->calc_idx, MTK_PRX_CRX_IDX0);
done++;
}

if (done < budget)
mtk_w32(eth, MTK_RX_DONE_INT, MTK_PDMA_INT_STATUS);

return done;
}

Expand Down Expand Up @@ -1024,10 +1025,13 @@ static int mtk_napi_rx(struct napi_struct *napi, int budget)
struct mtk_eth *eth = container_of(napi, struct mtk_eth, rx_napi);
u32 status, mask;
int rx_done = 0;
int remain_budget = budget;

mtk_handle_status_irq(eth);

poll_again:
mtk_w32(eth, MTK_RX_DONE_INT, MTK_PDMA_INT_STATUS);
rx_done = mtk_poll_rx(napi, budget, eth);
rx_done = mtk_poll_rx(napi, remain_budget, eth);

if (unlikely(netif_msg_intr(eth))) {
status = mtk_r32(eth, MTK_PDMA_INT_STATUS);
Expand All @@ -1036,18 +1040,18 @@ static int mtk_napi_rx(struct napi_struct *napi, int budget)
"done rx %d, intr 0x%08x/0x%x\n",
rx_done, status, mask);
}

if (rx_done == budget)
if (rx_done == remain_budget)
return budget;

status = mtk_r32(eth, MTK_PDMA_INT_STATUS);
if (status & MTK_RX_DONE_INT)
return budget;

if (status & MTK_RX_DONE_INT) {
remain_budget -= rx_done;
goto poll_again;
}
napi_complete(napi);
mtk_irq_enable(eth, MTK_PDMA_INT_MASK, MTK_RX_DONE_INT);

return rx_done;
return rx_done + budget - remain_budget;
}

static int mtk_tx_alloc(struct mtk_eth *eth)
Expand Down

0 comments on commit bc58493

Please sign in to comment.