mt76: mt7915: switch proper tx arbiter mode in testmode
authorShayne Chen <shayne.chen@mediatek.com>
Tue, 20 Jul 2021 13:00:13 +0000 (21:00 +0800)
committerFelix Fietkau <nbd@nbd.name>
Wed, 20 Oct 2021 08:36:31 +0000 (10:36 +0200)
Switch proper tx arbiter mode during testmode tx to prevent from
entering the flow of normal tx in FW.
Also, testmode SU and MU tx need to use different arbiter mode.

Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7915/mcu.h
drivers/net/wireless/mediatek/mt76/mt7915/testmode.c
drivers/net/wireless/mediatek/mt76/mt7915/testmode.h

index 4142e27c93ca436eddef1573755fb3e6e4bacb68..79b3820c742bc16d621093675d39a7850ec40a7c 100644 (file)
@@ -278,6 +278,7 @@ enum {
        MCU_EXT_CMD_SCS_CTRL = 0x82,
        MCU_EXT_CMD_FW_DBG_CTRL = 0x95,
        MCU_EXT_CMD_SET_RDD_TH = 0x9d,
+       MCU_EXT_CMD_MURU_CTRL = 0x9f,
        MCU_EXT_CMD_SET_SPR = 0xa8,
        MCU_EXT_CMD_GROUP_PRE_CAL_INFO = 0xab,
        MCU_EXT_CMD_DPD_PRE_CAL_INFO = 0xac,
index b220b334906bcfbd686ce3d1fb3561ceb223b179..00dcc46b90829fd8601f07d3b425d1fe5de62cc8 100644 (file)
@@ -165,6 +165,28 @@ mt7915_tm_set_slot_time(struct mt7915_phy *phy, u8 slot_time, u8 sifs)
                                 sizeof(req), false);
 }
 
+static int
+mt7915_tm_set_tam_arb(struct mt7915_phy *phy, bool enable, bool mu)
+{
+       struct mt7915_dev *dev = phy->dev;
+       struct {
+               __le32 cmd;
+               u8 op_mode;
+       } __packed req = {
+               .cmd = cpu_to_le32(MURU_SET_ARB_OP_MODE),
+       };
+
+       if (!enable)
+               req.op_mode = TAM_ARB_OP_MODE_NORMAL;
+       else if (mu)
+               req.op_mode = TAM_ARB_OP_MODE_TEST;
+       else
+               req.op_mode = TAM_ARB_OP_MODE_FORCE_SU;
+
+       return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(MURU_CTRL), &req,
+                                sizeof(req), false);
+}
+
 static int
 mt7915_tm_set_wmm_qid(struct mt7915_dev *dev, u8 qid, u8 aifs, u8 cw_min,
                      u16 cw_max, u16 txop)
@@ -397,6 +419,10 @@ mt7915_tm_init(struct mt7915_phy *phy, bool en)
        mt7915_tm_set_trx(phy, TM_MAC_TXRX, !en);
 
        mt7915_mcu_add_bss_info(phy, phy->monitor_vif, en);
+       mt7915_mcu_add_sta(dev, phy->monitor_vif, NULL, en);
+
+       if (!en)
+               mt7915_tm_set_tam_arb(phy, en, 0);
 }
 
 static void
@@ -438,6 +464,9 @@ mt7915_tm_set_tx_frames(struct mt7915_phy *phy, bool en)
                }
        }
 
+       mt7915_tm_set_tam_arb(phy, en,
+                             td->tx_rate_mode == MT76_TM_TX_MODE_HE_MU);
+
        /* if all three params are set, duty_cycle will be ignored */
        if (duty_cycle && tx_time && !ipg) {
                ipg = tx_time * 100 / duty_cycle - tx_time;
index 397a6b5532bcc7a5be076630c4da545d071f188a..107f0cf2505e71200a19607faa115d7c3b4cb23a 100644 (file)
@@ -96,4 +96,14 @@ enum {
        RF_OPER_WIFI_SPECTRUM,
 };
 
+enum {
+       TAM_ARB_OP_MODE_NORMAL = 1,
+       TAM_ARB_OP_MODE_TEST,
+       TAM_ARB_OP_MODE_FORCE_SU = 5,
+};
+
+enum {
+       MURU_SET_ARB_OP_MODE = 14,
+};
+
 #endif