Message ID | 1472896767-18352-2-git-send-email-sean.wang@mediatek.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 03/09/2016 11:59, sean.wang@mediatek.com wrote: > From: Sean Wang <sean.wang@mediatek.com> > > The patch makes move wmb() to outside the loop that could help > RX path handling more faster although that RX descriptors aren't > freed for DMA to use as soon as possible, but based on my experiment > and the result shows it still can reach about 943Mbpis without > performance drop that is tested based on the setup with one port > using Giga PHY and 256 RX descriptors for DMA to move. > > Signed-off-by: Sean Wang <sean.wang@mediatek.com> gave it a quick spin on my hardware and it works well even when using more than 1 gmac. Acked-by: John Crispin <john@phrozen.org> > --- > drivers/net/ethernet/mediatek/mtk_eth_soc.c | 11 ++++++----- > 1 file changed, 6 insertions(+), 5 deletions(-) > > diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c > index 431b851..a1bdb53 100644 > --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c > +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c > @@ -890,13 +890,14 @@ release_desc: > rxd->rxd2 = RX_DMA_PLEN0(ring->buf_size); > > ring->calc_idx = idx; > - /* 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++; > } > + /* 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); > > if (done < budget) > mtk_w32(eth, MTK_RX_DONE_INT, MTK_PDMA_INT_STATUS); >
diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c index 431b851..a1bdb53 100644 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c @@ -890,13 +890,14 @@ release_desc: rxd->rxd2 = RX_DMA_PLEN0(ring->buf_size); ring->calc_idx = idx; - /* 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++; } + /* 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); if (done < budget) mtk_w32(eth, MTK_RX_DONE_INT, MTK_PDMA_INT_STATUS);