[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20250917104047-82a166f58532dffcb0a8d1a3-pchelkin@ispras>
Date: Wed, 17 Sep 2025 12:25:08 +0300
From: Fedor Pchelkin <pchelkin@...ras.ru>
To: Bitterblue Smith <rtl8821cerfe2@...il.com>
Cc: Ping-Ke Shih <pkshih@...ltek.com>,
Zong-Zhe Yang <kevin_yang@...ltek.com>, Po-Hao Huang <phhuang@...ltek.com>,
linux-wireless@...r.kernel.org, linux-kernel@...r.kernel.org, lvc-project@...uxtesting.org
Subject: Re: [PATCH rtw v3 3/5] wifi: rtw89: perform tx_wait completions for
USB part
On Mon, 01. Sep 21:46, Bitterblue Smith wrote:
> On 01/09/2025 20:45, Fedor Pchelkin wrote:
> > On Fri, 29. Aug 22:57, Bitterblue Smith wrote:
> >> The USB side doesn't have real TX ACK status reporting yet. I only
> >> learned recently how to do that. It looks like it will work about the
> >> same as in rtw88.
> >
> > Do you mean similar pattern already exists in rtw88? Could you give a
> > hint on how USB side TX ACK status reporting works there? At a quick
> > glance, I don't see how those TX URB complete callbacks differ from what
> > rtw89 has.
>
> Well, I assume we are talking about ACK status reporting. For example,
> when mac80211 detects beacon loss it sends a null frame, or a probe
> request (I'm not sure which is used when). It flags the frame with
> IEEE80211_TX_CTL_REQ_TX_STATUS, which means the driver has to report
> whether the AP sent ACK for the null frame/probe request or not. If
> the AP doesn't reply for a while, the connection is considered lost.
>
> A URB status of 0 only means that the URB was submitted successfully.
> It doesn't mean the chip actually transmitted anything, and it doesn't
> mean the chip received ACK from the AP.
>
> In order to receive these ACK status reports rtw89 will have to set
> a bit in the TX descriptor and place the skb in a queue to wait for
> a message from the firmware. ieee80211_tx_status_irqsafe() can be
> called when the firmware sends the message.
>
> This is for USB. It seems to work differently for PCIE in rtw89
> (rtw89_pci_release_rpp()). In rtw88 it's one mechanism for PCIE, USB,
> and SDIO.
>
> These are some functions to look at in rtw88:
>
> rtw_tx_report_enable()
> rtw_usb_write_port_tx_complete()
> rtw_tx_report_enqueue()
>
> rtw_usb_rx_handler()
> rtw_fw_c2h_cmd_rx_irqsafe()
> rtw_fw_c2h_cmd_handle() / rtw_fw_c2h_cmd_handle_ext()
> rtw_tx_report_handle()
Thanks for the detailed explanation of the above!
Apologies for the delay. So I've got the RTL8851BU chip in the meantime.
As rtw89-usb part is designated for not yet released v6.17 and is rather
a thing on its own, I'd better address it in a separate series.
With RTL8851BU there appears a possible firmware bug related to hardware
scan channel list, already reported at [1]. Eventually after some time of
hardware unresponsiveness it leads to the splat [2] and the device has to
be replugged. So I had to apply your proposed workaround to avoid
experiencing these failures. It happens with the first available firmware
version, too (0.29.41.0 (e210be8a)).
[1]: https://lore.kernel.org/linux-wireless/0abbda91-c5c2-4007-84c8-215679e652e1@gmail.com/
[2]:
rtw89_8851bu 2-1:1.2: rtw89_hw_scan_offload failed ret -110
rtw89_8851bu 2-1:1.2: c2h reg timeout
rtw89_8851bu 2-1:1.2: FW does not process h2c registers
rtw89_8851bu 2-1:1.2: HW scan failed: -110
rtw89_8851bu 2-1:1.2: Update probe request failed
rtw89_8851bu 2-1:1.2: Update probe request failed
rtw89_8851bu 2-1:1.2: timed out to flush queues
rtw89_8851bu 2-1:1.2: timed out to flush queues
rtw89_8851bu 2-1:1.2: FW does not process h2c registers
rtw89_8851bu 2-1:1.2: FW does not process h2c registers
rtw89_8851bu 2-1:1.2: [ERR]FWDL path ready
rtw89_8851bu 2-1:1.2: [ERR]fwdl 0x1E0 = 0x23
rtw89_8851bu 2-1:1.2: [ERR]fwdl 0x83F0 = 0x70000
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb890cce3
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb8900a77
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb8900a55
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb8900a53
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb890cce3
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb890cce3
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb8900a6f
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb890cce3
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb890cce3
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb8900a73
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb8900a59
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb8900a67
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb8900a57
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb890cce3
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb8900a67
rtw89_8851bu 2-1:1.2: [ERR]FWDL path ready
rtw89_8851bu 2-1:1.2: [ERR]fwdl 0x1E0 = 0x23
rtw89_8851bu 2-1:1.2: [ERR]fwdl 0x83F0 = 0x70000
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb890cce3
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb890cce3
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb890cce3
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb8900a75
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb8900a55
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb890cce3
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb890cce3
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb8900a69
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb890cce5
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb8900a51
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb890cce3
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb890cce3
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb890cce3
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb890cce3
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0xb890cce3
rtw89_8851bu 2-1:1.2: [ERR]FWDL path ready
rtw89_8851bu 2-1:1.2: [ERR]fwdl 0x1E0 = 0x23
rtw89_8851bu 2-1:1.2: usb read32 0x83f0 fail ret=-110 value=0x0 attempt=0
rtw89_8851bu 2-1:1.2: usb read32 0x83f0 fail ret=-110 value=0x0 attempt=1
rtw89_8851bu 2-1:1.2: usb read32 0x83f0 fail ret=-110 value=0x0 attempt=2
rtw89_8851bu 2-1:1.2: usb read32 0x83f0 fail ret=-110 value=0x0 attempt=3
rtw89_8851bu 2-1:1.2: usb read32 0x83f0 fail ret=-110 value=0x0 attempt=4
rtw89_8851bu 2-1:1.2: [ERR]fwdl 0x83F0 = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]H2C path ready
rtw89_8851bu 2-1:1.2: [ERR]fwdl 0x1E0 = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fwdl 0x83F0 = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]H2C path ready
rtw89_8851bu 2-1:1.2: [ERR]fwdl 0x1E0 = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fwdl 0x83F0 = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: [ERR]fw PC = 0x0
rtw89_8851bu 2-1:1.2: mac init fail, ret:-110
rtw89_8851bu 2-1:1.2: failed to leave idle state
rtw89_8851bu 2-1:1.2: Update probe request failed
rtw89_8851bu 2-1:1.2: rfkill hardware state changed to disable
Powered by blists - more mailing lists