}
 EXPORT_SYMBOL_GPL(mt76_mcu_skb_send_and_get_msg);
 
-int mt76_mcu_send_firmware(struct mt76_dev *dev, int cmd, const void *data,
-                          int len)
+int __mt76_mcu_send_firmware(struct mt76_dev *dev, int cmd, const void *data,
+                            int len, int max_len)
 {
        int err, cur_len;
 
        while (len > 0) {
-               cur_len = min_t(int, 4096 - dev->mcu_ops->headroom, len);
+               cur_len = min_t(int, max_len - dev->mcu_ops->headroom, len);
 
                err = mt76_mcu_send_msg(dev, cmd, data, cur_len, false);
                if (err)
 
        return 0;
 }
-EXPORT_SYMBOL_GPL(mt76_mcu_send_firmware);
+EXPORT_SYMBOL_GPL(__mt76_mcu_send_firmware);
 
                              int len, bool wait_resp, struct sk_buff **ret);
 int mt76_mcu_skb_send_and_get_msg(struct mt76_dev *dev, struct sk_buff *skb,
                                  int cmd, bool wait_resp, struct sk_buff **ret);
-int mt76_mcu_send_firmware(struct mt76_dev *dev, int cmd, const void *data,
-                          int len);
+int __mt76_mcu_send_firmware(struct mt76_dev *dev, int cmd, const void *data,
+                            int len, int max_len);
+static inline int
+mt76_mcu_send_firmware(struct mt76_dev *dev, int cmd, const void *data,
+                      int len)
+{
+       return __mt76_mcu_send_firmware(dev, cmd, data, len, 4096);
+}
+
 static inline int
 mt76_mcu_send_msg(struct mt76_dev *dev, int cmd, const void *data, int len,
                  bool wait_resp)
 
                        goto out;
                }
 
-               ret = mt76_mcu_send_firmware(&dev->mt76, MCU_CMD_FW_SCATTER,
-                                            dl, len);
+               ret = __mt76_mcu_send_firmware(&dev->mt76, MCU_CMD_FW_SCATTER,
+                                              dl, len, 4096);
                if (ret) {
                        dev_err(dev->mt76.dev, "Failed to send patch\n");
                        goto out;
                        return err;
                }
 
-               err = mt76_mcu_send_firmware(&dev->mt76, MCU_CMD_FW_SCATTER,
-                                            data + offset, len);
+               err = __mt76_mcu_send_firmware(&dev->mt76, MCU_CMD_FW_SCATTER,
+                                              data + offset, len, 4096);
                if (err) {
                        dev_err(dev->mt76.dev, "Failed to send firmware.\n");
                        return err;