* [BUG] rtw88_8723de: Wi-Fi and Bluetooth fail after warm reboot
@ 2026-07-29 7:13 Snake Pilot
2026-07-29 9:43 ` Lovekesh Solanki
0 siblings, 1 reply; 4+ messages in thread
From: Snake Pilot @ 2026-07-29 7:13 UTC (permalink / raw)
To: linux-wireless; +Cc: pkshih, linux-usb, linux-kernel
Hello,
I would like to report a reproducible warm-reboot issue affecting the
Realtek RTL8723DE combo device. I have included the reproduction steps,
relevant logs, and a tested workaround below.
The RTL8723DE combo device in this HP laptop is unusable after a warm
reboot. The PCIe Wi-Fi function fails to power on and the USB Bluetooth
function fails to enumerate. A cold boot restores both functions.
This prevents the laptop from using either Wi-Fi or Bluetooth after a
normal reboot. The problem is reproducible. I have also observed the
same behavior while using other Linux distributions.
System information:
Laptop: HP Laptop 15-da1xxx
Product SKU: 18K59LA#ABM
BIOS: Insyde F.48, 2024-04-26
Wi-Fi: 10ec:d723, subsystem 103c:8319
Bluetooth: USB 0bda:b009
Distribution: Soplos Linux Tyron RC4
Kernel: 7.1.3+deb14-amd64
Kernel package: Debian 7.1.3-1
Kernel taint: 0
Driver: in-tree rtw88_8723de
Wi-Fi firmware: 48.0.0
firmware-realtek: 20260622-1
The failing boot used the packaged Debian kernel with the in-tree driver,
no rtw88 module options, and no local shutdown workaround. The kernel
reported taint value 0 when the failure was captured.
Steps to reproduce:
1. Start the laptop after a complete power-off. Wi-Fi and Bluetooth
work normally.
2. Reboot Linux normally.
3. Wi-Fi and Bluetooth are both unavailable after the reboot.
4. Power off the laptop and hold the power button for about 30 seconds.
5. Start the laptop. Wi-Fi and Bluetooth work again.
Expected result:
Both functions should initialize after a warm reboot.
Actual result:
The Wi-Fi PCI function remains visible at 02:00.0, but the driver does
not bind. The relevant kernel messages are:
rtw88_8723de 0000:02:00.0: Firmware version 48.0.0, H2C version 0
rtw88_8723de 0000:02:00.0: failed to poll offset=0x5 mask=0x1 value=0x0
rtw88_8723de 0000:02:00.0: mac power on failed
rtw88_8723de 0000:02:00.0: failed to power on mac
rtw88_8723de 0000:02:00.0: failed to setup chip efuse info
rtw88_8723de 0000:02:00.0: failed to setup chip information
rtw88_8723de 0000:02:00.0: probe with driver rtw88_8723de failed with
error -16
During the same boot, the Bluetooth USB function fails before btusb can
bind:
usb 1-10: device descriptor read/64, error -71
usb usb1-port10: attempt power cycle
usb 1-10: device not accepting address 6, error -71
usb 1-10: device not accepting address 7, error -71
usb usb1-port10: unable to enumerate USB device
On a successful cold boot the same hardware produces:
usb 1-10: New USB device found, idVendor=0bda, idProduct=b009
rtw88_8723de 0000:02:00.0: Firmware version 48.0.0, H2C version 0
rtw88_8723de 0000:02:00.0 wlo1: renamed from wlan0
Disabling ASPM with the following module option did not change the result:
options rtw88_pci disable_aspm=1
The option was confirmed active during the test and was removed
afterwards.
The failure can be prevented by stopping NetworkManager and Bluetooth,
unloading btusb and rtw88_8723de, waiting three seconds, and then
rebooting. On the same system, this workaround completed three
consecutive warm reboots without either failure:
modprobe -r btusb
modprobe -r rtw88_8723de
sleep 3
reboot
The fact that both bus functions fail together, while an explicit driver
shutdown prevents the failure, appears to indicate that the combo device
retains an invalid power or reset state across warm reboot.
An older report describes the same behavior on an HP 15-da0xxx with the
same PCI and USB identifiers. It used the driver available in 2018, but
also reported USB error -71, MAC initialization failure after warm reboot,
and recovery after a cold boot:
https://bbs.archlinux.org/viewtopic.php?id=240675
https://bugzilla.kernel.org/show_bug.cgi?id=201239
A related RTL8723DE rtw88 power-sequence report is archived here:
https://www.spinics.net/lists/linux-wireless/msg200831.html
Please let me know which additional traces or tests would help determine
whether the shutdown sequence belongs in rtw88 or requires a platform
quirk.
Thank you for your time and help.
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [BUG] rtw88_8723de: Wi-Fi and Bluetooth fail after warm reboot 2026-07-29 7:13 [BUG] rtw88_8723de: Wi-Fi and Bluetooth fail after warm reboot Snake Pilot @ 2026-07-29 9:43 ` Lovekesh Solanki 2026-07-31 9:58 ` Snake Pilot 0 siblings, 1 reply; 4+ messages in thread From: Lovekesh Solanki @ 2026-07-29 9:43 UTC (permalink / raw) To: Snake Pilot; +Cc: linux-wireless, pkshih, linux-usb, linux-kernel Hi, Could you provide the following: 1) Full dmesg after warm and cold boot 2) 'journalctl -k -b -1' after warm boot Also please run a few tests, 1) Unload rtw88_8723de only or btusb only and perform warm reboot and see if both of them are broken while unloading only one driver 2) Repeat the above with a delay like sleep 0, 1, 3, 5 3) Try 'echo 1 | sudo tee /sys/bus/pci/devices/0000:02:00.0/reset' after warm reboot see if it pci function reset recovers wifi Also provide output of 'lspci -vv -s 02:00.0' and 'lsusb -t' after warm reboot. That would be helpful. Thanks, Lovekesh ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [BUG] rtw88_8723de: Wi-Fi and Bluetooth fail after warm reboot 2026-07-29 9:43 ` Lovekesh Solanki @ 2026-07-31 9:58 ` Snake Pilot 2026-07-31 20:30 ` Lovekesh Solanki 0 siblings, 1 reply; 4+ messages in thread From: Snake Pilot @ 2026-07-31 9:58 UTC (permalink / raw) To: Lovekesh Solanki; +Cc: linux-wireless, pkshih, linux-usb, linux-kernel [-- Attachment #1: Type: text/plain, Size: 3909 bytes --] Thank you for the test suggestions. I ran the requested matrix with the packaged Debian kernel 7.1.3+deb14-amd64 (Debian 7.1.3-1), the in-tree drivers, and kernel taint 0. For each module test I unloaded only the named module, added the requested explicit delay, and rebooted. The normal system shutdown took approximately four seconds in addition to the explicit delay. Results: Module unloaded Extra delay Wi-Fi Bluetooth ------------------------------------------------------------------------ rtw88_8723de 0 seconds failed (-16) failed (-71) rtw88_8723de 1 second failed (-16) failed (-71) rtw88_8723de 3 seconds failed (-16) failed (-71) rtw88_8723de 5 seconds failed (-16) failed (-71) btusb 0 seconds worked worked btusb 1 second worked worked btusb 3 seconds worked worked btusb 5 seconds worked worked Therefore, unloading only rtw88_8723de does not prevent either failure. Unloading only btusb prevents both failures, even with no explicit delay. The btusb tests used BlueZ 5.87-1, which was installed before that complete set of tests. The kernel, btusb module, firmware-realtek package, and Wi-Fi firmware did not change. The original Bluetooth failure is USB enumeration error -71 and occurs before btusb or BlueZ can bind. I also tested the PCI reset attribute after reproducing the failed warm boot. Before the reset, Wi-Fi had failed with the MAC power-on error and probe error -16, while Bluetooth had failed to enumerate with error -71. The device was present at 0000:02:00.0 in D0, reset_method reported "bus", and no Wi-Fi driver was bound. Writing 1 to: /sys/bus/pci/devices/0000:02:00.0/reset succeeded. I then requested a reprobe through /sys/bus/pci/drivers_probe. The reprobe failed again with the same messages: rtw88_8723de 0000:02:00.0: mac power on failed rtw88_8723de 0000:02:00.0: probe with driver rtw88_8723de failed with error -16 No Wi-Fi interface appeared, and Bluetooth remained absent. Thus, the PCI bus reset did not recover the device after the failure had occurred. The attached archive contains: MATRIX.txt Complete module/delay test matrix and overall conclusions. cold-boot-dmesg.txt Complete dmesg after at least 30 seconds powered off, using the same Debian kernel. cold-boot-lspci-vv.txt cold-boot-lsusb-t.txt PCI and USB topology from the successful controlled cold boot. failing-warm-boot-dmesg.txt failing-warm-boot-journal-kernel.txt Complete dmesg and journalctl -k output captured during the failing warm boot, before attempting the PCI reset. previous-boot-journal-kernel.txt Complete journalctl -k -b -1 output captured from the failing boot. failing-warm-boot-lspci-vv.txt failing-warm-boot-lsusb-t.txt PCI and USB state during the failure, before the reset. pci-reset-result.txt Timestamped result of writing 1 to the PCI reset attribute. post-pci-reset-dmesg.txt post-pci-reset-lspci-vv.txt Complete dmesg and PCI state after the reset and failed reprobe. package-versions.txt Exact BlueZ, firmware-realtek, and Debian kernel package versions. In the controlled cold-boot capture, USB 0bda:b009 enumerated normally, btusb bound, rtw88_8723de initialized firmware 48.0.0, and wlo1 appeared. No error -71, MAC power-on failure, or probe error -16 was logged. The results suggest that shutdown of the USB Bluetooth function changes the retained state of the whole combo device, while shutdown of the PCIe Wi-Fi function alone does not. Please let me know if you would like a trace around btusb disconnect, USB power management state, or a test of a specific reset sequence. Kind regards, Snake. [-- Attachment #2: rtl8723de-warm-reboot-evidence-20260730.tar.gz --] [-- Type: application/gzip, Size: 122559 bytes --] ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [BUG] rtw88_8723de: Wi-Fi and Bluetooth fail after warm reboot 2026-07-31 9:58 ` Snake Pilot @ 2026-07-31 20:30 ` Lovekesh Solanki 0 siblings, 0 replies; 4+ messages in thread From: Lovekesh Solanki @ 2026-07-31 20:30 UTC (permalink / raw) To: Snake Pilot; +Cc: linux-wireless, pkshih, linux-usb, linux-kernel [-- Attachment #1: Type: text/plain, Size: 2029 bytes --] Thanks for additional testing and logs, On Fri, Jul 31, 2026 at 03:58:32AM -0600, Snake Pilot wrote: > Module unloaded Extra delay Wi-Fi Bluetooth > ------------------------------------------------------------------------ > rtw88_8723de 0 seconds failed (-16) failed (-71) > rtw88_8723de 1 second failed (-16) failed (-71) > rtw88_8723de 3 seconds failed (-16) failed (-71) > rtw88_8723de 5 seconds failed (-16) failed (-71) > > btusb 0 seconds worked worked > btusb 1 second worked worked > btusb 3 seconds worked worked > btusb 5 seconds worked worked I'd say this rules out anything in rtw88 and we should focus on btusb, since unloading it fixed both functions. > No Wi-Fi interface appeared, and Bluetooth remained absent. Thus, the PCI bus > reset did not recover the device after the failure had occurred. Yeah and with -71 above seems like chip isn't answering read descriptors at all. The previous boot journal there's no other bluetooth activity logged after boot, so a graceful bluetooth shutdown doesn't seem to be happening on a warm reboot, but it does work when you explicitely unbind it. Problem could be in the power state chip may be left in a state warm reboot cannot clear. A somewhat similar issue with the Qualcomm QCA6390 combo 7e7bbddd029b ("qca6390 enable failure after warm reboot"), where they fixed it by simply making sure chip got proper reset/shutdown command before restart. This could also work for our case but needs confirmation. I'm attaching a small patch that just adds extra logging around the shutdown path for this chip to see what's been invoked and what not before a warm reboot and if it even completes. Could you apply it and perform a simple warm reboot and send the journalctl -k -b -1 after it? Regards, Lovekesh [-- Attachment #2: diag.patch --] [-- Type: text/plain, Size: 3982 bytes --] diff --git a/drivers/bluetooth/btrtl.c b/drivers/bluetooth/btrtl.c index 7f54d2d..b78feb7 100644 --- a/drivers/bluetooth/btrtl.c +++ b/drivers/bluetooth/btrtl.c @@ -1402,6 +1402,8 @@ int btrtl_shutdown_realtek(struct hci_dev *hdev) struct sk_buff *skb; int ret; + bt_dev_info(hdev, "diag: btrtl_shutdown_realtek: sending HCI_OP_RESET"); + /* According to the vendor driver, BT must be reset on close to avoid * firmware crash. */ @@ -1411,6 +1413,7 @@ int btrtl_shutdown_realtek(struct hci_dev *hdev) bt_dev_err(hdev, "HCI reset during shutdown failed"); return ret; } + bt_dev_info(hdev, "diag: btrtl_shutdown_realtek: HCI_OP_RESET completed OK"); kfree_skb(skb); return 0; diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c index 184e95c..382ff81 100644 --- a/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c @@ -4470,6 +4470,8 @@ static void btusb_disconnect(struct usb_interface *intf) struct btusb_data *data = usb_get_intfdata(intf); struct hci_dev *hdev; + bt_dev_info(data ? data->hdev : NULL, "diag: btusb_disconnect called for intf %p", intf); + BT_DBG("intf %p", intf); if (!data) @@ -4682,6 +4684,15 @@ static void btusb_coredump(struct device *dev) } #endif +static void btusb_shutdown(struct device *dev) +{ + struct usb_interface *intf = to_usb_interface(dev); + struct btusb_data *data = usb_get_intfdata(intf); + + pr_info("btusb: diag: device_shutdown() reached btusb for intf %p, hdev up=%d\n", + intf, data && data->hdev ? test_bit(HCI_UP, &data->hdev->flags) : -1); +} + static struct usb_driver btusb_driver = { .name = "btusb", .probe = btusb_probe, @@ -4692,11 +4703,12 @@ static struct usb_driver btusb_driver = { .supports_autosuspend = 1, .disable_hub_initiated_lpm = 1, -#ifdef CONFIG_DEV_COREDUMP .driver = { +#ifdef CONFIG_DEV_COREDUMP .coredump = btusb_coredump, - }, #endif + .shutdown = btusb_shutdown, + }, }; module_usb_driver(btusb_driver); diff --git a/drivers/net/wireless/realtek/rtw88/mac.c b/drivers/net/wireless/realtek/rtw88/mac.c index eaa928b..49c5d07 100644 --- a/drivers/net/wireless/realtek/rtw88/mac.c +++ b/drivers/net/wireless/realtek/rtw88/mac.c @@ -166,12 +166,16 @@ static int rtw_pwr_cmd_polling(struct rtw_dev *rtwdev, /* if PCIE, toggle BIT_PFM_WOWL and try again */ value = rtw_read8(rtwdev, REG_SYS_PW_CTRL); + rtw_info(rtwdev, "diag: pre-toggle REG_SYS_PW_CTRL=0x%02x, poll offset=0x%x want=0x%x\n", + value, offset, cmd->value & cmd->mask); if (rtwdev->chip->id == RTW_CHIP_TYPE_8723D) rtw_write8(rtwdev, REG_SYS_PW_CTRL, value & ~BIT_PFM_WOWL); rtw_write8(rtwdev, REG_SYS_PW_CTRL, value | BIT_PFM_WOWL); rtw_write8(rtwdev, REG_SYS_PW_CTRL, value & ~BIT_PFM_WOWL); if (rtwdev->chip->id == RTW_CHIP_TYPE_8723D) rtw_write8(rtwdev, REG_SYS_PW_CTRL, value | BIT_PFM_WOWL); + rtw_info(rtwdev, "diag: post-toggle REG_SYS_PW_CTRL=0x%02x, retry poll read=0x%02x\n", + rtw_read8(rtwdev, REG_SYS_PW_CTRL), rtw_read8(rtwdev, offset)); if (do_pwr_poll_cmd(rtwdev, offset, cmd->mask, cmd->value)) return 0; diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c index c8d1412..17dfc92 100644 --- a/net/bluetooth/hci_sync.c +++ b/net/bluetooth/hci_sync.c @@ -5416,11 +5416,19 @@ static int hci_dev_shutdown(struct hci_dev *hdev) bool was_userchannel = hci_dev_test_and_clear_flag(hdev, HCI_USER_CHANNEL); + bt_dev_info(hdev, "diag: hci_dev_shutdown: HCI_UP=%d HCI_UNREGISTER=%d shutdown_cb=%ps", + test_bit(HCI_UP, &hdev->flags), + hci_dev_test_flag(hdev, HCI_UNREGISTER), + hdev->shutdown); + if (!hci_dev_test_flag(hdev, HCI_UNREGISTER) && test_bit(HCI_UP, &hdev->flags)) { /* Execute vendor specific shutdown routine */ - if (hdev->shutdown) + if (hdev->shutdown) { + bt_dev_info(hdev, "diag: calling vendor shutdown callback"); err = hdev->shutdown(hdev); + bt_dev_info(hdev, "diag: vendor shutdown returned %d", err); + } } if (was_userchannel) ^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-07-31 20:30 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-07-29 7:13 [BUG] rtw88_8723de: Wi-Fi and Bluetooth fail after warm reboot Snake Pilot 2026-07-29 9:43 ` Lovekesh Solanki 2026-07-31 9:58 ` Snake Pilot 2026-07-31 20:30 ` Lovekesh Solanki
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.