https://bugzilla.kernel.org/show_bug.cgi?id=213829 --- Comment #13 from Guillaume Binet (gbin@xxxxxxxxx) --- I continued to investigate. The major difference between a cold boot and a warm boot is the driver trying to load a firmware. For the science, I just disabled this behavior and it looks like the device and driver recover on a warm boot. Consider this a workaround and not a fix but at least it works for me, bluetooth is available on a warm boot. ``` pal ➜ linux-5.14.12 diff -u drivers/bluetooth/btintel.c.old drivers/bluetooth/btintel.c --- drivers/bluetooth/btintel.c.old 2021-10-17 13:56:23.583338189 -0400 +++ drivers/bluetooth/btintel.c 2021-10-17 14:01:16.113344330 -0400 @@ -1034,17 +1034,6 @@ /* Skip reading firmware file version in bootloader mode */ if (ver->fw_variant == 0x06) break; - - /* Skip download if firmware has the same version */ - if (btintel_firmware_version(hdev, ver->fw_build_num, - ver->fw_build_ww, ver->fw_build_yy, - fw, boot_param)) { - bt_dev_info(hdev, "Firmware already loaded"); - /* Return -EALREADY to indicate that the firmware has - * already been loaded. - */ - return -EALREADY; - } } /* The firmware variant determines if the device is in bootloader @@ -1074,21 +1063,6 @@ int err; u32 css_header_ver; - /* Skip reading firmware file version in bootloader mode */ - if (ver->img_type != 0x01) { - /* Skip download if firmware has the same version */ - if (btintel_firmware_version(hdev, ver->min_fw_build_nn, - ver->min_fw_build_cw, - ver->min_fw_build_yy, - fw, boot_param)) { - bt_dev_info(hdev, "Firmware already loaded"); - /* Return -EALREADY to indicate that firmware has - * already been loaded. - */ - return -EALREADY; - } - } - /* The firmware variant determines if the device is in bootloader * mode or is running operational firmware. The value 0x01 identifies * the bootloader and the value 0x03 identifies the operational ``` -- You may reply to this email to add a comment. You are receiving this mail because: You are the assignee for the bug.