Commit 4a40fcbf authored by Deren Wu's avatar Deren Wu Committed by Felix Fietkau

wifi: mt76: mt7921: introduce mt7920 PCIe support

mt7920e is a mt7921 series chipset with 802.11ax 2x2:2SS support.
The major difference is in firmware side only, at this moment.
This patch would add some mandatory changes for new chip id and
firmware download control.
Signed-off-by: default avatarDeren Wu <deren.wu@mediatek.com>
Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
parent 66ffcb9a
...@@ -177,6 +177,11 @@ static inline bool is_mt7925(struct mt76_dev *dev) ...@@ -177,6 +177,11 @@ static inline bool is_mt7925(struct mt76_dev *dev)
return mt76_chip(dev) == 0x7925; return mt76_chip(dev) == 0x7925;
} }
static inline bool is_mt7920(struct mt76_dev *dev)
{
return mt76_chip(dev) == 0x7920;
}
static inline bool is_mt7922(struct mt76_dev *dev) static inline bool is_mt7922(struct mt76_dev *dev)
{ {
return mt76_chip(dev) == 0x7922; return mt76_chip(dev) == 0x7922;
...@@ -184,7 +189,7 @@ static inline bool is_mt7922(struct mt76_dev *dev) ...@@ -184,7 +189,7 @@ static inline bool is_mt7922(struct mt76_dev *dev)
static inline bool is_mt7921(struct mt76_dev *dev) static inline bool is_mt7921(struct mt76_dev *dev)
{ {
return mt76_chip(dev) == 0x7961 || is_mt7922(dev); return mt76_chip(dev) == 0x7961 || is_mt7922(dev) || is_mt7920(dev);
} }
static inline bool is_mt7663(struct mt76_dev *dev) static inline bool is_mt7663(struct mt76_dev *dev)
...@@ -259,6 +264,7 @@ static inline bool is_mt76_fw_txp(struct mt76_dev *dev) ...@@ -259,6 +264,7 @@ static inline bool is_mt76_fw_txp(struct mt76_dev *dev)
{ {
switch (mt76_chip(dev)) { switch (mt76_chip(dev)) {
case 0x7961: case 0x7961:
case 0x7920:
case 0x7922: case 0x7922:
case 0x7925: case 0x7925:
case 0x7663: case 0x7663:
......
...@@ -24,6 +24,8 @@ static const struct pci_device_id mt7921_pci_device_table[] = { ...@@ -24,6 +24,8 @@ static const struct pci_device_id mt7921_pci_device_table[] = {
.driver_data = (kernel_ulong_t)MT7921_FIRMWARE_WM }, .driver_data = (kernel_ulong_t)MT7921_FIRMWARE_WM },
{ PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x0616), { PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x0616),
.driver_data = (kernel_ulong_t)MT7922_FIRMWARE_WM }, .driver_data = (kernel_ulong_t)MT7922_FIRMWARE_WM },
{ PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x7920),
.driver_data = (kernel_ulong_t)MT7920_FIRMWARE_WM },
{ }, { },
}; };
...@@ -269,9 +271,9 @@ static int mt7921_pci_probe(struct pci_dev *pdev, ...@@ -269,9 +271,9 @@ static int mt7921_pci_probe(struct pci_dev *pdev,
struct mt76_bus_ops *bus_ops; struct mt76_bus_ops *bus_ops;
struct mt792x_dev *dev; struct mt792x_dev *dev;
struct mt76_dev *mdev; struct mt76_dev *mdev;
u16 cmd, chipid;
u8 features; u8 features;
int ret; int ret;
u16 cmd;
ret = pcim_enable_device(pdev); ret = pcim_enable_device(pdev);
if (ret) if (ret)
...@@ -345,7 +347,10 @@ static int mt7921_pci_probe(struct pci_dev *pdev, ...@@ -345,7 +347,10 @@ static int mt7921_pci_probe(struct pci_dev *pdev,
if (ret) if (ret)
goto err_free_dev; goto err_free_dev;
mdev->rev = (mt7921_l1_rr(dev, MT_HW_CHIPID) << 16) | chipid = mt7921_l1_rr(dev, MT_HW_CHIPID);
if (chipid == 0x7961 && (mt7921_l1_rr(dev, MT_HW_BOUND) & BIT(7)))
chipid = 0x7920;
mdev->rev = (chipid << 16) |
(mt7921_l1_rr(dev, MT_HW_REV) & 0xff); (mt7921_l1_rr(dev, MT_HW_REV) & 0xff);
dev_info(mdev->dev, "ASIC revision: %04x\n", mdev->rev); dev_info(mdev->dev, "ASIC revision: %04x\n", mdev->rev);
...@@ -551,6 +556,8 @@ static struct pci_driver mt7921_pci_driver = { ...@@ -551,6 +556,8 @@ static struct pci_driver mt7921_pci_driver = {
module_pci_driver(mt7921_pci_driver); module_pci_driver(mt7921_pci_driver);
MODULE_DEVICE_TABLE(pci, mt7921_pci_device_table); MODULE_DEVICE_TABLE(pci, mt7921_pci_device_table);
MODULE_FIRMWARE(MT7920_FIRMWARE_WM);
MODULE_FIRMWARE(MT7920_ROM_PATCH);
MODULE_FIRMWARE(MT7921_FIRMWARE_WM); MODULE_FIRMWARE(MT7921_FIRMWARE_WM);
MODULE_FIRMWARE(MT7921_ROM_PATCH); MODULE_FIRMWARE(MT7921_ROM_PATCH);
MODULE_FIRMWARE(MT7922_FIRMWARE_WM); MODULE_FIRMWARE(MT7922_FIRMWARE_WM);
......
...@@ -36,10 +36,12 @@ ...@@ -36,10 +36,12 @@
#define MT792x_MCU_INIT_RETRY_COUNT 10 #define MT792x_MCU_INIT_RETRY_COUNT 10
#define MT792x_WFSYS_INIT_RETRY_COUNT 2 #define MT792x_WFSYS_INIT_RETRY_COUNT 2
#define MT7920_FIRMWARE_WM "mediatek/WIFI_RAM_CODE_MT7961_1a.bin"
#define MT7921_FIRMWARE_WM "mediatek/WIFI_RAM_CODE_MT7961_1.bin" #define MT7921_FIRMWARE_WM "mediatek/WIFI_RAM_CODE_MT7961_1.bin"
#define MT7922_FIRMWARE_WM "mediatek/WIFI_RAM_CODE_MT7922_1.bin" #define MT7922_FIRMWARE_WM "mediatek/WIFI_RAM_CODE_MT7922_1.bin"
#define MT7925_FIRMWARE_WM "mediatek/mt7925/WIFI_RAM_CODE_MT7925_1_1.bin" #define MT7925_FIRMWARE_WM "mediatek/mt7925/WIFI_RAM_CODE_MT7925_1_1.bin"
#define MT7920_ROM_PATCH "mediatek/WIFI_MT7961_patch_mcu_1a_2_hdr.bin"
#define MT7921_ROM_PATCH "mediatek/WIFI_MT7961_patch_mcu_1_2_hdr.bin" #define MT7921_ROM_PATCH "mediatek/WIFI_MT7961_patch_mcu_1_2_hdr.bin"
#define MT7922_ROM_PATCH "mediatek/WIFI_MT7922_patch_mcu_1_1_hdr.bin" #define MT7922_ROM_PATCH "mediatek/WIFI_MT7922_patch_mcu_1_1_hdr.bin"
#define MT7925_ROM_PATCH "mediatek/mt7925/WIFI_MT7925_PATCH_MCU_1_1_hdr.bin" #define MT7925_ROM_PATCH "mediatek/mt7925/WIFI_MT7925_PATCH_MCU_1_1_hdr.bin"
...@@ -326,6 +328,8 @@ int mt792x_mcu_fw_pmctrl(struct mt792x_dev *dev); ...@@ -326,6 +328,8 @@ int mt792x_mcu_fw_pmctrl(struct mt792x_dev *dev);
static inline char *mt792x_ram_name(struct mt792x_dev *dev) static inline char *mt792x_ram_name(struct mt792x_dev *dev)
{ {
switch (mt76_chip(&dev->mt76)) { switch (mt76_chip(&dev->mt76)) {
case 0x7920:
return MT7920_FIRMWARE_WM;
case 0x7922: case 0x7922:
return MT7922_FIRMWARE_WM; return MT7922_FIRMWARE_WM;
case 0x7925: case 0x7925:
...@@ -338,6 +342,8 @@ static inline char *mt792x_ram_name(struct mt792x_dev *dev) ...@@ -338,6 +342,8 @@ static inline char *mt792x_ram_name(struct mt792x_dev *dev)
static inline char *mt792x_patch_name(struct mt792x_dev *dev) static inline char *mt792x_patch_name(struct mt792x_dev *dev)
{ {
switch (mt76_chip(&dev->mt76)) { switch (mt76_chip(&dev->mt76)) {
case 0x7920:
return MT7920_ROM_PATCH;
case 0x7922: case 0x7922:
return MT7922_ROM_PATCH; return MT7922_ROM_PATCH;
case 0x7925: case 0x7925:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment