From: Greg Kroah-Hartman Date: Wed, 5 Feb 2025 12:51:36 +0000 (+0100) Subject: drop some unneeded entirely mt76 patches from 6.1 queue X-Git-Tag: v6.6.76~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d5564bd0c2096286a5440f3c6e70bae059a4ccd3;p=thirdparty%2Fkernel%2Fstable-queue.git drop some unneeded entirely mt76 patches from 6.1 queue --- diff --git a/queue-6.1/series b/queue-6.1/series index 99c1aab225..737c9837dd 100644 --- a/queue-6.1/series +++ b/queue-6.1/series @@ -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 index 31d2dfa005..0000000000 --- a/queue-6.1/wifi-mt76-add-wed-rx-support-to-mt76_dma_-add-get-_b.patch +++ /dev/null @@ -1,246 +0,0 @@ -From 89dbd781ce984f8e1d2d4a09f56f12ed927f237b Mon Sep 17 00:00:00 2001 -From: Sasha Levin -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 - -[ Upstream commit cd372b8c99c5a5cf6a464acebb7e4a79af7ec8ae ] - -Introduce the capability to configure RX WED in mt76_dma_{add,get}_buf -utility routines. - -Tested-by: Daniel Golle -Co-developed-by: Sujuan Chen -Signed-off-by: Sujuan Chen -Signed-off-by: Lorenzo Bianconi -Signed-off-by: Felix Fietkau -Stable-dep-of: aa566ac6b727 ("wifi: mt76: mt7921: fix using incorrect group cipher after disconnection.") -Signed-off-by: Sasha Levin ---- - 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 index 482ce0e275..0000000000 --- a/queue-6.1/wifi-mt76-connac-add-more-bss-info-command-tags.patch +++ /dev/null @@ -1,51 +0,0 @@ -From c5205bb7fcb7102ec9f99b80530f6b05a3951450 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 10 Nov 2022 17:35:22 +0800 -Subject: wifi: mt76: connac: add more bss info command tags - -From: Shayne Chen - -[ 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 -Signed-off-by: Felix Fietkau -Stable-dep-of: aa566ac6b727 ("wifi: mt76: mt7921: fix using incorrect group cipher after disconnection.") -Signed-off-by: Sasha Levin ---- - 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 index 08c91f18c4..0000000000 --- a/queue-6.1/wifi-mt76-connac-introduce-unified-event-table.patch +++ /dev/null @@ -1,47 +0,0 @@ -From d6097b6a5f269c626a56d42f10371fb1ab34e1fa Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 10 Nov 2022 17:35:21 +0800 -Subject: wifi: mt76: connac: introduce unified event table - -From: Shayne Chen - -[ 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 -Signed-off-by: Peter Chiu -Signed-off-by: Shayne Chen -Signed-off-by: Felix Fietkau -Stable-dep-of: aa566ac6b727 ("wifi: mt76: mt7921: fix using incorrect group cipher after disconnection.") -Signed-off-by: Sasha Levin ---- - 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 index 32544862d0..0000000000 --- a/queue-6.1/wifi-mt76-introduce-rxwi-and-rx-token-utility-routin.patch +++ /dev/null @@ -1,295 +0,0 @@ -From 566d7640bf25b99ac90175adf8cc36d6ab087060 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 12 Nov 2022 16:40:34 +0100 -Subject: wifi: mt76: introduce rxwi and rx token utility routines - -From: Sujuan Chen - -[ Upstream commit 2666bece0905a3e8ccb792602dbc76a63aaafe4b ] - -This is a preliminary patch to introduce WED RX support for mt7915. - -Tested-by: Daniel Golle -Co-developed-by: Lorenzo Bianconi -Signed-off-by: Lorenzo Bianconi -Signed-off-by: Sujuan Chen -Signed-off-by: Felix Fietkau -Stable-dep-of: aa566ac6b727 ("wifi: mt76: mt7921: fix using incorrect group cipher after disconnection.") -Signed-off-by: Sasha Levin ---- - 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 - diff --git a/queue-6.1/wifi-mt76-mt7921-fix-using-incorrect-group-cipher-af.patch b/queue-6.1/wifi-mt76-mt7921-fix-using-incorrect-group-cipher-af.patch index f7787af784..8c44815611 100644 --- a/queue-6.1/wifi-mt76-mt7921-fix-using-incorrect-group-cipher-af.patch +++ b/queue-6.1/wifi-mt76-mt7921-fix-using-incorrect-group-cipher-af.patch @@ -20,14 +20,12 @@ Link: https://patch.msgid.link/20240801024335.12981-1-mingyen.hsieh@mediatek.com Signed-off-by: Felix Fietkau Signed-off-by: Sasha Levin --- - 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 -