OSDN Git Service

Bluetooth: btintel: Skip reading firmware file version while in bootloader mode
authorLokendra Singh <lokendra.singh@intel.com>
Tue, 23 Mar 2021 18:59:04 +0000 (11:59 -0700)
committerMarcel Holtmann <marcel@holtmann.org>
Thu, 25 Mar 2021 15:11:12 +0000 (16:11 +0100)
This skips parsing the firmware version information from the firmware
file while controller is in bootloader mode. As in bootloader mode,
we are supposed to patch unconditionally.

Signed-off-by: Lokendra Singh <lokendra.singh@intel.com>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Tested-by: Tedd Ho-Jeong An <tedd.an@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
drivers/bluetooth/btintel.c

index 6442acb..e44b699 100644 (file)
@@ -1031,6 +1031,10 @@ int btintel_download_firmware(struct hci_dev *hdev,
                /* Skip version checking */
                break;
        default:
+               /* 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,
@@ -1070,15 +1074,19 @@ int btintel_download_firmware_newgen(struct hci_dev *hdev,
        int err;
        u32 css_header_ver;
 
-       /* 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;
+       /* 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