Skip to content

Commit 1f14a62

Browse files
committed
Bluetooth: btusb: Fix failing to init controllers with operation firmware
Some firmware when operation don't may have broken versions leading to error like the following: [ 6.176482] Bluetooth: hci0: Firmware revision 0.0 build 121 week 7 2021 [ 6.177906] bluetooth hci0: Direct firmware load for intel/ibt-20-0-0.sfi failed with error -2 [ 6.177910] Bluetooth: hci0: Failed to load Intel firmware file intel/ibt-20-0-0.sfi (-2) Since we load the firmware file just to check if its version had changed comparing to the one already loaded we can just skip since the firmware is already operation. Fixes: ac05654 ("Bluetooth: btintel: Check firmware version before download") Signed-off-by: Luiz Augusto von Dentz <[email protected]> Signed-off-by: Marcel Holtmann <[email protected]>
1 parent a83d958 commit 1f14a62

File tree

1 file changed

+21
-2
lines changed

1 file changed

+21
-2
lines changed

drivers/bluetooth/btusb.c

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2527,10 +2527,17 @@ static int btusb_intel_download_firmware_newgen(struct hci_dev *hdev,
25272527
}
25282528

25292529
btusb_setup_intel_newgen_get_fw_name(ver, fwname, sizeof(fwname), "sfi");
2530-
err = request_firmware(&fw, fwname, &hdev->dev);
2530+
err = firmware_request_nowarn(&fw, fwname, &hdev->dev);
25312531
if (err < 0) {
2532+
if (!test_bit(BTUSB_BOOTLOADER, &data->flags)) {
2533+
/* Firmware has already been loaded */
2534+
set_bit(BTUSB_FIRMWARE_LOADED, &data->flags);
2535+
return 0;
2536+
}
2537+
25322538
bt_dev_err(hdev, "Failed to load Intel firmware file %s (%d)",
25332539
fwname, err);
2540+
25342541
return err;
25352542
}
25362543

@@ -2680,12 +2687,24 @@ static int btusb_intel_download_firmware(struct hci_dev *hdev,
26802687
err = btusb_setup_intel_new_get_fw_name(ver, params, fwname,
26812688
sizeof(fwname), "sfi");
26822689
if (err < 0) {
2690+
if (!test_bit(BTUSB_BOOTLOADER, &data->flags)) {
2691+
/* Firmware has already been loaded */
2692+
set_bit(BTUSB_FIRMWARE_LOADED, &data->flags);
2693+
return 0;
2694+
}
2695+
26832696
bt_dev_err(hdev, "Unsupported Intel firmware naming");
26842697
return -EINVAL;
26852698
}
26862699

2687-
err = request_firmware(&fw, fwname, &hdev->dev);
2700+
err = firmware_request_nowarn(&fw, fwname, &hdev->dev);
26882701
if (err < 0) {
2702+
if (!test_bit(BTUSB_BOOTLOADER, &data->flags)) {
2703+
/* Firmware has already been loaded */
2704+
set_bit(BTUSB_FIRMWARE_LOADED, &data->flags);
2705+
return 0;
2706+
}
2707+
26892708
bt_dev_err(hdev, "Failed to load Intel firmware file %s (%d)",
26902709
fwname, err);
26912710
return err;

0 commit comments

Comments
 (0)