Lines Matching refs:rtwdev

36 static int rtw8821c_read_efuse(struct rtw_dev *rtwdev, u8 *log_map)  in rtw8821c_read_efuse()  argument
38 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw8821c_read_efuse()
64 if (rtwdev->efuse.rfe_option == 2 || rtwdev->efuse.rfe_option == 4) in rtw8821c_read_efuse()
67 switch (rtw_hci_type(rtwdev)) { in rtw8821c_read_efuse()
86 static u8 rtw8821c_get_swing_index(struct rtw_dev *rtwdev) in rtw8821c_get_swing_index() argument
91 swing = rtw_read32_mask(rtwdev, REG_TXSCALE_A, 0xffe00000); in rtw8821c_get_swing_index()
101 static void rtw8821c_pwrtrack_init(struct rtw_dev *rtwdev) in rtw8821c_pwrtrack_init() argument
103 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8821c_pwrtrack_init()
104 u8 swing_idx = rtw8821c_get_swing_index(rtwdev); in rtw8821c_pwrtrack_init()
116 dm_info->thermal_meter_k = rtwdev->efuse.thermal_meter_k; in rtw8821c_pwrtrack_init()
119 static void rtw8821c_phy_bf_init(struct rtw_dev *rtwdev) in rtw8821c_phy_bf_init() argument
121 rtw_bf_phy_init(rtwdev); in rtw8821c_phy_bf_init()
123 rtw_write32(rtwdev, 0x1C94, 0xAFFFAFFF); in rtw8821c_phy_bf_init()
126 static void rtw8821c_phy_set_param(struct rtw_dev *rtwdev) in rtw8821c_phy_set_param() argument
128 struct rtw_hal *hal = &rtwdev->hal; in rtw8821c_phy_set_param()
132 val = rtw_read8(rtwdev, REG_SYS_FUNC_EN); in rtw8821c_phy_set_param()
134 rtw_write8(rtwdev, REG_SYS_FUNC_EN, val); in rtw8821c_phy_set_param()
138 rtw_write8(rtwdev, REG_SYS_FUNC_EN, val); in rtw8821c_phy_set_param()
140 rtw_write8(rtwdev, REG_SYS_FUNC_EN, val); in rtw8821c_phy_set_param()
142 rtw_write8(rtwdev, REG_SYS_FUNC_EN, val); in rtw8821c_phy_set_param()
144 rtw_write8(rtwdev, REG_RF_CTRL, in rtw8821c_phy_set_param()
147 rtw_write8(rtwdev, REG_WLRF1 + 3, in rtw8821c_phy_set_param()
152 rtw_write32_clr(rtwdev, REG_RXPSEL, BIT_RX_PSEL_RST); in rtw8821c_phy_set_param()
154 rtw_phy_load_tables(rtwdev); in rtw8821c_phy_set_param()
156 crystal_cap = rtwdev->efuse.crystal_cap & 0x3F; in rtw8821c_phy_set_param()
157 rtw_write32_mask(rtwdev, REG_AFE_XTAL_CTRL, 0x7e000000, crystal_cap); in rtw8821c_phy_set_param()
158 rtw_write32_mask(rtwdev, REG_AFE_PLL_CTRL, 0x7e, crystal_cap); in rtw8821c_phy_set_param()
159 rtw_write32_mask(rtwdev, REG_CCK0_FAREPORT, BIT(18) | BIT(22), 0); in rtw8821c_phy_set_param()
162 rtw_write32_set(rtwdev, REG_RXPSEL, BIT_RX_PSEL_RST); in rtw8821c_phy_set_param()
163 hal->ch_param[0] = rtw_read32_mask(rtwdev, REG_TXSF2, MASKDWORD); in rtw8821c_phy_set_param()
164 hal->ch_param[1] = rtw_read32_mask(rtwdev, REG_TXSF6, MASKDWORD); in rtw8821c_phy_set_param()
165 hal->ch_param[2] = rtw_read32_mask(rtwdev, REG_TXFILTER, MASKDWORD); in rtw8821c_phy_set_param()
167 rtw_phy_init(rtwdev); in rtw8821c_phy_set_param()
168 rtwdev->dm_info.cck_pd_default = rtw_read8(rtwdev, REG_CSRATIO) & 0x1f; in rtw8821c_phy_set_param()
170 rtw8821c_pwrtrack_init(rtwdev); in rtw8821c_phy_set_param()
172 rtw8821c_phy_bf_init(rtwdev); in rtw8821c_phy_set_param()
175 static int rtw8821c_mac_init(struct rtw_dev *rtwdev) in rtw8821c_mac_init() argument
181 rtw_write8(rtwdev, REG_AMPDU_MAX_TIME_V1, WLAN_AMPDU_MAX_TIME); in rtw8821c_mac_init()
182 rtw_write8_set(rtwdev, REG_TX_HANG_CTRL, BIT_EN_EOF_V1); in rtw8821c_mac_init()
184 rtw_write8(rtwdev, REG_PRECNT_CTRL, (u8)(pre_txcnt & 0xFF)); in rtw8821c_mac_init()
185 rtw_write8(rtwdev, REG_PRECNT_CTRL + 1, (u8)(pre_txcnt >> 8)); in rtw8821c_mac_init()
189 rtw_write32(rtwdev, REG_PROT_MODE_CTRL, value32); in rtw8821c_mac_init()
190 rtw_write16(rtwdev, REG_BAR_MODE_CTRL + 2, in rtw8821c_mac_init()
192 rtw_write8(rtwdev, REG_FAST_EDCA_VOVI_SETTING, FAST_EDCA_VO_TH); in rtw8821c_mac_init()
193 rtw_write8(rtwdev, REG_FAST_EDCA_VOVI_SETTING + 2, FAST_EDCA_VI_TH); in rtw8821c_mac_init()
194 rtw_write8(rtwdev, REG_FAST_EDCA_BEBK_SETTING, FAST_EDCA_BE_TH); in rtw8821c_mac_init()
195 rtw_write8(rtwdev, REG_FAST_EDCA_BEBK_SETTING + 2, FAST_EDCA_BK_TH); in rtw8821c_mac_init()
196 rtw_write8_set(rtwdev, REG_INIRTS_RATE_SEL, BIT(5)); in rtw8821c_mac_init()
199 rtw_write8_clr(rtwdev, REG_TIMER0_SRC_SEL, BIT_TSFT_SEL_TIMER0); in rtw8821c_mac_init()
200 rtw_write16(rtwdev, REG_TXPAUSE, 0); in rtw8821c_mac_init()
201 rtw_write8(rtwdev, REG_SLOT, WLAN_SLOT_TIME); in rtw8821c_mac_init()
202 rtw_write8(rtwdev, REG_PIFS, WLAN_PIFS_TIME); in rtw8821c_mac_init()
203 rtw_write32(rtwdev, REG_SIFS, WLAN_SIFS_CFG); in rtw8821c_mac_init()
204 rtw_write16(rtwdev, REG_EDCA_VO_PARAM + 2, WLAN_VO_TXOP_LIMIT); in rtw8821c_mac_init()
205 rtw_write16(rtwdev, REG_EDCA_VI_PARAM + 2, WLAN_VI_TXOP_LIMIT); in rtw8821c_mac_init()
206 rtw_write32(rtwdev, REG_RD_NAV_NXT, WLAN_NAV_CFG); in rtw8821c_mac_init()
207 rtw_write16(rtwdev, REG_RXTSF_OFFSET_CCK, WLAN_RX_TSF_CFG); in rtw8821c_mac_init()
210 rtw_write8_set(rtwdev, REG_BCN_CTRL, BIT_EN_BCN_FUNCTION); in rtw8821c_mac_init()
213 rtw_write32(rtwdev, REG_TBTT_PROHIBIT, WLAN_TBTT_TIME); in rtw8821c_mac_init()
214 rtw_write8(rtwdev, REG_DRVERLYINT, WLAN_DRV_EARLY_INT); in rtw8821c_mac_init()
215 rtw_write8(rtwdev, REG_BCNDMATIM, WLAN_BCN_DMA_TIME); in rtw8821c_mac_init()
216 rtw_write8_clr(rtwdev, REG_TX_PTCL_CTRL + 1, BIT_SIFS_BK_EN >> 8); in rtw8821c_mac_init()
219 rtw_write32(rtwdev, REG_RXFLTMAP0, WLAN_RX_FILTER0); in rtw8821c_mac_init()
220 rtw_write16(rtwdev, REG_RXFLTMAP2, WLAN_RX_FILTER2); in rtw8821c_mac_init()
221 rtw_write32(rtwdev, REG_RCR, WLAN_RCR_CFG); in rtw8821c_mac_init()
222 rtw_write8(rtwdev, REG_RX_PKT_LIMIT, WLAN_RXPKT_MAX_SZ_512); in rtw8821c_mac_init()
223 rtw_write8(rtwdev, REG_TCR + 2, WLAN_TX_FUNC_CFG2); in rtw8821c_mac_init()
224 rtw_write8(rtwdev, REG_TCR + 1, WLAN_TX_FUNC_CFG1); in rtw8821c_mac_init()
225 rtw_write8(rtwdev, REG_ACKTO_CCK, 0x40); in rtw8821c_mac_init()
226 rtw_write8_set(rtwdev, REG_WMAC_TRXPTCL_CTL_H, BIT(1)); in rtw8821c_mac_init()
227 rtw_write8_set(rtwdev, REG_SND_PTCL_CTRL, in rtw8821c_mac_init()
229 rtw_write32(rtwdev, REG_WMAC_OPTION_FUNCTION + 8, WLAN_MAC_OPT_FUNC2); in rtw8821c_mac_init()
230 rtw_write8(rtwdev, REG_WMAC_OPTION_FUNCTION + 4, WLAN_MAC_OPT_NORM_FUNC1); in rtw8821c_mac_init()
235 static void rtw8821c_cfg_ldo25(struct rtw_dev *rtwdev, bool enable) in rtw8821c_cfg_ldo25() argument
239 ldo_pwr = rtw_read8(rtwdev, REG_LDO_EFUSE_CTRL + 3); in rtw8821c_cfg_ldo25()
241 rtw_write8(rtwdev, REG_LDO_EFUSE_CTRL + 3, ldo_pwr); in rtw8821c_cfg_ldo25()
244 static void rtw8821c_switch_rf_set(struct rtw_dev *rtwdev, u8 rf_set) in rtw8821c_switch_rf_set() argument
248 rtw_write32_set(rtwdev, REG_DMEM_CTRL, BIT_WL_RST); in rtw8821c_switch_rf_set()
249 rtw_write32_set(rtwdev, REG_SYS_CTRL, BIT_FEN_EN); in rtw8821c_switch_rf_set()
251 reg = rtw_read32(rtwdev, REG_RFECTL); in rtw8821c_switch_rf_set()
257 rtw_write32_mask(rtwdev, REG_ENRXCCA, MASKBYTE2, BTG_CCA); in rtw8821c_switch_rf_set()
258 rtw_write32_mask(rtwdev, REG_ENTXCCK, MASKLWORD, BTG_LNA); in rtw8821c_switch_rf_set()
263 rtw_write32_mask(rtwdev, REG_ENRXCCA, MASKBYTE2, WLG_CCA); in rtw8821c_switch_rf_set()
264 rtw_write32_mask(rtwdev, REG_ENTXCCK, MASKLWORD, WLG_LNA); in rtw8821c_switch_rf_set()
275 rtw_write32(rtwdev, REG_RFECTL, reg); in rtw8821c_switch_rf_set()
278 static void rtw8821c_set_channel_rf(struct rtw_dev *rtwdev, u8 channel, u8 bw) in rtw8821c_set_channel_rf() argument
282 rf_reg18 = rtw_read_rf(rtwdev, RF_PATH_A, 0x18, RFREG_MASK); in rtw8821c_set_channel_rf()
311 if (rtwdev->efuse.rfe_option == 0) in rtw8821c_set_channel_rf()
312 rtw8821c_switch_rf_set(rtwdev, SWITCH_TO_WLG); in rtw8821c_set_channel_rf()
313 else if (rtwdev->efuse.rfe_option == 2 || in rtw8821c_set_channel_rf()
314 rtwdev->efuse.rfe_option == 4) in rtw8821c_set_channel_rf()
315 rtw8821c_switch_rf_set(rtwdev, SWITCH_TO_BTG); in rtw8821c_set_channel_rf()
316 rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTDBG, BIT(6), 0x1); in rtw8821c_set_channel_rf()
317 rtw_write_rf(rtwdev, RF_PATH_A, 0x64, 0xf, 0xf); in rtw8821c_set_channel_rf()
319 rtw8821c_switch_rf_set(rtwdev, SWITCH_TO_WLA); in rtw8821c_set_channel_rf()
320 rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTDBG, BIT(6), 0x0); in rtw8821c_set_channel_rf()
323 rtw_write_rf(rtwdev, RF_PATH_A, 0x18, RFREG_MASK, rf_reg18); in rtw8821c_set_channel_rf()
325 rtw_write_rf(rtwdev, RF_PATH_A, RF_XTALX2, BIT(19), 0); in rtw8821c_set_channel_rf()
326 rtw_write_rf(rtwdev, RF_PATH_A, RF_XTALX2, BIT(19), 1); in rtw8821c_set_channel_rf()
329 static void rtw8821c_set_channel_rxdfir(struct rtw_dev *rtwdev, u8 bw) in rtw8821c_set_channel_rxdfir() argument
333 rtw_write32_mask(rtwdev, REG_ACBB0, BIT(29) | BIT(28), 0x2); in rtw8821c_set_channel_rxdfir()
334 rtw_write32_mask(rtwdev, REG_ACBBRXFIR, BIT(29) | BIT(28), 0x2); in rtw8821c_set_channel_rxdfir()
335 rtw_write32_mask(rtwdev, REG_TXDFIR, BIT(31), 0x0); in rtw8821c_set_channel_rxdfir()
336 rtw_write32_mask(rtwdev, REG_CHFIR, BIT(31), 0x0); in rtw8821c_set_channel_rxdfir()
339 rtw_write32_mask(rtwdev, REG_ACBB0, BIT(29) | BIT(28), 0x2); in rtw8821c_set_channel_rxdfir()
340 rtw_write32_mask(rtwdev, REG_ACBBRXFIR, BIT(29) | BIT(28), 0x1); in rtw8821c_set_channel_rxdfir()
341 rtw_write32_mask(rtwdev, REG_TXDFIR, BIT(31), 0x0); in rtw8821c_set_channel_rxdfir()
342 rtw_write32_mask(rtwdev, REG_CHFIR, BIT(31), 0x1); in rtw8821c_set_channel_rxdfir()
345 rtw_write32_mask(rtwdev, REG_ACBB0, BIT(29) | BIT(28), 0x2); in rtw8821c_set_channel_rxdfir()
346 rtw_write32_mask(rtwdev, REG_ACBBRXFIR, BIT(29) | BIT(28), 0x2); in rtw8821c_set_channel_rxdfir()
347 rtw_write32_mask(rtwdev, REG_TXDFIR, BIT(31), 0x1); in rtw8821c_set_channel_rxdfir()
348 rtw_write32_mask(rtwdev, REG_CHFIR, BIT(31), 0x0); in rtw8821c_set_channel_rxdfir()
352 static void rtw8821c_set_channel_bb(struct rtw_dev *rtwdev, u8 channel, u8 bw, in rtw8821c_set_channel_bb() argument
355 struct rtw_hal *hal = &rtwdev->hal; in rtw8821c_set_channel_bb()
359 rtw_write32_mask(rtwdev, REG_RXPSEL, BIT(28), 0x1); in rtw8821c_set_channel_bb()
360 rtw_write32_mask(rtwdev, REG_CCK_CHECK, BIT(7), 0x0); in rtw8821c_set_channel_bb()
361 rtw_write32_mask(rtwdev, REG_ENTXCCK, BIT(18), 0x0); in rtw8821c_set_channel_bb()
362 rtw_write32_mask(rtwdev, REG_RXCCAMSK, 0x0000FC00, 15); in rtw8821c_set_channel_bb()
364 rtw_write32_mask(rtwdev, REG_TXSCALE_A, 0xf00, 0x0); in rtw8821c_set_channel_bb()
365 rtw_write32_mask(rtwdev, REG_CLKTRK, 0x1ffe0000, 0x96a); in rtw8821c_set_channel_bb()
367 rtw_write32_mask(rtwdev, REG_TXSF2, MASKDWORD, 0x0000b81c); in rtw8821c_set_channel_bb()
368 rtw_write32_mask(rtwdev, REG_TXSF6, MASKLWORD, 0x0000); in rtw8821c_set_channel_bb()
369 rtw_write32_mask(rtwdev, REG_TXFILTER, MASKDWORD, 0x00003667); in rtw8821c_set_channel_bb()
371 rtw_write32_mask(rtwdev, REG_TXSF2, MASKDWORD, in rtw8821c_set_channel_bb()
373 rtw_write32_mask(rtwdev, REG_TXSF6, MASKLWORD, in rtw8821c_set_channel_bb()
375 rtw_write32_mask(rtwdev, REG_TXFILTER, MASKDWORD, in rtw8821c_set_channel_bb()
379 rtw_write32_mask(rtwdev, REG_ENTXCCK, BIT(18), 0x1); in rtw8821c_set_channel_bb()
380 rtw_write32_mask(rtwdev, REG_CCK_CHECK, BIT(7), 0x1); in rtw8821c_set_channel_bb()
381 rtw_write32_mask(rtwdev, REG_RXPSEL, BIT(28), 0x0); in rtw8821c_set_channel_bb()
382 rtw_write32_mask(rtwdev, REG_RXCCAMSK, 0x0000FC00, 15); in rtw8821c_set_channel_bb()
385 rtw_write32_mask(rtwdev, REG_TXSCALE_A, 0xf00, 0x1); in rtw8821c_set_channel_bb()
387 rtw_write32_mask(rtwdev, REG_TXSCALE_A, 0xf00, 0x2); in rtw8821c_set_channel_bb()
389 rtw_write32_mask(rtwdev, REG_TXSCALE_A, 0xf00, 0x3); in rtw8821c_set_channel_bb()
392 rtw_write32_mask(rtwdev, REG_CLKTRK, 0x1ffe0000, 0x494); in rtw8821c_set_channel_bb()
394 rtw_write32_mask(rtwdev, REG_CLKTRK, 0x1ffe0000, 0x453); in rtw8821c_set_channel_bb()
396 rtw_write32_mask(rtwdev, REG_CLKTRK, 0x1ffe0000, 0x452); in rtw8821c_set_channel_bb()
398 rtw_write32_mask(rtwdev, REG_CLKTRK, 0x1ffe0000, 0x412); in rtw8821c_set_channel_bb()
404 val32 = rtw_read32_mask(rtwdev, REG_ADCCLK, MASKDWORD); in rtw8821c_set_channel_bb()
407 rtw_write32_mask(rtwdev, REG_ADCCLK, MASKDWORD, val32); in rtw8821c_set_channel_bb()
409 rtw_write32_mask(rtwdev, REG_ADC160, BIT(30), 0x1); in rtw8821c_set_channel_bb()
413 rtw_write32_set(rtwdev, REG_RXSB, BIT(4)); in rtw8821c_set_channel_bb()
415 rtw_write32_clr(rtwdev, REG_RXSB, BIT(4)); in rtw8821c_set_channel_bb()
417 val32 = rtw_read32_mask(rtwdev, REG_ADCCLK, MASKDWORD); in rtw8821c_set_channel_bb()
421 rtw_write32_mask(rtwdev, REG_ADCCLK, MASKDWORD, val32); in rtw8821c_set_channel_bb()
423 rtw_write32_mask(rtwdev, REG_ADC160, BIT(30), 0x1); in rtw8821c_set_channel_bb()
426 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), 0x1); in rtw8821c_set_channel_bb()
435 val32 = rtw_read32_mask(rtwdev, REG_ADCCLK, MASKDWORD); in rtw8821c_set_channel_bb()
438 rtw_write32_mask(rtwdev, REG_ADCCLK, MASKDWORD, val32); in rtw8821c_set_channel_bb()
440 rtw_write32_mask(rtwdev, REG_ADC160, BIT(30), 0x0); in rtw8821c_set_channel_bb()
441 rtw_write32_mask(rtwdev, REG_ADC40, BIT(31), 0x1); in rtw8821c_set_channel_bb()
444 val32 = rtw_read32_mask(rtwdev, REG_ADCCLK, MASKDWORD); in rtw8821c_set_channel_bb()
447 rtw_write32_mask(rtwdev, REG_ADCCLK, MASKDWORD, val32); in rtw8821c_set_channel_bb()
449 rtw_write32_mask(rtwdev, REG_ADC160, BIT(30), 0x0); in rtw8821c_set_channel_bb()
450 rtw_write32_mask(rtwdev, REG_ADC40, BIT(31), 0x1); in rtw8821c_set_channel_bb()
455 static u32 rtw8821c_get_bb_swing(struct rtw_dev *rtwdev, u8 channel) in rtw8821c_get_bb_swing() argument
457 struct rtw_efuse efuse = rtwdev->efuse; in rtw8821c_get_bb_swing()
469 static void rtw8821c_set_channel_bb_swing(struct rtw_dev *rtwdev, u8 channel, in rtw8821c_set_channel_bb_swing() argument
472 rtw_write32_mask(rtwdev, REG_TXSCALE_A, GENMASK(31, 21), in rtw8821c_set_channel_bb_swing()
473 rtw8821c_get_bb_swing(rtwdev, channel)); in rtw8821c_set_channel_bb_swing()
474 rtw8821c_pwrtrack_init(rtwdev); in rtw8821c_set_channel_bb_swing()
477 static void rtw8821c_set_channel(struct rtw_dev *rtwdev, u8 channel, u8 bw, in rtw8821c_set_channel() argument
480 rtw8821c_set_channel_bb(rtwdev, channel, bw, primary_chan_idx); in rtw8821c_set_channel()
481 rtw8821c_set_channel_bb_swing(rtwdev, channel, bw, primary_chan_idx); in rtw8821c_set_channel()
482 rtw_set_channel_mac(rtwdev, channel, bw, primary_chan_idx); in rtw8821c_set_channel()
483 rtw8821c_set_channel_rf(rtwdev, channel, bw); in rtw8821c_set_channel()
484 rtw8821c_set_channel_rxdfir(rtwdev, bw); in rtw8821c_set_channel()
487 static s8 get_cck_rx_pwr(struct rtw_dev *rtwdev, u8 lna_idx, u8 vga_idx) in get_cck_rx_pwr() argument
489 struct rtw_efuse *efuse = &rtwdev->efuse; in get_cck_rx_pwr()
504 rtw_warn(rtwdev, "incorrect lna index (%d)\n", lna_idx); in get_cck_rx_pwr()
514 static void query_phy_status_page0(struct rtw_dev *rtwdev, u8 *phy_status, in query_phy_status_page0() argument
517 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in query_phy_status_page0()
525 rx_power = get_cck_rx_pwr(rtwdev, lna_idx, vga_idx); in query_phy_status_page0()
534 static void query_phy_status_page1(struct rtw_dev *rtwdev, u8 *phy_status, in query_phy_status_page1() argument
537 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in query_phy_status_page1()
563 static void query_phy_status(struct rtw_dev *rtwdev, u8 *phy_status, in query_phy_status() argument
572 query_phy_status_page0(rtwdev, phy_status, pkt_stat); in query_phy_status()
575 query_phy_status_page1(rtwdev, phy_status, pkt_stat); in query_phy_status()
578 rtw_warn(rtwdev, "unused phy status page (%d)\n", page); in query_phy_status()
583 static void rtw8821c_query_rx_desc(struct rtw_dev *rtwdev, u8 *rx_desc, in rtw8821c_query_rx_desc() argument
588 u32 desc_sz = rtwdev->chip->rx_pkt_desc_sz; in rtw8821c_query_rx_desc()
618 query_phy_status(rtwdev, phy_status, pkt_stat); in rtw8821c_query_rx_desc()
621 rtw_rx_fill_rx_status(rtwdev, pkt_stat, hdr, rx_status, phy_status); in rtw8821c_query_rx_desc()
625 rtw8821c_set_tx_power_index_by_rate(struct rtw_dev *rtwdev, u8 path, u8 rs) in rtw8821c_set_tx_power_index_by_rate() argument
627 struct rtw_hal *hal = &rtwdev->hal; in rtw8821c_set_tx_power_index_by_rate()
640 rtw_write32(rtwdev, offset_txagc[path] + rate_idx, in rtw8821c_set_tx_power_index_by_rate()
647 static void rtw8821c_set_tx_power_index(struct rtw_dev *rtwdev) in rtw8821c_set_tx_power_index() argument
649 struct rtw_hal *hal = &rtwdev->hal; in rtw8821c_set_tx_power_index()
657 rtw8821c_set_tx_power_index_by_rate(rtwdev, path, rs); in rtw8821c_set_tx_power_index()
662 static void rtw8821c_false_alarm_statistics(struct rtw_dev *rtwdev) in rtw8821c_false_alarm_statistics() argument
664 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8821c_false_alarm_statistics()
671 cck_enable = rtw_read32(rtwdev, REG_RXPSEL) & BIT(28); in rtw8821c_false_alarm_statistics()
672 cck_fa_cnt = rtw_read16(rtwdev, REG_FA_CCK); in rtw8821c_false_alarm_statistics()
673 ofdm_fa_cnt = rtw_read16(rtwdev, REG_FA_OFDM); in rtw8821c_false_alarm_statistics()
681 crc32_cnt = rtw_read32(rtwdev, REG_CRC_CCK); in rtw8821c_false_alarm_statistics()
685 crc32_cnt = rtw_read32(rtwdev, REG_CRC_OFDM); in rtw8821c_false_alarm_statistics()
689 crc32_cnt = rtw_read32(rtwdev, REG_CRC_HT); in rtw8821c_false_alarm_statistics()
693 crc32_cnt = rtw_read32(rtwdev, REG_CRC_VHT); in rtw8821c_false_alarm_statistics()
697 cca32_cnt = rtw_read32(rtwdev, REG_CCA_OFDM); in rtw8821c_false_alarm_statistics()
701 cca32_cnt = rtw_read32(rtwdev, REG_CCA_CCK); in rtw8821c_false_alarm_statistics()
706 rtw_write32_set(rtwdev, REG_FAS, BIT(17)); in rtw8821c_false_alarm_statistics()
707 rtw_write32_clr(rtwdev, REG_FAS, BIT(17)); in rtw8821c_false_alarm_statistics()
708 rtw_write32_clr(rtwdev, REG_RXDESC, BIT(15)); in rtw8821c_false_alarm_statistics()
709 rtw_write32_set(rtwdev, REG_RXDESC, BIT(15)); in rtw8821c_false_alarm_statistics()
710 rtw_write32_set(rtwdev, REG_CNTRST, BIT(0)); in rtw8821c_false_alarm_statistics()
711 rtw_write32_clr(rtwdev, REG_CNTRST, BIT(0)); in rtw8821c_false_alarm_statistics()
714 static void rtw8821c_do_iqk(struct rtw_dev *rtwdev) in rtw8821c_do_iqk() argument
722 if (rtw_is_assoc(rtwdev)) in rtw8821c_do_iqk()
725 rtw_fw_do_iqk(rtwdev, &para); in rtw8821c_do_iqk()
728 rf_reg = rtw_read_rf(rtwdev, RF_PATH_A, RF_DTXLOK, RFREG_MASK); in rtw8821c_do_iqk()
733 rtw_write_rf(rtwdev, RF_PATH_A, RF_DTXLOK, RFREG_MASK, 0x0); in rtw8821c_do_iqk()
735 reload = !!rtw_read32_mask(rtwdev, REG_IQKFAILMSK, BIT(16)); in rtw8821c_do_iqk()
736 iqk_fail_mask = rtw_read32_mask(rtwdev, REG_IQKFAILMSK, GENMASK(7, 0)); in rtw8821c_do_iqk()
737 rtw_dbg(rtwdev, RTW_DBG_PHY, in rtw8821c_do_iqk()
742 static void rtw8821c_phy_calibration(struct rtw_dev *rtwdev) in rtw8821c_phy_calibration() argument
744 rtw8821c_do_iqk(rtwdev); in rtw8821c_phy_calibration()
748 static void rtw8821c_coex_cfg_init(struct rtw_dev *rtwdev) in rtw8821c_coex_cfg_init() argument
751 rtw_write8_set(rtwdev, REG_BCN_CTRL, BIT_EN_BCN_FUNCTION); in rtw8821c_coex_cfg_init()
754 rtw_write8_mask(rtwdev, REG_BT_TDMA_TIME, BIT_MASK_SAMPLE_RATE, 0x5); in rtw8821c_coex_cfg_init()
757 rtw_write8(rtwdev, REG_BT_STAT_CTRL, BT_CNT_ENABLE); in rtw8821c_coex_cfg_init()
760 rtw_write32_set(rtwdev, REG_GPIO_MUXCFG, BIT_BT_PTA_EN); in rtw8821c_coex_cfg_init()
761 rtw_write32_set(rtwdev, REG_GPIO_MUXCFG, BIT_PO_BT_PTA_PINS); in rtw8821c_coex_cfg_init()
764 rtw_write8_set(rtwdev, REG_QUEUE_CTRL, BIT_PTA_WL_TX_EN); in rtw8821c_coex_cfg_init()
766 rtw_write8_clr(rtwdev, REG_QUEUE_CTRL, BIT_PTA_EDCCA_EN); in rtw8821c_coex_cfg_init()
768 rtw_write16_set(rtwdev, REG_BT_COEX_V2, BIT_GNT_BT_POLARITY); in rtw8821c_coex_cfg_init()
771 rtw_write8_mask(rtwdev, REG_BT_COEX_TABLE_H + 3, BIT_BCN_QUEUE, in rtw8821c_coex_cfg_init()
775 static void rtw8821c_coex_cfg_ant_switch(struct rtw_dev *rtwdev, u8 ctrl_type, in rtw8821c_coex_cfg_ant_switch() argument
778 struct rtw_coex *coex = &rtwdev->coex; in rtw8821c_coex_cfg_ant_switch()
808 rtw_write32_clr(rtwdev, REG_LED_CFG, BIT_DPDT_SEL_EN); in rtw8821c_coex_cfg_ant_switch()
809 rtw_write32_set(rtwdev, REG_LED_CFG, BIT_DPDT_WL_SEL); in rtw8821c_coex_cfg_ant_switch()
811 rtw_write8_mask(rtwdev, REG_RFE_CTRL8, BIT_MASK_RFE_SEL89, in rtw8821c_coex_cfg_ant_switch()
826 rtw_write32_mask(rtwdev, REG_RFE_CTRL8, BIT_MASK_R_RFE_SEL_15, in rtw8821c_coex_cfg_ant_switch()
830 rtw_write32_clr(rtwdev, REG_LED_CFG, BIT_DPDT_SEL_EN); in rtw8821c_coex_cfg_ant_switch()
831 rtw_write32_set(rtwdev, REG_LED_CFG, BIT_DPDT_WL_SEL); in rtw8821c_coex_cfg_ant_switch()
833 rtw_write8_mask(rtwdev, REG_RFE_CTRL8, BIT_MASK_RFE_SEL89, in rtw8821c_coex_cfg_ant_switch()
837 rtw_write32_mask(rtwdev, REG_RFE_CTRL8, BIT_MASK_R_RFE_SEL_15, in rtw8821c_coex_cfg_ant_switch()
841 rtw_write32_clr(rtwdev, REG_LED_CFG, BIT_DPDT_SEL_EN); in rtw8821c_coex_cfg_ant_switch()
842 rtw_write32_set(rtwdev, REG_LED_CFG, BIT_DPDT_WL_SEL); in rtw8821c_coex_cfg_ant_switch()
843 rtw_write8_mask(rtwdev, REG_RFE_CTRL8, BIT_MASK_RFE_SEL89, in rtw8821c_coex_cfg_ant_switch()
847 rtw_write32_set(rtwdev, REG_LED_CFG, BIT_DPDT_SEL_EN); in rtw8821c_coex_cfg_ant_switch()
850 rtw_write8_mask(rtwdev, REG_PAD_CTRL1, BIT_SW_DPDT_SEL_DATA, in rtw8821c_coex_cfg_ant_switch()
854 rtw_write32_clr(rtwdev, REG_LED_CFG, BIT_DPDT_SEL_EN); in rtw8821c_coex_cfg_ant_switch()
855 rtw_write32_set(rtwdev, REG_LED_CFG, BIT_DPDT_WL_SEL); in rtw8821c_coex_cfg_ant_switch()
858 rtw_write32_clr(rtwdev, REG_LED_CFG, BIT_DPDT_SEL_EN); in rtw8821c_coex_cfg_ant_switch()
859 rtw_write32_clr(rtwdev, REG_LED_CFG, BIT_DPDT_WL_SEL); in rtw8821c_coex_cfg_ant_switch()
864 rtw_write8_clr(rtwdev, REG_CTRL_TYPE, BIT_CTRL_TYPE1); in rtw8821c_coex_cfg_ant_switch()
865 rtw_write8_clr(rtwdev, REG_CTRL_TYPE, BIT_CTRL_TYPE2); in rtw8821c_coex_cfg_ant_switch()
867 rtw_write8_set(rtwdev, REG_CTRL_TYPE, BIT_CTRL_TYPE1); in rtw8821c_coex_cfg_ant_switch()
868 rtw_write8_set(rtwdev, REG_CTRL_TYPE, BIT_CTRL_TYPE2); in rtw8821c_coex_cfg_ant_switch()
872 static void rtw8821c_coex_cfg_gnt_fix(struct rtw_dev *rtwdev) in rtw8821c_coex_cfg_gnt_fix() argument
875 static void rtw8821c_coex_cfg_gnt_debug(struct rtw_dev *rtwdev) in rtw8821c_coex_cfg_gnt_debug() argument
877 rtw_write32_clr(rtwdev, REG_PAD_CTRL1, BIT_BTGP_SPI_EN); in rtw8821c_coex_cfg_gnt_debug()
878 rtw_write32_clr(rtwdev, REG_PAD_CTRL1, BIT_BTGP_JTAG_EN); in rtw8821c_coex_cfg_gnt_debug()
879 rtw_write32_clr(rtwdev, REG_GPIO_MUXCFG, BIT_FSPI_EN); in rtw8821c_coex_cfg_gnt_debug()
880 rtw_write32_clr(rtwdev, REG_PAD_CTRL1, BIT_LED1DIS); in rtw8821c_coex_cfg_gnt_debug()
881 rtw_write32_clr(rtwdev, REG_SYS_SDIO_CTRL, BIT_SDIO_INT); in rtw8821c_coex_cfg_gnt_debug()
882 rtw_write32_clr(rtwdev, REG_SYS_SDIO_CTRL, BIT_DBG_GNT_WL_BT); in rtw8821c_coex_cfg_gnt_debug()
885 static void rtw8821c_coex_cfg_rfe_type(struct rtw_dev *rtwdev) in rtw8821c_coex_cfg_rfe_type() argument
887 struct rtw_coex *coex = &rtwdev->coex; in rtw8821c_coex_cfg_rfe_type()
889 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw8821c_coex_cfg_rfe_type()
927 static void rtw8821c_coex_cfg_wl_tx_power(struct rtw_dev *rtwdev, u8 wl_pwr) in rtw8821c_coex_cfg_wl_tx_power() argument
929 struct rtw_coex *coex = &rtwdev->coex; in rtw8821c_coex_cfg_wl_tx_power()
931 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw8821c_coex_cfg_wl_tx_power()
943 static void rtw8821c_coex_cfg_wl_rx_gain(struct rtw_dev *rtwdev, bool low_gain) in rtw8821c_coex_cfg_wl_rx_gain() argument
947 rtw8821c_txagc_swing_offset(struct rtw_dev *rtwdev, u8 pwr_idx_offset, in rtw8821c_txagc_swing_offset() argument
951 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8821c_txagc_swing_offset()
989 rtw_warn(rtwdev, "swing index overflow\n"); in rtw8821c_txagc_swing_offset()
997 static void rtw8821c_pwrtrack_set_pwr(struct rtw_dev *rtwdev, u8 pwr_idx_offset, in rtw8821c_pwrtrack_set_pwr() argument
1003 rtw8821c_txagc_swing_offset(rtwdev, pwr_idx_offset, pwr_idx_offset_lower, in rtw8821c_pwrtrack_set_pwr()
1005 rtw_write32_mask(rtwdev, REG_TXAGCIDX, GENMASK(6, 1), txagc_idx); in rtw8821c_pwrtrack_set_pwr()
1006 rtw_write32_mask(rtwdev, REG_TXSCALE_A, GENMASK(31, 21), in rtw8821c_pwrtrack_set_pwr()
1010 static void rtw8821c_pwrtrack_set(struct rtw_dev *rtwdev) in rtw8821c_pwrtrack_set() argument
1012 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8821c_pwrtrack_set()
1015 u8 channel = rtwdev->hal.current_channel; in rtw8821c_pwrtrack_set()
1016 u8 band_width = rtwdev->hal.current_band_width; in rtw8821c_pwrtrack_set()
1017 u8 regd = rtw_regd_get(rtwdev); in rtw8821c_pwrtrack_set()
1019 u8 max_pwr_idx = rtwdev->chip->max_power_index; in rtw8821c_pwrtrack_set()
1021 tx_pwr_idx = rtw_phy_get_tx_power_index(rtwdev, RF_PATH_A, tx_rate, in rtw8821c_pwrtrack_set()
1029 rtw8821c_pwrtrack_set_pwr(rtwdev, pwr_idx_offset, pwr_idx_offset_lower); in rtw8821c_pwrtrack_set()
1032 static void rtw8821c_phy_pwrtrack(struct rtw_dev *rtwdev) in rtw8821c_phy_pwrtrack() argument
1034 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8821c_phy_pwrtrack()
1038 rtw_phy_config_swing_table(rtwdev, &swing_table); in rtw8821c_phy_pwrtrack()
1040 if (rtwdev->efuse.thermal_meter[0] == 0xff) in rtw8821c_phy_pwrtrack()
1043 thermal_value = rtw_read_rf(rtwdev, RF_PATH_A, RF_T_METER, 0xfc00); in rtw8821c_phy_pwrtrack()
1045 rtw_phy_pwrtrack_avg(rtwdev, thermal_value, RF_PATH_A); in rtw8821c_phy_pwrtrack()
1049 else if (!rtw_phy_pwrtrack_thermal_changed(rtwdev, thermal_value, in rtw8821c_phy_pwrtrack()
1053 delta = rtw_phy_pwrtrack_get_delta(rtwdev, RF_PATH_A); in rtw8821c_phy_pwrtrack()
1058 rtw_phy_pwrtrack_get_pwridx(rtwdev, &swing_table, RF_PATH_A, in rtw8821c_phy_pwrtrack()
1066 rtw8821c_pwrtrack_set(rtwdev); in rtw8821c_phy_pwrtrack()
1069 if (rtw_phy_pwrtrack_need_iqk(rtwdev)) in rtw8821c_phy_pwrtrack()
1070 rtw8821c_do_iqk(rtwdev); in rtw8821c_phy_pwrtrack()
1073 static void rtw8821c_pwr_track(struct rtw_dev *rtwdev) in rtw8821c_pwr_track() argument
1075 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw8821c_pwr_track()
1076 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8821c_pwr_track()
1082 rtw_write_rf(rtwdev, RF_PATH_A, RF_T_METER, in rtw8821c_pwr_track()
1088 rtw8821c_phy_pwrtrack(rtwdev); in rtw8821c_pwr_track()
1092 static void rtw8821c_bf_config_bfee_su(struct rtw_dev *rtwdev, in rtw8821c_bf_config_bfee_su() argument
1097 rtw_bf_enable_bfee_su(rtwdev, vif, bfee); in rtw8821c_bf_config_bfee_su()
1099 rtw_bf_remove_bfee_su(rtwdev, bfee); in rtw8821c_bf_config_bfee_su()
1102 static void rtw8821c_bf_config_bfee_mu(struct rtw_dev *rtwdev, in rtw8821c_bf_config_bfee_mu() argument
1107 rtw_bf_enable_bfee_mu(rtwdev, vif, bfee); in rtw8821c_bf_config_bfee_mu()
1109 rtw_bf_remove_bfee_mu(rtwdev, bfee); in rtw8821c_bf_config_bfee_mu()
1112 static void rtw8821c_bf_config_bfee(struct rtw_dev *rtwdev, struct rtw_vif *vif, in rtw8821c_bf_config_bfee() argument
1116 rtw8821c_bf_config_bfee_su(rtwdev, vif, bfee, enable); in rtw8821c_bf_config_bfee()
1118 rtw8821c_bf_config_bfee_mu(rtwdev, vif, bfee, enable); in rtw8821c_bf_config_bfee()
1120 rtw_warn(rtwdev, "wrong bfee role\n"); in rtw8821c_bf_config_bfee()
1123 static void rtw8821c_phy_cck_pd_set(struct rtw_dev *rtwdev, u8 new_lvl) in rtw8821c_phy_cck_pd_set() argument
1125 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw8821c_phy_cck_pd_set()
1129 rtw_dbg(rtwdev, RTW_DBG_PHY, "lv: (%d) -> (%d)\n", in rtw8821c_phy_cck_pd_set()
1135 cck_n_rx = (rtw_read8_mask(rtwdev, REG_CCK0_FAREPORT, BIT_CCK0_2RX) && in rtw8821c_phy_cck_pd_set()
1136 rtw_read8_mask(rtwdev, REG_CCK0_FAREPORT, BIT_CCK0_MRC)) ? 2 : 1; in rtw8821c_phy_cck_pd_set()
1137 rtw_dbg(rtwdev, RTW_DBG_PHY, in rtw8821c_phy_cck_pd_set()
1139 rtw_is_assoc(rtwdev), new_lvl, cck_n_rx, in rtw8821c_phy_cck_pd_set()
1146 rtw_write32_mask(rtwdev, REG_PWRTH, 0x3f0000, pd[new_lvl]); in rtw8821c_phy_cck_pd_set()
1147 rtw_write32_mask(rtwdev, REG_PWRTH2, 0x1f0000, in rtw8821c_phy_cck_pd_set()