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>
This commit is contained in:
parent
1e1e563fe3
commit
a63b75aac8
@ -222,6 +222,11 @@ static inline bool is_mt7996(struct mt76_dev *dev)
|
||||
return mt76_chip(dev) == 0x7990;
|
||||
}
|
||||
|
||||
static inline bool is_mt7992(struct mt76_dev *dev)
|
||||
{
|
||||
return mt76_chip(dev) == 0x7992;
|
||||
}
|
||||
|
||||
static inline bool is_mt7622(struct mt76_dev *dev)
|
||||
{
|
||||
if (!IS_ENABLED(CONFIG_MT7622_WMAC))
|
||||
|
@ -67,7 +67,8 @@ int mt76_connac_mcu_init_download(struct mt76_dev *dev, u32 addr, u32 len,
|
||||
if ((!is_connac_v1(dev) && addr == MCU_PATCH_ADDRESS) ||
|
||||
(is_mt7921(dev) && addr == 0x900000) ||
|
||||
(is_mt7925(dev) && addr == 0x900000) ||
|
||||
(is_mt7996(dev) && addr == 0x900000))
|
||||
(is_mt7996(dev) && addr == 0x900000) ||
|
||||
(is_mt7992(dev) && addr == 0x900000))
|
||||
cmd = MCU_CMD(PATCH_START_REQ);
|
||||
else
|
||||
cmd = MCU_CMD(TARGET_ADDRESS_LEN_REQ);
|
||||
|
@ -888,6 +888,10 @@ static int mt7996_init_hardware(struct mt7996_dev *dev)
|
||||
int ret, idx;
|
||||
|
||||
mt76_wr(dev, MT_INT_SOURCE_CSR, ~0);
|
||||
if (is_mt7992(&dev->mt76)) {
|
||||
mt76_rmw(dev, MT_AFE_CTL_BAND_PLL_03(MT_BAND0), MT_AFE_CTL_BAND_PLL_03_MSB_EN, 0);
|
||||
mt76_rmw(dev, MT_AFE_CTL_BAND_PLL_03(MT_BAND1), MT_AFE_CTL_BAND_PLL_03_MSB_EN, 0);
|
||||
}
|
||||
|
||||
INIT_WORK(&dev->init_work, mt7996_init_work);
|
||||
INIT_WORK(&dev->wed_rro.work, mt7996_wed_rro_work);
|
||||
|
@ -10,6 +10,20 @@
|
||||
#include "mac.h"
|
||||
#include "eeprom.h"
|
||||
|
||||
#define fw_name(_dev, name, ...) ({ \
|
||||
char *_fw; \
|
||||
switch (mt76_chip(&(_dev)->mt76)) { \
|
||||
case 0x7992: \
|
||||
_fw = MT7992_##name; \
|
||||
break; \
|
||||
case 0x7990: \
|
||||
default: \
|
||||
_fw = MT7996_##name; \
|
||||
break; \
|
||||
} \
|
||||
_fw; \
|
||||
})
|
||||
|
||||
struct mt7996_patch_hdr {
|
||||
char build_date[16];
|
||||
char platform[4];
|
||||
@ -2639,7 +2653,7 @@ static int mt7996_load_patch(struct mt7996_dev *dev)
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
ret = request_firmware(&fw, MT7996_ROM_PATCH, dev->mt76.dev);
|
||||
ret = request_firmware(&fw, fw_name(dev, ROM_PATCH), dev->mt76.dev);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
@ -2802,17 +2816,17 @@ static int mt7996_load_ram(struct mt7996_dev *dev)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = __mt7996_load_ram(dev, "WM", MT7996_FIRMWARE_WM,
|
||||
ret = __mt7996_load_ram(dev, "WM", fw_name(dev, FIRMWARE_WM),
|
||||
MT7996_RAM_TYPE_WM);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = __mt7996_load_ram(dev, "DSP", MT7996_FIRMWARE_DSP,
|
||||
ret = __mt7996_load_ram(dev, "DSP", fw_name(dev, FIRMWARE_DSP),
|
||||
MT7996_RAM_TYPE_DSP);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return __mt7996_load_ram(dev, "WA", MT7996_FIRMWARE_WA,
|
||||
return __mt7996_load_ram(dev, "WA", fw_name(dev, FIRMWARE_WA),
|
||||
MT7996_RAM_TYPE_WA);
|
||||
}
|
||||
|
||||
|
@ -33,6 +33,11 @@
|
||||
#define MT7996_FIRMWARE_DSP "mediatek/mt7996/mt7996_dsp.bin"
|
||||
#define MT7996_ROM_PATCH "mediatek/mt7996/mt7996_rom_patch.bin"
|
||||
|
||||
#define MT7992_FIRMWARE_WA "mediatek/mt7996/mt7992_wa.bin"
|
||||
#define MT7992_FIRMWARE_WM "mediatek/mt7996/mt7992_wm.bin"
|
||||
#define MT7992_FIRMWARE_DSP "mediatek/mt7996/mt7992_dsp.bin"
|
||||
#define MT7992_ROM_PATCH "mediatek/mt7996/mt7992_rom_patch.bin"
|
||||
|
||||
#define MT7996_EEPROM_DEFAULT "mediatek/mt7996/mt7996_eeprom.bin"
|
||||
#define MT7996_EEPROM_SIZE 7680
|
||||
#define MT7996_EEPROM_BLOCK_SIZE 16
|
||||
|
@ -244,3 +244,7 @@ MODULE_FIRMWARE(MT7996_FIRMWARE_WA);
|
||||
MODULE_FIRMWARE(MT7996_FIRMWARE_WM);
|
||||
MODULE_FIRMWARE(MT7996_FIRMWARE_DSP);
|
||||
MODULE_FIRMWARE(MT7996_ROM_PATCH);
|
||||
MODULE_FIRMWARE(MT7992_FIRMWARE_WA);
|
||||
MODULE_FIRMWARE(MT7992_FIRMWARE_WM);
|
||||
MODULE_FIRMWARE(MT7992_FIRMWARE_DSP);
|
||||
MODULE_FIRMWARE(MT7992_ROM_PATCH);
|
||||
|
@ -683,4 +683,11 @@ enum base_rev {
|
||||
#define MT_MCU_WM_EXCP_LR_CTRL MT_MCU_WM_EXCP(0x200)
|
||||
#define MT_MCU_WM_EXCP_LR_LOG MT_MCU_WM_EXCP(0x204)
|
||||
|
||||
/* CONN AFE CTL CON */
|
||||
#define MT_AFE_CTL_BASE 0x18043000
|
||||
#define MT_AFE_CTL_BAND(_band, ofs) (MT_AFE_CTL_BASE + \
|
||||
((_band) * 0x1000) + (ofs))
|
||||
#define MT_AFE_CTL_BAND_PLL_03(_band) MT_AFE_CTL_BAND(_band, 0x2c)
|
||||
#define MT_AFE_CTL_BAND_PLL_03_MSB_EN BIT(1)
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user