Re: [BUG] rtw88_8723de: Wi-Fi and Bluetooth fail after warm reboot
From: Lovekesh Solanki
Date: Thu Aug 06 2026 - 06:48:49 EST
On Sun, Aug 02, 2026 at 11:40:51PM -0600, Snake Pilot wrote:
> Bluetooth: hci0: diag: hci_dev_shtudown: HCI_UP=1 HCI_UNREGISTER=0
> Bluetooth: hci0: diag: calling vendor shutdown callback
> Bluetooth: hci0: diag: btrtl_shutdown_realtek: sending HCI_OP_RESET
> Bluetooth: hci0: diag: btrtl_shutdown_realtek: HCI_OP_RESET completed OK
> Bluetooth: hci0: diag: vendor shutdown returned 0
I'm thinking if reset itself is the problem, since it does not run on
unloading manually but it does on shutdown.
> I did not find the btusb shutdown or rtw_pci_shutdown/D3hot diagnostic
> messages in the persisted previous-boot journal. The journal appears to end
> before the final device shutdown stage, so their absence from the journal
> does not necessarily mean that the callbacks were not invoked.
Yeah it seems it runs after journal is gone.
I suppose we should test by skipping HCI_OP_RESET if that improves the
issue.
Could you apply the attached patch only and start with a cold boot then
do a warm reboot and send the previous and current journal just like you
did before?
Thanks,
Lovekesh
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index 184e95c1625e..e7dd19b20cc8 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -3889,6 +3889,12 @@ static int btusb_shutdown_qca(struct hci_dev *hdev)
return 0;
}
+static int btusb_shutdown_rtl8723de(struct hci_dev *hdev)
+{
+ bt_dev_info(hdev, "skipping HCI_OP_RESET......");
+ return 0;
+}
+
static ssize_t force_poll_sync_read(struct file *file, char __user *user_buf,
size_t count, loff_t *ppos)
{
@@ -4338,6 +4344,9 @@ static int btusb_probe(struct usb_interface *intf,
set_bit(BTUSB_USE_ALT3_FOR_WBS, &data->flags);
}
+ if (id->idVendor == 0x0bda && id->idProduct == 0xb009)
+ hdev->shutdown = btusb_shutdown_rtl8723de;
+
if (id->driver_info & BTUSB_ACTIONS_SEMI) {
/* Support is advertised, but not implemented */
hci_set_quirk(hdev, HCI_QUIRK_BROKEN_ERR_DATA_REPORTING);