> -----Original Message----- > From: Ryder Lee <ryder.lee@xxxxxxxxxxxx> > Sent: Thursday, October 26, 2023 7:34 AM > To: Felix Fietkau <nbd@xxxxxxxx>; linux-wireless@xxxxxxxxxxxxxxx > Cc: Lorenzo Bianconi <lorenzo.bianconi@xxxxxxxxxx>; Shayne Chen <shayne.chen@xxxxxxxxxxxx>; Evelyn Tsai > <evelyn.tsai@xxxxxxxxxxxx>; linux-mediatek@xxxxxxxxxxxxxxxxxxx; Peter Chiu <chui-hao.chiu@xxxxxxxxxxxx>; > Ryder Lee <ryder.lee@xxxxxxxxxxxx> > Subject: [PATCH 1/2] wifi: mt76: mt7915: enable mt7986 and mt7916 pre-calibration support > > From: Peter Chiu <chui-hao.chiu@xxxxxxxxxxxx> > > Add pre-calibration for mt7986 and mt7916. Their group cal size are > 54k and 94k for 2G + 5G and 2G + 6G, respectively. DPD size is 300k. s/\([256]\)G/\1GHz/ > > Signed-off-by: Peter Chiu <chui-hao.chiu@xxxxxxxxxxxx> > Signed-off-by: Ryder Lee <ryder.lee@xxxxxxxxxxxx> > --- > .../wireless/mediatek/mt76/mt7915/eeprom.c | 11 +- > .../wireless/mediatek/mt76/mt7915/eeprom.h | 34 +++++- > .../net/wireless/mediatek/mt76/mt7915/mcu.c | 100 ++++++++++++++---- > 3 files changed, 114 insertions(+), 31 deletions(-) > > diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.h > b/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.h > index f3e56817d36e..84c1903b2a6c 100644 > --- a/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.h > +++ b/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.h [...] > @@ -155,6 +164,27 @@ mt7915_tssi_enabled(struct mt7915_dev *dev, enum nl80211_band band) > return val & MT_EE_WIFI_CONF7_TSSI0_5G; > } > > +static inline u32 > +mt7915_get_cal_group_size(struct mt7915_dev *dev) > +{ > + if (is_mt7915(&dev->mt76)) { > + return MT_EE_CAL_GROUP_SIZE_7915; > + } else if (is_mt7916(&dev->mt76)) { > + u8 *eep = dev->mt76.eeprom.data; > + u32 val = eep[MT_EE_WIFI_CONF + 1]; > + > + val = FIELD_GET(MT_EE_WIFI_CONF0_BAND_SEL, val); val = u32_get_bits(val, MT_EE_WIFI_CONF0_BAND_SEL); > + > + return (val == MT_EE_V2_BAND_SEL_6GHZ) ? > + MT_EE_CAL_GROUP_SIZE_7916_6G : > + MT_EE_CAL_GROUP_SIZE_7916; shouldn't it align open parenthesis? return val == MT_EE_V2_BAND_SEL_6GHZ ? MT_EE_CAL_GROUP_SIZE_7916_6G : MT_EE_CAL_GROUP_SIZE_7916; > + } else if (mt7915_check_adie(dev, false)) { > + return MT_EE_CAL_GROUP_SIZE_7976; > + } else { > + return MT_EE_CAL_GROUP_SIZE_7975; > + } > +} > + > extern const u8 mt7915_sku_group_len[MAX_SKU_RATE_GROUP_NUM]; > > #endif > diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c > b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c > index b22f06d4411a..da3ee9f91704 100644 > --- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c > +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c > @@ -2904,9 +2904,10 @@ static int mt7915_mcu_set_pre_cal(struct mt7915_dev *dev, u8 idx, > int mt7915_mcu_apply_group_cal(struct mt7915_dev *dev) > { > u8 idx = 0, *cal = dev->cal, *eep = dev->mt76.eeprom.data; > - u32 total = MT_EE_CAL_GROUP_SIZE; > + u32 total = mt7915_get_cal_group_size(dev); > + u32 offs = is_mt7915(&dev->mt76) ? MT_EE_DO_PRE_CAL : MT_EE_DO_PRE_CAL_V2; in reverse X'mas tree order? > > - if (!(eep[MT_EE_DO_PRE_CAL] & MT_EE_WIFI_CAL_GROUP)) > + if (!(eep[offs] & MT_EE_WIFI_CAL_GROUP)) > return 0; > > /* > @@ -2942,9 +2943,9 @@ static int mt7915_find_freq_idx(const u16 *freqs, int n_freqs, u16 cur) > return -1; > } > > -static int mt7915_dpd_freq_idx(u16 freq, u8 bw) > +static int mt7915_dpd_freq_idx(struct mt7915_dev *dev, u16 freq, u8 bw) > { > - static const u16 freq_list[] = { > + const u16 freq_list_v1[] = { Without 'static', it will unnecessarily make a copy to stack at runtime. > 5180, 5200, 5220, 5240, > 5260, 5280, 5300, 5320, > 5500, 5520, 5540, 5560, > @@ -2952,65 +2953,118 @@ static int mt7915_dpd_freq_idx(u16 freq, u8 bw) > 5660, 5680, 5700, 5745, > 5765, 5785, 5805, 5825 > }; > - int offset_2g = ARRAY_SIZE(freq_list); > - int idx; > + const u16 freq_list_v2[] = { static const > + /* 6G BW20 */ > + 5955, 5975, 5995, 6015, > + 6035, 6055, 6075, 6095, > + 6115, 6135, 6155, 6175, > + 6195, 6215, 6235, 6255, > + 6275, 6295, 6315, 6335, > + 6355, 6375, 6395, 6415, > + 6435, 6455, 6475, 6495, > + 6515, 6535, 6555, 6575, > + 6595, 6615, 6635, 6655, > + 6675, 6695, 6715, 6735, > + 6755, 6775, 6795, 6815, > + 6835, 6855, 6875, 6895, > + 6915, 6935, 6955, 6975, > + 6995, 7015, 7035, 7055, > + 7075, 7095, 7115, > + /* 6G BW160 */ > + 6025, 6185, 6345, 6505, > + 6665, 6825, 6985, > + /* 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 > + }; [...]