@@ -879,6 +879,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->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)
@@ -1264,6 +1296,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,
@@ -440,7 +440,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);
/* mt7915: 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->rx_group_5_enable);
}
static void mt7915_mac_init(struct mt7915_dev *dev)
@@ -467,7 +467,7 @@ static int mt7915_config(struct ieee80211_hw *hw, u32 changed)
phy->rxfilter &= ~MT_WF_RFCR_DROP_OTHER_UC;
mt76_rmw_field(dev, MT_DMA_DCR0(band), MT_DMA_DCR0_RXD_G5_EN,
- enabled);
+ dev->rx_group_5_enable);
mt76_testmode_reset(phy->mt76, true);
mt76_wr(dev, MT_WF_RFCR(band), phy->rxfilter);
}
@@ -301,6 +301,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;