Skip to content

Commit a63b75a

Browse files
StanleyYP Wangnbd168
authored andcommitted
wifi: mt76: connac: add firmware support for mt7992
Support firmware download and enable related AFE PLL for mt7992 chipsets. This is a preliminary patch for mt7992 chipsets support. Co-developed-by: Benjamin Lin <benjamin-jw.lin@mediatek.com> Signed-off-by: Benjamin Lin <benjamin-jw.lin@mediatek.com> Co-developed-by: Shayne Chen <shayne.chen@mediatek.com> Signed-off-by: Shayne Chen <shayne.chen@mediatek.com> Signed-off-by: StanleyYP Wang <StanleyYP.Wang@mediatek.com> Signed-off-by: Felix Fietkau <nbd@nbd.name>
1 parent 1e1e563 commit a63b75a

File tree

7 files changed

+45
-5
lines changed

7 files changed

+45
-5
lines changed

drivers/net/wireless/mediatek/mt76/mt76_connac.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,11 @@ static inline bool is_mt7996(struct mt76_dev *dev)
222222
return mt76_chip(dev) == 0x7990;
223223
}
224224

225+
static inline bool is_mt7992(struct mt76_dev *dev)
226+
{
227+
return mt76_chip(dev) == 0x7992;
228+
}
229+
225230
static inline bool is_mt7622(struct mt76_dev *dev)
226231
{
227232
if (!IS_ENABLED(CONFIG_MT7622_WMAC))

drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ int mt76_connac_mcu_init_download(struct mt76_dev *dev, u32 addr, u32 len,
6767
if ((!is_connac_v1(dev) && addr == MCU_PATCH_ADDRESS) ||
6868
(is_mt7921(dev) && addr == 0x900000) ||
6969
(is_mt7925(dev) && addr == 0x900000) ||
70-
(is_mt7996(dev) && addr == 0x900000))
70+
(is_mt7996(dev) && addr == 0x900000) ||
71+
(is_mt7992(dev) && addr == 0x900000))
7172
cmd = MCU_CMD(PATCH_START_REQ);
7273
else
7374
cmd = MCU_CMD(TARGET_ADDRESS_LEN_REQ);

drivers/net/wireless/mediatek/mt76/mt7996/init.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -888,6 +888,10 @@ static int mt7996_init_hardware(struct mt7996_dev *dev)
888888
int ret, idx;
889889

890890
mt76_wr(dev, MT_INT_SOURCE_CSR, ~0);
891+
if (is_mt7992(&dev->mt76)) {
892+
mt76_rmw(dev, MT_AFE_CTL_BAND_PLL_03(MT_BAND0), MT_AFE_CTL_BAND_PLL_03_MSB_EN, 0);
893+
mt76_rmw(dev, MT_AFE_CTL_BAND_PLL_03(MT_BAND1), MT_AFE_CTL_BAND_PLL_03_MSB_EN, 0);
894+
}
891895

892896
INIT_WORK(&dev->init_work, mt7996_init_work);
893897
INIT_WORK(&dev->wed_rro.work, mt7996_wed_rro_work);

drivers/net/wireless/mediatek/mt76/mt7996/mcu.c

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,20 @@
1010
#include "mac.h"
1111
#include "eeprom.h"
1212

13+
#define fw_name(_dev, name, ...) ({ \
14+
char *_fw; \
15+
switch (mt76_chip(&(_dev)->mt76)) { \
16+
case 0x7992: \
17+
_fw = MT7992_##name; \
18+
break; \
19+
case 0x7990: \
20+
default: \
21+
_fw = MT7996_##name; \
22+
break; \
23+
} \
24+
_fw; \
25+
})
26+
1327
struct mt7996_patch_hdr {
1428
char build_date[16];
1529
char platform[4];
@@ -2639,7 +2653,7 @@ static int mt7996_load_patch(struct mt7996_dev *dev)
26392653
return -EAGAIN;
26402654
}
26412655

2642-
ret = request_firmware(&fw, MT7996_ROM_PATCH, dev->mt76.dev);
2656+
ret = request_firmware(&fw, fw_name(dev, ROM_PATCH), dev->mt76.dev);
26432657
if (ret)
26442658
goto out;
26452659

@@ -2802,17 +2816,17 @@ static int mt7996_load_ram(struct mt7996_dev *dev)
28022816
{
28032817
int ret;
28042818

2805-
ret = __mt7996_load_ram(dev, "WM", MT7996_FIRMWARE_WM,
2819+
ret = __mt7996_load_ram(dev, "WM", fw_name(dev, FIRMWARE_WM),
28062820
MT7996_RAM_TYPE_WM);
28072821
if (ret)
28082822
return ret;
28092823

2810-
ret = __mt7996_load_ram(dev, "DSP", MT7996_FIRMWARE_DSP,
2824+
ret = __mt7996_load_ram(dev, "DSP", fw_name(dev, FIRMWARE_DSP),
28112825
MT7996_RAM_TYPE_DSP);
28122826
if (ret)
28132827
return ret;
28142828

2815-
return __mt7996_load_ram(dev, "WA", MT7996_FIRMWARE_WA,
2829+
return __mt7996_load_ram(dev, "WA", fw_name(dev, FIRMWARE_WA),
28162830
MT7996_RAM_TYPE_WA);
28172831
}
28182832

drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@
3333
#define MT7996_FIRMWARE_DSP "mediatek/mt7996/mt7996_dsp.bin"
3434
#define MT7996_ROM_PATCH "mediatek/mt7996/mt7996_rom_patch.bin"
3535

36+
#define MT7992_FIRMWARE_WA "mediatek/mt7996/mt7992_wa.bin"
37+
#define MT7992_FIRMWARE_WM "mediatek/mt7996/mt7992_wm.bin"
38+
#define MT7992_FIRMWARE_DSP "mediatek/mt7996/mt7992_dsp.bin"
39+
#define MT7992_ROM_PATCH "mediatek/mt7996/mt7992_rom_patch.bin"
40+
3641
#define MT7996_EEPROM_DEFAULT "mediatek/mt7996/mt7996_eeprom.bin"
3742
#define MT7996_EEPROM_SIZE 7680
3843
#define MT7996_EEPROM_BLOCK_SIZE 16

drivers/net/wireless/mediatek/mt76/mt7996/pci.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,3 +244,7 @@ MODULE_FIRMWARE(MT7996_FIRMWARE_WA);
244244
MODULE_FIRMWARE(MT7996_FIRMWARE_WM);
245245
MODULE_FIRMWARE(MT7996_FIRMWARE_DSP);
246246
MODULE_FIRMWARE(MT7996_ROM_PATCH);
247+
MODULE_FIRMWARE(MT7992_FIRMWARE_WA);
248+
MODULE_FIRMWARE(MT7992_FIRMWARE_WM);
249+
MODULE_FIRMWARE(MT7992_FIRMWARE_DSP);
250+
MODULE_FIRMWARE(MT7992_ROM_PATCH);

drivers/net/wireless/mediatek/mt76/mt7996/regs.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -683,4 +683,11 @@ enum base_rev {
683683
#define MT_MCU_WM_EXCP_LR_CTRL MT_MCU_WM_EXCP(0x200)
684684
#define MT_MCU_WM_EXCP_LR_LOG MT_MCU_WM_EXCP(0x204)
685685

686+
/* CONN AFE CTL CON */
687+
#define MT_AFE_CTL_BASE 0x18043000
688+
#define MT_AFE_CTL_BAND(_band, ofs) (MT_AFE_CTL_BASE + \
689+
((_band) * 0x1000) + (ofs))
690+
#define MT_AFE_CTL_BAND_PLL_03(_band) MT_AFE_CTL_BAND(_band, 0x2c)
691+
#define MT_AFE_CTL_BAND_PLL_03_MSB_EN BIT(1)
692+
686693
#endif

0 commit comments

Comments
 (0)