forked from openwrt/openwrt
-
Notifications
You must be signed in to change notification settings - Fork 45
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Support bulking hardware TX queue by using xmit_more. Signed-off-by: Sieng Piaw Liew <[email protected]> [Amend commit description, fix kernel xmit_more exceptions] Signed-off-by: Álvaro Fernández Rojas <[email protected]>
- Loading branch information
Showing
1 changed file
with
54 additions
and
0 deletions.
There are no files selected for viewing
54 changes: 54 additions & 0 deletions
54
target/linux/bcm63xx/patches-5.4/443-bcm63xx_enet-support_xmit_more_in_bql.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
From 79bfb73319098bc4cb701139a6677dcdec99182f Mon Sep 17 00:00:00 2001 | ||
From: Sieng Piaw Liew <[email protected]> | ||
Date: Tue, 3 Nov 2020 08:14:35 +0800 | ||
Subject: [PATCH 2/2] bcm63xx: support xmit_more in BQL | ||
|
||
Support bulking hardware TX queue by using xmit_more. | ||
|
||
Signed-off-by: Sieng Piaw Liew <[email protected]> | ||
--- | ||
bcm63xx_enet.c | 10 ++++++---- | ||
1 file changed, 6 insertions(+), 4 deletions(-) | ||
|
||
--- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c | ||
+++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c | ||
@@ -638,14 +638,16 @@ bcm_enet_start_xmit(struct sk_buff *skb, | ||
|
||
netdev_sent_queue(dev, skb->len); | ||
|
||
- /* kick tx dma */ | ||
- enet_dmac_writel(priv, priv->dma_chan_en_mask, | ||
- ENETDMAC_CHANCFG, priv->tx_chan); | ||
- | ||
/* stop queue if no more desc available */ | ||
if (!priv->tx_desc_count) | ||
netif_stop_queue(dev); | ||
|
||
+ /* kick tx dma */ | ||
+ if(!netdev_xmit_more() || !priv->tx_desc_count) | ||
+ enet_dmac_writel(priv, priv->dma_chan_en_mask, | ||
+ ENETDMAC_CHANCFG, priv->tx_chan); | ||
+ | ||
+ | ||
dev->stats.tx_bytes += skb->len; | ||
dev->stats.tx_packets++; | ||
ret = NETDEV_TX_OK; | ||
@@ -2713,7 +2715,7 @@ static int bcm_enetsw_probe(struct platf | ||
priv->irq_rx = irq_rx; | ||
priv->irq_tx = irq_tx; | ||
priv->rx_ring_size = BCMENET_DEF_RX_DESC; | ||
- priv->tx_ring_size = BCMENET_DEF_TX_DESC; | ||
+ priv->tx_ring_size = BCMENETSW_DEF_TX_DESC; | ||
priv->dma_maxburst = BCMENETSW_DMA_MAXBURST; | ||
|
||
pd = dev_get_platdata(&pdev->dev); | ||
--- a/drivers/net/ethernet/broadcom/bcm63xx_enet.h | ||
+++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.h | ||
@@ -15,6 +15,7 @@ | ||
/* default number of descriptor */ | ||
#define BCMENET_DEF_RX_DESC 64 | ||
#define BCMENET_DEF_TX_DESC 32 | ||
+#define BCMENETSW_DEF_TX_DESC 48 | ||
|
||
/* maximum burst len for dma (4 bytes unit) */ | ||
#define BCMENET_DMA_MAXBURST 16 |