From patchwork Thu Nov 18 16:40:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Greear X-Patchwork-Id: 12627339 X-Patchwork-Delegate: nbd@nbd.name Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 39C78C433F5 for ; Thu, 18 Nov 2021 16:41:48 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 268316120E for ; Thu, 18 Nov 2021 16:41:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233633AbhKRQor (ORCPT ); Thu, 18 Nov 2021 11:44:47 -0500 Received: from dispatch1-us1.ppe-hosted.com ([67.231.154.183]:32944 "EHLO dispatch1-us1.ppe-hosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233632AbhKRQop (ORCPT ); Thu, 18 Nov 2021 11:44:45 -0500 X-Virus-Scanned: Proofpoint Essentials engine Received: from mx1-us1.ppe-hosted.com (unknown [10.110.51.18]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 925332A0076 for ; Thu, 18 Nov 2021 16:41:43 +0000 (UTC) Received: from mail3.candelatech.com (mail2.candelatech.com [208.74.158.173]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 579EB340082 for ; Thu, 18 Nov 2021 16:41:43 +0000 (UTC) Received: from ben-dt4.candelatech.com (50-251-239-81-static.hfc.comcastbusiness.net [50.251.239.81]) by mail3.candelatech.com (Postfix) with ESMTP id 9E8B413C2B0; Thu, 18 Nov 2021 08:41:05 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.11.0 mail3.candelatech.com 9E8B413C2B0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=candelatech.com; s=default; t=1637253665; bh=fsjar9sEicduR13LpEveeNrfqtMOGrZYJfWeV9hqjHQ=; h=From:To:Cc:Subject:Date:From; b=bxp/zVf06/UedTPPCYlvqzonT95c0RSrT9ttmgT0/Pb5RUti5IMp+Dda2eA75xRfE KLrtYdizrF++nSrvUE4a3r09c8RGFaNI/20F6wUbMcNwPUVVZe4hE/TE+iLh4sYcNg dUTsbVTZJ/eD9L4AHhvE4WGAEbhJwwFsaNXpg2ek= From: greearb@candelatech.com To: linux-wireless@vger.kernel.org Cc: Ben Greear Subject: [PATCH 01/11] mt76: mt7915: add comments about rx descriptor parsing Date: Thu, 18 Nov 2021 08:40:46 -0800 Message-Id: <20211118164056.2965-1-greearb@candelatech.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 X-MDID: 1637253704-z0EA3_dGQhlX Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Ben Greear This is a tricky beast to understand, so add some notes for next time someone is looking at this code and trying to compare against documents. Signed-off-by: Ben Greear --- txs and related patches rebased on top of 5.16 .../net/wireless/mediatek/mt76/mt7915/mac.c | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c index 8e5b87af2efb..6fbd58ae9c88 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c @@ -410,6 +410,7 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) __le32 *rxd = (__le32 *)skb->data; __le32 *rxv = NULL; u32 mode = 0; + /* table "PP -> HOST / X-CPU" RX Format */ u32 rxd0 = le32_to_cpu(rxd[0]); u32 rxd1 = le32_to_cpu(rxd[1]); u32 rxd2 = le32_to_cpu(rxd[2]); @@ -489,7 +490,7 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) rxd += 6; if (rxd1 & MT_RXD1_NORMAL_GROUP_4) { - u32 v0 = le32_to_cpu(rxd[0]); + u32 v0 = le32_to_cpu(rxd[0]); /* DW6 */ u32 v2 = le32_to_cpu(rxd[2]); fc = cpu_to_le16(FIELD_GET(MT_RXD6_FRAME_CONTROL, v0)); @@ -502,6 +503,7 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) } if (rxd1 & MT_RXD1_NORMAL_GROUP_1) { + /* DW10, assuming Group-4 enabled */ u8 *data = (u8 *)rxd; if (status->flag & RX_FLAG_DECRYPTED) { @@ -533,6 +535,7 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) } if (rxd1 & MT_RXD1_NORMAL_GROUP_2) { + /* DW14, assuming group-1,4 */ status->timestamp = le32_to_cpu(rxd[0]); status->flag |= RX_FLAG_MACTIME_START; @@ -558,18 +561,22 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) if (rxd1 & MT_RXD1_NORMAL_GROUP_3) { u32 v0, v1, v2; - rxv = rxd; + rxv = rxd; /* DW16 assuming group 1,2,3,4 */ rxd += 2; if ((u8 *)rxd - skb->data >= skb->len) return -EINVAL; - v0 = le32_to_cpu(rxv[0]); + v0 = le32_to_cpu(rxv[0]); /* DW16, P-VEC1 31:0 */ + /* DW17, RX_RCPI copied over P-VEC 64:32 Per RX Format doc. */ v1 = le32_to_cpu(rxv[1]); - v2 = le32_to_cpu(rxv[2]); + v2 = le32_to_cpu(rxv[2]); /* first DW of group-5, C-RXV */ if (v0 & MT_PRXV_HT_AD_CODE) status->enc_flags |= RX_ENC_FLAG_LDPC; + /* TODO: When group-5 is enabled, use nss (and stbc) to + * calculate chains properly for this particular skb. + */ status->chains = mphy->antenna_mask; status->chain_signal[0] = to_rssi(MT_PRXV_RCPI0, v1); status->chain_signal[1] = to_rssi(MT_PRXV_RCPI1, v1); @@ -581,12 +588,18 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) if (!(status->chains & BIT(i))) continue; + /* TODO: Use db sum logic instead of max. */ status->signal = max(status->signal, status->chain_signal[i]); } - /* RXD Group 5 - C-RXV */ + /* RXD Group 5 - C-RXV. + * Group 5 Not currently enabled for 7915 except in + * monitor mode. + * See MT_DMA_DCR0_RXD_G5_EN + */ if (rxd1 & MT_RXD1_NORMAL_GROUP_5) { + /* See RXV document ... */ u8 stbc = FIELD_GET(MT_CRXV_HT_STBC, v2); u8 gi = FIELD_GET(MT_CRXV_HT_SHORT_GI, v2); bool cck = false; From patchwork Thu Nov 18 16:40:47 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Greear X-Patchwork-Id: 12627325 X-Patchwork-Delegate: nbd@nbd.name Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 92357C433FE for ; Thu, 18 Nov 2021 16:41:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 78B1D610A5 for ; Thu, 18 Nov 2021 16:41:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233609AbhKRQoa (ORCPT ); Thu, 18 Nov 2021 11:44:30 -0500 Received: from dispatch1-us1.ppe-hosted.com ([148.163.129.48]:34432 "EHLO dispatch1-us1.ppe-hosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233589AbhKRQo2 (ORCPT ); Thu, 18 Nov 2021 11:44:28 -0500 X-Virus-Scanned: Proofpoint Essentials engine Received: from mx1-us1.ppe-hosted.com (unknown [10.7.66.137]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 65D101C0086 for ; Thu, 18 Nov 2021 16:41:27 +0000 (UTC) Received: from mail3.candelatech.com (mail2.candelatech.com [208.74.158.173]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 3F2F614007C for ; Thu, 18 Nov 2021 16:41:27 +0000 (UTC) Received: from ben-dt4.candelatech.com (50-251-239-81-static.hfc.comcastbusiness.net [50.251.239.81]) by mail3.candelatech.com (Postfix) with ESMTP id D021413C2B1; Thu, 18 Nov 2021 08:41:05 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.11.0 mail3.candelatech.com D021413C2B1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=candelatech.com; s=default; t=1637253665; bh=Efl75g3uCByOjMGB0d1n50V01YDyMJ9Ny3kUpf5/rtg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=O/ptAnpWZMQKQ5CbLNyocCTMAU39QND0L/y//M9W/b21ksiKAR36IBhFcb8asMyPT +r6ym7KvjDioUP5W9BzMqBJbe1HL7MeNKtbU+gEuhBNren6SDtQDMaj6LzdS4Y5kSA iRAQpAVlhBvYG0yOeKQ6e2mH4K/7TdT1VQ7VM9rs= From: greearb@candelatech.com To: linux-wireless@vger.kernel.org Cc: Ben Greear Subject: [PATCH 02/11] mt76: mt7915: print out hw revision Date: Thu, 18 Nov 2021 08:40:47 -0800 Message-Id: <20211118164056.2965-2-greearb@candelatech.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20211118164056.2965-1-greearb@candelatech.com> References: <20211118164056.2965-1-greearb@candelatech.com> MIME-Version: 1.0 X-MDID: 1637253687-Ijmf-qjyRH1H Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Ben Greear Help determine what version of silicon is in use. Signed-off-by: Ben Greear --- drivers/net/wireless/mediatek/mt76/mt7915/mmio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c b/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c index 1f6ba306c850..fcc4312555f7 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c @@ -146,7 +146,7 @@ int mt7915_mmio_init(struct mt76_dev *mdev, void __iomem *mem_base, int irq) mdev->rev = (mt76_rr(dev, MT_HW_CHIPID) << 16) | (mt76_rr(dev, MT_HW_REV) & 0xff); - dev_dbg(mdev->dev, "ASIC revision: %04x\n", mdev->rev); + dev_info(mdev->dev, "ASIC revision: %04x\n", mdev->rev); mt76_wr(dev, MT_INT_MASK_CSR, 0); From patchwork Thu Nov 18 16:40:48 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Greear X-Patchwork-Id: 12627323 X-Patchwork-Delegate: nbd@nbd.name Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D5325C433EF for ; Thu, 18 Nov 2021 16:41:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B194D6120E for ; Thu, 18 Nov 2021 16:41:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233605AbhKRQo3 (ORCPT ); Thu, 18 Nov 2021 11:44:29 -0500 Received: from dispatch1-us1.ppe-hosted.com ([67.231.154.183]:39626 "EHLO dispatch1-us1.ppe-hosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233592AbhKRQo2 (ORCPT ); Thu, 18 Nov 2021 11:44:28 -0500 X-Virus-Scanned: Proofpoint Essentials engine Received: from mx1-us1.ppe-hosted.com (unknown [10.110.51.28]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 94BAB20061 for ; Thu, 18 Nov 2021 16:41:26 +0000 (UTC) Received: from mail3.candelatech.com (mail2.candelatech.com [208.74.158.173]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 5B09638008A for ; Thu, 18 Nov 2021 16:41:26 +0000 (UTC) Received: from ben-dt4.candelatech.com (50-251-239-81-static.hfc.comcastbusiness.net [50.251.239.81]) by mail3.candelatech.com (Postfix) with ESMTP id 0C3AB13C2B3; Thu, 18 Nov 2021 08:41:06 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.11.0 mail3.candelatech.com 0C3AB13C2B3 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=candelatech.com; s=default; t=1637253666; bh=Bk85ZRwhN1Wk7WZRZhaTAmqpkI7QYxhQXJfm7P3py1c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=gVx5rMPneiSJbwyvW6cMjrMDhkDv81/GCSvmPzSvh0yrnjw7SVQyjrDEaI6V0qZUt 58WPDO4mJkKlt89WlYQVvNaWdBMJUX0XuZumdlq5KekFk74eGkXKV1kgMbg8shm1ot dSzwPvkEZO299WKeIuRZE/6icqs/kirriwo/wtxs= From: greearb@candelatech.com To: linux-wireless@vger.kernel.org Cc: Ben Greear Subject: [PATCH 03/11] mt76: mt7915: support enabling rx group-5 status Date: Thu, 18 Nov 2021 08:40:48 -0800 Message-Id: <20211118164056.2965-3-greearb@candelatech.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20211118164056.2965-1-greearb@candelatech.com> References: <20211118164056.2965-1-greearb@candelatech.com> MIME-Version: 1.0 X-MDID: 1637253687-ka1US6O_1Wt2 Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Ben Greear When enabled, this allows per-skb rx rate reporting. Enabling this may degrade RX performance, so it remains disabled by default. Signed-off-by: Ben Greear --- .../wireless/mediatek/mt76/mt7915/debugfs.c | 33 +++++++++++++++++++ .../net/wireless/mediatek/mt76/mt7915/init.c | 3 +- .../net/wireless/mediatek/mt76/mt7915/mac.c | 3 +- .../net/wireless/mediatek/mt76/mt7915/main.c | 3 +- .../wireless/mediatek/mt76/mt7915/mt7915.h | 5 +++ 5 files changed, 44 insertions(+), 3 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c b/drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c index e3f6cd18e30a..32e219a20721 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c @@ -435,6 +435,38 @@ mt7915_txs_for_no_skb_get(void *data, u64 *val) DEFINE_DEBUGFS_ATTRIBUTE(fops_txs_for_no_skb, mt7915_txs_for_no_skb_get, mt7915_txs_for_no_skb_set, "%lld\n"); +static int +mt7915_rx_group_5_enable_set(void *data, u64 val) +{ + struct mt7915_dev *dev = data; + + mutex_lock(&dev->mt76.mutex); + + dev->rx_group_5_enable = !!val; + + /* Enabled if we requested enabled OR if monitor mode is enabled. */ + mt76_rmw_field(dev, MT_DMA_DCR0(0), MT_DMA_DCR0_RXD_G5_EN, + dev->phy.is_monitor_mode || dev->rx_group_5_enable); + mt76_testmode_reset(dev->phy.mt76, true); + + mutex_unlock(&dev->mt76.mutex); + + return 0; +} + +static int +mt7915_rx_group_5_enable_get(void *data, u64 *val) +{ + struct mt7915_dev *dev = data; + + *val = dev->rx_group_5_enable; + + return 0; +} + +DEFINE_DEBUGFS_ATTRIBUTE(fops_rx_group_5_enable, mt7915_rx_group_5_enable_get, + mt7915_rx_group_5_enable_set, "%lld\n"); + static void mt7915_ampdu_stat_read_phy(struct mt7915_phy *phy, struct seq_file *file) @@ -786,6 +818,7 @@ int mt7915_init_debugfs(struct mt7915_phy *phy) debugfs_create_file("fw_util_wa", 0400, dir, dev, &mt7915_fw_util_wa_fops); debugfs_create_file("force_txs", 0600, dir, dev, &fops_txs_for_no_skb); + debugfs_create_file("rx_group_5_enable", 0600, dir, dev, &fops_rx_group_5_enable); debugfs_create_file("implicit_txbf", 0600, dir, dev, &fops_implicit_txbf); debugfs_create_file("txpower_sku", 0400, dir, phy, diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/init.c b/drivers/net/wireless/mediatek/mt76/mt7915/init.c index 90aa62c64f3e..58a0ce72b714 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/init.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/init.c @@ -391,7 +391,8 @@ mt7915_mac_init_band(struct mt7915_dev *dev, u8 band) mt76_rmw_field(dev, MT_DMA_DCR0(band), MT_DMA_DCR0_MAX_RX_LEN, 0x680); /* disable rx rate report by default due to hw issues */ - mt76_clear(dev, MT_DMA_DCR0(band), MT_DMA_DCR0_RXD_G5_EN); + mt76_rmw_field(dev, MT_DMA_DCR0(band), MT_DMA_DCR0_RXD_G5_EN, + dev->phy.is_monitor_mode || dev->rx_group_5_enable); } static void mt7915_mac_init(struct mt7915_dev *dev) diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c index 6fbd58ae9c88..a6bcc76dcb03 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c @@ -715,7 +715,8 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) status->flag |= RX_FLAG_8023; } - if (rxv && status->flag & RX_FLAG_RADIOTAP_HE) { + if (phy->is_monitor_mode && + rxv && status->flag & RX_FLAG_RADIOTAP_HE) { mt7915_mac_decode_he_radiotap(skb, status, rxv, mode); if (status->flag & RX_FLAG_RADIOTAP_HE_MU) mt7915_mac_decode_he_mu_radiotap(skb, status, rxv); diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/main.c b/drivers/net/wireless/mediatek/mt76/mt7915/main.c index 3d702dc899ba..e973b2527b34 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/main.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/main.c @@ -458,13 +458,14 @@ static int mt7915_config(struct ieee80211_hw *hw, u32 changed) if (changed & IEEE80211_CONF_CHANGE_MONITOR) { bool enabled = !!(hw->conf.flags & IEEE80211_CONF_MONITOR); + phy->is_monitor_mode = enabled; if (!enabled) phy->rxfilter |= MT_WF_RFCR_DROP_OTHER_UC; else phy->rxfilter &= ~MT_WF_RFCR_DROP_OTHER_UC; mt76_rmw_field(dev, MT_DMA_DCR0(band), MT_DMA_DCR0_RXD_G5_EN, - enabled); + phy->is_monitor_mode || dev->rx_group_5_enable); mt76_testmode_reset(phy->mt76, true); mt76_wr(dev, MT_WF_RFCR(band), phy->rxfilter); } diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h index 86cd0fc8e9de..84fff60ada92 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h @@ -209,6 +209,7 @@ struct mt7915_phy { struct thermal_cooling_device *cdev; u8 throttle_state; u32 throttle_temp[2]; /* 0: critical high, 1: maximum */ + u8 is_monitor_mode; /* are we in monitor mode or not ? */ u32 rxfilter; u64 omac_mask; @@ -261,6 +262,10 @@ struct mt7915_dev { * creation by firmware, so may be a performance drag. */ bool txs_for_no_skb_enabled; + /* Should we enable group-5 rx descriptor logic? This may decrease RX + * throughput, but will give per skb rx rate information.. + */ + bool rx_group_5_enable; struct work_struct init_work; struct work_struct rc_work; From patchwork Thu Nov 18 16:40:49 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Greear X-Patchwork-Id: 12627327 X-Patchwork-Delegate: nbd@nbd.name Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 38AA3C433EF for ; Thu, 18 Nov 2021 16:41:36 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 18E4F6120E for ; Thu, 18 Nov 2021 16:41:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233589AbhKRQof (ORCPT ); Thu, 18 Nov 2021 11:44:35 -0500 Received: from dispatch1-us1.ppe-hosted.com ([67.231.154.184]:59656 "EHLO dispatch1-us1.ppe-hosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233601AbhKRQod (ORCPT ); Thu, 18 Nov 2021 11:44:33 -0500 X-Virus-Scanned: Proofpoint Essentials engine Received: from mx1-us1.ppe-hosted.com (unknown [10.110.51.179]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 3620F20068 for ; Thu, 18 Nov 2021 16:41:32 +0000 (UTC) Received: from mail3.candelatech.com (mail2.candelatech.com [208.74.158.173]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id E6235AC0082 for ; Thu, 18 Nov 2021 16:41:31 +0000 (UTC) Received: from ben-dt4.candelatech.com (50-251-239-81-static.hfc.comcastbusiness.net [50.251.239.81]) by mail3.candelatech.com (Postfix) with ESMTP id 305BC13C2B4; Thu, 18 Nov 2021 08:41:06 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.11.0 mail3.candelatech.com 305BC13C2B4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=candelatech.com; s=default; t=1637253666; bh=+06s/t0sHQI50/CJM5/vV5stq+Ii5A0SmBX3H/XpiQg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=awh4caxoP4YnYJb9RbV+pV781+R3vREIRnbq4EjBbBpQEAozExgjTFzBcm1hgJmRs /RsJ7ENOuK76HA1O1pT3DmWJ3WrIfGp8Qyl6edKTuZCakRPKYjy63TK7BF2pRMlwwm NycFP8FAE7WUMVCqxW/4S0l+eDgnbzGhdoO1tELw= From: greearb@candelatech.com To: linux-wireless@vger.kernel.org Cc: Ben Greear Subject: [PATCH 04/11] mt76: mt7915: use nss for calculating rx-chains Date: Thu, 18 Nov 2021 08:40:49 -0800 Message-Id: <20211118164056.2965-4-greearb@candelatech.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20211118164056.2965-1-greearb@candelatech.com> References: <20211118164056.2965-1-greearb@candelatech.com> MIME-Version: 1.0 X-MDID: 1637253692-UulG_F2mGQQe Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Ben Greear When group-5 is enabled, we can find the actuall NSS used. In that case, update the rx chains info so that the upper stack can give better idea of actual antenna usage. Signed-off-by: Ben Greear --- .../net/wireless/mediatek/mt76/mt7915/mac.c | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c index a6bcc76dcb03..ddc85464b1e9 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c @@ -560,6 +560,7 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) /* RXD Group 3 - P-RXV */ if (rxd1 & MT_RXD1_NORMAL_GROUP_3) { u32 v0, v1, v2; + u8 nss; rxv = rxd; /* DW16 assuming group 1,2,3,4 */ rxd += 2; @@ -577,21 +578,12 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) /* TODO: When group-5 is enabled, use nss (and stbc) to * calculate chains properly for this particular skb. */ - status->chains = mphy->antenna_mask; status->chain_signal[0] = to_rssi(MT_PRXV_RCPI0, v1); status->chain_signal[1] = to_rssi(MT_PRXV_RCPI1, v1); status->chain_signal[2] = to_rssi(MT_PRXV_RCPI2, v1); status->chain_signal[3] = to_rssi(MT_PRXV_RCPI3, v1); - status->signal = status->chain_signal[0]; - for (i = 1; i < hweight8(mphy->antenna_mask); i++) { - if (!(status->chains & BIT(i))) - continue; - - /* TODO: Use db sum logic instead of max. */ - status->signal = max(status->signal, - status->chain_signal[i]); - } + nss = hweight8(mphy->antenna_mask); /* RXD Group 5 - C-RXV. * Group 5 Not currently enabled for 7915 except in @@ -604,6 +596,7 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) u8 gi = FIELD_GET(MT_CRXV_HT_SHORT_GI, v2); bool cck = false; + nss = 1; rxd += 18; if ((u8 *)rxd - skb->data >= skb->len) return -EINVAL; @@ -623,6 +616,7 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) status->encoding = RX_ENC_HT; if (i > 31) return -EINVAL; + nss = i / 8 + 1; break; case MT_PHY_TYPE_VHT: status->nss = @@ -630,6 +624,7 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) status->encoding = RX_ENC_VHT; if (i > 9) return -EINVAL; + nss = status->nss; break; case MT_PHY_TYPE_HE_MU: status->flag |= RX_FLAG_RADIOTAP_HE_MU; @@ -639,6 +634,7 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) case MT_PHY_TYPE_HE_TB: status->nss = FIELD_GET(MT_PRXV_NSTS, v0) + 1; + nss = status->nss; status->encoding = RX_ENC_HE; status->flag |= RX_FLAG_RADIOTAP_HE; i &= GENMASK(3, 0); @@ -653,6 +649,11 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) } status->rate_idx = i; + if (stbc) { + nss *= 2; + WARN_ON_ONCE(nss > 4); + } + switch (FIELD_GET(MT_CRXV_FRAME_MODE, v2)) { case IEEE80211_STA_RX_BW_20: break; @@ -680,6 +681,17 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) if (mode < MT_PHY_TYPE_HE_SU && gi) status->enc_flags |= RX_ENC_FLAG_SHORT_GI; } + + status->chains = 1; + status->signal = status->chain_signal[0]; + + for (i = 1; i < nss; i++) { + status->chains |= BIT(i); + + /* TODO: Use db sum logic instead of max. */ + status->signal = max(status->signal, + status->chain_signal[i]); + } } skb_pull(skb, (u8 *)rxd - skb->data + 2 * remove_pad); From patchwork Thu Nov 18 16:40:50 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Greear X-Patchwork-Id: 12627321 X-Patchwork-Delegate: nbd@nbd.name Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C44C8C433FE for ; Thu, 18 Nov 2021 16:41:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A7C49610A5 for ; Thu, 18 Nov 2021 16:41:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233578AbhKRQo0 (ORCPT ); Thu, 18 Nov 2021 11:44:26 -0500 Received: from dispatch1-us1.ppe-hosted.com ([67.231.154.184]:39510 "EHLO dispatch1-us1.ppe-hosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233589AbhKRQoZ (ORCPT ); Thu, 18 Nov 2021 11:44:25 -0500 X-Virus-Scanned: Proofpoint Essentials engine Received: from mx1-us1.ppe-hosted.com (unknown [10.110.51.171]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id AF2141A0073 for ; Thu, 18 Nov 2021 16:41:23 +0000 (UTC) Received: from mail3.candelatech.com (mail2.candelatech.com [208.74.158.173]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 74AB29C0072 for ; Thu, 18 Nov 2021 16:41:23 +0000 (UTC) Received: from ben-dt4.candelatech.com (50-251-239-81-static.hfc.comcastbusiness.net [50.251.239.81]) by mail3.candelatech.com (Postfix) with ESMTP id 5307D13C2B5; Thu, 18 Nov 2021 08:41:06 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.11.0 mail3.candelatech.com 5307D13C2B5 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=candelatech.com; s=default; t=1637253666; bh=IVf/p4/gvplod5Xz+t/ICmrpWd9Gyz98p+yRQe4Ym/Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=XXmqpvSv81puv3a64HGAAMMchNXVRrmePxn7rkaGxeXrFGQJl8rQyzG9xBZ8K1txl mZUCoal+TiohYZdCi1kZrdsK/ccS3X2ToKbf/Qs/bQHL/frqf9jdqQ9feXPjZVaEWb /zoWMccY0aX7Pu7R47ccud5wYxdq7pzKH4F3RLUw= From: greearb@candelatech.com To: linux-wireless@vger.kernel.org Cc: Ben Greear Subject: [PATCH 05/11] mt76: mt7915: ethtool group-5 rx stats information Date: Thu, 18 Nov 2021 08:40:50 -0800 Message-Id: <20211118164056.2965-5-greearb@candelatech.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20211118164056.2965-1-greearb@candelatech.com> References: <20211118164056.2965-1-greearb@candelatech.com> MIME-Version: 1.0 X-MDID: 1637253684-ixvPu790-xHC Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Ben Greear Add ethtool support for rx-nss, rx-bw, rx-mode stats. These are only valid when the group-5 rx stats are enabled. Signed-off-by: Ben Greear --- drivers/net/wireless/mediatek/mt76/mac80211.c | 23 ++++++++++++++++++- drivers/net/wireless/mediatek/mt76/mt76.h | 10 ++++++++ .../net/wireless/mediatek/mt76/mt7915/mac.c | 23 +++++++++++++++++++ .../net/wireless/mediatek/mt76/mt7915/main.c | 21 +++++++++++++++++ 4 files changed, 76 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/mediatek/mt76/mac80211.c b/drivers/net/wireless/mediatek/mt76/mac80211.c index a385c1850c61..577d83f8ae71 100644 --- a/drivers/net/wireless/mediatek/mt76/mac80211.c +++ b/drivers/net/wireless/mediatek/mt76/mac80211.c @@ -1512,7 +1512,7 @@ EXPORT_SYMBOL_GPL(mt76_calculate_default_rate); void mt76_ethtool_worker(struct mt76_ethtool_worker_info *wi, struct mt76_sta_stats *stats) { - int i, ei = wi->initial_stat_idx; + int i, q, ei = wi->initial_stat_idx; u64 *data = wi->data; wi->sta_count++; @@ -1537,6 +1537,27 @@ void mt76_ethtool_worker(struct mt76_ethtool_worker_info *wi, for (i = 0; i < 12; i++) data[ei++] += stats->tx_mcs[i]; + /* rx stats */ + for (q = 0; q < ARRAY_SIZE(stats->rx_nss); q++) + data[ei++] += stats->rx_nss[q]; + + data[ei++] += stats->rx_mode[MT_PHY_TYPE_CCK]; + data[ei++] += stats->rx_mode[MT_PHY_TYPE_OFDM]; + data[ei++] += stats->rx_mode[MT_PHY_TYPE_HT]; + data[ei++] += stats->rx_mode[MT_PHY_TYPE_HT_GF]; + data[ei++] += stats->rx_mode[MT_PHY_TYPE_VHT]; + data[ei++] += stats->rx_mode[MT_PHY_TYPE_HE_SU]; + data[ei++] += stats->rx_mode[MT_PHY_TYPE_HE_EXT_SU]; + data[ei++] += stats->rx_mode[MT_PHY_TYPE_HE_TB]; + data[ei++] += stats->rx_mode[MT_PHY_TYPE_HE_MU]; + + data[ei++] += stats->rx_bw_20; + data[ei++] += stats->rx_bw_40; + data[ei++] += stats->rx_bw_80; + data[ei++] += stats->rx_bw_160; + data[ei++] += stats->rx_bw_he_ru; + data[ei++] += stats->rx_ru_106; + wi->worker_stat_count = ei - wi->initial_stat_idx; } EXPORT_SYMBOL_GPL(mt76_ethtool_worker); diff --git a/drivers/net/wireless/mediatek/mt76/mt76.h b/drivers/net/wireless/mediatek/mt76/mt76.h index 7bcdfef3c983..9e43ea0077d3 100644 --- a/drivers/net/wireless/mediatek/mt76/mt76.h +++ b/drivers/net/wireless/mediatek/mt76/mt76.h @@ -798,6 +798,16 @@ struct mt76_sta_stats { u64 tx_bw[4]; /* 20, 40, 80, 160 */ u64 tx_nss[4]; /* 1, 2, 3, 4 */ u64 tx_mcs[16]; /* mcs idx */ + + /* This section requires group-5 in rxd to be enabled for 7915. */ + u32 rx_nss[4]; /* rx-nss histogram */ + u32 rx_mode[__MT_PHY_TYPE_HE_MAX]; /* rx mode histogram */ + u32 rx_bw_20; + u32 rx_bw_40; + u32 rx_bw_80; + u32 rx_bw_160; + u32 rx_bw_he_ru; + u32 rx_ru_106; }; struct mt76_ethtool_worker_info { diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c index ddc85464b1e9..2915e7237d96 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c @@ -424,6 +424,7 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) u8 qos_ctl = 0; __le16 fc = 0; int i, idx; + struct mt76_sta_stats *stats = NULL; memset(status, 0, sizeof(*status)); @@ -451,6 +452,7 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) struct mt7915_sta *msta; msta = container_of(status->wcid, struct mt7915_sta, wcid); + stats = &msta->stats; spin_lock_bh(&dev->sta_poll_lock); if (list_empty(&msta->poll_list)) list_add_tail(&msta->poll_list, &dev->sta_poll_list); @@ -654,8 +656,19 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) WARN_ON_ONCE(nss > 4); } + if (stats) { + if (nss > 3) + stats->rx_nss[3]++; + else + stats->rx_nss[nss - 1]++; + + stats->rx_mode[mode]++; + } + switch (FIELD_GET(MT_CRXV_FRAME_MODE, v2)) { case IEEE80211_STA_RX_BW_20: + if (stats) + stats->rx_bw_20++; break; case IEEE80211_STA_RX_BW_40: if (mode & MT_PHY_TYPE_HE_EXT_SU && @@ -663,14 +676,24 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) status->bw = RATE_INFO_BW_HE_RU; status->he_ru = NL80211_RATE_INFO_HE_RU_ALLOC_106; + if (stats) { + stats->rx_bw_he_ru++; + stats->rx_ru_106++; + } } else { status->bw = RATE_INFO_BW_40; + if (stats) + stats->rx_bw_40++; } break; case IEEE80211_STA_RX_BW_80: status->bw = RATE_INFO_BW_80; + if (stats) + stats->rx_bw_80++; break; case IEEE80211_STA_RX_BW_160: + if (stats) + stats->rx_bw_160++; status->bw = RATE_INFO_BW_160; break; default: diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/main.c b/drivers/net/wireless/mediatek/mt76/mt7915/main.c index e973b2527b34..bfc81e008f86 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/main.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/main.c @@ -1170,6 +1170,27 @@ static const char mt7915_gstrings_stats[][ETH_GSTRING_LEN] = { "v_tx_mcs_9", "v_tx_mcs_10", "v_tx_mcs_11", + + /* per-vif rx counters */ + "v_rx_nss1", + "v_rx_nss2", + "v_rx_nss3", + "v_rx_nss4", + "v_rx_mode_cck", + "v_rx_mode_ofdm", + "v_rx_mode_ht", + "v_rx_mode_ht_gf", + "v_rx_mode_vht", + "v_rx_mode_he_su", + "v_rx_mode_he_ext_su", + "v_rx_mode_he_tb", + "v_rx_mode_he_mu", + "v_rx_bw_20", + "v_rx_bw_40", + "v_rx_bw_80", + "v_rx_bw_160", + "v_rx_bw_he_ru", + "v_rx_ru_106", }; #define MT7915_SSTATS_LEN ARRAY_SIZE(mt7915_gstrings_stats) From patchwork Thu Nov 18 16:40:51 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Greear X-Patchwork-Id: 12627367 X-Patchwork-Delegate: nbd@nbd.name Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3F54EC433EF for ; Thu, 18 Nov 2021 16:46:45 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 20FC461261 for ; Thu, 18 Nov 2021 16:46:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233707AbhKRQto (ORCPT ); Thu, 18 Nov 2021 11:49:44 -0500 Received: from dispatch1-us1.ppe-hosted.com ([148.163.129.48]:57166 "EHLO dispatch1-us1.ppe-hosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233699AbhKRQtn (ORCPT ); Thu, 18 Nov 2021 11:49:43 -0500 X-Virus-Scanned: Proofpoint Essentials engine Received: from mx1-us1.ppe-hosted.com (unknown [10.7.67.134]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 8EB632006C for ; Thu, 18 Nov 2021 16:46:24 +0000 (UTC) Received: from mail3.candelatech.com (mail2.candelatech.com [208.74.158.173]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 63263BC0075 for ; Thu, 18 Nov 2021 16:46:24 +0000 (UTC) Received: from ben-dt4.candelatech.com (50-251-239-81-static.hfc.comcastbusiness.net [50.251.239.81]) by mail3.candelatech.com (Postfix) with ESMTP id 76D8D13C2B6; Thu, 18 Nov 2021 08:41:06 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.11.0 mail3.candelatech.com 76D8D13C2B6 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=candelatech.com; s=default; t=1637253666; bh=TKNN/0eKu6CkPRZYyQwgv0K/0QgcD4/MnIJ4l2jvey4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=O1BmPmCAODwd2Y6izuYQ8uuUwrOYHx0yvFaNwhqUKInKS65zlooKsyjkMysP6a9Ll 9P1zKmN+HbH56rn2LV02FI6X5Jq1VFNXCrh8wUfRiqGyP1h1aLK63vDv0NrAjxO2ID v/SQQExXVeuJKgRhpfyOUmGxnBcgo+3cIaBElQmk= From: greearb@candelatech.com To: linux-wireless@vger.kernel.org Cc: Ben Greear Subject: [PATCH 06/11] mt76: mt7915: ethtool counters for driver rx path Date: Thu, 18 Nov 2021 08:40:51 -0800 Message-Id: <20211118164056.2965-6-greearb@candelatech.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20211118164056.2965-1-greearb@candelatech.com> References: <20211118164056.2965-1-greearb@candelatech.com> MIME-Version: 1.0 X-MDID: 1637253985-dEVepUgf97oM Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Ben Greear Add some per-phy counters for rx errors in the driver. Signed-off-by: Ben Greear --- .../net/wireless/mediatek/mt76/mt7915/mac.c | 45 ++++++++++++++----- .../net/wireless/mediatek/mt76/mt7915/main.c | 22 +++++++++ .../wireless/mediatek/mt76/mt7915/mt7915.h | 11 +++++ 3 files changed, 68 insertions(+), 10 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c index 2915e7237d96..edf33540658e 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c @@ -425,9 +425,12 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) __le16 fc = 0; int i, idx; struct mt76_sta_stats *stats = NULL; + struct mib_stats *mib = &phy->mib; memset(status, 0, sizeof(*status)); + mib->rx_d_skb++; + if (rxd1 & MT_RXD1_NORMAL_BAND_IDX) { mphy = dev->mt76.phy2; if (!mphy) @@ -440,8 +443,10 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) if (!test_bit(MT76_STATE_RUNNING, &mphy->state)) return -EINVAL; - if (rxd2 & MT_RXD2_NORMAL_AMSDU_ERR) + if (rxd2 & MT_RXD2_NORMAL_AMSDU_ERR) { + mib->rx_d_rxd2_amsdu_err++; return -EINVAL; + } unicast = FIELD_GET(MT_RXD3_NORMAL_ADDR_TYPE, rxd3) == MT_RXD3_NORMAL_U2M; idx = FIELD_GET(MT_RXD1_NORMAL_WLAN_IDX, rxd1); @@ -466,8 +471,10 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) else sband = &mphy->sband_2g.sband; - if (!sband->channels) + if (!sband->channels) { + mib->rx_d_null_channels++; return -EINVAL; + } if ((rxd0 & csum_mask) == csum_mask) skb->ip_summed = CHECKSUM_UNNECESSARY; @@ -487,8 +494,10 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) remove_pad = FIELD_GET(MT_RXD2_NORMAL_HDR_OFFSET, rxd2); - if (rxd2 & MT_RXD2_NORMAL_MAX_LEN_ERROR) + if (rxd2 & MT_RXD2_NORMAL_MAX_LEN_ERROR) { + mib->rx_d_max_len_err++; return -EINVAL; + } rxd += 6; if (rxd1 & MT_RXD1_NORMAL_GROUP_4) { @@ -500,8 +509,10 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) seq_ctrl = FIELD_GET(MT_RXD8_SEQ_CTRL, v2); rxd += 4; - if ((u8 *)rxd - skb->data >= skb->len) + if ((u8 *)rxd - skb->data >= skb->len) { + mib->rx_d_too_short++; return -EINVAL; + } } if (rxd1 & MT_RXD1_NORMAL_GROUP_1) { @@ -532,8 +543,10 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) } } rxd += 4; - if ((u8 *)rxd - skb->data >= skb->len) + if ((u8 *)rxd - skb->data >= skb->len) { + mib->rx_d_too_short++; return -EINVAL; + } } if (rxd1 & MT_RXD1_NORMAL_GROUP_2) { @@ -555,8 +568,10 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) } rxd += 2; - if ((u8 *)rxd - skb->data >= skb->len) + if ((u8 *)rxd - skb->data >= skb->len) { + mib->rx_d_too_short++; return -EINVAL; + } } /* RXD Group 3 - P-RXV */ @@ -566,8 +581,10 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) rxv = rxd; /* DW16 assuming group 1,2,3,4 */ rxd += 2; - if ((u8 *)rxd - skb->data >= skb->len) + if ((u8 *)rxd - skb->data >= skb->len) { + mib->rx_d_too_short++; return -EINVAL; + } v0 = le32_to_cpu(rxv[0]); /* DW16, P-VEC1 31:0 */ /* DW17, RX_RCPI copied over P-VEC 64:32 Per RX Format doc. */ @@ -600,8 +617,10 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) nss = 1; rxd += 18; - if ((u8 *)rxd - skb->data >= skb->len) + if ((u8 *)rxd - skb->data >= skb->len) { + mib->rx_d_too_short++; return -EINVAL; + } idx = i = FIELD_GET(MT_PRXV_TX_RATE, v0); mode = FIELD_GET(MT_CRXV_TX_MODE, v2); @@ -616,16 +635,20 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) case MT_PHY_TYPE_HT_GF: case MT_PHY_TYPE_HT: status->encoding = RX_ENC_HT; - if (i > 31) + if (i > 31) { + mib->rx_d_bad_ht_rix++; return -EINVAL; + } nss = i / 8 + 1; break; case MT_PHY_TYPE_VHT: status->nss = FIELD_GET(MT_PRXV_NSTS, v0) + 1; status->encoding = RX_ENC_VHT; - if (i > 9) + if (i > 9) { + mib->rx_d_bad_vht_rix++; return -EINVAL; + } nss = status->nss; break; case MT_PHY_TYPE_HE_MU: @@ -647,6 +670,7 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) status->he_dcm = !!(idx & MT_PRXV_TX_DCM); break; default: + mib->rx_d_bad_mode++; return -EINVAL; } status->rate_idx = i; @@ -697,6 +721,7 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) status->bw = RATE_INFO_BW_160; break; default: + mib->rx_d_bad_bw++; return -EINVAL; } diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/main.c b/drivers/net/wireless/mediatek/mt76/mt7915/main.c index bfc81e008f86..f6c334721bca 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/main.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/main.c @@ -1140,6 +1140,17 @@ static const char mt7915_gstrings_stats[][ETH_GSTRING_LEN] = { "rx_vec_queue_overflow_drop_cnt", "rx_ba_cnt", + /* driver rx counters */ + "d_rx_skb", + "d_rx_rxd2_amsdu_err", + "d_rx_null_channels", + "d_rx_max_len_err", + "d_rx_too_short", + "d_rx_bad_ht_rix", + "d_rx_bad_vht_rix", + "d_rx_bad_mode", + "d_rx_bad_bw", + /* per vif counters */ "v_tx_mpdu_attempts", /* counting any retries */ "v_tx_mpdu_fail", /* frames that failed even after retry */ @@ -1307,6 +1318,17 @@ void mt7915_get_et_stats(struct ieee80211_hw *hw, data[ei++] = mib->rx_vec_queue_overflow_drop_cnt; data[ei++] = mib->rx_ba_cnt; + /* rx stats from driver */ + data[ei++] = mib->rx_d_skb; + data[ei++] = mib->rx_d_rxd2_amsdu_err; + data[ei++] = mib->rx_d_null_channels; + data[ei++] = mib->rx_d_max_len_err; + data[ei++] = mib->rx_d_too_short; + data[ei++] = mib->rx_d_bad_ht_rix; + data[ei++] = mib->rx_d_bad_vht_rix; + data[ei++] = mib->rx_d_bad_mode; + data[ei++] = mib->rx_d_bad_bw; + /* Add values for all stations owned by this vif */ wi.initial_stat_idx = ei; ieee80211_iterate_stations_atomic(hw, mt7915_ethtool_worker, &wi); diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h index 84fff60ada92..bcbc8496516e 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h @@ -188,6 +188,17 @@ struct mib_stats { u32 tx_amsdu[8]; u32 tx_amsdu_cnt; + + /* rx stats from the driver */ + u32 rx_d_skb; /* total skb received in rx path */ + u32 rx_d_rxd2_amsdu_err; + u32 rx_d_null_channels; + u32 rx_d_max_len_err; + u32 rx_d_too_short; + u32 rx_d_bad_ht_rix; + u32 rx_d_bad_vht_rix; + u32 rx_d_bad_mode; + u32 rx_d_bad_bw; }; struct mt7915_hif { From patchwork Thu Nov 18 16:40:52 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Greear X-Patchwork-Id: 12627329 X-Patchwork-Delegate: nbd@nbd.name Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id DF1EEC433FE for ; Thu, 18 Nov 2021 16:41:36 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C9485610A5 for ; Thu, 18 Nov 2021 16:41:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233494AbhKRQof (ORCPT ); Thu, 18 Nov 2021 11:44:35 -0500 Received: from dispatch1-us1.ppe-hosted.com ([148.163.129.52]:34642 "EHLO dispatch1-us1.ppe-hosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233602AbhKRQoe (ORCPT ); Thu, 18 Nov 2021 11:44:34 -0500 X-Virus-Scanned: Proofpoint Essentials engine Received: from mx1-us1.ppe-hosted.com (unknown [10.7.67.123]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 15BFB1A0073 for ; Thu, 18 Nov 2021 16:41:33 +0000 (UTC) Received: from mail3.candelatech.com (mail2.candelatech.com [208.74.158.173]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id E8F534C007F for ; Thu, 18 Nov 2021 16:41:32 +0000 (UTC) Received: from ben-dt4.candelatech.com (50-251-239-81-static.hfc.comcastbusiness.net [50.251.239.81]) by mail3.candelatech.com (Postfix) with ESMTP id 9B47413C2B7; Thu, 18 Nov 2021 08:41:06 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.11.0 mail3.candelatech.com 9B47413C2B7 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=candelatech.com; s=default; t=1637253666; bh=yKh80QtA4plnkl7Ai90G08J/zd3CMMJVcK/qpOhqx2Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=MVq095CDieuIfgR20cCtSplL6kYha0YmrqwdpW+OlbLQga5wH4PdSQ/J9C9/wfNkP 6thXnBBbIYm38IBcqCIrFCD3qOo2oxfhVo5+L53qrTFMPAuZ3DWkKCKgsKVob7qOOx 2XYibQYyilcUp8/Wj+kCMS2VhwybjGMqm2e6JQRQ= From: greearb@candelatech.com To: linux-wireless@vger.kernel.org Cc: Ben Greear Subject: [PATCH 07/11] mt76: mt7915: fix rate rix and flags in txs path Date: Thu, 18 Nov 2021 08:40:52 -0800 Message-Id: <20211118164056.2965-7-greearb@candelatech.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20211118164056.2965-1-greearb@candelatech.com> References: <20211118164056.2965-1-greearb@candelatech.com> MIME-Version: 1.0 X-MDID: 1637253693-ZwczBQ77i1NC Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Ben Greear Do not initialize rix to -1, build the rix and set flags based on the mcs, nss, and mode. Signed-off-by: Ben Greear --- drivers/net/wireless/mediatek/mt76/mt7915/mac.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c index edf33540658e..300928edd0d7 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c @@ -1571,7 +1571,7 @@ mt7915_mac_add_txs_skb(struct mt7915_dev *dev, struct mt76_wcid *wcid, int pid, struct ieee80211_supported_band *sband; struct mt76_dev *mdev = &dev->mt76; struct mt76_phy *mphy; - struct ieee80211_tx_info *info; + struct ieee80211_tx_info *info = NULL; struct sk_buff_head list; struct rate_info rate = {}; struct sk_buff *skb = NULL; @@ -1596,8 +1596,6 @@ mt7915_mac_add_txs_skb(struct mt7915_dev *dev, struct mt76_wcid *wcid, int pid, info->status.ampdu_len = 1; info->status.ampdu_ack_len = !!(info->flags & IEEE80211_TX_STAT_ACK); - - info->status.rates[0].idx = -1; } txrate = FIELD_GET(MT_TXS0_TX_RATE, txs); @@ -1627,6 +1625,8 @@ mt7915_mac_add_txs_skb(struct mt7915_dev *dev, struct mt76_wcid *wcid, int pid, rate.mcs = mt76_get_rate(mphy->dev, sband, rate.mcs, cck); rate.legacy = sband->bitrates[rate.mcs].bitrate; + if (info) + info->status.rates[0].idx = rate.mcs; break; case MT_PHY_TYPE_HT: case MT_PHY_TYPE_HT_GF: @@ -1637,6 +1637,10 @@ mt7915_mac_add_txs_skb(struct mt7915_dev *dev, struct mt76_wcid *wcid, int pid, rate.flags = RATE_INFO_FLAGS_MCS; if (wcid->rate_short_gi) rate.flags |= RATE_INFO_FLAGS_SHORT_GI; + if (info) { + info->status.rates[0].idx = rate.mcs + rate.nss * 8; + info->status.rates[0].flags |= IEEE80211_TX_RC_MCS; + } break; case MT_PHY_TYPE_VHT: if (rate.mcs > 9) @@ -1645,6 +1649,10 @@ mt7915_mac_add_txs_skb(struct mt7915_dev *dev, struct mt76_wcid *wcid, int pid, rate.flags = RATE_INFO_FLAGS_VHT_MCS; if (wcid->rate_short_gi) rate.flags |= RATE_INFO_FLAGS_SHORT_GI; + if (info) { + info->status.rates[0].idx = (rate.nss << 4) | rate.mcs; + info->status.rates[0].flags |= IEEE80211_TX_RC_VHT_MCS; + } break; case MT_PHY_TYPE_HE_SU: case MT_PHY_TYPE_HE_EXT_SU: @@ -1656,6 +1664,8 @@ mt7915_mac_add_txs_skb(struct mt7915_dev *dev, struct mt76_wcid *wcid, int pid, rate.he_gi = wcid->rate_he_gi; rate.he_dcm = FIELD_GET(MT_TX_RATE_DCM, txrate); rate.flags = RATE_INFO_FLAGS_HE_MCS; + if (info) + info->status.rates[0].idx = (rate.nss << 4) | rate.mcs; break; default: WARN_ON_ONCE(true); From patchwork Thu Nov 18 16:40:53 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Greear X-Patchwork-Id: 12627333 X-Patchwork-Delegate: nbd@nbd.name Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 50CE9C433EF for ; Thu, 18 Nov 2021 16:41:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3A7C4610A5 for ; Thu, 18 Nov 2021 16:41:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233602AbhKRQok (ORCPT ); Thu, 18 Nov 2021 11:44:40 -0500 Received: from dispatch1-us1.ppe-hosted.com ([67.231.154.164]:60662 "EHLO dispatch1-us1.ppe-hosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233601AbhKRQok (ORCPT ); Thu, 18 Nov 2021 11:44:40 -0500 X-Virus-Scanned: Proofpoint Essentials engine Received: from mx1-us1.ppe-hosted.com (unknown [10.110.51.164]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 2947E2005E for ; Thu, 18 Nov 2021 16:41:38 +0000 (UTC) Received: from mail3.candelatech.com (mail2.candelatech.com [208.74.158.173]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id E22FDB00075 for ; Thu, 18 Nov 2021 16:41:37 +0000 (UTC) Received: from ben-dt4.candelatech.com (50-251-239-81-static.hfc.comcastbusiness.net [50.251.239.81]) by mail3.candelatech.com (Postfix) with ESMTP id 41BA713C2B8; Thu, 18 Nov 2021 08:41:07 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.11.0 mail3.candelatech.com 41BA713C2B8 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=candelatech.com; s=default; t=1637253667; bh=3v0xb8ptFJWVBSz+nkPgNelUV7VR/B9WdNoYnlW6jKA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=O9ayABCeJW1whXXeyD2JKVFZbj7r93GS7BcQWKdN1Op5WwZaVDFwR/FxsWWG1uDdv 1TBmertlzUddFrH30fQFIHMzv5/sdWf/FiVIht5nbq15a9KKbkonEtsWW/7Fl9m9Vc uMSUbfzniBh9+0hOqpxerkzQe0h138hLjo+6Lukk= From: greearb@candelatech.com To: linux-wireless@vger.kernel.org Cc: Ben Greear Subject: [PATCH 08/11] mt76: mt7915: add ethtool tx/rx pkts/bytes Date: Thu, 18 Nov 2021 08:40:53 -0800 Message-Id: <20211118164056.2965-8-greearb@candelatech.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20211118164056.2965-1-greearb@candelatech.com> References: <20211118164056.2965-1-greearb@candelatech.com> MIME-Version: 1.0 X-MDID: 1637253698-RBXa75bmoo1w Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Ben Greear These stats are provided with same name by ath10k and some intel wired NIC drivers. Add them to mt7915 as well to allow user-space code to more easily get some basic stats out of the radio. Signed-off-by: Ben Greear --- drivers/net/wireless/mediatek/mt76/mt7915/mac.c | 7 +++++++ drivers/net/wireless/mediatek/mt76/mt7915/main.c | 11 +++++++++++ drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h | 7 +++++++ 3 files changed, 25 insertions(+) diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c index 300928edd0d7..a97b4e64f74d 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c @@ -782,6 +782,9 @@ mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) mt7915_mac_decode_he_mu_radiotap(skb, status, rxv); } + mib->rx_pkts_nic++; + mib->rx_bytes_nic += skb->len; + if (!status->wcid || !ieee80211_is_data_qos(fc)) return 0; @@ -1384,6 +1387,8 @@ mt7915_txwi_free(struct mt7915_dev *dev, struct mt76_txwi_cache *t, u16 wcid_idx; struct ieee80211_tx_info *info; struct ieee80211_tx_rate *rate; + struct mt7915_phy *phy = &dev->phy; + struct mib_stats *mib = &phy->mib; mt7915_txp_skb_unmap(mdev, t); if (!t->skb) @@ -1465,6 +1470,8 @@ mt7915_txwi_free(struct mt7915_dev *dev, struct mt76_txwi_cache *t, /* Apply the values that this txfree path reports */ rate->count = tx_cnt; if (tx_status == 0) { + mib->tx_pkts_nic++; + mib->tx_bytes_nic += t->skb->len; info->flags |= IEEE80211_TX_STAT_ACK; info->status.ampdu_ack_len = 1; } else { diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/main.c b/drivers/net/wireless/mediatek/mt76/mt7915/main.c index f6c334721bca..c4eee951699e 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/main.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/main.c @@ -1077,6 +1077,10 @@ static void mt7915_sta_set_decap_offload(struct ieee80211_hw *hw, } static const char mt7915_gstrings_stats[][ETH_GSTRING_LEN] = { + "tx_pkts_nic", /* from driver, phy tx-ok skb */ + "tx_bytes_nic", /* from driver, phy tx-ok bytes */ + "rx_pkts_nic", /* from driver, phy rx OK skb */ + "rx_bytes_nic", /* from driver, phy rx OK bytes */ "tx_ampdu_cnt", "tx_stop_q_empty_cnt", "tx_mpdu_attempts", @@ -1259,6 +1263,13 @@ void mt7915_get_et_stats(struct ieee80211_hw *hw, mt7915_mac_update_stats(phy); + /* driver phy-wide stats */ + data[ei++] = mib->tx_pkts_nic; + data[ei++] = mib->tx_bytes_nic; + data[ei++] = mib->rx_pkts_nic; + data[ei++] = mib->rx_bytes_nic; + + /* MIB stats from FW/HW */ data[ei++] = mib->tx_ampdu_cnt; data[ei++] = mib->tx_stop_q_empty_cnt; data[ei++] = mib->tx_mpdu_attempts_cnt; diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h index bcbc8496516e..60881b357399 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h @@ -138,6 +138,13 @@ struct mt7915_vif { /* per-phy stats. */ struct mib_stats { + /* phy wide driver stats */ + u32 tx_pkts_nic; /* tx OK skb */ + u32 tx_bytes_nic; /* tx OK bytes */ + u32 rx_pkts_nic; /* rx OK skb */ + u32 rx_bytes_nic; /* rx OK bytes */ + + /* MIB counters from FW/HW */ u32 ack_fail_cnt; u32 fcs_err_cnt; u32 rts_cnt; From patchwork Thu Nov 18 16:40:54 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Greear X-Patchwork-Id: 12627335 X-Patchwork-Delegate: nbd@nbd.name Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7CA58C433FE for ; Thu, 18 Nov 2021 16:41:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 669A7610A5 for ; Thu, 18 Nov 2021 16:41:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233616AbhKRQol (ORCPT ); Thu, 18 Nov 2021 11:44:41 -0500 Received: from dispatch1-us1.ppe-hosted.com ([67.231.154.164]:40110 "EHLO dispatch1-us1.ppe-hosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233601AbhKRQol (ORCPT ); Thu, 18 Nov 2021 11:44:41 -0500 X-Virus-Scanned: Proofpoint Essentials engine Received: from mx1-us1.ppe-hosted.com (unknown [10.110.51.24]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id C3A341A006C for ; Thu, 18 Nov 2021 16:41:39 +0000 (UTC) Received: from mail3.candelatech.com (mail2.candelatech.com [208.74.158.173]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 3D84F3C007A for ; Thu, 18 Nov 2021 16:41:39 +0000 (UTC) Received: from ben-dt4.candelatech.com (50-251-239-81-static.hfc.comcastbusiness.net [50.251.239.81]) by mail3.candelatech.com (Postfix) with ESMTP id 6974713C2B9; Thu, 18 Nov 2021 08:41:07 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.11.0 mail3.candelatech.com 6974713C2B9 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=candelatech.com; s=default; t=1637253667; bh=2Rp+S9LTuucB9sj479v4uVlG1rqCz9ggawQ+hU1s4Yk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jVZ1p07R1HNK5mB5uCe9OcCl4ssSWPKyhWKd4B/aN5HU/Szp64YCYsWHmJW3MVF26 2vs55nQ7L/RM1lNXOci93RlyI0mRdhfWySrDE4kg/9cfm0IUjUEUHZYmcuAyIOwgqG WgfLYEgJVvb69j9nLoA0OpBQj4EePAKJr2zXV1C8= From: greearb@candelatech.com To: linux-wireless@vger.kernel.org Cc: Ben Greear Subject: [PATCH 09/11] mt76: mt7915: add rx-ppdu-size-out-of-range ethtool counter Date: Thu, 18 Nov 2021 08:40:54 -0800 Message-Id: <20211118164056.2965-9-greearb@candelatech.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20211118164056.2965-1-greearb@candelatech.com> References: <20211118164056.2965-1-greearb@candelatech.com> MIME-Version: 1.0 X-MDID: 1637253700-xQX43nVUCZ07 Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Ben Greear Support this additional MIB counter, it shares register with the rx-fifo-overflow counter. Signed-off-by: Ben Greear --- drivers/net/wireless/mediatek/mt76/mt7915/mac.c | 1 + drivers/net/wireless/mediatek/mt76/mt7915/main.c | 4 +++- drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h | 1 + drivers/net/wireless/mediatek/mt76/mt7915/regs.h | 1 + 4 files changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c index a97b4e64f74d..82786404f516 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c @@ -2175,6 +2175,7 @@ void mt7915_mac_update_stats(struct mt7915_phy *phy) cnt = mt76_rr(dev, MT_MIB_SDR4(ext_phy)); mib->rx_fifo_full_cnt += FIELD_GET(MT_MIB_SDR4_RX_FIFO_FULL_MASK, cnt); + mib->rx_oor_cnt += FIELD_GET(MT_MIB_SDR4_RX_OOR_MASK, cnt); cnt = mt76_rr(dev, MT_MIB_SDR5(ext_phy)); mib->rx_mpdu_cnt += cnt; diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/main.c b/drivers/net/wireless/mediatek/mt76/mt7915/main.c index c4eee951699e..7422421c1848 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/main.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/main.c @@ -1131,6 +1131,7 @@ static const char mt7915_gstrings_stats[][ETH_GSTRING_LEN] = { /* rx counters */ "rx_fifo_full_cnt", + "rx_oor_cnt", /* rx ppdu length is bad */ "rx_mpdu_cnt", "channel_idle_cnt", "rx_vector_mismatch_cnt", @@ -1315,7 +1316,8 @@ void mt7915_get_et_stats(struct ieee80211_hw *hw, data[ei++] = mib->tx_amsdu[i]; /* rx counters */ - data[ei++] = mib->rx_fifo_full_cnt; + data[ei++] = mib->rx_fifo_full_cnt; /* group-5 might exacerbate this */ + data[ei++] = mib->rx_oor_cnt; data[ei++] = mib->rx_mpdu_cnt; data[ei++] = mib->channel_idle_cnt; data[ei++] = mib->rx_vector_mismatch_cnt; diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h index 60881b357399..f5e8ae9db4a2 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h @@ -180,6 +180,7 @@ struct mib_stats { /* rx stats */ u32 rx_fifo_full_cnt; + u32 rx_oor_cnt; u32 channel_idle_cnt; u32 rx_vector_mismatch_cnt; u32 rx_delimiter_fail_cnt; diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/regs.h b/drivers/net/wireless/mediatek/mt76/mt7915/regs.h index d23c669cc933..a142b860fc7c 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/regs.h +++ b/drivers/net/wireless/mediatek/mt76/mt7915/regs.h @@ -164,6 +164,7 @@ #define MT_MIB_SDR4(_band) MT_WF_MIB(_band, 0x018) #define MT_MIB_SDR4_RX_FIFO_FULL_MASK GENMASK(15, 0) +#define MT_MIB_SDR4_RX_OOR_MASK GENMASK(23, 16) /* rx mpdu counter, full 32 bits */ #define MT_MIB_SDR5(_band) MT_WF_MIB(_band, 0x01c) From patchwork Thu Nov 18 16:40:55 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Greear X-Patchwork-Id: 12627337 X-Patchwork-Delegate: nbd@nbd.name Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 61011C4332F for ; Thu, 18 Nov 2021 16:41:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4C1396120E for ; Thu, 18 Nov 2021 16:41:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233618AbhKRQom (ORCPT ); Thu, 18 Nov 2021 11:44:42 -0500 Received: from dispatch1-us1.ppe-hosted.com ([67.231.154.184]:60788 "EHLO dispatch1-us1.ppe-hosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233608AbhKRQol (ORCPT ); Thu, 18 Nov 2021 11:44:41 -0500 X-Virus-Scanned: Proofpoint Essentials engine Received: from mx1-us1.ppe-hosted.com (unknown [10.110.51.165]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id A56B22A0064 for ; Thu, 18 Nov 2021 16:41:39 +0000 (UTC) Received: from mail3.candelatech.com (mail2.candelatech.com [208.74.158.173]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 692739C007B for ; Thu, 18 Nov 2021 16:41:39 +0000 (UTC) Received: from ben-dt4.candelatech.com (50-251-239-81-static.hfc.comcastbusiness.net [50.251.239.81]) by mail3.candelatech.com (Postfix) with ESMTP id 9103813C2BB; Thu, 18 Nov 2021 08:41:07 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.11.0 mail3.candelatech.com 9103813C2BB DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=candelatech.com; s=default; t=1637253667; bh=GGF2hA/rqjrmagbg29SHS2cArqM5wH6jLNFHOqrImJw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=b82EZ2Grr/3P2SnJd10GAWmjYNMUdj02Cs4AJPW7mjMQEwVI4htCclI9FhKzULOAZ VgNDLAVBEJdqwaTEbHtWzaOPJ9xXWVNmueveasmvn4TtIffDqVRq7n5Z8WSNDKDq9W 5LzenkMApHE1yMXpzSmmDPcHd3+ujU6VCGVJuU0I= From: greearb@candelatech.com To: linux-wireless@vger.kernel.org Cc: Ben Greear Subject: [PATCH 10/11] mt76: mt7915: ethtool and mib rx stats Date: Thu, 18 Nov 2021 08:40:55 -0800 Message-Id: <20211118164056.2965-10-greearb@candelatech.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20211118164056.2965-1-greearb@candelatech.com> References: <20211118164056.2965-1-greearb@candelatech.com> MIME-Version: 1.0 X-MDID: 1637253700-nhFpMNftJJTU Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Ben Greear Add some new stats read from MIB registers, including rx-mu-vht histogram data. Signed-off-by: Ben Greear --- .../net/wireless/mediatek/mt76/mt7915/mac.c | 45 ++++++++++- .../net/wireless/mediatek/mt76/mt7915/main.c | 77 ++++++++++++++++++- .../wireless/mediatek/mt76/mt7915/mt7915.h | 13 ++++ .../net/wireless/mediatek/mt76/mt7915/regs.h | 47 +++++++++++ 4 files changed, 180 insertions(+), 2 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c index 82786404f516..3c89c7573015 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c @@ -2168,7 +2168,7 @@ void mt7915_mac_update_stats(struct mt7915_phy *phy) struct mt7915_dev *dev = phy->dev; struct mib_stats *mib = &phy->mib; bool ext_phy = phy != &dev->phy; - int i, aggr0, aggr1, cnt; + int i, q, aggr0, aggr1, cnt; mib->fcs_err_cnt += mt76_get_field(dev, MT_MIB_SDR3(ext_phy), MT_MIB_SDR3_FCS_ERR_MASK); @@ -2241,6 +2241,26 @@ void mt7915_mac_update_stats(struct mt7915_phy *phy) cnt = mt76_rr(dev, MT_MIB_SDR34(ext_phy)); mib->tx_bf_cnt += FIELD_GET(MT_MIB_MU_BF_TX_CNT, cnt); + cnt = mt76_rr(dev, MT_MIB_SDR38(ext_phy)); + mib->tx_mgt_frame_cnt += FIELD_GET(MT_MIB_CTRL_TX_CNT, cnt); + + cnt = mt76_rr(dev, MT_MIB_SDR39(ext_phy)); + mib->tx_mgt_frame_retry_cnt += FIELD_GET(MT_MIB_MGT_RETRY_CNT, cnt); + + cnt = mt76_rr(dev, MT_MIB_SDR40(ext_phy)); + mib->tx_data_frame_retry_cnt += FIELD_GET(MT_MIB_DATA_RETRY_CNT, cnt); + + cnt = mt76_rr(dev, MT_MIB_SDR42(ext_phy)); + mib->rx_partial_beacon_cnt += FIELD_GET(MT_MIB_RX_PARTIAL_BEACON_BSSID0, cnt); + mib->rx_partial_beacon_cnt += FIELD_GET(MT_MIB_RX_PARTIAL_BEACON_BSSID1, cnt); + + cnt = mt76_rr(dev, MT_MIB_SDR43(ext_phy)); + mib->rx_partial_beacon_cnt += FIELD_GET(MT_MIB_RX_PARTIAL_BEACON_BSSID2, cnt); + mib->rx_partial_beacon_cnt += FIELD_GET(MT_MIB_RX_PARTIAL_BEACON_BSSID3, cnt); + + cnt = mt76_rr(dev, MT_MIB_SDR46(ext_phy)); + mib->rx_oppo_ps_rx_dis_drop_cnt += FIELD_GET(MT_MIB_OPPO_PS_RX_DIS_DROP_COUNT, cnt); + cnt = mt76_rr(dev, MT_MIB_DR8(ext_phy)); mib->tx_mu_mpdu_cnt += cnt; @@ -2297,6 +2317,29 @@ void mt7915_mac_update_stats(struct mt7915_phy *phy) dev->mt76.aggr_stats[aggr1++] += val & 0xffff; dev->mt76.aggr_stats[aggr1++] += val >> 16; } + + cnt = mt76_rr(dev, MT_MIB_M0DROPSR00(ext_phy)); + mib->tx_drop_rts_retry_fail_cnt += FIELD_GET(MT_MIB_RTS_RETRY_FAIL_DROP_MASK, cnt); + mib->tx_drop_mpdu_retry_fail_cnt += FIELD_GET(MT_MIB_RTS_RETRY_FAIL_DROP_MASK, cnt); + + cnt = mt76_rr(dev, MT_MIB_M0DROPSR01(ext_phy)); + mib->tx_drop_lto_limit_fail_cnt += FIELD_GET(MT_MIB_LTO_FAIL_DROP_MASK, cnt); + + cnt = mt76_rr(dev, MT_MIB_SDR50(ext_phy)); + mib->tx_dbnss_cnt += FIELD_GET(MT_MIB_DBNSS_CNT_DROP_MASK, cnt); + + cnt = mt76_rr(dev, MT_MIB_SDR51(ext_phy)); + mib->rx_fcs_ok_cnt += FIELD_GET(MT_MIB_RX_FCS_OK_MASK, cnt); + + for (i = 0; i < 2; i++) { + for (q = 0; q < 10; q++) { + cnt = mt76_rr(dev, MT_MIB_VHT_RX_FCS_HISTOGRAM(ext_phy, i, q)); + mib->rx_mu_fcs_ok_hist[i][q] += + FIELD_GET(MT_MIB_VHT_RX_FCS_HIST_OK_MASK, cnt); + mib->rx_mu_fcs_err_hist[i][q] += + FIELD_GET(MT_MIB_VHT_RX_FCS_HIST_ERR_MASK, cnt); + } + } } void mt7915_mac_sta_rc_work(struct work_struct *work) diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/main.c b/drivers/net/wireless/mediatek/mt76/mt7915/main.c index 7422421c1848..ce088f8f38f6 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/main.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/main.c @@ -1128,6 +1128,13 @@ static const char mt7915_gstrings_stats[][ETH_GSTRING_LEN] = { "tx_msdu_pack_6", "tx_msdu_pack_7", "tx_msdu_pack_8", + "tx_mgt_frame", /* SDR38, management frame tx counter */ + "tx_mgt_frame_retry", /* SDR39, management frame retried counter */ + "tx_data_frame_retry", /* SDR40, data frame retried counter */ + "tx_drop_rts_retry_fail", /* TX Drop, RTS retries exhausted */ + "tx_drop_mpdu_retry_fail", /* TX Drop, MPDU retries exhausted */ + "tx_drop_lto_limit_fail", /* TX drop, Life Time Out limit reached. */ + "tx_dbnss", /* pkts TX using double number of spatial streams */ /* rx counters */ "rx_fifo_full_cnt", @@ -1144,6 +1151,54 @@ static const char mt7915_gstrings_stats[][ETH_GSTRING_LEN] = { "rx_pfdrop_cnt", "rx_vec_queue_overflow_drop_cnt", "rx_ba_cnt", + "rx_partial_beacon", + "rx_oppo_ps_rx_dis_drop", + "rx_fcs_ok", + + /* rx MU VHT histogram */ + "rx_mu_fcs_ok_nss1_mcs0", + "rx_mu_fcs_ok_nss1_mcs1", + "rx_mu_fcs_ok_nss1_mcs2", + "rx_mu_fcs_ok_nss1_mcs3", + "rx_mu_fcs_ok_nss1_mcs4", + "rx_mu_fcs_ok_nss1_mcs5", + "rx_mu_fcs_ok_nss1_mcs6", + "rx_mu_fcs_ok_nss1_mcs7", + "rx_mu_fcs_ok_nss1_mcs8", + "rx_mu_fcs_ok_nss1_mcs9", + + "rx_mu_fcs_ok_nss2_mcs0", + "rx_mu_fcs_ok_nss2_mcs1", + "rx_mu_fcs_ok_nss2_mcs2", + "rx_mu_fcs_ok_nss2_mcs3", + "rx_mu_fcs_ok_nss2_mcs4", + "rx_mu_fcs_ok_nss2_mcs5", + "rx_mu_fcs_ok_nss2_mcs6", + "rx_mu_fcs_ok_nss2_mcs7", + "rx_mu_fcs_ok_nss2_mcs8", + "rx_mu_fcs_ok_nss2_mcs9", + + "rx_mu_fcs_err_nss1_mcs0", + "rx_mu_fcs_err_nss1_mcs1", + "rx_mu_fcs_err_nss1_mcs2", + "rx_mu_fcs_err_nss1_mcs3", + "rx_mu_fcs_err_nss1_mcs4", + "rx_mu_fcs_err_nss1_mcs5", + "rx_mu_fcs_err_nss1_mcs6", + "rx_mu_fcs_err_nss1_mcs7", + "rx_mu_fcs_err_nss1_mcs8", + "rx_mu_fcs_err_nss1_mcs9", + + "rx_mu_fcs_err_nss2_mcs0", + "rx_mu_fcs_err_nss2_mcs1", + "rx_mu_fcs_err_nss2_mcs2", + "rx_mu_fcs_err_nss2_mcs3", + "rx_mu_fcs_err_nss2_mcs4", + "rx_mu_fcs_err_nss2_mcs5", + "rx_mu_fcs_err_nss2_mcs6", + "rx_mu_fcs_err_nss2_mcs7", + "rx_mu_fcs_err_nss2_mcs8", + "rx_mu_fcs_err_nss2_mcs9", /* driver rx counters */ "d_rx_skb", @@ -1258,7 +1313,7 @@ void mt7915_get_et_stats(struct ieee80211_hw *hw, struct mib_stats *mib = &phy->mib; /* See mt7915_ampdu_stat_read_phy, etc */ bool ext_phy = phy != &dev->phy; - int i, n, ei = 0; + int i, n, q, ei = 0; mutex_lock(&dev->mt76.mutex); @@ -1315,6 +1370,14 @@ void mt7915_get_et_stats(struct ieee80211_hw *hw, for (i = 0; i < ARRAY_SIZE(mib->tx_amsdu); i++) data[ei++] = mib->tx_amsdu[i]; + data[ei++] = mib->tx_mgt_frame_cnt; + data[ei++] = mib->tx_mgt_frame_retry_cnt; + data[ei++] = mib->tx_data_frame_retry_cnt; + data[ei++] = mib->tx_drop_rts_retry_fail_cnt; + data[ei++] = mib->tx_drop_mpdu_retry_fail_cnt; + data[ei++] = mib->tx_drop_lto_limit_fail_cnt; + data[ei++] = mib->tx_dbnss_cnt; + /* rx counters */ data[ei++] = mib->rx_fifo_full_cnt; /* group-5 might exacerbate this */ data[ei++] = mib->rx_oor_cnt; @@ -1330,6 +1393,18 @@ void mt7915_get_et_stats(struct ieee80211_hw *hw, data[ei++] = mib->rx_pfdrop_cnt; data[ei++] = mib->rx_vec_queue_overflow_drop_cnt; data[ei++] = mib->rx_ba_cnt; + data[ei++] = mib->rx_partial_beacon_cnt; + data[ei++] = mib->rx_oppo_ps_rx_dis_drop_cnt; + data[ei++] = mib->rx_fcs_ok_cnt; + + for (i = 0; i < 2; i++) { /* for each nss */ + for (q = 0; q < 10; q++) /* for each mcs */ + data[ei++] = mib->rx_mu_fcs_ok_hist[i][q]; + } + for (i = 0; i < 2; i++) { /* for each nss */ + for (q = 0; q < 10; q++) /* for each mcs */ + data[ei++] = mib->rx_mu_fcs_err_hist[i][q]; + } /* rx stats from driver */ data[ei++] = mib->rx_d_skb; diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h index f5e8ae9db4a2..cd0341071875 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h @@ -177,6 +177,13 @@ struct mib_stats { u32 tx_rwp_fail_cnt; u32 tx_rwp_need_cnt; + u32 tx_mgt_frame_cnt; + u32 tx_mgt_frame_retry_cnt; + u32 tx_data_frame_retry_cnt; + u32 tx_drop_rts_retry_fail_cnt; + u32 tx_drop_mpdu_retry_fail_cnt; + u32 tx_drop_lto_limit_fail_cnt; + u32 tx_dbnss_cnt; /* rx stats */ u32 rx_fifo_full_cnt; @@ -197,6 +204,12 @@ struct mib_stats { u32 tx_amsdu[8]; u32 tx_amsdu_cnt; + u32 rx_partial_beacon_cnt; + u32 rx_oppo_ps_rx_dis_drop_cnt; + u32 rx_fcs_ok_cnt; + u32 rx_mu_fcs_ok_hist[2][10]; /* nss, mcs */ + u32 rx_mu_fcs_err_hist[2][10]; /* nss, mcs */ + /* rx stats from the driver */ u32 rx_d_skb; /* total skb received in rx path */ u32 rx_d_rxd2_amsdu_err; diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/regs.h b/drivers/net/wireless/mediatek/mt76/mt7915/regs.h index a142b860fc7c..c9068f4b32ed 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/regs.h +++ b/drivers/net/wireless/mediatek/mt76/mt7915/regs.h @@ -262,6 +262,29 @@ /* 36, 37 both DNR */ +#define MT_MIB_SDR38(_band) MT_WF_MIB(_band, 0x0d0) +#define MT_MIB_CTRL_TX_CNT GENMASK(23, 0) + +#define MT_MIB_SDR39(_band) MT_WF_MIB(_band, 0x0d4) +#define MT_MIB_MGT_RETRY_CNT GENMASK(23, 0) + +#define MT_MIB_SDR40(_band) MT_WF_MIB(_band, 0x0d8) +#define MT_MIB_DATA_RETRY_CNT GENMASK(23, 0) + +#define MT_MIB_SDR42(_band) MT_WF_MIB(_band, 0x0e0) +#define MT_MIB_RX_PARTIAL_BEACON_BSSID0 GENMASK(15, 0) +#define MT_MIB_RX_PARTIAL_BEACON_BSSID1 GENMASK(31, 16) + +#define MT_MIB_SDR43(_band) MT_WF_MIB(_band, 0x0e4) +#define MT_MIB_RX_PARTIAL_BEACON_BSSID2 GENMASK(15, 0) +#define MT_MIB_RX_PARTIAL_BEACON_BSSID3 GENMASK(31, 16) + +/* This counter shall increment when PPDUs dropped by the oppo_ps_rx_dis + * mechanism + */ +#define MT_MIB_SDR46(_band) MT_WF_MIB(_band, 0x0f0) +#define MT_MIB_OPPO_PS_RX_DIS_DROP_COUNT GENMASK(15, 0) + #define MT_MIB_DR8(_band) MT_WF_MIB(_band, 0x0c0) #define MT_MIB_DR9(_band) MT_WF_MIB(_band, 0x0c4) #define MT_MIB_DR11(_band) MT_WF_MIB(_band, 0x0cc) @@ -279,6 +302,30 @@ #define MT_MIB_ARNG(_band, n) MT_WF_MIB(_band, 0x4b8 + ((n) << 2)) #define MT_MIB_ARNCR_RANGE(val, n) (((val) >> ((n) << 3)) & GENMASK(7, 0)) +/* drop due to retries being exhausted */ +#define MT_MIB_M0DROPSR00(_band) MT_WF_MIB(_band, 0x190) +#define MT_MIB_RTS_RETRY_FAIL_DROP_MASK GENMASK(15, 0) +#define MT_MIB_MPDU_RETRY_FAIL_DROP_MASK GENMASK(31, 16) + +/* life time out limit */ +#define MT_MIB_M0DROPSR01(_band) MT_WF_MIB(_band, 0x194) +#define MT_MIB_LTO_FAIL_DROP_MASK GENMASK(15, 0) + +/* increment when using double number of spatial streams */ +#define MT_MIB_SDR50(_band) MT_WF_MIB(_band, 0x1dc) +#define MT_MIB_DBNSS_CNT_DROP_MASK GENMASK(15, 0) + +/* NOTE: Would need to poll this quickly since it is 16-bit */ +#define MT_MIB_SDR51(_band) MT_WF_MIB(_band, 0x1e0) +#define MT_MIB_RX_FCS_OK_MASK GENMASK(15, 0) + +/* VHT MU rx fcs ok, fcs fail. NSS: 0,1 MCS: 0..9 */ +#define MT_MIB_VHT_RX_FCS_HISTOGRAM_BASE_M0NSS1MCS0(_band) MT_WF_MIB(_band, 0x400) +#define MT_MIB_VHT_RX_FCS_HIST_OK_MASK GENMASK(15, 0) +#define MT_MIB_VHT_RX_FCS_HIST_ERR_MASK GENMASK(31, 16) +#define MT_MIB_VHT_RX_FCS_HISTOGRAM(_band, nss, mcs) \ + (MT_MIB_VHT_RX_FCS_HISTOGRAM_BASE_M0NSS1MCS0(_band) + (nss) * 4 + (mcs)) + #define MT_WTBLON_TOP_BASE 0x34000 #define MT_WTBLON_TOP(ofs) (MT_WTBLON_TOP_BASE + (ofs)) #define MT_WTBLON_TOP_WDUCR MT_WTBLON_TOP(0x0) From patchwork Thu Nov 18 16:40:56 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Greear X-Patchwork-Id: 12627331 X-Patchwork-Delegate: nbd@nbd.name Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5D0FEC4332F for ; Thu, 18 Nov 2021 16:41:37 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 45222610A5 for ; Thu, 18 Nov 2021 16:41:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233617AbhKRQog (ORCPT ); Thu, 18 Nov 2021 11:44:36 -0500 Received: from dispatch1-us1.ppe-hosted.com ([67.231.154.164]:39906 "EHLO dispatch1-us1.ppe-hosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233608AbhKRQof (ORCPT ); Thu, 18 Nov 2021 11:44:35 -0500 X-Virus-Scanned: Proofpoint Essentials engine Received: from mx1-us1.ppe-hosted.com (unknown [10.110.51.166]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 66C6F20061 for ; Thu, 18 Nov 2021 16:41:34 +0000 (UTC) Received: from mail3.candelatech.com (mail2.candelatech.com [208.74.158.173]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 3BE9B90007F for ; Thu, 18 Nov 2021 16:41:34 +0000 (UTC) Received: from ben-dt4.candelatech.com (50-251-239-81-static.hfc.comcastbusiness.net [50.251.239.81]) by mail3.candelatech.com (Postfix) with ESMTP id B6AA613C2BC; Thu, 18 Nov 2021 08:41:07 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.11.0 mail3.candelatech.com B6AA613C2BC DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=candelatech.com; s=default; t=1637253667; bh=cz7hdPYqV1/6OZEcKtZ46vixX5rQ2uVZjynkomjDlQ8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=XY9/ZrBy8QLVf6Pmnr3599YMX643L59Bjk7LE0bXXrpZ9ZvGvflMeKDB2iOaLik+J umxbXWLDdgq/kOzjBRykdMzP7rndjKx/SHZYG+rP2rEa5lOHOsWuEyLPSl9PgNcz6Q od3n1tL7+/Lmy++f1yvX5J9CaMB+RMuec2H9R278= From: greearb@candelatech.com To: linux-wireless@vger.kernel.org Cc: Ben Greear Subject: [PATCH 11/11] mt76: mt7915: poll mib counters every 200ms Date: Thu, 18 Nov 2021 08:40:56 -0800 Message-Id: <20211118164056.2965-11-greearb@candelatech.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20211118164056.2965-1-greearb@candelatech.com> References: <20211118164056.2965-1-greearb@candelatech.com> MIME-Version: 1.0 X-MDID: 1637253694-HEkbK62m7M2f Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Ben Greear Instead of every 500ms, this will do better job of catching wraps of 16-bit pkt counters. Signed-off-by: Ben Greear --- drivers/net/wireless/mediatek/mt76/mt7915/mac.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c index 3c89c7573015..7cfa6b2abda5 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c @@ -2390,7 +2390,11 @@ void mt7915_mac_work(struct work_struct *work) mutex_lock(&mphy->dev->mutex); mt76_update_survey(mphy); - if (++mphy->mac_work_count == 5) { + + /* this method is called about every 100ms. Some pkt counters are 16-bit, + * so poll every 200ms to keep overflows at a minimum. + */ + if (++mphy->mac_work_count == 2) { mphy->mac_work_count = 0; mt7915_mac_update_stats(phy);