mt76: drop MCU header size from buffer size in __mt76_mcu_send_firmware
authorSean Wang <sean.wang@mediatek.com>
Fri, 17 Sep 2021 23:54:21 +0000 (07:54 +0800)
committerFelix Fietkau <nbd@nbd.name>
Wed, 20 Oct 2021 08:36:49 +0000 (10:36 +0200)
Each firmware piece with mt7915 and mt7921 do not have the MCU header to
reroute the packet to the internal RAM. So we do not need to consider the
MCU header size in __mt76_mcu_send_firmware.
Move the MCU header overhead calculation to mt76_mcu_send_firmware (for
older chipsets)

Fixes: e57b7901469f ("mt76: add mac80211 driver for MT7915 PCIe-based chipsets")
Fixes: 1c099ab44727 ("mt76: mt7921: add MCU support")
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mcu.c
drivers/net/wireless/mediatek/mt76/mt76.h
drivers/net/wireless/mediatek/mt76/mt7915/mcu.c

index 946694af5dcc165927d53c8fc1106d50bff472cc..3f94c37251df1573a163cbed47dc8dd9ea935f03 100644 (file)
@@ -112,7 +112,7 @@ int __mt76_mcu_send_firmware(struct mt76_dev *dev, int cmd, const void *data,
        int err, cur_len;
 
        while (len > 0) {
-               cur_len = min_t(int, max_len - dev->mcu_ops->headroom, len);
+               cur_len = min_t(int, max_len, len);
 
                err = mt76_mcu_send_msg(dev, cmd, data, cur_len, false);
                if (err)
index 59ca90d499781c6ace3efde9878da10be6f85b01..520fd162d40618dd10b40e2a96771a5d5d1f2234 100644 (file)
@@ -1264,7 +1264,9 @@ 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);
+       int max_len = 4096 - dev->mcu_ops->headroom;
+
+       return __mt76_mcu_send_firmware(dev, cmd, data, len, max_len);
 }
 
 static inline int
index 7415b9391175594244473c3431930db6173b672e..c6fd14f539629f6896944213178494807480c4ee 100644 (file)
@@ -2648,8 +2648,8 @@ static int mt7915_load_patch(struct mt7915_dev *dev)
                        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;
@@ -2717,8 +2717,8 @@ mt7915_mcu_send_ram_firmware(struct mt7915_dev *dev,
                        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;