From 6849e29ed92ebd0d8c6909fb04b78bd1f869eac2 Mon Sep 17 00:00:00 2001 From: Ryder Lee Date: Sat, 1 Feb 2020 23:33:49 +0800 Subject: [PATCH] mt76: mt7615: add starec operating flow for firmware v2 Add fw_ver in mt7615_dev to check firmware version, and adjust mt7615_mcu_send_sta_rec() to adapt firmware v2 changes. Signed-off-by: Ryder Lee Signed-off-by: Shayne Chen Tested-by: Sean Wang Signed-off-by: Felix Fietkau --- .../net/wireless/mediatek/mt76/mt7615/mcu.c | 20 +++++++++++++------ .../wireless/mediatek/mt76/mt7615/mt7615.h | 5 +++++ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c index 90ff69610c41..9cebf5797fcf 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +++ b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c @@ -551,6 +551,11 @@ static int mt7615_load_n9(struct mt7615_dev *dev, const char *name) sizeof(dev->mt76.hw->wiphy->fw_version), "%.10s-%.15s", hdr->fw_ver, hdr->build_date); + if (!strncmp(hdr->fw_ver, "2.0", sizeof(hdr->fw_ver))) + dev->fw_ver = MT7615_FIRMWARE_V2; + else + dev->fw_ver = MT7615_FIRMWARE_V1; + out: release_firmware(fw); return ret; @@ -1121,10 +1126,11 @@ static int mt7615_mcu_send_sta_rec(struct mt7615_dev *dev, u8 *req, u8 *wreq, u8 wlen, bool enable) { - u32 slen = wreq - req; + bool is_v1 = (dev->fw_ver == MT7615_FIRMWARE_V1); + u32 slen = is_v1 ? wreq - req : wreq - req + wlen; int ret; - if (!enable) { + if (is_v1 && !enable) { ret = __mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_STA_REC_UPDATE, req, slen, true); @@ -1135,10 +1141,12 @@ mt7615_mcu_send_sta_rec(struct mt7615_dev *dev, u8 *req, u8 *wreq, wreq, wlen, true); } - ret = __mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_WTBL_UPDATE, wreq, - wlen, true); - if (ret) - return ret; + if (is_v1) { + ret = __mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_WTBL_UPDATE, + wreq, wlen, true); + if (ret) + return ret; + } return __mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_STA_REC_UPDATE, req, slen, true); diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h b/drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h index 688d45261696..2ecfddbd5ad4 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h +++ b/drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h @@ -36,6 +36,9 @@ #define MT7622_FIRMWARE_N9 "mediatek/mt7622_n9.bin" #define MT7622_ROM_PATCH "mediatek/mt7622_rom_patch.bin" +#define MT7615_FIRMWARE_V1 1 +#define MT7615_FIRMWARE_V2 2 + #define MT7615_EEPROM_SIZE 1024 #define MT7615_TOKEN_SIZE 4096 @@ -178,6 +181,8 @@ struct mt7615_dev { spinlock_t token_lock; struct idr token; + + u8 fw_ver; }; enum { -- GitLab