95 lines
2.8 KiB
C
95 lines
2.8 KiB
C
|
// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
|
||
|
/* Copyright(c) 2019-2022 Realtek Corporation
|
||
|
*/
|
||
|
|
||
|
#include "core.h"
|
||
|
#include "mac.h"
|
||
|
#include "reg.h"
|
||
|
|
||
|
static const struct rtw89_dle_mem rtw8852b_dle_mem_pcie[] = {
|
||
|
[RTW89_QTA_SCC] = {RTW89_QTA_SCC, &rtw89_mac_size.wde_size6,
|
||
|
&rtw89_mac_size.ple_size6, &rtw89_mac_size.wde_qt6,
|
||
|
&rtw89_mac_size.wde_qt6, &rtw89_mac_size.ple_qt18,
|
||
|
&rtw89_mac_size.ple_qt58},
|
||
|
[RTW89_QTA_DLFW] = {RTW89_QTA_DLFW, &rtw89_mac_size.wde_size9,
|
||
|
&rtw89_mac_size.ple_size8, &rtw89_mac_size.wde_qt4,
|
||
|
&rtw89_mac_size.wde_qt4, &rtw89_mac_size.ple_qt13,
|
||
|
&rtw89_mac_size.ple_qt13},
|
||
|
[RTW89_QTA_INVALID] = {RTW89_QTA_INVALID, NULL, NULL, NULL, NULL, NULL,
|
||
|
NULL},
|
||
|
};
|
||
|
|
||
|
static int rtw8852b_mac_enable_bb_rf(struct rtw89_dev *rtwdev)
|
||
|
{
|
||
|
int ret;
|
||
|
|
||
|
rtw89_write8_set(rtwdev, R_AX_SYS_FUNC_EN,
|
||
|
B_AX_FEN_BBRSTB | B_AX_FEN_BB_GLB_RSTN);
|
||
|
rtw89_write32_mask(rtwdev, R_AX_SPS_DIG_ON_CTRL0, B_AX_REG_ZCDC_H_MASK, 0x1);
|
||
|
rtw89_write32_set(rtwdev, R_AX_WLRF_CTRL, B_AX_AFC_AFEDIG);
|
||
|
rtw89_write32_clr(rtwdev, R_AX_WLRF_CTRL, B_AX_AFC_AFEDIG);
|
||
|
rtw89_write32_set(rtwdev, R_AX_WLRF_CTRL, B_AX_AFC_AFEDIG);
|
||
|
|
||
|
ret = rtw89_mac_write_xtal_si(rtwdev, XTAL_SI_WL_RFC_S0, 0xC7,
|
||
|
FULL_BIT_MASK);
|
||
|
if (ret)
|
||
|
return ret;
|
||
|
|
||
|
ret = rtw89_mac_write_xtal_si(rtwdev, XTAL_SI_WL_RFC_S1, 0xC7,
|
||
|
FULL_BIT_MASK);
|
||
|
if (ret)
|
||
|
return ret;
|
||
|
|
||
|
rtw89_write8(rtwdev, R_AX_PHYREG_SET, PHYREG_SET_XYN_CYCLE);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static int rtw8852b_mac_disable_bb_rf(struct rtw89_dev *rtwdev)
|
||
|
{
|
||
|
u8 wl_rfc_s0;
|
||
|
u8 wl_rfc_s1;
|
||
|
int ret;
|
||
|
|
||
|
rtw89_write8_clr(rtwdev, R_AX_SYS_FUNC_EN,
|
||
|
B_AX_FEN_BBRSTB | B_AX_FEN_BB_GLB_RSTN);
|
||
|
|
||
|
ret = rtw89_mac_read_xtal_si(rtwdev, XTAL_SI_WL_RFC_S0, &wl_rfc_s0);
|
||
|
if (ret)
|
||
|
return ret;
|
||
|
wl_rfc_s0 &= ~XTAL_SI_RF00S_EN;
|
||
|
ret = rtw89_mac_write_xtal_si(rtwdev, XTAL_SI_WL_RFC_S0, wl_rfc_s0,
|
||
|
FULL_BIT_MASK);
|
||
|
if (ret)
|
||
|
return ret;
|
||
|
|
||
|
ret = rtw89_mac_read_xtal_si(rtwdev, XTAL_SI_WL_RFC_S1, &wl_rfc_s1);
|
||
|
if (ret)
|
||
|
return ret;
|
||
|
wl_rfc_s1 &= ~XTAL_SI_RF10S_EN;
|
||
|
ret = rtw89_mac_write_xtal_si(rtwdev, XTAL_SI_WL_RFC_S1, wl_rfc_s1,
|
||
|
FULL_BIT_MASK);
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
static const struct rtw89_chip_ops rtw8852b_chip_ops = {
|
||
|
.enable_bb_rf = rtw8852b_mac_enable_bb_rf,
|
||
|
.disable_bb_rf = rtw8852b_mac_disable_bb_rf,
|
||
|
};
|
||
|
|
||
|
const struct rtw89_chip_info rtw8852b_chip_info = {
|
||
|
.chip_id = RTL8852B,
|
||
|
.fifo_size = 196608,
|
||
|
.dle_scc_rsvd_size = 98304,
|
||
|
.dle_mem = rtw8852b_dle_mem_pcie,
|
||
|
.dma_ch_mask = BIT(RTW89_DMA_ACH4) | BIT(RTW89_DMA_ACH5) |
|
||
|
BIT(RTW89_DMA_ACH6) | BIT(RTW89_DMA_ACH7) |
|
||
|
BIT(RTW89_DMA_B1MG) | BIT(RTW89_DMA_B1HI),
|
||
|
};
|
||
|
EXPORT_SYMBOL(rtw8852b_chip_info);
|
||
|
|
||
|
MODULE_FIRMWARE("rtw89/rtw8852b_fw.bin");
|
||
|
MODULE_AUTHOR("Realtek Corporation");
|
||
|
MODULE_DESCRIPTION("Realtek 802.11ax wireless 8852B driver");
|
||
|
MODULE_LICENSE("Dual BSD/GPL");
|