Commit 96b77bb0 authored by Ahmad Masri's avatar Ahmad Masri Committed by Kalle Valo

wil6210: increase the frequency of status ring hw tail update

The driver updates Tx status ring HW tail only after it finishes
processing the whole status ring, while the HW is still transmitting
from other transmit rings. This can cause back-pressure on HW if
no status entries are available.

Update HW tail of Tx status ring without waiting for the end of the
processing to help feeding back the HW with status entries and to allow
additional packet transmission.
Signed-off-by: default avatarAhmad Masri <amasri@codeaurora.org>
Signed-off-by: default avatarMaya Erez <merez@codeaurora.org>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent c903ece5
......@@ -26,6 +26,10 @@
#include "txrx.h"
#include "trace.h"
/* Max number of entries (packets to complete) to update the hwtail of tx
* status ring. Should be power of 2
*/
#define WIL_EDMA_TX_SRING_UPDATE_HW_TAIL 128
#define WIL_EDMA_MAX_DATA_OFFSET (2)
/* RX buffer size must be aligned to 4 bytes */
#define WIL_EDMA_RX_BUF_LEN_DEFAULT (2048)
......@@ -1155,7 +1159,7 @@ int wil_tx_sring_handler(struct wil6210_priv *wil,
struct wil_net_stats *stats;
struct wil_tx_enhanced_desc *_d;
unsigned int ring_id;
unsigned int num_descs;
unsigned int num_descs, num_statuses = 0;
int i;
u8 dr_bit; /* Descriptor Ready bit */
struct wil_ring_tx_status msg;
......@@ -1276,6 +1280,11 @@ int wil_tx_sring_handler(struct wil6210_priv *wil,
}
again:
num_statuses++;
if (num_statuses % WIL_EDMA_TX_SRING_UPDATE_HW_TAIL == 0)
/* update HW tail to allow HW to push new statuses */
wil_w(wil, sring->hwtail, sring->swhead);
wil_sring_advance_swhead(sring);
wil_get_next_tx_status_msg(sring, &msg);
......@@ -1286,8 +1295,9 @@ int wil_tx_sring_handler(struct wil6210_priv *wil,
if (desc_cnt)
wil_update_net_queues(wil, vif, NULL, false);
/* Update the HW tail ptr (RD ptr) */
wil_w(wil, sring->hwtail, (sring->swhead - 1) % sring->size);
if (num_statuses % WIL_EDMA_TX_SRING_UPDATE_HW_TAIL != 0)
/* Update the HW tail ptr (RD ptr) */
wil_w(wil, sring->hwtail, (sring->swhead - 1) % sring->size);
return desc_cnt;
}
......
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