Lines Matching refs:rtwdev
13 static u16 get_max_amsdu_len(struct rtw89_dev *rtwdev, in get_max_amsdu_len() argument
47 return rtwdev->chip->max_amsdu_limit; in get_max_amsdu_len()
99 static u64 rtw89_phy_ra_mask_rssi(struct rtw89_dev *rtwdev, u8 rssi, in rtw89_phy_ra_mask_rssi() argument
131 static u64 rtw89_phy_ra_mask_cfg(struct rtw89_dev *rtwdev, struct rtw89_sta *rtwsta) in rtw89_phy_ra_mask_cfg() argument
133 struct rtw89_hal *hal = &rtwdev->hal; in rtw89_phy_ra_mask_cfg()
154 rtw89_warn(rtwdev, "unhandled band type %d\n", hal->current_band_type); in rtw89_phy_ra_mask_cfg()
188 static void rtw89_phy_ra_sta_update(struct rtw89_dev *rtwdev, in rtw89_phy_ra_sta_update() argument
246 if (rtwdev->hal.current_band_type == RTW89_BAND_2G) { in rtw89_phy_ra_sta_update()
256 for (i = 0; i < rtwdev->hal.tx_nss; i++) in rtw89_phy_ra_sta_update()
272 ra_mask &= rtw89_phy_ra_mask_rssi(rtwdev, rssi, 0); in rtw89_phy_ra_sta_update()
273 ra_mask &= rtw89_phy_ra_mask_cfg(rtwdev, rtwsta); in rtw89_phy_ra_sta_update()
299 ra_mask = rtw89_phy_ra_mask_cfg(rtwdev, rtwsta); in rtw89_phy_ra_sta_update()
309 ra->ss_num = min(sta->rx_nss, rtwdev->hal.tx_nss) - 1; in rtw89_phy_ra_sta_update()
326 void rtw89_phy_ra_updata_sta(struct rtw89_dev *rtwdev, struct ieee80211_sta *sta) in rtw89_phy_ra_updata_sta() argument
331 rtw89_phy_ra_sta_update(rtwdev, sta, false); in rtw89_phy_ra_updata_sta()
333 rtw89_debug(rtwdev, RTW89_DBG_RA, in rtw89_phy_ra_updata_sta()
341 rtw89_fw_h2c_ra(rtwdev, ra, false); in rtw89_phy_ra_updata_sta()
372 void rtw89_phy_rate_pattern_vif(struct rtw89_dev *rtwdev, in rtw89_phy_rate_pattern_vif() argument
391 u8 band = rtwdev->hal.current_band_type; in rtw89_phy_rate_pattern_vif()
392 u8 tx_nss = rtwdev->hal.tx_nss; in rtw89_phy_rate_pattern_vif()
420 sband = rtwdev->hw->wiphy->bands[band]; in rtw89_phy_rate_pattern_vif()
440 rtw89_debug(rtwdev, RTW89_DBG_RA, in rtw89_phy_rate_pattern_vif()
449 rtw89_debug(rtwdev, RTW89_DBG_RA, "unset rate pattern\n"); in rtw89_phy_rate_pattern_vif()
454 struct rtw89_dev *rtwdev = (struct rtw89_dev *)data; in rtw89_phy_ra_updata_sta_iter() local
456 rtw89_phy_ra_updata_sta(rtwdev, sta); in rtw89_phy_ra_updata_sta_iter()
459 void rtw89_phy_ra_update(struct rtw89_dev *rtwdev) in rtw89_phy_ra_update() argument
461 ieee80211_iterate_stations_atomic(rtwdev->hw, in rtw89_phy_ra_update()
463 rtwdev); in rtw89_phy_ra_update()
466 void rtw89_phy_ra_assoc(struct rtw89_dev *rtwdev, struct ieee80211_sta *sta) in rtw89_phy_ra_assoc() argument
473 rtw89_phy_ra_sta_update(rtwdev, sta, csi); in rtw89_phy_ra_assoc()
484 rtw89_debug(rtwdev, RTW89_DBG_RA, in rtw89_phy_ra_assoc()
491 rtw89_debug(rtwdev, RTW89_DBG_RA, in rtw89_phy_ra_assoc()
500 rtw89_fw_h2c_ra(rtwdev, ra, csi); in rtw89_phy_ra_assoc()
503 u8 rtw89_phy_get_txsc(struct rtw89_dev *rtwdev, in rtw89_phy_get_txsc() argument
572 u32 rtw89_phy_read_rf(struct rtw89_dev *rtwdev, enum rtw89_rf_path rf_path, in rtw89_phy_read_rf() argument
575 const struct rtw89_chip_info *chip = rtwdev->chip; in rtw89_phy_read_rf()
579 if (rf_path >= rtwdev->chip->rf_path_num) { in rtw89_phy_read_rf()
580 rtw89_err(rtwdev, "unsupported rf path (%d)\n", rf_path); in rtw89_phy_read_rf()
588 val = rtw89_phy_read32_mask(rtwdev, direct_addr, mask); in rtw89_phy_read_rf()
594 bool rtw89_phy_write_rf(struct rtw89_dev *rtwdev, enum rtw89_rf_path rf_path, in rtw89_phy_write_rf() argument
597 const struct rtw89_chip_info *chip = rtwdev->chip; in rtw89_phy_write_rf()
601 if (rf_path >= rtwdev->chip->rf_path_num) { in rtw89_phy_write_rf()
602 rtw89_err(rtwdev, "unsupported rf path (%d)\n", rf_path); in rtw89_phy_write_rf()
610 rtw89_phy_write32_mask(rtwdev, direct_addr, mask, data); in rtw89_phy_write_rf()
619 static void rtw89_phy_bb_reset(struct rtw89_dev *rtwdev, in rtw89_phy_bb_reset() argument
622 const struct rtw89_chip_info *chip = rtwdev->chip; in rtw89_phy_bb_reset()
624 chip->ops->bb_reset(rtwdev, phy_idx); in rtw89_phy_bb_reset()
627 static void rtw89_phy_config_bb_reg(struct rtw89_dev *rtwdev, in rtw89_phy_config_bb_reg() argument
645 rtw89_phy_write32(rtwdev, reg->addr, reg->data); in rtw89_phy_config_bb_reg()
649 rtw89_phy_cofig_rf_reg_store(struct rtw89_dev *rtwdev, in rtw89_phy_cofig_rf_reg_store() argument
662 static int rtw89_phy_config_rf_reg_fw(struct rtw89_dev *rtwdev, in rtw89_phy_config_rf_reg_fw() argument
671 rtw89_warn(rtwdev, in rtw89_phy_config_rf_reg_fw()
678 ret = rtw89_fw_h2c_rf_reg(rtwdev, info, in rtw89_phy_config_rf_reg_fw()
683 ret = rtw89_fw_h2c_rf_reg(rtwdev, info, len, i); in rtw89_phy_config_rf_reg_fw()
691 static void rtw89_phy_config_rf_reg(struct rtw89_dev *rtwdev, in rtw89_phy_config_rf_reg() argument
709 rtw89_write_rf(rtwdev, rf_path, reg->addr, 0xfffff, reg->data); in rtw89_phy_config_rf_reg()
710 rtw89_phy_cofig_rf_reg_store(rtwdev, reg, rf_path, in rtw89_phy_config_rf_reg()
715 static int rtw89_phy_sel_headline(struct rtw89_dev *rtwdev, in rtw89_phy_sel_headline() argument
797 static void rtw89_phy_init_reg(struct rtw89_dev *rtwdev, in rtw89_phy_init_reg() argument
799 void (*config)(struct rtw89_dev *rtwdev, in rtw89_phy_init_reg() argument
807 u8 rfe = rtwdev->efuse.rfe_type; in rtw89_phy_init_reg()
808 u8 cv = rtwdev->hal.cv; in rtw89_phy_init_reg()
817 ret = rtw89_phy_sel_headline(rtwdev, table, &headline_size, in rtw89_phy_init_reg()
820 rtw89_err(rtwdev, "invalid PHY package: %d/%d\n", rfe, cv); in rtw89_phy_init_reg()
836 rtw89_warn(rtwdev, "failed to load CR %x/%x\n", in rtw89_phy_init_reg()
861 config(rtwdev, reg, rf_path, extra_data); in rtw89_phy_init_reg()
867 void rtw89_phy_init_bb_reg(struct rtw89_dev *rtwdev) in rtw89_phy_init_bb_reg() argument
869 const struct rtw89_chip_info *chip = rtwdev->chip; in rtw89_phy_init_bb_reg()
872 rtw89_phy_init_reg(rtwdev, bb_table, rtw89_phy_config_bb_reg, NULL); in rtw89_phy_init_bb_reg()
873 rtw89_chip_init_txpwr_unit(rtwdev, RTW89_PHY_0); in rtw89_phy_init_bb_reg()
874 rtw89_phy_bb_reset(rtwdev, RTW89_PHY_0); in rtw89_phy_init_bb_reg()
877 static u32 rtw89_phy_nctl_poll(struct rtw89_dev *rtwdev) in rtw89_phy_nctl_poll() argument
879 rtw89_phy_write32(rtwdev, 0x8080, 0x4); in rtw89_phy_nctl_poll()
881 return rtw89_phy_read32(rtwdev, 0x8080); in rtw89_phy_nctl_poll()
884 void rtw89_phy_init_rf_reg(struct rtw89_dev *rtwdev) in rtw89_phy_init_rf_reg() argument
886 const struct rtw89_chip_info *chip = rtwdev->chip; in rtw89_phy_init_rf_reg()
898 rtw89_phy_init_reg(rtwdev, rf_table, rtw89_phy_config_rf_reg, in rtw89_phy_init_rf_reg()
900 if (rtw89_phy_config_rf_reg_fw(rtwdev, rf_reg_info)) in rtw89_phy_init_rf_reg()
901 rtw89_warn(rtwdev, "rf path %d reg h2c config failed\n", in rtw89_phy_init_rf_reg()
907 static void rtw89_phy_init_rf_nctl(struct rtw89_dev *rtwdev) in rtw89_phy_init_rf_nctl() argument
909 const struct rtw89_chip_info *chip = rtwdev->chip; in rtw89_phy_init_rf_nctl()
915 rtw89_phy_write32_set(rtwdev, 0x0c60, 0x3); in rtw89_phy_init_rf_nctl()
916 rtw89_phy_write32_set(rtwdev, 0x0c6c, 0x1); in rtw89_phy_init_rf_nctl()
917 rtw89_phy_write32_set(rtwdev, 0x58ac, 0x8000000); in rtw89_phy_init_rf_nctl()
918 rtw89_phy_write32_set(rtwdev, 0x78ac, 0x8000000); in rtw89_phy_init_rf_nctl()
921 rtw89_phy_write32(rtwdev, 0x8000, 0x8); in rtw89_phy_init_rf_nctl()
924 1000, false, rtwdev); in rtw89_phy_init_rf_nctl()
926 rtw89_err(rtwdev, "failed to poll nctl block\n"); in rtw89_phy_init_rf_nctl()
929 rtw89_phy_init_reg(rtwdev, nctl_table, rtw89_phy_config_bb_reg, NULL); in rtw89_phy_init_rf_nctl()
932 static u32 rtw89_phy0_phy1_offset(struct rtw89_dev *rtwdev, u32 addr) in rtw89_phy0_phy1_offset() argument
963 void rtw89_phy_write32_idx(struct rtw89_dev *rtwdev, u32 addr, u32 mask, in rtw89_phy_write32_idx() argument
966 if (rtwdev->dbcc_en && phy_idx == RTW89_PHY_1) in rtw89_phy_write32_idx()
967 addr += rtw89_phy0_phy1_offset(rtwdev, addr); in rtw89_phy_write32_idx()
968 rtw89_phy_write32_mask(rtwdev, addr, mask, data); in rtw89_phy_write32_idx()
971 void rtw89_phy_set_phy_regs(struct rtw89_dev *rtwdev, u32 addr, u32 mask, in rtw89_phy_set_phy_regs() argument
974 rtw89_phy_write32_idx(rtwdev, addr, mask, val, RTW89_PHY_0); in rtw89_phy_set_phy_regs()
976 if (!rtwdev->dbcc_en) in rtw89_phy_set_phy_regs()
979 rtw89_phy_write32_idx(rtwdev, addr, mask, val, RTW89_PHY_1); in rtw89_phy_set_phy_regs()
982 void rtw89_phy_write_reg3_tbl(struct rtw89_dev *rtwdev, in rtw89_phy_write_reg3_tbl() argument
990 rtw89_phy_write32_mask(rtwdev, reg3->addr, reg3->mask, reg3->data); in rtw89_phy_write_reg3_tbl()
1023 void rtw89_phy_load_txpwr_byrate(struct rtw89_dev *rtwdev, in rtw89_phy_load_txpwr_byrate() argument
1033 byr = _byr_seek(cfg->rs, &rtwdev->byr[cfg->band]); in rtw89_phy_load_txpwr_byrate()
1043 #define _phy_txpwr_rf_to_mac(rtwdev, txpwr_rf) \ argument
1045 const struct rtw89_chip_info *__c = (rtwdev)->chip; \
1049 s8 rtw89_phy_read_txpwr_byrate(struct rtw89_dev *rtwdev, in rtw89_phy_read_txpwr_byrate() argument
1052 enum rtw89_band band = rtwdev->hal.current_band_type; in rtw89_phy_read_txpwr_byrate()
1060 rtw89_debug(rtwdev, RTW89_DBG_TXPWR, in rtw89_phy_read_txpwr_byrate()
1067 byr = _byr_seek(rate_desc->rs, &rtwdev->byr[band]); in rtw89_phy_read_txpwr_byrate()
1070 return _phy_txpwr_rf_to_mac(rtwdev, byr[idx]); in rtw89_phy_read_txpwr_byrate()
1073 static u8 rtw89_channel_to_idx(struct rtw89_dev *rtwdev, u8 channel) in rtw89_channel_to_idx() argument
1085 rtw89_warn(rtwdev, "unknown channel: %d\n", channel); in rtw89_channel_to_idx()
1090 s8 rtw89_phy_read_txpwr_limit(struct rtw89_dev *rtwdev, in rtw89_phy_read_txpwr_limit() argument
1093 const struct rtw89_chip_info *chip = rtwdev->chip; in rtw89_phy_read_txpwr_limit()
1094 u8 ch_idx = rtw89_channel_to_idx(rtwdev, ch); in rtw89_phy_read_txpwr_limit()
1095 u8 band = rtwdev->hal.current_band_type; in rtw89_phy_read_txpwr_limit()
1096 u8 regd = rtw89_regd_get(rtwdev, band); in rtw89_phy_read_txpwr_limit()
1107 rtw89_warn(rtwdev, "unknown band type: %d\n", band); in rtw89_phy_read_txpwr_limit()
1111 lmt = _phy_txpwr_rf_to_mac(rtwdev, lmt); in rtw89_phy_read_txpwr_limit()
1112 sar = rtw89_query_sar(rtwdev); in rtw89_phy_read_txpwr_limit()
1121 ptr[__i] = rtw89_phy_read_txpwr_limit(rtwdev, \
1127 static void rtw89_phy_fill_txpwr_limit_20m(struct rtw89_dev *rtwdev, in rtw89_phy_fill_txpwr_limit_20m() argument
1141 static void rtw89_phy_fill_txpwr_limit_40m(struct rtw89_dev *rtwdev, in rtw89_phy_fill_txpwr_limit_40m() argument
1159 static void rtw89_phy_fill_txpwr_limit_80m(struct rtw89_dev *rtwdev, in rtw89_phy_fill_txpwr_limit_80m() argument
1193 void rtw89_phy_fill_txpwr_limit(struct rtw89_dev *rtwdev, in rtw89_phy_fill_txpwr_limit() argument
1197 u8 ch = rtwdev->hal.current_channel; in rtw89_phy_fill_txpwr_limit()
1198 u8 bw = rtwdev->hal.current_band_width; in rtw89_phy_fill_txpwr_limit()
1204 rtw89_phy_fill_txpwr_limit_20m(rtwdev, lmt, ntx, ch); in rtw89_phy_fill_txpwr_limit()
1207 rtw89_phy_fill_txpwr_limit_40m(rtwdev, lmt, ntx, ch); in rtw89_phy_fill_txpwr_limit()
1210 rtw89_phy_fill_txpwr_limit_80m(rtwdev, lmt, ntx, ch); in rtw89_phy_fill_txpwr_limit()
1215 static s8 rtw89_phy_read_txpwr_limit_ru(struct rtw89_dev *rtwdev, in rtw89_phy_read_txpwr_limit_ru() argument
1218 const struct rtw89_chip_info *chip = rtwdev->chip; in rtw89_phy_read_txpwr_limit_ru()
1219 u8 ch_idx = rtw89_channel_to_idx(rtwdev, ch); in rtw89_phy_read_txpwr_limit_ru()
1220 u8 band = rtwdev->hal.current_band_type; in rtw89_phy_read_txpwr_limit_ru()
1221 u8 regd = rtw89_regd_get(rtwdev, band); in rtw89_phy_read_txpwr_limit_ru()
1232 rtw89_warn(rtwdev, "unknown band type: %d\n", band); in rtw89_phy_read_txpwr_limit_ru()
1236 lmt_ru = _phy_txpwr_rf_to_mac(rtwdev, lmt_ru); in rtw89_phy_read_txpwr_limit_ru()
1237 sar = rtw89_query_sar(rtwdev); in rtw89_phy_read_txpwr_limit_ru()
1243 rtw89_phy_fill_txpwr_limit_ru_20m(struct rtw89_dev *rtwdev, in rtw89_phy_fill_txpwr_limit_ru_20m() argument
1247 lmt_ru->ru26[0] = rtw89_phy_read_txpwr_limit_ru(rtwdev, RTW89_RU26, in rtw89_phy_fill_txpwr_limit_ru_20m()
1249 lmt_ru->ru52[0] = rtw89_phy_read_txpwr_limit_ru(rtwdev, RTW89_RU52, in rtw89_phy_fill_txpwr_limit_ru_20m()
1251 lmt_ru->ru106[0] = rtw89_phy_read_txpwr_limit_ru(rtwdev, RTW89_RU106, in rtw89_phy_fill_txpwr_limit_ru_20m()
1256 rtw89_phy_fill_txpwr_limit_ru_40m(struct rtw89_dev *rtwdev, in rtw89_phy_fill_txpwr_limit_ru_40m() argument
1260 lmt_ru->ru26[0] = rtw89_phy_read_txpwr_limit_ru(rtwdev, RTW89_RU26, in rtw89_phy_fill_txpwr_limit_ru_40m()
1262 lmt_ru->ru26[1] = rtw89_phy_read_txpwr_limit_ru(rtwdev, RTW89_RU26, in rtw89_phy_fill_txpwr_limit_ru_40m()
1264 lmt_ru->ru52[0] = rtw89_phy_read_txpwr_limit_ru(rtwdev, RTW89_RU52, in rtw89_phy_fill_txpwr_limit_ru_40m()
1266 lmt_ru->ru52[1] = rtw89_phy_read_txpwr_limit_ru(rtwdev, RTW89_RU52, in rtw89_phy_fill_txpwr_limit_ru_40m()
1268 lmt_ru->ru106[0] = rtw89_phy_read_txpwr_limit_ru(rtwdev, RTW89_RU106, in rtw89_phy_fill_txpwr_limit_ru_40m()
1270 lmt_ru->ru106[1] = rtw89_phy_read_txpwr_limit_ru(rtwdev, RTW89_RU106, in rtw89_phy_fill_txpwr_limit_ru_40m()
1275 rtw89_phy_fill_txpwr_limit_ru_80m(struct rtw89_dev *rtwdev, in rtw89_phy_fill_txpwr_limit_ru_80m() argument
1279 lmt_ru->ru26[0] = rtw89_phy_read_txpwr_limit_ru(rtwdev, RTW89_RU26, in rtw89_phy_fill_txpwr_limit_ru_80m()
1281 lmt_ru->ru26[1] = rtw89_phy_read_txpwr_limit_ru(rtwdev, RTW89_RU26, in rtw89_phy_fill_txpwr_limit_ru_80m()
1283 lmt_ru->ru26[2] = rtw89_phy_read_txpwr_limit_ru(rtwdev, RTW89_RU26, in rtw89_phy_fill_txpwr_limit_ru_80m()
1285 lmt_ru->ru26[3] = rtw89_phy_read_txpwr_limit_ru(rtwdev, RTW89_RU26, in rtw89_phy_fill_txpwr_limit_ru_80m()
1287 lmt_ru->ru52[0] = rtw89_phy_read_txpwr_limit_ru(rtwdev, RTW89_RU52, in rtw89_phy_fill_txpwr_limit_ru_80m()
1289 lmt_ru->ru52[1] = rtw89_phy_read_txpwr_limit_ru(rtwdev, RTW89_RU52, in rtw89_phy_fill_txpwr_limit_ru_80m()
1291 lmt_ru->ru52[2] = rtw89_phy_read_txpwr_limit_ru(rtwdev, RTW89_RU52, in rtw89_phy_fill_txpwr_limit_ru_80m()
1293 lmt_ru->ru52[3] = rtw89_phy_read_txpwr_limit_ru(rtwdev, RTW89_RU52, in rtw89_phy_fill_txpwr_limit_ru_80m()
1295 lmt_ru->ru106[0] = rtw89_phy_read_txpwr_limit_ru(rtwdev, RTW89_RU106, in rtw89_phy_fill_txpwr_limit_ru_80m()
1297 lmt_ru->ru106[1] = rtw89_phy_read_txpwr_limit_ru(rtwdev, RTW89_RU106, in rtw89_phy_fill_txpwr_limit_ru_80m()
1299 lmt_ru->ru106[2] = rtw89_phy_read_txpwr_limit_ru(rtwdev, RTW89_RU106, in rtw89_phy_fill_txpwr_limit_ru_80m()
1301 lmt_ru->ru106[3] = rtw89_phy_read_txpwr_limit_ru(rtwdev, RTW89_RU106, in rtw89_phy_fill_txpwr_limit_ru_80m()
1305 void rtw89_phy_fill_txpwr_limit_ru(struct rtw89_dev *rtwdev, in rtw89_phy_fill_txpwr_limit_ru() argument
1309 u8 ch = rtwdev->hal.current_channel; in rtw89_phy_fill_txpwr_limit_ru()
1310 u8 bw = rtwdev->hal.current_band_width; in rtw89_phy_fill_txpwr_limit_ru()
1316 rtw89_phy_fill_txpwr_limit_ru_20m(rtwdev, lmt_ru, ntx, ch); in rtw89_phy_fill_txpwr_limit_ru()
1319 rtw89_phy_fill_txpwr_limit_ru_40m(rtwdev, lmt_ru, ntx, ch); in rtw89_phy_fill_txpwr_limit_ru()
1322 rtw89_phy_fill_txpwr_limit_ru_80m(rtwdev, lmt_ru, ntx, ch); in rtw89_phy_fill_txpwr_limit_ru()
1328 struct rtw89_dev *rtwdev; member
1335 struct rtw89_dev *rtwdev = ra_data->rtwdev; in rtw89_phy_c2h_ra_rpt_iter() local
1354 ra_report->txrate.legacy = rtw89_ra_report_to_bitrate(rtwdev, rate); in rtw89_phy_c2h_ra_rpt_iter()
1358 if (rtwdev->fw.old_ht_ra_format) in rtw89_phy_c2h_ra_rpt_iter()
1397 sta->max_rc_amsdu_len = get_max_amsdu_len(rtwdev, ra_report); in rtw89_phy_c2h_ra_rpt_iter()
1402 rtw89_phy_c2h_ra_rpt(struct rtw89_dev *rtwdev, struct sk_buff *c2h, u32 len) in rtw89_phy_c2h_ra_rpt() argument
1406 ra_data.rtwdev = rtwdev; in rtw89_phy_c2h_ra_rpt()
1408 ieee80211_iterate_stations_atomic(rtwdev->hw, in rtw89_phy_c2h_ra_rpt()
1414 void (* const rtw89_phy_c2h_ra_handler[])(struct rtw89_dev *rtwdev,
1421 void rtw89_phy_c2h_handle(struct rtw89_dev *rtwdev, struct sk_buff *skb, in rtw89_phy_c2h_handle() argument
1424 void (*handler)(struct rtw89_dev *rtwdev, in rtw89_phy_c2h_handle()
1433 rtw89_info(rtwdev, "c2h class %d not support\n", class); in rtw89_phy_c2h_handle()
1437 rtw89_info(rtwdev, "c2h class %d func %d not support\n", class, in rtw89_phy_c2h_handle()
1441 handler(rtwdev, skb, len); in rtw89_phy_c2h_handle()
1444 static u8 rtw89_phy_cfo_get_xcap_reg(struct rtw89_dev *rtwdev, bool sc_xo) in rtw89_phy_cfo_get_xcap_reg() argument
1453 return (u8)rtw89_read32_mask(rtwdev, R_AX_XTAL_ON_CTRL0, reg_mask); in rtw89_phy_cfo_get_xcap_reg()
1456 static void rtw89_phy_cfo_set_xcap_reg(struct rtw89_dev *rtwdev, bool sc_xo, in rtw89_phy_cfo_set_xcap_reg() argument
1466 rtw89_write32_mask(rtwdev, R_AX_XTAL_ON_CTRL0, reg_mask, val); in rtw89_phy_cfo_set_xcap_reg()
1469 static void rtw89_phy_cfo_set_crystal_cap(struct rtw89_dev *rtwdev, in rtw89_phy_cfo_set_crystal_cap() argument
1472 struct rtw89_cfo_tracking_info *cfo = &rtwdev->cfo_tracking; in rtw89_phy_cfo_set_crystal_cap()
1478 rtw89_phy_cfo_set_xcap_reg(rtwdev, true, crystal_cap); in rtw89_phy_cfo_set_crystal_cap()
1479 rtw89_phy_cfo_set_xcap_reg(rtwdev, false, crystal_cap); in rtw89_phy_cfo_set_crystal_cap()
1480 sc_xo_val = rtw89_phy_cfo_get_xcap_reg(rtwdev, true); in rtw89_phy_cfo_set_crystal_cap()
1481 sc_xi_val = rtw89_phy_cfo_get_xcap_reg(rtwdev, false); in rtw89_phy_cfo_set_crystal_cap()
1485 rtw89_debug(rtwdev, RTW89_DBG_CFO, "Set sc_xi=0x%x\n", sc_xi_val); in rtw89_phy_cfo_set_crystal_cap()
1486 rtw89_debug(rtwdev, RTW89_DBG_CFO, "Set sc_xo=0x%x\n", sc_xo_val); in rtw89_phy_cfo_set_crystal_cap()
1487 rtw89_debug(rtwdev, RTW89_DBG_CFO, "Get xcap_ofst=%d\n", in rtw89_phy_cfo_set_crystal_cap()
1489 rtw89_debug(rtwdev, RTW89_DBG_CFO, "Set xcap OK\n"); in rtw89_phy_cfo_set_crystal_cap()
1492 static void rtw89_phy_cfo_reset(struct rtw89_dev *rtwdev) in rtw89_phy_cfo_reset() argument
1494 struct rtw89_cfo_tracking_info *cfo = &rtwdev->cfo_tracking; in rtw89_phy_cfo_reset()
1503 rtw89_phy_cfo_set_crystal_cap(rtwdev, cap, false); in rtw89_phy_cfo_reset()
1504 rtw89_debug(rtwdev, RTW89_DBG_CFO, in rtw89_phy_cfo_reset()
1509 static void rtw89_dcfo_comp(struct rtw89_dev *rtwdev, s32 curr_cfo) in rtw89_dcfo_comp() argument
1511 bool is_linked = rtwdev->total_sta_assoc > 0; in rtw89_dcfo_comp()
1517 rtw89_debug(rtwdev, RTW89_DBG_CFO, "DCFO: is_linked=%d\n", in rtw89_dcfo_comp()
1521 rtw89_debug(rtwdev, RTW89_DBG_CFO, "DCFO: curr_cfo=%d\n", curr_cfo); in rtw89_dcfo_comp()
1524 dcfo_comp = rtw89_phy_read32_mask(rtwdev, R_DCFO, B_DCFO); in rtw89_dcfo_comp()
1527 rtw89_debug(rtwdev, RTW89_DBG_CFO, "DCFO: avg_cfo=%d\n", cfo_avg_312); in rtw89_dcfo_comp()
1528 if (rtwdev->chip->chip_id == RTL8852A && rtwdev->hal.cv == CHIP_CBV) in rtw89_dcfo_comp()
1530 rtw89_phy_set_phy_regs(rtwdev, R_DCFO_COMP_S0, B_DCFO_COMP_S0_MSK, in rtw89_dcfo_comp()
1534 static void rtw89_dcfo_comp_init(struct rtw89_dev *rtwdev) in rtw89_dcfo_comp_init() argument
1536 rtw89_phy_set_phy_regs(rtwdev, R_DCFO_OPT, B_DCFO_OPT_EN, 1); in rtw89_dcfo_comp_init()
1537 rtw89_phy_set_phy_regs(rtwdev, R_DCFO_WEIGHT, B_DCFO_WEIGHT_MSK, 8); in rtw89_dcfo_comp_init()
1538 rtw89_write32_clr(rtwdev, R_AX_PWR_UL_CTRL2, B_AX_PWR_UL_CFO_MASK); in rtw89_dcfo_comp_init()
1541 static void rtw89_phy_cfo_init(struct rtw89_dev *rtwdev) in rtw89_phy_cfo_init() argument
1543 struct rtw89_cfo_tracking_info *cfo = &rtwdev->cfo_tracking; in rtw89_phy_cfo_init()
1544 struct rtw89_efuse *efuse = &rtwdev->efuse; in rtw89_phy_cfo_init()
1554 rtw89_debug(rtwdev, RTW89_DBG_CFO, "Default xcap=%0x\n", in rtw89_phy_cfo_init()
1556 rtw89_phy_cfo_set_crystal_cap(rtwdev, cfo->crystal_cap_default, true); in rtw89_phy_cfo_init()
1557 rtw89_phy_set_phy_regs(rtwdev, R_DCFO, B_DCFO, 1); in rtw89_phy_cfo_init()
1558 rtw89_dcfo_comp_init(rtwdev); in rtw89_phy_cfo_init()
1565 static void rtw89_phy_cfo_crystal_cap_adjust(struct rtw89_dev *rtwdev, in rtw89_phy_cfo_crystal_cap_adjust() argument
1568 struct rtw89_cfo_tracking_info *cfo = &rtwdev->cfo_tracking; in rtw89_phy_cfo_crystal_cap_adjust()
1581 rtw89_debug(rtwdev, RTW89_DBG_CFO, "Stop CFO tracking\n"); in rtw89_phy_cfo_crystal_cap_adjust()
1595 rtw89_phy_cfo_set_crystal_cap(rtwdev, (u8)crystal_cap, false); in rtw89_phy_cfo_crystal_cap_adjust()
1596 rtw89_debug(rtwdev, RTW89_DBG_CFO, in rtw89_phy_cfo_crystal_cap_adjust()
1601 static s32 rtw89_phy_average_cfo_calc(struct rtw89_dev *rtwdev) in rtw89_phy_average_cfo_calc() argument
1603 struct rtw89_cfo_tracking_info *cfo = &rtwdev->cfo_tracking; in rtw89_phy_average_cfo_calc()
1609 if (rtwdev->total_sta_assoc != 1) in rtw89_phy_average_cfo_calc()
1611 rtw89_debug(rtwdev, RTW89_DBG_CFO, "one_entry_only\n"); in rtw89_phy_average_cfo_calc()
1620 rtw89_debug(rtwdev, RTW89_DBG_CFO, in rtw89_phy_average_cfo_calc()
1622 rtw89_debug(rtwdev, RTW89_DBG_CFO, in rtw89_phy_average_cfo_calc()
1628 static s32 rtw89_phy_multi_sta_cfo_calc(struct rtw89_dev *rtwdev) in rtw89_phy_multi_sta_cfo_calc() argument
1630 struct rtw89_cfo_tracking_info *cfo = &rtwdev->cfo_tracking; in rtw89_phy_multi_sta_cfo_calc()
1631 struct rtw89_traffic_stats *stats = &rtwdev->stats; in rtw89_phy_multi_sta_cfo_calc()
1645 rtw89_debug(rtwdev, RTW89_DBG_CFO, "Multi entry cfo_trk\n"); in rtw89_phy_multi_sta_cfo_calc()
1647 rtw89_debug(rtwdev, RTW89_DBG_CFO, "Pkt based avg mode\n"); in rtw89_phy_multi_sta_cfo_calc()
1654 rtw89_debug(rtwdev, RTW89_DBG_CFO, in rtw89_phy_multi_sta_cfo_calc()
1660 rtw89_debug(rtwdev, RTW89_DBG_CFO, "Entry based avg mode\n"); in rtw89_phy_multi_sta_cfo_calc()
1667 rtw89_debug(rtwdev, RTW89_DBG_CFO, in rtw89_phy_multi_sta_cfo_calc()
1671 sta_cnt = rtwdev->total_sta_assoc; in rtw89_phy_multi_sta_cfo_calc()
1673 rtw89_debug(rtwdev, RTW89_DBG_CFO, in rtw89_phy_multi_sta_cfo_calc()
1678 rtw89_debug(rtwdev, RTW89_DBG_CFO, "TP based avg mode\n"); in rtw89_phy_multi_sta_cfo_calc()
1693 rtw89_debug(rtwdev, RTW89_DBG_CFO, in rtw89_phy_multi_sta_cfo_calc()
1696 if (sta_cnt >= rtwdev->total_sta_assoc) in rtw89_phy_multi_sta_cfo_calc()
1702 rtw89_debug(rtwdev, RTW89_DBG_CFO, "Assoc sta cnt=%d\n", in rtw89_phy_multi_sta_cfo_calc()
1704 rtw89_debug(rtwdev, RTW89_DBG_CFO, "Active sta cnt=%d\n", in rtw89_phy_multi_sta_cfo_calc()
1706 rtw89_debug(rtwdev, RTW89_DBG_CFO, in rtw89_phy_multi_sta_cfo_calc()
1709 rtw89_debug(rtwdev, RTW89_DBG_CFO, "cfo_lb=%d,cfo_ub=%d\n", in rtw89_phy_multi_sta_cfo_calc()
1712 rtw89_debug(rtwdev, RTW89_DBG_CFO, in rtw89_phy_multi_sta_cfo_calc()
1717 rtw89_debug(rtwdev, RTW89_DBG_CFO, in rtw89_phy_multi_sta_cfo_calc()
1724 rtw89_debug(rtwdev, RTW89_DBG_CFO, "Target cfo=%d\n", target_cfo); in rtw89_phy_multi_sta_cfo_calc()
1728 static void rtw89_phy_cfo_statistics_reset(struct rtw89_dev *rtwdev) in rtw89_phy_cfo_statistics_reset() argument
1730 struct rtw89_cfo_tracking_info *cfo = &rtwdev->cfo_tracking; in rtw89_phy_cfo_statistics_reset()
1739 static void rtw89_phy_cfo_dm(struct rtw89_dev *rtwdev) in rtw89_phy_cfo_dm() argument
1741 struct rtw89_cfo_tracking_info *cfo = &rtwdev->cfo_tracking; in rtw89_phy_cfo_dm()
1746 rtw89_debug(rtwdev, RTW89_DBG_CFO, "CFO:total_sta_assoc=%d\n", in rtw89_phy_cfo_dm()
1747 rtwdev->total_sta_assoc); in rtw89_phy_cfo_dm()
1748 if (rtwdev->total_sta_assoc == 0) { in rtw89_phy_cfo_dm()
1749 rtw89_phy_cfo_reset(rtwdev); in rtw89_phy_cfo_dm()
1753 rtw89_debug(rtwdev, RTW89_DBG_CFO, "Pkt cnt = 0\n"); in rtw89_phy_cfo_dm()
1757 rtw89_debug(rtwdev, RTW89_DBG_CFO, "Pkt cnt doesn't change\n"); in rtw89_phy_cfo_dm()
1760 if (rtwdev->total_sta_assoc == 1) in rtw89_phy_cfo_dm()
1761 new_cfo = rtw89_phy_average_cfo_calc(rtwdev); in rtw89_phy_cfo_dm()
1763 new_cfo = rtw89_phy_multi_sta_cfo_calc(rtwdev); in rtw89_phy_cfo_dm()
1765 rtw89_debug(rtwdev, RTW89_DBG_CFO, "curr_cfo=0\n"); in rtw89_phy_cfo_dm()
1768 rtw89_phy_cfo_crystal_cap_adjust(rtwdev, new_cfo); in rtw89_phy_cfo_dm()
1771 rtw89_debug(rtwdev, RTW89_DBG_CFO, "Xcap_up=%d\n", x_cap_update); in rtw89_phy_cfo_dm()
1772 rtw89_debug(rtwdev, RTW89_DBG_CFO, "Xcap: D:%x C:%x->%x, ofst=%d\n", in rtw89_phy_cfo_dm()
1781 rtw89_dcfo_comp(rtwdev, new_cfo); in rtw89_phy_cfo_dm()
1782 rtw89_phy_cfo_statistics_reset(rtwdev); in rtw89_phy_cfo_dm()
1787 struct rtw89_dev *rtwdev = container_of(work, struct rtw89_dev, in rtw89_phy_cfo_track_work() local
1789 struct rtw89_cfo_tracking_info *cfo = &rtwdev->cfo_tracking; in rtw89_phy_cfo_track_work()
1791 mutex_lock(&rtwdev->mutex); in rtw89_phy_cfo_track_work()
1794 rtw89_leave_ps_mode(rtwdev); in rtw89_phy_cfo_track_work()
1795 rtw89_phy_cfo_dm(rtwdev); in rtw89_phy_cfo_track_work()
1796 ieee80211_queue_delayed_work(rtwdev->hw, &rtwdev->cfo_track_work, in rtw89_phy_cfo_track_work()
1799 mutex_unlock(&rtwdev->mutex); in rtw89_phy_cfo_track_work()
1802 static void rtw89_phy_cfo_start_work(struct rtw89_dev *rtwdev) in rtw89_phy_cfo_start_work() argument
1804 struct rtw89_cfo_tracking_info *cfo = &rtwdev->cfo_tracking; in rtw89_phy_cfo_start_work()
1806 ieee80211_queue_delayed_work(rtwdev->hw, &rtwdev->cfo_track_work, in rtw89_phy_cfo_start_work()
1810 void rtw89_phy_cfo_track(struct rtw89_dev *rtwdev) in rtw89_phy_cfo_track() argument
1812 struct rtw89_cfo_tracking_info *cfo = &rtwdev->cfo_tracking; in rtw89_phy_cfo_track()
1813 struct rtw89_traffic_stats *stats = &rtwdev->stats; in rtw89_phy_cfo_track()
1821 rtw89_phy_cfo_start_work(rtwdev); in rtw89_phy_cfo_track()
1842 rtw89_debug(rtwdev, RTW89_DBG_CFO, in rtw89_phy_cfo_track()
1846 ewma_thermal_read(&rtwdev->phystat.avg_thermal[0])); in rtw89_phy_cfo_track()
1849 rtw89_phy_cfo_dm(rtwdev); in rtw89_phy_cfo_track()
1852 void rtw89_phy_cfo_parse(struct rtw89_dev *rtwdev, s16 cfo_val, in rtw89_phy_cfo_parse() argument
1855 struct rtw89_cfo_tracking_info *cfo = &rtwdev->cfo_tracking; in rtw89_phy_cfo_parse()
1863 static void rtw89_phy_stat_thermal_update(struct rtw89_dev *rtwdev) in rtw89_phy_stat_thermal_update() argument
1865 struct rtw89_phy_stat *phystat = &rtwdev->phystat; in rtw89_phy_stat_thermal_update()
1869 for (i = 0; i < rtwdev->chip->rf_path_num; i++) { in rtw89_phy_stat_thermal_update()
1870 th = rtw89_chip_get_thermal(rtwdev, i); in rtw89_phy_stat_thermal_update()
1874 rtw89_debug(rtwdev, RTW89_DBG_RFK_TRACK, in rtw89_phy_stat_thermal_update()
1881 struct rtw89_dev *rtwdev; member
1910 static void rtw89_phy_stat_rssi_update(struct rtw89_dev *rtwdev) in rtw89_phy_stat_rssi_update() argument
1914 rssi_data.rtwdev = rtwdev; in rtw89_phy_stat_rssi_update()
1915 rssi_data.ch_info = &rtwdev->ch_info; in rtw89_phy_stat_rssi_update()
1917 ieee80211_iterate_stations_atomic(rtwdev->hw, in rtw89_phy_stat_rssi_update()
1921 rtw89_btc_ntfy_wl_sta(rtwdev); in rtw89_phy_stat_rssi_update()
1924 static void rtw89_phy_stat_init(struct rtw89_dev *rtwdev) in rtw89_phy_stat_init() argument
1926 struct rtw89_phy_stat *phystat = &rtwdev->phystat; in rtw89_phy_stat_init()
1929 for (i = 0; i < rtwdev->chip->rf_path_num; i++) in rtw89_phy_stat_init()
1932 rtw89_phy_stat_thermal_update(rtwdev); in rtw89_phy_stat_init()
1938 void rtw89_phy_stat_track(struct rtw89_dev *rtwdev) in rtw89_phy_stat_track() argument
1940 struct rtw89_phy_stat *phystat = &rtwdev->phystat; in rtw89_phy_stat_track()
1942 rtw89_phy_stat_thermal_update(rtwdev); in rtw89_phy_stat_track()
1943 rtw89_phy_stat_rssi_update(rtwdev); in rtw89_phy_stat_track()
1949 static u16 rtw89_phy_ccx_us_to_idx(struct rtw89_dev *rtwdev, u32 time_us) in rtw89_phy_ccx_us_to_idx() argument
1951 struct rtw89_env_monitor_info *env = &rtwdev->env_monitor; in rtw89_phy_ccx_us_to_idx()
1956 static u32 rtw89_phy_ccx_idx_to_us(struct rtw89_dev *rtwdev, u16 idx) in rtw89_phy_ccx_idx_to_us() argument
1958 struct rtw89_env_monitor_info *env = &rtwdev->env_monitor; in rtw89_phy_ccx_idx_to_us()
1963 static void rtw89_phy_ccx_top_setting_init(struct rtw89_dev *rtwdev) in rtw89_phy_ccx_top_setting_init() argument
1965 struct rtw89_env_monitor_info *env = &rtwdev->env_monitor; in rtw89_phy_ccx_top_setting_init()
1976 rtw89_phy_set_phy_regs(rtwdev, R_CCX, B_CCX_EN_MSK, 1); in rtw89_phy_ccx_top_setting_init()
1977 rtw89_phy_set_phy_regs(rtwdev, R_CCX, B_CCX_TRIG_OPT_MSK, 1); in rtw89_phy_ccx_top_setting_init()
1978 rtw89_phy_set_phy_regs(rtwdev, R_CCX, B_MEASUREMENT_TRIG_MSK, 1); in rtw89_phy_ccx_top_setting_init()
1979 rtw89_phy_set_phy_regs(rtwdev, R_CCX, B_CCX_EDCCA_OPT_MSK, in rtw89_phy_ccx_top_setting_init()
1983 static u16 rtw89_phy_ccx_get_report(struct rtw89_dev *rtwdev, u16 report, in rtw89_phy_ccx_get_report() argument
1986 struct rtw89_env_monitor_info *env = &rtwdev->env_monitor; in rtw89_phy_ccx_get_report()
1997 static void rtw89_phy_ccx_ms_to_period_unit(struct rtw89_dev *rtwdev, in rtw89_phy_ccx_ms_to_period_unit() argument
2021 rtw89_debug(rtwdev, RTW89_DBG_PHY_TRACK, in rtw89_phy_ccx_ms_to_period_unit()
2026 static void rtw89_phy_ccx_racing_release(struct rtw89_dev *rtwdev) in rtw89_phy_ccx_racing_release() argument
2028 struct rtw89_env_monitor_info *env = &rtwdev->env_monitor; in rtw89_phy_ccx_racing_release()
2030 rtw89_debug(rtwdev, RTW89_DBG_PHY_TRACK, in rtw89_phy_ccx_racing_release()
2038 static bool rtw89_phy_ifs_clm_th_update_check(struct rtw89_dev *rtwdev, in rtw89_phy_ifs_clm_th_update_check() argument
2041 struct rtw89_env_monitor_info *env = &rtwdev->env_monitor; in rtw89_phy_ifs_clm_th_update_check()
2076 ifs_th_h[IFS_CLM_TH_START_IDX] = rtw89_phy_ccx_us_to_idx(rtwdev, in rtw89_phy_ifs_clm_th_update_check()
2081 ifs_th_h[i] = rtw89_phy_ccx_us_to_idx(rtwdev, ifs_th_h_us[i]); in rtw89_phy_ifs_clm_th_update_check()
2086 rtw89_debug(rtwdev, RTW89_DBG_PHY_TRACK, in rtw89_phy_ifs_clm_th_update_check()
2092 static void rtw89_phy_ifs_clm_set_th_reg(struct rtw89_dev *rtwdev) in rtw89_phy_ifs_clm_set_th_reg() argument
2094 struct rtw89_env_monitor_info *env = &rtwdev->env_monitor; in rtw89_phy_ifs_clm_set_th_reg()
2097 rtw89_phy_set_phy_regs(rtwdev, R_IFS_T1, B_IFS_T1_TH_LOW_MSK, in rtw89_phy_ifs_clm_set_th_reg()
2099 rtw89_phy_set_phy_regs(rtwdev, R_IFS_T2, B_IFS_T2_TH_LOW_MSK, in rtw89_phy_ifs_clm_set_th_reg()
2101 rtw89_phy_set_phy_regs(rtwdev, R_IFS_T3, B_IFS_T3_TH_LOW_MSK, in rtw89_phy_ifs_clm_set_th_reg()
2103 rtw89_phy_set_phy_regs(rtwdev, R_IFS_T4, B_IFS_T4_TH_LOW_MSK, in rtw89_phy_ifs_clm_set_th_reg()
2106 rtw89_phy_set_phy_regs(rtwdev, R_IFS_T1, B_IFS_T1_TH_HIGH_MSK, in rtw89_phy_ifs_clm_set_th_reg()
2108 rtw89_phy_set_phy_regs(rtwdev, R_IFS_T2, B_IFS_T2_TH_HIGH_MSK, in rtw89_phy_ifs_clm_set_th_reg()
2110 rtw89_phy_set_phy_regs(rtwdev, R_IFS_T3, B_IFS_T3_TH_HIGH_MSK, in rtw89_phy_ifs_clm_set_th_reg()
2112 rtw89_phy_set_phy_regs(rtwdev, R_IFS_T4, B_IFS_T4_TH_HIGH_MSK, in rtw89_phy_ifs_clm_set_th_reg()
2116 rtw89_debug(rtwdev, RTW89_DBG_PHY_TRACK, in rtw89_phy_ifs_clm_set_th_reg()
2121 static void rtw89_phy_ifs_clm_setting_init(struct rtw89_dev *rtwdev) in rtw89_phy_ifs_clm_setting_init() argument
2123 struct rtw89_env_monitor_info *env = &rtwdev->env_monitor; in rtw89_phy_ifs_clm_setting_init()
2130 if (rtw89_phy_ifs_clm_th_update_check(rtwdev, ¶)) in rtw89_phy_ifs_clm_setting_init()
2131 rtw89_phy_ifs_clm_set_th_reg(rtwdev); in rtw89_phy_ifs_clm_setting_init()
2133 rtw89_phy_set_phy_regs(rtwdev, R_IFS_COUNTER, B_IFS_COLLECT_EN, in rtw89_phy_ifs_clm_setting_init()
2135 rtw89_phy_set_phy_regs(rtwdev, R_IFS_T1, B_IFS_T1_EN_MSK, true); in rtw89_phy_ifs_clm_setting_init()
2136 rtw89_phy_set_phy_regs(rtwdev, R_IFS_T2, B_IFS_T2_EN_MSK, true); in rtw89_phy_ifs_clm_setting_init()
2137 rtw89_phy_set_phy_regs(rtwdev, R_IFS_T3, B_IFS_T3_EN_MSK, true); in rtw89_phy_ifs_clm_setting_init()
2138 rtw89_phy_set_phy_regs(rtwdev, R_IFS_T4, B_IFS_T4_EN_MSK, true); in rtw89_phy_ifs_clm_setting_init()
2141 static int rtw89_phy_ccx_racing_ctrl(struct rtw89_dev *rtwdev, in rtw89_phy_ccx_racing_ctrl() argument
2144 struct rtw89_env_monitor_info *env = &rtwdev->env_monitor; in rtw89_phy_ccx_racing_ctrl()
2148 rtw89_debug(rtwdev, RTW89_DBG_PHY_TRACK, in rtw89_phy_ccx_racing_ctrl()
2153 rtw89_debug(rtwdev, RTW89_DBG_PHY_TRACK, in rtw89_phy_ccx_racing_ctrl()
2167 rtw89_debug(rtwdev, RTW89_DBG_PHY_TRACK, "ccx racing success=%d\n", in rtw89_phy_ccx_racing_ctrl()
2173 static void rtw89_phy_ccx_trigger(struct rtw89_dev *rtwdev) in rtw89_phy_ccx_trigger() argument
2175 struct rtw89_env_monitor_info *env = &rtwdev->env_monitor; in rtw89_phy_ccx_trigger()
2177 rtw89_phy_set_phy_regs(rtwdev, R_IFS_COUNTER, B_IFS_COUNTER_CLR_MSK, 0); in rtw89_phy_ccx_trigger()
2178 rtw89_phy_set_phy_regs(rtwdev, R_CCX, B_MEASUREMENT_TRIG_MSK, 0); in rtw89_phy_ccx_trigger()
2179 rtw89_phy_set_phy_regs(rtwdev, R_IFS_COUNTER, B_IFS_COUNTER_CLR_MSK, 1); in rtw89_phy_ccx_trigger()
2180 rtw89_phy_set_phy_regs(rtwdev, R_CCX, B_MEASUREMENT_TRIG_MSK, 1); in rtw89_phy_ccx_trigger()
2186 static void rtw89_phy_ifs_clm_get_utility(struct rtw89_dev *rtwdev) in rtw89_phy_ifs_clm_get_utility() argument
2188 struct rtw89_env_monitor_info *env = &rtwdev->env_monitor; in rtw89_phy_ifs_clm_get_utility()
2193 rtw89_phy_ccx_get_report(rtwdev, env->ifs_clm_tx, PERCENT); in rtw89_phy_ifs_clm_get_utility()
2195 rtw89_phy_ccx_get_report(rtwdev, env->ifs_clm_edcca_excl_cca, in rtw89_phy_ifs_clm_get_utility()
2198 rtw89_phy_ccx_get_report(rtwdev, env->ifs_clm_cckfa, PERCENT); in rtw89_phy_ifs_clm_get_utility()
2200 rtw89_phy_ccx_get_report(rtwdev, env->ifs_clm_ofdmfa, PERCENT); in rtw89_phy_ifs_clm_get_utility()
2202 rtw89_phy_ccx_get_report(rtwdev, env->ifs_clm_cckcca_excl_fa, in rtw89_phy_ifs_clm_get_utility()
2205 rtw89_phy_ccx_get_report(rtwdev, env->ifs_clm_ofdmcca_excl_fa, in rtw89_phy_ifs_clm_get_utility()
2208 rtw89_phy_ccx_get_report(rtwdev, env->ifs_clm_cckfa, PERMIL); in rtw89_phy_ifs_clm_get_utility()
2210 rtw89_phy_ccx_get_report(rtwdev, env->ifs_clm_ofdmfa, PERMIL); in rtw89_phy_ifs_clm_get_utility()
2217 rtw89_phy_ccx_idx_to_us(rtwdev, in rtw89_phy_ifs_clm_get_utility()
2221 res = rtw89_phy_ccx_idx_to_us(rtwdev, env->ifs_clm_cca[i]); in rtw89_phy_ifs_clm_get_utility()
2230 rtw89_debug(rtwdev, RTW89_DBG_PHY_TRACK, in rtw89_phy_ifs_clm_get_utility()
2233 rtw89_debug(rtwdev, RTW89_DBG_PHY_TRACK, in rtw89_phy_ifs_clm_get_utility()
2236 rtw89_debug(rtwdev, RTW89_DBG_PHY_TRACK, in rtw89_phy_ifs_clm_get_utility()
2239 rtw89_debug(rtwdev, RTW89_DBG_PHY_TRACK, in rtw89_phy_ifs_clm_get_utility()
2243 rtw89_debug(rtwdev, RTW89_DBG_PHY_TRACK, in rtw89_phy_ifs_clm_get_utility()
2246 rtw89_debug(rtwdev, RTW89_DBG_PHY_TRACK, "T%d:[%d, %d, %d]\n", in rtw89_phy_ifs_clm_get_utility()
2251 static bool rtw89_phy_ifs_clm_get_result(struct rtw89_dev *rtwdev) in rtw89_phy_ifs_clm_get_result() argument
2253 struct rtw89_env_monitor_info *env = &rtwdev->env_monitor; in rtw89_phy_ifs_clm_get_result()
2256 if (rtw89_phy_read32_mask(rtwdev, R_IFSCNT, B_IFSCNT_DONE_MSK) == 0) { in rtw89_phy_ifs_clm_get_result()
2257 rtw89_debug(rtwdev, RTW89_DBG_PHY_TRACK, in rtw89_phy_ifs_clm_get_result()
2263 rtw89_phy_read32_mask(rtwdev, R_IFS_CLM_TX_CNT, in rtw89_phy_ifs_clm_get_result()
2266 rtw89_phy_read32_mask(rtwdev, R_IFS_CLM_TX_CNT, in rtw89_phy_ifs_clm_get_result()
2269 rtw89_phy_read32_mask(rtwdev, R_IFS_CLM_CCA, in rtw89_phy_ifs_clm_get_result()
2272 rtw89_phy_read32_mask(rtwdev, R_IFS_CLM_CCA, in rtw89_phy_ifs_clm_get_result()
2275 rtw89_phy_read32_mask(rtwdev, R_IFS_CLM_FA, in rtw89_phy_ifs_clm_get_result()
2278 rtw89_phy_read32_mask(rtwdev, R_IFS_CLM_FA, in rtw89_phy_ifs_clm_get_result()
2282 rtw89_phy_read32_mask(rtwdev, R_IFS_HIS, B_IFS_T1_HIS_MSK); in rtw89_phy_ifs_clm_get_result()
2284 rtw89_phy_read32_mask(rtwdev, R_IFS_HIS, B_IFS_T2_HIS_MSK); in rtw89_phy_ifs_clm_get_result()
2286 rtw89_phy_read32_mask(rtwdev, R_IFS_HIS, B_IFS_T3_HIS_MSK); in rtw89_phy_ifs_clm_get_result()
2288 rtw89_phy_read32_mask(rtwdev, R_IFS_HIS, B_IFS_T4_HIS_MSK); in rtw89_phy_ifs_clm_get_result()
2291 rtw89_phy_read32_mask(rtwdev, R_IFS_AVG_L, B_IFS_T1_AVG_MSK); in rtw89_phy_ifs_clm_get_result()
2293 rtw89_phy_read32_mask(rtwdev, R_IFS_AVG_L, B_IFS_T2_AVG_MSK); in rtw89_phy_ifs_clm_get_result()
2295 rtw89_phy_read32_mask(rtwdev, R_IFS_AVG_H, B_IFS_T3_AVG_MSK); in rtw89_phy_ifs_clm_get_result()
2297 rtw89_phy_read32_mask(rtwdev, R_IFS_AVG_H, B_IFS_T4_AVG_MSK); in rtw89_phy_ifs_clm_get_result()
2300 rtw89_phy_read32_mask(rtwdev, R_IFS_CCA_L, B_IFS_T1_CCA_MSK); in rtw89_phy_ifs_clm_get_result()
2302 rtw89_phy_read32_mask(rtwdev, R_IFS_CCA_L, B_IFS_T2_CCA_MSK); in rtw89_phy_ifs_clm_get_result()
2304 rtw89_phy_read32_mask(rtwdev, R_IFS_CCA_H, B_IFS_T3_CCA_MSK); in rtw89_phy_ifs_clm_get_result()
2306 rtw89_phy_read32_mask(rtwdev, R_IFS_CCA_H, B_IFS_T4_CCA_MSK); in rtw89_phy_ifs_clm_get_result()
2309 rtw89_phy_read32_mask(rtwdev, R_IFSCNT, B_IFSCNT_TOTAL_CNT_MSK); in rtw89_phy_ifs_clm_get_result()
2311 rtw89_debug(rtwdev, RTW89_DBG_PHY_TRACK, "IFS-CLM total_ifs = %d\n", in rtw89_phy_ifs_clm_get_result()
2313 rtw89_debug(rtwdev, RTW89_DBG_PHY_TRACK, in rtw89_phy_ifs_clm_get_result()
2316 rtw89_debug(rtwdev, RTW89_DBG_PHY_TRACK, in rtw89_phy_ifs_clm_get_result()
2319 rtw89_debug(rtwdev, RTW89_DBG_PHY_TRACK, in rtw89_phy_ifs_clm_get_result()
2323 rtw89_debug(rtwdev, RTW89_DBG_PHY_TRACK, "Time:[his, avg, cca]\n"); in rtw89_phy_ifs_clm_get_result()
2325 rtw89_debug(rtwdev, RTW89_DBG_PHY_TRACK, in rtw89_phy_ifs_clm_get_result()
2329 rtw89_phy_ifs_clm_get_utility(rtwdev); in rtw89_phy_ifs_clm_get_result()
2334 static int rtw89_phy_ifs_clm_set(struct rtw89_dev *rtwdev, in rtw89_phy_ifs_clm_set() argument
2337 struct rtw89_env_monitor_info *env = &rtwdev->env_monitor; in rtw89_phy_ifs_clm_set()
2342 rtw89_debug(rtwdev, RTW89_DBG_PHY_TRACK, in rtw89_phy_ifs_clm_set()
2347 if (rtw89_phy_ccx_racing_ctrl(rtwdev, para->rac_lv)) in rtw89_phy_ifs_clm_set()
2351 rtw89_phy_ccx_ms_to_period_unit(rtwdev, para->mntr_time, in rtw89_phy_ifs_clm_set()
2353 rtw89_phy_set_phy_regs(rtwdev, R_IFS_COUNTER, in rtw89_phy_ifs_clm_set()
2355 rtw89_phy_set_phy_regs(rtwdev, R_IFS_COUNTER, in rtw89_phy_ifs_clm_set()
2358 rtw89_debug(rtwdev, RTW89_DBG_PHY_TRACK, in rtw89_phy_ifs_clm_set()
2367 if (rtw89_phy_ifs_clm_th_update_check(rtwdev, para)) { in rtw89_phy_ifs_clm_set()
2369 rtw89_phy_ifs_clm_set_th_reg(rtwdev); in rtw89_phy_ifs_clm_set()
2375 void rtw89_phy_env_monitor_track(struct rtw89_dev *rtwdev) in rtw89_phy_env_monitor_track() argument
2377 struct rtw89_env_monitor_info *env = &rtwdev->env_monitor; in rtw89_phy_env_monitor_track()
2383 rtw89_debug(rtwdev, RTW89_DBG_PHY_TRACK, in rtw89_phy_env_monitor_track()
2389 if (rtw89_phy_ifs_clm_get_result(rtwdev)) in rtw89_phy_env_monitor_track()
2392 rtw89_phy_ccx_racing_release(rtwdev); in rtw89_phy_env_monitor_track()
2397 if (rtw89_phy_ifs_clm_set(rtwdev, ¶) == 0) in rtw89_phy_env_monitor_track()
2400 rtw89_phy_ccx_trigger(rtwdev); in rtw89_phy_env_monitor_track()
2402 rtw89_debug(rtwdev, RTW89_DBG_PHY_TRACK, in rtw89_phy_env_monitor_track()
2407 static void rtw89_phy_dig_read_gain_table(struct rtw89_dev *rtwdev, int type) in rtw89_phy_dig_read_gain_table() argument
2409 const struct rtw89_chip_info *chip = rtwdev->chip; in rtw89_phy_dig_read_gain_table()
2410 struct rtw89_dig_info *dig = &rtwdev->dig; in rtw89_phy_dig_read_gain_table()
2448 tmp = rtw89_phy_read32_mask(rtwdev, cfg->table[i].addr, in rtw89_phy_dig_read_gain_table()
2454 rtw89_debug(rtwdev, RTW89_DBG_DIG, "%s[%d]=%d\n", in rtw89_phy_dig_read_gain_table()
2459 static void rtw89_phy_dig_update_gain_para(struct rtw89_dev *rtwdev) in rtw89_phy_dig_update_gain_para() argument
2461 struct rtw89_dig_info *dig = &rtwdev->dig; in rtw89_phy_dig_update_gain_para()
2465 tmp = rtw89_phy_read32_mask(rtwdev, R_PATH0_IB_PKPW, in rtw89_phy_dig_update_gain_para()
2468 dig->ib_pbk = rtw89_phy_read32_mask(rtwdev, R_PATH0_IB_PBK, in rtw89_phy_dig_update_gain_para()
2470 rtw89_debug(rtwdev, RTW89_DBG_DIG, "ib_pkpwr=%d, ib_pbk=%d\n", in rtw89_phy_dig_update_gain_para()
2474 rtw89_phy_dig_read_gain_table(rtwdev, i); in rtw89_phy_dig_update_gain_para()
2483 static void rtw89_phy_dig_update_rssi_info(struct rtw89_dev *rtwdev) in rtw89_phy_dig_update_rssi_info() argument
2485 struct rtw89_phy_ch_info *ch_info = &rtwdev->ch_info; in rtw89_phy_dig_update_rssi_info()
2486 struct rtw89_dig_info *dig = &rtwdev->dig; in rtw89_phy_dig_update_rssi_info()
2487 bool is_linked = rtwdev->total_sta_assoc > 0; in rtw89_phy_dig_update_rssi_info()
2492 rtw89_debug(rtwdev, RTW89_DBG_DIG, "RSSI update : NO Link\n"); in rtw89_phy_dig_update_rssi_info()
2497 static void rtw89_phy_dig_update_para(struct rtw89_dev *rtwdev) in rtw89_phy_dig_update_para() argument
2499 struct rtw89_dig_info *dig = &rtwdev->dig; in rtw89_phy_dig_update_para()
2500 bool is_linked = rtwdev->total_sta_assoc > 0; in rtw89_phy_dig_update_para()
2503 switch (rtwdev->hal.current_band_type) { in rtw89_phy_dig_update_para()
2528 static void rtw89_phy_dig_para_reset(struct rtw89_dev *rtwdev) in rtw89_phy_dig_para_reset() argument
2530 struct rtw89_dig_info *dig = &rtwdev->dig; in rtw89_phy_dig_para_reset()
2546 static void rtw89_phy_dig_init(struct rtw89_dev *rtwdev) in rtw89_phy_dig_init() argument
2548 rtw89_phy_dig_update_gain_para(rtwdev); in rtw89_phy_dig_init()
2549 rtw89_phy_dig_reset(rtwdev); in rtw89_phy_dig_init()
2552 static u8 rtw89_phy_dig_lna_idx_by_rssi(struct rtw89_dev *rtwdev, u8 rssi) in rtw89_phy_dig_lna_idx_by_rssi() argument
2554 struct rtw89_dig_info *dig = &rtwdev->dig; in rtw89_phy_dig_lna_idx_by_rssi()
2573 static u8 rtw89_phy_dig_tia_idx_by_rssi(struct rtw89_dev *rtwdev, u8 rssi) in rtw89_phy_dig_tia_idx_by_rssi() argument
2575 struct rtw89_dig_info *dig = &rtwdev->dig; in rtw89_phy_dig_tia_idx_by_rssi()
2588 static u8 rtw89_phy_dig_rxb_idx_by_rssi(struct rtw89_dev *rtwdev, u8 rssi, in rtw89_phy_dig_rxb_idx_by_rssi() argument
2591 struct rtw89_dig_info *dig = &rtwdev->dig; in rtw89_phy_dig_rxb_idx_by_rssi()
2601 rtw89_debug(rtwdev, RTW89_DBG_DIG, "wb_rssi=%03d, rxb_idx_tmp=%03d\n", in rtw89_phy_dig_rxb_idx_by_rssi()
2607 static void rtw89_phy_dig_gaincode_by_rssi(struct rtw89_dev *rtwdev, u8 rssi, in rtw89_phy_dig_gaincode_by_rssi() argument
2610 set->lna_idx = rtw89_phy_dig_lna_idx_by_rssi(rtwdev, rssi); in rtw89_phy_dig_gaincode_by_rssi()
2611 set->tia_idx = rtw89_phy_dig_tia_idx_by_rssi(rtwdev, rssi); in rtw89_phy_dig_gaincode_by_rssi()
2612 set->rxb_idx = rtw89_phy_dig_rxb_idx_by_rssi(rtwdev, rssi, set); in rtw89_phy_dig_gaincode_by_rssi()
2614 rtw89_debug(rtwdev, RTW89_DBG_DIG, in rtw89_phy_dig_gaincode_by_rssi()
2621 static void rtw89_phy_dig_igi_offset_by_env(struct rtw89_dev *rtwdev) in rtw89_phy_dig_igi_offset_by_env() argument
2623 struct rtw89_dig_info *dig = &rtwdev->dig; in rtw89_phy_dig_igi_offset_by_env()
2624 struct rtw89_env_monitor_info *env = &rtwdev->env_monitor; in rtw89_phy_dig_igi_offset_by_env()
2650 rtw89_debug(rtwdev, RTW89_DBG_DIG, in rtw89_phy_dig_igi_offset_by_env()
2654 rtw89_debug(rtwdev, RTW89_DBG_DIG, in rtw89_phy_dig_igi_offset_by_env()
2661 static void rtw89_phy_dig_set_lna_idx(struct rtw89_dev *rtwdev, u8 lna_idx) in rtw89_phy_dig_set_lna_idx() argument
2663 rtw89_phy_write32_mask(rtwdev, R_PATH0_LNA_INIT, in rtw89_phy_dig_set_lna_idx()
2665 rtw89_phy_write32_mask(rtwdev, R_PATH1_LNA_INIT, in rtw89_phy_dig_set_lna_idx()
2669 static void rtw89_phy_dig_set_tia_idx(struct rtw89_dev *rtwdev, u8 tia_idx) in rtw89_phy_dig_set_tia_idx() argument
2671 rtw89_phy_write32_mask(rtwdev, R_PATH0_TIA_INIT, in rtw89_phy_dig_set_tia_idx()
2673 rtw89_phy_write32_mask(rtwdev, R_PATH1_TIA_INIT, in rtw89_phy_dig_set_tia_idx()
2677 static void rtw89_phy_dig_set_rxb_idx(struct rtw89_dev *rtwdev, u8 rxb_idx) in rtw89_phy_dig_set_rxb_idx() argument
2679 rtw89_phy_write32_mask(rtwdev, R_PATH0_RXB_INIT, in rtw89_phy_dig_set_rxb_idx()
2681 rtw89_phy_write32_mask(rtwdev, R_PATH1_RXB_INIT, in rtw89_phy_dig_set_rxb_idx()
2685 static void rtw89_phy_dig_set_igi_cr(struct rtw89_dev *rtwdev, in rtw89_phy_dig_set_igi_cr() argument
2688 rtw89_phy_dig_set_lna_idx(rtwdev, set.lna_idx); in rtw89_phy_dig_set_igi_cr()
2689 rtw89_phy_dig_set_tia_idx(rtwdev, set.tia_idx); in rtw89_phy_dig_set_igi_cr()
2690 rtw89_phy_dig_set_rxb_idx(rtwdev, set.rxb_idx); in rtw89_phy_dig_set_igi_cr()
2692 rtw89_debug(rtwdev, RTW89_DBG_DIG, "Set (lna,tia,rxb)=((%d,%d,%02d))\n", in rtw89_phy_dig_set_igi_cr()
2703 static void rtw89_phy_dig_sdagc_follow_pagc_config(struct rtw89_dev *rtwdev, in rtw89_phy_dig_sdagc_follow_pagc_config() argument
2709 rtw89_phy_write32_mask(rtwdev, sdagc_config[i].addr, in rtw89_phy_dig_sdagc_follow_pagc_config()
2712 rtw89_debug(rtwdev, RTW89_DBG_DIG, "sdagc_follow_pagc=%d\n", enable); in rtw89_phy_dig_sdagc_follow_pagc_config()
2715 static void rtw89_phy_dig_dyn_pd_th(struct rtw89_dev *rtwdev, u8 rssi, in rtw89_phy_dig_dyn_pd_th() argument
2718 enum rtw89_bandwidth cbw = rtwdev->hal.current_band_width; in rtw89_phy_dig_dyn_pd_th()
2719 struct rtw89_dig_info *dig = &rtwdev->dig; in rtw89_phy_dig_dyn_pd_th()
2747 rtw89_debug(rtwdev, RTW89_DBG_DIG, in rtw89_phy_dig_dyn_pd_th()
2751 rtw89_debug(rtwdev, RTW89_DBG_DIG, in rtw89_phy_dig_dyn_pd_th()
2755 rtw89_phy_write32_mask(rtwdev, R_SEG0R_PD, B_SEG0R_PD_LOWER_BOUND_MSK, in rtw89_phy_dig_dyn_pd_th()
2757 rtw89_phy_write32_mask(rtwdev, R_SEG0R_PD, in rtw89_phy_dig_dyn_pd_th()
2761 void rtw89_phy_dig_reset(struct rtw89_dev *rtwdev) in rtw89_phy_dig_reset() argument
2763 struct rtw89_dig_info *dig = &rtwdev->dig; in rtw89_phy_dig_reset()
2766 rtw89_phy_dig_para_reset(rtwdev); in rtw89_phy_dig_reset()
2767 rtw89_phy_dig_set_igi_cr(rtwdev, dig->force_gaincode); in rtw89_phy_dig_reset()
2768 rtw89_phy_dig_dyn_pd_th(rtwdev, rssi_nolink, false); in rtw89_phy_dig_reset()
2769 rtw89_phy_dig_sdagc_follow_pagc_config(rtwdev, false); in rtw89_phy_dig_reset()
2770 rtw89_phy_dig_update_para(rtwdev); in rtw89_phy_dig_reset()
2774 void rtw89_phy_dig(struct rtw89_dev *rtwdev) in rtw89_phy_dig() argument
2776 struct rtw89_dig_info *dig = &rtwdev->dig; in rtw89_phy_dig()
2777 bool is_linked = rtwdev->total_sta_assoc > 0; in rtw89_phy_dig()
2785 rtw89_debug(rtwdev, RTW89_DBG_DIG, "First connected\n"); in rtw89_phy_dig()
2786 rtw89_phy_dig_update_para(rtwdev); in rtw89_phy_dig()
2788 rtw89_debug(rtwdev, RTW89_DBG_DIG, "First disconnected\n"); in rtw89_phy_dig()
2789 rtw89_phy_dig_update_para(rtwdev); in rtw89_phy_dig()
2793 rtw89_phy_dig_igi_offset_by_env(rtwdev); in rtw89_phy_dig()
2794 rtw89_phy_dig_update_rssi_info(rtwdev); in rtw89_phy_dig()
2804 rtw89_debug(rtwdev, RTW89_DBG_DIG, in rtw89_phy_dig()
2810 rtw89_phy_dig_set_igi_cr(rtwdev, dig->force_gaincode); in rtw89_phy_dig()
2811 rtw89_debug(rtwdev, RTW89_DBG_DIG, in rtw89_phy_dig()
2814 rtw89_phy_dig_gaincode_by_rssi(rtwdev, dig->igi_fa_rssi, in rtw89_phy_dig()
2816 rtw89_phy_dig_set_igi_cr(rtwdev, dig->cur_gaincode); in rtw89_phy_dig()
2819 rtw89_phy_dig_dyn_pd_th(rtwdev, dig->igi_fa_rssi, dig->dyn_pd_th_en); in rtw89_phy_dig()
2822 rtw89_phy_dig_sdagc_follow_pagc_config(rtwdev, true); in rtw89_phy_dig()
2824 rtw89_phy_dig_sdagc_follow_pagc_config(rtwdev, false); in rtw89_phy_dig()
2827 static void rtw89_phy_env_monitor_init(struct rtw89_dev *rtwdev) in rtw89_phy_env_monitor_init() argument
2829 rtw89_phy_ccx_top_setting_init(rtwdev); in rtw89_phy_env_monitor_init()
2830 rtw89_phy_ifs_clm_setting_init(rtwdev); in rtw89_phy_env_monitor_init()
2833 void rtw89_phy_dm_init(struct rtw89_dev *rtwdev) in rtw89_phy_dm_init() argument
2835 const struct rtw89_chip_info *chip = rtwdev->chip; in rtw89_phy_dm_init()
2837 rtw89_phy_stat_init(rtwdev); in rtw89_phy_dm_init()
2839 rtw89_chip_bb_sethw(rtwdev); in rtw89_phy_dm_init()
2841 rtw89_phy_env_monitor_init(rtwdev); in rtw89_phy_dm_init()
2842 rtw89_phy_dig_init(rtwdev); in rtw89_phy_dm_init()
2843 rtw89_phy_cfo_init(rtwdev); in rtw89_phy_dm_init()
2845 rtw89_phy_init_rf_nctl(rtwdev); in rtw89_phy_dm_init()
2846 rtw89_chip_rfk_init(rtwdev); in rtw89_phy_dm_init()
2847 rtw89_load_txpwr_table(rtwdev, chip->byr_table); in rtw89_phy_dm_init()
2848 rtw89_chip_set_txpwr_ctrl(rtwdev); in rtw89_phy_dm_init()
2849 rtw89_chip_power_trim(rtwdev); in rtw89_phy_dm_init()
2852 void rtw89_phy_set_bss_color(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif) in rtw89_phy_set_bss_color() argument
2862 rtw89_phy_write32_idx(rtwdev, R_BSS_CLR_MAP, B_BSS_CLR_MAP_VLD0, 0x1, in rtw89_phy_set_bss_color()
2864 rtw89_phy_write32_idx(rtwdev, R_BSS_CLR_MAP, B_BSS_CLR_MAP_TGT, bss_color, in rtw89_phy_set_bss_color()
2866 rtw89_phy_write32_idx(rtwdev, R_BSS_CLR_MAP, B_BSS_CLR_MAP_STAID, in rtw89_phy_set_bss_color()