All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ping-Ke Shih <pkshih@realtek.com>
To: Mehmet Fide <mehmet.fide@gmail.com>,
	Bitterblue Smith <rtl8821cerfe2@gmail.com>,
	"linux-wireless@vger.kernel.org" <linux-wireless@vger.kernel.org>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: RE: [PATCH rtw-next v2] wifi: rtw88: usb: do not log transfers lost to a mode switch
Date: Thu, 13 Aug 2026 00:41:16 +0000	[thread overview]
Message-ID: <72ff0d793d61415eb9fd1c513abdcc5a@realtek.com> (raw)
In-Reply-To: <20260812173215.4090278-1-mehmet.fide@gmail.com>

Mehmet Fide <mehmet.fide@gmail.com> wrote:
> An RTL8822BU or RTL8822CU is asked to come back as a USB 3 device by
> rtw_usb_switch_mode_new(). The chip powers off its MAC and leaves the bus
> while the last control transfers of that sequence are still in flight, so
> they complete with -EPROTO and the driver reports them as errors:
> 
>   rtw_8822bu 1-1:1.0: Firmware version 27.2.0, H2C version 13
>   rtw_8822bu 1-1:1.0: write register 0xc4 failed with -71
>   usb 1-1: USB disconnect, device number 2
>   usbcore: registered new interface driver rtw_8822bu
>   rtw_8822bu 1-1:1.0: Firmware version 27.2.0, H2C version 13
> 
> Register 0xc4 is REG_PAD_CTRL2 and the access losing the race is the
> rtw_write32_set() that ends the switch sequence, a few milliseconds before
> the disconnect. Which transfer gets caught varies from boot to boot: 0xc4
> is in the "always on" section, so every write to it is followed by a second
> one from rtw_usb_reg_sec(), and sometimes that is the one that fails:
> 
>   rtw_8822bu 1-1:1.0: rtw_usb_reg_sec: reg 0x4e0, usb write 1 fail, status: -71

How about changing to use WARN_ONCE()?

[...]

> @@ -1098,6 +1098,7 @@ static int rtw_usb_switch_mode_old(struct rtw_dev *rtwdev)
>                         rtw_write8(rtwdev, REG_ACLK_MON, 0x1);
>                         rtw_write8(rtwdev, 0x3d, 0x3);
>                         /* usb disconnect */
> +                       rtwusb->switching_mode = true;
>                         rtw_write8(rtwdev, REG_SYS_PW_CTRL + 1, 0x80);
>                         return 1;
>                 }

[...]

> @@ -1151,6 +1153,11 @@ static int rtw_usb_switch_mode_new(struct rtw_dev *rtwdev)
>         rtw_write32(rtwdev, REG_PAD_CTRL2, pad_ctrl2);
>         rtw_write8(rtwdev, REG_PAD_CTRL2 + 1, 4);
> 
> +       /* From here the chip powers off its MAC and re-enumerates, so it can
> +        * leave the bus while a control transfer is still in flight.
> +        */
> +       rtwusb->switching_mode = true;
> +
>         rtw_write16_set(rtwdev, REG_SYS_PW_CTRL, BIT_APFM_OFFMAC);
>         usleep_range(1000, 1001);
>         rtw_write32_set(rtwdev, REG_PAD_CTRL2, BIT_NO_PDN_CHIPOFF_V1);

If WARN_ONCE isn't suitable, move these two assignments to caller.
I think only set `rtwusb->switching_mode = true` only if the return
value is 1. 



      reply	other threads:[~2026-08-13  0:41 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-12 12:28 [PATCH wireless-next] wifi: rtw88: usb: do not log transfers lost to a mode switch Mehmet Fide
2026-08-12 17:01 ` Bitterblue Smith
2026-08-12 17:32 ` [PATCH rtw-next v2] " Mehmet Fide
2026-08-13  0:41   ` Ping-Ke Shih [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=72ff0d793d61415eb9fd1c513abdcc5a@realtek.com \
    --to=pkshih@realtek.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=mehmet.fide@gmail.com \
    --cc=rtl8821cerfe2@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.