]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
drop some unneeded entirely mt76 patches from 6.1 queue
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 5 Feb 2025 12:51:36 +0000 (13:51 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 5 Feb 2025 12:51:36 +0000 (13:51 +0100)
queue-6.1/series
queue-6.1/wifi-mt76-add-wed-rx-support-to-mt76_dma_-add-get-_b.patch [deleted file]
queue-6.1/wifi-mt76-connac-add-more-bss-info-command-tags.patch [deleted file]
queue-6.1/wifi-mt76-connac-introduce-unified-event-table.patch [deleted file]
queue-6.1/wifi-mt76-introduce-rxwi-and-rx-token-utility-routin.patch [deleted file]
queue-6.1/wifi-mt76-mt7921-fix-using-incorrect-group-cipher-af.patch

index 99c1aab225bb8309591b10355a014e63ccee30ac..737c9837dd3ac1726eb76c063888cdd7b7d51aef 100644 (file)
@@ -81,10 +81,6 @@ wifi-mac80211-fix-common-size-calculation-for-ml-ele.patch
 net-smc-fix-data-error-when-recvmsg-with-msg_peek-fl.patch
 landlock-handle-weird-files.patch
 wifi-mt76-mt76u_vendor_request-do-not-print-error-me.patch
-wifi-mt76-connac-introduce-unified-event-table.patch
-wifi-mt76-connac-add-more-bss-info-command-tags.patch
-wifi-mt76-introduce-rxwi-and-rx-token-utility-routin.patch
-wifi-mt76-add-wed-rx-support-to-mt76_dma_-add-get-_b.patch
 wifi-mt76-mt7921-fix-using-incorrect-group-cipher-af.patch
 wifi-mt76-mt7915-fix-register-mapping.patch
 cpufreq-acpi-fix-max-frequency-computation.patch
diff --git a/queue-6.1/wifi-mt76-add-wed-rx-support-to-mt76_dma_-add-get-_b.patch b/queue-6.1/wifi-mt76-add-wed-rx-support-to-mt76_dma_-add-get-_b.patch
deleted file mode 100644 (file)
index 31d2dfa..0000000
+++ /dev/null
@@ -1,246 +0,0 @@
-From 89dbd781ce984f8e1d2d4a09f56f12ed927f237b Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Sat, 12 Nov 2022 16:40:35 +0100
-Subject: wifi: mt76: add WED RX support to mt76_dma_{add,get}_buf
-
-From: Lorenzo Bianconi <lorenzo@kernel.org>
-
-[ Upstream commit cd372b8c99c5a5cf6a464acebb7e4a79af7ec8ae ]
-
-Introduce the capability to configure RX WED in mt76_dma_{add,get}_buf
-utility routines.
-
-Tested-by: Daniel Golle <daniel@makrotopia.org>
-Co-developed-by: Sujuan Chen <sujuan.chen@mediatek.com>
-Signed-off-by: Sujuan Chen <sujuan.chen@mediatek.com>
-Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
-Signed-off-by: Felix Fietkau <nbd@nbd.name>
-Stable-dep-of: aa566ac6b727 ("wifi: mt76: mt7921: fix using incorrect group cipher after disconnection.")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/wireless/mediatek/mt76/dma.c  | 125 +++++++++++++++-------
- drivers/net/wireless/mediatek/mt76/mt76.h |   2 +
- 2 files changed, 88 insertions(+), 39 deletions(-)
-
-diff --git a/drivers/net/wireless/mediatek/mt76/dma.c b/drivers/net/wireless/mediatek/mt76/dma.c
-index 25e110852e1f2..5c626249d4d90 100644
---- a/drivers/net/wireless/mediatek/mt76/dma.c
-+++ b/drivers/net/wireless/mediatek/mt76/dma.c
-@@ -215,11 +215,6 @@ mt76_dma_add_buf(struct mt76_dev *dev, struct mt76_queue *q,
-       u32 ctrl;
-       int i, idx = -1;
--      if (txwi) {
--              q->entry[q->head].txwi = DMA_DUMMY_DATA;
--              q->entry[q->head].skip_buf0 = true;
--      }
--
-       for (i = 0; i < nbufs; i += 2, buf += 2) {
-               u32 buf0 = buf[0].addr, buf1 = 0;
-@@ -229,28 +224,48 @@ mt76_dma_add_buf(struct mt76_dev *dev, struct mt76_queue *q,
-               desc = &q->desc[idx];
-               entry = &q->entry[idx];
--              if (buf[0].skip_unmap)
--                      entry->skip_buf0 = true;
--              entry->skip_buf1 = i == nbufs - 1;
--
--              entry->dma_addr[0] = buf[0].addr;
--              entry->dma_len[0] = buf[0].len;
--
--              ctrl = FIELD_PREP(MT_DMA_CTL_SD_LEN0, buf[0].len);
--              if (i < nbufs - 1) {
--                      entry->dma_addr[1] = buf[1].addr;
--                      entry->dma_len[1] = buf[1].len;
--                      buf1 = buf[1].addr;
--                      ctrl |= FIELD_PREP(MT_DMA_CTL_SD_LEN1, buf[1].len);
--                      if (buf[1].skip_unmap)
--                              entry->skip_buf1 = true;
-+              if ((q->flags & MT_QFLAG_WED) &&
-+                  FIELD_GET(MT_QFLAG_WED_TYPE, q->flags) == MT76_WED_Q_RX) {
-+                      struct mt76_txwi_cache *t = txwi;
-+                      int rx_token;
-+
-+                      if (!t)
-+                              return -ENOMEM;
-+
-+                      rx_token = mt76_rx_token_consume(dev, (void *)skb, t,
-+                                                       buf[0].addr);
-+                      buf1 |= FIELD_PREP(MT_DMA_CTL_TOKEN, rx_token);
-+                      ctrl = FIELD_PREP(MT_DMA_CTL_SD_LEN0, buf[0].len) |
-+                             MT_DMA_CTL_TO_HOST;
-+              } else {
-+                      if (txwi) {
-+                              q->entry[q->head].txwi = DMA_DUMMY_DATA;
-+                              q->entry[q->head].skip_buf0 = true;
-+                      }
-+
-+                      if (buf[0].skip_unmap)
-+                              entry->skip_buf0 = true;
-+                      entry->skip_buf1 = i == nbufs - 1;
-+
-+                      entry->dma_addr[0] = buf[0].addr;
-+                      entry->dma_len[0] = buf[0].len;
-+
-+                      ctrl = FIELD_PREP(MT_DMA_CTL_SD_LEN0, buf[0].len);
-+                      if (i < nbufs - 1) {
-+                              entry->dma_addr[1] = buf[1].addr;
-+                              entry->dma_len[1] = buf[1].len;
-+                              buf1 = buf[1].addr;
-+                              ctrl |= FIELD_PREP(MT_DMA_CTL_SD_LEN1, buf[1].len);
-+                              if (buf[1].skip_unmap)
-+                                      entry->skip_buf1 = true;
-+                      }
-+
-+                      if (i == nbufs - 1)
-+                              ctrl |= MT_DMA_CTL_LAST_SEC0;
-+                      else if (i == nbufs - 2)
-+                              ctrl |= MT_DMA_CTL_LAST_SEC1;
-               }
--              if (i == nbufs - 1)
--                      ctrl |= MT_DMA_CTL_LAST_SEC0;
--              else if (i == nbufs - 2)
--                      ctrl |= MT_DMA_CTL_LAST_SEC1;
--
-               WRITE_ONCE(desc->buf0, cpu_to_le32(buf0));
-               WRITE_ONCE(desc->buf1, cpu_to_le32(buf1));
-               WRITE_ONCE(desc->info, cpu_to_le32(info));
-@@ -339,33 +354,60 @@ mt76_dma_tx_cleanup(struct mt76_dev *dev, struct mt76_queue *q, bool flush)
- static void *
- mt76_dma_get_buf(struct mt76_dev *dev, struct mt76_queue *q, int idx,
--               int *len, u32 *info, bool *more)
-+               int *len, u32 *info, bool *more, bool *drop)
- {
-       struct mt76_queue_entry *e = &q->entry[idx];
-       struct mt76_desc *desc = &q->desc[idx];
--      dma_addr_t buf_addr;
--      void *buf = e->buf;
--      int buf_len = SKB_WITH_OVERHEAD(q->buf_size);
-+      void *buf;
--      buf_addr = e->dma_addr[0];
-       if (len) {
--              u32 ctl = le32_to_cpu(READ_ONCE(desc->ctrl));
--              *len = FIELD_GET(MT_DMA_CTL_SD_LEN0, ctl);
--              *more = !(ctl & MT_DMA_CTL_LAST_SEC0);
-+              u32 ctrl = le32_to_cpu(READ_ONCE(desc->ctrl));
-+              *len = FIELD_GET(MT_DMA_CTL_SD_LEN0, ctrl);
-+              *more = !(ctrl & MT_DMA_CTL_LAST_SEC0);
-       }
-       if (info)
-               *info = le32_to_cpu(desc->info);
--      dma_unmap_single(dev->dma_dev, buf_addr, buf_len, DMA_FROM_DEVICE);
--      e->buf = NULL;
-+      if ((q->flags & MT_QFLAG_WED) &&
-+          FIELD_GET(MT_QFLAG_WED_TYPE, q->flags) == MT76_WED_Q_RX) {
-+              u32 token = FIELD_GET(MT_DMA_CTL_TOKEN,
-+                                    le32_to_cpu(desc->buf1));
-+              struct mt76_txwi_cache *t = mt76_rx_token_release(dev, token);
-+
-+              if (!t)
-+                      return NULL;
-+
-+              dma_unmap_single(dev->dma_dev, t->dma_addr,
-+                               SKB_WITH_OVERHEAD(q->buf_size),
-+                               DMA_FROM_DEVICE);
-+
-+              buf = t->ptr;
-+              t->dma_addr = 0;
-+              t->ptr = NULL;
-+
-+              mt76_put_rxwi(dev, t);
-+
-+              if (drop) {
-+                      u32 ctrl = le32_to_cpu(READ_ONCE(desc->ctrl));
-+
-+                      *drop = !!(ctrl & (MT_DMA_CTL_TO_HOST_A |
-+                                         MT_DMA_CTL_DROP));
-+              }
-+      } else {
-+              buf = e->buf;
-+              e->buf = NULL;
-+              dma_unmap_single(dev->dma_dev, e->dma_addr[0],
-+                               SKB_WITH_OVERHEAD(q->buf_size),
-+                               DMA_FROM_DEVICE);
-+      }
-       return buf;
- }
- static void *
- mt76_dma_dequeue(struct mt76_dev *dev, struct mt76_queue *q, bool flush,
--               int *len, u32 *info, bool *more)
-+               int *len, u32 *info, bool *more, bool *drop)
- {
-       int idx = q->tail;
-@@ -381,7 +423,7 @@ mt76_dma_dequeue(struct mt76_dev *dev, struct mt76_queue *q, bool flush,
-       q->tail = (q->tail + 1) % q->ndesc;
-       q->queued--;
--      return mt76_dma_get_buf(dev, q, idx, len, info, more);
-+      return mt76_dma_get_buf(dev, q, idx, len, info, more, drop);
- }
- static int
-@@ -644,7 +686,7 @@ mt76_dma_rx_cleanup(struct mt76_dev *dev, struct mt76_queue *q)
-       spin_lock_bh(&q->lock);
-       do {
--              buf = mt76_dma_dequeue(dev, q, true, NULL, NULL, &more);
-+              buf = mt76_dma_dequeue(dev, q, true, NULL, NULL, &more, NULL);
-               if (!buf)
-                       break;
-@@ -726,6 +768,7 @@ mt76_dma_rx_process(struct mt76_dev *dev, struct mt76_queue *q, int budget)
-       }
-       while (done < budget) {
-+              bool drop = false;
-               u32 info;
-               if (check_ddone) {
-@@ -736,10 +779,14 @@ mt76_dma_rx_process(struct mt76_dev *dev, struct mt76_queue *q, int budget)
-                               break;
-               }
--              data = mt76_dma_dequeue(dev, q, false, &len, &info, &more);
-+              data = mt76_dma_dequeue(dev, q, false, &len, &info, &more,
-+                                      &drop);
-               if (!data)
-                       break;
-+              if (drop)
-+                      goto free_frag;
-+
-               if (q->rx_head)
-                       data_len = q->buf_size;
-               else
-diff --git a/drivers/net/wireless/mediatek/mt76/mt76.h b/drivers/net/wireless/mediatek/mt76/mt76.h
-index a8c281a3951a4..3873c5ad75174 100644
---- a/drivers/net/wireless/mediatek/mt76/mt76.h
-+++ b/drivers/net/wireless/mediatek/mt76/mt76.h
-@@ -35,6 +35,7 @@
-                                FIELD_PREP(MT_QFLAG_WED_TYPE, _type) | \
-                                FIELD_PREP(MT_QFLAG_WED_RING, _n))
- #define MT_WED_Q_TX(_n)               __MT_WED_Q(MT76_WED_Q_TX, _n)
-+#define MT_WED_Q_RX(_n)               __MT_WED_Q(MT76_WED_Q_RX, _n)
- #define MT_WED_Q_TXFREE               __MT_WED_Q(MT76_WED_Q_TXFREE, 0)
- struct mt76_dev;
-@@ -56,6 +57,7 @@ enum mt76_bus_type {
- enum mt76_wed_type {
-       MT76_WED_Q_TX,
-       MT76_WED_Q_TXFREE,
-+      MT76_WED_Q_RX,
- };
- struct mt76_bus_ops {
--- 
-2.39.5
-
diff --git a/queue-6.1/wifi-mt76-connac-add-more-bss-info-command-tags.patch b/queue-6.1/wifi-mt76-connac-add-more-bss-info-command-tags.patch
deleted file mode 100644 (file)
index 482ce0e..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-From c5205bb7fcb7102ec9f99b80530f6b05a3951450 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Thu, 10 Nov 2022 17:35:22 +0800
-Subject: wifi: mt76: connac: add more bss info command tags
-
-From: Shayne Chen <shayne.chen@mediatek.com>
-
-[ Upstream commit 9c402ac1c517907ae375d71dd2fee4703efc8bb4 ]
-
-Add bss info tags which will be used in new chipset.
-This is a preliminary patch to add mt7996 chipset support.
-
-Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
-Signed-off-by: Felix Fietkau <nbd@nbd.name>
-Stable-dep-of: aa566ac6b727 ("wifi: mt76: mt7921: fix using incorrect group cipher after disconnection.")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h | 9 +++++++++
- 1 file changed, 9 insertions(+)
-
-diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h
-index e04f98d443261..a3162fbda14dc 100644
---- a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h
-+++ b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h
-@@ -1212,14 +1212,23 @@ enum {
- enum {
-       UNI_BSS_INFO_BASIC = 0,
-+      UNI_BSS_INFO_RA = 1,
-       UNI_BSS_INFO_RLM = 2,
-       UNI_BSS_INFO_BSS_COLOR = 4,
-       UNI_BSS_INFO_HE_BASIC = 5,
-       UNI_BSS_INFO_BCN_CONTENT = 7,
-+      UNI_BSS_INFO_BCN_CSA = 8,
-+      UNI_BSS_INFO_BCN_BCC = 9,
-+      UNI_BSS_INFO_BCN_MBSSID = 10,
-+      UNI_BSS_INFO_RATE = 11,
-       UNI_BSS_INFO_QBSS = 15,
-+      UNI_BSS_INFO_SEC = 16,
-+      UNI_BSS_INFO_TXCMD = 18,
-       UNI_BSS_INFO_UAPSD = 19,
-       UNI_BSS_INFO_PS = 21,
-       UNI_BSS_INFO_BCNFT = 22,
-+      UNI_BSS_INFO_OFFLOAD = 25,
-+      UNI_BSS_INFO_MLD = 26,
- };
- enum {
--- 
-2.39.5
-
diff --git a/queue-6.1/wifi-mt76-connac-introduce-unified-event-table.patch b/queue-6.1/wifi-mt76-connac-introduce-unified-event-table.patch
deleted file mode 100644 (file)
index 08c91f1..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-From d6097b6a5f269c626a56d42f10371fb1ab34e1fa Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Thu, 10 Nov 2022 17:35:21 +0800
-Subject: wifi: mt76: connac: introduce unified event table
-
-From: Shayne Chen <shayne.chen@mediatek.com>
-
-[ Upstream commit ec361f7e415297dc07254e93ac6af1dbce4af87b ]
-
-Add event IDs and related bit fields for unified event support.
-This is a preliminary patch to add mt7996 chipset support.
-
-Signed-off-by: Bo Jiao <Bo.Jiao@mediatek.com>
-Signed-off-by: Peter Chiu <chui-hao.chiu@mediatek.com>
-Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
-Signed-off-by: Felix Fietkau <nbd@nbd.name>
-Stable-dep-of: aa566ac6b727 ("wifi: mt76: mt7921: fix using incorrect group cipher after disconnection.")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h | 11 +++++++++++
- 1 file changed, 11 insertions(+)
-
-diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h
-index 718f427d8f6b2..e04f98d443261 100644
---- a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h
-+++ b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h
-@@ -981,6 +981,17 @@ enum {
-       MCU_EXT_EVENT_MURU_CTRL = 0x9f,
- };
-+/* unified event table */
-+enum {
-+      MCU_UNI_EVENT_RESULT = 0x01,
-+      MCU_UNI_EVENT_FW_LOG_2_HOST = 0x04,
-+      MCU_UNI_EVENT_IE_COUNTDOWN = 0x09,
-+      MCU_UNI_EVENT_RDD_REPORT = 0x11,
-+};
-+
-+#define MCU_UNI_CMD_EVENT                     BIT(1)
-+#define MCU_UNI_CMD_UNSOLICITED_EVENT         BIT(2)
-+
- enum {
-       MCU_Q_QUERY,
-       MCU_Q_SET,
--- 
-2.39.5
-
diff --git a/queue-6.1/wifi-mt76-introduce-rxwi-and-rx-token-utility-routin.patch b/queue-6.1/wifi-mt76-introduce-rxwi-and-rx-token-utility-routin.patch
deleted file mode 100644 (file)
index 3254486..0000000
+++ /dev/null
@@ -1,295 +0,0 @@
-From 566d7640bf25b99ac90175adf8cc36d6ab087060 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Sat, 12 Nov 2022 16:40:34 +0100
-Subject: wifi: mt76: introduce rxwi and rx token utility routines
-
-From: Sujuan Chen <sujuan.chen@mediatek.com>
-
-[ Upstream commit 2666bece0905a3e8ccb792602dbc76a63aaafe4b ]
-
-This is a preliminary patch to introduce WED RX support for mt7915.
-
-Tested-by: Daniel Golle <daniel@makrotopia.org>
-Co-developed-by: Lorenzo Bianconi <lorenzo@kernel.org>
-Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
-Signed-off-by: Sujuan Chen <sujuan.chen@mediatek.com>
-Signed-off-by: Felix Fietkau <nbd@nbd.name>
-Stable-dep-of: aa566ac6b727 ("wifi: mt76: mt7921: fix using incorrect group cipher after disconnection.")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/net/wireless/mediatek/mt76/dma.c      | 68 +++++++++++++++++++
- drivers/net/wireless/mediatek/mt76/dma.h      |  8 +++
- drivers/net/wireless/mediatek/mt76/mac80211.c |  5 ++
- drivers/net/wireless/mediatek/mt76/mt76.h     | 16 ++++-
- drivers/net/wireless/mediatek/mt76/tx.c       | 30 ++++++++
- 5 files changed, 126 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/net/wireless/mediatek/mt76/dma.c b/drivers/net/wireless/mediatek/mt76/dma.c
-index c406cb1a102ff..25e110852e1f2 100644
---- a/drivers/net/wireless/mediatek/mt76/dma.c
-+++ b/drivers/net/wireless/mediatek/mt76/dma.c
-@@ -59,6 +59,19 @@ mt76_alloc_txwi(struct mt76_dev *dev)
-       return t;
- }
-+static struct mt76_txwi_cache *
-+mt76_alloc_rxwi(struct mt76_dev *dev)
-+{
-+      struct mt76_txwi_cache *t;
-+
-+      t = kzalloc(L1_CACHE_ALIGN(sizeof(*t)), GFP_ATOMIC);
-+      if (!t)
-+              return NULL;
-+
-+      t->ptr = NULL;
-+      return t;
-+}
-+
- static struct mt76_txwi_cache *
- __mt76_get_txwi(struct mt76_dev *dev)
- {
-@@ -75,6 +88,22 @@ __mt76_get_txwi(struct mt76_dev *dev)
-       return t;
- }
-+static struct mt76_txwi_cache *
-+__mt76_get_rxwi(struct mt76_dev *dev)
-+{
-+      struct mt76_txwi_cache *t = NULL;
-+
-+      spin_lock(&dev->wed_lock);
-+      if (!list_empty(&dev->rxwi_cache)) {
-+              t = list_first_entry(&dev->rxwi_cache, struct mt76_txwi_cache,
-+                                   list);
-+              list_del(&t->list);
-+      }
-+      spin_unlock(&dev->wed_lock);
-+
-+      return t;
-+}
-+
- static struct mt76_txwi_cache *
- mt76_get_txwi(struct mt76_dev *dev)
- {
-@@ -86,6 +115,18 @@ mt76_get_txwi(struct mt76_dev *dev)
-       return mt76_alloc_txwi(dev);
- }
-+struct mt76_txwi_cache *
-+mt76_get_rxwi(struct mt76_dev *dev)
-+{
-+      struct mt76_txwi_cache *t = __mt76_get_rxwi(dev);
-+
-+      if (t)
-+              return t;
-+
-+      return mt76_alloc_rxwi(dev);
-+}
-+EXPORT_SYMBOL_GPL(mt76_get_rxwi);
-+
- void
- mt76_put_txwi(struct mt76_dev *dev, struct mt76_txwi_cache *t)
- {
-@@ -98,6 +139,18 @@ mt76_put_txwi(struct mt76_dev *dev, struct mt76_txwi_cache *t)
- }
- EXPORT_SYMBOL_GPL(mt76_put_txwi);
-+void
-+mt76_put_rxwi(struct mt76_dev *dev, struct mt76_txwi_cache *t)
-+{
-+      if (!t)
-+              return;
-+
-+      spin_lock(&dev->wed_lock);
-+      list_add(&t->list, &dev->rxwi_cache);
-+      spin_unlock(&dev->wed_lock);
-+}
-+EXPORT_SYMBOL_GPL(mt76_put_rxwi);
-+
- static void
- mt76_free_pending_txwi(struct mt76_dev *dev)
- {
-@@ -112,6 +165,20 @@ mt76_free_pending_txwi(struct mt76_dev *dev)
-       local_bh_enable();
- }
-+static void
-+mt76_free_pending_rxwi(struct mt76_dev *dev)
-+{
-+      struct mt76_txwi_cache *t;
-+
-+      local_bh_disable();
-+      while ((t = __mt76_get_rxwi(dev)) != NULL) {
-+              if (t->ptr)
-+                      skb_free_frag(t->ptr);
-+              kfree(t);
-+      }
-+      local_bh_enable();
-+}
-+
- static void
- mt76_dma_sync_idx(struct mt76_dev *dev, struct mt76_queue *q)
- {
-@@ -811,6 +878,7 @@ void mt76_dma_cleanup(struct mt76_dev *dev)
-       }
-       mt76_free_pending_txwi(dev);
-+      mt76_free_pending_rxwi(dev);
-       if (mtk_wed_device_active(&dev->mmio.wed))
-               mtk_wed_device_detach(&dev->mmio.wed);
-diff --git a/drivers/net/wireless/mediatek/mt76/dma.h b/drivers/net/wireless/mediatek/mt76/dma.h
-index fdf786f975ea3..53c6ce2528b2f 100644
---- a/drivers/net/wireless/mediatek/mt76/dma.h
-+++ b/drivers/net/wireless/mediatek/mt76/dma.h
-@@ -15,6 +15,14 @@
- #define MT_DMA_CTL_SD_LEN0            GENMASK(29, 16)
- #define MT_DMA_CTL_LAST_SEC0          BIT(30)
- #define MT_DMA_CTL_DMA_DONE           BIT(31)
-+#define MT_DMA_CTL_TO_HOST            BIT(8)
-+#define MT_DMA_CTL_TO_HOST_A          BIT(12)
-+#define MT_DMA_CTL_DROP                       BIT(14)
-+#define MT_DMA_CTL_TOKEN              GENMASK(31, 16)
-+
-+#define MT_DMA_PPE_CPU_REASON         GENMASK(15, 11)
-+#define MT_DMA_PPE_ENTRY              GENMASK(30, 16)
-+#define MT_DMA_INFO_PPE_VLD           BIT(31)
- #define MT_DMA_HDR_LEN                        4
- #define MT_RX_INFO_LEN                        4
-diff --git a/drivers/net/wireless/mediatek/mt76/mac80211.c b/drivers/net/wireless/mediatek/mt76/mac80211.c
-index 82fce4b1d581b..8eb02167ba2cb 100644
---- a/drivers/net/wireless/mediatek/mt76/mac80211.c
-+++ b/drivers/net/wireless/mediatek/mt76/mac80211.c
-@@ -572,6 +572,7 @@ mt76_alloc_device(struct device *pdev, unsigned int size,
-       spin_lock_init(&dev->lock);
-       spin_lock_init(&dev->cc_lock);
-       spin_lock_init(&dev->status_lock);
-+      spin_lock_init(&dev->wed_lock);
-       mutex_init(&dev->mutex);
-       init_waitqueue_head(&dev->tx_wait);
-@@ -594,9 +595,13 @@ mt76_alloc_device(struct device *pdev, unsigned int size,
-       spin_lock_init(&dev->token_lock);
-       idr_init(&dev->token);
-+      spin_lock_init(&dev->rx_token_lock);
-+      idr_init(&dev->rx_token);
-+
-       INIT_LIST_HEAD(&dev->wcid_list);
-       INIT_LIST_HEAD(&dev->txwi_cache);
-+      INIT_LIST_HEAD(&dev->rxwi_cache);
-       dev->token_size = dev->drv->token_size;
-       for (i = 0; i < ARRAY_SIZE(dev->q_rx); i++)
-diff --git a/drivers/net/wireless/mediatek/mt76/mt76.h b/drivers/net/wireless/mediatek/mt76/mt76.h
-index 5b03e3b33d546..a8c281a3951a4 100644
---- a/drivers/net/wireless/mediatek/mt76/mt76.h
-+++ b/drivers/net/wireless/mediatek/mt76/mt76.h
-@@ -339,7 +339,10 @@ struct mt76_txwi_cache {
-       struct list_head list;
-       dma_addr_t dma_addr;
--      struct sk_buff *skb;
-+      union {
-+              struct sk_buff *skb;
-+              void *ptr;
-+      };
- };
- struct mt76_rx_tid {
-@@ -738,6 +741,7 @@ struct mt76_dev {
-       struct ieee80211_hw *hw;
-+      spinlock_t wed_lock;
-       spinlock_t lock;
-       spinlock_t cc_lock;
-@@ -764,6 +768,7 @@ struct mt76_dev {
-       struct sk_buff_head rx_skb[__MT_RXQ_MAX];
-       struct list_head txwi_cache;
-+      struct list_head rxwi_cache;
-       struct mt76_queue *q_mcu[__MT_MCUQ_MAX];
-       struct mt76_queue q_rx[__MT_RXQ_MAX];
-       const struct mt76_queue_ops *queue_ops;
-@@ -778,6 +783,10 @@ struct mt76_dev {
-       u16 token_count;
-       u16 token_size;
-+      spinlock_t rx_token_lock;
-+      struct idr rx_token;
-+      u16 rx_token_size;
-+
-       wait_queue_head_t tx_wait;
-       /* spinclock used to protect wcid pktid linked list */
-       spinlock_t status_lock;
-@@ -1262,6 +1271,8 @@ mt76_tx_status_get_hw(struct mt76_dev *dev, struct sk_buff *skb)
- }
- void mt76_put_txwi(struct mt76_dev *dev, struct mt76_txwi_cache *t);
-+void mt76_put_rxwi(struct mt76_dev *dev, struct mt76_txwi_cache *t);
-+struct mt76_txwi_cache *mt76_get_rxwi(struct mt76_dev *dev);
- void mt76_rx_complete(struct mt76_dev *dev, struct sk_buff_head *frames,
-                     struct napi_struct *napi);
- void mt76_rx_poll_complete(struct mt76_dev *dev, enum mt76_rxq_id q,
-@@ -1406,6 +1417,9 @@ struct mt76_txwi_cache *
- mt76_token_release(struct mt76_dev *dev, int token, bool *wake);
- int mt76_token_consume(struct mt76_dev *dev, struct mt76_txwi_cache **ptxwi);
- void __mt76_set_tx_blocked(struct mt76_dev *dev, bool blocked);
-+struct mt76_txwi_cache *mt76_rx_token_release(struct mt76_dev *dev, int token);
-+int mt76_rx_token_consume(struct mt76_dev *dev, void *ptr,
-+                        struct mt76_txwi_cache *r, dma_addr_t phys);
- static inline void mt76_set_tx_blocked(struct mt76_dev *dev, bool blocked)
- {
-diff --git a/drivers/net/wireless/mediatek/mt76/tx.c b/drivers/net/wireless/mediatek/mt76/tx.c
-index 4482e4ff78044..f265a5f80c50e 100644
---- a/drivers/net/wireless/mediatek/mt76/tx.c
-+++ b/drivers/net/wireless/mediatek/mt76/tx.c
-@@ -760,6 +760,23 @@ int mt76_token_consume(struct mt76_dev *dev, struct mt76_txwi_cache **ptxwi)
- }
- EXPORT_SYMBOL_GPL(mt76_token_consume);
-+int mt76_rx_token_consume(struct mt76_dev *dev, void *ptr,
-+                        struct mt76_txwi_cache *t, dma_addr_t phys)
-+{
-+      int token;
-+
-+      spin_lock_bh(&dev->rx_token_lock);
-+      token = idr_alloc(&dev->rx_token, t, 0, dev->rx_token_size,
-+                        GFP_ATOMIC);
-+      spin_unlock_bh(&dev->rx_token_lock);
-+
-+      t->ptr = ptr;
-+      t->dma_addr = phys;
-+
-+      return token;
-+}
-+EXPORT_SYMBOL_GPL(mt76_rx_token_consume);
-+
- struct mt76_txwi_cache *
- mt76_token_release(struct mt76_dev *dev, int token, bool *wake)
- {
-@@ -788,3 +805,16 @@ mt76_token_release(struct mt76_dev *dev, int token, bool *wake)
-       return txwi;
- }
- EXPORT_SYMBOL_GPL(mt76_token_release);
-+
-+struct mt76_txwi_cache *
-+mt76_rx_token_release(struct mt76_dev *dev, int token)
-+{
-+      struct mt76_txwi_cache *t;
-+
-+      spin_lock_bh(&dev->rx_token_lock);
-+      t = idr_remove(&dev->rx_token, token);
-+      spin_unlock_bh(&dev->rx_token_lock);
-+
-+      return t;
-+}
-+EXPORT_SYMBOL_GPL(mt76_rx_token_release);
--- 
-2.39.5
-
index f7787af78404c5ecce9d50bf6402c432b8e29045..8c44815611fb2da815457e9ae58cee081af6ccf8 100644 (file)
@@ -20,14 +20,12 @@ Link: https://patch.msgid.link/20240801024335.12981-1-mingyen.hsieh@mediatek.com
 Signed-off-by: Felix Fietkau <nbd@nbd.name>
 Signed-off-by: Sasha Levin <sashal@kernel.org>
 ---
- drivers/net/wireless/mediatek/mt76/mt7921/main.c | 8 +++++++-
+ drivers/net/wireless/mediatek/mt76/mt7921/main.c |    8 +++++++-
  1 file changed, 7 insertions(+), 1 deletion(-)
 
-diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/main.c b/drivers/net/wireless/mediatek/mt76/mt7921/main.c
-index 172ba7199485d..5070cc23917bd 100644
 --- a/drivers/net/wireless/mediatek/mt76/mt7921/main.c
 +++ b/drivers/net/wireless/mediatek/mt76/mt7921/main.c
-@@ -469,7 +469,13 @@ static int mt7921_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
+@@ -469,7 +469,13 @@ static int mt7921_set_key(struct ieee802
        } else {
                if (idx == *wcid_keyidx)
                        *wcid_keyidx = -1;
@@ -42,6 +40,3 @@ index 172ba7199485d..5070cc23917bd 100644
        }
  
        mt76_wcid_key_setup(&dev->mt76, wcid, key);
--- 
-2.39.5
-