linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/6] mt76: mt7921: multiple fixes
@ 2021-02-09 10:54 Lorenzo Bianconi
  2021-02-09 10:54 ` [PATCH 1/6] mt76: mt7921: switch to new api for hardware beacon filter Lorenzo Bianconi
                   ` (5 more replies)
  0 siblings, 6 replies; 8+ messages in thread
From: Lorenzo Bianconi @ 2021-02-09 10:54 UTC (permalink / raw)
  To: nbd; +Cc: linux-wireless, sean.wang, lorenzo.bianconi

Align mt7921 driver to fw APIs available in linux-firmware.
Fix uninitialized pointer access.

Sean Wang (6):
  mt76: mt7921: switch to new api for hardware beacon filter
  mt76: connac: fix up the setting for ht40 mode in
    mt76_connac_mcu_uni_add_bss
  mt76: mt7921: fixup rx bitrate statistics
  mt76: mt7921: add flush operation
  mt76: mt7921: fix uninitialized pointer access in mt7921_get_wtbl_info
  mt76: connac: update sched_scan cmd usage

 .../wireless/mediatek/mt76/mt7615/mt7615.h    |   5 -
 .../net/wireless/mediatek/mt76/mt76_connac.h  |   5 +
 .../wireless/mediatek/mt76/mt76_connac_mcu.c  |   9 +-
 .../wireless/mediatek/mt76/mt76_connac_mcu.h  |  14 +-
 .../net/wireless/mediatek/mt76/mt7921/mac.c   | 152 +++++++++---------
 .../net/wireless/mediatek/mt76/mt7921/mac.h   |  10 +-
 .../net/wireless/mediatek/mt76/mt7921/main.c  |  12 +-
 .../net/wireless/mediatek/mt76/mt7921/mcu.c   |  13 +-
 8 files changed, 128 insertions(+), 92 deletions(-)

-- 
2.29.2


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/6] mt76: mt7921: switch to new api for hardware beacon filter
  2021-02-09 10:54 [PATCH 0/6] mt76: mt7921: multiple fixes Lorenzo Bianconi
@ 2021-02-09 10:54 ` Lorenzo Bianconi
  2021-02-09 10:54 ` [PATCH 2/6] mt76: connac: fix up the setting for ht40 mode in mt76_connac_mcu_uni_add_bss Lorenzo Bianconi
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Lorenzo Bianconi @ 2021-02-09 10:54 UTC (permalink / raw)
  To: nbd; +Cc: linux-wireless, sean.wang, lorenzo.bianconi

From: Sean Wang <sean.wang@mediatek.com>

Current firmware only supports new api for enabling hardware beacon filter.

Fixes: 1d8efc741df80 ("mt76: mt7921: introduce Runtime PM support")
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
 drivers/net/wireless/mediatek/mt76/mt7921/main.c | 2 +-
 drivers/net/wireless/mediatek/mt76/mt7921/mcu.c  | 8 +++++++-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/main.c b/drivers/net/wireless/mediatek/mt76/mt7921/main.c
index 729f6c42cdde..617e48f243f3 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/main.c
@@ -296,7 +296,7 @@ static int mt7921_add_interface(struct ieee80211_hw *hw,
 		goto out;
 
 	if (dev->pm.enable) {
-		ret = mt7921_mcu_set_bss_pm(dev, vif, true);
+		ret = mt7921_mcu_uni_bss_bcnft(dev, vif, true);
 		if (ret)
 			goto out;
 
diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
index db125cd22b91..d784c75d47bf 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
@@ -1294,8 +1294,14 @@ mt7921_pm_interface_iter(void *priv, u8 *mac, struct ieee80211_vif *vif)
 {
 	struct mt7921_phy *phy = priv;
 	struct mt7921_dev *dev = phy->dev;
+	int ret;
+
+	if (dev->pm.enable)
+		ret = mt7921_mcu_uni_bss_bcnft(dev, vif, true);
+	else
+		ret = mt7921_mcu_set_bss_pm(dev, vif, false);
 
-	if (mt7921_mcu_set_bss_pm(dev, vif, dev->pm.enable))
+	if (ret)
 		return;
 
 	if (dev->pm.enable) {
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/6] mt76: connac: fix up the setting for ht40 mode in mt76_connac_mcu_uni_add_bss
  2021-02-09 10:54 [PATCH 0/6] mt76: mt7921: multiple fixes Lorenzo Bianconi
  2021-02-09 10:54 ` [PATCH 1/6] mt76: mt7921: switch to new api for hardware beacon filter Lorenzo Bianconi
@ 2021-02-09 10:54 ` Lorenzo Bianconi
  2021-02-09 10:54 ` [PATCH 3/6] mt76: mt7921: fixup rx bitrate statistics Lorenzo Bianconi
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Lorenzo Bianconi @ 2021-02-09 10:54 UTC (permalink / raw)
  To: nbd; +Cc: linux-wireless, sean.wang, lorenzo.bianconi

From: Sean Wang <sean.wang@mediatek.com>

Use proper value for ht40 mode configuration in mt76_connac_mcu_uni_add_bss
routine and not ht20 one

Fixes: d0e274af2f2e4 ("mt76: mt76_connac: create mcu library")
Co-developed-by: Soul Huang <Soul.Huang@mediatek.com>
Signed-off-by: Soul Huang <Soul.Huang@mediatek.com>
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
 drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c
index 6cbccfb05f8b..4356bf130dbd 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c
@@ -1195,6 +1195,7 @@ int mt76_connac_mcu_uni_add_bss(struct mt76_phy *phy,
 			.center_chan = ieee80211_frequency_to_channel(freq1),
 			.center_chan2 = ieee80211_frequency_to_channel(freq2),
 			.tx_streams = hweight8(phy->antenna_mask),
+			.ht_op_info = 4, /* set HT 40M allowed */
 			.rx_streams = phy->chainmask,
 			.short_st = true,
 		},
@@ -1287,6 +1288,7 @@ int mt76_connac_mcu_uni_add_bss(struct mt76_phy *phy,
 	case NL80211_CHAN_WIDTH_20:
 	default:
 		rlm_req.rlm.bw = CMD_CBW_20MHZ;
+		rlm_req.rlm.ht_op_info = 0;
 		break;
 	}
 
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 3/6] mt76: mt7921: fixup rx bitrate statistics
  2021-02-09 10:54 [PATCH 0/6] mt76: mt7921: multiple fixes Lorenzo Bianconi
  2021-02-09 10:54 ` [PATCH 1/6] mt76: mt7921: switch to new api for hardware beacon filter Lorenzo Bianconi
  2021-02-09 10:54 ` [PATCH 2/6] mt76: connac: fix up the setting for ht40 mode in mt76_connac_mcu_uni_add_bss Lorenzo Bianconi
@ 2021-02-09 10:54 ` Lorenzo Bianconi
  2021-02-09 13:36   ` kernel test robot
  2021-02-09 10:54 ` [PATCH 4/6] mt76: mt7921: add flush operation Lorenzo Bianconi
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 8+ messages in thread
From: Lorenzo Bianconi @ 2021-02-09 10:54 UTC (permalink / raw)
  To: nbd; +Cc: linux-wireless, sean.wang, lorenzo.bianconi

From: Sean Wang <sean.wang@mediatek.com>

Since the related rx bitrate fields have been moved to group3 in Rxv,
fix rx bitrate statistics in mt7921_mac_fill_rx routine.

Fixes: 163f4d22c118d ("mt76: mt7921: add MAC support")
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
 .../net/wireless/mediatek/mt76/mt7921/mac.c   | 152 +++++++++---------
 .../net/wireless/mediatek/mt76/mt7921/mac.h   |  10 +-
 2 files changed, 85 insertions(+), 77 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c b/drivers/net/wireless/mediatek/mt76/mt7921/mac.c
index 3f9097481a5e..dca4878b9849 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/mac.c
@@ -401,6 +401,8 @@ int mt7921_mac_fill_rx(struct mt7921_dev *dev, struct sk_buff *skb)
 	/* RXD Group 3 - P-RXV */
 	if (rxd1 & MT_RXD1_NORMAL_GROUP_3) {
 		u32 v0, v1, v2;
+		u8 stbc, gi;
+		bool cck;
 
 		rxv = rxd;
 		rxd += 2;
@@ -429,87 +431,87 @@ int mt7921_mac_fill_rx(struct mt7921_dev *dev, struct sk_buff *skb)
 					     status->chain_signal[i]);
 		}
 
-		/* RXD Group 5 - C-RXV */
-		if (rxd1 & MT_RXD1_NORMAL_GROUP_5) {
-			u8 stbc = FIELD_GET(MT_CRXV_HT_STBC, v2);
-			u8 gi = FIELD_GET(MT_CRXV_HT_SHORT_GI, v2);
-			bool cck = false;
+		stbc = FIELD_GET(MT_PRXV_STBC, v0);
+		gi = FIELD_GET(MT_PRXV_SGI, v0);
+		cck = false;
 
-			rxd += 18;
-			if ((u8 *)rxd - skb->data >= skb->len)
-				return -EINVAL;
+		idx = i = FIELD_GET(MT_PRXV_TX_RATE, v0);
+		mode = FIELD_GET(MT_PRXV_TX_MODE, v0);
 
-			idx = i = FIELD_GET(MT_PRXV_TX_RATE, v0);
-			mode = FIELD_GET(MT_CRXV_TX_MODE, v2);
-
-			switch (mode) {
-			case MT_PHY_TYPE_CCK:
-				cck = true;
-				fallthrough;
-			case MT_PHY_TYPE_OFDM:
-				i = mt76_get_rate(&dev->mt76, sband, i, cck);
-				break;
-			case MT_PHY_TYPE_HT_GF:
-			case MT_PHY_TYPE_HT:
-				status->encoding = RX_ENC_HT;
-				if (i > 31)
-					return -EINVAL;
-				break;
-			case MT_PHY_TYPE_VHT:
-				status->nss =
-					FIELD_GET(MT_PRXV_NSTS, v0) + 1;
-				status->encoding = RX_ENC_VHT;
-				if (i > 9)
-					return -EINVAL;
-				break;
-			case MT_PHY_TYPE_HE_MU:
-				status->flag |= RX_FLAG_RADIOTAP_HE_MU;
-				fallthrough;
-			case MT_PHY_TYPE_HE_SU:
-			case MT_PHY_TYPE_HE_EXT_SU:
-			case MT_PHY_TYPE_HE_TB:
-				status->nss =
-					FIELD_GET(MT_PRXV_NSTS, v0) + 1;
-				status->encoding = RX_ENC_HE;
-				status->flag |= RX_FLAG_RADIOTAP_HE;
-				i &= GENMASK(3, 0);
-
-				if (gi <= NL80211_RATE_INFO_HE_GI_3_2)
-					status->he_gi = gi;
-
-				status->he_dcm = !!(idx & MT_PRXV_TX_DCM);
-				break;
-			default:
+		switch (mode) {
+		case MT_PHY_TYPE_CCK:
+			cck = true;
+			fallthrough;
+		case MT_PHY_TYPE_OFDM:
+			i = mt76_get_rate(&dev->mt76, sband, i, cck);
+			break;
+		case MT_PHY_TYPE_HT_GF:
+		case MT_PHY_TYPE_HT:
+			status->encoding = RX_ENC_HT;
+			if (i > 31)
 				return -EINVAL;
-			}
-			status->rate_idx = i;
-
-			switch (FIELD_GET(MT_CRXV_FRAME_MODE, v2)) {
-			case IEEE80211_STA_RX_BW_20:
-				break;
-			case IEEE80211_STA_RX_BW_40:
-				if (mode & MT_PHY_TYPE_HE_EXT_SU &&
-				    (idx & MT_PRXV_TX_ER_SU_106T)) {
-					status->bw = RATE_INFO_BW_HE_RU;
-					status->he_ru =
-						NL80211_RATE_INFO_HE_RU_ALLOC_106;
-				} else {
-					status->bw = RATE_INFO_BW_40;
-				}
-				break;
-			case IEEE80211_STA_RX_BW_80:
-				status->bw = RATE_INFO_BW_80;
-				break;
-			case IEEE80211_STA_RX_BW_160:
-				status->bw = RATE_INFO_BW_160;
-				break;
-			default:
+			break;
+		case MT_PHY_TYPE_VHT:
+			status->nss =
+				FIELD_GET(MT_PRXV_NSTS, v0) + 1;
+			status->encoding = RX_ENC_VHT;
+			if (i > 9)
 				return -EINVAL;
+			break;
+		case MT_PHY_TYPE_HE_MU:
+			status->flag |= RX_FLAG_RADIOTAP_HE_MU;
+			fallthrough;
+		case MT_PHY_TYPE_HE_SU:
+		case MT_PHY_TYPE_HE_EXT_SU:
+		case MT_PHY_TYPE_HE_TB:
+			status->nss =
+				FIELD_GET(MT_PRXV_NSTS, v0) + 1;
+			status->encoding = RX_ENC_HE;
+			status->flag |= RX_FLAG_RADIOTAP_HE;
+			i &= GENMASK(3, 0);
+
+			if (gi <= NL80211_RATE_INFO_HE_GI_3_2)
+				status->he_gi = gi;
+
+			status->he_dcm = !!(idx & MT_PRXV_TX_DCM);
+			break;
+		default:
+			return -EINVAL;
+		}
+
+		status->rate_idx = i;
+
+		switch (FIELD_GET(MT_PRXV_FRAME_MODE, v0)) {
+		case IEEE80211_STA_RX_BW_20:
+			break;
+		case IEEE80211_STA_RX_BW_40:
+			if (mode & MT_PHY_TYPE_HE_EXT_SU &&
+			    (idx & MT_PRXV_TX_ER_SU_106T)) {
+				status->bw = RATE_INFO_BW_HE_RU;
+				status->he_ru =
+					NL80211_RATE_INFO_HE_RU_ALLOC_106;
+			} else {
+				status->bw = RATE_INFO_BW_40;
 			}
+			break;
+		case IEEE80211_STA_RX_BW_80:
+			status->bw = RATE_INFO_BW_80;
+			break;
+		case IEEE80211_STA_RX_BW_160:
+			status->bw = RATE_INFO_BW_160;
+			break;
+		default:
+			return -EINVAL;
+		}
+
+		status->enc_flags |= RX_ENC_FLAG_STBC_MASK * stbc;
+		if (mode < MT_PHY_TYPE_HE_SU && gi)
+			status->enc_flags |= RX_ENC_FLAG_SHORT_GI;
 
-			status->enc_flags |= RX_ENC_FLAG_STBC_MASK * stbc;
-			if (mode < MT_PHY_TYPE_HE_SU && gi)
-				status->enc_flags |= RX_ENC_FLAG_SHORT_GI;
+		if (rxd1 & MT_RXD1_NORMAL_GROUP_5) {
+			rxd += 18;
+			if ((u8 *)rxd - skb->data >= skb->len)
+				return -EINVAL;
 		}
 	}
 
diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mac.h b/drivers/net/wireless/mediatek/mt76/mt7921/mac.h
index a0c1fa0f20e4..109c8849d106 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/mac.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/mac.h
@@ -97,18 +97,24 @@ enum rx_pkt_type {
 #define MT_RXD3_NORMAL_PF_MODE		BIT(29)
 #define MT_RXD3_NORMAL_PF_STS		GENMASK(31, 30)
 
-/* P-RXV */
+/* P-RXV DW0 */
 #define MT_PRXV_TX_RATE			GENMASK(6, 0)
 #define MT_PRXV_TX_DCM			BIT(4)
 #define MT_PRXV_TX_ER_SU_106T		BIT(5)
 #define MT_PRXV_NSTS			GENMASK(9, 7)
 #define MT_PRXV_HT_AD_CODE		BIT(11)
+#define MT_PRXV_FRAME_MODE		GENMASK(14, 12)
+#define MT_PRXV_SGI			GENMASK(16, 15)
+#define MT_PRXV_STBC			GENMASK(23, 22)
+#define MT_PRXV_TX_MODE			GENMASK(27, 24)
 #define MT_PRXV_HE_RU_ALLOC_L		GENMASK(31, 28)
-#define MT_PRXV_HE_RU_ALLOC_H		GENMASK(3, 0)
+
+/* P-RXV DW1 */
 #define MT_PRXV_RCPI3			GENMASK(31, 24)
 #define MT_PRXV_RCPI2			GENMASK(23, 16)
 #define MT_PRXV_RCPI1			GENMASK(15, 8)
 #define MT_PRXV_RCPI0			GENMASK(7, 0)
+#define MT_PRXV_HE_RU_ALLOC_H		GENMASK(3, 0)
 
 /* C-RXV */
 #define MT_CRXV_HT_STBC			GENMASK(1, 0)
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 4/6] mt76: mt7921: add flush operation
  2021-02-09 10:54 [PATCH 0/6] mt76: mt7921: multiple fixes Lorenzo Bianconi
                   ` (2 preceding siblings ...)
  2021-02-09 10:54 ` [PATCH 3/6] mt76: mt7921: fixup rx bitrate statistics Lorenzo Bianconi
@ 2021-02-09 10:54 ` Lorenzo Bianconi
  2021-02-09 10:54 ` [PATCH 5/6] mt76: mt7921: fix uninitialized pointer access in mt7921_get_wtbl_info Lorenzo Bianconi
  2021-02-09 10:54 ` [PATCH 6/6] mt76: connac: update sched_scan cmd usage Lorenzo Bianconi
  5 siblings, 0 replies; 8+ messages in thread
From: Lorenzo Bianconi @ 2021-02-09 10:54 UTC (permalink / raw)
  To: nbd; +Cc: linux-wireless, sean.wang, lorenzo.bianconi

From: Sean Wang <sean.wang@mediatek.com>

add flush operation to make sure cfg80211_mlme_deauth is able to flush
the deauthtication frame into air immediately.

Co-developed-by: YN Chen <YN.Chen@mediatek.com>
Signed-off-by: YN Chen <YN.Chen@mediatek.com>
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
 drivers/net/wireless/mediatek/mt76/mt7921/main.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/main.c b/drivers/net/wireless/mediatek/mt76/mt7921/main.c
index 617e48f243f3..e6843c9ff145 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/main.c
@@ -1120,6 +1120,15 @@ static void mt7921_set_rekey_data(struct ieee80211_hw *hw,
 }
 #endif /* CONFIG_PM */
 
+static void mt7921_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+			 u32 queues, bool drop)
+{
+	struct mt7921_dev *dev = mt7921_hw_dev(hw);
+
+	wait_event_timeout(dev->mt76.tx_wait, !mt76_has_tx_pending(&dev->mphy),
+			   HZ / 2);
+}
+
 const struct ieee80211_ops mt7921_ops = {
 	.tx = mt7921_tx,
 	.start = mt7921_start,
@@ -1158,4 +1167,5 @@ const struct ieee80211_ops mt7921_ops = {
 	.set_wakeup = mt7921_set_wakeup,
 	.set_rekey_data = mt7921_set_rekey_data,
 #endif /* CONFIG_PM */
+	.flush = mt7921_flush,
 };
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 5/6] mt76: mt7921: fix uninitialized pointer access in mt7921_get_wtbl_info
  2021-02-09 10:54 [PATCH 0/6] mt76: mt7921: multiple fixes Lorenzo Bianconi
                   ` (3 preceding siblings ...)
  2021-02-09 10:54 ` [PATCH 4/6] mt76: mt7921: add flush operation Lorenzo Bianconi
@ 2021-02-09 10:54 ` Lorenzo Bianconi
  2021-02-09 10:54 ` [PATCH 6/6] mt76: connac: update sched_scan cmd usage Lorenzo Bianconi
  5 siblings, 0 replies; 8+ messages in thread
From: Lorenzo Bianconi @ 2021-02-09 10:54 UTC (permalink / raw)
  To: nbd; +Cc: linux-wireless, sean.wang, lorenzo.bianconi

From: Sean Wang <sean.wang@mediatek.com>

fix possible uninitialized pointer access in mt7921_get_wtbl_info
routine

[  270.073205] wlp1s0: deauthenticating from 9c:5c:8e:c9:93:14 by local choice (Reason: 3=DEAUTH_LEAVING)
[  270.094918] 8<--- cut here ---
[  270.097988] Unable to handle kernel NULL pointer dereference at virtual address 0000000a
[  270.106120] pgd = 7ac68838
[  270.108842] [0000000a] *pgd=00000000
[  270.112426] Internal error: Oops: 805 [#1] SMP ARM
[  270.117216] Modules linked in: mt7921e mt76_connac_lib mt76
[  270.122803] CPU: 0 PID: 7 Comm: kworker/u8:0 Tainted: G        W         5.11.0-rc2+ #67
[  270.130891] Hardware name: Mediatek Cortex-A7 (Device Tree)
[  270.136459] Workqueue: phy0 mt7921_mac_work [mt7921e]
[  270.141557] PC is at mt7921_get_wtbl_info+0x224/0x2d8 [mt7921e]
[  270.147498] LR is at 0x0
[  270.150026] pc : [<bf030398>]    lr : [<00000000>]    psr: 60000013

...

[  270.317696] 7fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[  270.325869] 7fe0: 00000000 00000000 00000000 00000000 00000013 00000000 00000000 00000000
[  270.334043] [<bf030398>] (mt7921_get_wtbl_info [mt7921e]) from [<bf02ea9c>] (mt7921_mac_work+0x298/0x2c0 [mt7921e])
[  270.344529] [<bf02ea9c>] (mt7921_mac_work [mt7921e]) from [<c013cde8>] (process_one_work+0x1f0/0x538)
[  270.353780] [<c013cde8>] (process_one_work) from [<c013d17c>] (worker_thread+0x4c/0x55c)
[  270.361874] [<c013d17c>] (worker_thread) from [<c01447a8>] (kthread+0x124/0x150)
[  270.369275] [<c01447a8>] (kthread) from [<c0100150>] (ret_from_fork+0x14/0x24)
[  270.376501] Exception stack(0xc19c7fb0 to 0xc19c7ff8)
[  270.381550] 7fa0:                                     00000000 00000000 00000000 00000000
[  270.389724] 7fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[  270.397896] 7fe0: 00000000 00000000 00000000 00000000 00000013 00000000
[  270.404509] Code: e59de012 e1cdc1b6 e1cdc1b8 e59dc016 (e582e00a)

Fixes: 1c099ab44727c ("mt76: mt7921: add MCU support")
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
 drivers/net/wireless/mediatek/mt76/mt7921/mcu.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
index d784c75d47bf..58de7f32a625 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
@@ -404,11 +404,10 @@ mt7921_mcu_tx_rate_report(struct mt7921_dev *dev, struct sk_buff *skb,
 
 	if (wlan_idx >= MT76_N_WCIDS)
 		return;
+
 	wcid = rcu_dereference(dev->mt76.wcid[wlan_idx]);
-	if (!wcid) {
-		stats->tx_rate = rate;
+	if (!wcid)
 		return;
-	}
 
 	msta = container_of(wcid, struct mt7921_sta, wcid);
 	stats = &msta->stats;
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 6/6] mt76: connac: update sched_scan cmd usage
  2021-02-09 10:54 [PATCH 0/6] mt76: mt7921: multiple fixes Lorenzo Bianconi
                   ` (4 preceding siblings ...)
  2021-02-09 10:54 ` [PATCH 5/6] mt76: mt7921: fix uninitialized pointer access in mt7921_get_wtbl_info Lorenzo Bianconi
@ 2021-02-09 10:54 ` Lorenzo Bianconi
  5 siblings, 0 replies; 8+ messages in thread
From: Lorenzo Bianconi @ 2021-02-09 10:54 UTC (permalink / raw)
  To: nbd; +Cc: linux-wireless, sean.wang, lorenzo.bianconi

From: Sean Wang <sean.wang@mediatek.com>

Update sched_scan command usage according to the current firmware
submitted into linux-firmware.git.

Fixes: 80fc1e37c0eb ("mt76: mt7921: rely on mt76_connac_mcu module for sched_scan and hw_scan")
Co-developed-by: Soul Huang <Soul.Huang@mediatek.com>
Signed-off-by: Soul Huang <Soul.Huang@mediatek.com>
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
 drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h |  5 -----
 drivers/net/wireless/mediatek/mt76/mt76_connac.h   |  5 +++++
 .../net/wireless/mediatek/mt76/mt76_connac_mcu.c   |  7 +++++--
 .../net/wireless/mediatek/mt76/mt76_connac_mcu.h   | 14 +++++++++++---
 4 files changed, 21 insertions(+), 10 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h b/drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h
index 491841bc6291..5ef19fbee6bd 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h
@@ -408,11 +408,6 @@ static inline bool is_mt7615(struct mt76_dev *dev)
 	return mt76_chip(dev) == 0x7615 || mt76_chip(dev) == 0x7611;
 }
 
-static inline bool is_mt7663(struct mt76_dev *dev)
-{
-	return mt76_chip(dev) == 0x7663;
-}
-
 static inline bool is_mt7611(struct mt76_dev *dev)
 {
 	return mt76_chip(dev) == 0x7611;
diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac.h b/drivers/net/wireless/mediatek/mt76/mt76_connac.h
index 0d58606391b0..b811f3c410a1 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76_connac.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76_connac.h
@@ -73,6 +73,11 @@ static inline bool is_mt7921(struct mt76_dev *dev)
 	return mt76_chip(dev) == 0x7961;
 }
 
+static inline bool is_mt7663(struct mt76_dev *dev)
+{
+	return mt76_chip(dev) == 0x7663;
+}
+
 int mt76_connac_pm_wake(struct mt76_phy *phy, struct mt76_connac_pm *pm);
 void mt76_connac_power_save_sched(struct mt76_phy *phy,
 				  struct mt76_connac_pm *pm);
diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c
index 4356bf130dbd..1ee4e627ea00 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c
@@ -1435,10 +1435,13 @@ int mt76_connac_mcu_sched_scan_req(struct mt76_phy *phy,
 	req->version = 1;
 	req->seq_num = mvif->scan_seq_num | ext_phy << 7;
 
-	if (sreq->flags & NL80211_SCAN_FLAG_RANDOM_ADDR) {
-		get_random_mask_addr(req->random_mac, sreq->mac_addr,
+	if (is_mt7663(phy->dev) &&
+	    (sreq->flags & NL80211_SCAN_FLAG_RANDOM_ADDR)) {
+		get_random_mask_addr(req->mt7663.random_mac, sreq->mac_addr,
 				     sreq->mac_addr_mask);
 		req->scan_func = 1;
+	} else if (is_mt7921(phy->dev)) {
+		req->mt7921.bss_idx = mvif->idx;
 	}
 
 	req->ssids_num = sreq->n_ssids;
diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h
index c1e1df5f7cd7..4dca07e4e8aa 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h
@@ -759,11 +759,19 @@ struct mt76_connac_sched_scan_req {
 	u8 channel_type;
 	u8 channels_num;
 	u8 intervals_num;
-	u8 scan_func; /* BIT(0) eable random mac address */
+	u8 scan_func; /* MT7663: BIT(0) eable random mac address */
 	struct mt76_connac_mcu_scan_channel channels[64];
 	__le16 intervals[MT76_CONNAC_MAX_SCHED_SCAN_INTERVAL];
-	u8 random_mac[ETH_ALEN]; /* valid when BIT(0) in scan_func is set */
-	u8 pad2[58];
+	union {
+		struct {
+			u8 random_mac[ETH_ALEN];
+			u8 pad2[58];
+		} mt7663;
+		struct {
+			u8 bss_idx;
+			u8 pad2[63];
+		} mt7921;
+	};
 } __packed;
 
 struct mt76_connac_sched_scan_done {
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 3/6] mt76: mt7921: fixup rx bitrate statistics
  2021-02-09 10:54 ` [PATCH 3/6] mt76: mt7921: fixup rx bitrate statistics Lorenzo Bianconi
@ 2021-02-09 13:36   ` kernel test robot
  0 siblings, 0 replies; 8+ messages in thread
From: kernel test robot @ 2021-02-09 13:36 UTC (permalink / raw)
  To: Lorenzo Bianconi, nbd
  Cc: kbuild-all, linux-wireless, sean.wang, lorenzo.bianconi

[-- Attachment #1: Type: text/plain, Size: 18868 bytes --]

Hi Lorenzo,

I love your patch! Perhaps something to improve:

[auto build test WARNING on nbd168-wireless/mt76]
[cannot apply to wireless-drivers-next/master wireless-drivers/master v5.11-rc6 next-20210125]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Lorenzo-Bianconi/mt76-mt7921-multiple-fixes/20210209-190328
base:   https://github.com/nbd168/wireless mt76
config: xtensa-allyesconfig (attached as .config)
compiler: xtensa-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/716af9b953825b6ade758b0ed48ee2ceceaee289
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Lorenzo-Bianconi/mt76-mt7921-multiple-fixes/20210209-190328
        git checkout 716af9b953825b6ade758b0ed48ee2ceceaee289
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=xtensa 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

   drivers/net/wireless/mediatek/mt76/mt7921/mac.c: In function 'mt7921_mac_fill_rx':
>> drivers/net/wireless/mediatek/mt76/mt7921/mac.c:403:15: warning: variable 'v2' set but not used [-Wunused-but-set-variable]
     403 |   u32 v0, v1, v2;
         |               ^~


vim +/v2 +403 drivers/net/wireless/mediatek/mt76/mt7921/mac.c

163f4d22c118d4 Sean Wang 2021-01-28  287  
163f4d22c118d4 Sean Wang 2021-01-28  288  int mt7921_mac_fill_rx(struct mt7921_dev *dev, struct sk_buff *skb)
163f4d22c118d4 Sean Wang 2021-01-28  289  {
163f4d22c118d4 Sean Wang 2021-01-28  290  	struct mt76_rx_status *status = (struct mt76_rx_status *)skb->cb;
163f4d22c118d4 Sean Wang 2021-01-28  291  	struct mt76_phy *mphy = &dev->mt76.phy;
163f4d22c118d4 Sean Wang 2021-01-28  292  	struct mt7921_phy *phy = &dev->phy;
163f4d22c118d4 Sean Wang 2021-01-28  293  	struct ieee80211_supported_band *sband;
163f4d22c118d4 Sean Wang 2021-01-28  294  	struct ieee80211_hdr *hdr;
163f4d22c118d4 Sean Wang 2021-01-28  295  	__le32 *rxd = (__le32 *)skb->data;
163f4d22c118d4 Sean Wang 2021-01-28  296  	__le32 *rxv = NULL;
163f4d22c118d4 Sean Wang 2021-01-28  297  	u32 mode = 0;
163f4d22c118d4 Sean Wang 2021-01-28  298  	u32 rxd1 = le32_to_cpu(rxd[1]);
163f4d22c118d4 Sean Wang 2021-01-28  299  	u32 rxd2 = le32_to_cpu(rxd[2]);
163f4d22c118d4 Sean Wang 2021-01-28  300  	u32 rxd3 = le32_to_cpu(rxd[3]);
163f4d22c118d4 Sean Wang 2021-01-28  301  	bool unicast, insert_ccmp_hdr = false;
163f4d22c118d4 Sean Wang 2021-01-28  302  	u8 remove_pad;
163f4d22c118d4 Sean Wang 2021-01-28  303  	int i, idx;
163f4d22c118d4 Sean Wang 2021-01-28  304  	u8 chfreq;
163f4d22c118d4 Sean Wang 2021-01-28  305  
163f4d22c118d4 Sean Wang 2021-01-28  306  	memset(status, 0, sizeof(*status));
163f4d22c118d4 Sean Wang 2021-01-28  307  
163f4d22c118d4 Sean Wang 2021-01-28  308  	if (rxd1 & MT_RXD1_NORMAL_BAND_IDX)
163f4d22c118d4 Sean Wang 2021-01-28  309  		return -EINVAL;
163f4d22c118d4 Sean Wang 2021-01-28  310  
163f4d22c118d4 Sean Wang 2021-01-28  311  	if (!test_bit(MT76_STATE_RUNNING, &mphy->state))
163f4d22c118d4 Sean Wang 2021-01-28  312  		return -EINVAL;
163f4d22c118d4 Sean Wang 2021-01-28  313  
163f4d22c118d4 Sean Wang 2021-01-28  314  	chfreq = FIELD_GET(MT_RXD3_NORMAL_CH_FREQ, rxd3);
163f4d22c118d4 Sean Wang 2021-01-28  315  	unicast = FIELD_GET(MT_RXD3_NORMAL_ADDR_TYPE, rxd3) == MT_RXD3_NORMAL_U2M;
163f4d22c118d4 Sean Wang 2021-01-28  316  	idx = FIELD_GET(MT_RXD1_NORMAL_WLAN_IDX, rxd1);
163f4d22c118d4 Sean Wang 2021-01-28  317  	status->wcid = mt7921_rx_get_wcid(dev, idx, unicast);
163f4d22c118d4 Sean Wang 2021-01-28  318  
163f4d22c118d4 Sean Wang 2021-01-28  319  	if (status->wcid) {
163f4d22c118d4 Sean Wang 2021-01-28  320  		struct mt7921_sta *msta;
163f4d22c118d4 Sean Wang 2021-01-28  321  
163f4d22c118d4 Sean Wang 2021-01-28  322  		msta = container_of(status->wcid, struct mt7921_sta, wcid);
163f4d22c118d4 Sean Wang 2021-01-28  323  		spin_lock_bh(&dev->sta_poll_lock);
163f4d22c118d4 Sean Wang 2021-01-28  324  		if (list_empty(&msta->poll_list))
163f4d22c118d4 Sean Wang 2021-01-28  325  			list_add_tail(&msta->poll_list, &dev->sta_poll_list);
163f4d22c118d4 Sean Wang 2021-01-28  326  		spin_unlock_bh(&dev->sta_poll_lock);
163f4d22c118d4 Sean Wang 2021-01-28  327  	}
163f4d22c118d4 Sean Wang 2021-01-28  328  
163f4d22c118d4 Sean Wang 2021-01-28  329  	mt7921_get_status_freq_info(dev, mphy, status, chfreq);
163f4d22c118d4 Sean Wang 2021-01-28  330  
163f4d22c118d4 Sean Wang 2021-01-28  331  	if (status->band == NL80211_BAND_5GHZ)
163f4d22c118d4 Sean Wang 2021-01-28  332  		sband = &mphy->sband_5g.sband;
163f4d22c118d4 Sean Wang 2021-01-28  333  	else
163f4d22c118d4 Sean Wang 2021-01-28  334  		sband = &mphy->sband_2g.sband;
163f4d22c118d4 Sean Wang 2021-01-28  335  
163f4d22c118d4 Sean Wang 2021-01-28  336  	if (!sband->channels)
163f4d22c118d4 Sean Wang 2021-01-28  337  		return -EINVAL;
163f4d22c118d4 Sean Wang 2021-01-28  338  
163f4d22c118d4 Sean Wang 2021-01-28  339  	if (rxd1 & MT_RXD1_NORMAL_FCS_ERR)
163f4d22c118d4 Sean Wang 2021-01-28  340  		status->flag |= RX_FLAG_FAILED_FCS_CRC;
163f4d22c118d4 Sean Wang 2021-01-28  341  
163f4d22c118d4 Sean Wang 2021-01-28  342  	if (rxd1 & MT_RXD1_NORMAL_TKIP_MIC_ERR)
163f4d22c118d4 Sean Wang 2021-01-28  343  		status->flag |= RX_FLAG_MMIC_ERROR;
163f4d22c118d4 Sean Wang 2021-01-28  344  
163f4d22c118d4 Sean Wang 2021-01-28  345  	if (FIELD_GET(MT_RXD1_NORMAL_SEC_MODE, rxd1) != 0 &&
163f4d22c118d4 Sean Wang 2021-01-28  346  	    !(rxd1 & (MT_RXD1_NORMAL_CLM | MT_RXD1_NORMAL_CM))) {
163f4d22c118d4 Sean Wang 2021-01-28  347  		status->flag |= RX_FLAG_DECRYPTED;
163f4d22c118d4 Sean Wang 2021-01-28  348  		status->flag |= RX_FLAG_IV_STRIPPED;
163f4d22c118d4 Sean Wang 2021-01-28  349  		status->flag |= RX_FLAG_MMIC_STRIPPED | RX_FLAG_MIC_STRIPPED;
163f4d22c118d4 Sean Wang 2021-01-28  350  	}
163f4d22c118d4 Sean Wang 2021-01-28  351  
163f4d22c118d4 Sean Wang 2021-01-28  352  	if (!(rxd2 & MT_RXD2_NORMAL_NON_AMPDU)) {
163f4d22c118d4 Sean Wang 2021-01-28  353  		status->flag |= RX_FLAG_AMPDU_DETAILS;
163f4d22c118d4 Sean Wang 2021-01-28  354  
163f4d22c118d4 Sean Wang 2021-01-28  355  		/* all subframes of an A-MPDU have the same timestamp */
163f4d22c118d4 Sean Wang 2021-01-28  356  		if (phy->rx_ampdu_ts != rxd[14]) {
163f4d22c118d4 Sean Wang 2021-01-28  357  			if (!++phy->ampdu_ref)
163f4d22c118d4 Sean Wang 2021-01-28  358  				phy->ampdu_ref++;
163f4d22c118d4 Sean Wang 2021-01-28  359  		}
163f4d22c118d4 Sean Wang 2021-01-28  360  		phy->rx_ampdu_ts = rxd[14];
163f4d22c118d4 Sean Wang 2021-01-28  361  
163f4d22c118d4 Sean Wang 2021-01-28  362  		status->ampdu_ref = phy->ampdu_ref;
163f4d22c118d4 Sean Wang 2021-01-28  363  	}
163f4d22c118d4 Sean Wang 2021-01-28  364  
163f4d22c118d4 Sean Wang 2021-01-28  365  	remove_pad = FIELD_GET(MT_RXD2_NORMAL_HDR_OFFSET, rxd2);
163f4d22c118d4 Sean Wang 2021-01-28  366  
163f4d22c118d4 Sean Wang 2021-01-28  367  	if (rxd2 & MT_RXD2_NORMAL_MAX_LEN_ERROR)
163f4d22c118d4 Sean Wang 2021-01-28  368  		return -EINVAL;
163f4d22c118d4 Sean Wang 2021-01-28  369  
163f4d22c118d4 Sean Wang 2021-01-28  370  	rxd += 6;
163f4d22c118d4 Sean Wang 2021-01-28  371  	if (rxd1 & MT_RXD1_NORMAL_GROUP_4) {
163f4d22c118d4 Sean Wang 2021-01-28  372  		rxd += 4;
163f4d22c118d4 Sean Wang 2021-01-28  373  		if ((u8 *)rxd - skb->data >= skb->len)
163f4d22c118d4 Sean Wang 2021-01-28  374  			return -EINVAL;
163f4d22c118d4 Sean Wang 2021-01-28  375  	}
163f4d22c118d4 Sean Wang 2021-01-28  376  
163f4d22c118d4 Sean Wang 2021-01-28  377  	if (rxd1 & MT_RXD1_NORMAL_GROUP_1) {
163f4d22c118d4 Sean Wang 2021-01-28  378  		u8 *data = (u8 *)rxd;
163f4d22c118d4 Sean Wang 2021-01-28  379  
163f4d22c118d4 Sean Wang 2021-01-28  380  		if (status->flag & RX_FLAG_DECRYPTED) {
163f4d22c118d4 Sean Wang 2021-01-28  381  			status->iv[0] = data[5];
163f4d22c118d4 Sean Wang 2021-01-28  382  			status->iv[1] = data[4];
163f4d22c118d4 Sean Wang 2021-01-28  383  			status->iv[2] = data[3];
163f4d22c118d4 Sean Wang 2021-01-28  384  			status->iv[3] = data[2];
163f4d22c118d4 Sean Wang 2021-01-28  385  			status->iv[4] = data[1];
163f4d22c118d4 Sean Wang 2021-01-28  386  			status->iv[5] = data[0];
163f4d22c118d4 Sean Wang 2021-01-28  387  
163f4d22c118d4 Sean Wang 2021-01-28  388  			insert_ccmp_hdr = FIELD_GET(MT_RXD2_NORMAL_FRAG, rxd2);
163f4d22c118d4 Sean Wang 2021-01-28  389  		}
163f4d22c118d4 Sean Wang 2021-01-28  390  		rxd += 4;
163f4d22c118d4 Sean Wang 2021-01-28  391  		if ((u8 *)rxd - skb->data >= skb->len)
163f4d22c118d4 Sean Wang 2021-01-28  392  			return -EINVAL;
163f4d22c118d4 Sean Wang 2021-01-28  393  	}
163f4d22c118d4 Sean Wang 2021-01-28  394  
163f4d22c118d4 Sean Wang 2021-01-28  395  	if (rxd1 & MT_RXD1_NORMAL_GROUP_2) {
163f4d22c118d4 Sean Wang 2021-01-28  396  		rxd += 2;
163f4d22c118d4 Sean Wang 2021-01-28  397  		if ((u8 *)rxd - skb->data >= skb->len)
163f4d22c118d4 Sean Wang 2021-01-28  398  			return -EINVAL;
163f4d22c118d4 Sean Wang 2021-01-28  399  	}
163f4d22c118d4 Sean Wang 2021-01-28  400  
163f4d22c118d4 Sean Wang 2021-01-28  401  	/* RXD Group 3 - P-RXV */
163f4d22c118d4 Sean Wang 2021-01-28  402  	if (rxd1 & MT_RXD1_NORMAL_GROUP_3) {
163f4d22c118d4 Sean Wang 2021-01-28 @403  		u32 v0, v1, v2;
716af9b953825b Sean Wang 2021-02-09  404  		u8 stbc, gi;
716af9b953825b Sean Wang 2021-02-09  405  		bool cck;
163f4d22c118d4 Sean Wang 2021-01-28  406  
163f4d22c118d4 Sean Wang 2021-01-28  407  		rxv = rxd;
163f4d22c118d4 Sean Wang 2021-01-28  408  		rxd += 2;
163f4d22c118d4 Sean Wang 2021-01-28  409  		if ((u8 *)rxd - skb->data >= skb->len)
163f4d22c118d4 Sean Wang 2021-01-28  410  			return -EINVAL;
163f4d22c118d4 Sean Wang 2021-01-28  411  
163f4d22c118d4 Sean Wang 2021-01-28  412  		v0 = le32_to_cpu(rxv[0]);
163f4d22c118d4 Sean Wang 2021-01-28  413  		v1 = le32_to_cpu(rxv[1]);
163f4d22c118d4 Sean Wang 2021-01-28  414  		v2 = le32_to_cpu(rxv[2]);
163f4d22c118d4 Sean Wang 2021-01-28  415  
163f4d22c118d4 Sean Wang 2021-01-28  416  		if (v0 & MT_PRXV_HT_AD_CODE)
163f4d22c118d4 Sean Wang 2021-01-28  417  			status->enc_flags |= RX_ENC_FLAG_LDPC;
163f4d22c118d4 Sean Wang 2021-01-28  418  
163f4d22c118d4 Sean Wang 2021-01-28  419  		status->chains = mphy->antenna_mask;
163f4d22c118d4 Sean Wang 2021-01-28  420  		status->chain_signal[0] = to_rssi(MT_PRXV_RCPI0, v1);
163f4d22c118d4 Sean Wang 2021-01-28  421  		status->chain_signal[1] = to_rssi(MT_PRXV_RCPI1, v1);
163f4d22c118d4 Sean Wang 2021-01-28  422  		status->chain_signal[2] = to_rssi(MT_PRXV_RCPI2, v1);
163f4d22c118d4 Sean Wang 2021-01-28  423  		status->chain_signal[3] = to_rssi(MT_PRXV_RCPI3, v1);
163f4d22c118d4 Sean Wang 2021-01-28  424  		status->signal = status->chain_signal[0];
163f4d22c118d4 Sean Wang 2021-01-28  425  
163f4d22c118d4 Sean Wang 2021-01-28  426  		for (i = 1; i < hweight8(mphy->antenna_mask); i++) {
163f4d22c118d4 Sean Wang 2021-01-28  427  			if (!(status->chains & BIT(i)))
163f4d22c118d4 Sean Wang 2021-01-28  428  				continue;
163f4d22c118d4 Sean Wang 2021-01-28  429  
163f4d22c118d4 Sean Wang 2021-01-28  430  			status->signal = max(status->signal,
163f4d22c118d4 Sean Wang 2021-01-28  431  					     status->chain_signal[i]);
163f4d22c118d4 Sean Wang 2021-01-28  432  		}
163f4d22c118d4 Sean Wang 2021-01-28  433  
716af9b953825b Sean Wang 2021-02-09  434  		stbc = FIELD_GET(MT_PRXV_STBC, v0);
716af9b953825b Sean Wang 2021-02-09  435  		gi = FIELD_GET(MT_PRXV_SGI, v0);
716af9b953825b Sean Wang 2021-02-09  436  		cck = false;
163f4d22c118d4 Sean Wang 2021-01-28  437  
163f4d22c118d4 Sean Wang 2021-01-28  438  		idx = i = FIELD_GET(MT_PRXV_TX_RATE, v0);
716af9b953825b Sean Wang 2021-02-09  439  		mode = FIELD_GET(MT_PRXV_TX_MODE, v0);
163f4d22c118d4 Sean Wang 2021-01-28  440  
163f4d22c118d4 Sean Wang 2021-01-28  441  		switch (mode) {
163f4d22c118d4 Sean Wang 2021-01-28  442  		case MT_PHY_TYPE_CCK:
163f4d22c118d4 Sean Wang 2021-01-28  443  			cck = true;
163f4d22c118d4 Sean Wang 2021-01-28  444  			fallthrough;
163f4d22c118d4 Sean Wang 2021-01-28  445  		case MT_PHY_TYPE_OFDM:
163f4d22c118d4 Sean Wang 2021-01-28  446  			i = mt76_get_rate(&dev->mt76, sband, i, cck);
163f4d22c118d4 Sean Wang 2021-01-28  447  			break;
163f4d22c118d4 Sean Wang 2021-01-28  448  		case MT_PHY_TYPE_HT_GF:
163f4d22c118d4 Sean Wang 2021-01-28  449  		case MT_PHY_TYPE_HT:
163f4d22c118d4 Sean Wang 2021-01-28  450  			status->encoding = RX_ENC_HT;
163f4d22c118d4 Sean Wang 2021-01-28  451  			if (i > 31)
163f4d22c118d4 Sean Wang 2021-01-28  452  				return -EINVAL;
163f4d22c118d4 Sean Wang 2021-01-28  453  			break;
163f4d22c118d4 Sean Wang 2021-01-28  454  		case MT_PHY_TYPE_VHT:
163f4d22c118d4 Sean Wang 2021-01-28  455  			status->nss =
163f4d22c118d4 Sean Wang 2021-01-28  456  				FIELD_GET(MT_PRXV_NSTS, v0) + 1;
163f4d22c118d4 Sean Wang 2021-01-28  457  			status->encoding = RX_ENC_VHT;
163f4d22c118d4 Sean Wang 2021-01-28  458  			if (i > 9)
163f4d22c118d4 Sean Wang 2021-01-28  459  				return -EINVAL;
163f4d22c118d4 Sean Wang 2021-01-28  460  			break;
163f4d22c118d4 Sean Wang 2021-01-28  461  		case MT_PHY_TYPE_HE_MU:
163f4d22c118d4 Sean Wang 2021-01-28  462  			status->flag |= RX_FLAG_RADIOTAP_HE_MU;
163f4d22c118d4 Sean Wang 2021-01-28  463  			fallthrough;
163f4d22c118d4 Sean Wang 2021-01-28  464  		case MT_PHY_TYPE_HE_SU:
163f4d22c118d4 Sean Wang 2021-01-28  465  		case MT_PHY_TYPE_HE_EXT_SU:
163f4d22c118d4 Sean Wang 2021-01-28  466  		case MT_PHY_TYPE_HE_TB:
163f4d22c118d4 Sean Wang 2021-01-28  467  			status->nss =
163f4d22c118d4 Sean Wang 2021-01-28  468  				FIELD_GET(MT_PRXV_NSTS, v0) + 1;
163f4d22c118d4 Sean Wang 2021-01-28  469  			status->encoding = RX_ENC_HE;
163f4d22c118d4 Sean Wang 2021-01-28  470  			status->flag |= RX_FLAG_RADIOTAP_HE;
163f4d22c118d4 Sean Wang 2021-01-28  471  			i &= GENMASK(3, 0);
163f4d22c118d4 Sean Wang 2021-01-28  472  
163f4d22c118d4 Sean Wang 2021-01-28  473  			if (gi <= NL80211_RATE_INFO_HE_GI_3_2)
163f4d22c118d4 Sean Wang 2021-01-28  474  				status->he_gi = gi;
163f4d22c118d4 Sean Wang 2021-01-28  475  
163f4d22c118d4 Sean Wang 2021-01-28  476  			status->he_dcm = !!(idx & MT_PRXV_TX_DCM);
163f4d22c118d4 Sean Wang 2021-01-28  477  			break;
163f4d22c118d4 Sean Wang 2021-01-28  478  		default:
163f4d22c118d4 Sean Wang 2021-01-28  479  			return -EINVAL;
163f4d22c118d4 Sean Wang 2021-01-28  480  		}
716af9b953825b Sean Wang 2021-02-09  481  
163f4d22c118d4 Sean Wang 2021-01-28  482  		status->rate_idx = i;
163f4d22c118d4 Sean Wang 2021-01-28  483  
716af9b953825b Sean Wang 2021-02-09  484  		switch (FIELD_GET(MT_PRXV_FRAME_MODE, v0)) {
163f4d22c118d4 Sean Wang 2021-01-28  485  		case IEEE80211_STA_RX_BW_20:
163f4d22c118d4 Sean Wang 2021-01-28  486  			break;
163f4d22c118d4 Sean Wang 2021-01-28  487  		case IEEE80211_STA_RX_BW_40:
163f4d22c118d4 Sean Wang 2021-01-28  488  			if (mode & MT_PHY_TYPE_HE_EXT_SU &&
163f4d22c118d4 Sean Wang 2021-01-28  489  			    (idx & MT_PRXV_TX_ER_SU_106T)) {
163f4d22c118d4 Sean Wang 2021-01-28  490  				status->bw = RATE_INFO_BW_HE_RU;
163f4d22c118d4 Sean Wang 2021-01-28  491  				status->he_ru =
163f4d22c118d4 Sean Wang 2021-01-28  492  					NL80211_RATE_INFO_HE_RU_ALLOC_106;
163f4d22c118d4 Sean Wang 2021-01-28  493  			} else {
163f4d22c118d4 Sean Wang 2021-01-28  494  				status->bw = RATE_INFO_BW_40;
163f4d22c118d4 Sean Wang 2021-01-28  495  			}
163f4d22c118d4 Sean Wang 2021-01-28  496  			break;
163f4d22c118d4 Sean Wang 2021-01-28  497  		case IEEE80211_STA_RX_BW_80:
163f4d22c118d4 Sean Wang 2021-01-28  498  			status->bw = RATE_INFO_BW_80;
163f4d22c118d4 Sean Wang 2021-01-28  499  			break;
163f4d22c118d4 Sean Wang 2021-01-28  500  		case IEEE80211_STA_RX_BW_160:
163f4d22c118d4 Sean Wang 2021-01-28  501  			status->bw = RATE_INFO_BW_160;
163f4d22c118d4 Sean Wang 2021-01-28  502  			break;
163f4d22c118d4 Sean Wang 2021-01-28  503  		default:
163f4d22c118d4 Sean Wang 2021-01-28  504  			return -EINVAL;
163f4d22c118d4 Sean Wang 2021-01-28  505  		}
163f4d22c118d4 Sean Wang 2021-01-28  506  
163f4d22c118d4 Sean Wang 2021-01-28  507  		status->enc_flags |= RX_ENC_FLAG_STBC_MASK * stbc;
163f4d22c118d4 Sean Wang 2021-01-28  508  		if (mode < MT_PHY_TYPE_HE_SU && gi)
163f4d22c118d4 Sean Wang 2021-01-28  509  			status->enc_flags |= RX_ENC_FLAG_SHORT_GI;
716af9b953825b Sean Wang 2021-02-09  510  
716af9b953825b Sean Wang 2021-02-09  511  		if (rxd1 & MT_RXD1_NORMAL_GROUP_5) {
716af9b953825b Sean Wang 2021-02-09  512  			rxd += 18;
716af9b953825b Sean Wang 2021-02-09  513  			if ((u8 *)rxd - skb->data >= skb->len)
716af9b953825b Sean Wang 2021-02-09  514  				return -EINVAL;
163f4d22c118d4 Sean Wang 2021-01-28  515  		}
163f4d22c118d4 Sean Wang 2021-01-28  516  	}
163f4d22c118d4 Sean Wang 2021-01-28  517  
163f4d22c118d4 Sean Wang 2021-01-28  518  	skb_pull(skb, (u8 *)rxd - skb->data + 2 * remove_pad);
163f4d22c118d4 Sean Wang 2021-01-28  519  
163f4d22c118d4 Sean Wang 2021-01-28  520  	if (insert_ccmp_hdr) {
163f4d22c118d4 Sean Wang 2021-01-28  521  		u8 key_id = FIELD_GET(MT_RXD1_NORMAL_KEY_ID, rxd1);
163f4d22c118d4 Sean Wang 2021-01-28  522  
163f4d22c118d4 Sean Wang 2021-01-28  523  		mt76_insert_ccmp_hdr(skb, key_id);
163f4d22c118d4 Sean Wang 2021-01-28  524  	}
163f4d22c118d4 Sean Wang 2021-01-28  525  
163f4d22c118d4 Sean Wang 2021-01-28  526  	if (rxv && status->flag & RX_FLAG_RADIOTAP_HE)
163f4d22c118d4 Sean Wang 2021-01-28  527  		mt7921_mac_decode_he_radiotap(skb, status, rxv, mode);
163f4d22c118d4 Sean Wang 2021-01-28  528  
163f4d22c118d4 Sean Wang 2021-01-28  529  	hdr = mt76_skb_get_hdr(skb);
163f4d22c118d4 Sean Wang 2021-01-28  530  	if (!status->wcid || !ieee80211_is_data_qos(hdr->frame_control))
163f4d22c118d4 Sean Wang 2021-01-28  531  		return 0;
163f4d22c118d4 Sean Wang 2021-01-28  532  
163f4d22c118d4 Sean Wang 2021-01-28  533  	status->aggr = unicast &&
163f4d22c118d4 Sean Wang 2021-01-28  534  		       !ieee80211_is_qos_nullfunc(hdr->frame_control);
163f4d22c118d4 Sean Wang 2021-01-28  535  	status->tid = *ieee80211_get_qos_ctl(hdr) & IEEE80211_QOS_CTL_TID_MASK;
163f4d22c118d4 Sean Wang 2021-01-28  536  	status->seqno = IEEE80211_SEQ_TO_SN(le16_to_cpu(hdr->seq_ctrl));
163f4d22c118d4 Sean Wang 2021-01-28  537  
163f4d22c118d4 Sean Wang 2021-01-28  538  	return 0;
163f4d22c118d4 Sean Wang 2021-01-28  539  }
163f4d22c118d4 Sean Wang 2021-01-28  540  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 67047 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2021-02-09 13:38 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-09 10:54 [PATCH 0/6] mt76: mt7921: multiple fixes Lorenzo Bianconi
2021-02-09 10:54 ` [PATCH 1/6] mt76: mt7921: switch to new api for hardware beacon filter Lorenzo Bianconi
2021-02-09 10:54 ` [PATCH 2/6] mt76: connac: fix up the setting for ht40 mode in mt76_connac_mcu_uni_add_bss Lorenzo Bianconi
2021-02-09 10:54 ` [PATCH 3/6] mt76: mt7921: fixup rx bitrate statistics Lorenzo Bianconi
2021-02-09 13:36   ` kernel test robot
2021-02-09 10:54 ` [PATCH 4/6] mt76: mt7921: add flush operation Lorenzo Bianconi
2021-02-09 10:54 ` [PATCH 5/6] mt76: mt7921: fix uninitialized pointer access in mt7921_get_wtbl_info Lorenzo Bianconi
2021-02-09 10:54 ` [PATCH 6/6] mt76: connac: update sched_scan cmd usage Lorenzo Bianconi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).