Search Linux Wireless

Re: [PATCH V2 3/6] brcmfmac: reserve 2 credits for host tx control path

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





Dmitry Osipenko 於 8/12/2020 10:22 PM 寫道:
12.08.2020 07:03, Wright Feng пишет:
...
Hi Dmitry,

The last time the drivers I used is v5.4 and I was not able to see low
throughput issue as you saw.
At this time, I changed the base to tag wt-2020-0727 and I am able to
reproduce the issue as you did.
TX throughput with wt-2020-07-27 FMAC is 190 Kbits/sec


The root cause should be that tx_max and tx_seq are circle positive
numbers, it should not use ">" to check if it still exists available TX
credit.
With the solution below, I am able to get the normal throughput.
TX throughput with wt-2020-07-27+patch FMAC is 40.0 Mbits/sec

Regarding another case about 40Mbit/s, I am using 4329b0(4329/2) chip to
verify the throughput because we are not able to find 4329b1(4329/3)
which is very old product around 10 years ago.
The firmware I am using is the same version but the build is for 4329b0.
(private internal build - 4.220.48). My host platform is x86_64 with 4
cores on Linux kernel 4.12. I will try your NVRAM when I have time to
see if I can find anything.

---
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
index e8712ad..50c8107 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
@@ -664,9 +664,14 @@ 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 */
---

Wright, thank you very much for the patch! It fixes the problem!

Tested-by: Dmitry Osipenko <digetx@xxxxxxxxx>

The 4329/3 is indeed an older chip, but it's also an "old" device (Acer
A500 tablet from 2011/12) that I'm using. Upstream v5.9 kernel just got
support for the A500. There are quite a lot of other older devices with
4329/3 in a wild that are still very usable if user can wipe off ancient
Android and put a modern Linux distro on them. Today that A500 tablet is
still rocking hard running a modern upstream kernel, opensource drivers
and KDE Plasma 5. The 15Mbit is a good enough speed for a lot of things,
but of course 40Mbit will be better. Would be great if you could try to
help with improving the speed :) Please feel free to contact me at any
time if you'll have patches to try!

Dmitry,
Thanks for the verification. The patch will be submitted to upstream within two days. And with regards to low THP problem on Acer A500 tablet, I will create another mail thread to discuss with you.





[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux