OSDN Git Service

mt76: mt7921: rely on mcu_get_nic_capability
authorSean Wang <sean.wang@mediatek.com>
Mon, 18 Oct 2021 23:11:44 +0000 (07:11 +0800)
committerFelix Fietkau <nbd@nbd.name>
Wed, 20 Oct 2021 08:36:59 +0000 (10:36 +0200)
Rely on mcu_get_nic_capability to obtain Tx quota information
for the SDIO device, get PHY capability, MAC address and then we can
totally drop mt7921/eeprom.c and any unnecessary code.

Noting that mt76_connac_mcu_get_nic_capability should be run before set
flag MT76_STATE_MCU_RUNNING being set to setup the proper parameters
like Tx quota control before the device is started to running.

Tested-by: Deren Wu <deren.wu@mediatek.com>
Acked-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7615/sdio_mcu.c
drivers/net/wireless/mediatek/mt76/mt7921/Makefile
drivers/net/wireless/mediatek/mt76/mt7921/eeprom.c [deleted file]
drivers/net/wireless/mediatek/mt76/mt7921/init.c
drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h
drivers/net/wireless/mediatek/mt76/sdio_txrx.c

index f76986c..dc9a2f0 100644 (file)
@@ -27,6 +27,7 @@ static int mt7663s_mcu_init_sched(struct mt7615_dev *dev)
                                                   MT_HIF1_MIN_QUOTA);
        sdio->sched.ple_data_quota = mt76_get_field(dev, MT_PLE_PG_HIF0_GROUP,
                                                    MT_HIF0_MIN_QUOTA);
+       sdio->sched.pse_page_size = MT_PSE_PAGE_SZ;
        txdwcnt = mt76_get_field(dev, MT_PP_TXDWCNT,
                                 MT_PP_TXDWCNT_TX1_ADD_DW_CNT);
        sdio->sched.deficit = txdwcnt << 2;
index 8cea896..5f32c2c 100644 (file)
@@ -5,6 +5,6 @@ obj-$(CONFIG_MT7921E) += mt7921e.o
 
 CFLAGS_trace.o := -I$(src)
 
-mt7921-common-y := mac.o mcu.o eeprom.o main.o init.o debugfs.o trace.o
+mt7921-common-y := mac.o mcu.o main.o init.o debugfs.o trace.o
 mt7921-common-$(CONFIG_NL80211_TESTMODE) += testmode.o
 mt7921e-y := pci.o pci_mac.o pci_mcu.o dma.o
diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/eeprom.c b/drivers/net/wireless/mediatek/mt76/mt7921/eeprom.c
deleted file mode 100644 (file)
index 4d0a4ae..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#include "mt7921.h"
-#include "eeprom.h"
-
-static u32 mt7921_eeprom_read(struct mt7921_dev *dev, u32 offset)
-{
-       u8 *data = dev->mt76.eeprom.data;
-
-       if (data[offset] == 0xff)
-               mt7921_mcu_get_eeprom(dev, offset);
-
-       return data[offset];
-}
-
-static int mt7921_eeprom_load(struct mt7921_dev *dev)
-{
-       int ret;
-
-       ret = mt76_eeprom_init(&dev->mt76, MT7921_EEPROM_SIZE);
-       if (ret < 0)
-               return ret;
-
-       memset(dev->mt76.eeprom.data, -1, MT7921_EEPROM_SIZE);
-
-       return 0;
-}
-
-static int mt7921_check_eeprom(struct mt7921_dev *dev)
-{
-       u8 *eeprom = dev->mt76.eeprom.data;
-       u16 val;
-
-       mt7921_eeprom_read(dev, MT_EE_CHIP_ID);
-       val = get_unaligned_le16(eeprom);
-
-       switch (val) {
-       case 0x7922:
-       case 0x7961:
-               return 0;
-       default:
-               return -EINVAL;
-       }
-}
-
-void mt7921_eeprom_parse_band_config(struct mt7921_phy *phy)
-{
-       struct mt7921_dev *dev = phy->dev;
-       u32 val;
-
-       val = mt7921_eeprom_read(dev, MT_EE_WIFI_CONF);
-       val = FIELD_GET(MT_EE_WIFI_CONF_BAND_SEL, val);
-
-       switch (val) {
-       case MT_EE_5GHZ:
-               phy->mt76->cap.has_5ghz = true;
-               break;
-       case MT_EE_2GHZ:
-               phy->mt76->cap.has_2ghz = true;
-               break;
-       default:
-               phy->mt76->cap.has_2ghz = true;
-               phy->mt76->cap.has_5ghz = true;
-               break;
-       }
-}
-
-static void mt7921_eeprom_parse_hw_cap(struct mt7921_dev *dev)
-{
-       u8 tx_mask;
-
-       mt7921_eeprom_parse_band_config(&dev->phy);
-
-       /* TODO: read NSS with MCU_CMD_NIC_CAPV2 */
-       tx_mask = 2;
-       dev->chainmask = BIT(tx_mask) - 1;
-       dev->mphy.antenna_mask = dev->chainmask;
-       dev->mphy.chainmask = dev->mphy.antenna_mask;
-}
-
-int mt7921_eeprom_init(struct mt7921_dev *dev)
-{
-       int ret;
-
-       ret = mt7921_eeprom_load(dev);
-       if (ret < 0)
-               return ret;
-
-       ret = mt7921_check_eeprom(dev);
-       if (ret)
-               return ret;
-
-       mt7921_eeprom_parse_hw_cap(dev);
-       memcpy(dev->mphy.macaddr, dev->mt76.eeprom.data + MT_EE_MAC_ADDR,
-              ETH_ALEN);
-
-       mt76_eeprom_override(&dev->mphy);
-
-       return 0;
-}
index d310d6e..6a4b014 100644 (file)
@@ -149,7 +149,6 @@ EXPORT_SYMBOL_GPL(mt7921_mac_init);
 
 static int __mt7921_init_hardware(struct mt7921_dev *dev)
 {
-       struct mt76_dev *mdev = &dev->mt76;
        int ret;
 
        /* force firmware operation mode into normal state,
@@ -160,9 +159,7 @@ static int __mt7921_init_hardware(struct mt7921_dev *dev)
        if (ret)
                goto out;
 
-       ret = mt7921_eeprom_init(dev);
-       if (ret)
-               goto out;
+       mt76_eeprom_override(&dev->mphy);
 
        ret = mt7921_mcu_set_eeprom(dev);
        if (ret)
@@ -170,11 +167,6 @@ static int __mt7921_init_hardware(struct mt7921_dev *dev)
 
        ret = mt7921_mac_init(dev);
 out:
-       if (ret && mdev->eeprom.data) {
-               devm_kfree(mdev->dev, mdev->eeprom.data);
-               mdev->eeprom.data = NULL;
-       }
-
        return ret;
 }
 
index e315eb4..a954950 100644 (file)
@@ -906,10 +906,12 @@ int mt7921_run_firmware(struct mt7921_dev *dev)
        if (err)
                return err;
 
-       set_bit(MT76_STATE_MCU_RUNNING, &dev->mphy.state);
-       mt7921_mcu_fw_log_2_host(dev, 1);
+       err = mt76_connac_mcu_get_nic_capability(&dev->mphy);
+       if (err)
+               return err;
 
-       return mt76_connac_mcu_get_nic_capability(&dev->mphy);
+       set_bit(MT76_STATE_MCU_RUNNING, &dev->mphy.state);
+       return mt7921_mcu_fw_log_2_host(dev, 1);
 }
 EXPORT_SYMBOL_GPL(mt7921_run_firmware);
 
index 295f57c..2082b4d 100644 (file)
@@ -156,8 +156,6 @@ struct mt7921_dev {
        struct mt7921_phy phy;
        struct tasklet_struct irq_tasklet;
 
-       u16 chainmask;
-
        struct work_struct reset_work;
        bool hw_full_reset:1;
        bool hw_init_done:1;
@@ -247,12 +245,6 @@ u32 mt7921_reg_map(struct mt7921_dev *dev, u32 addr);
 int __mt7921_start(struct mt7921_phy *phy);
 int mt7921_register_device(struct mt7921_dev *dev);
 void mt7921_unregister_device(struct mt7921_dev *dev);
-int mt7921_eeprom_init(struct mt7921_dev *dev);
-void mt7921_eeprom_parse_band_config(struct mt7921_phy *phy);
-int mt7921_eeprom_get_target_power(struct mt7921_dev *dev,
-                                  struct ieee80211_channel *chan,
-                                  u8 chain_idx);
-void mt7921_eeprom_init_sku(struct mt7921_dev *dev);
 int mt7921_dma_init(struct mt7921_dev *dev);
 int mt7921_wpdma_reset(struct mt7921_dev *dev, bool force);
 int mt7921_wpdma_reinit_cond(struct mt7921_dev *dev);
index 2728d45..9b4c95a 100644 (file)
@@ -173,7 +173,8 @@ mt76s_tx_pick_quota(struct mt76_sdio *sdio, bool mcu, int buf_sz,
 {
        int pse_sz;
 
-       pse_sz = DIV_ROUND_UP(buf_sz + sdio->sched.deficit, MT_PSE_PAGE_SZ);
+       pse_sz = DIV_ROUND_UP(buf_sz + sdio->sched.deficit,
+                             sdio->sched.pse_page_size);
 
        if (mcu && sdio->hw_ver == MT76_CONNAC2_SDIO)
                pse_sz = 1;