Lines Matching refs:rtwdev

24 static int rtw8821c_read_efuse(struct rtw_dev *rtwdev, u8 *log_map)  in rtw8821c_read_efuse()  argument
26 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw8821c_read_efuse()
52 switch (rtw_hci_type(rtwdev)) { in rtw8821c_read_efuse()
71 static u8 rtw8821c_get_swing_index(struct rtw_dev *rtwdev) in rtw8821c_get_swing_index() argument
76 swing = rtw_read32_mask(rtwdev, REG_TXSCALE_A, 0xffe00000); in rtw8821c_get_swing_index()
86 static void rtw8821c_pwrtrack_init(struct rtw_dev *rtwdev) in rtw8821c_pwrtrack_init() argument
88 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8821c_pwrtrack_init()
89 u8 swing_idx = rtw8821c_get_swing_index(rtwdev); in rtw8821c_pwrtrack_init()
101 dm_info->thermal_meter_k = rtwdev->efuse.thermal_meter_k; in rtw8821c_pwrtrack_init()
104 static void rtw8821c_phy_bf_init(struct rtw_dev *rtwdev) in rtw8821c_phy_bf_init() argument
106 rtw_bf_phy_init(rtwdev); in rtw8821c_phy_bf_init()
108 rtw_write32(rtwdev, 0x1C94, 0xAFFFAFFF); in rtw8821c_phy_bf_init()
111 static void rtw8821c_phy_set_param(struct rtw_dev *rtwdev) in rtw8821c_phy_set_param() argument
116 val = rtw_read8(rtwdev, REG_SYS_FUNC_EN); in rtw8821c_phy_set_param()
118 rtw_write8(rtwdev, REG_SYS_FUNC_EN, val); in rtw8821c_phy_set_param()
122 rtw_write8(rtwdev, REG_SYS_FUNC_EN, val); in rtw8821c_phy_set_param()
124 rtw_write8(rtwdev, REG_SYS_FUNC_EN, val); in rtw8821c_phy_set_param()
126 rtw_write8(rtwdev, REG_SYS_FUNC_EN, val); in rtw8821c_phy_set_param()
128 rtw_write8(rtwdev, REG_RF_CTRL, in rtw8821c_phy_set_param()
131 rtw_write8(rtwdev, REG_WLRF1 + 3, in rtw8821c_phy_set_param()
136 rtw_write32_clr(rtwdev, REG_RXPSEL, BIT_RX_PSEL_RST); in rtw8821c_phy_set_param()
138 rtw_phy_load_tables(rtwdev); in rtw8821c_phy_set_param()
140 crystal_cap = rtwdev->efuse.crystal_cap & 0x3F; in rtw8821c_phy_set_param()
141 rtw_write32_mask(rtwdev, REG_AFE_XTAL_CTRL, 0x7e000000, crystal_cap); in rtw8821c_phy_set_param()
142 rtw_write32_mask(rtwdev, REG_AFE_PLL_CTRL, 0x7e, crystal_cap); in rtw8821c_phy_set_param()
143 rtw_write32_mask(rtwdev, REG_CCK0_FAREPORT, BIT(18) | BIT(22), 0); in rtw8821c_phy_set_param()
146 rtw_write32_set(rtwdev, REG_RXPSEL, BIT_RX_PSEL_RST); in rtw8821c_phy_set_param()
147 rtwdev->chip->ch_param[0] = rtw_read32_mask(rtwdev, REG_TXSF2, MASKDWORD); in rtw8821c_phy_set_param()
148 rtwdev->chip->ch_param[1] = rtw_read32_mask(rtwdev, REG_TXSF6, MASKDWORD); in rtw8821c_phy_set_param()
149 rtwdev->chip->ch_param[2] = rtw_read32_mask(rtwdev, REG_TXFILTER, MASKDWORD); in rtw8821c_phy_set_param()
151 rtw_phy_init(rtwdev); in rtw8821c_phy_set_param()
152 rtwdev->dm_info.cck_pd_default = rtw_read8(rtwdev, REG_CSRATIO) & 0x1f; in rtw8821c_phy_set_param()
154 rtw8821c_pwrtrack_init(rtwdev); in rtw8821c_phy_set_param()
156 rtw8821c_phy_bf_init(rtwdev); in rtw8821c_phy_set_param()
159 static int rtw8821c_mac_init(struct rtw_dev *rtwdev) in rtw8821c_mac_init() argument
165 rtw_write8(rtwdev, REG_AMPDU_MAX_TIME_V1, WLAN_AMPDU_MAX_TIME); in rtw8821c_mac_init()
166 rtw_write8_set(rtwdev, REG_TX_HANG_CTRL, BIT_EN_EOF_V1); in rtw8821c_mac_init()
168 rtw_write8(rtwdev, REG_PRECNT_CTRL, (u8)(pre_txcnt & 0xFF)); in rtw8821c_mac_init()
169 rtw_write8(rtwdev, REG_PRECNT_CTRL + 1, (u8)(pre_txcnt >> 8)); in rtw8821c_mac_init()
173 rtw_write32(rtwdev, REG_PROT_MODE_CTRL, value32); in rtw8821c_mac_init()
174 rtw_write16(rtwdev, REG_BAR_MODE_CTRL + 2, in rtw8821c_mac_init()
176 rtw_write8(rtwdev, REG_FAST_EDCA_VOVI_SETTING, FAST_EDCA_VO_TH); in rtw8821c_mac_init()
177 rtw_write8(rtwdev, REG_FAST_EDCA_VOVI_SETTING + 2, FAST_EDCA_VI_TH); in rtw8821c_mac_init()
178 rtw_write8(rtwdev, REG_FAST_EDCA_BEBK_SETTING, FAST_EDCA_BE_TH); in rtw8821c_mac_init()
179 rtw_write8(rtwdev, REG_FAST_EDCA_BEBK_SETTING + 2, FAST_EDCA_BK_TH); in rtw8821c_mac_init()
180 rtw_write8_set(rtwdev, REG_INIRTS_RATE_SEL, BIT(5)); in rtw8821c_mac_init()
183 rtw_write8_clr(rtwdev, REG_TIMER0_SRC_SEL, BIT_TSFT_SEL_TIMER0); in rtw8821c_mac_init()
184 rtw_write16(rtwdev, REG_TXPAUSE, 0); in rtw8821c_mac_init()
185 rtw_write8(rtwdev, REG_SLOT, WLAN_SLOT_TIME); in rtw8821c_mac_init()
186 rtw_write8(rtwdev, REG_PIFS, WLAN_PIFS_TIME); in rtw8821c_mac_init()
187 rtw_write32(rtwdev, REG_SIFS, WLAN_SIFS_CFG); in rtw8821c_mac_init()
188 rtw_write16(rtwdev, REG_EDCA_VO_PARAM + 2, WLAN_VO_TXOP_LIMIT); in rtw8821c_mac_init()
189 rtw_write16(rtwdev, REG_EDCA_VI_PARAM + 2, WLAN_VI_TXOP_LIMIT); in rtw8821c_mac_init()
190 rtw_write32(rtwdev, REG_RD_NAV_NXT, WLAN_NAV_CFG); in rtw8821c_mac_init()
191 rtw_write16(rtwdev, REG_RXTSF_OFFSET_CCK, WLAN_RX_TSF_CFG); in rtw8821c_mac_init()
194 rtw_write8_set(rtwdev, REG_BCN_CTRL, BIT_EN_BCN_FUNCTION); in rtw8821c_mac_init()
197 rtw_write32(rtwdev, REG_TBTT_PROHIBIT, WLAN_TBTT_TIME); in rtw8821c_mac_init()
198 rtw_write8(rtwdev, REG_DRVERLYINT, WLAN_DRV_EARLY_INT); in rtw8821c_mac_init()
199 rtw_write8(rtwdev, REG_BCNDMATIM, WLAN_BCN_DMA_TIME); in rtw8821c_mac_init()
200 rtw_write8_clr(rtwdev, REG_TX_PTCL_CTRL + 1, BIT_SIFS_BK_EN >> 8); in rtw8821c_mac_init()
203 rtw_write32(rtwdev, REG_RXFLTMAP0, WLAN_RX_FILTER0); in rtw8821c_mac_init()
204 rtw_write16(rtwdev, REG_RXFLTMAP2, WLAN_RX_FILTER2); in rtw8821c_mac_init()
205 rtw_write32(rtwdev, REG_RCR, WLAN_RCR_CFG); in rtw8821c_mac_init()
206 rtw_write8(rtwdev, REG_RX_PKT_LIMIT, WLAN_RXPKT_MAX_SZ_512); in rtw8821c_mac_init()
207 rtw_write8(rtwdev, REG_TCR + 2, WLAN_TX_FUNC_CFG2); in rtw8821c_mac_init()
208 rtw_write8(rtwdev, REG_TCR + 1, WLAN_TX_FUNC_CFG1); in rtw8821c_mac_init()
209 rtw_write8(rtwdev, REG_ACKTO_CCK, 0x40); in rtw8821c_mac_init()
210 rtw_write8_set(rtwdev, REG_WMAC_TRXPTCL_CTL_H, BIT(1)); in rtw8821c_mac_init()
211 rtw_write8_set(rtwdev, REG_SND_PTCL_CTRL, BIT(6)); in rtw8821c_mac_init()
212 rtw_write32(rtwdev, REG_WMAC_OPTION_FUNCTION + 8, WLAN_MAC_OPT_FUNC2); in rtw8821c_mac_init()
213 rtw_write8(rtwdev, REG_WMAC_OPTION_FUNCTION + 4, WLAN_MAC_OPT_NORM_FUNC1); in rtw8821c_mac_init()
218 static void rtw8821c_cfg_ldo25(struct rtw_dev *rtwdev, bool enable) in rtw8821c_cfg_ldo25() argument
222 ldo_pwr = rtw_read8(rtwdev, REG_LDO_EFUSE_CTRL + 3); in rtw8821c_cfg_ldo25()
224 rtw_write8(rtwdev, REG_LDO_EFUSE_CTRL + 3, ldo_pwr); in rtw8821c_cfg_ldo25()
227 static void rtw8821c_set_channel_rf(struct rtw_dev *rtwdev, u8 channel, u8 bw) in rtw8821c_set_channel_rf() argument
231 rf_reg18 = rtw_read_rf(rtwdev, RF_PATH_A, 0x18, RFREG_MASK); in rtw8821c_set_channel_rf()
260 rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTDBG, BIT(6), 0x1); in rtw8821c_set_channel_rf()
261 rtw_write_rf(rtwdev, RF_PATH_A, 0x64, 0xf, 0xf); in rtw8821c_set_channel_rf()
263 rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTDBG, BIT(6), 0x0); in rtw8821c_set_channel_rf()
266 rtw_write_rf(rtwdev, RF_PATH_A, 0x18, RFREG_MASK, rf_reg18); in rtw8821c_set_channel_rf()
268 rtw_write_rf(rtwdev, RF_PATH_A, RF_XTALX2, BIT(19), 0); in rtw8821c_set_channel_rf()
269 rtw_write_rf(rtwdev, RF_PATH_A, RF_XTALX2, BIT(19), 1); in rtw8821c_set_channel_rf()
272 static void rtw8821c_set_channel_rxdfir(struct rtw_dev *rtwdev, u8 bw) in rtw8821c_set_channel_rxdfir() argument
276 rtw_write32_mask(rtwdev, REG_ACBB0, BIT(29) | BIT(28), 0x2); in rtw8821c_set_channel_rxdfir()
277 rtw_write32_mask(rtwdev, REG_ACBBRXFIR, BIT(29) | BIT(28), 0x2); in rtw8821c_set_channel_rxdfir()
278 rtw_write32_mask(rtwdev, REG_TXDFIR, BIT(31), 0x0); in rtw8821c_set_channel_rxdfir()
279 rtw_write32_mask(rtwdev, REG_CHFIR, BIT(31), 0x0); in rtw8821c_set_channel_rxdfir()
282 rtw_write32_mask(rtwdev, REG_ACBB0, BIT(29) | BIT(28), 0x2); in rtw8821c_set_channel_rxdfir()
283 rtw_write32_mask(rtwdev, REG_ACBBRXFIR, BIT(29) | BIT(28), 0x1); in rtw8821c_set_channel_rxdfir()
284 rtw_write32_mask(rtwdev, REG_TXDFIR, BIT(31), 0x0); in rtw8821c_set_channel_rxdfir()
285 rtw_write32_mask(rtwdev, REG_CHFIR, BIT(31), 0x1); in rtw8821c_set_channel_rxdfir()
288 rtw_write32_mask(rtwdev, REG_ACBB0, BIT(29) | BIT(28), 0x2); in rtw8821c_set_channel_rxdfir()
289 rtw_write32_mask(rtwdev, REG_ACBBRXFIR, BIT(29) | BIT(28), 0x2); in rtw8821c_set_channel_rxdfir()
290 rtw_write32_mask(rtwdev, REG_TXDFIR, BIT(31), 0x1); in rtw8821c_set_channel_rxdfir()
291 rtw_write32_mask(rtwdev, REG_CHFIR, BIT(31), 0x0); in rtw8821c_set_channel_rxdfir()
295 static void rtw8821c_set_channel_bb(struct rtw_dev *rtwdev, u8 channel, u8 bw, in rtw8821c_set_channel_bb() argument
301 rtw_write32_mask(rtwdev, REG_RXPSEL, BIT(28), 0x1); in rtw8821c_set_channel_bb()
302 rtw_write32_mask(rtwdev, REG_CCK_CHECK, BIT(7), 0x0); in rtw8821c_set_channel_bb()
303 rtw_write32_mask(rtwdev, REG_ENTXCCK, BIT(18), 0x0); in rtw8821c_set_channel_bb()
304 rtw_write32_mask(rtwdev, REG_RXCCAMSK, 0x0000FC00, 15); in rtw8821c_set_channel_bb()
306 rtw_write32_mask(rtwdev, REG_TXSCALE_A, 0xf00, 0x0); in rtw8821c_set_channel_bb()
307 rtw_write32_mask(rtwdev, REG_CLKTRK, 0x1ffe0000, 0x96a); in rtw8821c_set_channel_bb()
309 rtw_write32_mask(rtwdev, REG_TXSF2, MASKDWORD, 0x0000b81c); in rtw8821c_set_channel_bb()
310 rtw_write32_mask(rtwdev, REG_TXSF6, MASKLWORD, 0x0000); in rtw8821c_set_channel_bb()
311 rtw_write32_mask(rtwdev, REG_TXFILTER, MASKDWORD, 0x00003667); in rtw8821c_set_channel_bb()
313 rtw_write32_mask(rtwdev, REG_TXSF2, MASKDWORD, in rtw8821c_set_channel_bb()
314 rtwdev->chip->ch_param[0]); in rtw8821c_set_channel_bb()
315 rtw_write32_mask(rtwdev, REG_TXSF6, MASKLWORD, in rtw8821c_set_channel_bb()
316 rtwdev->chip->ch_param[1] & MASKLWORD); in rtw8821c_set_channel_bb()
317 rtw_write32_mask(rtwdev, REG_TXFILTER, MASKDWORD, in rtw8821c_set_channel_bb()
318 rtwdev->chip->ch_param[2]); in rtw8821c_set_channel_bb()
321 rtw_write32_mask(rtwdev, REG_ENTXCCK, BIT(18), 0x1); in rtw8821c_set_channel_bb()
322 rtw_write32_mask(rtwdev, REG_CCK_CHECK, BIT(7), 0x1); in rtw8821c_set_channel_bb()
323 rtw_write32_mask(rtwdev, REG_RXPSEL, BIT(28), 0x0); in rtw8821c_set_channel_bb()
324 rtw_write32_mask(rtwdev, REG_RXCCAMSK, 0x0000FC00, 15); in rtw8821c_set_channel_bb()
327 rtw_write32_mask(rtwdev, REG_TXSCALE_A, 0xf00, 0x1); in rtw8821c_set_channel_bb()
329 rtw_write32_mask(rtwdev, REG_TXSCALE_A, 0xf00, 0x2); in rtw8821c_set_channel_bb()
331 rtw_write32_mask(rtwdev, REG_TXSCALE_A, 0xf00, 0x3); in rtw8821c_set_channel_bb()
334 rtw_write32_mask(rtwdev, REG_CLKTRK, 0x1ffe0000, 0x494); in rtw8821c_set_channel_bb()
336 rtw_write32_mask(rtwdev, REG_CLKTRK, 0x1ffe0000, 0x453); in rtw8821c_set_channel_bb()
338 rtw_write32_mask(rtwdev, REG_CLKTRK, 0x1ffe0000, 0x452); in rtw8821c_set_channel_bb()
340 rtw_write32_mask(rtwdev, REG_CLKTRK, 0x1ffe0000, 0x412); in rtw8821c_set_channel_bb()
346 val32 = rtw_read32_mask(rtwdev, REG_ADCCLK, MASKDWORD); in rtw8821c_set_channel_bb()
349 rtw_write32_mask(rtwdev, REG_ADCCLK, MASKDWORD, val32); in rtw8821c_set_channel_bb()
351 rtw_write32_mask(rtwdev, REG_ADC160, BIT(30), 0x1); in rtw8821c_set_channel_bb()
355 rtw_write32_set(rtwdev, REG_RXSB, BIT(4)); in rtw8821c_set_channel_bb()
357 rtw_write32_clr(rtwdev, REG_RXSB, BIT(4)); in rtw8821c_set_channel_bb()
359 val32 = rtw_read32_mask(rtwdev, REG_ADCCLK, MASKDWORD); in rtw8821c_set_channel_bb()
363 rtw_write32_mask(rtwdev, REG_ADCCLK, MASKDWORD, val32); in rtw8821c_set_channel_bb()
365 rtw_write32_mask(rtwdev, REG_ADC160, BIT(30), 0x1); in rtw8821c_set_channel_bb()
368 val32 = rtw_read32_mask(rtwdev, REG_ADCCLK, MASKDWORD); in rtw8821c_set_channel_bb()
372 rtw_write32_mask(rtwdev, REG_ADCCLK, MASKDWORD, val32); in rtw8821c_set_channel_bb()
374 rtw_write32_mask(rtwdev, REG_ADC160, BIT(30), 0x1); in rtw8821c_set_channel_bb()
377 val32 = rtw_read32_mask(rtwdev, REG_ADCCLK, MASKDWORD); in rtw8821c_set_channel_bb()
380 rtw_write32_mask(rtwdev, REG_ADCCLK, MASKDWORD, val32); in rtw8821c_set_channel_bb()
382 rtw_write32_mask(rtwdev, REG_ADC160, BIT(30), 0x0); in rtw8821c_set_channel_bb()
383 rtw_write32_mask(rtwdev, REG_ADC40, BIT(31), 0x1); in rtw8821c_set_channel_bb()
386 val32 = rtw_read32_mask(rtwdev, REG_ADCCLK, MASKDWORD); in rtw8821c_set_channel_bb()
389 rtw_write32_mask(rtwdev, REG_ADCCLK, MASKDWORD, val32); in rtw8821c_set_channel_bb()
391 rtw_write32_mask(rtwdev, REG_ADC160, BIT(30), 0x0); in rtw8821c_set_channel_bb()
392 rtw_write32_mask(rtwdev, REG_ADC40, BIT(31), 0x1); in rtw8821c_set_channel_bb()
397 static u32 rtw8821c_get_bb_swing(struct rtw_dev *rtwdev, u8 channel) in rtw8821c_get_bb_swing() argument
399 struct rtw_efuse efuse = rtwdev->efuse; in rtw8821c_get_bb_swing()
411 static void rtw8821c_set_channel_bb_swing(struct rtw_dev *rtwdev, u8 channel, in rtw8821c_set_channel_bb_swing() argument
414 rtw_write32_mask(rtwdev, REG_TXSCALE_A, GENMASK(31, 21), in rtw8821c_set_channel_bb_swing()
415 rtw8821c_get_bb_swing(rtwdev, channel)); in rtw8821c_set_channel_bb_swing()
416 rtw8821c_pwrtrack_init(rtwdev); in rtw8821c_set_channel_bb_swing()
419 static void rtw8821c_set_channel(struct rtw_dev *rtwdev, u8 channel, u8 bw, in rtw8821c_set_channel() argument
422 rtw8821c_set_channel_bb(rtwdev, channel, bw, primary_chan_idx); in rtw8821c_set_channel()
423 rtw8821c_set_channel_bb_swing(rtwdev, channel, bw, primary_chan_idx); in rtw8821c_set_channel()
424 rtw_set_channel_mac(rtwdev, channel, bw, primary_chan_idx); in rtw8821c_set_channel()
425 rtw8821c_set_channel_rf(rtwdev, channel, bw); in rtw8821c_set_channel()
426 rtw8821c_set_channel_rxdfir(rtwdev, bw); in rtw8821c_set_channel()
429 static void query_phy_status_page0(struct rtw_dev *rtwdev, u8 *phy_status, in query_phy_status_page0() argument
442 static void query_phy_status_page1(struct rtw_dev *rtwdev, u8 *phy_status, in query_phy_status_page1() argument
469 static void query_phy_status(struct rtw_dev *rtwdev, u8 *phy_status, in query_phy_status() argument
478 query_phy_status_page0(rtwdev, phy_status, pkt_stat); in query_phy_status()
481 query_phy_status_page1(rtwdev, phy_status, pkt_stat); in query_phy_status()
484 rtw_warn(rtwdev, "unused phy status page (%d)\n", page); in query_phy_status()
489 static void rtw8821c_query_rx_desc(struct rtw_dev *rtwdev, u8 *rx_desc, in rtw8821c_query_rx_desc() argument
494 u32 desc_sz = rtwdev->chip->rx_pkt_desc_sz; in rtw8821c_query_rx_desc()
523 query_phy_status(rtwdev, phy_status, pkt_stat); in rtw8821c_query_rx_desc()
526 rtw_rx_fill_rx_status(rtwdev, pkt_stat, hdr, rx_status, phy_status); in rtw8821c_query_rx_desc()
530 rtw8821c_set_tx_power_index_by_rate(struct rtw_dev *rtwdev, u8 path, u8 rs) in rtw8821c_set_tx_power_index_by_rate() argument
532 struct rtw_hal *hal = &rtwdev->hal; in rtw8821c_set_tx_power_index_by_rate()
545 rtw_write32(rtwdev, offset_txagc[path] + rate_idx, in rtw8821c_set_tx_power_index_by_rate()
552 static void rtw8821c_set_tx_power_index(struct rtw_dev *rtwdev) in rtw8821c_set_tx_power_index() argument
554 struct rtw_hal *hal = &rtwdev->hal; in rtw8821c_set_tx_power_index()
562 rtw8821c_set_tx_power_index_by_rate(rtwdev, path, rs); in rtw8821c_set_tx_power_index()
567 static void rtw8821c_false_alarm_statistics(struct rtw_dev *rtwdev) in rtw8821c_false_alarm_statistics() argument
569 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8821c_false_alarm_statistics()
576 cck_enable = rtw_read32(rtwdev, REG_RXPSEL) & BIT(28); in rtw8821c_false_alarm_statistics()
577 cck_fa_cnt = rtw_read16(rtwdev, REG_FA_CCK); in rtw8821c_false_alarm_statistics()
578 ofdm_fa_cnt = rtw_read16(rtwdev, REG_FA_OFDM); in rtw8821c_false_alarm_statistics()
586 crc32_cnt = rtw_read32(rtwdev, REG_CRC_CCK); in rtw8821c_false_alarm_statistics()
590 crc32_cnt = rtw_read32(rtwdev, REG_CRC_OFDM); in rtw8821c_false_alarm_statistics()
594 crc32_cnt = rtw_read32(rtwdev, REG_CRC_HT); in rtw8821c_false_alarm_statistics()
598 crc32_cnt = rtw_read32(rtwdev, REG_CRC_VHT); in rtw8821c_false_alarm_statistics()
602 cca32_cnt = rtw_read32(rtwdev, REG_CCA_OFDM); in rtw8821c_false_alarm_statistics()
606 cca32_cnt = rtw_read32(rtwdev, REG_CCA_CCK); in rtw8821c_false_alarm_statistics()
611 rtw_write32_set(rtwdev, REG_FAS, BIT(17)); in rtw8821c_false_alarm_statistics()
612 rtw_write32_clr(rtwdev, REG_FAS, BIT(17)); in rtw8821c_false_alarm_statistics()
613 rtw_write32_clr(rtwdev, REG_RXDESC, BIT(15)); in rtw8821c_false_alarm_statistics()
614 rtw_write32_set(rtwdev, REG_RXDESC, BIT(15)); in rtw8821c_false_alarm_statistics()
615 rtw_write32_set(rtwdev, REG_CNTRST, BIT(0)); in rtw8821c_false_alarm_statistics()
616 rtw_write32_clr(rtwdev, REG_CNTRST, BIT(0)); in rtw8821c_false_alarm_statistics()
619 static void rtw8821c_do_iqk(struct rtw_dev *rtwdev) in rtw8821c_do_iqk() argument
627 if (rtw_is_assoc(rtwdev)) in rtw8821c_do_iqk()
630 rtw_fw_do_iqk(rtwdev, &para); in rtw8821c_do_iqk()
633 rf_reg = rtw_read_rf(rtwdev, RF_PATH_A, RF_DTXLOK, RFREG_MASK); in rtw8821c_do_iqk()
638 rtw_write_rf(rtwdev, RF_PATH_A, RF_DTXLOK, RFREG_MASK, 0x0); in rtw8821c_do_iqk()
640 reload = !!rtw_read32_mask(rtwdev, REG_IQKFAILMSK, BIT(16)); in rtw8821c_do_iqk()
641 iqk_fail_mask = rtw_read32_mask(rtwdev, REG_IQKFAILMSK, GENMASK(7, 0)); in rtw8821c_do_iqk()
642 rtw_dbg(rtwdev, RTW_DBG_PHY, in rtw8821c_do_iqk()
647 static void rtw8821c_phy_calibration(struct rtw_dev *rtwdev) in rtw8821c_phy_calibration() argument
649 rtw8821c_do_iqk(rtwdev); in rtw8821c_phy_calibration()
653 static void rtw8821c_coex_cfg_init(struct rtw_dev *rtwdev) in rtw8821c_coex_cfg_init() argument
656 rtw_write8_set(rtwdev, REG_BCN_CTRL, BIT_EN_BCN_FUNCTION); in rtw8821c_coex_cfg_init()
659 rtw_write8_mask(rtwdev, REG_BT_TDMA_TIME, SAMPLE_RATE_MASK, in rtw8821c_coex_cfg_init()
663 rtw_write8(rtwdev, REG_BT_STAT_CTRL, BT_CNT_ENABLE); in rtw8821c_coex_cfg_init()
666 rtw_write32_set(rtwdev, REG_GPIO_MUXCFG, BIT_BT_PTA_EN); in rtw8821c_coex_cfg_init()
667 rtw_write32_set(rtwdev, REG_GPIO_MUXCFG, BIT_PO_BT_PTA_PINS); in rtw8821c_coex_cfg_init()
670 rtw_write8_set(rtwdev, REG_QUEUE_CTRL, BIT_PTA_WL_TX_EN); in rtw8821c_coex_cfg_init()
672 rtw_write8_clr(rtwdev, REG_QUEUE_CTRL, BIT_PTA_EDCCA_EN); in rtw8821c_coex_cfg_init()
674 rtw_write16_set(rtwdev, REG_BT_COEX_V2, BIT_GNT_BT_POLARITY); in rtw8821c_coex_cfg_init()
677 rtw_write8_mask(rtwdev, REG_BT_COEX_TABLE_H + 3, BIT_BCN_QUEUE, in rtw8821c_coex_cfg_init()
681 static void rtw8821c_coex_cfg_ant_switch(struct rtw_dev *rtwdev, u8 ctrl_type, in rtw8821c_coex_cfg_ant_switch() argument
684 struct rtw_coex *coex = &rtwdev->coex; in rtw8821c_coex_cfg_ant_switch()
705 rtw_write32_clr(rtwdev, REG_LED_CFG, BIT_DPDT_SEL_EN); in rtw8821c_coex_cfg_ant_switch()
706 rtw_write32_set(rtwdev, REG_LED_CFG, BIT_DPDT_WL_SEL); in rtw8821c_coex_cfg_ant_switch()
708 rtw_write8_mask(rtwdev, REG_RFE_CTRL8, BIT_MASK_RFE_SEL89, in rtw8821c_coex_cfg_ant_switch()
723 rtw_write8_mask(rtwdev, REG_RFE_CTRL8, BIT_MASK_R_RFE_SEL_15, in rtw8821c_coex_cfg_ant_switch()
727 rtw_write32_clr(rtwdev, REG_LED_CFG, BIT_DPDT_SEL_EN); in rtw8821c_coex_cfg_ant_switch()
728 rtw_write32_set(rtwdev, REG_LED_CFG, BIT_DPDT_WL_SEL); in rtw8821c_coex_cfg_ant_switch()
730 rtw_write8_mask(rtwdev, REG_RFE_CTRL8, BIT_MASK_RFE_SEL89, in rtw8821c_coex_cfg_ant_switch()
734 rtw_write8_mask(rtwdev, REG_RFE_CTRL8, BIT_MASK_R_RFE_SEL_15, in rtw8821c_coex_cfg_ant_switch()
738 rtw_write32_clr(rtwdev, REG_LED_CFG, BIT_DPDT_SEL_EN); in rtw8821c_coex_cfg_ant_switch()
739 rtw_write32_set(rtwdev, REG_LED_CFG, BIT_DPDT_WL_SEL); in rtw8821c_coex_cfg_ant_switch()
740 rtw_write8_mask(rtwdev, REG_RFE_CTRL8, BIT_MASK_RFE_SEL89, in rtw8821c_coex_cfg_ant_switch()
744 rtw_write32_set(rtwdev, REG_LED_CFG, BIT_DPDT_SEL_EN); in rtw8821c_coex_cfg_ant_switch()
747 rtw_write8_mask(rtwdev, REG_PAD_CTRL1, BIT_SW_DPDT_SEL_DATA, in rtw8821c_coex_cfg_ant_switch()
751 rtw_write32_clr(rtwdev, REG_LED_CFG, BIT_DPDT_SEL_EN); in rtw8821c_coex_cfg_ant_switch()
752 rtw_write32_set(rtwdev, REG_LED_CFG, BIT_DPDT_WL_SEL); in rtw8821c_coex_cfg_ant_switch()
755 rtw_write32_clr(rtwdev, REG_LED_CFG, BIT_DPDT_SEL_EN); in rtw8821c_coex_cfg_ant_switch()
756 rtw_write32_clr(rtwdev, REG_LED_CFG, BIT_DPDT_WL_SEL); in rtw8821c_coex_cfg_ant_switch()
761 rtw_write32_clr(rtwdev, REG_CTRL_TYPE, BIT_CTRL_TYPE1); in rtw8821c_coex_cfg_ant_switch()
762 rtw_write32_clr(rtwdev, REG_CTRL_TYPE, BIT_CTRL_TYPE2); in rtw8821c_coex_cfg_ant_switch()
764 rtw_write32_set(rtwdev, REG_CTRL_TYPE, BIT_CTRL_TYPE1); in rtw8821c_coex_cfg_ant_switch()
765 rtw_write32_set(rtwdev, REG_CTRL_TYPE, BIT_CTRL_TYPE2); in rtw8821c_coex_cfg_ant_switch()
769 static void rtw8821c_coex_cfg_gnt_fix(struct rtw_dev *rtwdev) in rtw8821c_coex_cfg_gnt_fix() argument
772 static void rtw8821c_coex_cfg_gnt_debug(struct rtw_dev *rtwdev) in rtw8821c_coex_cfg_gnt_debug() argument
774 rtw_write32_clr(rtwdev, REG_PAD_CTRL1, BIT_BTGP_SPI_EN); in rtw8821c_coex_cfg_gnt_debug()
775 rtw_write32_clr(rtwdev, REG_PAD_CTRL1, BIT_BTGP_JTAG_EN); in rtw8821c_coex_cfg_gnt_debug()
776 rtw_write32_clr(rtwdev, REG_GPIO_MUXCFG, BIT_FSPI_EN); in rtw8821c_coex_cfg_gnt_debug()
777 rtw_write32_clr(rtwdev, REG_PAD_CTRL1, BIT_LED1DIS); in rtw8821c_coex_cfg_gnt_debug()
778 rtw_write32_clr(rtwdev, REG_SYS_SDIO_CTRL, BIT_SDIO_INT); in rtw8821c_coex_cfg_gnt_debug()
779 rtw_write32_clr(rtwdev, REG_SYS_SDIO_CTRL, BIT_DBG_GNT_WL_BT); in rtw8821c_coex_cfg_gnt_debug()
782 static void rtw8821c_coex_cfg_rfe_type(struct rtw_dev *rtwdev) in rtw8821c_coex_cfg_rfe_type() argument
784 struct rtw_coex *coex = &rtwdev->coex; in rtw8821c_coex_cfg_rfe_type()
786 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw8821c_coex_cfg_rfe_type()
824 static void rtw8821c_coex_cfg_wl_tx_power(struct rtw_dev *rtwdev, u8 wl_pwr) in rtw8821c_coex_cfg_wl_tx_power() argument
826 struct rtw_coex *coex = &rtwdev->coex; in rtw8821c_coex_cfg_wl_tx_power()
828 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw8821c_coex_cfg_wl_tx_power()
840 static void rtw8821c_coex_cfg_wl_rx_gain(struct rtw_dev *rtwdev, bool low_gain) in rtw8821c_coex_cfg_wl_rx_gain() argument
844 rtw8821c_txagc_swing_offset(struct rtw_dev *rtwdev, u8 pwr_idx_offset, in rtw8821c_txagc_swing_offset() argument
848 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8821c_txagc_swing_offset()
886 rtw_warn(rtwdev, "swing index overflow\n"); in rtw8821c_txagc_swing_offset()
894 static void rtw8821c_pwrtrack_set_pwr(struct rtw_dev *rtwdev, u8 pwr_idx_offset, in rtw8821c_pwrtrack_set_pwr() argument
900 rtw8821c_txagc_swing_offset(rtwdev, pwr_idx_offset, pwr_idx_offset_lower, in rtw8821c_pwrtrack_set_pwr()
902 rtw_write32_mask(rtwdev, REG_TXAGCIDX, GENMASK(6, 1), txagc_idx); in rtw8821c_pwrtrack_set_pwr()
903 rtw_write32_mask(rtwdev, REG_TXSCALE_A, GENMASK(31, 21), in rtw8821c_pwrtrack_set_pwr()
907 static void rtw8821c_pwrtrack_set(struct rtw_dev *rtwdev) in rtw8821c_pwrtrack_set() argument
909 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8821c_pwrtrack_set()
912 u8 channel = rtwdev->hal.current_channel; in rtw8821c_pwrtrack_set()
913 u8 band_width = rtwdev->hal.current_band_width; in rtw8821c_pwrtrack_set()
914 u8 regd = rtwdev->regd.txpwr_regd; in rtw8821c_pwrtrack_set()
916 u8 max_pwr_idx = rtwdev->chip->max_power_index; in rtw8821c_pwrtrack_set()
918 tx_pwr_idx = rtw_phy_get_tx_power_index(rtwdev, RF_PATH_A, tx_rate, in rtw8821c_pwrtrack_set()
926 rtw8821c_pwrtrack_set_pwr(rtwdev, pwr_idx_offset, pwr_idx_offset_lower); in rtw8821c_pwrtrack_set()
929 static void rtw8821c_phy_pwrtrack(struct rtw_dev *rtwdev) in rtw8821c_phy_pwrtrack() argument
931 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8821c_phy_pwrtrack()
935 rtw_phy_config_swing_table(rtwdev, &swing_table); in rtw8821c_phy_pwrtrack()
937 if (rtwdev->efuse.thermal_meter[0] == 0xff) in rtw8821c_phy_pwrtrack()
940 thermal_value = rtw_read_rf(rtwdev, RF_PATH_A, RF_T_METER, 0xfc00); in rtw8821c_phy_pwrtrack()
942 rtw_phy_pwrtrack_avg(rtwdev, thermal_value, RF_PATH_A); in rtw8821c_phy_pwrtrack()
946 else if (!rtw_phy_pwrtrack_thermal_changed(rtwdev, thermal_value, in rtw8821c_phy_pwrtrack()
950 delta = rtw_phy_pwrtrack_get_delta(rtwdev, RF_PATH_A); in rtw8821c_phy_pwrtrack()
955 rtw_phy_pwrtrack_get_pwridx(rtwdev, &swing_table, RF_PATH_A, in rtw8821c_phy_pwrtrack()
963 rtw8821c_pwrtrack_set(rtwdev); in rtw8821c_phy_pwrtrack()
966 if (rtw_phy_pwrtrack_need_iqk(rtwdev)) in rtw8821c_phy_pwrtrack()
967 rtw8821c_do_iqk(rtwdev); in rtw8821c_phy_pwrtrack()
970 static void rtw8821c_pwr_track(struct rtw_dev *rtwdev) in rtw8821c_pwr_track() argument
972 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw8821c_pwr_track()
973 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8821c_pwr_track()
979 rtw_write_rf(rtwdev, RF_PATH_A, RF_T_METER, in rtw8821c_pwr_track()
985 rtw8821c_phy_pwrtrack(rtwdev); in rtw8821c_pwr_track()
989 static void rtw8821c_bf_config_bfee_su(struct rtw_dev *rtwdev, in rtw8821c_bf_config_bfee_su() argument
994 rtw_bf_enable_bfee_su(rtwdev, vif, bfee); in rtw8821c_bf_config_bfee_su()
996 rtw_bf_remove_bfee_su(rtwdev, bfee); in rtw8821c_bf_config_bfee_su()
999 static void rtw8821c_bf_config_bfee_mu(struct rtw_dev *rtwdev, in rtw8821c_bf_config_bfee_mu() argument
1004 rtw_bf_enable_bfee_mu(rtwdev, vif, bfee); in rtw8821c_bf_config_bfee_mu()
1006 rtw_bf_remove_bfee_mu(rtwdev, bfee); in rtw8821c_bf_config_bfee_mu()
1009 static void rtw8821c_bf_config_bfee(struct rtw_dev *rtwdev, struct rtw_vif *vif, in rtw8821c_bf_config_bfee() argument
1013 rtw8821c_bf_config_bfee_su(rtwdev, vif, bfee, enable); in rtw8821c_bf_config_bfee()
1015 rtw8821c_bf_config_bfee_mu(rtwdev, vif, bfee, enable); in rtw8821c_bf_config_bfee()
1017 rtw_warn(rtwdev, "wrong bfee role\n"); in rtw8821c_bf_config_bfee()
1020 static void rtw8821c_phy_cck_pd_set(struct rtw_dev *rtwdev, u8 new_lvl) in rtw8821c_phy_cck_pd_set() argument
1022 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8821c_phy_cck_pd_set()
1038 rtw_write32_mask(rtwdev, REG_PWRTH, 0x3f0000, pd[new_lvl]); in rtw8821c_phy_cck_pd_set()
1039 rtw_write32_mask(rtwdev, REG_PWRTH2, 0x1f0000, in rtw8821c_phy_cck_pd_set()