diff mbox series

wifi: rtw89: pci: correct TX resource checking for PCI DMA channel of firmware command

Message ID 20240410011316.9906-1-pkshih@realtek.com
State New
Headers show
Series wifi: rtw89: pci: correct TX resource checking for PCI DMA channel of firmware command | expand

Commit Message

Ping-Ke Shih April 10, 2024, 1:13 a.m. UTC
The DMA channel of firmware command doesn't use TX WD (WiFi descriptor), so
don't need to consider number of TX WD as factor of TX resource. Otherwise,
during pause state (a transient state to switch to/from low power mode)
firmware commands could be dropped and driver throws warnings suddenly:

   rtw89_8852ce 0000:04:00.0: no tx fwcmd resource
   rtw89_8852ce 0000:04:00.0: failed to send h2c

The case we met is that driver sends RSSI strength of firmware command at
RX path that could be running concurrently with switching low power mode.
The missing of this firmware command doesn't affect user experiences,
because the RSSI strength will be updated again after a while.

The DMA descriptors of normal packets has three layers like:

  +-------+
  | TX BD | (*n elements)
  +-------+
      |
      |   +-------+
      +-> | TX WD | (*m elements)
          +-------+
              |
              |   +--------+
              +-> |   SKB  |
                  +--------+

And, firmware command queue (TXCH 12) is a special queue that has only
two layers:

  +-------+
  | TX BD | (*n elements)
  +-------+
      |
      |   +------------------+
      +-> | firmware command |
          +------------------+

Fixes: 4a29213cd775 ("wifi: rtw89: pci: correct TX resource checking in low power mode")
Cc: stable@vger.kernel.org
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
---
 drivers/net/wireless/realtek/rtw89/pci.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Ping-Ke Shih April 18, 2024, 1:06 a.m. UTC | #1
Ping-Ke Shih <pkshih@realtek.com> wrote:

> The DMA channel of firmware command doesn't use TX WD (WiFi descriptor), so
> don't need to consider number of TX WD as factor of TX resource. Otherwise,
> during pause state (a transient state to switch to/from low power mode)
> firmware commands could be dropped and driver throws warnings suddenly:
> 
>    rtw89_8852ce 0000:04:00.0: no tx fwcmd resource
>    rtw89_8852ce 0000:04:00.0: failed to send h2c
> 
> The case we met is that driver sends RSSI strength of firmware command at
> RX path that could be running concurrently with switching low power mode.
> The missing of this firmware command doesn't affect user experiences,
> because the RSSI strength will be updated again after a while.
> 
> The DMA descriptors of normal packets has three layers like:
> 

1 patch(es) applied to rtw-next branch of rtw.git, thanks.

c6330b129786 wifi: rtw89: pci: correct TX resource checking for PCI DMA channel of firmware command

---
https://github.com/pkshih/rtw.git
diff mbox series

Patch

diff --git a/drivers/net/wireless/realtek/rtw89/pci.c b/drivers/net/wireless/realtek/rtw89/pci.c
index c734f6702546..7b00476a5dee 100644
--- a/drivers/net/wireless/realtek/rtw89/pci.c
+++ b/drivers/net/wireless/realtek/rtw89/pci.c
@@ -1114,7 +1114,8 @@  u32 __rtw89_pci_check_and_reclaim_tx_resource_noio(struct rtw89_dev *rtwdev,
 
 	spin_lock_bh(&rtwpci->trx_lock);
 	cnt = rtw89_pci_get_avail_txbd_num(tx_ring);
-	cnt = min(cnt, wd_ring->curr_num);
+	if (txch != RTW89_TXCH_CH12)
+		cnt = min(cnt, wd_ring->curr_num);
 	spin_unlock_bh(&rtwpci->trx_lock);
 
 	return cnt;