| From 14b505d62c856f210ce46e831886ae0fab253252 Mon Sep 17 00:00:00 2001 |
| From: StanleyYP Wang <StanleyYP.Wang@mediatek.com> |
| Date: Tue, 31 Oct 2023 16:29:13 +0800 |
| Subject: [PATCH] wifi: mt76: testmode: add cheetah support |
| |
| Signed-off-by: StanleyYP Wang <StanleyYP.Wang@mediatek.com> |
| --- |
| mt7915/eeprom.c | 3 +-- |
| mt7915/eeprom.h | 12 ++++++++++++ |
| mt7915/mcu.c | 21 +++++++++++++++++++-- |
| mt7915/testmode.c | 9 +++++---- |
| 4 files changed, 37 insertions(+), 8 deletions(-) |
| |
| diff --git a/mt7915/eeprom.c b/mt7915/eeprom.c |
| index f8166dd..50ed7ba 100644 |
| --- a/mt7915/eeprom.c |
| +++ b/mt7915/eeprom.c |
| @@ -39,8 +39,7 @@ static int mt7915_eeprom_load_precal(struct mt7915_dev *dev) |
| if (!dev->flash_mode || !val) |
| return 0; |
| |
| - size = mt7915_get_cal_group_size(dev) + |
| - (is_mt7915(&dev->mt76) ? MT_EE_CAL_DPD_SIZE_V1 : MT_EE_CAL_DPD_SIZE_V2); |
| + size = mt7915_get_cal_group_size(dev) + mt7915_get_cal_dpd_size(dev); |
| |
| dev->cal = devm_kzalloc(mdev->dev, size, GFP_KERNEL); |
| if (!dev->cal) |
| diff --git a/mt7915/eeprom.h b/mt7915/eeprom.h |
| index a1ab05a..99101f9 100644 |
| --- a/mt7915/eeprom.h |
| +++ b/mt7915/eeprom.h |
| @@ -52,6 +52,7 @@ enum mt7915_eeprom_field { |
| #define MT_EE_CAL_GROUP_SIZE_7916_6G (94 * MT_EE_CAL_UNIT + 16) |
| #define MT_EE_CAL_DPD_SIZE_V1 (54 * MT_EE_CAL_UNIT) |
| #define MT_EE_CAL_DPD_SIZE_V2 (300 * MT_EE_CAL_UNIT) |
| +#define MT_EE_CAL_DPD_SIZE_V2_7981 (102 * MT_EE_CAL_UNIT) /* no 6g dpd data */ |
| |
| #define MT_EE_WIFI_CONF0_TX_PATH GENMASK(2, 0) |
| #define MT_EE_WIFI_CONF0_BAND_SEL GENMASK(7, 6) |
| @@ -192,6 +193,17 @@ mt7915_get_cal_group_size(struct mt7915_dev *dev) |
| } |
| } |
| |
| +static inline u32 |
| +mt7915_get_cal_dpd_size(struct mt7915_dev *dev) |
| +{ |
| + if (is_mt7915(&dev->mt76)) |
| + return MT_EE_CAL_DPD_SIZE_V1; |
| + else if (is_mt7981(&dev->mt76)) |
| + return MT_EE_CAL_DPD_SIZE_V2_7981; |
| + else |
| + return MT_EE_CAL_DPD_SIZE_V2; |
| +} |
| + |
| extern const u8 mt7915_sku_group_len[MAX_SKU_RATE_GROUP_NUM]; |
| |
| #endif |
| diff --git a/mt7915/mcu.c b/mt7915/mcu.c |
| index cd4f472..492cfcd 100644 |
| --- a/mt7915/mcu.c |
| +++ b/mt7915/mcu.c |
| @@ -3035,13 +3035,30 @@ static int mt7915_dpd_freq_idx(struct mt7915_dev *dev, u16 freq, u8 bw) |
| /* 5G BW160 */ |
| 5250, 5570, 5815 |
| }; |
| + const u16 freq_list_v2_7981[] = { |
| + /* 5G BW20 */ |
| + 5180, 5200, 5220, 5240, |
| + 5260, 5280, 5300, 5320, |
| + 5500, 5520, 5540, 5560, |
| + 5580, 5600, 5620, 5640, |
| + 5660, 5680, 5700, 5720, |
| + 5745, 5765, 5785, 5805, |
| + 5825, 5845, 5865, 5885, |
| + /* 5G BW160 */ |
| + 5250, 5570, 5815 |
| + }; |
| const u16 *freq_list = freq_list_v1; |
| int n_freqs = ARRAY_SIZE(freq_list_v1); |
| int idx; |
| |
| if (!is_mt7915(&dev->mt76)) { |
| - freq_list = freq_list_v2; |
| - n_freqs = ARRAY_SIZE(freq_list_v2); |
| + if (is_mt7981(&dev->mt76)) { |
| + freq_list = freq_list_v2_7981; |
| + n_freqs = ARRAY_SIZE(freq_list_v2_7981); |
| + } else { |
| + freq_list = freq_list_v2; |
| + n_freqs = ARRAY_SIZE(freq_list_v2); |
| + } |
| } |
| |
| if (freq < 4000) { |
| diff --git a/mt7915/testmode.c b/mt7915/testmode.c |
| index 5e20cb9..4aa7eb6 100644 |
| --- a/mt7915/testmode.c |
| +++ b/mt7915/testmode.c |
| @@ -2149,7 +2149,7 @@ mt7915_tm_group_prek(struct mt7915_phy *phy, enum mt76_testmode_state state) |
| eeprom = mdev->eeprom.data; |
| dev->cur_prek_offset = 0; |
| group_size = mt7915_get_cal_group_size(dev); |
| - dpd_size = is_mt7915(&dev->mt76) ? MT_EE_CAL_DPD_SIZE_V1 : MT_EE_CAL_DPD_SIZE_V2; |
| + dpd_size = mt7915_get_cal_dpd_size(dev); |
| size = group_size + dpd_size; |
| offs = is_mt7915(&dev->mt76) ? MT_EE_DO_PRE_CAL : MT_EE_DO_PRE_CAL_V2; |
| |
| @@ -2231,11 +2231,11 @@ mt7915_tm_dpd_prek(struct mt7915_phy *phy, enum mt76_testmode_state state) |
| eeprom = mdev->eeprom.data; |
| dev->cur_prek_offset = 0; |
| group_size = mt7915_get_cal_group_size(dev); |
| + dpd_size = mt7915_get_cal_dpd_size(dev); |
| dev->dpd_chan_num_2g = hweight32(DPD_2G_CH_BW20_BITMAP_0); |
| if (is_mt7915(&dev->mt76)) { |
| dev->dpd_chan_num_5g = hweight32(DPD_5G_CH_BW20_BITMAP_7915_0); |
| dev->dpd_chan_num_6g = 0; |
| - dpd_size = MT_EE_CAL_DPD_SIZE_V1; |
| offs = MT_EE_DO_PRE_CAL; |
| } else { |
| dev->dpd_chan_num_5g = hweight32(DPD_5G_CH_BW20_BITMAP_0) + |
| @@ -2244,7 +2244,8 @@ mt7915_tm_dpd_prek(struct mt7915_phy *phy, enum mt76_testmode_state state) |
| dev->dpd_chan_num_6g = hweight32(DPD_6G_CH_BW20_BITMAP_0) + |
| hweight32(DPD_6G_CH_BW20_BITMAP_1) + |
| ARRAY_SIZE(bw160_6g_freq); |
| - dpd_size = MT_EE_CAL_DPD_SIZE_V2; |
| + if (is_mt7981(&dev->mt76)) |
| + dev->dpd_chan_num_6g = 0; |
| offs = MT_EE_DO_PRE_CAL_V2; |
| } |
| size = group_size + dpd_size; |
| @@ -2707,7 +2708,7 @@ mt7915_tm_dump_precal(struct mt76_phy *mphy, struct sk_buff *msg, int flag, int |
| } |
| |
| group_size = mt7915_get_cal_group_size(dev); |
| - dpd_size = is_mt7915(&dev->mt76) ? MT_EE_CAL_DPD_SIZE_V1 : MT_EE_CAL_DPD_SIZE_V2; |
| + dpd_size = mt7915_get_cal_dpd_size(dev); |
| dpd_per_chan_size = is_mt7915(&dev->mt76) ? 2 : 3; |
| total_size = group_size + dpd_size; |
| pre_cal = dev->cal; |
| -- |
| 2.18.0 |
| |