Lines Matching refs:rtwdev

35 static int rtw8821c_read_efuse(struct rtw_dev *rtwdev, u8 *log_map)  in rtw8821c_read_efuse()  argument
37 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw8821c_read_efuse()
63 switch (rtw_hci_type(rtwdev)) { in rtw8821c_read_efuse()
82 static u8 rtw8821c_get_swing_index(struct rtw_dev *rtwdev) in rtw8821c_get_swing_index() argument
87 swing = rtw_read32_mask(rtwdev, REG_TXSCALE_A, 0xffe00000); in rtw8821c_get_swing_index()
97 static void rtw8821c_pwrtrack_init(struct rtw_dev *rtwdev) in rtw8821c_pwrtrack_init() argument
99 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8821c_pwrtrack_init()
100 u8 swing_idx = rtw8821c_get_swing_index(rtwdev); in rtw8821c_pwrtrack_init()
112 dm_info->thermal_meter_k = rtwdev->efuse.thermal_meter_k; in rtw8821c_pwrtrack_init()
115 static void rtw8821c_phy_bf_init(struct rtw_dev *rtwdev) in rtw8821c_phy_bf_init() argument
117 rtw_bf_phy_init(rtwdev); in rtw8821c_phy_bf_init()
119 rtw_write32(rtwdev, 0x1C94, 0xAFFFAFFF); in rtw8821c_phy_bf_init()
122 static void rtw8821c_phy_set_param(struct rtw_dev *rtwdev) in rtw8821c_phy_set_param() argument
127 val = rtw_read8(rtwdev, REG_SYS_FUNC_EN); in rtw8821c_phy_set_param()
129 rtw_write8(rtwdev, REG_SYS_FUNC_EN, val); in rtw8821c_phy_set_param()
133 rtw_write8(rtwdev, REG_SYS_FUNC_EN, val); in rtw8821c_phy_set_param()
135 rtw_write8(rtwdev, REG_SYS_FUNC_EN, val); in rtw8821c_phy_set_param()
137 rtw_write8(rtwdev, REG_SYS_FUNC_EN, val); in rtw8821c_phy_set_param()
139 rtw_write8(rtwdev, REG_RF_CTRL, in rtw8821c_phy_set_param()
142 rtw_write8(rtwdev, REG_WLRF1 + 3, in rtw8821c_phy_set_param()
147 rtw_write32_clr(rtwdev, REG_RXPSEL, BIT_RX_PSEL_RST); in rtw8821c_phy_set_param()
149 rtw_phy_load_tables(rtwdev); in rtw8821c_phy_set_param()
151 crystal_cap = rtwdev->efuse.crystal_cap & 0x3F; in rtw8821c_phy_set_param()
152 rtw_write32_mask(rtwdev, REG_AFE_XTAL_CTRL, 0x7e000000, crystal_cap); in rtw8821c_phy_set_param()
153 rtw_write32_mask(rtwdev, REG_AFE_PLL_CTRL, 0x7e, crystal_cap); in rtw8821c_phy_set_param()
154 rtw_write32_mask(rtwdev, REG_CCK0_FAREPORT, BIT(18) | BIT(22), 0); in rtw8821c_phy_set_param()
157 rtw_write32_set(rtwdev, REG_RXPSEL, BIT_RX_PSEL_RST); in rtw8821c_phy_set_param()
158 rtwdev->chip->ch_param[0] = rtw_read32_mask(rtwdev, REG_TXSF2, MASKDWORD); in rtw8821c_phy_set_param()
159 rtwdev->chip->ch_param[1] = rtw_read32_mask(rtwdev, REG_TXSF6, MASKDWORD); in rtw8821c_phy_set_param()
160 rtwdev->chip->ch_param[2] = rtw_read32_mask(rtwdev, REG_TXFILTER, MASKDWORD); in rtw8821c_phy_set_param()
162 rtw_phy_init(rtwdev); in rtw8821c_phy_set_param()
163 rtwdev->dm_info.cck_pd_default = rtw_read8(rtwdev, REG_CSRATIO) & 0x1f; in rtw8821c_phy_set_param()
165 rtw8821c_pwrtrack_init(rtwdev); in rtw8821c_phy_set_param()
167 rtw8821c_phy_bf_init(rtwdev); in rtw8821c_phy_set_param()
170 static int rtw8821c_mac_init(struct rtw_dev *rtwdev) in rtw8821c_mac_init() argument
176 rtw_write8(rtwdev, REG_AMPDU_MAX_TIME_V1, WLAN_AMPDU_MAX_TIME); in rtw8821c_mac_init()
177 rtw_write8_set(rtwdev, REG_TX_HANG_CTRL, BIT_EN_EOF_V1); in rtw8821c_mac_init()
179 rtw_write8(rtwdev, REG_PRECNT_CTRL, (u8)(pre_txcnt & 0xFF)); in rtw8821c_mac_init()
180 rtw_write8(rtwdev, REG_PRECNT_CTRL + 1, (u8)(pre_txcnt >> 8)); in rtw8821c_mac_init()
184 rtw_write32(rtwdev, REG_PROT_MODE_CTRL, value32); in rtw8821c_mac_init()
185 rtw_write16(rtwdev, REG_BAR_MODE_CTRL + 2, in rtw8821c_mac_init()
187 rtw_write8(rtwdev, REG_FAST_EDCA_VOVI_SETTING, FAST_EDCA_VO_TH); in rtw8821c_mac_init()
188 rtw_write8(rtwdev, REG_FAST_EDCA_VOVI_SETTING + 2, FAST_EDCA_VI_TH); in rtw8821c_mac_init()
189 rtw_write8(rtwdev, REG_FAST_EDCA_BEBK_SETTING, FAST_EDCA_BE_TH); in rtw8821c_mac_init()
190 rtw_write8(rtwdev, REG_FAST_EDCA_BEBK_SETTING + 2, FAST_EDCA_BK_TH); in rtw8821c_mac_init()
191 rtw_write8_set(rtwdev, REG_INIRTS_RATE_SEL, BIT(5)); in rtw8821c_mac_init()
194 rtw_write8_clr(rtwdev, REG_TIMER0_SRC_SEL, BIT_TSFT_SEL_TIMER0); in rtw8821c_mac_init()
195 rtw_write16(rtwdev, REG_TXPAUSE, 0); in rtw8821c_mac_init()
196 rtw_write8(rtwdev, REG_SLOT, WLAN_SLOT_TIME); in rtw8821c_mac_init()
197 rtw_write8(rtwdev, REG_PIFS, WLAN_PIFS_TIME); in rtw8821c_mac_init()
198 rtw_write32(rtwdev, REG_SIFS, WLAN_SIFS_CFG); in rtw8821c_mac_init()
199 rtw_write16(rtwdev, REG_EDCA_VO_PARAM + 2, WLAN_VO_TXOP_LIMIT); in rtw8821c_mac_init()
200 rtw_write16(rtwdev, REG_EDCA_VI_PARAM + 2, WLAN_VI_TXOP_LIMIT); in rtw8821c_mac_init()
201 rtw_write32(rtwdev, REG_RD_NAV_NXT, WLAN_NAV_CFG); in rtw8821c_mac_init()
202 rtw_write16(rtwdev, REG_RXTSF_OFFSET_CCK, WLAN_RX_TSF_CFG); in rtw8821c_mac_init()
205 rtw_write8_set(rtwdev, REG_BCN_CTRL, BIT_EN_BCN_FUNCTION); in rtw8821c_mac_init()
208 rtw_write32(rtwdev, REG_TBTT_PROHIBIT, WLAN_TBTT_TIME); in rtw8821c_mac_init()
209 rtw_write8(rtwdev, REG_DRVERLYINT, WLAN_DRV_EARLY_INT); in rtw8821c_mac_init()
210 rtw_write8(rtwdev, REG_BCNDMATIM, WLAN_BCN_DMA_TIME); in rtw8821c_mac_init()
211 rtw_write8_clr(rtwdev, REG_TX_PTCL_CTRL + 1, BIT_SIFS_BK_EN >> 8); in rtw8821c_mac_init()
214 rtw_write32(rtwdev, REG_RXFLTMAP0, WLAN_RX_FILTER0); in rtw8821c_mac_init()
215 rtw_write16(rtwdev, REG_RXFLTMAP2, WLAN_RX_FILTER2); in rtw8821c_mac_init()
216 rtw_write32(rtwdev, REG_RCR, WLAN_RCR_CFG); in rtw8821c_mac_init()
217 rtw_write8(rtwdev, REG_RX_PKT_LIMIT, WLAN_RXPKT_MAX_SZ_512); in rtw8821c_mac_init()
218 rtw_write8(rtwdev, REG_TCR + 2, WLAN_TX_FUNC_CFG2); in rtw8821c_mac_init()
219 rtw_write8(rtwdev, REG_TCR + 1, WLAN_TX_FUNC_CFG1); in rtw8821c_mac_init()
220 rtw_write8(rtwdev, REG_ACKTO_CCK, 0x40); in rtw8821c_mac_init()
221 rtw_write8_set(rtwdev, REG_WMAC_TRXPTCL_CTL_H, BIT(1)); in rtw8821c_mac_init()
222 rtw_write8_set(rtwdev, REG_SND_PTCL_CTRL, BIT(6)); in rtw8821c_mac_init()
223 rtw_write32(rtwdev, REG_WMAC_OPTION_FUNCTION + 8, WLAN_MAC_OPT_FUNC2); in rtw8821c_mac_init()
224 rtw_write8(rtwdev, REG_WMAC_OPTION_FUNCTION + 4, WLAN_MAC_OPT_NORM_FUNC1); in rtw8821c_mac_init()
229 static void rtw8821c_cfg_ldo25(struct rtw_dev *rtwdev, bool enable) in rtw8821c_cfg_ldo25() argument
233 ldo_pwr = rtw_read8(rtwdev, REG_LDO_EFUSE_CTRL + 3); in rtw8821c_cfg_ldo25()
235 rtw_write8(rtwdev, REG_LDO_EFUSE_CTRL + 3, ldo_pwr); in rtw8821c_cfg_ldo25()
238 static void rtw8821c_switch_rf_set(struct rtw_dev *rtwdev, u8 rf_set) in rtw8821c_switch_rf_set() argument
242 rtw_write32_set(rtwdev, REG_DMEM_CTRL, BIT_WL_RST); in rtw8821c_switch_rf_set()
243 rtw_write32_set(rtwdev, REG_SYS_CTRL, BIT_FEN_EN); in rtw8821c_switch_rf_set()
245 reg = rtw_read32(rtwdev, REG_RFECTL); in rtw8821c_switch_rf_set()
251 rtw_write32_mask(rtwdev, REG_ENRXCCA, MASKBYTE2, BTG_CCA); in rtw8821c_switch_rf_set()
252 rtw_write32_mask(rtwdev, REG_ENTXCCK, MASKLWORD, BTG_LNA); in rtw8821c_switch_rf_set()
257 rtw_write32_mask(rtwdev, REG_ENRXCCA, MASKBYTE2, WLG_CCA); in rtw8821c_switch_rf_set()
258 rtw_write32_mask(rtwdev, REG_ENTXCCK, MASKLWORD, WLG_LNA); in rtw8821c_switch_rf_set()
269 rtw_write32(rtwdev, REG_RFECTL, reg); in rtw8821c_switch_rf_set()
272 static void rtw8821c_set_channel_rf(struct rtw_dev *rtwdev, u8 channel, u8 bw) in rtw8821c_set_channel_rf() argument
276 rf_reg18 = rtw_read_rf(rtwdev, RF_PATH_A, 0x18, RFREG_MASK); in rtw8821c_set_channel_rf()
305 if (rtwdev->efuse.rfe_option == 0) in rtw8821c_set_channel_rf()
306 rtw8821c_switch_rf_set(rtwdev, SWITCH_TO_WLG); in rtw8821c_set_channel_rf()
307 else if (rtwdev->efuse.rfe_option == 2) in rtw8821c_set_channel_rf()
308 rtw8821c_switch_rf_set(rtwdev, SWITCH_TO_BTG); in rtw8821c_set_channel_rf()
309 rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTDBG, BIT(6), 0x1); in rtw8821c_set_channel_rf()
310 rtw_write_rf(rtwdev, RF_PATH_A, 0x64, 0xf, 0xf); in rtw8821c_set_channel_rf()
312 rtw8821c_switch_rf_set(rtwdev, SWITCH_TO_WLA); in rtw8821c_set_channel_rf()
313 rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTDBG, BIT(6), 0x0); in rtw8821c_set_channel_rf()
316 rtw_write_rf(rtwdev, RF_PATH_A, 0x18, RFREG_MASK, rf_reg18); in rtw8821c_set_channel_rf()
318 rtw_write_rf(rtwdev, RF_PATH_A, RF_XTALX2, BIT(19), 0); in rtw8821c_set_channel_rf()
319 rtw_write_rf(rtwdev, RF_PATH_A, RF_XTALX2, BIT(19), 1); in rtw8821c_set_channel_rf()
322 static void rtw8821c_set_channel_rxdfir(struct rtw_dev *rtwdev, u8 bw) in rtw8821c_set_channel_rxdfir() argument
326 rtw_write32_mask(rtwdev, REG_ACBB0, BIT(29) | BIT(28), 0x2); in rtw8821c_set_channel_rxdfir()
327 rtw_write32_mask(rtwdev, REG_ACBBRXFIR, BIT(29) | BIT(28), 0x2); in rtw8821c_set_channel_rxdfir()
328 rtw_write32_mask(rtwdev, REG_TXDFIR, BIT(31), 0x0); in rtw8821c_set_channel_rxdfir()
329 rtw_write32_mask(rtwdev, REG_CHFIR, BIT(31), 0x0); in rtw8821c_set_channel_rxdfir()
332 rtw_write32_mask(rtwdev, REG_ACBB0, BIT(29) | BIT(28), 0x2); in rtw8821c_set_channel_rxdfir()
333 rtw_write32_mask(rtwdev, REG_ACBBRXFIR, BIT(29) | BIT(28), 0x1); in rtw8821c_set_channel_rxdfir()
334 rtw_write32_mask(rtwdev, REG_TXDFIR, BIT(31), 0x0); in rtw8821c_set_channel_rxdfir()
335 rtw_write32_mask(rtwdev, REG_CHFIR, BIT(31), 0x1); in rtw8821c_set_channel_rxdfir()
338 rtw_write32_mask(rtwdev, REG_ACBB0, BIT(29) | BIT(28), 0x2); in rtw8821c_set_channel_rxdfir()
339 rtw_write32_mask(rtwdev, REG_ACBBRXFIR, BIT(29) | BIT(28), 0x2); in rtw8821c_set_channel_rxdfir()
340 rtw_write32_mask(rtwdev, REG_TXDFIR, BIT(31), 0x1); in rtw8821c_set_channel_rxdfir()
341 rtw_write32_mask(rtwdev, REG_CHFIR, BIT(31), 0x0); in rtw8821c_set_channel_rxdfir()
345 static void rtw8821c_set_channel_bb(struct rtw_dev *rtwdev, u8 channel, u8 bw, in rtw8821c_set_channel_bb() argument
351 rtw_write32_mask(rtwdev, REG_RXPSEL, BIT(28), 0x1); in rtw8821c_set_channel_bb()
352 rtw_write32_mask(rtwdev, REG_CCK_CHECK, BIT(7), 0x0); in rtw8821c_set_channel_bb()
353 rtw_write32_mask(rtwdev, REG_ENTXCCK, BIT(18), 0x0); in rtw8821c_set_channel_bb()
354 rtw_write32_mask(rtwdev, REG_RXCCAMSK, 0x0000FC00, 15); in rtw8821c_set_channel_bb()
356 rtw_write32_mask(rtwdev, REG_TXSCALE_A, 0xf00, 0x0); in rtw8821c_set_channel_bb()
357 rtw_write32_mask(rtwdev, REG_CLKTRK, 0x1ffe0000, 0x96a); in rtw8821c_set_channel_bb()
359 rtw_write32_mask(rtwdev, REG_TXSF2, MASKDWORD, 0x0000b81c); in rtw8821c_set_channel_bb()
360 rtw_write32_mask(rtwdev, REG_TXSF6, MASKLWORD, 0x0000); in rtw8821c_set_channel_bb()
361 rtw_write32_mask(rtwdev, REG_TXFILTER, MASKDWORD, 0x00003667); in rtw8821c_set_channel_bb()
363 rtw_write32_mask(rtwdev, REG_TXSF2, MASKDWORD, in rtw8821c_set_channel_bb()
364 rtwdev->chip->ch_param[0]); in rtw8821c_set_channel_bb()
365 rtw_write32_mask(rtwdev, REG_TXSF6, MASKLWORD, in rtw8821c_set_channel_bb()
366 rtwdev->chip->ch_param[1] & MASKLWORD); in rtw8821c_set_channel_bb()
367 rtw_write32_mask(rtwdev, REG_TXFILTER, MASKDWORD, in rtw8821c_set_channel_bb()
368 rtwdev->chip->ch_param[2]); in rtw8821c_set_channel_bb()
371 rtw_write32_mask(rtwdev, REG_ENTXCCK, BIT(18), 0x1); in rtw8821c_set_channel_bb()
372 rtw_write32_mask(rtwdev, REG_CCK_CHECK, BIT(7), 0x1); in rtw8821c_set_channel_bb()
373 rtw_write32_mask(rtwdev, REG_RXPSEL, BIT(28), 0x0); in rtw8821c_set_channel_bb()
374 rtw_write32_mask(rtwdev, REG_RXCCAMSK, 0x0000FC00, 15); in rtw8821c_set_channel_bb()
377 rtw_write32_mask(rtwdev, REG_TXSCALE_A, 0xf00, 0x1); in rtw8821c_set_channel_bb()
379 rtw_write32_mask(rtwdev, REG_TXSCALE_A, 0xf00, 0x2); in rtw8821c_set_channel_bb()
381 rtw_write32_mask(rtwdev, REG_TXSCALE_A, 0xf00, 0x3); in rtw8821c_set_channel_bb()
384 rtw_write32_mask(rtwdev, REG_CLKTRK, 0x1ffe0000, 0x494); in rtw8821c_set_channel_bb()
386 rtw_write32_mask(rtwdev, REG_CLKTRK, 0x1ffe0000, 0x453); in rtw8821c_set_channel_bb()
388 rtw_write32_mask(rtwdev, REG_CLKTRK, 0x1ffe0000, 0x452); in rtw8821c_set_channel_bb()
390 rtw_write32_mask(rtwdev, REG_CLKTRK, 0x1ffe0000, 0x412); in rtw8821c_set_channel_bb()
396 val32 = rtw_read32_mask(rtwdev, REG_ADCCLK, MASKDWORD); in rtw8821c_set_channel_bb()
399 rtw_write32_mask(rtwdev, REG_ADCCLK, MASKDWORD, val32); in rtw8821c_set_channel_bb()
401 rtw_write32_mask(rtwdev, REG_ADC160, BIT(30), 0x1); in rtw8821c_set_channel_bb()
405 rtw_write32_set(rtwdev, REG_RXSB, BIT(4)); in rtw8821c_set_channel_bb()
407 rtw_write32_clr(rtwdev, REG_RXSB, BIT(4)); in rtw8821c_set_channel_bb()
409 val32 = rtw_read32_mask(rtwdev, REG_ADCCLK, MASKDWORD); in rtw8821c_set_channel_bb()
413 rtw_write32_mask(rtwdev, REG_ADCCLK, MASKDWORD, val32); in rtw8821c_set_channel_bb()
415 rtw_write32_mask(rtwdev, REG_ADC160, BIT(30), 0x1); in rtw8821c_set_channel_bb()
418 val32 = rtw_read32_mask(rtwdev, REG_ADCCLK, MASKDWORD); in rtw8821c_set_channel_bb()
422 rtw_write32_mask(rtwdev, REG_ADCCLK, MASKDWORD, val32); in rtw8821c_set_channel_bb()
424 rtw_write32_mask(rtwdev, REG_ADC160, BIT(30), 0x1); in rtw8821c_set_channel_bb()
427 val32 = rtw_read32_mask(rtwdev, REG_ADCCLK, MASKDWORD); in rtw8821c_set_channel_bb()
430 rtw_write32_mask(rtwdev, REG_ADCCLK, MASKDWORD, val32); in rtw8821c_set_channel_bb()
432 rtw_write32_mask(rtwdev, REG_ADC160, BIT(30), 0x0); in rtw8821c_set_channel_bb()
433 rtw_write32_mask(rtwdev, REG_ADC40, BIT(31), 0x1); in rtw8821c_set_channel_bb()
436 val32 = rtw_read32_mask(rtwdev, REG_ADCCLK, MASKDWORD); in rtw8821c_set_channel_bb()
439 rtw_write32_mask(rtwdev, REG_ADCCLK, MASKDWORD, val32); in rtw8821c_set_channel_bb()
441 rtw_write32_mask(rtwdev, REG_ADC160, BIT(30), 0x0); in rtw8821c_set_channel_bb()
442 rtw_write32_mask(rtwdev, REG_ADC40, BIT(31), 0x1); in rtw8821c_set_channel_bb()
447 static u32 rtw8821c_get_bb_swing(struct rtw_dev *rtwdev, u8 channel) in rtw8821c_get_bb_swing() argument
449 struct rtw_efuse efuse = rtwdev->efuse; in rtw8821c_get_bb_swing()
461 static void rtw8821c_set_channel_bb_swing(struct rtw_dev *rtwdev, u8 channel, in rtw8821c_set_channel_bb_swing() argument
464 rtw_write32_mask(rtwdev, REG_TXSCALE_A, GENMASK(31, 21), in rtw8821c_set_channel_bb_swing()
465 rtw8821c_get_bb_swing(rtwdev, channel)); in rtw8821c_set_channel_bb_swing()
466 rtw8821c_pwrtrack_init(rtwdev); in rtw8821c_set_channel_bb_swing()
469 static void rtw8821c_set_channel(struct rtw_dev *rtwdev, u8 channel, u8 bw, in rtw8821c_set_channel() argument
472 rtw8821c_set_channel_bb(rtwdev, channel, bw, primary_chan_idx); in rtw8821c_set_channel()
473 rtw8821c_set_channel_bb_swing(rtwdev, channel, bw, primary_chan_idx); in rtw8821c_set_channel()
474 rtw_set_channel_mac(rtwdev, channel, bw, primary_chan_idx); in rtw8821c_set_channel()
475 rtw8821c_set_channel_rf(rtwdev, channel, bw); in rtw8821c_set_channel()
476 rtw8821c_set_channel_rxdfir(rtwdev, bw); in rtw8821c_set_channel()
479 static s8 get_cck_rx_pwr(struct rtw_dev *rtwdev, u8 lna_idx, u8 vga_idx) in get_cck_rx_pwr() argument
481 struct rtw_efuse *efuse = &rtwdev->efuse; in get_cck_rx_pwr()
496 rtw_info(rtwdev, "incorrect lna index (%d)\n", lna_idx); in get_cck_rx_pwr()
506 static void query_phy_status_page0(struct rtw_dev *rtwdev, u8 *phy_status, in query_phy_status_page0() argument
516 rx_power = get_cck_rx_pwr(rtwdev, lna_idx, vga_idx); in query_phy_status_page0()
524 static void query_phy_status_page1(struct rtw_dev *rtwdev, u8 *phy_status, in query_phy_status_page1() argument
551 static void query_phy_status(struct rtw_dev *rtwdev, u8 *phy_status, in query_phy_status() argument
560 query_phy_status_page0(rtwdev, phy_status, pkt_stat); in query_phy_status()
563 query_phy_status_page1(rtwdev, phy_status, pkt_stat); in query_phy_status()
566 rtw_warn(rtwdev, "unused phy status page (%d)\n", page); in query_phy_status()
571 static void rtw8821c_query_rx_desc(struct rtw_dev *rtwdev, u8 *rx_desc, in rtw8821c_query_rx_desc() argument
576 u32 desc_sz = rtwdev->chip->rx_pkt_desc_sz; in rtw8821c_query_rx_desc()
606 query_phy_status(rtwdev, phy_status, pkt_stat); in rtw8821c_query_rx_desc()
609 rtw_rx_fill_rx_status(rtwdev, pkt_stat, hdr, rx_status, phy_status); in rtw8821c_query_rx_desc()
613 rtw8821c_set_tx_power_index_by_rate(struct rtw_dev *rtwdev, u8 path, u8 rs) in rtw8821c_set_tx_power_index_by_rate() argument
615 struct rtw_hal *hal = &rtwdev->hal; in rtw8821c_set_tx_power_index_by_rate()
628 rtw_write32(rtwdev, offset_txagc[path] + rate_idx, in rtw8821c_set_tx_power_index_by_rate()
635 static void rtw8821c_set_tx_power_index(struct rtw_dev *rtwdev) in rtw8821c_set_tx_power_index() argument
637 struct rtw_hal *hal = &rtwdev->hal; in rtw8821c_set_tx_power_index()
645 rtw8821c_set_tx_power_index_by_rate(rtwdev, path, rs); in rtw8821c_set_tx_power_index()
650 static void rtw8821c_false_alarm_statistics(struct rtw_dev *rtwdev) in rtw8821c_false_alarm_statistics() argument
652 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8821c_false_alarm_statistics()
659 cck_enable = rtw_read32(rtwdev, REG_RXPSEL) & BIT(28); in rtw8821c_false_alarm_statistics()
660 cck_fa_cnt = rtw_read16(rtwdev, REG_FA_CCK); in rtw8821c_false_alarm_statistics()
661 ofdm_fa_cnt = rtw_read16(rtwdev, REG_FA_OFDM); in rtw8821c_false_alarm_statistics()
669 crc32_cnt = rtw_read32(rtwdev, REG_CRC_CCK); in rtw8821c_false_alarm_statistics()
673 crc32_cnt = rtw_read32(rtwdev, REG_CRC_OFDM); in rtw8821c_false_alarm_statistics()
677 crc32_cnt = rtw_read32(rtwdev, REG_CRC_HT); in rtw8821c_false_alarm_statistics()
681 crc32_cnt = rtw_read32(rtwdev, REG_CRC_VHT); in rtw8821c_false_alarm_statistics()
685 cca32_cnt = rtw_read32(rtwdev, REG_CCA_OFDM); in rtw8821c_false_alarm_statistics()
689 cca32_cnt = rtw_read32(rtwdev, REG_CCA_CCK); in rtw8821c_false_alarm_statistics()
694 rtw_write32_set(rtwdev, REG_FAS, BIT(17)); in rtw8821c_false_alarm_statistics()
695 rtw_write32_clr(rtwdev, REG_FAS, BIT(17)); in rtw8821c_false_alarm_statistics()
696 rtw_write32_clr(rtwdev, REG_RXDESC, BIT(15)); in rtw8821c_false_alarm_statistics()
697 rtw_write32_set(rtwdev, REG_RXDESC, BIT(15)); in rtw8821c_false_alarm_statistics()
698 rtw_write32_set(rtwdev, REG_CNTRST, BIT(0)); in rtw8821c_false_alarm_statistics()
699 rtw_write32_clr(rtwdev, REG_CNTRST, BIT(0)); in rtw8821c_false_alarm_statistics()
702 static void rtw8821c_do_iqk(struct rtw_dev *rtwdev) in rtw8821c_do_iqk() argument
710 if (rtw_is_assoc(rtwdev)) in rtw8821c_do_iqk()
713 rtw_fw_do_iqk(rtwdev, &para); in rtw8821c_do_iqk()
716 rf_reg = rtw_read_rf(rtwdev, RF_PATH_A, RF_DTXLOK, RFREG_MASK); in rtw8821c_do_iqk()
721 rtw_write_rf(rtwdev, RF_PATH_A, RF_DTXLOK, RFREG_MASK, 0x0); in rtw8821c_do_iqk()
723 reload = !!rtw_read32_mask(rtwdev, REG_IQKFAILMSK, BIT(16)); in rtw8821c_do_iqk()
724 iqk_fail_mask = rtw_read32_mask(rtwdev, REG_IQKFAILMSK, GENMASK(7, 0)); in rtw8821c_do_iqk()
725 rtw_dbg(rtwdev, RTW_DBG_PHY, in rtw8821c_do_iqk()
730 static void rtw8821c_phy_calibration(struct rtw_dev *rtwdev) in rtw8821c_phy_calibration() argument
732 rtw8821c_do_iqk(rtwdev); in rtw8821c_phy_calibration()
736 static void rtw8821c_coex_cfg_init(struct rtw_dev *rtwdev) in rtw8821c_coex_cfg_init() argument
739 rtw_write8_set(rtwdev, REG_BCN_CTRL, BIT_EN_BCN_FUNCTION); in rtw8821c_coex_cfg_init()
742 rtw_write8_mask(rtwdev, REG_BT_TDMA_TIME, BIT_MASK_SAMPLE_RATE, 0x5); in rtw8821c_coex_cfg_init()
745 rtw_write8(rtwdev, REG_BT_STAT_CTRL, BT_CNT_ENABLE); in rtw8821c_coex_cfg_init()
748 rtw_write32_set(rtwdev, REG_GPIO_MUXCFG, BIT_BT_PTA_EN); in rtw8821c_coex_cfg_init()
749 rtw_write32_set(rtwdev, REG_GPIO_MUXCFG, BIT_PO_BT_PTA_PINS); in rtw8821c_coex_cfg_init()
752 rtw_write8_set(rtwdev, REG_QUEUE_CTRL, BIT_PTA_WL_TX_EN); in rtw8821c_coex_cfg_init()
754 rtw_write8_clr(rtwdev, REG_QUEUE_CTRL, BIT_PTA_EDCCA_EN); in rtw8821c_coex_cfg_init()
756 rtw_write16_set(rtwdev, REG_BT_COEX_V2, BIT_GNT_BT_POLARITY); in rtw8821c_coex_cfg_init()
759 rtw_write8_mask(rtwdev, REG_BT_COEX_TABLE_H + 3, BIT_BCN_QUEUE, in rtw8821c_coex_cfg_init()
763 static void rtw8821c_coex_cfg_ant_switch(struct rtw_dev *rtwdev, u8 ctrl_type, in rtw8821c_coex_cfg_ant_switch() argument
766 struct rtw_coex *coex = &rtwdev->coex; in rtw8821c_coex_cfg_ant_switch()
787 rtw_write32_clr(rtwdev, REG_LED_CFG, BIT_DPDT_SEL_EN); in rtw8821c_coex_cfg_ant_switch()
788 rtw_write32_set(rtwdev, REG_LED_CFG, BIT_DPDT_WL_SEL); in rtw8821c_coex_cfg_ant_switch()
790 rtw_write8_mask(rtwdev, REG_RFE_CTRL8, BIT_MASK_RFE_SEL89, in rtw8821c_coex_cfg_ant_switch()
805 rtw_write32_mask(rtwdev, REG_RFE_CTRL8, BIT_MASK_R_RFE_SEL_15, in rtw8821c_coex_cfg_ant_switch()
809 rtw_write32_clr(rtwdev, REG_LED_CFG, BIT_DPDT_SEL_EN); in rtw8821c_coex_cfg_ant_switch()
810 rtw_write32_set(rtwdev, REG_LED_CFG, BIT_DPDT_WL_SEL); in rtw8821c_coex_cfg_ant_switch()
812 rtw_write8_mask(rtwdev, REG_RFE_CTRL8, BIT_MASK_RFE_SEL89, in rtw8821c_coex_cfg_ant_switch()
816 rtw_write32_mask(rtwdev, REG_RFE_CTRL8, BIT_MASK_R_RFE_SEL_15, in rtw8821c_coex_cfg_ant_switch()
820 rtw_write32_clr(rtwdev, REG_LED_CFG, BIT_DPDT_SEL_EN); in rtw8821c_coex_cfg_ant_switch()
821 rtw_write32_set(rtwdev, REG_LED_CFG, BIT_DPDT_WL_SEL); in rtw8821c_coex_cfg_ant_switch()
822 rtw_write8_mask(rtwdev, REG_RFE_CTRL8, BIT_MASK_RFE_SEL89, in rtw8821c_coex_cfg_ant_switch()
826 rtw_write32_set(rtwdev, REG_LED_CFG, BIT_DPDT_SEL_EN); in rtw8821c_coex_cfg_ant_switch()
829 rtw_write8_mask(rtwdev, REG_PAD_CTRL1, BIT_SW_DPDT_SEL_DATA, in rtw8821c_coex_cfg_ant_switch()
833 rtw_write32_clr(rtwdev, REG_LED_CFG, BIT_DPDT_SEL_EN); in rtw8821c_coex_cfg_ant_switch()
834 rtw_write32_set(rtwdev, REG_LED_CFG, BIT_DPDT_WL_SEL); in rtw8821c_coex_cfg_ant_switch()
837 rtw_write32_clr(rtwdev, REG_LED_CFG, BIT_DPDT_SEL_EN); in rtw8821c_coex_cfg_ant_switch()
838 rtw_write32_clr(rtwdev, REG_LED_CFG, BIT_DPDT_WL_SEL); in rtw8821c_coex_cfg_ant_switch()
843 rtw_write8_clr(rtwdev, REG_CTRL_TYPE, BIT_CTRL_TYPE1); in rtw8821c_coex_cfg_ant_switch()
844 rtw_write8_clr(rtwdev, REG_CTRL_TYPE, BIT_CTRL_TYPE2); in rtw8821c_coex_cfg_ant_switch()
846 rtw_write8_set(rtwdev, REG_CTRL_TYPE, BIT_CTRL_TYPE1); in rtw8821c_coex_cfg_ant_switch()
847 rtw_write8_set(rtwdev, REG_CTRL_TYPE, BIT_CTRL_TYPE2); in rtw8821c_coex_cfg_ant_switch()
851 static void rtw8821c_coex_cfg_gnt_fix(struct rtw_dev *rtwdev) in rtw8821c_coex_cfg_gnt_fix() argument
854 static void rtw8821c_coex_cfg_gnt_debug(struct rtw_dev *rtwdev) in rtw8821c_coex_cfg_gnt_debug() argument
856 rtw_write32_clr(rtwdev, REG_PAD_CTRL1, BIT_BTGP_SPI_EN); in rtw8821c_coex_cfg_gnt_debug()
857 rtw_write32_clr(rtwdev, REG_PAD_CTRL1, BIT_BTGP_JTAG_EN); in rtw8821c_coex_cfg_gnt_debug()
858 rtw_write32_clr(rtwdev, REG_GPIO_MUXCFG, BIT_FSPI_EN); in rtw8821c_coex_cfg_gnt_debug()
859 rtw_write32_clr(rtwdev, REG_PAD_CTRL1, BIT_LED1DIS); in rtw8821c_coex_cfg_gnt_debug()
860 rtw_write32_clr(rtwdev, REG_SYS_SDIO_CTRL, BIT_SDIO_INT); in rtw8821c_coex_cfg_gnt_debug()
861 rtw_write32_clr(rtwdev, REG_SYS_SDIO_CTRL, BIT_DBG_GNT_WL_BT); in rtw8821c_coex_cfg_gnt_debug()
864 static void rtw8821c_coex_cfg_rfe_type(struct rtw_dev *rtwdev) in rtw8821c_coex_cfg_rfe_type() argument
866 struct rtw_coex *coex = &rtwdev->coex; in rtw8821c_coex_cfg_rfe_type()
868 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw8821c_coex_cfg_rfe_type()
906 static void rtw8821c_coex_cfg_wl_tx_power(struct rtw_dev *rtwdev, u8 wl_pwr) in rtw8821c_coex_cfg_wl_tx_power() argument
908 struct rtw_coex *coex = &rtwdev->coex; in rtw8821c_coex_cfg_wl_tx_power()
910 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw8821c_coex_cfg_wl_tx_power()
922 static void rtw8821c_coex_cfg_wl_rx_gain(struct rtw_dev *rtwdev, bool low_gain) in rtw8821c_coex_cfg_wl_rx_gain() argument
926 rtw8821c_txagc_swing_offset(struct rtw_dev *rtwdev, u8 pwr_idx_offset, in rtw8821c_txagc_swing_offset() argument
930 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8821c_txagc_swing_offset()
968 rtw_warn(rtwdev, "swing index overflow\n"); in rtw8821c_txagc_swing_offset()
976 static void rtw8821c_pwrtrack_set_pwr(struct rtw_dev *rtwdev, u8 pwr_idx_offset, in rtw8821c_pwrtrack_set_pwr() argument
982 rtw8821c_txagc_swing_offset(rtwdev, pwr_idx_offset, pwr_idx_offset_lower, in rtw8821c_pwrtrack_set_pwr()
984 rtw_write32_mask(rtwdev, REG_TXAGCIDX, GENMASK(6, 1), txagc_idx); in rtw8821c_pwrtrack_set_pwr()
985 rtw_write32_mask(rtwdev, REG_TXSCALE_A, GENMASK(31, 21), in rtw8821c_pwrtrack_set_pwr()
989 static void rtw8821c_pwrtrack_set(struct rtw_dev *rtwdev) in rtw8821c_pwrtrack_set() argument
991 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8821c_pwrtrack_set()
994 u8 channel = rtwdev->hal.current_channel; in rtw8821c_pwrtrack_set()
995 u8 band_width = rtwdev->hal.current_band_width; in rtw8821c_pwrtrack_set()
996 u8 regd = rtwdev->regd.txpwr_regd; in rtw8821c_pwrtrack_set()
998 u8 max_pwr_idx = rtwdev->chip->max_power_index; in rtw8821c_pwrtrack_set()
1000 tx_pwr_idx = rtw_phy_get_tx_power_index(rtwdev, RF_PATH_A, tx_rate, in rtw8821c_pwrtrack_set()
1008 rtw8821c_pwrtrack_set_pwr(rtwdev, pwr_idx_offset, pwr_idx_offset_lower); in rtw8821c_pwrtrack_set()
1011 static void rtw8821c_phy_pwrtrack(struct rtw_dev *rtwdev) in rtw8821c_phy_pwrtrack() argument
1013 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8821c_phy_pwrtrack()
1017 rtw_phy_config_swing_table(rtwdev, &swing_table); in rtw8821c_phy_pwrtrack()
1019 if (rtwdev->efuse.thermal_meter[0] == 0xff) in rtw8821c_phy_pwrtrack()
1022 thermal_value = rtw_read_rf(rtwdev, RF_PATH_A, RF_T_METER, 0xfc00); in rtw8821c_phy_pwrtrack()
1024 rtw_phy_pwrtrack_avg(rtwdev, thermal_value, RF_PATH_A); in rtw8821c_phy_pwrtrack()
1028 else if (!rtw_phy_pwrtrack_thermal_changed(rtwdev, thermal_value, in rtw8821c_phy_pwrtrack()
1032 delta = rtw_phy_pwrtrack_get_delta(rtwdev, RF_PATH_A); in rtw8821c_phy_pwrtrack()
1037 rtw_phy_pwrtrack_get_pwridx(rtwdev, &swing_table, RF_PATH_A, in rtw8821c_phy_pwrtrack()
1045 rtw8821c_pwrtrack_set(rtwdev); in rtw8821c_phy_pwrtrack()
1048 if (rtw_phy_pwrtrack_need_iqk(rtwdev)) in rtw8821c_phy_pwrtrack()
1049 rtw8821c_do_iqk(rtwdev); in rtw8821c_phy_pwrtrack()
1052 static void rtw8821c_pwr_track(struct rtw_dev *rtwdev) in rtw8821c_pwr_track() argument
1054 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw8821c_pwr_track()
1055 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8821c_pwr_track()
1061 rtw_write_rf(rtwdev, RF_PATH_A, RF_T_METER, in rtw8821c_pwr_track()
1067 rtw8821c_phy_pwrtrack(rtwdev); in rtw8821c_pwr_track()
1071 static void rtw8821c_bf_config_bfee_su(struct rtw_dev *rtwdev, in rtw8821c_bf_config_bfee_su() argument
1076 rtw_bf_enable_bfee_su(rtwdev, vif, bfee); in rtw8821c_bf_config_bfee_su()
1078 rtw_bf_remove_bfee_su(rtwdev, bfee); in rtw8821c_bf_config_bfee_su()
1081 static void rtw8821c_bf_config_bfee_mu(struct rtw_dev *rtwdev, in rtw8821c_bf_config_bfee_mu() argument
1086 rtw_bf_enable_bfee_mu(rtwdev, vif, bfee); in rtw8821c_bf_config_bfee_mu()
1088 rtw_bf_remove_bfee_mu(rtwdev, bfee); in rtw8821c_bf_config_bfee_mu()
1091 static void rtw8821c_bf_config_bfee(struct rtw_dev *rtwdev, struct rtw_vif *vif, in rtw8821c_bf_config_bfee() argument
1095 rtw8821c_bf_config_bfee_su(rtwdev, vif, bfee, enable); in rtw8821c_bf_config_bfee()
1097 rtw8821c_bf_config_bfee_mu(rtwdev, vif, bfee, enable); in rtw8821c_bf_config_bfee()
1099 rtw_warn(rtwdev, "wrong bfee role\n"); in rtw8821c_bf_config_bfee()
1102 static void rtw8821c_phy_cck_pd_set(struct rtw_dev *rtwdev, u8 new_lvl) in rtw8821c_phy_cck_pd_set() argument
1104 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8821c_phy_cck_pd_set()
1108 rtw_dbg(rtwdev, RTW_DBG_PHY, "lv: (%d) -> (%d)\n", in rtw8821c_phy_cck_pd_set()
1114 cck_n_rx = (rtw_read8_mask(rtwdev, REG_CCK0_FAREPORT, BIT_CCK0_2RX) && in rtw8821c_phy_cck_pd_set()
1115 rtw_read8_mask(rtwdev, REG_CCK0_FAREPORT, BIT_CCK0_MRC)) ? 2 : 1; in rtw8821c_phy_cck_pd_set()
1116 rtw_dbg(rtwdev, RTW_DBG_PHY, in rtw8821c_phy_cck_pd_set()
1118 rtw_is_assoc(rtwdev), new_lvl, cck_n_rx, in rtw8821c_phy_cck_pd_set()
1125 rtw_write32_mask(rtwdev, REG_PWRTH, 0x3f0000, pd[new_lvl]); in rtw8821c_phy_cck_pd_set()
1126 rtw_write32_mask(rtwdev, REG_PWRTH2, 0x1f0000, in rtw8821c_phy_cck_pd_set()