blob: ff56aba457bba0d965c30a76b3f170a6c13fc23c [file] [log] [blame]
developer43a264f2024-03-26 14:09:54 +08001From 8cdf0951f353ce7d4c5b67e3d4cab4694334c612 Mon Sep 17 00:00:00 2001
developerb0c86782023-10-27 15:40:47 +08002From: "sujuan.chen" <sujuan.chen@mediatek.com>
3Date: Mon, 11 Sep 2023 17:57:32 +0800
developerebda9012024-02-22 13:42:45 +08004Subject: [PATCH 2011/2012] wifi: mt76: mt7915: wed: change wed token init size
5 to adapt wed version
developerb0c86782023-10-27 15:40:47 +08006
7Signed-off-by: sujuan.chen <sujuan.chen@mediatek.com>
8---
developerd243af02023-12-21 14:49:33 +08009 mt76.h | 2 ++
developerb0c86782023-10-27 15:40:47 +080010 mt7915/mac.c | 10 ++++++++--
11 mt7915/mcu.c | 7 +++++--
developerd243af02023-12-21 14:49:33 +080012 mt7915/mmio.c | 9 ++++++---
developerb0c86782023-10-27 15:40:47 +080013 mt7915/mt7915.h | 4 +++-
developer43a264f2024-03-26 14:09:54 +080014 tx.c | 23 +++++++----------------
developerebda9012024-02-22 13:42:45 +080015 wed.c | 4 ++--
developer43a264f2024-03-26 14:09:54 +080016 7 files changed, 33 insertions(+), 26 deletions(-)
developerb0c86782023-10-27 15:40:47 +080017
developerd243af02023-12-21 14:49:33 +080018diff --git a/mt76.h b/mt76.h
developer43a264f2024-03-26 14:09:54 +080019index 29e0b19d..b6292e37 100644
developerd243af02023-12-21 14:49:33 +080020--- a/mt76.h
21+++ b/mt76.h
22@@ -29,6 +29,8 @@
23
24 #define MT76_BUILD_TIME_LEN 24
25
26+#define MT76_WED_SW_TOKEN_SIZE 1024
27+
28 #define MT_QFLAG_WED_RING GENMASK(1, 0)
29 #define MT_QFLAG_WED_TYPE GENMASK(4, 2)
30 #define MT_QFLAG_WED BIT(5)
developerb0c86782023-10-27 15:40:47 +080031diff --git a/mt7915/mac.c b/mt7915/mac.c
developer43a264f2024-03-26 14:09:54 +080032index 3f907e61..02f794d4 100644
developerb0c86782023-10-27 15:40:47 +080033--- a/mt7915/mac.c
34+++ b/mt7915/mac.c
developer43a264f2024-03-26 14:09:54 +080035@@ -940,7 +940,7 @@ mt7915_mac_tx_free(struct mt7915_dev *dev, void *data, int len)
developerb0c86782023-10-27 15:40:47 +080036 v3 = (FIELD_GET(MT_TX_FREE_VER, txd) == 0x4);
37
38 for (cur_info = tx_info; count < total; cur_info++) {
39- u32 msdu, info;
40+ u32 msdu, info, max_token_size = MT7915_TOKEN_SIZE;
41 u8 i;
42
43 if (WARN_ON_ONCE((void *)cur_info >= end))
developer43a264f2024-03-26 14:09:54 +080044@@ -996,6 +996,12 @@ mt7915_mac_tx_free(struct mt7915_dev *dev, void *data, int len)
developerb0c86782023-10-27 15:40:47 +080045 wcid->stats.tx_failed += tx_failed;
46 }
47
48+ if (mtk_wed_device_active(&mdev->mmio.wed))
49+ max_token_size = (is_mt7915(&dev->mt76) ?
50+ MT7915_WED_TOKEN_SIZE_V0 :
51+ MT7915_WED_TOKEN_SIZE) +
52+ MT7915_WED_SW_TOKEN_SIZE;
53+
54 if (v3 && (info & MT_TX_FREE_MPDU_HEADER_V3))
55 continue;
56
developer43a264f2024-03-26 14:09:54 +080057@@ -1009,7 +1015,7 @@ mt7915_mac_tx_free(struct mt7915_dev *dev, void *data, int len)
developerb0c86782023-10-27 15:40:47 +080058 }
59
60 /* Todo: check if msdu is sw token */
61- if (msdu > MT7915_TOKEN_SIZE)
62+ if (msdu > max_token_size)
63 dev_err(mdev->dev, "Receive invalid token id(%d)\n",
64 msdu);
65
66diff --git a/mt7915/mcu.c b/mt7915/mcu.c
developer43a264f2024-03-26 14:09:54 +080067index 74d78559..6a119ba3 100644
developerb0c86782023-10-27 15:40:47 +080068--- a/mt7915/mcu.c
69+++ b/mt7915/mcu.c
developer43a264f2024-03-26 14:09:54 +080070@@ -2508,6 +2508,9 @@ mt7915_mcu_init_rx_airtime(struct mt7915_dev *dev)
developerb0c86782023-10-27 15:40:47 +080071 static int mt7915_red_set_watermark(struct mt7915_dev *dev)
72 {
73 #define RED_GLOBAL_TOKEN_WATERMARK 2
74+ u16 token_size = is_mt7915(&dev->mt76) ?
75+ MT7915_WED_TOKEN_SIZE_V0 :
76+ MT7915_WED_TOKEN_SIZE;
77 struct {
78 __le32 args[3];
79 u8 cmd;
developer43a264f2024-03-26 14:09:54 +080080@@ -2521,8 +2524,8 @@ static int mt7915_red_set_watermark(struct mt7915_dev *dev)
developerb0c86782023-10-27 15:40:47 +080081 .args[0] = cpu_to_le32(MCU_WA_PARAM_RED_SETTING),
82 .cmd = RED_GLOBAL_TOKEN_WATERMARK,
83 .len = cpu_to_le16(sizeof(req) - sizeof(req.args)),
84- .high_mark = cpu_to_le16(MT7915_HW_TOKEN_SIZE - 256),
85- .low_mark = cpu_to_le16(MT7915_HW_TOKEN_SIZE - 256 - 1536),
86+ .high_mark = cpu_to_le16(token_size - 256),
87+ .low_mark = cpu_to_le16(token_size - 256 - 1536),
88 };
89
90 return mt76_mcu_send_msg(&dev->mt76, MCU_WA_PARAM_CMD(SET), &req,
91diff --git a/mt7915/mmio.c b/mt7915/mmio.c
developer43a264f2024-03-26 14:09:54 +080092index 3391a949..6309dd91 100644
developerb0c86782023-10-27 15:40:47 +080093--- a/mt7915/mmio.c
94+++ b/mt7915/mmio.c
developerebda9012024-02-22 13:42:45 +080095@@ -695,11 +695,14 @@ int mt7915_mmio_wed_init(struct mt7915_dev *dev, void *pdev_ptr,
developerb0c86782023-10-27 15:40:47 +080096 wed->wlan.wpdma_rx_glo = res->start + MT_WPDMA_GLO_CFG;
97 wed->wlan.wpdma_rx = res->start + MT_RXQ_WED_DATA_RING_BASE;
98 }
99- wed->wlan.nbuf = MT7915_HW_TOKEN_SIZE;
100+
101+ wed->wlan.nbuf = is_mt7915(&dev->mt76) ?
102+ MT7915_WED_TOKEN_SIZE_V0 :
103+ MT7915_WED_TOKEN_SIZE;
104 wed->wlan.tx_tbit[0] = is_mt7915(&dev->mt76) ? 4 : 30;
105 wed->wlan.tx_tbit[1] = is_mt7915(&dev->mt76) ? 5 : 31;
106 wed->wlan.txfree_tbit = is_mt798x(&dev->mt76) ? 2 : 1;
107- wed->wlan.token_start = MT7915_TOKEN_SIZE - wed->wlan.nbuf;
108+ wed->wlan.token_start = 0;
109 wed->wlan.wcid_512 = !is_mt7915(&dev->mt76);
110
111 wed->wlan.rx_nbuf = 65536;
developerebda9012024-02-22 13:42:45 +0800112@@ -732,7 +735,7 @@ int mt7915_mmio_wed_init(struct mt7915_dev *dev, void *pdev_ptr,
developerb0c86782023-10-27 15:40:47 +0800113
114 *irq = wed->irq;
115 dev->mt76.dma_dev = wed->dev;
116- dev->mt76.token_size = wed->wlan.token_start;
117+ dev->mt76.token_size = MT7915_WED_SW_TOKEN_SIZE;
118
119 ret = dma_set_mask(wed->dev, DMA_BIT_MASK(32));
120 if (ret)
121diff --git a/mt7915/mt7915.h b/mt7915/mt7915.h
developer43a264f2024-03-26 14:09:54 +0800122index 38d39c82..c5bacf8b 100644
developerb0c86782023-10-27 15:40:47 +0800123--- a/mt7915/mt7915.h
124+++ b/mt7915/mt7915.h
125@@ -62,7 +62,9 @@
126 #define MT7916_EEPROM_SIZE 4096
127
128 #define MT7915_EEPROM_BLOCK_SIZE 16
129-#define MT7915_HW_TOKEN_SIZE 7168
130+#define MT7915_WED_TOKEN_SIZE 8192
131+#define MT7915_WED_TOKEN_SIZE_V0 7168
132+#define MT7915_WED_SW_TOKEN_SIZE 1024
133 #define MT7915_TOKEN_SIZE 8192
134 #define MT7915_RX_TOKEN_SIZE 4096
135
136diff --git a/tx.c b/tx.c
developer43a264f2024-03-26 14:09:54 +0800137index 92afbf5d..df2bb07d 100644
developerb0c86782023-10-27 15:40:47 +0800138--- a/tx.c
139+++ b/tx.c
developer43a264f2024-03-26 14:09:54 +0800140@@ -828,7 +828,7 @@ int mt76_token_consume(struct mt76_dev *dev, struct mt76_txwi_cache **ptxwi,
141 u8 phy_idx)
developerb0c86782023-10-27 15:40:47 +0800142 {
developer43a264f2024-03-26 14:09:54 +0800143 struct mt76_phy *phy = phy_idx < __MT_MAX_BAND ? dev->phys[phy_idx] : NULL;
developerb0c86782023-10-27 15:40:47 +0800144- int token;
145+ int token, start = 0;
developerb0c86782023-10-27 15:40:47 +0800146
147 spin_lock_bh(&dev->token_lock);
148
developer43a264f2024-03-26 14:09:54 +0800149@@ -838,8 +838,12 @@ int mt76_token_consume(struct mt76_dev *dev, struct mt76_txwi_cache **ptxwi,
150 return -EINVAL;
151 }
152
developerb0c86782023-10-27 15:40:47 +0800153- token = idr_alloc(&dev->token, *ptxwi, 0, dev->token_size, GFP_ATOMIC);
developer43a264f2024-03-26 14:09:54 +0800154- if (token >= 0) {
155+ if (mtk_wed_device_active(&dev->mmio.wed))
156+ start = dev->mmio.wed.wlan.nbuf;
157+
developerb0c86782023-10-27 15:40:47 +0800158+ token = idr_alloc(&dev->token, *ptxwi, start, start + dev->token_size,
159+ GFP_ATOMIC);
developer43a264f2024-03-26 14:09:54 +0800160+ if (token >= start) {
developerb0c86782023-10-27 15:40:47 +0800161 dev->token_count++;
162
developer43a264f2024-03-26 14:09:54 +0800163 if (dev->num_phy > 1 && phy) {
164@@ -848,12 +852,6 @@ int mt76_token_consume(struct mt76_dev *dev, struct mt76_txwi_cache **ptxwi,
165 }
166 }
167
developerb0c86782023-10-27 15:40:47 +0800168-#ifdef CONFIG_NET_MEDIATEK_SOC_WED
169- if (mtk_wed_device_active(&dev->mmio.wed) &&
170- token >= dev->mmio.wed.wlan.token_start)
171- dev->wed_token_count++;
172-#endif
173-
174 if (dev->token_count >= dev->token_size - MT76_TOKEN_FREE_THR)
175 __mt76_set_tx_blocked(dev, true);
176
developer43a264f2024-03-26 14:09:54 +0800177@@ -893,13 +891,6 @@ mt76_token_release(struct mt76_dev *dev, int token, bool *wake)
developerb0c86782023-10-27 15:40:47 +0800178 dev->token_count--;
developer43a264f2024-03-26 14:09:54 +0800179 if (dev->num_phy > 1 && dev->phys[txwi->phy_idx])
180 dev->phys[txwi->phy_idx]->tokens--;
181-
developerb0c86782023-10-27 15:40:47 +0800182-#ifdef CONFIG_NET_MEDIATEK_SOC_WED
183- if (mtk_wed_device_active(&dev->mmio.wed) &&
184- token >= dev->mmio.wed.wlan.token_start &&
185- --dev->wed_token_count == 0)
186- wake_up(&dev->tx_wait);
187-#endif
developer43a264f2024-03-26 14:09:54 +0800188 }
189
developerb0c86782023-10-27 15:40:47 +0800190 if (dev->token_count < dev->token_size - MT76_TOKEN_FREE_THR &&
developerebda9012024-02-22 13:42:45 +0800191diff --git a/wed.c b/wed.c
developer43a264f2024-03-26 14:09:54 +0800192index 70e40575..5ed681ed 100644
developerebda9012024-02-22 13:42:45 +0800193--- a/wed.c
194+++ b/wed.c
195@@ -118,7 +118,7 @@ int mt76_wed_offload_enable(struct mtk_wed_device *wed)
196 struct mt76_dev *dev = container_of(wed, struct mt76_dev, mmio.wed);
197
198 spin_lock_bh(&dev->token_lock);
199- dev->token_size = wed->wlan.token_start;
200+ dev->token_size = MT76_WED_SW_TOKEN_SIZE;
201 spin_unlock_bh(&dev->token_lock);
202
203 return !wait_event_timeout(dev->tx_wait, !dev->wed_token_count, HZ);
204@@ -202,7 +202,7 @@ void mt76_wed_offload_disable(struct mtk_wed_device *wed)
205 struct mt76_dev *dev = container_of(wed, struct mt76_dev, mmio.wed);
206
207 spin_lock_bh(&dev->token_lock);
208- dev->token_size = wed->wlan.token_start;
209+ dev->token_size = MT76_WED_SW_TOKEN_SIZE;
210 spin_unlock_bh(&dev->token_lock);
211 }
212 EXPORT_SYMBOL_GPL(mt76_wed_offload_disable);
developerb0c86782023-10-27 15:40:47 +0800213--
2142.18.0
215