mt76: mt7915: add more ethtool stats
authorRyder Lee <ryder.lee@mediatek.com>
Thu, 26 May 2022 09:08:54 +0000 (17:08 +0800)
committerFelix Fietkau <nbd@nbd.name>
Mon, 11 Jul 2022 11:40:01 +0000 (13:40 +0200)
Add channel time and MAC ready stats.

Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7915/mac.c
drivers/net/wireless/mediatek/mt76/mt7915/main.c
drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
drivers/net/wireless/mediatek/mt76/mt7915/regs.h

index 086244d9be76687e6af5090a4ca06dc6202b1507..f59662af3d9d512e585093e8d9f109a72b751f48 100644 (file)
@@ -2214,7 +2214,8 @@ void mt7915_mac_update_stats(struct mt7915_phy *phy)
        u32 val;
 
        cnt = mt76_rr(dev, MT_MIB_SDR3(phy->band_idx));
-       mib->fcs_err_cnt += is_mt7915(&dev->mt76) ? FIELD_GET(MT_MIB_SDR3_FCS_ERR_MASK, cnt) :
+       mib->fcs_err_cnt += is_mt7915(&dev->mt76) ?
+               FIELD_GET(MT_MIB_SDR3_FCS_ERR_MASK, cnt) :
                FIELD_GET(MT_MIB_SDR3_FCS_ERR_MASK_MT7916, cnt);
 
        cnt = mt76_rr(dev, MT_MIB_SDR4(phy->band_idx));
@@ -2227,19 +2228,28 @@ void mt7915_mac_update_stats(struct mt7915_phy *phy)
        mib->channel_idle_cnt += FIELD_GET(MT_MIB_SDR6_CHANNEL_IDL_CNT_MASK, cnt);
 
        cnt = mt76_rr(dev, MT_MIB_SDR7(phy->band_idx));
-       mib->rx_vector_mismatch_cnt += FIELD_GET(MT_MIB_SDR7_RX_VECTOR_MISMATCH_CNT_MASK, cnt);
+       mib->rx_vector_mismatch_cnt +=
+               FIELD_GET(MT_MIB_SDR7_RX_VECTOR_MISMATCH_CNT_MASK, cnt);
 
        cnt = mt76_rr(dev, MT_MIB_SDR8(phy->band_idx));
-       mib->rx_delimiter_fail_cnt += FIELD_GET(MT_MIB_SDR8_RX_DELIMITER_FAIL_CNT_MASK, cnt);
+       mib->rx_delimiter_fail_cnt +=
+               FIELD_GET(MT_MIB_SDR8_RX_DELIMITER_FAIL_CNT_MASK, cnt);
+
+       cnt = mt76_rr(dev, MT_MIB_SDR10(phy->band_idx));
+       mib->rx_mrdy_cnt += is_mt7915(&dev->mt76) ?
+               FIELD_GET(MT_MIB_SDR10_MRDY_COUNT_MASK, cnt) :
+               FIELD_GET(MT_MIB_SDR10_MRDY_COUNT_MASK_MT7916, cnt);
 
        cnt = mt76_rr(dev, MT_MIB_SDR11(phy->band_idx));
-       mib->rx_len_mismatch_cnt += FIELD_GET(MT_MIB_SDR11_RX_LEN_MISMATCH_CNT_MASK, cnt);
+       mib->rx_len_mismatch_cnt +=
+               FIELD_GET(MT_MIB_SDR11_RX_LEN_MISMATCH_CNT_MASK, cnt);
 
        cnt = mt76_rr(dev, MT_MIB_SDR12(phy->band_idx));
        mib->tx_ampdu_cnt += cnt;
 
        cnt = mt76_rr(dev, MT_MIB_SDR13(phy->band_idx));
-       mib->tx_stop_q_empty_cnt += FIELD_GET(MT_MIB_SDR13_TX_STOP_Q_EMPTY_CNT_MASK, cnt);
+       mib->tx_stop_q_empty_cnt +=
+               FIELD_GET(MT_MIB_SDR13_TX_STOP_Q_EMPTY_CNT_MASK, cnt);
 
        cnt = mt76_rr(dev, MT_MIB_SDR14(phy->band_idx));
        mib->tx_mpdu_attempts_cnt += is_mt7915(&dev->mt76) ?
@@ -2251,6 +2261,29 @@ void mt7915_mac_update_stats(struct mt7915_phy *phy)
                FIELD_GET(MT_MIB_SDR15_TX_MPDU_SUCCESS_CNT_MASK, cnt) :
                FIELD_GET(MT_MIB_SDR15_TX_MPDU_SUCCESS_CNT_MASK_MT7916, cnt);
 
+       cnt = mt76_rr(dev, MT_MIB_SDR16(phy->band_idx));
+       mib->primary_cca_busy_time +=
+               FIELD_GET(MT_MIB_SDR16_PRIMARY_CCA_BUSY_TIME_MASK, cnt);
+
+       cnt = mt76_rr(dev, MT_MIB_SDR17(phy->band_idx));
+       mib->secondary_cca_busy_time +=
+               FIELD_GET(MT_MIB_SDR17_SECONDARY_CCA_BUSY_TIME_MASK, cnt);
+
+       cnt = mt76_rr(dev, MT_MIB_SDR18(phy->band_idx));
+       mib->primary_energy_detect_time +=
+               FIELD_GET(MT_MIB_SDR18_PRIMARY_ENERGY_DETECT_TIME_MASK, cnt);
+
+       cnt = mt76_rr(dev, MT_MIB_SDR19(phy->band_idx));
+       mib->cck_mdrdy_time += FIELD_GET(MT_MIB_SDR19_CCK_MDRDY_TIME_MASK, cnt);
+
+       cnt = mt76_rr(dev, MT_MIB_SDR20(phy->band_idx));
+       mib->ofdm_mdrdy_time +=
+               FIELD_GET(MT_MIB_SDR20_OFDM_VHT_MDRDY_TIME_MASK, cnt);
+
+       cnt = mt76_rr(dev, MT_MIB_SDR21(phy->band_idx));
+       mib->green_mdrdy_time +=
+               FIELD_GET(MT_MIB_SDR21_GREEN_MDRDY_TIME_MASK, cnt);
+
        cnt = mt76_rr(dev, MT_MIB_SDR22(phy->band_idx));
        mib->rx_ampdu_cnt += cnt;
 
@@ -2266,10 +2299,12 @@ void mt7915_mac_update_stats(struct mt7915_phy *phy)
        mib->rx_ampdu_valid_subframe_bytes_cnt += cnt;
 
        cnt = mt76_rr(dev, MT_MIB_SDR27(phy->band_idx));
-       mib->tx_rwp_fail_cnt += FIELD_GET(MT_MIB_SDR27_TX_RWP_FAIL_CNT_MASK, cnt);
+       mib->tx_rwp_fail_cnt +=
+               FIELD_GET(MT_MIB_SDR27_TX_RWP_FAIL_CNT_MASK, cnt);
 
        cnt = mt76_rr(dev, MT_MIB_SDR28(phy->band_idx));
-       mib->tx_rwp_need_cnt += FIELD_GET(MT_MIB_SDR28_TX_RWP_NEED_CNT_MASK, cnt);
+       mib->tx_rwp_need_cnt +=
+               FIELD_GET(MT_MIB_SDR28_TX_RWP_NEED_CNT_MASK, cnt);
 
        cnt = mt76_rr(dev, MT_MIB_SDR29(phy->band_idx));
        mib->rx_pfdrop_cnt += is_mt7915(&dev->mt76) ?
@@ -2311,7 +2346,8 @@ void mt7915_mac_update_stats(struct mt7915_phy *phy)
        if (is_mt7915(&dev->mt76)) {
                for (i = 0, aggr1 = aggr0 + 4; i < 4; i++) {
                        val = mt76_rr(dev, MT_MIB_MB_SDR1(phy->band_idx, (i << 4)));
-                       mib->ba_miss_cnt += FIELD_GET(MT_MIB_BA_MISS_COUNT_MASK, val);
+                       mib->ba_miss_cnt +=
+                               FIELD_GET(MT_MIB_BA_MISS_COUNT_MASK, val);
                        mib->ack_fail_cnt +=
                                FIELD_GET(MT_MIB_ACK_FAIL_COUNT_MASK, val);
 
index fbeac9aa2af6dfd7bb3f6df738cfc1874647c8b4..8a114dae6110cc21b4683006dbdf256df03e0889 100644 (file)
@@ -1146,8 +1146,15 @@ static const char mt7915_gstrings_stats[][ETH_GSTRING_LEN] = {
        "rx_fifo_full_cnt",
        "rx_mpdu_cnt",
        "channel_idle_cnt",
+       "primary_cca_busy_time",
+       "secondary_cca_busy_time",
+       "primary_energy_detect_time",
+       "cck_mdrdy_time",
+       "ofdm_mdrdy_time",
+       "green_mdrdy_time",
        "rx_vector_mismatch_cnt",
        "rx_delimiter_fail_cnt",
+       "rx_mrdy_cnt",
        "rx_len_mismatch_cnt",
        "rx_ampdu_cnt",
        "rx_ampdu_bytes_cnt",
@@ -1287,8 +1294,15 @@ void mt7915_get_et_stats(struct ieee80211_hw *hw,
        data[ei++] = mib->rx_fifo_full_cnt;
        data[ei++] = mib->rx_mpdu_cnt;
        data[ei++] = mib->channel_idle_cnt;
+       data[ei++] = mib->primary_cca_busy_time;
+       data[ei++] = mib->secondary_cca_busy_time;
+       data[ei++] = mib->primary_energy_detect_time;
+       data[ei++] = mib->cck_mdrdy_time;
+       data[ei++] = mib->ofdm_mdrdy_time;
+       data[ei++] = mib->green_mdrdy_time;
        data[ei++] = mib->rx_vector_mismatch_cnt;
        data[ei++] = mib->rx_delimiter_fail_cnt;
+       data[ei++] = mib->rx_mrdy_cnt;
        data[ei++] = mib->rx_len_mismatch_cnt;
        data[ei++] = mib->rx_ampdu_cnt;
        data[ei++] = mib->rx_ampdu_bytes_cnt;
index 4dcae69916694cf6038300b71c1ea47f129df1e6..bd985e6ce36a3ec59f3a4076d026097049ee1bf4 100644 (file)
@@ -200,8 +200,15 @@ struct mib_stats {
        /* rx stats */
        u32 rx_fifo_full_cnt;
        u32 channel_idle_cnt;
+       u32 primary_cca_busy_time;
+       u32 secondary_cca_busy_time;
+       u32 primary_energy_detect_time;
+       u32 cck_mdrdy_time;
+       u32 ofdm_mdrdy_time;
+       u32 green_mdrdy_time;
        u32 rx_vector_mismatch_cnt;
        u32 rx_delimiter_fail_cnt;
+       u32 rx_mrdy_cnt;
        u32 rx_len_mismatch_cnt;
        u32 rx_mpdu_cnt;
        u32 rx_ampdu_cnt;
index 4953be208c5e029f410d2dd8fcf2a99d115ee12b..77fd448beed76e314c9cdece15df4cadf90568c8 100644 (file)
@@ -305,7 +305,7 @@ enum offs_rev {
 #define MT_MIB_SDR9_DNR(_band)         MT_WF_MIB(_band, __OFFS(MIB_SDR9))
 #define MT_MIB_SDR9_CCA_BUSY_TIME_MASK         GENMASK(23, 0)
 
-#define MT_MIB_SDR10_DNR(_band)                MT_WF_MIB(_band, __OFFS(MIB_SDR10))
+#define MT_MIB_SDR10(_band)            MT_WF_MIB(_band, __OFFS(MIB_SDR10))
 #define MT_MIB_SDR10_MRDY_COUNT_MASK           GENMASK(25, 0)
 #define MT_MIB_SDR10_MRDY_COUNT_MASK_MT7916    GENMASK(31, 0)
 
@@ -329,24 +329,24 @@ enum offs_rev {
 #define MT_MIB_SDR15_TX_MPDU_SUCCESS_CNT_MASK_MT7916   GENMASK(31, 0)
 
 /* in units of 'us' */
-#define MT_MIB_SDR16_DNR(_band)                MT_WF_MIB(_band, __OFFS(MIB_SDR16))
+#define MT_MIB_SDR16(_band)            MT_WF_MIB(_band, __OFFS(MIB_SDR16))
 #define MT_MIB_SDR16_PRIMARY_CCA_BUSY_TIME_MASK        GENMASK(23, 0)
 
-#define MT_MIB_SDR17_DNR(_band)                MT_WF_MIB(_band, __OFFS(MIB_SDR17))
+#define MT_MIB_SDR17(_band)            MT_WF_MIB(_band, __OFFS(MIB_SDR17))
 #define MT_MIB_SDR17_SECONDARY_CCA_BUSY_TIME_MASK      GENMASK(23, 0)
 
 #define MT_MIB_SDR18(_band)            MT_WF_MIB(_band, __OFFS(MIB_SDR18))
 #define MT_MIB_SDR18_PRIMARY_ENERGY_DETECT_TIME_MASK   GENMASK(23, 0)
 
 /* units are us */
-#define MT_MIB_SDR19_DNR(_band)                MT_WF_MIB(_band, __OFFS(MIB_SDR19))
+#define MT_MIB_SDR19(_band)            MT_WF_MIB(_band, __OFFS(MIB_SDR19))
 #define MT_MIB_SDR19_CCK_MDRDY_TIME_MASK       GENMASK(23, 0)
 
-#define MT_MIB_SDR20_DNR(_band)                MT_WF_MIB(_band, __OFFS(MIB_SDR20))
+#define MT_MIB_SDR20(_band)            MT_WF_MIB(_band, __OFFS(MIB_SDR20))
 #define MT_MIB_SDR20_OFDM_VHT_MDRDY_TIME_MASK  GENMASK(23, 0)
 
-#define MT_MIB_SDR21_DNR(_band)                MT_WF_MIB(_band, __OFFS(MIB_SDR21))
-#define MT_MIB_SDR20_GREEN_MDRDY_TIME_MASK     GENMASK(23, 0)
+#define MT_MIB_SDR21(_band)            MT_WF_MIB(_band, __OFFS(MIB_SDR21))
+#define MT_MIB_SDR21_GREEN_MDRDY_TIME_MASK     GENMASK(23, 0)
 
 /* rx ampdu count, 32-bit */
 #define MT_MIB_SDR22(_band)            MT_WF_MIB(_band, __OFFS(MIB_SDR22))
@@ -940,7 +940,7 @@ enum offs_rev {
 #define MT_ADIE_TYPE_MASK              BIT(1)
 
 /* FW MODE SYNC */
-#define MT_FW_EXCEPTION                __REG(FW_EXCEPTION_ADDR)
+#define MT_FW_EXCEPTION                        __REG(FW_EXCEPTION_ADDR)
 
 #define MT_SWDEF_BASE                  __REG(SWDEF_BASE_ADDR)