mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 19:13:47 +02:00
wifi: rtw89: mac: add an entry to enable MAC function in preinit
The preinit is to initialize partial MAC hardware needed before downloading firmware, and then does post-init after firmware runs. For RTL8922D, initialize some DMAC and CMAC at this step. Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/20260108120320.2217402-13-pkshih@realtek.com
This commit is contained in:
parent
c16673247b
commit
6996a4c97a
|
|
@ -4223,12 +4223,19 @@ int rtw89_mac_partial_init(struct rtw89_dev *rtwdev, bool include_bb)
|
|||
|
||||
int rtw89_mac_preinit(struct rtw89_dev *rtwdev)
|
||||
{
|
||||
const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def;
|
||||
int ret;
|
||||
|
||||
ret = rtw89_mac_pwr_on(rtwdev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (mac->mac_func_en) {
|
||||
ret = mac->mac_func_en(rtwdev);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -7292,6 +7299,7 @@ const struct rtw89_mac_gen_def rtw89_mac_gen_ax = {
|
|||
.trx_init = trx_init_ax,
|
||||
.preload_init = preload_init_set_ax,
|
||||
.err_imr_ctrl = err_imr_ctrl_ax,
|
||||
.mac_func_en = NULL,
|
||||
.hci_func_en = rtw89_mac_hci_func_en_ax,
|
||||
.dmac_func_pre_en = rtw89_mac_dmac_func_pre_en_ax,
|
||||
.dle_func_en = dle_func_en_ax,
|
||||
|
|
|
|||
|
|
@ -1040,6 +1040,7 @@ struct rtw89_mac_gen_def {
|
|||
int (*preload_init)(struct rtw89_dev *rtwdev, u8 mac_idx,
|
||||
enum rtw89_qta_mode mode);
|
||||
void (*err_imr_ctrl)(struct rtw89_dev *rtwdev, bool en);
|
||||
int (*mac_func_en)(struct rtw89_dev *rtwdev);
|
||||
void (*hci_func_en)(struct rtw89_dev *rtwdev);
|
||||
void (*dmac_func_pre_en)(struct rtw89_dev *rtwdev);
|
||||
void (*dle_func_en)(struct rtw89_dev *rtwdev, bool enable);
|
||||
|
|
|
|||
|
|
@ -751,6 +751,37 @@ static int rtw89_fwdl_check_path_ready_be(struct rtw89_dev *rtwdev,
|
|||
|
||||
static int dmac_func_en_be(struct rtw89_dev *rtwdev)
|
||||
{
|
||||
const struct rtw89_chip_info *chip = rtwdev->chip;
|
||||
|
||||
if (chip->chip_id == RTL8922A)
|
||||
return 0;
|
||||
|
||||
rtw89_write32_set(rtwdev, R_BE_DMAC_FUNC_EN,
|
||||
B_BE_MAC_FUNC_EN | B_BE_DMAC_FUNC_EN |
|
||||
B_BE_MPDU_PROC_EN | B_BE_WD_RLS_EN |
|
||||
B_BE_DLE_WDE_EN | B_BE_TXPKT_CTRL_EN |
|
||||
B_BE_STA_SCH_EN | B_BE_DLE_PLE_EN |
|
||||
B_BE_PKT_BUF_EN | B_BE_DMAC_TBL_EN |
|
||||
B_BE_PKT_IN_EN | B_BE_DLE_CPUIO_EN |
|
||||
B_BE_DISPATCHER_EN | B_BE_BBRPT_EN |
|
||||
B_BE_MAC_SEC_EN | B_BE_H_AXIDMA_EN |
|
||||
B_BE_DMAC_MLO_EN | B_BE_PLRLS_EN |
|
||||
B_BE_P_AXIDMA_EN | B_BE_DLE_DATACPUIO_EN);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cmac_share_func_en_be(struct rtw89_dev *rtwdev)
|
||||
{
|
||||
const struct rtw89_chip_info *chip = rtwdev->chip;
|
||||
|
||||
if (chip->chip_id == RTL8922A)
|
||||
return 0;
|
||||
|
||||
rtw89_write32_set(rtwdev, R_BE_CMAC_SHARE_FUNC_EN,
|
||||
B_BE_CMAC_SHARE_EN | B_BE_RESPBA_EN |
|
||||
B_BE_ADDRSRCH_EN | B_BE_BTCOEX_EN);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -865,6 +896,10 @@ static int sys_init_be(struct rtw89_dev *rtwdev)
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = cmac_share_func_en_be(rtwdev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = cmac_pwr_en_be(rtwdev, RTW89_MAC_0, true);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
|
@ -880,6 +915,43 @@ static int sys_init_be(struct rtw89_dev *rtwdev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int mac_func_en_be(struct rtw89_dev *rtwdev)
|
||||
{
|
||||
u32 val;
|
||||
int ret;
|
||||
|
||||
ret = dmac_func_en_be(rtwdev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = cmac_share_func_en_be(rtwdev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
val = rtw89_read32(rtwdev, R_BE_FEN_RST_ENABLE);
|
||||
if (val & B_BE_CMAC0_FEN) {
|
||||
ret = cmac_pwr_en_be(rtwdev, RTW89_MAC_0, true);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = cmac_func_en_be(rtwdev, RTW89_MAC_0, true);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (val & B_BE_CMAC1_FEN) {
|
||||
ret = cmac_pwr_en_be(rtwdev, RTW89_MAC_1, true);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = cmac_func_en_be(rtwdev, RTW89_MAC_1, true);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sta_sch_init_be(struct rtw89_dev *rtwdev)
|
||||
{
|
||||
u32 p_val;
|
||||
|
|
@ -2911,6 +2983,7 @@ const struct rtw89_mac_gen_def rtw89_mac_gen_be = {
|
|||
.trx_init = trx_init_be,
|
||||
.preload_init = preload_init_be,
|
||||
.err_imr_ctrl = err_imr_ctrl_be,
|
||||
.mac_func_en = mac_func_en_be,
|
||||
.hci_func_en = rtw89_mac_hci_func_en_be,
|
||||
.dmac_func_pre_en = rtw89_mac_dmac_func_pre_en_be,
|
||||
.dle_func_en = dle_func_en_be,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user