]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
Bluetooth: btmtk: add status check in mt79xx firmware setup
authorChris Lu <chris.lu@mediatek.com>
Tue, 3 Feb 2026 06:25:09 +0000 (14:25 +0800)
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Fri, 10 Apr 2026 14:21:19 +0000 (10:21 -0400)
To prevent abnormal controller states, it is necessary to check
status in another part of the mt79xx firmware setup. During this
process, receiving the 'BTMTK_WMT_PATCH_PROGRESS' status is unexpected.
If this occurs, it should be treated as an error, and driver must be
prevented from continuing execution.

Signed-off-by: Chris Lu <chris.lu@mediatek.com>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
drivers/bluetooth/btmtk.c

index 0ada5a12130dc2190f4c5ab02846e7667357d8d4..5c62b802a19945b722416f23429ae194bc8885da 100644 (file)
@@ -213,7 +213,6 @@ int btmtk_setup_firmware_79xx(struct hci_dev *hdev, const char *fwname,
 
                        fw_ptr += section_offset;
                        wmt_params.op = BTMTK_WMT_PATCH_DWNLD;
-                       wmt_params.status = NULL;
 
                        while (dl_size > 0) {
                                dlen = min_t(int, 250, dl_size);
@@ -231,7 +230,14 @@ int btmtk_setup_firmware_79xx(struct hci_dev *hdev, const char *fwname,
                                wmt_params.data = fw_ptr;
 
                                err = wmt_cmd_sync(hdev, &wmt_params);
-                               if (err < 0) {
+                               /* Status BTMTK_WMT_PATCH_PROGRESS indicates firmware is
+                                * in process of being downloaded, which is not expected to
+                                * occur here.
+                                */
+                               if (status == BTMTK_WMT_PATCH_PROGRESS) {
+                                       err = -EIO;
+                                       goto err_release_fw;
+                               } else if (err < 0) {
                                        bt_dev_err(hdev, "Failed to send wmt patch dwnld (%d)",
                                                   err);
                                        goto err_release_fw;