Add MT7921 SDIO support
Subsystems (2)
[email protected]
reviewerv2 cover Add MT7921 SDIO support
From: Sean Wang <[email protected]>
The patchset adds the SDIO support to the MT7921 driver, basically are made up of 3 parts.
PART 1: patch 1-5, 8-9 and 12-14
These are preliminary patches for mt7921s driver to refactor and reuse the current mt7921e driver as much as possible.
PART 2: patch 6-7, 10
These are preliminary patches for mt7921s driver to refactor and reuse the current mt7663s driver as much as possible.
PART 3: patch 11 and 15-16
These are specific patches for mt7921s driver and reset mechanism in the same framework where mt7921e have been supported.
The patchset are built and generated against the current mt76 tree plus the extra pending patches [1] expected to be merged to mt76 tree soon to help the review and merge process be easier.
The change list from v1 to v2
1. rework the whole driver according to the new patches added
("mt76: introduce __mt76_mcu_send_firmware routine"),
("mt76: not accounting the MCU header size in __mt76_mcu_send_firmware for mt7915/21") and ("mt76: sdio: move common code in mt76_sdio module")
2. drop pci_init.c and sdio_init.c by moving the related logic to pci.c and sdio.c, respectively.
3. cosmetics the patches like removing unnecessary new line and adding an extra space to fixed_map table.
4. fix typo in commit message
[1] The pending patch list prior to add MT7921 SDIO support
da0054ae6b1f mt76: mt7921s: add reset support31c979d37209 mt76: mt7921: introduce mt7921s supportc8f8caad718f mt76: mt7921: refactor mt7921_mcu_send_messagef4bb6338d638 mt76: mt7921: rely on mcu_get_nic_capability0bfd21e29498 mt76: connac: extend mcu_get_nic_capability3b5f8d1815a4 mt76: sdio: extend sdio module to support CONNAC228669a9ceff5 mt76: sdio: move common code in mt76_sdio modulead7ba2b9c6af mt76: mt7921: use physical addr to unify register access a6aebd446a9a mt76: mt7921: make all event parser reusable between mt7921s and mt7921e 0c52f915f728 mt76: mt7663s: rely on mcu reg access utility42112d6b7b1c mt76: connac: move mcu reg access utility routines in mt76_connac_lib module 23bf9455d505 mt76: mt7921: add MT7921_COMMON module688be52542bb mt76: mt7921: refactor init.c to be bus independent099a0527d05c mt76: mt7921: refactor mcu.c to be bus independent378767d66e2b mt76: mt7921: refactor dma.c to be pcie specifice15c4c1be3ea mt76: mt7921: refactor mac.c to be bus independentb72eaca3c81b mt76: not accounting the MCU header size in __mt76_mcu_send_firmware for mt7915/21 870fe1bc5fc8 mt76: introduce __mt76_mcu_send_firmware routine465a8a6e834f mt76: schedule status timeout at dma completion4d3b6422fe5e mt76: substitute sk_buff_head status_list with spinlock_t status_lock 13d50c723b79 mt76: remove mt76_wcid pointer from mt76_tx_status_check signature ed46465dc741 mt76: introduce packet_id idrb3568b1f391a mt76: mt7921: add 6GHz support6605e1e5c2be mt76: add 6GHz support1dcae1bad280 mt76: connac: enable hw amsdu @ 6GHz88c34fb4fdef mt76: connac: add 6GHz support to mt76_connac_mcu_uni_add_bss 8bb780867211 mt76: connac: add 6GHz support to mt76_connac_mcu_sta_tlv 6e021ff24950 mt76: connac: set 6G phymode in single-sku support21a96eed203d mt76: connac: add 6GHz support to mt76_connac_mcu_set_channel_domain b70bae155a51 mt76: connac: enable 6GHz band for hw scan92e29c77494c mt76: mt7921: remove mt7921_sta_stats56ea41ec4ae3 mt76: mt7921: remove mcu rate reporting code94b97e96549e mt76: mt7921: report tx rate directly from tx status8dd12eb23009 mt76: mt7921: add support for tx status reporting69328a635189 mt76: mt7921: start reworking tx rate reportingb915a7d2b882 mt76: mt7921: update mib counters dumping phy stats2a694a754e32 mt76: mt7921: always wake device if necessary in debugfs 067927a52e93 mt76: mt7921: move mt7921_queue_rx_skb to mac.ca866733d977d mt76: mt7921: fix retrying release semaphore without end 8853d1b5b6bf mt76: mt7921: robustify hardware initialization flow
Lorenzo Bianconi (1):
mt76: sdio: move common code in mt76_sdio module
Sean Wang (15):
mt76: mt7921: refactor mac.c to be bus independent
mt76: mt7921: refactor dma.c to be pcie specific
mt76: mt7921: refactor mcu.c to be bus independent
mt76: mt7921: refactor init.c to be bus independent
mt76: mt7921: add MT7921_COMMON module
mt76: connac: move mcu reg access utility routines in mt76_connac_lib
module
mt76: mt7663s: rely on mcu reg access utility
mt76: mt7921: make all event parser reusable between mt7921s and
mt7921e
mt76: mt7921: use physical addr to unify register access
mt76: sdio: extend sdio module to support CONNAC2
mt76: connac: extend mcu_get_nic_capability
mt76: mt7921: rely on mcu_get_nic_capability
mt76: mt7921: refactor mt7921_mcu_send_message
mt76: mt7921: introduce mt7921s support
mt76: mt7921s: add reset support
drivers/net/wireless/mediatek/mt76/Makefile | 2 +-
drivers/net/wireless/mediatek/mt76/mt76.h | 22 ++
.../wireless/mediatek/mt76/mt7615/Makefile | 2 +-
.../net/wireless/mediatek/mt76/mt7615/mcu.c | 28 --
.../wireless/mediatek/mt76/mt7615/mt7615.h | 6 -
.../net/wireless/mediatek/mt76/mt7615/sdio.c | 282 +------------
.../wireless/mediatek/mt76/mt7615/sdio_mcu.c | 11 +-
.../wireless/mediatek/mt76/mt76_connac_mcu.c | 93 +++++
.../wireless/mediatek/mt76/mt76_connac_mcu.h | 2 +
.../net/wireless/mediatek/mt76/mt7921/Kconfig | 18 +-
.../wireless/mediatek/mt76/mt7921/Makefile | 8 +-
.../wireless/mediatek/mt76/mt7921/debugfs.c | 18 +-
.../net/wireless/mediatek/mt76/mt7921/dma.c | 38 +-
.../wireless/mediatek/mt76/mt7921/eeprom.c | 101 -----
.../net/wireless/mediatek/mt76/mt7921/init.c | 52 +--
.../net/wireless/mediatek/mt76/mt7921/mac.c | 372 ++----------------
.../net/wireless/mediatek/mt76/mt7921/mac.h | 4 +
.../net/wireless/mediatek/mt76/mt7921/main.c | 7 +
.../net/wireless/mediatek/mt76/mt7921/mcu.c | 138 ++-----
.../wireless/mediatek/mt76/mt7921/mt7921.h | 94 ++++-
.../net/wireless/mediatek/mt76/mt7921/pci.c | 49 ++-
.../wireless/mediatek/mt76/mt7921/pci_mac.c | 346 ++++++++++++++++
.../wireless/mediatek/mt76/mt7921/pci_mcu.c | 115 ++++++
.../net/wireless/mediatek/mt76/mt7921/regs.h | 22 +-
.../net/wireless/mediatek/mt76/mt7921/sdio.c | 285 ++++++++++++++
.../wireless/mediatek/mt76/mt7921/sdio_mac.c | 220 +++++++++++
.../wireless/mediatek/mt76/mt7921/sdio_mcu.c | 135 +++++++
drivers/net/wireless/mediatek/mt76/sdio.c | 282 +++++++++++++
.../mediatek/mt76/{mt7615 => }/sdio.h | 50 ++-
.../mediatek/mt76/{mt7615 => }/sdio_txrx.c | 171 +++++---
30 files changed, 1982 insertions(+), 991 deletions(-)
delete mode 100644 drivers/net/wireless/mediatek/mt76/mt7921/eeprom.c
create mode 100644 drivers/net/wireless/mediatek/mt76/mt7921/pci_mac.c
create mode 100644 drivers/net/wireless/mediatek/mt76/mt7921/pci_mcu.c
create mode 100644 drivers/net/wireless/mediatek/mt76/mt7921/sdio.c
create mode 100644 drivers/net/wireless/mediatek/mt76/mt7921/sdio_mac.c
create mode 100644 drivers/net/wireless/mediatek/mt76/mt7921/sdio_mcu.c
rename drivers/net/wireless/mediatek/mt76/{mt7615 => }/sdio.h (68%)
rename drivers/net/wireless/mediatek/mt76/{mt7615 => }/sdio_txrx.c (59%)--
2.25.1
_______________________________________________
Linux-mediatek mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-mediatek
[email protected]
reviewerPATCH v2 1/16 mt76: mt7921: refactor mac.c to be bus independent
From: Sean Wang <[email protected]>
This is a preliminary patch to introduce mt7921s support.
Split out a new pci_mac.c from mac.c to make mac.c reusable between mt7921s and mt7921e.
--- .../wireless/mediatek/mt76/mt7921/Makefile | 2 +- .../net/wireless/mediatek/mt76/mt7921/mac.c | 339 +---------------- .../wireless/mediatek/mt76/mt7921/mt7921.h | 25 +- .../net/wireless/mediatek/mt76/mt7921/pci.c | 12 +- .../wireless/mediatek/mt76/mt7921/pci_mac.c | 344 ++++++++++++++++++ 5 files changed, 381 insertions(+), 341 deletions(-) create mode 100644 drivers/net/wireless/mediatek/mt76/mt7921/pci_mac.c
drivers/net/wireless/mediatek/mt76/mt7921/Makefile +1 -1
@@ -4,5 +4,5 @@ obj-$(CONFIG_MT7921E) += mt7921e.o CFLAGS_trace.o := -I$(src) -mt7921e-y := pci.o mac.o mcu.o dma.o eeprom.o main.o init.o debugfs.o trace.o +mt7921e-y := pci.o pci_mac.o mac.o mcu.o dma.o eeprom.o main.o init.o debugfs.o trace.o mt7921e-$(CONFIG_NL80211_TESTMODE) += testmode.o
drivers/net/wireless/mediatek/mt76/mt7921/mac.c +7 -332
393 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h +20 -5
@@ -133,6 +133,11 @@ struct mt7921_phy {struct delayed_work scan_work; }; +#define mt7921_dev_reset (dev) ((dev)->hif_ops->reset(dev)) +struct mt7921_hif_ops { +int (*reset)(struct mt7921_dev *dev); +}; +struct mt7921_dev {union {/* must be first */ struct mt76_dev mt76;
@@ -156,6 +161,7 @@ struct mt7921_dev {struct mt76_connac_pm pm;struct mt76_connac_coredump coredump; +const struct mt7921_hif_ops *hif_ops; };enum {
@@ -325,13 +331,13 @@ void mt7921_mac_reset_work(struct work_struct *work);void mt7921_mac_update_mib_stats (struct mt7921_phy *phy);void mt7921_reset (struct mt76_dev *mdev);void mt7921_tx_cleanup (struct mt7921_dev *dev); -int mt7921_tx_prepare_skb (struct mt76_dev *mdev,void *txwi_ptr, -enum mt76_txq_id qid,struct mt76_wcid *wcid, -struct ieee80211_sta *sta, -struct mt76_tx_info *tx_info); +int mt7921e_tx_prepare_skb (struct mt76_dev *mdev,void *txwi_ptr, +enum mt76_txq_id qid,struct mt76_wcid *wcid, +struct ieee80211_sta *sta, +struct mt76_tx_info *tx_info);void mt7921_tx_worker (struct mt76_worker *w); -void mt7921_tx_complete_skb (struct mt76_dev *mdev,struct mt76_queue_entry *e); +void mt7921e_tx_complete_skb (struct mt76_dev *mdev,struct mt76_queue_entry *e);int mt7921_init_tx_queues (struct mt7921_phy *phy,int idx,int n_desc);void mt7921_tx_token_put (struct mt7921_dev *dev); void mt7921_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
@@ -366,4 +372,13 @@ int mt7921_testmode_cmd(struct ieee80211_hw *hw, struct ieee80211_vif *vif, void *data, int len);int mt7921_testmode_dump (struct ieee80211_hw *hw,struct sk_buff *msg,struct netlink_callback *cb,void *data,int len); +void mt7921_mac_write_txwi (struct mt7921_dev *dev,__le32 *txwi, +struct sk_buff *skb,struct mt76_wcid *wcid, +struct ieee80211_key_conf *key,int pid, +bool beacon); +void mt7921_tx_check_aggr (struct ieee80211_sta *sta,__le32 *txwi); +void mt7921_mac_sta_poll (struct mt7921_dev *dev); +void mt7921e_queue_rx_skb (struct mt76_dev *mdev,enum mt76_rxq_id q, +struct sk_buff *skb); +int mt7921e_mac_reset (struct mt7921_dev *dev);#endif
drivers/net/wireless/mediatek/mt76/mt7921/pci.c +9 -3
@@ -104,9 +104,9 @@ static int mt7921_pci_probe(struct pci_dev *pdev,SURVEY_INFO_TIME_RX | SURVEY_INFO_TIME_BSS_RX, .token_size = MT7921_TOKEN_SIZE, - .tx_prepare_skb = mt7921_tx_prepare_skb, - .tx_complete_skb = mt7921_tx_complete_skb, - .rx_skb = mt7921_queue_rx_skb, + .tx_prepare_skb = mt7921e_tx_prepare_skb, + .tx_complete_skb = mt7921e_tx_complete_skb, + .rx_skb = mt7921e_queue_rx_skb, .rx_poll_complete = mt7921_rx_poll_complete, .sta_ps = mt7921_sta_ps, .sta_add = mt7921_mac_sta_add,
@@ -114,6 +114,11 @@ static int mt7921_pci_probe(struct pci_dev *pdev, .sta_remove = mt7921_mac_sta_remove, .update_survey = mt7921_update_channel, }; + +static const struct mt7921_hif_ops mt7921_pcie_ops = { + .reset = mt7921e_mac_reset, + }; +struct mt7921_dev *dev;struct mt76_dev *mdev;int ret;
@@ -147,6 +152,7 @@ static int mt7921_pci_probe(struct pci_dev *pdev, } dev = container_of(mdev, struct mt7921_dev, mt76); + dev->hif_ops = &mt7921_pcie_ops;mt76_mmio_init (&dev->mt76,pcim_iomap_table (pdev)[0 ]);tasklet_init (&dev->irq_tasklet, mt7921_irq_tasklet, (unsigned long )dev);
drivers/net/wireless/mediatek/mt76/mt7921/pci_mac.c new file +344 -0
344 lines not on this page · raw message
Signature · 7 lines
2.25.1 _______________________________________________ Linux-mediatek mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-mediatek
[email protected]
reviewerPATCH v2 2/16 mt76: mt7921: refactor dma.c to be pcie specific
In reply to [email protected]From: Sean Wang <[email protected]>
This is a preliminary patch to introduce mt7921s support.
make dma.c be used dedicately for mt7921e.
by moving out mt7921_tx_cleanup from dma.c to mcu.c and then renaming mt7921_tx_cleanup to refect the exact thing the function actually does.
Finally, dma.c totally become pcie specific one, only needed to be compiled only when CONFIG_MT7921E is enabled.
--- drivers/net/wireless/mediatek/mt76/mt7921/dma.c | 8 +------- drivers/net/wireless/mediatek/mt76/mt7921/mac.c | 2 +- drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h | 7 ++++++- 3 files changed, 8 insertions(+), 9 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7921/dma.c +1 -7
@@ -19,12 +19,6 @@ int mt7921_init_tx_queues(struct mt7921_phy *phy, int idx, int n_desc)return 0 ; } -void mt7921_tx_cleanup (struct mt7921_dev *dev) -{ -mt76_queue_tx_cleanup (dev, dev->mt76.q_mcu[MT_MCUQ_WM ], false); -mt76_queue_tx_cleanup (dev, dev->mt76.q_mcu[MT_MCUQ_WA ], false); -} -static int mt7921_poll_tx (struct napi_struct *napi,int budget) {struct mt7921_dev *dev;
@@ -37,7 +31,7 @@ static int mt7921_poll_tx(struct napi_struct *napi, int budget)return 0 ; } -mt7921_tx_cleanup (dev); +mt7921_mcu_tx_cleanup (dev);if (napi_complete (napi))mt7921_irq_enable (dev,MT_INT_TX_DONE_ALL );mt76_connac_pm_unref (&dev->mphy, &dev->pm);
drivers/net/wireless/mediatek/mt76/mt7921/mac.c +1 -1
@@ -1390,7 +1390,7 @@ void mt7921_pm_wake_work(struct work_struct *work)mt76_for_each_q_rx (&dev->mt76, i)napi_schedule (&dev->mt76.napi[i]);mt76_connac_pm_dequeue_skbs (mphy, &dev->pm); -mt7921_tx_cleanup (dev); +mt7921_mcu_tx_cleanup (dev);if (test_bit (MT76_STATE_RUNNING , &mphy->state))ieee80211_queue_delayed_work (mphy->hw, &mphy->mac_work,MT7921_WATCHDOG_TIME );
drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h +6 -1
@@ -316,6 +316,12 @@ static inline bool mt7921_dma_need_reinit(struct mt7921_dev *dev)return !mt76_get_field (dev,MT_WFDMA_DUMMY_CR ,MT_WFDMA_NEED_REINIT ); } +static inline void mt7921_mcu_tx_cleanup (struct mt7921_dev *dev) +{ +mt76_queue_tx_cleanup (dev, dev->mt76.q_mcu[MT_MCUQ_WM ], false); +mt76_queue_tx_cleanup (dev, dev->mt76.q_mcu[MT_MCUQ_WA ], false); +} +int mt7921_mac_init (struct mt7921_dev *dev);bool mt7921_mac_wtbl_update (struct mt7921_dev *dev,int idx,u32 mask);void mt7921_mac_reset_counters (struct mt7921_phy *phy);
@@ -330,7 +336,6 @@ void mt7921_mac_work(struct work_struct *work);void mt7921_mac_reset_work (struct work_struct *work);void mt7921_mac_update_mib_stats (struct mt7921_phy *phy);void mt7921_reset (struct mt76_dev *mdev); -void mt7921_tx_cleanup (struct mt7921_dev *dev); int mt7921e_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr, enum mt76_txq_id qid, struct mt76_wcid *wcid, struct ieee80211_sta *sta,
Signature · 7 lines
2.25.1 _______________________________________________ Linux-mediatek mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-mediatek
[email protected]
reviewerPATCH v2 3/16 mt76: mt7921: refactor mcu.c to be bus independent
In reply to [email protected]From: Sean Wang <[email protected]>
This is a preliminary patch to introduce mt7921s support.
Make mcu.c reusable between mt7921s and mt7921e
--- .../wireless/mediatek/mt76/mt7921/Makefile | 3 +- .../net/wireless/mediatek/mt76/mt7921/init.c | 1 + .../net/wireless/mediatek/mt76/mt7921/mac.c | 5 +- .../net/wireless/mediatek/mt76/mt7921/mcu.c | 94 ++---------------- .../wireless/mediatek/mt76/mt7921/mt7921.h | 20 +++- .../net/wireless/mediatek/mt76/mt7921/pci.c | 3 + .../wireless/mediatek/mt76/mt7921/pci_mac.c | 2 + .../wireless/mediatek/mt76/mt7921/pci_mcu.c | 97 +++++++++++++++++++ 8 files changed, 130 insertions(+), 95 deletions(-) create mode 100644 drivers/net/wireless/mediatek/mt76/mt7921/pci_mcu.c
drivers/net/wireless/mediatek/mt76/mt7921/Makefile +2 -1
@@ -4,5 +4,6 @@ obj-$(CONFIG_MT7921E) += mt7921e.o CFLAGS_trace.o := -I$(src) -mt7921e-y := pci.o pci_mac.o mac.o mcu.o dma.o eeprom.o main.o init.o debugfs.o trace.o +mt7921e-y := pci.o pci_mac.o pci_mcu.o mac.o mcu.o dma.o eeprom.o main.o \ + init.o debugfs.o trace.o mt7921e-$(CONFIG_NL80211_TESTMODE) += testmode.o
drivers/net/wireless/mediatek/mt76/mt7921/init.c +1 -0
@@ -304,6 +304,7 @@ void mt7921_unregister_device(struct mt7921_dev *dev)mt7921_tx_token_put (dev);mt7921_mcu_drv_pmctrl (dev);mt7921_dma_cleanup (dev); +mt7921_wfsys_reset (dev);mt7921_mcu_exit (dev);mt7921_mcu_fw_pmctrl (dev);
drivers/net/wireless/mediatek/mt76/mt7921/mac.c +1 -4
@@ -1280,12 +1280,9 @@ void mt7921_mac_reset_work(struct work_struct *work)cancel_work_sync (&pm->wake_work);mutex_lock (&dev->mt76.mutex); -for (i =0 ; i <10 ; i++) { -__mt7921_mcu_drv_pmctrl (dev); - +for (i =0 ; i <10 ; i++)if (!mt7921_dev_reset (dev))break ; - }mutex_unlock (&dev->mt76.mutex);if (i ==10 )
drivers/net/wireless/mediatek/mt76/mt7921/mcu.c +7 -87
156 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h +17 -3
@@ -133,9 +133,15 @@ struct mt7921_phy {struct delayed_work scan_work; }; -#define mt7921_dev_reset (dev) ((dev)->hif_ops->reset(dev)) +#define mt7921_dev_reset (dev) ((dev)->hif_ops->reset(dev)) +#define mt7921_mcu_init (dev) ((dev)->hif_ops->mcu_init(dev)) +#define __mt7921_mcu_drv_pmctrl (dev) ((dev)->hif_ops->drv_own(dev)) +#define __mt7921_mcu_fw_pmctrl (dev) ((dev)->hif_ops->fw_own(dev))struct mt7921_hif_ops {int (*reset)(struct mt7921_dev *dev); +int (*mcu_init)(struct mt7921_dev *dev); +int (*drv_own)(struct mt7921_dev *dev); +int (*fw_own)(struct mt7921_dev *dev); };struct mt7921_dev {
@@ -250,7 +256,6 @@ int mt7921_wpdma_reset(struct mt7921_dev *dev, bool force);int mt7921_wpdma_reinit_cond (struct mt7921_dev *dev);void mt7921_dma_cleanup (struct mt7921_dev *dev);int mt7921_run_firmware (struct mt7921_dev *dev); -int mt7921_mcu_init (struct mt7921_dev *dev);int mt7921_mcu_add_key (struct mt7921_dev *dev,struct ieee80211_vif *vif,struct mt7921_sta *msta,struct ieee80211_key_conf *key,enum set_key_cmd cmd);
@@ -364,7 +369,6 @@ int mt7921_mcu_uni_rx_ba(struct mt7921_dev *dev, bool enable);void mt7921_scan_work (struct work_struct *work);int mt7921_mcu_uni_bss_ps (struct mt7921_dev *dev,struct ieee80211_vif *vif); -int __mt7921_mcu_drv_pmctrl (struct mt7921_dev *dev);int mt7921_mcu_drv_pmctrl (struct mt7921_dev *dev);int mt7921_mcu_fw_pmctrl (struct mt7921_dev *dev);void mt7921_pm_wake_work (struct work_struct *work);
@@ -383,7 +387,17 @@ void mt7921_mac_write_txwi(struct mt7921_dev *dev, __le32 *txwi, bool beacon);void mt7921_tx_check_aggr (struct ieee80211_sta *sta,__le32 *txwi);void mt7921_mac_sta_poll (struct mt7921_dev *dev); +int mt7921_mcu_send_message (struct mt76_dev *mdev,struct sk_buff *skb, +int cmd,int *wait_seq); +int mt7921_mcu_parse_response (struct mt76_dev *mdev,int cmd, +struct sk_buff *skb,int seq); +int mt7921_mcu_restart (struct mt76_dev *dev); +void mt7921e_queue_rx_skb (struct mt76_dev *mdev,enum mt76_rxq_id q,struct sk_buff *skb);int mt7921e_mac_reset (struct mt7921_dev *dev); +int mt7921e_mcu_init (struct mt7921_dev *dev); +int mt7921e_mcu_drv_pmctrl (struct mt7921_dev *dev); +int mt7921e_mcu_fw_pmctrl (struct mt7921_dev *dev); +#endif
drivers/net/wireless/mediatek/mt76/mt7921/pci.c +3 -0
@@ -117,6 +117,9 @@ static int mt7921_pci_probe(struct pci_dev *pdev,static const struct mt7921_hif_ops mt7921_pcie_ops = { .reset = mt7921e_mac_reset, + .mcu_init = mt7921e_mcu_init, + .drv_own = mt7921e_mcu_drv_pmctrl, + .fw_own = mt7921e_mcu_fw_pmctrl, };struct mt7921_dev *dev;
drivers/net/wireless/mediatek/mt76/mt7921/pci_mac.c +2 -0
@@ -285,6 +285,8 @@ int mt7921e_mac_reset(struct mt7921_dev *dev) {int i, err; +mt7921e_mcu_drv_pmctrl (dev); +mt76_connac_free_pending_tx_skbs (&dev->pm,NULL );mt76_wr (dev,MT_WFDMA0_HOST_INT_ENA ,0 );
drivers/net/wireless/mediatek/mt76/mt7921/pci_mcu.c new file +97 -0
97 lines not on this page · raw message
Signature · 7 lines
2.25.1 _______________________________________________ Linux-mediatek mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-mediatek
[email protected]
reviewerPATCH v2 4/16 mt76: mt7921: refactor init.c to be bus independent
In reply to [email protected]From: Sean Wang <[email protected]>
This is a preliminary patch to introduce mt7921s support.
Make init.c reusable between mt7921s and mt7921e
--- .../net/wireless/mediatek/mt76/mt7921/dma.c | 3 ++ .../net/wireless/mediatek/mt76/mt7921/init.c | 28 +-------------- .../wireless/mediatek/mt76/mt7921/mt7921.h | 2 ++ .../net/wireless/mediatek/mt76/mt7921/pci.c | 34 ++++++++++++++++++- 4 files changed, 39 insertions(+), 28 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7921/dma.c +3 -0
@@ -343,6 +343,9 @@ int mt7921_dma_init(struct mt7921_dev *dev)struct mt76_bus_ops *bus_ops;int ret; + dev->phy.dev = dev; + dev->phy.mt76 = &dev->mt76.phy; + dev->mt76.phy.priv = &dev->phy; dev->bus_ops = dev->mt76.bus; bus_ops =devm_kmemdup (dev->mt76.dev, dev->bus_ops,sizeof (*bus_ops),GFP_KERNEL );
drivers/net/wireless/mediatek/mt76/mt7921/init.c +1 -27
@@ -181,10 +181,6 @@ static int mt7921_init_hardware(struct mt7921_dev *dev) {int ret, idx, i; - ret =mt7921_dma_init (dev); -if (ret) -return ret; -set_bit (MT76_STATE_INITIALIZED , &dev->mphy.state);for (i =0 ; i <MT7921_MCU_INIT_RETRY_COUNT ; i++) {
@@ -192,7 +188,7 @@ static int mt7921_init_hardware(struct mt7921_dev *dev)if (!ret)break ; -mt7921_wpdma_reset (dev, true); +mt7921_init_reset (dev); }if (i ==MT7921_MCU_INIT_RETRY_COUNT ) {
@@ -289,25 +285,3 @@ int mt7921_register_device(struct mt7921_dev *dev)return 0 ; } - -void mt7921_unregister_device (struct mt7921_dev *dev) -{ -int i; -struct mt76_connac_pm *pm = &dev->pm; - -mt76_unregister_device (&dev->mt76); -mt76_for_each_q_rx (&dev->mt76, i) -napi_disable (&dev->mt76.napi[i]); -cancel_delayed_work_sync (&pm->ps_work); -cancel_work_sync (&pm->wake_work); - -mt7921_tx_token_put (dev); -mt7921_mcu_drv_pmctrl (dev); -mt7921_dma_cleanup (dev); -mt7921_wfsys_reset (dev); -mt7921_mcu_exit (dev); -mt7921_mcu_fw_pmctrl (dev); - -tasklet_disable (&dev->irq_tasklet); -mt76_free_device (&dev->mt76); -}
drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h +2 -0
@@ -133,11 +133,13 @@ struct mt7921_phy {struct delayed_work scan_work; }; +#define mt7921_init_reset (dev) ((dev)->hif_ops->init_reset(dev))#define mt7921_dev_reset (dev) ((dev)->hif_ops->reset(dev))#define mt7921_mcu_init (dev) ((dev)->hif_ops->mcu_init(dev))#define __mt7921_mcu_drv_pmctrl (dev) ((dev)->hif_ops->drv_own(dev))#define __mt7921_mcu_fw_pmctrl (dev) ((dev)->hif_ops->fw_own(dev))struct mt7921_hif_ops { +int (*init_reset)(struct mt7921_dev *dev);int (*reset)(struct mt7921_dev *dev);int (*mcu_init)(struct mt7921_dev *dev);int (*drv_own)(struct mt7921_dev *dev);
drivers/net/wireless/mediatek/mt76/mt7921/pci.c +33 -1
@@ -93,6 +93,33 @@ static void mt7921_irq_tasklet(unsigned long data)napi_schedule (&dev->mt76.napi[MT_RXQ_MAIN ]); } +static int mt7921e_init_reset (struct mt7921_dev *dev) +{ +return mt7921_wpdma_reset (dev, true); +} + +static void mt7921e_unregister_device (struct mt7921_dev *dev) +{ +int i; +struct mt76_connac_pm *pm = &dev->pm; + +mt76_unregister_device (&dev->mt76); +mt76_for_each_q_rx (&dev->mt76, i) +napi_disable (&dev->mt76.napi[i]); +cancel_delayed_work_sync (&pm->ps_work); +cancel_work_sync (&pm->wake_work); + +mt7921_tx_token_put (dev); +mt7921_mcu_drv_pmctrl (dev); +mt7921_dma_cleanup (dev); +mt7921_wfsys_reset (dev); +mt7921_mcu_exit (dev); +mt7921_mcu_fw_pmctrl (dev); + +tasklet_disable (&dev->irq_tasklet); +mt76_free_device (&dev->mt76); +} +static int mt7921_pci_probe (struct pci_dev *pdev,const struct pci_device_id *id) {
@@ -116,6 +143,7 @@ static int mt7921_pci_probe(struct pci_dev *pdev, };static const struct mt7921_hif_ops mt7921_pcie_ops = { + .init_reset = mt7921e_init_reset, .reset = mt7921e_mac_reset, .mcu_init = mt7921e_mcu_init, .drv_own = mt7921e_mcu_drv_pmctrl,
@@ -172,6 +200,10 @@ static int mt7921_pci_probe(struct pci_dev *pdev,if (ret) goto err_free_dev; + ret =mt7921_dma_init (dev); +if (ret) + goto err_free_irq; + ret =mt7921_register_device (dev);if (ret) goto err_free_irq;
@@ -193,7 +225,7 @@ static void mt7921_pci_remove(struct pci_dev *pdev)struct mt76_dev *mdev =pci_get_drvdata (pdev); struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76); -mt7921_unregister_device (dev); +mt7921e_unregister_device (dev);devm_free_irq (&pdev->dev, pdev->irq, dev);pci_free_irq_vectors (pdev); }
Signature · 1 line
2.25.1
[email protected]
reviewerPATCH v2 5/16 mt76: mt7921: add MT7921_COMMON module
In reply to [email protected]From: Sean Wang <[email protected]>
This is a preliminary patch to introduce mt7921s support.
MT7921_COMMON module grouping bus independent objects the both mt7921e and mt7921s can share with and have to rely on.
--- drivers/net/wireless/mediatek/mt76/mt7921/Kconfig | 8 ++++++-- drivers/net/wireless/mediatek/mt76/mt7921/Makefile | 7 ++++--- drivers/net/wireless/mediatek/mt76/mt7921/init.c | 2 ++ drivers/net/wireless/mediatek/mt76/mt7921/mac.c | 6 ++++++ drivers/net/wireless/mediatek/mt76/mt7921/main.c | 7 +++++++ drivers/net/wireless/mediatek/mt76/mt7921/mcu.c | 9 +++++++++ 6 files changed, 34 insertions(+), 5 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7921/Kconfig +6 -2
@@ -1,8 +1,12 @@ # SPDX-License-Identifier: ISC -config MT7921E - tristate "MediaTek MT7921E (PCIe) support" +config MT7921_COMMON + tristate select MT76_CONNAC_LIB select WANT_DEV_COREDUMP + +config MT7921E + tristate "MediaTek MT7921E (PCIe) support" + select MT7921_COMMON depends on MAC80211 depends on PCI help
drivers/net/wireless/mediatek/mt76/mt7921/Makefile +4 -3
@@ -1,9 +1,10 @@ # SPDX-License-Identifier: ISC +obj-$(CONFIG_MT7921_COMMON) += mt7921-common.o obj-$(CONFIG_MT7921E) += mt7921e.o CFLAGS_trace.o := -I$(src) -mt7921e-y := pci.o pci_mac.o pci_mcu.o mac.o mcu.o dma.o eeprom.o main.o \ - init.o debugfs.o trace.o -mt7921e-$(CONFIG_NL80211_TESTMODE) += testmode.o +mt7921-common-y := mac.o mcu.o eeprom.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
drivers/net/wireless/mediatek/mt76/mt7921/init.c +2 -0
@@ -145,6 +145,7 @@ int mt7921_mac_init(struct mt7921_dev *dev)return mt76_connac_mcu_set_rts_thresh (&dev->mt76,0x92b ,0 ); } +EXPORT_SYMBOL_GPL (mt7921_mac_init);static int __mt7921_init_hardware (struct mt7921_dev *dev) {
@@ -285,3 +286,4 @@ int mt7921_register_device(struct mt7921_dev *dev)return 0 ; } +EXPORT_SYMBOL_GPL (mt7921_register_device);
drivers/net/wireless/mediatek/mt76/mt7921/mac.c +6 -0
@@ -39,6 +39,7 @@ static struct mt76_wcid *mt7921_rx_get_wcid(struct mt7921_dev *dev,void mt7921_sta_ps (struct mt76_dev *mdev,struct ieee80211_sta *sta,bool ps) { } +EXPORT_SYMBOL_GPL (mt7921_sta_ps);bool mt7921_mac_wtbl_update (struct mt7921_dev *dev,int idx,u32 mask) {
@@ -169,6 +170,7 @@ void mt7921_mac_sta_poll(struct mt7921_dev *dev)rcu_read_unlock (); } +EXPORT_SYMBOL_GPL (mt7921_mac_sta_poll); static void mt7921_mac_decode_he_radiotap_ru(struct mt76_rx_status *status,
@@ -920,6 +922,7 @@ void mt7921_mac_write_txwi(struct mt7921_dev *dev, __le32 *txwi, txwi[3 ] |=cpu_to_le32 (MT_TXD3_BA_DISABLE ); } } +EXPORT_SYMBOL_GPL (mt7921_mac_write_txwi);void mt7921_tx_check_aggr (struct ieee80211_sta *sta,__le32 *txwi) {
@@ -944,6 +947,7 @@ void mt7921_tx_check_aggr(struct ieee80211_sta *sta, __le32 *txwi)if (!test_and_set_bit (tid, &msta->ampdu_state))ieee80211_start_tx_ba_session (sta, tid,0 ); } +EXPORT_SYMBOL_GPL (mt7921_tx_check_aggr); static bool mt7921_mac_add_txs_skb(struct mt7921_dev *dev, struct mt76_wcid *wcid, int pid,
@@ -1132,6 +1136,7 @@ void mt7921_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,break ; } } +EXPORT_SYMBOL_GPL (mt7921_queue_rx_skb);void mt7921_mac_reset_counters (struct mt7921_phy *phy) {
@@ -1247,6 +1252,7 @@ void mt7921_update_channel(struct mt76_phy *mphy)mt76_connac_power_save_sched (mphy, &dev->pm); } +EXPORT_SYMBOL_GPL (mt7921_update_channel); static void mt7921_vif_connect_iter(void *priv, u8 *mac,
drivers/net/wireless/mediatek/mt76/mt7921/main.c +7 -0
@@ -237,6 +237,7 @@ int __mt7921_start(struct mt7921_phy *phy)return 0 ; } +EXPORT_SYMBOL_GPL (__mt7921_start);static int mt7921_start (struct ieee80211_hw *hw) {
@@ -646,6 +647,7 @@ int mt7921_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,return 0 ; } +EXPORT_SYMBOL_GPL (mt7921_mac_sta_add);void mt7921_mac_sta_assoc (struct mt76_dev *mdev,struct ieee80211_vif *vif,struct ieee80211_sta *sta)
@@ -667,6 +669,7 @@ void mt7921_mac_sta_assoc(struct mt76_dev *mdev, struct ieee80211_vif *vif,mt7921_mutex_release (dev); } +EXPORT_SYMBOL_GPL (mt7921_mac_sta_assoc);void mt7921_mac_sta_remove (struct mt76_dev *mdev,struct ieee80211_vif *vif,struct ieee80211_sta *sta)
@@ -698,6 +701,7 @@ void mt7921_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,mt76_connac_power_save_sched (&dev->mphy, &dev->pm); } +EXPORT_SYMBOL_GPL (mt7921_mac_sta_remove);void mt7921_tx_worker (struct mt76_worker *w) {
@@ -1250,3 +1254,6 @@ const struct ieee80211_ops mt7921_ops = { .flush = mt7921_flush, .set_sar_specs = mt7921_set_sar_specs, }; +EXPORT_SYMBOL_GPL (mt7921_ops); + +MODULE_LICENSE ("Dual BSD/GPL" );
drivers/net/wireless/mediatek/mt76/mt7921/mcu.c +9 -0
@@ -222,6 +222,8 @@ int mt7921_mcu_parse_response(struct mt76_dev *mdev, int cmd,return ret; } +EXPORT_SYMBOL_GPL (mt7921_mcu_parse_response); +int mt7921_mcu_send_message (struct mt76_dev *mdev,struct sk_buff *skb,int cmd,int *wait_seq)
@@ -319,6 +321,7 @@ int mt7921_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,return mt76_tx_queue_skb_raw (dev, mdev->q_mcu[txq], skb,0 ); } +EXPORT_SYMBOL_GPL (mt7921_mcu_send_message);static void mt7921_mcu_scan_event (struct mt7921_dev *dev,struct sk_buff *skb)
@@ -600,6 +603,7 @@ int mt7921_mcu_restart(struct mt76_dev *dev)return mt76_mcu_send_msg (dev,MCU_CMD_NIC_POWER_CTRL , &req,sizeof (req), false); } +EXPORT_SYMBOL_GPL (mt7921_mcu_restart);static u32 mt7921_get_data_mode (struct mt7921_dev *dev,u32 info) {
@@ -903,11 +907,13 @@ int mt7921_run_firmware(struct mt7921_dev *dev)return mt76_connac_mcu_get_nic_capability (&dev->mphy); } +EXPORT_SYMBOL_GPL (mt7921_run_firmware);void mt7921_mcu_exit (struct mt7921_dev *dev) {skb_queue_purge (&dev->mt76.mcu.res_q); } +EXPORT_SYMBOL_GPL (mt7921_mcu_exit);int mt7921_mcu_set_tx (struct mt7921_dev *dev,struct ieee80211_vif *vif) {
@@ -1033,6 +1039,7 @@ int mt7921_mcu_set_eeprom(struct mt7921_dev *dev)return mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_EFUSE_BUFFER_MODE , &req,sizeof (req), true); } +EXPORT_SYMBOL_GPL (mt7921_mcu_set_eeprom);int mt7921_mcu_get_eeprom (struct mt7921_dev *dev,u32 offset) {
@@ -1215,6 +1222,7 @@ int mt7921_mcu_drv_pmctrl(struct mt7921_dev *dev)return err; } +EXPORT_SYMBOL_GPL (mt7921_mcu_drv_pmctrl);int mt7921_mcu_fw_pmctrl (struct mt7921_dev *dev) {
@@ -1236,6 +1244,7 @@ int mt7921_mcu_fw_pmctrl(struct mt7921_dev *dev)return err; } +EXPORT_SYMBOL_GPL (mt7921_mcu_fw_pmctrl); int mt7921_mcu_set_beacon_filter(struct mt7921_dev *dev, struct ieee80211_vif *vif,
Signature · 1 line
2.25.1
Re: [PATCH v2 05/16] mt76: mt7921: add MT7921_COMMON module
Quoted 161 lines
From: Sean Wang <[email protected]>
This is a preliminary patch to introduce mt7921s support.
MT7921_COMMONmodule grouping bus independent objects the both mt7921e and mt7921s can share with and have to rely on.Tested-by Deren Wu <[email protected]>Signed-off-by Sean Wang <[email protected]>--- drivers/net/wireless/mediatek/mt76/mt7921/Kconfig | 8 ++++++-- drivers/net/wireless/mediatek/mt76/mt7921/Makefile | 7 ++++--- drivers/net/wireless/mediatek/mt76/mt7921/init.c | 2 ++ drivers/net/wireless/mediatek/mt76/mt7921/mac.c | 6 ++++++ drivers/net/wireless/mediatek/mt76/mt7921/main.c | 7 +++++++ drivers/net/wireless/mediatek/mt76/mt7921/mcu.c | 9 +++++++++ 6 files changed, 34 insertions(+), 5 deletions(-)drivers/net/wireless/mediatek/mt76/mt7921/Kconfig +6
-2@@ -1,8 +1,12 @@ # SPDX-License-Identifier: ISC -config MT7921E - tristate "MediaTek MT7921E (PCIe) support" +config MT7921_COMMON + tristate select MT76_CONNAC_LIB select WANT_DEV_COREDUMP + +config MT7921E + tristate "MediaTek MT7921E (PCIe) support" + select MT7921_COMMON depends on MAC80211 depends on PCI helpdrivers/net/wireless/mediatek/mt76/mt7921/Makefile +4
-3@@ -1,9 +1,10 @@ # SPDX-License-Identifier: ISC +obj-$(CONFIG_MT7921_COMMON) += mt7921-common.o obj-$(CONFIG_MT7921E) += mt7921e.o CFLAGS_trace.o := -I$(src) -mt7921e-y := pci.o pci_mac.o pci_mcu.o mac.o mcu.o dma.o eeprom.o main.o \ - init.o debugfs.o trace.o -mt7921e-$(CONFIG_NL80211_TESTMODE) += testmode.o +mt7921-common-y := mac.o mcu.o eeprom.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.odrivers/net/wireless/mediatek/mt76/mt7921/init.c +2
-0@@ -145,6 +145,7 @@ int mt7921_mac_init(struct mt7921_dev *dev)return mt76_connac_mcu_set_rts_thresh (&dev->mt76,0x92b ,0 ); } +EXPORT_SYMBOL_GPL (mt7921_mac_init);static int __mt7921_init_hardware (struct mt7921_dev *dev) {@@ -285,3 +286,4 @@ int mt7921_register_device(struct mt7921_dev *dev)return 0 ; } +EXPORT_SYMBOL_GPL (mt7921_register_device);drivers/net/wireless/mediatek/mt76/mt7921/mac.c +6
-0@@ -39,6 +39,7 @@ static struct mt76_wcid *mt7921_rx_get_wcid(struct mt7921_dev *dev,void mt7921_sta_ps (struct mt76_dev *mdev,struct ieee80211_sta *sta,bool ps) { } +EXPORT_SYMBOL_GPL (mt7921_sta_ps);bool mt7921_mac_wtbl_update (struct mt7921_dev *dev,int idx,u32 mask) {@@ -169,6 +170,7 @@ void mt7921_mac_sta_poll(struct mt7921_dev *dev)rcu_read_unlock (); } +EXPORT_SYMBOL_GPL (mt7921_mac_sta_poll); static void mt7921_mac_decode_he_radiotap_ru(struct mt76_rx_status *status,@@ -920,6 +922,7 @@ void mt7921_mac_write_txwi(struct mt7921_dev *dev, __le32 *txwi, txwi[3 ] |=cpu_to_le32 (MT_TXD3_BA_DISABLE ); } } +EXPORT_SYMBOL_GPL (mt7921_mac_write_txwi);void mt7921_tx_check_aggr (struct ieee80211_sta *sta,__le32 *txwi) {@@ -944,6 +947,7 @@ void mt7921_tx_check_aggr(struct ieee80211_sta *sta, __le32 *txwi)if (!test_and_set_bit (tid, &msta->ampdu_state))ieee80211_start_tx_ba_session (sta, tid,0 ); } +EXPORT_SYMBOL_GPL (mt7921_tx_check_aggr); static bool mt7921_mac_add_txs_skb(struct mt7921_dev *dev, struct mt76_wcid *wcid, int pid,@@ -1132,6 +1136,7 @@ void mt7921_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,break ; } } +EXPORT_SYMBOL_GPL (mt7921_queue_rx_skb);void mt7921_mac_reset_counters (struct mt7921_phy *phy) {@@ -1247,6 +1252,7 @@ void mt7921_update_channel(struct mt76_phy *mphy)mt76_connac_power_save_sched (mphy, &dev->pm); } +EXPORT_SYMBOL_GPL (mt7921_update_channel); static void mt7921_vif_connect_iter(void *priv, u8 *mac,drivers/net/wireless/mediatek/mt76/mt7921/main.c +4
-0@@ -237,6 +237,7 @@ int __mt7921_start(struct mt7921_phy *phy)return 0 ; } +EXPORT_SYMBOL_GPL (__mt7921_start);static int mt7921_start (struct ieee80211_hw *hw) {@@ -646,6 +647,7 @@ int mt7921_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,return 0 ; } +EXPORT_SYMBOL_GPL (mt7921_mac_sta_add);void mt7921_mac_sta_assoc (struct mt76_dev *mdev,struct ieee80211_vif *vif,struct ieee80211_sta *sta)@@ -667,6 +669,7 @@ void mt7921_mac_sta_assoc(struct mt76_dev *mdev, struct ieee80211_vif *vif,mt7921_mutex_release (dev); } +EXPORT_SYMBOL_GPL (mt7921_mac_sta_assoc);void mt7921_mac_sta_remove (struct mt76_dev *mdev,struct ieee80211_vif *vif,struct ieee80211_sta *sta)@@ -698,6 +701,7 @@ void mt7921_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,mt76_connac_power_save_sched (&dev->mphy, &dev->pm); } +EXPORT_SYMBOL_GPL (mt7921_mac_sta_remove);void mt7921_tx_worker (struct mt76_worker *w) {
drivers/net/wireless/mediatek/mt76/mt7921/main.c const struct ieee80211_ops mt7921_ops = { · line 1259
Quoted 6 lines
drivers/net/wireless/mediatek/mt76/mt7921/main.c +3
-0@@ -1250,3 +1254,6 @@ const struct ieee80211_ops mt7921_ops = { .flush = mt7921_flush, .set_sar_specs = mt7921_set_sar_specs, }; +EXPORT_SYMBOL_GPL (mt7921_ops); + +MODULE_LICENSE ("Dual BSD/GPL" );
is MODULE_AUTHOR defined?
drivers/net/wireless/mediatek/mt76/mt7921/mcu.c int mt7921_mcu_parse_response(struct mt76_dev *mdev, int cmd, · line 226
Quoted 10 lines
drivers/net/wireless/mediatek/mt76/mt7921/mcu.c +2
-0@@ -222,6 +222,8 @@ int mt7921_mcu_parse_response(struct mt76_dev *mdev, int cmd,return ret; } +EXPORT_SYMBOL_GPL (mt7921_mcu_parse_response); +
nit: drop new line here
Quoted 60 lines
drivers/net/wireless/mediatek/mt76/mt7921/mcu.c +7
-0int mt7921_mcu_send_message (struct mt76_dev *mdev,struct sk_buff *skb,int cmd,int *wait_seq)@@ -319,6 +321,7 @@ int mt7921_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,return mt76_tx_queue_skb_raw (dev, mdev->q_mcu[txq], skb,0 ); } +EXPORT_SYMBOL_GPL (mt7921_mcu_send_message);static void mt7921_mcu_scan_event (struct mt7921_dev *dev,struct sk_buff *skb)@@ -600,6 +603,7 @@ int mt7921_mcu_restart(struct mt76_dev *dev)return mt76_mcu_send_msg (dev,MCU_CMD_NIC_POWER_CTRL , &req,sizeof (req), false); } +EXPORT_SYMBOL_GPL (mt7921_mcu_restart);static u32 mt7921_get_data_mode (struct mt7921_dev *dev,u32 info) {@@ -903,11 +907,13 @@ int mt7921_run_firmware(struct mt7921_dev *dev)return mt76_connac_mcu_get_nic_capability (&dev->mphy); } +EXPORT_SYMBOL_GPL (mt7921_run_firmware);void mt7921_mcu_exit (struct mt7921_dev *dev) {skb_queue_purge (&dev->mt76.mcu.res_q); } +EXPORT_SYMBOL_GPL (mt7921_mcu_exit);int mt7921_mcu_set_tx (struct mt7921_dev *dev,struct ieee80211_vif *vif) {@@ -1033,6 +1039,7 @@ int mt7921_mcu_set_eeprom(struct mt7921_dev *dev)return mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_EFUSE_BUFFER_MODE , &req,sizeof (req), true); } +EXPORT_SYMBOL_GPL (mt7921_mcu_set_eeprom);int mt7921_mcu_get_eeprom (struct mt7921_dev *dev,u32 offset) {@@ -1215,6 +1222,7 @@ int mt7921_mcu_drv_pmctrl(struct mt7921_dev *dev)return err; } +EXPORT_SYMBOL_GPL (mt7921_mcu_drv_pmctrl);int mt7921_mcu_fw_pmctrl (struct mt7921_dev *dev) {@@ -1236,6 +1244,7 @@ int mt7921_mcu_fw_pmctrl(struct mt7921_dev *dev)return err; } +EXPORT_SYMBOL_GPL (mt7921_mcu_fw_pmctrl); int mt7921_mcu_set_beacon_filter(struct mt7921_dev *dev, struct ieee80211_vif *vif,Signature · 1 line
2.25.1
_______________________________________________
Linux-mediatek mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-mediatek
[email protected]
reviewerPATCH v2 6/16 mt76: connac: move mcu reg access utility routines in mt76_connac_lib module
In reply to [email protected]From: Sean Wang <[email protected]>
Move mcu reg access shared between mt7663s and mt7921s in mt76_connac_lib module.
--- .../wireless/mediatek/mt76/mt76_connac_mcu.c | 27 +++++++++++++++++++ .../wireless/mediatek/mt76/mt76_connac_mcu.h | 2 ++ 2 files changed, 29 insertions(+)
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c +27 -0
@@ -2406,6 +2406,33 @@ void mt76_connac_mcu_set_suspend_iter(void *priv, u8 *mac, }EXPORT_SYMBOL_GPL (mt76_connac_mcu_set_suspend_iter); +u32 mt76_connac_mcu_reg_rr (struct mt76_dev *dev,u32 offset) +{ +struct { +__le32 addr; +__le32 val; + } __packed req = { + .addr =cpu_to_le32 (offset), + }; + +return mt76_mcu_send_msg (dev,MCU_CMD_REG_READ , &req,sizeof (req), + true); +} +EXPORT_SYMBOL_GPL (mt76_connac_mcu_reg_rr); + +void mt76_connac_mcu_reg_wr (struct mt76_dev *dev,u32 offset,u32 val) +{ +struct { +__le32 addr; +__le32 val; + } __packed req = { + .addr =cpu_to_le32 (offset), + .val =cpu_to_le32 (val), + }; + +mt76_mcu_send_msg (dev,MCU_CMD_REG_WRITE , &req,sizeof (req), false); +} +EXPORT_SYMBOL_GPL (mt76_connac_mcu_reg_wr);#endif /* CONFIG_PM */ MODULE_AUTHOR ("Lorenzo Bianconi <[email protected]>" );
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h +2 -0
@@ -1111,4 +1111,6 @@ void mt76_connac_mcu_coredump_event(struct mt76_dev *dev, struct sk_buff *skb,int mt76_connac_mcu_set_rate_txpower (struct mt76_phy *phy);int mt76_connac_mcu_set_p2p_oppps (struct ieee80211_hw *hw,struct ieee80211_vif *vif); +u32 mt76_connac_mcu_reg_rr (struct mt76_dev *dev,u32 offset); +void mt76_connac_mcu_reg_wr (struct mt76_dev *dev,u32 offset,u32 val);#endif /* __MT76_CONNAC_MCU_H */
Signature · 7 lines
2.25.1 _______________________________________________ Linux-mediatek mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-mediatek
Re: [PATCH v2 06/16] mt76: connac: move mcu reg access utility routines in mt76_connac_lib module
Quoted 23 lines
From: Sean Wang <[email protected]>
Move mcu reg access shared between mt7663s and mt7921s in
mt76_connac_libmodule.Tested-by Deren Wu <[email protected]>Signed-off-by Sean Wang <[email protected]>--- .../wireless/mediatek/mt76/mt76_connac_mcu.c | 27 +++++++++++++++++++ .../wireless/mediatek/mt76/mt76_connac_mcu.h | 2 ++ 2 files changed, 29 insertions(+)drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c +3
-0@@ -2406,6 +2406,33 @@ void mt76_connac_mcu_set_suspend_iter(void *priv, u8 *mac, }EXPORT_SYMBOL_GPL (mt76_connac_mcu_set_suspend_iter); +u32 mt76_connac_mcu_reg_rr (struct mt76_dev *dev,u32 offset) +{ +struct {
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c void mt76_connac_mcu_set_suspend_iter(void *priv, u8 *mac, · line 2421
Quoted 10 lines
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c +10
-0+__le32 addr; +__le32 val; + }__packed req = { + .addr =cpu_to_le32 (offset), + }; + +return mt76_mcu_send_msg (dev,MCU_CMD_REG_READ , &req,sizeof (req), + true); +} +EXPORT_SYMBOL_GPL (mt76_connac_mcu_reg_rr);
It seems quite a common code, does it worth to move them in mcu.c? (mt76 module)
Regards,
Lorenzo
Quoted 31 lines
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c +14
-0+ +void mt76_connac_mcu_reg_wr (struct mt76_dev *dev,u32 offset,u32 val) +{ +struct { +__le32 addr; +__le32 val; + } __packed req = { + .addr =cpu_to_le32 (offset), + .val =cpu_to_le32 (val), + }; + +mt76_mcu_send_msg (dev,MCU_CMD_REG_WRITE , &req,sizeof (req), false); +} +EXPORT_SYMBOL_GPL (mt76_connac_mcu_reg_wr);#endif /* CONFIG_PM */ MODULE_AUTHOR ("Lorenzo Bianconi <[email protected]>" );drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h +2
-0@@ -1111,4 +1111,6 @@ void mt76_connac_mcu_coredump_event(struct mt76_dev *dev, struct sk_buff *skb,int mt76_connac_mcu_set_rate_txpower (struct mt76_phy *phy);int mt76_connac_mcu_set_p2p_oppps (struct ieee80211_hw *hw,struct ieee80211_vif *vif); +u32 mt76_connac_mcu_reg_rr (struct mt76_dev *dev,u32 offset); +void mt76_connac_mcu_reg_wr (struct mt76_dev *dev,u32 offset,u32 val);#endif /* __MT76_CONNAC_MCU_H */ Signature · 1 line
2.25.1
[email protected]
reviewerPATCH v2 7/16 mt76: mt7663s: rely on mcu reg access utility
In reply to [email protected]From: Sean Wang <[email protected]>
rely on mcu reg access utility and drop the duplicated code.
--- .../net/wireless/mediatek/mt76/mt7615/mcu.c | 28 ------------------- .../wireless/mediatek/mt76/mt7615/mt7615.h | 2 -- .../wireless/mediatek/mt76/mt7615/sdio_mcu.c | 4 +-- 3 files changed, 2 insertions(+), 32 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +0 -28
@@ -2759,31 +2759,3 @@ int mt7615_mcu_set_roc(struct mt7615_phy *phy, struct ieee80211_vif *vif,return mt76_mcu_send_msg (&dev->mt76,MCU_CMD_SET_ROC , &req,sizeof (req), false); } - -u32 mt7615_mcu_reg_rr (struct mt76_dev *dev,u32 offset) -{ -struct { -__le32 addr; -__le32 val; - } __packed req = { - .addr =cpu_to_le32 (offset), - }; - -return mt76_mcu_send_msg (dev,MCU_CMD_REG_READ , &req,sizeof (req), - true); -} -EXPORT_SYMBOL_GPL (mt7615_mcu_reg_rr); - -void mt7615_mcu_reg_wr (struct mt76_dev *dev,u32 offset,u32 val) -{ -struct { -__le32 addr; -__le32 val; - } __packed req = { - .addr =cpu_to_le32 (offset), - .val =cpu_to_le32 (val), - }; - -mt76_mcu_send_msg (dev,MCU_CMD_REG_WRITE , &req,sizeof (req), false); -} -EXPORT_SYMBOL_GPL (mt7615_mcu_reg_wr);
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h +0 -2
@@ -553,8 +553,6 @@ int mt7615_mac_set_beacon_filter(struct mt7615_phy *phy,int mt7615_mcu_set_bss_pm (struct mt7615_dev *dev,struct ieee80211_vif *vif,bool enable);int __mt7663_load_firmware (struct mt7615_dev *dev); -u32 mt7615_mcu_reg_rr (struct mt76_dev *dev,u32 offset); -void mt7615_mcu_reg_wr (struct mt76_dev *dev,u32 offset,u32 val);void mt7615_coredump_work (struct work_struct *work);void mt7622_trigger_hif_int (struct mt7615_dev *dev,bool en);
drivers/net/wireless/mediatek/mt76/mt7615/sdio_mcu.c +2 -2
@@ -137,8 +137,8 @@ int mt7663s_mcu_init(struct mt7615_dev *dev) .mcu_skb_send_msg = mt7663s_mcu_send_message, .mcu_parse_response = mt7615_mcu_parse_response, .mcu_restart = mt7615_mcu_restart, - .mcu_rr = mt7615_mcu_reg_rr, - .mcu_wr = mt7615_mcu_reg_wr, + .mcu_rr = mt76_connac_mcu_reg_rr, + .mcu_wr = mt76_connac_mcu_reg_wr, };struct mt7615_mcu_ops *mcu_ops;int ret;
Signature · 1 line
2.25.1
[email protected]
reviewerPATCH v2 8/16 mt76: mt7921: make all event parser reusable between mt7921s and mt7921e
In reply to [email protected]From: Sean Wang <[email protected]>
The longer event such as the event for mcu_get_nic_capability would hold the data in paged fragment skb for the SDIO device so we turn the skb to be linearized skb before accessing it to reuse the same event parser betweem mt7921s and mt7921e.
--- drivers/net/wireless/mediatek/mt76/mt7921/mcu.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
drivers/net/wireless/mediatek/mt76/mt7921/mcu.c +8 -1
@@ -456,7 +456,14 @@ mt7921_mcu_rx_unsolicited_event(struct mt7921_dev *dev, struct sk_buff *skb)void mt7921_mcu_rx_event (struct mt7921_dev *dev,struct sk_buff *skb) { -struct mt7921_mcu_rxd *rxd = (struct mt7921_mcu_rxd *)skb->data; +struct mt7921_mcu_rxd *rxd; +int ret; + + ret =skb_linearize (skb); +if (ret) +return ; + + rxd = (struct mt7921_mcu_rxd *)skb->data;if (rxd->eid ==0x6 ) {mt76_mcu_rx_event (&dev->mt76, skb);
Signature · 7 lines
2.25.1 _______________________________________________ Linux-mediatek mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-mediatek
Re: [PATCH v2 08/16] mt76: mt7921: make all event parser reusable between mt7921s and mt7921e
Quoted 18 lines
From: Sean Wang <[email protected]>
The longer event such as the event for
mcu_get_nic_capabilitywould hold the data in paged fragment skb for the SDIO device so we turn the skb to be linearized skb before accessing it to reuse the same event parser betweem mt7921s and mt7921e.Tested-by Deren Wu <[email protected]>Signed-off-by Sean Wang <[email protected]>--- drivers/net/wireless/mediatek/mt76/mt7921/mcu.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)drivers/net/wireless/mediatek/mt76/mt7921/mcu.c +0
-0
drivers/net/wireless/mediatek/mt76/mt7921/mcu.c mt7921_mcu_rx_unsolicited_event(struct mt7921_dev *dev, struct sk_buff *skb) · line 462
Quoted 8 lines
drivers/net/wireless/mediatek/mt76/mt7921/mcu.c +4
-1@@ -456,7 +456,14 @@ mt7921_mcu_rx_unsolicited_event(struct mt7921_dev *dev, struct sk_buff *skb)void mt7921_mcu_rx_event (struct mt7921_dev *dev,struct sk_buff *skb) { -struct mt7921_mcu_rxd *rxd = (struct mt7921_mcu_rxd *)skb->data; +struct mt7921_mcu_rxd *rxd; +int ret; + + ret =skb_linearize (skb);
nit: we do not need ret variable here:
if (skb_linearize(skb)) return;
Quoted 10 lines
drivers/net/wireless/mediatek/mt76/mt7921/mcu.c +4
-0+if (ret) +return ; + + rxd = (struct mt7921_mcu_rxd *)skb->data;if (rxd->eid ==0x6 ) {mt76_mcu_rx_event (&dev->mt76, skb);Signature · 1 line
2.25.1
[email protected]
reviewerPATCH v2 9/16 mt76: mt7921: use physical addr to unify register access
In reply to [email protected]From: Sean Wang <[email protected]>
Use physical address to unify the register access and reorder the entries in fixed_map table to accelerate the address lookup for MT7921e. Cosmetics the patch with adding an extra space to make all entries in the array style consistent.
--- .../net/wireless/mediatek/mt76/mt7921/dma.c | 27 ++++++++++--------- .../net/wireless/mediatek/mt76/mt7921/regs.h | 22 +++++++-------- 2 files changed, 25 insertions(+), 24 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7921/dma.c +14 -13
@@ -85,36 +85,37 @@ static u32 __mt7921_reg_addr(struct mt7921_dev *dev, u32 addr)u32 mapped;u32 size; } fixed_map[] = { - { 0x00400000, 0x80000, 0x10000}, /* WF_MCU_SYSRAM */ - { 0x00410000, 0x90000, 0x10000}, /* WF_MCU_SYSRAM (configure register) */ - { 0x40000000, 0x70000, 0x10000}, /* WF_UMAC_SYSRAM */ + { 0x820d0000, 0x30000, 0x10000 }, /* WF_LMAC_TOP (WF_WTBLON) */ + { 0x820ed000, 0x24800, 0x0800 }, /* WF_LMAC_TOP BN0 (WF_MIB) */ + { 0x820e4000, 0x21000, 0x0400 }, /* WF_LMAC_TOP BN0 (WF_TMAC) */ + { 0x820e7000, 0x21e00, 0x0200 }, /* WF_LMAC_TOP BN0 (WF_DMA) */ + { 0x820eb000, 0x24200, 0x0400 }, /* WF_LMAC_TOP BN0 (WF_LPON) */ + { 0x820e2000, 0x20800, 0x0400 }, /* WF_LMAC_TOP BN0 (WF_AGG) */ + { 0x820e3000, 0x20c00, 0x0400 }, /* WF_LMAC_TOP BN0 (WF_ARB) */ + { 0x820e5000, 0x21400, 0x0800 }, /* WF_LMAC_TOP BN0 (WF_RMAC) */ + { 0x00400000, 0x80000, 0x10000 }, /* WF_MCU_SYSRAM */ + { 0x00410000, 0x90000, 0x10000 }, /* WF_MCU_SYSRAM (configure register) */ + { 0x40000000, 0x70000, 0x10000 }, /* WF_UMAC_SYSRAM */ { 0x54000000, 0x02000, 0x1000 }, /* WFDMA PCIE0 MCU DMA0 */ { 0x55000000, 0x03000, 0x1000 }, /* WFDMA PCIE0 MCU DMA1 */ { 0x58000000, 0x06000, 0x1000 }, /* WFDMA PCIE1 MCU DMA0 (MEM_DMA) */ { 0x59000000, 0x07000, 0x1000 }, /* WFDMA PCIE1 MCU DMA1 */ { 0x7c000000, 0xf0000, 0x10000 }, /* CONN_INFRA */ { 0x7c020000, 0xd0000, 0x10000 }, /* CONN_INFRA, WFDMA */ - { 0x7c060000, 0xe0000, 0x10000}, /* CONN_INFRA, conn_host_csr_top */ + { 0x7c060000, 0xe0000, 0x10000 }, /* CONN_INFRA, conn_host_csr_top */ { 0x80020000, 0xb0000, 0x10000 }, /* WF_TOP_MISC_OFF */ { 0x81020000, 0xc0000, 0x10000 }, /* WF_TOP_MISC_ON */ { 0x820c0000, 0x08000, 0x4000 }, /* WF_UMAC_TOP (PLE) */ { 0x820c8000, 0x0c000, 0x2000 }, /* WF_UMAC_TOP (PSE) */ - { 0x820cc000, 0x0e000, 0x2000 }, /* WF_UMAC_TOP (PP) */ + { 0x820cc000, 0x0e000, 0x1000 }, /* WF_UMAC_TOP (PP) */ + { 0x820cd000, 0x0f000, 0x1000 }, /* WF_MDP_TOP */ { 0x820ce000, 0x21c00, 0x0200 }, /* WF_LMAC_TOP (WF_SEC) */ { 0x820cf000, 0x22000, 0x1000 }, /* WF_LMAC_TOP (WF_PF) */ - { 0x820d0000, 0x30000, 0x10000 }, /* WF_LMAC_TOP (WF_WTBLON) */ { 0x820e0000, 0x20000, 0x0400 }, /* WF_LMAC_TOP BN0 (WF_CFG) */ { 0x820e1000, 0x20400, 0x0200 }, /* WF_LMAC_TOP BN0 (WF_TRB) */ - { 0x820e2000, 0x20800, 0x0400 }, /* WF_LMAC_TOP BN0 (WF_AGG) */ - { 0x820e3000, 0x20c00, 0x0400 }, /* WF_LMAC_TOP BN0 (WF_ARB) */ - { 0x820e4000, 0x21000, 0x0400 }, /* WF_LMAC_TOP BN0 (WF_TMAC) */ - { 0x820e5000, 0x21400, 0x0800 }, /* WF_LMAC_TOP BN0 (WF_RMAC) */ - { 0x820e7000, 0x21e00, 0x0200 }, /* WF_LMAC_TOP BN0 (WF_DMA) */ { 0x820e9000, 0x23400, 0x0200 }, /* WF_LMAC_TOP BN0 (WF_WTBLOFF) */ { 0x820ea000, 0x24000, 0x0200 }, /* WF_LMAC_TOP BN0 (WF_ETBF) */ - { 0x820eb000, 0x24200, 0x0400 }, /* WF_LMAC_TOP BN0 (WF_LPON) */ { 0x820ec000, 0x24600, 0x0200 }, /* WF_LMAC_TOP BN0 (WF_INT) */ - { 0x820ed000, 0x24800, 0x0800 }, /* WF_LMAC_TOP BN0 (WF_MIB) */ { 0x820f0000, 0xa0000, 0x0400 }, /* WF_LMAC_TOP BN1 (WF_CFG) */ { 0x820f1000, 0xa0600, 0x0200 }, /* WF_LMAC_TOP BN1 (WF_TRB) */ { 0x820f2000, 0xa0800, 0x0400 }, /* WF_LMAC_TOP BN1 (WF_AGG) */
drivers/net/wireless/mediatek/mt76/mt7921/regs.h +11 -11
@@ -14,7 +14,7 @@#define MT_MCU_INT_EVENT_SER_TRIGGER BIT(2)#define MT_MCU_INT_EVENT_RESET_DONE BIT(3) -#define MT_PLE_BASE 0x8000 +#define MT_PLE_BASE 0x820c0000#define MT_PLE (ofs) (MT_PLE_BASE + (ofs))#define MT_PLE_FL_Q0_CTRL MT_PLE(0x1b0)
@@ -26,7 +26,7 @@ ((n) << 2))#define MT_PLE_AMSDU_PACK_MSDU_CNT (n) MT_PLE(0x10e0 + ((n) << 2)) -#define MT_MDP_BASE 0xf000 +#define MT_MDP_BASE 0x820cd000#define MT_MDP (ofs) (MT_MDP_BASE + (ofs))#define MT_MDP_DCR0 MT_MDP(0x000)
@@ -49,7 +49,7 @@#define MT_MDP_TO_WM 1/* TMAC: band 0(0x21000), band 1(0xa1000) */ -#define MT_WF_TMAC_BASE (_band) ((_band) ? 0xa1000 : 0x21000) +#define MT_WF_TMAC_BASE (_band) ((_band) ? 0x820f4000 : 0x820e4000)#define MT_WF_TMAC (_band, ofs) (MT_WF_TMAC_BASE(_band) + (ofs))#define MT_TMAC_TCR0 (_band) MT_WF_TMAC(_band, 0)
@@ -74,7 +74,7 @@#define MT_TMAC_TRCR0 (_band) MT_WF_TMAC(_band, 0x09c)#define MT_TMAC_TFCR0 (_band) MT_WF_TMAC(_band, 0x1e0) -#define MT_WF_DMA_BASE (_band) ((_band) ? 0xa1e00 : 0x21e00) +#define MT_WF_DMA_BASE (_band) ((_band) ? 0x820f7000 : 0x820e7000)#define MT_WF_DMA (_band, ofs) (MT_WF_DMA_BASE(_band) + (ofs))#define MT_DMA_DCR0 (_band) MT_WF_DMA(_band, 0x000)
@@ -82,7 +82,7 @@#define MT_DMA_DCR0_RXD_G5_EN BIT(23)/* LPON: band 0(0x24200), band 1(0xa4200) */ -#define MT_WF_LPON_BASE (_band) ((_band) ? 0xa4200 : 0x24200) +#define MT_WF_LPON_BASE (_band) ((_band) ? 0x820fb000 : 0x820eb000)#define MT_WF_LPON (_band, ofs) (MT_WF_LPON_BASE(_band) + (ofs))#define MT_LPON_UTTR0 (_band) MT_WF_LPON(_band, 0x080)
@@ -93,7 +93,7 @@#define MT_LPON_TCR_SW_WRITE BIT(0)/* MIB: band 0(0x24800), band 1(0xa4800) */ -#define MT_WF_MIB_BASE (_band) ((_band) ? 0xa4800 : 0x24800) +#define MT_WF_MIB_BASE (_band) ((_band) ? 0x820fd000 : 0x820ed000)#define MT_WF_MIB (_band, ofs) (MT_WF_MIB_BASE(_band) + (ofs))#define MT_MIB_SCR1 (_band) MT_WF_MIB(_band, 0x004)
@@ -142,7 +142,7 @@#define MT_MIB_ARNG (_band, n) MT_WF_MIB(_band, 0x0b0 + ((n) << 2))#define MT_MIB_ARNCR_RANGE (val, n) (((val) >> ((n) << 3)) & GENMASK(7, 0)) -#define MT_WTBLON_TOP_BASE 0x34000 +#define MT_WTBLON_TOP_BASE 0x820d4000#define MT_WTBLON_TOP (ofs) (MT_WTBLON_TOP_BASE + (ofs))#define MT_WTBLON_TOP_WDUCR MT_WTBLON_TOP(0x200)#define MT_WTBLON_TOP_WDUCR_GROUP GENMASK(2, 0)
@@ -152,7 +152,7 @@#define MT_WTBL_UPDATE_ADM_COUNT_CLEAR BIT(12)#define MT_WTBL_UPDATE_BUSY BIT(31) -#define MT_WTBL_BASE 0x38000 +#define MT_WTBL_BASE 0x820d8000#define MT_WTBL_LMAC_ID GENMASK(14, 8)#define MT_WTBL_LMAC_DW GENMASK(7, 2)#define MT_WTBL_LMAC_OFFS (_id, _dw) (MT_WTBL_BASE | \
@@ -160,7 +160,7 @@ FIELD_PREP(MT_WTBL_LMAC_DW, _dw))/* AGG: band 0(0x20800), band 1(0xa0800) */ -#define MT_WF_AGG_BASE (_band) ((_band) ? 0xa0800 : 0x20800) +#define MT_WF_AGG_BASE (_band) ((_band) ? 0x820f2000 : 0x820e2000)#define MT_WF_AGG (_band, ofs) (MT_WF_AGG_BASE(_band) + (ofs))#define MT_AGG_AWSCR0 (_band, _n) MT_WF_AGG(_band, 0x05c + (_n) * 4)
@@ -191,7 +191,7 @@#define MT_AGG_ATCR3 (_band) MT_WF_AGG(_band, 0x0f4)/* ARB: band 0(0x20c00), band 1(0xa0c00) */ -#define MT_WF_ARB_BASE (_band) ((_band) ? 0xa0c00 : 0x20c00) +#define MT_WF_ARB_BASE (_band) ((_band) ? 0x820f3000 : 0x820e3000)#define MT_WF_ARB (_band, ofs) (MT_WF_ARB_BASE(_band) + (ofs))#define MT_ARB_SCR (_band) MT_WF_ARB(_band, 0x080)
@@ -201,7 +201,7 @@#define MT_ARB_DRNGR0 (_band, _n) MT_WF_ARB(_band, 0x194 + (_n) * 4)/* RMAC: band 0(0x21400), band 1(0xa1400) */ -#define MT_WF_RMAC_BASE (_band) ((_band) ? 0xa1400 : 0x21400) +#define MT_WF_RMAC_BASE (_band) ((_band) ? 0x820f5000 : 0x820e5000)#define MT_WF_RMAC (_band, ofs) (MT_WF_RMAC_BASE(_band) + (ofs))#define MT_WF_RFCR (_band) MT_WF_RMAC(_band, 0x000)
Signature · 1 line
2.25.1
[email protected]
reviewerPATCH v2 10/16 mt76: sdio: move common code in mt76_sdio module
In reply to [email protected]From: Lorenzo Bianconi <[email protected]>
Move sdio common code in mt76_sdio module. This is a preliminary patch to support mt7921s devices.
---
drivers/net/wireless/mediatek/mt76/Makefile | 2 +-
drivers/net/wireless/mediatek/mt76/mt76.h | 16 +
.../wireless/mediatek/mt76/mt7615/Makefile | 2 +-
.../wireless/mediatek/mt76/mt7615/mt7615.h | 4 -
.../net/wireless/mediatek/mt76/mt7615/sdio.c | 279 ++----------------
.../wireless/mediatek/mt76/mt7615/sdio_mcu.c | 6 +-
drivers/net/wireless/mediatek/mt76/sdio.c | 265 +++++++++++++++++
.../mediatek/mt76/{mt7615 => }/sdio.h | 0
.../mediatek/mt76/{mt7615 => }/sdio_txrx.c | 82 +++--
9 files changed, 343 insertions(+), 313 deletions(-)
rename drivers/net/wireless/mediatek/mt76/{mt7615 => }/sdio.h (100%)
rename drivers/net/wireless/mediatek/mt76/{mt7615 => }/sdio_txrx.c (74%)drivers/net/wireless/mediatek/mt76/Makefile +1 -1
@@ -14,7 +14,7 @@ mt76-$(CONFIG_PCI) += pci.o mt76-$(CONFIG_NL80211_TESTMODE) += testmode.o mt76-usb-y := usb.o usb_trace.o -mt76-sdio-y := sdio.o +mt76-sdio-y := sdio.o sdio_txrx.o CFLAGS_trace.o := -I$(src) CFLAGS_usb_trace.o := -I$(src)
drivers/net/wireless/mediatek/mt76/mt76.h +16 -0
@@ -1246,6 +1246,22 @@ int mt76s_init(struct mt76_dev *dev, struct sdio_func *func, const struct mt76_bus_ops *bus_ops);int mt76s_alloc_queues (struct mt76_dev *dev);void mt76s_deinit (struct mt76_dev *dev); +void mt76s_sdio_irq (struct sdio_func *func); +void mt76s_txrx_worker (struct mt76_sdio *sdio); +int mt76s_hw_init (struct mt76_dev *dev,struct sdio_func *func); +u32 mt76s_rr (struct mt76_dev *dev,u32 offset); +void mt76s_wr (struct mt76_dev *dev,u32 offset,u32 val); +u32 mt76s_rmw (struct mt76_dev *dev,u32 offset,u32 mask,u32 val); +u32 mt76s_read_pcr (struct mt76_dev *dev); +void mt76s_write_copy (struct mt76_dev *dev,u32 offset, +const void *data,int len); +void mt76s_read_copy (struct mt76_dev *dev,u32 offset, +void *data,int len); +int mt76s_wr_rp (struct mt76_dev *dev,u32 base, +const struct mt76_reg_pair *data, +int len); +int mt76s_rd_rp (struct mt76_dev *dev,u32 base, +struct mt76_reg_pair *data,int len);struct sk_buff * mt76_mcu_msg_alloc(struct mt76_dev *dev, const void *data,
drivers/net/wireless/mediatek/mt76/mt7615/Makefile +1 -1
@@ -17,4 +17,4 @@ mt7615e-$(CONFIG_MT7622_WMAC) += soc.o mt7663-usb-sdio-common-y := usb_sdio.o mt7663u-y := usb.o usb_mcu.o -mt7663s-y := sdio.o sdio_mcu.o sdio_txrx.o +mt7663s-y := sdio.o sdio_mcu.o
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h +0 -4
@@ -569,10 +569,6 @@ int mt7663_usb_sdio_register_device(struct mt7615_dev *dev);int mt7663u_mcu_init (struct mt7615_dev *dev);/* sdio */ -u32 mt7663s_read_pcr (struct mt7615_dev *dev);int mt7663s_mcu_init (struct mt7615_dev *dev); -void mt7663s_txrx_worker (struct mt76_worker *w); -void mt7663s_rx_work (struct work_struct *work); -void mt7663s_sdio_irq (struct sdio_func *func);#endif
drivers/net/wireless/mediatek/mt76/mt7615/sdio.c +19 -260
313 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7615/sdio_mcu.c +3 -3
@@ -10,11 +10,11 @@#include <linux/module.h> #include <linux/iopoll.h> +#include "../sdio.h" #include "mt7615.h" #include "mac.h" #include "mcu.h" #include "regs.h" -#include "sdio.h" static int mt7663s_mcu_init_sched (struct mt7615_dev *dev) {
@@ -63,7 +63,7 @@ static int __mt7663s_mcu_drv_pmctrl(struct mt7615_dev *dev)sdio_writel (func,WHLPCR_FW_OWN_REQ_CLR ,MCR_WHLPCR ,NULL ); - ret =readx_poll_timeout (mt7663s_read_pcr, dev, status, + ret =readx_poll_timeout (mt76s_read_pcr, &dev->mt76, status, status &WHLPCR_IS_DRIVER_OWN ,2000 ,1000000 );if (ret <0 ) {dev_err (dev->mt76.dev,"Cannot get ownership from device" );
@@ -111,7 +111,7 @@ static int mt7663s_mcu_fw_pmctrl(struct mt7615_dev *dev)sdio_writel (func,WHLPCR_FW_OWN_REQ_SET ,MCR_WHLPCR ,NULL ); - ret =readx_poll_timeout (mt7663s_read_pcr, dev, status, + ret =readx_poll_timeout (mt76s_read_pcr, &dev->mt76, status, !(status &WHLPCR_IS_DRIVER_OWN ),2000 ,1000000 );if (ret <0 ) {dev_err (dev->mt76.dev,"Cannot set ownership to device" );
drivers/net/wireless/mediatek/mt76/sdio.c +265 -0
271 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/sdio.h renamed from drivers/net/wireless/mediatek/mt76/mt7615/sdio.h +0 -0
drivers/net/wireless/mediatek/mt76/sdio_txrx.c renamed from drivers/net/wireless/mediatek/mt76/mt7615/sdio_txrx.c +38 -44
208 lines not on this page · raw message
Signature · 7 lines
2.25.1 _______________________________________________ Linux-mediatek mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-mediatek
[email protected]
reviewerPATCH v2 11/16 mt76: sdio: extend sdio module to support CONNAC2
In reply to [email protected]From: Sean Wang <[email protected]>
Extend sdio module to support CONNAC2 hw that mt7921s rely on.
--- drivers/net/wireless/mediatek/mt76/mt76.h | 5 +- .../net/wireless/mediatek/mt76/mt7615/sdio.c | 5 +- drivers/net/wireless/mediatek/mt76/sdio.c | 23 ++++++- drivers/net/wireless/mediatek/mt76/sdio.h | 50 ++++++++++++++- .../net/wireless/mediatek/mt76/sdio_txrx.c | 62 ++++++++++++++++--- 5 files changed, 128 insertions(+), 17 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76.h +4 -1
@@ -505,6 +505,8 @@ struct mt76_sdio {struct sdio_func *func;void *intr_data; +int intr_size; +u8 hw_ver;struct {int pse_data_quota;
@@ -1248,7 +1250,8 @@ int mt76s_alloc_queues(struct mt76_dev *dev);void mt76s_deinit (struct mt76_dev *dev);void mt76s_sdio_irq (struct sdio_func *func);void mt76s_txrx_worker (struct mt76_sdio *sdio); -int mt76s_hw_init (struct mt76_dev *dev,struct sdio_func *func); +int mt76s_hw_init (struct mt76_dev *dev,struct sdio_func *func, +int hw_ver);u32 mt76s_rr (struct mt76_dev *dev,u32 offset);void mt76s_wr (struct mt76_dev *dev,u32 offset,u32 val);u32 mt76s_rmw (struct mt76_dev *dev,u32 offset,u32 mask,u32 val);
drivers/net/wireless/mediatek/mt76/mt7615/sdio.c +3 -2
@@ -100,7 +100,7 @@ static int mt7663s_probe(struct sdio_func *func,if (ret <0 ) goto error; - ret =mt76s_hw_init (mdev, func); + ret =mt76s_hw_init (mdev, func,MT76_CONNAC_SDIO );if (ret) goto error;
@@ -108,8 +108,9 @@ static int mt7663s_probe(struct sdio_func *func, (mt76_rr (dev,MT_HW_REV ) &0xff );dev_dbg (mdev->dev,"ASIC revision: %04x\n" , mdev->rev); + mdev->sdio.intr_size =sizeof (struct mt76_connac_sdio_intr ); mdev->sdio.intr_data =devm_kmalloc (mdev->dev, -sizeof (struct mt76s_intr ), + mdev->sdio.intr_size,GFP_KERNEL );if (!mdev->sdio.intr_data) { ret = -ENOMEM ;
drivers/net/wireless/mediatek/mt76/sdio.c +20 -3
@@ -221,11 +221,13 @@ int mt76s_rd_rp(struct mt76_dev *dev, u32 base, }EXPORT_SYMBOL_GPL (mt76s_rd_rp); -int mt76s_hw_init (struct mt76_dev *dev,struct sdio_func *func) +int mt76s_hw_init (struct mt76_dev *dev,struct sdio_func *func,int hw_ver) {u32 status, ctrl;int ret; + dev->sdio.hw_ver = hw_ver; +sdio_claim_host (func); ret =sdio_enable_func (func);
@@ -255,12 +257,27 @@ int mt76s_hw_init(struct mt76_dev *dev, struct sdio_func *func) goto disable_func; ctrl =WHIER_RX0_DONE_INT_EN |WHIER_TX_DONE_INT_EN ; +if (hw_ver ==MT76_CONNAC2_SDIO ) + ctrl |=WHIER_RX1_DONE_INT_EN ;sdio_writel (func, ctrl,MCR_WHIER , &ret);if (ret <0 ) goto disable_func; -/* set WHISR as read clear and Rx aggregation number as 16 */ - ctrl =FIELD_PREP (MAX_HIF_RX_LEN_NUM ,16 ); +switch (hw_ver) { +case MT76_CONNAC_SDIO : +/* set WHISR as read clear and Rx aggregation number as 16 */ + ctrl =FIELD_PREP (MAX_HIF_RX_LEN_NUM ,16 ); +break ; +default : + ctrl =sdio_readl (func,MCR_WHCR , &ret); +if (ret <0 ) + goto disable_func; + ctrl &= ~MAX_HIF_RX_LEN_NUM_CONNAC2 ; + ctrl &= ~W_INT_CLR_CTRL ;/* read clear */ + ctrl |=FIELD_PREP (MAX_HIF_RX_LEN_NUM_CONNAC2 ,0 ); +break ; + } +sdio_writel (func, ctrl,MCR_WHCR , &ret);if (ret <0 ) goto disable_func;
drivers/net/wireless/mediatek/mt76/sdio.h +49 -1
73 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/sdio_txrx.c +52 -10
108 lines not on this page · raw message
Signature · 1 line
2.25.1
[email protected]
reviewerPATCH v2 12/16 mt76: connac: extend mcu_get_nic_capability
In reply to [email protected]From: Sean Wang <[email protected]>
Extend mcu_get_nic_capability to obtain tx resource for SDIO device, MAC address, and PHY capability.
--- drivers/net/wireless/mediatek/mt76/mt76.h | 1 + .../wireless/mediatek/mt76/mt76_connac_mcu.c | 66 +++++++++++++++++++ 2 files changed, 67 insertions(+)
drivers/net/wireless/mediatek/mt76/mt76.h +1 -0
@@ -512,6 +512,7 @@ struct mt76_sdio {int pse_data_quota;int ple_data_quota;int pse_mcu_quota; +int pse_page_size;int deficit; } sched; };
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c +66 -0
78 lines not on this page · raw message
Signature · 1 line
2.25.1
[email protected]
reviewerPATCH v2 13/16 mt76: mt7921: rely on mcu_get_nic_capability
In reply to [email protected]From: Sean Wang <[email protected]>
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.
--- .../wireless/mediatek/mt76/mt7615/sdio_mcu.c | 1 + .../wireless/mediatek/mt76/mt7921/Makefile | 2 +- .../wireless/mediatek/mt76/mt7921/eeprom.c | 101 ------------------ .../net/wireless/mediatek/mt76/mt7921/init.c | 10 +- .../net/wireless/mediatek/mt76/mt7921/mcu.c | 8 +- .../wireless/mediatek/mt76/mt7921/mt7921.h | 8 -- .../net/wireless/mediatek/mt76/sdio_txrx.c | 3 +- 7 files changed, 10 insertions(+), 123 deletions(-) delete mode 100644 drivers/net/wireless/mediatek/mt76/mt7921/eeprom.c
drivers/net/wireless/mediatek/mt76/mt7615/sdio_mcu.c +1 -0
@@ -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 ;
drivers/net/wireless/mediatek/mt76/mt7921/Makefile +1 -1
@@ -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
drivers/net/wireless/mediatek/mt76/mt7921/eeprom.c deleted +0 -101
101 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7921/init.c +1 -9
@@ -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; }
drivers/net/wireless/mediatek/mt76/mt7921/mcu.c +5 -3
@@ -909,10 +909,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);
drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h +0 -8
@@ -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);
drivers/net/wireless/mediatek/mt76/sdio_txrx.c +2 -1
@@ -210,7 +210,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 ;
Signature · 7 lines
2.25.1 _______________________________________________ Linux-mediatek mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-mediatek
[email protected]
reviewerPATCH v2 14/16 mt76: mt7921: refactor mt7921_mcu_send_message
In reply to [email protected]From: Sean Wang <[email protected]>
This is a preliminary patch to introduce mt7921s support.
Refactor mt7921_mcu_send_message to be sharable between mt7921e and mt7921e.
--- .../net/wireless/mediatek/mt76/mt7921/mcu.c | 11 ++++------- .../net/wireless/mediatek/mt76/mt7921/mt7921.h | 2 +- .../wireless/mediatek/mt76/mt7921/pci_mcu.c | 18 ++++++++++++++++++ 3 files changed, 23 insertions(+), 8 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7921/mcu.c +4 -7
@@ -225,12 +225,11 @@ int mt7921_mcu_parse_response(struct mt76_dev *mdev, int cmd,EXPORT_SYMBOL_GPL (mt7921_mcu_parse_response); -int mt7921_mcu_send_message (struct mt76_dev *mdev,struct sk_buff *skb, +int mt7921_mcu_fill_message (struct mt76_dev *mdev,struct sk_buff *skb,int cmd,int *wait_seq) { struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);int txd_len, mcu_cmd = cmd &MCU_CMD_MASK ; -enum mt76_mcuq_id txq =MT_MCUQ_WM ;struct mt7921_uni_txd *uni_txd;struct mt7921_mcu_txd *mcu_txd;__le32 *txd;
@@ -252,10 +251,8 @@ int mt7921_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,if (!seq) seq = ++dev->mt76.mcu.msg_seq &0xf ; -if (cmd ==MCU_CMD_FW_SCATTER ) { - txq =MT_MCUQ_FWDL ; +if (cmd ==MCU_CMD_FW_SCATTER ) goto exit; - } txd_len = cmd &MCU_UNI_PREFIX ?sizeof (*uni_txd) :sizeof (*mcu_txd); txd = (__le32 *)skb_push (skb, txd_len);
@@ -319,9 +316,9 @@ int mt7921_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,if (wait_seq) *wait_seq = seq; -return mt76_tx_queue_skb_raw (dev, mdev->q_mcu[txq], skb,0 ); +return 0 ; } -EXPORT_SYMBOL_GPL (mt7921_mcu_send_message); +EXPORT_SYMBOL_GPL (mt7921_mcu_fill_message);static void mt7921_mcu_scan_event (struct mt7921_dev *dev,struct sk_buff *skb)
drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h +1 -1
@@ -381,7 +381,7 @@ void mt7921_mac_write_txwi(struct mt7921_dev *dev, __le32 *txwi, bool beacon);void mt7921_tx_check_aggr (struct ieee80211_sta *sta,__le32 *txwi);void mt7921_mac_sta_poll (struct mt7921_dev *dev); -int mt7921_mcu_send_message (struct mt76_dev *mdev,struct sk_buff *skb, +int mt7921_mcu_fill_message (struct mt76_dev *mdev,struct sk_buff *skb,int cmd,int *wait_seq);int mt7921_mcu_parse_response (struct mt76_dev *mdev,int cmd,struct sk_buff *skb,int seq);
drivers/net/wireless/mediatek/mt76/mt7921/pci_mcu.c +18 -0
@@ -18,6 +18,24 @@ static int mt7921e_driver_own(struct mt7921_dev *dev)return 0 ; } +static int +mt7921_mcu_send_message (struct mt76_dev *mdev,struct sk_buff *skb, +int cmd,int *seq) +{ + struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76); +enum mt76_mcuq_id txq =MT_MCUQ_WM ; +int ret; + + ret =mt7921_mcu_fill_message (mdev, skb, cmd, seq); +if (ret) +return ret; + +if (cmd ==MCU_CMD_FW_SCATTER ) + txq =MT_MCUQ_FWDL ; + +return mt76_tx_queue_skb_raw (dev, mdev->q_mcu[txq], skb,0 ); +} +int mt7921e_mcu_init (struct mt7921_dev *dev) {static const struct mt76_mcu_ops mt7921_mcu_ops = {
Signature · 1 line
2.25.1
[email protected]
reviewerPATCH v2 15/16 mt76: mt7921: introduce mt7921s support
In reply to [email protected]From: Sean Wang <[email protected]>
Introduce support for mt7921s 802.11ax (Wi-Fi 6) 2x2:2SS chipset.
--- .../net/wireless/mediatek/mt76/mt7921/Kconfig | 10 + .../wireless/mediatek/mt76/mt7921/Makefile | 2 + .../wireless/mediatek/mt76/mt7921/debugfs.c | 18 +- .../net/wireless/mediatek/mt76/mt7921/init.c | 11 +- .../net/wireless/mediatek/mt76/mt7921/mac.c | 22 +- .../net/wireless/mediatek/mt76/mt7921/mac.h | 4 + .../net/wireless/mediatek/mt76/mt7921/mcu.c | 14 +- .../wireless/mediatek/mt76/mt7921/mt7921.h | 30 ++ .../net/wireless/mediatek/mt76/mt7921/sdio.c | 282 ++++++++++++++++++ .../wireless/mediatek/mt76/mt7921/sdio_mac.c | 87 ++++++ .../wireless/mediatek/mt76/mt7921/sdio_mcu.c | 127 ++++++++ 11 files changed, 592 insertions(+), 15 deletions(-) create mode 100644 drivers/net/wireless/mediatek/mt76/mt7921/sdio.c create mode 100644 drivers/net/wireless/mediatek/mt76/mt7921/sdio_mac.c create mode 100644 drivers/net/wireless/mediatek/mt76/mt7921/sdio_mcu.c
drivers/net/wireless/mediatek/mt76/mt7921/Kconfig +10 -0
@@ -13,3 +13,13 @@ config MT7921E This adds support for MT7921E 802.11ax 2x2:2SS wireless devices. To compile this driver as a module, choose M here. + +config MT7921S + tristate "MediaTek MT7921S (SDIO) support" + select MT76_SDIO + select MT7921_COMMON + depends on MAC80211 + help + This adds support for MT7921S 802.11ax 2x2:2SS wireless devices. + + To compile this driver as a module, choose M here.
drivers/net/wireless/mediatek/mt76/mt7921/Makefile +2 -0
@@ -2,9 +2,11 @@ obj-$(CONFIG_MT7921_COMMON) += mt7921-common.o obj-$(CONFIG_MT7921E) += mt7921e.o +obj-$(CONFIG_MT7921S) += mt7921s.o CFLAGS_trace.o := -I$(src) 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 +mt7921s-y := sdio.o sdio_mac.o sdio_mcu.o
drivers/net/wireless/mediatek/mt76/mt7921/debugfs.c +17 -1
@@ -413,6 +413,20 @@ static int mt7921_chip_reset(void *data, u64 val)DEFINE_DEBUGFS_ATTRIBUTE (fops_reset,NULL , mt7921_chip_reset,"%lld\n" ); +static int +mt7921s_sched_quota_read (struct seq_file *s,void *data) +{ +struct mt7921_dev *dev =dev_get_drvdata (s->private); +struct mt76_sdio *sdio = &dev->mt76.sdio; + +seq_printf (s,"pse_data_quota\t%d\n" , sdio->sched.pse_data_quota); +seq_printf (s,"ple_data_quota\t%d\n" , sdio->sched.ple_data_quota); +seq_printf (s,"pse_mcu_quota\t%d\n" , sdio->sched.pse_mcu_quota); +seq_printf (s,"sched_deficit\t%d\n" , sdio->sched.deficit); + +return 0 ; +} +int mt7921_init_debugfs (struct mt7921_dev *dev) {struct dentry *dir;
@@ -436,6 +450,8 @@ int mt7921_init_debugfs(struct mt7921_dev *dev)debugfs_create_devm_seqfile (dev->mt76.dev,"runtime_pm_stats" , dir, mt7921_pm_stats);debugfs_create_file ("deep-sleep" ,0600 , dir, dev, &fops_ds); - +if (mt76_is_sdio (&dev->mt76)) +debugfs_create_devm_seqfile (dev->mt76.dev,"sched-quota" , dir, + mt7921s_sched_quota_read);return 0 ; }
drivers/net/wireless/mediatek/mt76/mt7921/init.c +9 -2
@@ -231,8 +231,15 @@ int mt7921_register_device(struct mt7921_dev *dev) dev->pm.idle_timeout =MT7921_PM_TIMEOUT ; dev->pm.stats.last_wake_event = jiffies; dev->pm.stats.last_doze_event = jiffies; - dev->pm.enable = true; - dev->pm.ds_enable = true; + +/* TODO: mt7921s run sleep mode on default */ +if (mt76_is_mmio (&dev->mt76)) { + dev->pm.enable = true; + dev->pm.ds_enable = true; + } + +if (mt76_is_sdio (&dev->mt76)) + hw->extra_tx_headroom +=MT_SDIO_TXD_SIZE +MT_SDIO_HDR_SIZE ; ret =mt7921_init_hardware (dev);if (ret)
drivers/net/wireless/mediatek/mt76/mt7921/mac.c +15 -7
@@ -847,6 +847,8 @@ void mt7921_mac_write_txwi(struct mt7921_dev *dev, __le32 *txwi,struct ieee80211_vif *vif = info->control.vif;struct mt76_phy *mphy = &dev->mphy;u8 p_fmt, q_idx, omac_idx =0 , wmm_idx =0 ; +bool is_mmio =mt76_is_mmio (&dev->mt76); +u32 sz_txd = is_mmio ?MT_TXD_SIZE :MT_SDIO_TXD_SIZE ;bool is_8023 = info->flags &IEEE80211_TX_CTL_HW_80211_ENCAP ;u16 tx_count =15 ;u32 val;
@@ -862,15 +864,15 @@ void mt7921_mac_write_txwi(struct mt7921_dev *dev, __le32 *txwi, p_fmt =MT_TX_TYPE_FW ; q_idx =MT_LMAC_BCN0 ; }else if (skb_get_queue_mapping (skb) >=MT_TXQ_PSD ) { - p_fmt =MT_TX_TYPE_CT ; + p_fmt = is_mmio ?MT_TX_TYPE_CT :MT_TX_TYPE_SF ; q_idx =MT_LMAC_ALTX0 ; }else { - p_fmt =MT_TX_TYPE_CT ; + p_fmt = is_mmio ?MT_TX_TYPE_CT :MT_TX_TYPE_SF ; q_idx = wmm_idx *MT7921_MAX_WMM_SETS +mt7921_lmac_mapping (dev,skb_get_queue_mapping (skb)); } - val =FIELD_PREP (MT_TXD0_TX_BYTES , skb->len +MT_TXD_SIZE ) | + val =FIELD_PREP (MT_TXD0_TX_BYTES , skb->len + sz_txd) |FIELD_PREP (MT_TXD0_PKT_FMT , p_fmt) |FIELD_PREP (MT_TXD0_Q_IDX , q_idx); txwi[0 ] =cpu_to_le32 (val);
@@ -1388,12 +1390,18 @@ void mt7921_pm_wake_work(struct work_struct *work) mphy = dev->phy.mt76;if (!mt7921_mcu_drv_pmctrl (dev)) { +struct mt76_dev *mdev = &dev->mt76;int i; -mt76_for_each_q_rx (&dev->mt76, i) -napi_schedule (&dev->mt76.napi[i]); -mt76_connac_pm_dequeue_skbs (mphy, &dev->pm); -mt7921_mcu_tx_cleanup (dev); +if (mt76_is_sdio (mdev)) { +mt76_connac_pm_dequeue_skbs (mphy, &dev->pm); +mt76_worker_schedule (&mdev->sdio.txrx_worker); + }else { +mt76_for_each_q_rx (mdev, i) +napi_schedule (&mdev->napi[i]); +mt76_connac_pm_dequeue_skbs (mphy, &dev->pm); +mt7921_mcu_tx_cleanup (dev); + }if (test_bit (MT76_STATE_RUNNING , &mphy->state))ieee80211_queue_delayed_work (mphy->hw, &mphy->mac_work,MT7921_WATCHDOG_TIME );
drivers/net/wireless/mediatek/mt76/mt7921/mac.h +4 -0
@@ -199,6 +199,10 @@ enum tx_mcu_port_q_idx {#define MT_TXD_SIZE (8 * 4) +#define MT_SDIO_TXD_SIZE (MT_TXD_SIZE + 8 * 4) +#define MT_SDIO_TAIL_SIZE 8 +#define MT_SDIO_HDR_SIZE 4 +#define MT_TXD0_Q_IDX GENMASK(31, 25)#define MT_TXD0_PKT_FMT GENMASK(24, 23)#define MT_TXD0_ETH_TYPE_OFFSET GENMASK(22, 16)
drivers/net/wireless/mediatek/mt76/mt7921/mcu.c +9 -5
@@ -653,7 +653,9 @@ static int mt7921_load_patch(struct mt7921_dev *dev) {const struct mt7921_patch_hdr *hdr;const struct firmware *fw =NULL ; -int i, ret, sem; +int i, ret, sem, max_len; + + max_len =mt76_is_sdio (&dev->mt76) ?2048 :4096 ; sem =mt76_connac_mcu_patch_sem_ctrl (&dev->mt76, true);switch (sem) {
@@ -709,7 +711,7 @@ static int mt7921_load_patch(struct mt7921_dev *dev) } ret =__mt76_mcu_send_firmware (&dev->mt76,MCU_CMD_FW_SCATTER , - dl, len,4096 ); + dl, len, max_len);if (ret) {dev_err (dev->mt76.dev,"Failed to send patch\n" ); goto out;
@@ -756,9 +758,11 @@ mt7921_mcu_send_ram_firmware(struct mt7921_dev *dev,const struct mt7921_fw_trailer *hdr, const u8 *data, bool is_wa) { - int i, offset = 0; + int i, offset = 0, max_len;u32 override =0 , option =0 ; + max_len =mt76_is_sdio (&dev->mt76) ?2048 :4096 ; +for (i =0 ; i < hdr->n_region; i++) {const struct mt7921_fw_region *region;int err;
@@ -781,7 +785,7 @@ mt7921_mcu_send_ram_firmware(struct mt7921_dev *dev, } err =__mt76_mcu_send_firmware (&dev->mt76,MCU_CMD_FW_SCATTER , - data + offset, len,4096 ); + data + offset, len, max_len);if (err) {dev_err (dev->mt76.dev,"Failed to send firmware.\n" );return err;
@@ -854,7 +858,7 @@ static int mt7921_load_firmware(struct mt7921_dev *dev)int ret; ret =mt76_get_field (dev,MT_CONN_ON_MISC ,MT_TOP_MISC2_FW_N9_RDY ); -if (ret) { +if (ret &&mt76_is_mmio (&dev->mt76)) {dev_dbg (dev->mt76.dev,"Firmware is already download\n" ); goto fw_loaded; }
drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h +30 -0
@@ -47,6 +47,16 @@#define MT7921_SKU_MAX_DELTA_IDX MT7921_SKU_RATE_NUM#define MT7921_SKU_TABLE_SIZE (MT7921_SKU_RATE_NUM + 1) +#define MT7921_SDIO_HDR_TX_BYTES GENMASK(15, 0) +#define MT7921_SDIO_HDR_PKT_TYPE GENMASK(17, 16) + +enum mt7921_sdio_pkt_type { +MT7921_SDIO_TXD , +MT7921_SDIO_DATA , +MT7921_SDIO_CMD , +MT7921_SDIO_FWDL , +}; +#define to_rssi (field, rxv) ((FIELD_GET(field, rxv) - 220) / 2)#define to_rcpi (rssi) (2 * (rssi) + 220)
@@ -321,6 +331,17 @@ static inline void mt7921_mcu_tx_cleanup(struct mt7921_dev *dev)mt76_queue_tx_cleanup (dev, dev->mt76.q_mcu[MT_MCUQ_WA ], false); } +static inline void mt7921_skb_add_sdio_hdr (struct sk_buff *skb, +enum mt7921_sdio_pkt_type type) +{ +u32 hdr; + + hdr =FIELD_PREP (MT7921_SDIO_HDR_TX_BYTES , skb->len +sizeof (hdr)) | +FIELD_PREP (MT7921_SDIO_HDR_PKT_TYPE , type); + +put_unaligned_le32 (hdr,skb_push (skb,sizeof (hdr))); +} +int mt7921_mac_init (struct mt7921_dev *dev);bool mt7921_mac_wtbl_update (struct mt7921_dev *dev,int idx,u32 mask);void mt7921_mac_reset_counters (struct mt7921_phy *phy);
@@ -394,4 +415,13 @@ int mt7921e_mcu_init(struct mt7921_dev *dev);int mt7921e_mcu_drv_pmctrl (struct mt7921_dev *dev);int mt7921e_mcu_fw_pmctrl (struct mt7921_dev *dev); +int mt7921s_mcu_init (struct mt7921_dev *dev); +int mt7921s_mcu_drv_pmctrl (struct mt7921_dev *dev); +int mt7921s_mcu_fw_pmctrl (struct mt7921_dev *dev); +int mt7921s_tx_prepare_skb (struct mt76_dev *mdev,void *txwi_ptr, +enum mt76_txq_id qid,struct mt76_wcid *wcid, +struct ieee80211_sta *sta, +struct mt76_tx_info *tx_info); +void mt7921s_tx_complete_skb (struct mt76_dev *mdev,struct mt76_queue_entry *e); +bool mt7921s_tx_status_data (struct mt76_dev *mdev,u8 *update);#endif
drivers/net/wireless/mediatek/mt76/mt7921/sdio.c new file +282 -0
282 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7921/sdio_mac.c new file +87 -0
87 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7921/sdio_mcu.c new file +127 -0
127 lines not on this page · raw message
Signature · 1 line
2.25.1
[email protected]
reviewerPATCH v2 16/16 mt76: mt7921s: add reset support
In reply to [email protected]From: Sean Wang <[email protected]>
Introduce wifi chip reset support for mt7921 device to recover mcu hangs or abnormal wifi system.
--- drivers/net/wireless/mediatek/mt76/mt76.h | 2 + .../net/wireless/mediatek/mt76/mt7921/init.c | 2 + .../net/wireless/mediatek/mt76/mt7921/mcu.c | 1 + .../wireless/mediatek/mt76/mt7921/mt7921.h | 4 + .../net/wireless/mediatek/mt76/mt7921/sdio.c | 3 + .../wireless/mediatek/mt76/mt7921/sdio_mac.c | 133 ++++++++++++++++++ .../wireless/mediatek/mt76/mt7921/sdio_mcu.c | 8 ++ .../net/wireless/mediatek/mt76/sdio_txrx.c | 32 ++++- 8 files changed, 184 insertions(+), 1 deletion(-)
drivers/net/wireless/mediatek/mt76/mt76.h +2 -0
@@ -507,6 +507,7 @@ struct mt76_sdio {void *intr_data;int intr_size;u8 hw_ver; +wait_queue_head_t wait;struct {int pse_data_quota;
@@ -1251,6 +1252,7 @@ int mt76s_alloc_queues(struct mt76_dev *dev);void mt76s_deinit (struct mt76_dev *dev);void mt76s_sdio_irq (struct sdio_func *func);void mt76s_txrx_worker (struct mt76_sdio *sdio); +bool mt76s_txqs_empty (struct mt76_dev *dev);int mt76s_hw_init (struct mt76_dev *dev,struct sdio_func *func,int hw_ver);u32 mt76s_rr (struct mt76_dev *dev,u32 offset);
drivers/net/wireless/mediatek/mt76/mt7921/init.c +2 -0
@@ -217,6 +217,8 @@ int mt7921_register_device(struct mt7921_dev *dev)spin_lock_init (&dev->pm.wake.lock);mutex_init (&dev->pm.mutex);init_waitqueue_head (&dev->pm.wait); +if (mt76_is_sdio (&dev->mt76)) +init_waitqueue_head (&dev->mt76.sdio.wait);spin_lock_init (&dev->pm.txq_lock);INIT_DELAYED_WORK (&dev->mphy.mac_work, mt7921_mac_work);INIT_DELAYED_WORK (&dev->phy.scan_work, mt7921_scan_work);
drivers/net/wireless/mediatek/mt76/mt7921/mcu.c +1 -0
@@ -439,6 +439,7 @@ mt7921_mcu_rx_unsolicited_event(struct mt7921_dev *dev, struct sk_buff *skb)mt7921_mcu_debug_msg_event (dev, skb);break ;case MCU_EVENT_COREDUMP : + dev->fw_assert = true;mt76_connac_mcu_coredump_event (&dev->mt76, skb, &dev->coredump);return ;
drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h +4 -0
@@ -169,6 +169,7 @@ struct mt7921_dev {struct work_struct reset_work; bool hw_full_reset:1; bool hw_init_done:1; + bool fw_assert:1;struct list_head sta_poll_list;spinlock_t sta_poll_lock;
@@ -412,6 +413,9 @@ void mt7921e_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q, struct sk_buff *skb);int mt7921e_mac_reset (struct mt7921_dev *dev);int mt7921e_mcu_init (struct mt7921_dev *dev); +int mt7921s_wfsys_reset (struct mt7921_dev *dev); +int mt7921s_mac_reset (struct mt7921_dev *dev); +int mt7921s_init_reset (struct mt7921_dev *dev);int mt7921e_mcu_drv_pmctrl (struct mt7921_dev *dev);int mt7921e_mcu_fw_pmctrl (struct mt7921_dev *dev);
drivers/net/wireless/mediatek/mt76/mt7921/sdio.c +3 -0
@@ -46,6 +46,7 @@ static void mt7921s_unregister_device(struct mt7921_dev *dev)cancel_work_sync (&pm->wake_work);mt76s_deinit (&dev->mt76); +mt7921s_wfsys_reset (dev);mt7921_mcu_exit (dev);mt76_free_device (&dev->mt76);
@@ -80,6 +81,8 @@ static int mt7921s_probe(struct sdio_func *func, .type = MT76_BUS_SDIO, };static const struct mt7921_hif_ops mt7921_sdio_ops = { + .init_reset = mt7921s_init_reset, + .reset = mt7921s_mac_reset, .mcu_init = mt7921s_mcu_init, .drv_own = mt7921s_mcu_drv_pmctrl, .fw_own = mt7921s_mcu_fw_pmctrl,
drivers/net/wireless/mediatek/mt76/mt7921/sdio_mac.c +133 -0
139 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7921/sdio_mcu.c +8 -0
@@ -21,6 +21,14 @@ mt7921s_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,enum mt76_mcuq_id txq =MT_MCUQ_WM ;int ret, pad; +/* We just return in case firmware assertion to avoid blocking the +* common workqueue to run, for example, the coredump work might be +* blocked by mt7921_mac_work that is excuting register access via sdio +* bus. +*/ +if (dev->fw_assert) +return -EBUSY ; + ret =mt7921_mcu_fill_message (mdev, skb, cmd, seq);if (ret)return ret;
drivers/net/wireless/mediatek/mt76/sdio_txrx.c +31 -1
@@ -272,6 +272,9 @@ static int mt76s_tx_run_queue(struct mt76_dev *dev, struct mt76_queue *q)smp_rmb (); +if (test_bit (MT76_MCU_RESET , &dev->phy.state)) + goto next; +if (!test_bit (MT76_STATE_MCU_RUNNING , &dev->phy.state)) {__skb_put_zero (e->skb,4 ); err = __mt76s_xmit_queue(dev, e->skb->data,
@@ -350,6 +353,13 @@ void mt76s_txrx_worker(struct mt76_sdio *sdio) ret =mt76s_rx_handler (dev);if (ret >0 ) nframes += ret; + +if (test_bit (MT76_MCU_RESET , &dev->phy.state)) { +if (!mt76s_txqs_empty (dev)) +continue ; +else +wake_up (&sdio->wait); + } }while (nframes >0 );/* enable interrupt */
@@ -363,9 +373,29 @@ void mt76s_sdio_irq(struct sdio_func *func)struct mt76_dev *dev =sdio_get_drvdata (func);struct mt76_sdio *sdio = &dev->sdio; -if (!test_bit (MT76_STATE_INITIALIZED , &dev->phy.state)) +if (!test_bit (MT76_STATE_INITIALIZED , &dev->phy.state) || +test_bit (MT76_MCU_RESET , &dev->phy.state))return ;mt76_worker_schedule (&sdio->txrx_worker); }EXPORT_SYMBOL_GPL (mt76s_sdio_irq); + +bool mt76s_txqs_empty (struct mt76_dev *dev) +{ +struct mt76_queue *q; +int i; + +for (i =0 ; i <=MT_TXQ_PSD +1 ; i++) { +if (i <=MT_TXQ_PSD ) + q = dev->phy.q_tx[i]; +else + q = dev->q_mcu[MT_MCUQ_WM ]; + +if (q->first != q->head) +return false; + } + +return true; +} +EXPORT_SYMBOL_GPL (mt76s_txqs_empty);
Signature · 7 lines
2.25.1 _______________________________________________ Linux-mediatek mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-mediatek
Quoted 30 lines
From: Sean Wang <[email protected]>
The patchset adds the SDIO support to the MT7921 driver, basically are made up of 3 parts.
PART 1: patch 1-5, 8-9 and 12-14
These are preliminary patches for mt7921s driver to refactor and reuse the current mt7921e driver as much as possible.PART 2: patch 6-7, 10
These are preliminary patches for mt7921s driver to refactor and reuse the current mt7663s driver as much as possible.PART 3: patch 11 and 15-16
These are specific patches for mt7921s driver and reset mechanism in the same framework where mt7921e have been supported.The patchset are built and generated against the current mt76 tree plus the extra pending patches [1] expected to be merged to mt76 tree soon to help the review and merge process be easier.
The change list from v1 to v2
1. rework the whole driver according to the new patches added
("mt76: introduce__mt76_mcu_send_firmwareroutine"),
("mt76: not accounting the MCU header size in__mt76_mcu_send_firmwarefor mt7915/21") and ("mt76: sdio: move common code inmt76_sdiomodule")
2. droppci_init.candsdio_init.cby moving the related logic topci.candsdio.c, respectively.
3. cosmetics the patches like removing unnecessary new line and adding an extra space tofixed_maptable.
4. fix typo in commit message
Quoted 1 line
[1] The pending patch list prior to add MT7921 SDIO support
Hi Sean,
I have not tested it but overall the code seems fine to me, just a couple of nits. Fixing them you can add:
Quoted 107 lines
da0054ae6b1fmt76: mt7921s: add reset support31c979d37209mt76: mt7921: introduce mt7921s supportc8f8caad718fmt76: mt7921: refactormt7921_mcu_send_messagef4bb6338d638mt76: mt7921: rely onmcu_get_nic_capability0bfd21e29498mt76: connac: extendmcu_get_nic_capability3b5f8d1815a4mt76: sdio: extend sdio module to support CONNAC228669a9ceff5mt76: sdio: move common code inmt76_sdiomodulead7ba2b9c6afmt76: mt7921: use physical addr to unify register accessa6aebd446a9amt76: mt7921: make all event parser reusable between mt7921s and mt7921e0c52f915f728mt76: mt7663s: rely on mcu reg access utility42112d6b7b1cmt76: connac: move mcu reg access utility routines inmt76_connac_libmodule23bf9455d505mt76: mt7921: addMT7921_COMMONmodule688be52542bbmt76: mt7921: refactorinit.cto be bus independent099a0527d05cmt76: mt7921: refactormcu.cto be bus independent378767d66e2bmt76: mt7921: refactordma.cto be pcie specifice15c4c1be3eamt76: mt7921: refactormac.cto be bus independentb72eaca3c81bmt76: not accounting the MCU header size in__mt76_mcu_send_firmwarefor mt7915/21870fe1bc5fc8mt76: introduce__mt76_mcu_send_firmwareroutine465a8a6e834fmt76: schedule status timeout at dma completion4d3b6422fe5emt76: substitutesk_buff_headstatus_listwithspinlock_tstatus_lock13d50c723b79mt76: removemt76_wcidpointer frommt76_tx_status_checksignatureed46465dc741mt76: introducepacket_ididrb3568b1f391amt76: mt7921: add 6GHz support6605e1e5c2bemt76: add 6GHz support1dcae1bad280mt76: connac: enable hw amsdu @ 6GHz88c34fb4fdefmt76: connac: add 6GHz support tomt76_connac_mcu_uni_add_bss8bb780867211mt76: connac: add 6GHz support tomt76_connac_mcu_sta_tlv6e021ff24950mt76: connac: set 6G phymode in single-sku support21a96eed203dmt76: connac: add 6GHz support tomt76_connac_mcu_set_channel_domainb70bae155a51mt76: connac: enable 6GHz band for hw scan92e29c77494cmt76: mt7921: removemt7921_sta_stats56ea41ec4ae3mt76: mt7921: remove mcu rate reporting code94b97e96549emt76: mt7921: report tx rate directly from tx status8dd12eb23009mt76: mt7921: add support for tx status reporting69328a635189mt76: mt7921: start reworking tx rate reportingb915a7d2b882mt76: mt7921: update mib counters dumping phy stats2a694a754e32mt76: mt7921: always wake device if necessary in debugfs067927a52e93mt76: mt7921: movemt7921_queue_rx_skbtomac.ca866733d977dmt76: mt7921: fix retrying release semaphore without end8853d1b5b6bfmt76: mt7921: robustify hardware initialization flowLorenzo Bianconi (1):
mt76: sdio: move common code inmt76_sdiomoduleSean Wang (15):
mt76: mt7921: refactormac.cto be bus independent
mt76: mt7921: refactordma.cto be pcie specific
mt76: mt7921: refactormcu.cto be bus independent
mt76: mt7921: refactorinit.cto be bus independent
mt76: mt7921: addMT7921_COMMONmodule
mt76: connac: move mcu reg access utility routines inmt76_connac_lib
module
mt76: mt7663s: rely on mcu reg access utility
mt76: mt7921: make all event parser reusable between mt7921s andmt7921emt76: mt7921: use physical addr to unify register access
mt76: sdio: extend sdio module to support CONNAC2
mt76: connac: extendmcu_get_nic_capability
mt76: mt7921: rely onmcu_get_nic_capability
mt76: mt7921: refactormt7921_mcu_send_message
mt76: mt7921: introduce mt7921s support
mt76: mt7921s: add reset supportdrivers/net/wireless/mediatek/mt76/Makefile | 2 +- drivers/net/wireless/mediatek/mt76/mt76.h | 22 ++ .../wireless/mediatek/mt76/mt7615/Makefile | 2 +- .../net/wireless/mediatek/mt76/mt7615/mcu.c | 28 -- .../wireless/mediatek/mt76/mt7615/mt7615.h | 6 - .../net/wireless/mediatek/mt76/mt7615/sdio.c | 282 +------------ .../wireless/mediatek/mt76/mt7615/sdio_mcu.c | 11 +- .../wireless/mediatek/mt76/mt76_connac_mcu.c | 93 +++++ .../wireless/mediatek/mt76/mt76_connac_mcu.h | 2 + .../net/wireless/mediatek/mt76/mt7921/Kconfig | 18 +- .../wireless/mediatek/mt76/mt7921/Makefile | 8 +- .../wireless/mediatek/mt76/mt7921/debugfs.c | 18 +- .../net/wireless/mediatek/mt76/mt7921/dma.c | 38 +- .../wireless/mediatek/mt76/mt7921/eeprom.c | 101 ----- .../net/wireless/mediatek/mt76/mt7921/init.c | 52 +-- .../net/wireless/mediatek/mt76/mt7921/mac.c | 372 ++---------------- .../net/wireless/mediatek/mt76/mt7921/mac.h | 4 + .../net/wireless/mediatek/mt76/mt7921/main.c | 7 + .../net/wireless/mediatek/mt76/mt7921/mcu.c | 138 ++----- .../wireless/mediatek/mt76/mt7921/mt7921.h | 94 ++++- .../net/wireless/mediatek/mt76/mt7921/pci.c | 49 ++- .../wireless/mediatek/mt76/mt7921/pci_mac.c | 346 ++++++++++++++++ .../wireless/mediatek/mt76/mt7921/pci_mcu.c | 115 ++++++ .../net/wireless/mediatek/mt76/mt7921/regs.h | 22 +- .../net/wireless/mediatek/mt76/mt7921/sdio.c | 285 ++++++++++++++ .../wireless/mediatek/mt76/mt7921/sdio_mac.c | 220 +++++++++++ .../wireless/mediatek/mt76/mt7921/sdio_mcu.c | 135 +++++++ drivers/net/wireless/mediatek/mt76/sdio.c | 282 +++++++++++++ .../mediatek/mt76/{mt7615 => }/sdio.h | 50 ++- .../mediatek/mt76/{mt7615 => }/sdio_txrx.c | 171 +++++--- 30 files changed, 1982 insertions(+), 991 deletions(-) delete mode 100644 drivers/net/wireless/mediatek/mt76/mt7921/eeprom.c create mode 100644 drivers/net/wireless/mediatek/mt76/mt7921/pci_mac.c create mode 100644 drivers/net/wireless/mediatek/mt76/mt7921/pci_mcu.c create mode 100644 drivers/net/wireless/mediatek/mt76/mt7921/sdio.c create mode 100644 drivers/net/wireless/mediatek/mt76/mt7921/sdio_mac.c create mode 100644 drivers/net/wireless/mediatek/mt76/mt7921/sdio_mcu.c rename drivers/net/wireless/mediatek/mt76/{mt7615 => }/sdio.h (68%) rename drivers/net/wireless/mediatek/mt76/{mt7615 => }/sdio_txrx.c (59%)--
2.25.1