From 911e50206b1155bb240eaa7670fa6715ac6cb500 Mon Sep 17 00:00:00 2001
From: StanleyYP Wang <StanleyYP.Wang@mediatek.com>
Date: Thu, 12 Oct 2023 16:17:33 +0800
Subject: [PATCH 1038/1044] mtk: wifi: mt76: testmode: add kite testmode
 support

Add Kite testmode support
1. avoid entering connac 2 testmode flow in kite
2. refactor prek implementation for handling chip difference

Signed-off-by: StanleyYP Wang <StanleyYP.Wang@mediatek.com>
---
 mt7996/eeprom.c   | 63 +++++++++++++-----------------
 mt7996/eeprom.h   | 81 +++++++++++++++++++++++++++------------
 mt7996/mcu.c      | 48 ++++++++++++++---------
 mt7996/mt7996.h   | 18 ++++++++-
 mt7996/testmode.c | 97 ++++++++++++++++++++++++++++-------------------
 testmode.c        | 11 ++++--
 6 files changed, 198 insertions(+), 120 deletions(-)

diff --git a/mt7996/eeprom.c b/mt7996/eeprom.c
index 1eb292c0..39e65010 100644
--- a/mt7996/eeprom.c
+++ b/mt7996/eeprom.c
@@ -29,12 +29,39 @@ const struct ieee80211_channel dpd_5g_skip_ch_list[] = {
 	CHAN5G(96, 5480)
 };
 
+const struct ieee80211_channel dpd_5g_ch_list_bw80[] = {
+	CHAN5G(42, 5210),
+	CHAN5G(58, 5290),
+	CHAN5G(106, 5530),
+	CHAN5G(122, 5610),
+	CHAN5G(138, 5690),
+	CHAN5G(155, 5775),
+	CHAN5G(171, 5855)
+};
+
 const struct ieee80211_channel dpd_5g_ch_list_bw160[] = {
 	CHAN5G(50, 5250),
 	CHAN5G(114, 5570),
 	CHAN5G(163, 5815)
 };
 
+const struct ieee80211_channel dpd_6g_ch_list_bw80[] = {
+	CHAN6G(7, 5985),
+	CHAN6G(23, 6065),
+	CHAN6G(39, 6145),
+	CHAN6G(55, 6225),
+	CHAN6G(71, 6305),
+	CHAN6G(87, 6385),
+	CHAN6G(103, 6465),
+	CHAN6G(119, 6545),
+	CHAN6G(135, 6625),
+	CHAN6G(151, 6705),
+	CHAN6G(167, 6785),
+	CHAN6G(183, 6865),
+	CHAN6G(199, 6945),
+	CHAN6G(215, 7025)
+};
+
 const struct ieee80211_channel dpd_6g_ch_list_bw160[] = {
 	CHAN6G(15, 6025),
 	CHAN6G(47, 6185),
@@ -54,12 +81,6 @@ const struct ieee80211_channel dpd_6g_ch_list_bw320[] = {
 	CHAN6G(191, 6905)
 };
 
-const u32 dpd_2g_bw20_ch_num = ARRAY_SIZE(dpd_2g_ch_list_bw20);
-const u32 dpd_5g_skip_ch_num = ARRAY_SIZE(dpd_5g_skip_ch_list);
-const u32 dpd_5g_bw160_ch_num = ARRAY_SIZE(dpd_5g_ch_list_bw160);
-const u32 dpd_6g_bw160_ch_num = ARRAY_SIZE(dpd_6g_ch_list_bw160);
-const u32 dpd_6g_bw320_ch_num = ARRAY_SIZE(dpd_6g_ch_list_bw320);
-
 static int mt7996_check_eeprom(struct mt7996_dev *dev)
 {
 #define FEM_INT				0
@@ -129,36 +150,6 @@ const char *mt7996_eeprom_name(struct mt7996_dev *dev)
 	}
 }
 
-int
-mt7996_get_dpd_per_band_size(struct mt7996_dev *dev, enum nl80211_band band)
-{
-	/* handle different sku */
-	static const u8 band_to_idx[] = {
-		[NL80211_BAND_2GHZ] = MT_BAND0,
-		[NL80211_BAND_5GHZ] = MT_BAND1,
-		[NL80211_BAND_6GHZ] = MT_BAND2,
-	};
-	struct mt7996_phy *phy = __mt7996_phy(dev, band_to_idx[band]);
-	struct mt76_phy *mphy;
-	int dpd_size;
-
-	if (!phy)
-		return 0;
-
-	mphy = phy->mt76;
-
-	if (band == NL80211_BAND_2GHZ)
-		dpd_size = dpd_2g_bw20_ch_num * DPD_PER_CH_BW20_SIZE;
-	else if (band == NL80211_BAND_5GHZ)
-		dpd_size = (mphy->sband_5g.sband.n_channels - dpd_5g_skip_ch_num) *
-			   DPD_PER_CH_BW20_SIZE + dpd_5g_bw160_ch_num * DPD_PER_CH_GT_BW20_SIZE;
-	else
-		dpd_size = mphy->sband_6g.sband.n_channels * DPD_PER_CH_BW20_SIZE +
-			   (dpd_6g_bw160_ch_num + dpd_6g_bw320_ch_num) * DPD_PER_CH_GT_BW20_SIZE;
-
-	return dpd_size;
-}
-
 static int
 mt7996_eeprom_load_default(struct mt7996_dev *dev)
 {
diff --git a/mt7996/eeprom.h b/mt7996/eeprom.h
index 3e9992a3..0d05e75e 100644
--- a/mt7996/eeprom.h
+++ b/mt7996/eeprom.h
@@ -45,36 +45,69 @@ enum mt7996_eeprom_field {
 #define MT_EE_WIFI_CAL_DPD			GENMASK(5, 3)
 
 #define MT_EE_CAL_UNIT				1024
-#define MT_EE_CAL_GROUP_SIZE_2G			(4 * MT_EE_CAL_UNIT)
-#define MT_EE_CAL_GROUP_SIZE_5G			(45 * MT_EE_CAL_UNIT)
-#define MT_EE_CAL_GROUP_SIZE_6G			(125 * MT_EE_CAL_UNIT)
-#define MT_EE_CAL_ADCDCOC_SIZE_2G		(4 * 4)
-#define MT_EE_CAL_ADCDCOC_SIZE_5G		(4 * 4)
-#define MT_EE_CAL_ADCDCOC_SIZE_6G		(4 * 5)
-#define MT_EE_CAL_GROUP_SIZE			(MT_EE_CAL_GROUP_SIZE_2G + \
-						 MT_EE_CAL_GROUP_SIZE_5G + \
-						 MT_EE_CAL_GROUP_SIZE_6G + \
-						 MT_EE_CAL_ADCDCOC_SIZE_2G + \
-						 MT_EE_CAL_ADCDCOC_SIZE_5G + \
-						 MT_EE_CAL_ADCDCOC_SIZE_6G)
-
-#define DPD_PER_CH_LEGACY_SIZE			(4 * MT_EE_CAL_UNIT)
-#define DPD_PER_CH_MEM_SIZE			(13 * MT_EE_CAL_UNIT)
-#define DPD_PER_CH_OTFG0_SIZE			(2 * MT_EE_CAL_UNIT)
-#define DPD_PER_CH_BW20_SIZE			(DPD_PER_CH_LEGACY_SIZE + DPD_PER_CH_OTFG0_SIZE)
-#define DPD_PER_CH_GT_BW20_SIZE			(DPD_PER_CH_MEM_SIZE + DPD_PER_CH_OTFG0_SIZE)
-#define MT_EE_CAL_DPD_SIZE			(780 * MT_EE_CAL_UNIT)
+
+enum mt7996_prek_rev {
+	GROUP_SIZE_2G,
+	GROUP_SIZE_5G,
+	GROUP_SIZE_6G,
+	ADCDCOC_SIZE_2G,
+	ADCDCOC_SIZE_5G,
+	ADCDCOC_SIZE_6G,
+	DPD_LEGACY_SIZE,
+	DPD_MEM_SIZE,
+	DPD_OTFG0_SIZE,
+};
+
+static const u32 mt7996_prek_rev[] = {
+	[GROUP_SIZE_2G] =			4 * MT_EE_CAL_UNIT,
+	[GROUP_SIZE_5G] =			45 * MT_EE_CAL_UNIT,
+	[GROUP_SIZE_6G] =			125 * MT_EE_CAL_UNIT,
+	[ADCDCOC_SIZE_2G] =			4 * 4,
+	[ADCDCOC_SIZE_5G] =			4 * 4,
+	[ADCDCOC_SIZE_6G] =			4 * 5,
+	[DPD_LEGACY_SIZE] =			4 * MT_EE_CAL_UNIT,
+	[DPD_MEM_SIZE] =			13 * MT_EE_CAL_UNIT,
+	[DPD_OTFG0_SIZE] =			2 * MT_EE_CAL_UNIT,
+};
+
+/* kite 2/5g config */
+static const u32 mt7992_prek_rev[] = {
+	[GROUP_SIZE_2G] =			4 * MT_EE_CAL_UNIT,
+	[GROUP_SIZE_5G] =			110 * MT_EE_CAL_UNIT,
+	[GROUP_SIZE_6G] =			0,
+	[ADCDCOC_SIZE_2G] =			4 * 4,
+	[ADCDCOC_SIZE_5G] =			4 * 5,
+	[ADCDCOC_SIZE_6G] =			0,
+	[DPD_LEGACY_SIZE] =			5 * MT_EE_CAL_UNIT,
+	[DPD_MEM_SIZE] =			16 * MT_EE_CAL_UNIT,
+	[DPD_OTFG0_SIZE] =			2 * MT_EE_CAL_UNIT,
+};
 
 extern const struct ieee80211_channel dpd_2g_ch_list_bw20[];
-extern const u32 dpd_2g_bw20_ch_num;
 extern const struct ieee80211_channel dpd_5g_skip_ch_list[];
-extern const u32 dpd_5g_skip_ch_num;
+extern const struct ieee80211_channel dpd_5g_ch_list_bw80[];
 extern const struct ieee80211_channel dpd_5g_ch_list_bw160[];
-extern const u32 dpd_5g_bw160_ch_num;
+extern const struct ieee80211_channel dpd_6g_ch_list_bw80[];
 extern const struct ieee80211_channel dpd_6g_ch_list_bw160[];
-extern const u32 dpd_6g_bw160_ch_num;
 extern const struct ieee80211_channel dpd_6g_ch_list_bw320[];
-extern const u32 dpd_6g_bw320_ch_num;
+
+#define PREK(id)				(dev->prek.rev[(id)])
+#define DPD_CH_NUM(_type)			(dev->prek.dpd_ch_num[DPD_CH_NUM_##_type])
+#define MT_EE_CAL_GROUP_SIZE			(PREK(GROUP_SIZE_2G) + PREK(GROUP_SIZE_5G) + \
+						 PREK(GROUP_SIZE_6G) + PREK(ADCDCOC_SIZE_2G) + \
+						 PREK(ADCDCOC_SIZE_5G) + PREK(ADCDCOC_SIZE_6G))
+#define DPD_PER_CH_BW20_SIZE			(PREK(DPD_LEGACY_SIZE) + PREK(DPD_OTFG0_SIZE))
+#define DPD_PER_CH_GT_BW20_SIZE			(PREK(DPD_MEM_SIZE) + PREK(DPD_OTFG0_SIZE))
+#define MT_EE_CAL_DPD_SIZE_2G			(DPD_CH_NUM(BW20_2G) * DPD_PER_CH_BW20_SIZE)
+#define MT_EE_CAL_DPD_SIZE_5G			(DPD_CH_NUM(BW20_5G) * DPD_PER_CH_BW20_SIZE + \
+						 DPD_CH_NUM(BW80_5G) * DPD_PER_CH_GT_BW20_SIZE + \
+						 DPD_CH_NUM(BW160_5G) * DPD_PER_CH_GT_BW20_SIZE)
+#define MT_EE_CAL_DPD_SIZE_6G			(DPD_CH_NUM(BW20_6G) * DPD_PER_CH_BW20_SIZE + \
+						 DPD_CH_NUM(BW80_6G) * DPD_PER_CH_GT_BW20_SIZE + \
+						 DPD_CH_NUM(BW160_6G) * DPD_PER_CH_GT_BW20_SIZE + \
+						 DPD_CH_NUM(BW320_6G) * DPD_PER_CH_GT_BW20_SIZE)
+#define MT_EE_CAL_DPD_SIZE			(MT_EE_CAL_DPD_SIZE_2G + MT_EE_CAL_DPD_SIZE_5G + \
+						 MT_EE_CAL_DPD_SIZE_6G)
 
 #define RF_DPD_FLAT_CAL				BIT(28)
 #define RF_PRE_CAL				BIT(29)
diff --git a/mt7996/mcu.c b/mt7996/mcu.c
index cf46fee4..a39b8bab 100644
--- a/mt7996/mcu.c
+++ b/mt7996/mcu.c
@@ -3749,13 +3749,11 @@ int mt7996_mcu_apply_tx_dpd(struct mt7996_phy *phy)
 	enum nl80211_chan_width bw = chandef->width;
 	const struct ieee80211_channel *chan_list;
 	u32 cal_id, chan_list_size, base_offset = 0, offs = MT_EE_DO_PRE_CAL;
-	u32 dpd_size_2g, dpd_size_5g, per_chan_size = DPD_PER_CH_BW20_SIZE;
+	u32 per_chan_size = DPD_PER_CH_BW20_SIZE;
 	u16 channel = ieee80211_frequency_to_channel(chandef->center_freq1);
 	u8 dpd_mask, *cal = dev->cal, *eeprom = dev->mt76.eeprom.data;
 	int idx, i, ret;
-
-	dpd_size_2g = mt7996_get_dpd_per_band_size(dev, NL80211_BAND_2GHZ);
-	dpd_size_5g = mt7996_get_dpd_per_band_size(dev, NL80211_BAND_5GHZ);
+	bool has_skip_ch = (band == NL80211_BAND_5GHZ);
 
 	switch (band) {
 	case NL80211_BAND_2GHZ:
@@ -3771,27 +3769,35 @@ int mt7996_mcu_apply_tx_dpd(struct mt7996_phy *phy)
 			return 0;
 		cal_id = RF_DPD_FLAT_CAL;
 		chan_list = dpd_2g_ch_list_bw20;
-		chan_list_size = dpd_2g_bw20_ch_num;
+		chan_list_size = DPD_CH_NUM(BW20_2G);
 		break;
 	case NL80211_BAND_5GHZ:
 		dpd_mask = MT_EE_WIFI_CAL_DPD_5G;
 		cal_id = RF_DPD_FLAT_5G_CAL;
 		chan_list = mphy->sband_5g.sband.channels;
 		chan_list_size = mphy->sband_5g.sband.n_channels;
-		base_offset += dpd_size_2g;
+		base_offset += MT_EE_CAL_DPD_SIZE_2G;
 		if (bw == NL80211_CHAN_WIDTH_160) {
-			base_offset += (mphy->sband_5g.sband.n_channels - dpd_5g_skip_ch_num) *
-				       DPD_PER_CH_BW20_SIZE;
+			base_offset += DPD_CH_NUM(BW20_5G) * DPD_PER_CH_BW20_SIZE +
+				       DPD_CH_NUM(BW80_5G) * DPD_PER_CH_GT_BW20_SIZE;
 			per_chan_size = DPD_PER_CH_GT_BW20_SIZE;
 			cal_id = RF_DPD_FLAT_5G_MEM_CAL;
 			chan_list = dpd_5g_ch_list_bw160;
-			chan_list_size = dpd_5g_bw160_ch_num;
+			chan_list_size = DPD_CH_NUM(BW160_5G);
+			has_skip_ch = false;
+		} else if (is_mt7992(&dev->mt76) && bw == NL80211_CHAN_WIDTH_80) {
+			base_offset += DPD_CH_NUM(BW20_5G) * DPD_PER_CH_BW20_SIZE;
+			per_chan_size = DPD_PER_CH_GT_BW20_SIZE;
+			cal_id = RF_DPD_FLAT_5G_MEM_CAL;
+			chan_list = dpd_5g_ch_list_bw80;
+			chan_list_size = DPD_CH_NUM(BW80_5G);
+			has_skip_ch = false;
 		} else if (bw > NL80211_CHAN_WIDTH_20) {
 			/* apply (center channel - 2)'s dpd cal data for bw 40/80 channels */
 			channel -= 2;
 		}
 		if (channel >= dpd_5g_skip_ch_list[0].hw_value &&
-		    channel <= dpd_5g_skip_ch_list[dpd_5g_skip_ch_num - 1].hw_value)
+		    channel <= dpd_5g_skip_ch_list[DPD_CH_NUM(BW20_5G_SKIP) - 1].hw_value)
 			return 0;
 		break;
 	case NL80211_BAND_6GHZ:
@@ -3799,20 +3805,27 @@ int mt7996_mcu_apply_tx_dpd(struct mt7996_phy *phy)
 		cal_id = RF_DPD_FLAT_6G_CAL;
 		chan_list = mphy->sband_6g.sband.channels;
 		chan_list_size = mphy->sband_6g.sband.n_channels;
-		base_offset += dpd_size_2g + dpd_size_5g;
+		base_offset += MT_EE_CAL_DPD_SIZE_2G + MT_EE_CAL_DPD_SIZE_5G;
 		if (bw == NL80211_CHAN_WIDTH_160) {
 			base_offset += mphy->sband_6g.sband.n_channels * DPD_PER_CH_BW20_SIZE;
 			per_chan_size = DPD_PER_CH_GT_BW20_SIZE;
 			cal_id = RF_DPD_FLAT_6G_MEM_CAL;
 			chan_list = dpd_6g_ch_list_bw160;
-			chan_list_size = dpd_6g_bw160_ch_num;
-		} else if (bw == NL80211_CHAN_WIDTH_320) {
+			chan_list_size = DPD_CH_NUM(BW160_6G);
+		} else if (is_mt7996(&dev->mt76) && bw == NL80211_CHAN_WIDTH_320) {
 			base_offset += mphy->sband_6g.sband.n_channels * DPD_PER_CH_BW20_SIZE +
-				       dpd_6g_bw160_ch_num * DPD_PER_CH_GT_BW20_SIZE;
+				       DPD_CH_NUM(BW80_6G) * DPD_PER_CH_GT_BW20_SIZE +
+				       DPD_CH_NUM(BW160_6G) * DPD_PER_CH_GT_BW20_SIZE;
 			per_chan_size = DPD_PER_CH_GT_BW20_SIZE;
 			cal_id = RF_DPD_FLAT_6G_MEM_CAL;
 			chan_list = dpd_6g_ch_list_bw320;
-			chan_list_size = dpd_6g_bw320_ch_num;
+			chan_list_size = DPD_CH_NUM(BW320_6G);
+		} else if (is_mt7992(&dev->mt76) && bw == NL80211_CHAN_WIDTH_80) {
+			base_offset += mphy->sband_6g.sband.n_channels * DPD_PER_CH_BW20_SIZE;
+			per_chan_size = DPD_PER_CH_GT_BW20_SIZE;
+			cal_id = RF_DPD_FLAT_6G_MEM_CAL;
+			chan_list = dpd_6g_ch_list_bw80;
+			chan_list_size = DPD_CH_NUM(BW80_6G);
 		} else if (bw > NL80211_CHAN_WIDTH_20) {
 			/* apply (center channel - 2)'s dpd cal data for bw 40/80 channels */
 			channel -= 2;
@@ -3832,9 +3845,8 @@ int mt7996_mcu_apply_tx_dpd(struct mt7996_phy *phy)
 	if (idx == chan_list_size)
 		return -EINVAL;
 
-	if (band == NL80211_BAND_5GHZ && bw != NL80211_CHAN_WIDTH_160 &&
-	    channel > dpd_5g_skip_ch_list[dpd_5g_skip_ch_num - 1].hw_value)
-		idx -= dpd_5g_skip_ch_num;
+	if (has_skip_ch && channel > dpd_5g_skip_ch_list[DPD_CH_NUM(BW20_5G_SKIP) - 1].hw_value)
+		idx -= DPD_CH_NUM(BW20_5G_SKIP);
 
 	cal += MT_EE_CAL_GROUP_SIZE + base_offset + idx * per_chan_size;
 
diff --git a/mt7996/mt7996.h b/mt7996/mt7996.h
index f937008f..881328be 100644
--- a/mt7996/mt7996.h
+++ b/mt7996/mt7996.h
@@ -195,6 +195,19 @@ struct mt7996_twt_flow {
 
 DECLARE_EWMA(avg_signal, 10, 8)
 
+enum mt7996_dpd_ch_num {
+	DPD_CH_NUM_BW20_2G,
+	DPD_CH_NUM_BW20_5G,
+	DPD_CH_NUM_BW20_5G_SKIP,
+	DPD_CH_NUM_BW80_5G,
+	DPD_CH_NUM_BW160_5G,
+	DPD_CH_NUM_BW20_6G,
+	DPD_CH_NUM_BW80_6G,
+	DPD_CH_NUM_BW160_6G,
+	DPD_CH_NUM_BW320_6G,
+	DPD_CH_NUM_TYPE_MAX,
+};
+
 struct mt7996_sta {
 	struct mt76_wcid wcid; /* must be first */
 
@@ -457,6 +470,10 @@ struct mt7996_dev {
 
 	void *cal;
 	u32 cur_prek_offset;
+	struct {
+		const u32 *rev;
+		u8 dpd_ch_num[DPD_CH_NUM_TYPE_MAX];
+	} prek;
 
 	struct {
 		u16 table_mask;
@@ -593,7 +610,6 @@ int mt7996_eeprom_parse_hw_cap(struct mt7996_dev *dev, struct mt7996_phy *phy);
 int mt7996_eeprom_get_target_power(struct mt7996_dev *dev,
 				   struct ieee80211_channel *chan);
 s8 mt7996_eeprom_get_power_delta(struct mt7996_dev *dev, int band);
-int mt7996_get_dpd_per_band_size(struct mt7996_dev *dev, enum nl80211_band band);
 int mt7996_dma_init(struct mt7996_dev *dev);
 void mt7996_dma_reset(struct mt7996_dev *dev, bool force);
 void mt7996_dma_prefetch(struct mt7996_dev *dev);
diff --git a/mt7996/testmode.c b/mt7996/testmode.c
index 0dc6629d..44ec84cc 100644
--- a/mt7996/testmode.c
+++ b/mt7996/testmode.c
@@ -434,7 +434,7 @@ mt7996_tm_set_tx_cont(struct mt7996_phy *phy, bool en)
 static int
 mt7996_tm_group_prek(struct mt7996_phy *phy, enum mt76_testmode_state state)
 {
-	u8 *eeprom;
+	u8 *eeprom, do_precal;
 	u32 i, group_size, dpd_size, size, offs, *pre_cal;
 	int ret = 0;
 	struct mt7996_dev *dev = phy->dev;
@@ -462,6 +462,9 @@ mt7996_tm_group_prek(struct mt7996_phy *phy, enum mt76_testmode_state state)
 	dpd_size = MT_EE_CAL_DPD_SIZE;
 	size = group_size + dpd_size;
 	offs = MT_EE_DO_PRE_CAL;
+	do_precal = (MT_EE_WIFI_CAL_GROUP_2G * !!PREK(GROUP_SIZE_2G)) |
+		    (MT_EE_WIFI_CAL_GROUP_5G * !!PREK(GROUP_SIZE_5G)) |
+		    (MT_EE_WIFI_CAL_GROUP_6G * !!PREK(GROUP_SIZE_6G));
 
 	switch (state) {
 	case MT76_TM_STATE_GROUP_PREK:
@@ -476,13 +479,10 @@ mt7996_tm_group_prek(struct mt7996_phy *phy, enum mt76_testmode_state state)
 		wait_event_timeout(mdev->mcu.wait, dev->cur_prek_offset == group_size,
 				   30 * HZ);
 
-		if (ret) {
+		if (ret)
 			dev_err(dev->mt76.dev, "Group Pre-cal: mcu send msg failed!\n");
-			return ret;
-		}
-
-		if (!ret)
-			eeprom[offs] |= MT_EE_WIFI_CAL_GROUP;
+		else
+			eeprom[offs] |= do_precal;
 		break;
 	case MT76_TM_STATE_GROUP_PREK_DUMP:
 		pre_cal = (u32 *)dev->cal;
@@ -520,10 +520,12 @@ mt7996_tm_dpd_prek_send_req(struct mt7996_phy *phy, struct mt7996_tm_req *req,
 	struct mt76_phy *mphy = phy->mt76;
 	struct cfg80211_chan_def chandef_backup, *chandef = &mphy->chandef;
 	struct ieee80211_channel chan_backup;
-	int i, ret;
+	int i, ret, skip_ch_num = DPD_CH_NUM(BW20_5G_SKIP);
 
 	if (!chan_list)
 		return -EOPNOTSUPP;
+	if (!channel_size)
+		return 0;
 
 	req->rf_test.op.rf.param.cal_param.func_data = cpu_to_le32(func_data);
 
@@ -533,7 +535,7 @@ mt7996_tm_dpd_prek_send_req(struct mt7996_phy *phy, struct mt7996_tm_req *req,
 	for (i = 0; i < channel_size; i++) {
 		if (chan_list[i].band == NL80211_BAND_5GHZ &&
 		    chan_list[i].hw_value >= dpd_5g_skip_ch_list[0].hw_value &&
-		    chan_list[i].hw_value <= dpd_5g_skip_ch_list[dpd_5g_skip_ch_num - 1].hw_value)
+		    chan_list[i].hw_value <= dpd_5g_skip_ch_list[skip_ch_num - 1].hw_value)
 			continue;
 
 		memcpy(chandef->chan, &chan_list[i], sizeof(struct ieee80211_channel));
@@ -602,11 +604,11 @@ mt7996_tm_dpd_prek(struct mt7996_phy *phy, enum mt76_testmode_state state)
 	switch (state) {
 	case MT76_TM_STATE_DPD_2G:
 		ret = mt7996_tm_dpd_prek_send_req(phy, &req, dpd_2g_ch_list_bw20,
-						  dpd_2g_bw20_ch_num,
+						  DPD_CH_NUM(BW20_2G),
 						  NL80211_CHAN_WIDTH_20, RF_DPD_FLAT_CAL);
-		wait_on_prek_offset += dpd_2g_bw20_ch_num * DPD_PER_CH_BW20_SIZE;
-		wait_event_timeout(mdev->mcu.wait,
-				   dev->cur_prek_offset == wait_on_prek_offset, 30 * HZ);
+		wait_on_prek_offset += DPD_CH_NUM(BW20_2G) * DPD_PER_CH_BW20_SIZE;
+		wait_event_timeout(mdev->mcu.wait, dev->cur_prek_offset == wait_on_prek_offset,
+				   30 * HZ);
 
 		do_precal = MT_EE_WIFI_CAL_DPD_2G;
 		break;
@@ -617,18 +619,27 @@ mt7996_tm_dpd_prek(struct mt7996_phy *phy, enum mt76_testmode_state state)
 						  NL80211_CHAN_WIDTH_20, RF_DPD_FLAT_5G_CAL);
 		if (ret)
 			return ret;
-		wait_on_prek_offset += (mphy->sband_5g.sband.n_channels - dpd_5g_skip_ch_num) *
-				       DPD_PER_CH_BW20_SIZE;
-		wait_event_timeout(mdev->mcu.wait,
-				   dev->cur_prek_offset == wait_on_prek_offset, 30 * HZ);
+		wait_on_prek_offset += DPD_CH_NUM(BW20_5G) * DPD_PER_CH_BW20_SIZE;
+		wait_event_timeout(mdev->mcu.wait, dev->cur_prek_offset == wait_on_prek_offset,
+				   30 * HZ);
+
+		/* 5g channel bw80 calibration */
+		ret = mt7996_tm_dpd_prek_send_req(phy, &req, dpd_5g_ch_list_bw80,
+						  DPD_CH_NUM(BW80_5G),
+						  NL80211_CHAN_WIDTH_80, RF_DPD_FLAT_5G_MEM_CAL);
+		if (ret)
+			return ret;
+		wait_on_prek_offset += DPD_CH_NUM(BW80_5G) * DPD_PER_CH_GT_BW20_SIZE;
+		wait_event_timeout(mdev->mcu.wait, dev->cur_prek_offset == wait_on_prek_offset,
+				   30 * HZ);
 
 		/* 5g channel bw160 calibration */
 		ret = mt7996_tm_dpd_prek_send_req(phy, &req, dpd_5g_ch_list_bw160,
-						  dpd_5g_bw160_ch_num,
+						  DPD_CH_NUM(BW160_5G),
 						  NL80211_CHAN_WIDTH_160, RF_DPD_FLAT_5G_MEM_CAL);
-		wait_on_prek_offset += dpd_5g_bw160_ch_num * DPD_PER_CH_GT_BW20_SIZE;
-		wait_event_timeout(mdev->mcu.wait,
-				   dev->cur_prek_offset == wait_on_prek_offset, 30 * HZ);
+		wait_on_prek_offset += DPD_CH_NUM(BW160_5G) * DPD_PER_CH_GT_BW20_SIZE;
+		wait_event_timeout(mdev->mcu.wait, dev->cur_prek_offset == wait_on_prek_offset,
+				   30 * HZ);
 
 		do_precal = MT_EE_WIFI_CAL_DPD_5G;
 		break;
@@ -639,27 +650,37 @@ mt7996_tm_dpd_prek(struct mt7996_phy *phy, enum mt76_testmode_state state)
 						  NL80211_CHAN_WIDTH_20, RF_DPD_FLAT_6G_CAL);
 		if (ret)
 			return ret;
-		wait_on_prek_offset += mphy->sband_6g.sband.n_channels * DPD_PER_CH_BW20_SIZE;
-		wait_event_timeout(mdev->mcu.wait,
-				   dev->cur_prek_offset == wait_on_prek_offset, 30 * HZ);
+		wait_on_prek_offset += DPD_CH_NUM(BW20_6G) * DPD_PER_CH_BW20_SIZE;
+		wait_event_timeout(mdev->mcu.wait, dev->cur_prek_offset == wait_on_prek_offset,
+				   30 * HZ);
+
+		/* 6g channel bw80 calibration */
+		ret = mt7996_tm_dpd_prek_send_req(phy, &req, dpd_6g_ch_list_bw80,
+						  DPD_CH_NUM(BW80_6G),
+						  NL80211_CHAN_WIDTH_80, RF_DPD_FLAT_6G_MEM_CAL);
+		if (ret)
+			return ret;
+		wait_on_prek_offset += DPD_CH_NUM(BW80_6G) * DPD_PER_CH_GT_BW20_SIZE;
+		wait_event_timeout(mdev->mcu.wait, dev->cur_prek_offset == wait_on_prek_offset,
+				   30 * HZ);
 
 		/* 6g channel bw160 calibration */
 		ret = mt7996_tm_dpd_prek_send_req(phy, &req, dpd_6g_ch_list_bw160,
-						  dpd_6g_bw160_ch_num,
+						  DPD_CH_NUM(BW160_6G),
 						  NL80211_CHAN_WIDTH_160, RF_DPD_FLAT_6G_MEM_CAL);
 		if (ret)
 			return ret;
-		wait_on_prek_offset += dpd_6g_bw160_ch_num * DPD_PER_CH_GT_BW20_SIZE;
-		wait_event_timeout(mdev->mcu.wait,
-				   dev->cur_prek_offset == wait_on_prek_offset, 30 * HZ);
+		wait_on_prek_offset += DPD_CH_NUM(BW160_6G) * DPD_PER_CH_GT_BW20_SIZE;
+		wait_event_timeout(mdev->mcu.wait, dev->cur_prek_offset == wait_on_prek_offset,
+				   30 * HZ);
 
 		/* 6g channel bw320 calibration */
 		ret = mt7996_tm_dpd_prek_send_req(phy, &req, dpd_6g_ch_list_bw320,
-						  dpd_6g_bw320_ch_num,
+						  DPD_CH_NUM(BW320_6G),
 						  NL80211_CHAN_WIDTH_320, RF_DPD_FLAT_6G_MEM_CAL);
-		wait_on_prek_offset += dpd_6g_bw320_ch_num * DPD_PER_CH_GT_BW20_SIZE;
-		wait_event_timeout(mdev->mcu.wait,
-				   dev->cur_prek_offset == wait_on_prek_offset, 30 * HZ);
+		wait_on_prek_offset += DPD_CH_NUM(BW320_6G) * DPD_PER_CH_GT_BW20_SIZE;
+		wait_event_timeout(mdev->mcu.wait, dev->cur_prek_offset == wait_on_prek_offset,
+				   30 * HZ);
 
 		do_precal = MT_EE_WIFI_CAL_DPD_6G;
 		break;
@@ -732,9 +753,9 @@ mt7996_tm_dump_precal(struct mt76_phy *mphy, struct sk_buff *msg, int flag, int
 	eeprom = dev->mt76.eeprom.data;
 	offs = MT_EE_DO_PRE_CAL;
 
-	dpd_size_2g = mt7996_get_dpd_per_band_size(dev, NL80211_BAND_2GHZ);
-	dpd_size_5g = mt7996_get_dpd_per_band_size(dev, NL80211_BAND_5GHZ);
-	dpd_size_6g = mt7996_get_dpd_per_band_size(dev, NL80211_BAND_6GHZ);
+	dpd_size_2g = MT_EE_CAL_DPD_SIZE_2G;
+	dpd_size_5g = MT_EE_CAL_DPD_SIZE_5G;
+	dpd_size_6g = MT_EE_CAL_DPD_SIZE_6G;
 
 	switch (type) {
 	case PREK_SYNC_ALL:
@@ -810,9 +831,9 @@ mt7996_tm_re_cal_event(struct mt7996_dev *dev, struct mt7996_tm_rf_test_result *
 	u8 *pre_cal;
 
 	pre_cal = dev->cal;
-	dpd_size_2g = mt7996_get_dpd_per_band_size(dev, NL80211_BAND_2GHZ);
-	dpd_size_5g = mt7996_get_dpd_per_band_size(dev, NL80211_BAND_5GHZ);
-	dpd_size_6g = mt7996_get_dpd_per_band_size(dev, NL80211_BAND_6GHZ);
+	dpd_size_2g = MT_EE_CAL_DPD_SIZE_2G;
+	dpd_size_5g = MT_EE_CAL_DPD_SIZE_5G;
+	dpd_size_6g = MT_EE_CAL_DPD_SIZE_6G;
 
 	cal_idx = le32_to_cpu(data->cal_idx);
 	cal_type = le32_to_cpu(data->cal_type);
diff --git a/testmode.c b/testmode.c
index a5c07f8d..09ab68ce 100644
--- a/testmode.c
+++ b/testmode.c
@@ -37,6 +37,11 @@ const struct nla_policy mt76_tm_policy[NUM_MT76_TM_ATTRS] = {
 };
 EXPORT_SYMBOL_GPL(mt76_tm_policy);
 
+static inline bool mt76_testmode_offload(struct mt76_dev *dev)
+{
+	return is_mt7996(dev) || is_mt7992(dev);
+}
+
 void mt76_testmode_tx_pending(struct mt76_phy *phy)
 {
 	struct mt76_testmode_data *td = &phy->test;
@@ -197,7 +202,7 @@ mt76_testmode_tx_init(struct mt76_phy *phy)
 	u8 max_nss = hweight8(phy->antenna_mask);
 	int ret;
 
-	if (is_mt7996(phy->dev))
+	if (mt76_testmode_offload(phy->dev))
 		return 0;
 
 	ret = mt76_testmode_alloc_skb(phy, td->tx_mpdu_len);
@@ -293,7 +298,7 @@ mt76_testmode_tx_start(struct mt76_phy *phy)
 	td->tx_done = 0;
 	td->tx_pending = td->tx_count;
 
-	if (!is_mt7996(dev))
+	if (!mt76_testmode_offload(dev))
 		mt76_worker_schedule(&dev->tx_worker);
 }
 
@@ -303,7 +308,7 @@ mt76_testmode_tx_stop(struct mt76_phy *phy)
 	struct mt76_testmode_data *td = &phy->test;
 	struct mt76_dev *dev = phy->dev;
 
-	if (is_mt7996(dev) && dev->test_ops->tx_stop) {
+	if (mt76_testmode_offload(dev) && dev->test_ops->tx_stop) {
 		dev->test_ops->tx_stop(phy);
 		return;
 	}
-- 
2.18.0

