Commit 9a2a0862 authored by Wright Feng's avatar Wright Feng Committed by Kalle Valo

brcmfmac: reserve tx credit only when txctl is ready to send

The 4329 throughput drops from 40.2 Mbits/sec to 190 Kbits/sec in 2G
11n mode because the commit b41c232d ("brcmfmac: reserve 2 credits
for host tx control path"). To fix the issue, host driver only reserves
tx control credit when there is a txctl frame is pending to send. And
we also check available credit by using "not equal to 0" instead of
"greater than 0" because tx_max and tx_seq are circled positive numbers.
Reported-by: default avatarDmitry Osipenko <digetx@gmail.com>
Fixes: b41c232d ("brcmfmac: reserve 2 credits for host tx control path")
Signed-off-by: default avatarWright Feng <wright.feng@cypress.com>
Tested-by: default avatarDmitry Osipenko <digetx@gmail.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20200813070017.89023-1-wright.feng@cypress.com
parent 9123e3a7
......@@ -664,9 +664,15 @@ static void pkt_align(struct sk_buff *p, int len, int align)
/* To check if there's window offered */
static bool data_ok(struct brcmf_sdio *bus)
{
/* Reserve TXCTL_CREDITS credits for txctl */
return (bus->tx_max - bus->tx_seq) > TXCTL_CREDITS &&
((bus->tx_max - bus->tx_seq) & 0x80) == 0;
u8 tx_rsv = 0;
/* Reserve TXCTL_CREDITS credits for txctl when it is ready to send */
if (bus->ctrl_frame_stat)
tx_rsv = TXCTL_CREDITS;
return (bus->tx_max - bus->tx_seq - tx_rsv) != 0 &&
((bus->tx_max - bus->tx_seq - tx_rsv) & 0x80) == 0;
}
/* To check if there's window offered */
......
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