wifi: rtw89: 8922a: add SER IMR tables
To activate SER (system error recovery) in firmware, we have to configure IMR to trigger interrupts, and then SER can check registers to know if it need to reset hardware or notify driver to re-configure whole settings. Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Signed-off-by: Kalle Valo <kvalo@kernel.org> Link: https://lore.kernel.org/r/20231204080751.15354-4-pkshih@realtek.com
This commit is contained in:
parent
2a68a27cd2
commit
eeb8cbb58b
@ -3376,6 +3376,12 @@ struct rtw89_reg5_def {
|
||||
u32 data;
|
||||
};
|
||||
|
||||
struct rtw89_reg_imr {
|
||||
u32 addr;
|
||||
u32 clr;
|
||||
u32 set;
|
||||
};
|
||||
|
||||
struct rtw89_phy_table {
|
||||
const struct rtw89_reg2_def *regs;
|
||||
u32 n_regs;
|
||||
@ -3585,6 +3591,11 @@ struct rtw89_imr_info {
|
||||
u32 tmac_imr_set;
|
||||
};
|
||||
|
||||
struct rtw89_imr_table {
|
||||
const struct rtw89_reg_imr *regs;
|
||||
u32 n_regs;
|
||||
};
|
||||
|
||||
struct rtw89_xtal_info {
|
||||
u32 xcap_reg;
|
||||
u32 sc_xo_mask;
|
||||
@ -3779,6 +3790,8 @@ struct rtw89_chip_info {
|
||||
const struct rtw89_reg_def *dcfo_comp;
|
||||
u8 dcfo_comp_sft;
|
||||
const struct rtw89_imr_info *imr_info;
|
||||
const struct rtw89_imr_table *imr_dmac_table;
|
||||
const struct rtw89_imr_table *imr_cmac_table;
|
||||
const struct rtw89_rrsr_cfgs *rrsr_cfgs;
|
||||
struct rtw89_reg_def bss_clr_vld;
|
||||
u32 bss_clr_map_reg;
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -2454,6 +2454,8 @@ const struct rtw89_chip_info rtw8851b_chip_info = {
|
||||
.dcfo_comp = &rtw8851b_dcfo_comp,
|
||||
.dcfo_comp_sft = 12,
|
||||
.imr_info = &rtw8851b_imr_info,
|
||||
.imr_dmac_table = NULL,
|
||||
.imr_cmac_table = NULL,
|
||||
.rrsr_cfgs = &rtw8851b_rrsr_cfgs,
|
||||
.bss_clr_vld = {R_BSS_CLR_MAP_V1, B_BSS_CLR_MAP_VLD0},
|
||||
.bss_clr_map_reg = R_BSS_CLR_MAP_V1,
|
||||
|
@ -2191,6 +2191,8 @@ const struct rtw89_chip_info rtw8852a_chip_info = {
|
||||
.dcfo_comp = &rtw8852a_dcfo_comp,
|
||||
.dcfo_comp_sft = 10,
|
||||
.imr_info = &rtw8852a_imr_info,
|
||||
.imr_dmac_table = NULL,
|
||||
.imr_cmac_table = NULL,
|
||||
.rrsr_cfgs = &rtw8852a_rrsr_cfgs,
|
||||
.bss_clr_vld = {R_BSS_CLR_MAP, B_BSS_CLR_MAP_VLD0},
|
||||
.bss_clr_map_reg = R_BSS_CLR_MAP,
|
||||
|
@ -2625,6 +2625,8 @@ const struct rtw89_chip_info rtw8852b_chip_info = {
|
||||
.dcfo_comp = &rtw8852b_dcfo_comp,
|
||||
.dcfo_comp_sft = 10,
|
||||
.imr_info = &rtw8852b_imr_info,
|
||||
.imr_dmac_table = NULL,
|
||||
.imr_cmac_table = NULL,
|
||||
.rrsr_cfgs = &rtw8852b_rrsr_cfgs,
|
||||
.bss_clr_vld = {R_BSS_CLR_MAP_V1, B_BSS_CLR_MAP_VLD0},
|
||||
.bss_clr_map_reg = R_BSS_CLR_MAP_V1,
|
||||
|
@ -2964,6 +2964,8 @@ const struct rtw89_chip_info rtw8852c_chip_info = {
|
||||
.dcfo_comp = &rtw8852c_dcfo_comp,
|
||||
.dcfo_comp_sft = 12,
|
||||
.imr_info = &rtw8852c_imr_info,
|
||||
.imr_dmac_table = NULL,
|
||||
.imr_cmac_table = NULL,
|
||||
.rrsr_cfgs = &rtw8852c_rrsr_cfgs,
|
||||
.bss_clr_vld = {R_BSS_CLR_MAP, B_BSS_CLR_MAP_VLD0},
|
||||
.bss_clr_map_reg = R_BSS_CLR_MAP,
|
||||
|
@ -63,6 +63,62 @@ static const struct rtw89_dle_mem rtw8922a_dle_mem_pcie[] = {
|
||||
NULL},
|
||||
};
|
||||
|
||||
static const struct rtw89_reg_imr rtw8922a_imr_dmac_regs[] = {
|
||||
{R_BE_DISP_HOST_IMR, B_BE_DISP_HOST_IMR_CLR, B_BE_DISP_HOST_IMR_SET},
|
||||
{R_BE_DISP_CPU_IMR, B_BE_DISP_CPU_IMR_CLR, B_BE_DISP_CPU_IMR_SET},
|
||||
{R_BE_DISP_OTHER_IMR, B_BE_DISP_OTHER_IMR_CLR, B_BE_DISP_OTHER_IMR_SET},
|
||||
{R_BE_PKTIN_ERR_IMR, B_BE_PKTIN_ERR_IMR_CLR, B_BE_PKTIN_ERR_IMR_SET},
|
||||
{R_BE_INTERRUPT_MASK_REG, B_BE_INTERRUPT_MASK_REG_CLR, B_BE_INTERRUPT_MASK_REG_SET},
|
||||
{R_BE_MLO_ERR_IDCT_IMR, B_BE_MLO_ERR_IDCT_IMR_CLR, B_BE_MLO_ERR_IDCT_IMR_SET},
|
||||
{R_BE_MPDU_TX_ERR_IMR, B_BE_MPDU_TX_ERR_IMR_CLR, B_BE_MPDU_TX_ERR_IMR_SET},
|
||||
{R_BE_MPDU_RX_ERR_IMR, B_BE_MPDU_RX_ERR_IMR_CLR, B_BE_MPDU_RX_ERR_IMR_SET},
|
||||
{R_BE_SEC_ERROR_IMR, B_BE_SEC_ERROR_IMR_CLR, B_BE_SEC_ERROR_IMR_SET},
|
||||
{R_BE_CPUIO_ERR_IMR, B_BE_CPUIO_ERR_IMR_CLR, B_BE_CPUIO_ERR_IMR_SET},
|
||||
{R_BE_WDE_ERR_IMR, B_BE_WDE_ERR_IMR_CLR, B_BE_WDE_ERR_IMR_SET},
|
||||
{R_BE_WDE_ERR1_IMR, B_BE_WDE_ERR1_IMR_CLR, B_BE_WDE_ERR1_IMR_SET},
|
||||
{R_BE_PLE_ERR_IMR, B_BE_PLE_ERR_IMR_CLR, B_BE_PLE_ERR_IMR_SET},
|
||||
{R_BE_PLE_ERRFLAG1_IMR, B_BE_PLE_ERRFLAG1_IMR_CLR, B_BE_PLE_ERRFLAG1_IMR_SET},
|
||||
{R_BE_WDRLS_ERR_IMR, B_BE_WDRLS_ERR_IMR_CLR, B_BE_WDRLS_ERR_IMR_SET},
|
||||
{R_BE_TXPKTCTL_B0_ERRFLAG_IMR, B_BE_TXPKTCTL_B0_ERRFLAG_IMR_CLR,
|
||||
B_BE_TXPKTCTL_B0_ERRFLAG_IMR_SET},
|
||||
{R_BE_TXPKTCTL_B1_ERRFLAG_IMR, B_BE_TXPKTCTL_B1_ERRFLAG_IMR_CLR,
|
||||
B_BE_TXPKTCTL_B1_ERRFLAG_IMR_SET},
|
||||
{R_BE_BBRPT_COM_ERR_IMR, B_BE_BBRPT_COM_ERR_IMR_CLR, B_BE_BBRPT_COM_ERR_IMR_SET},
|
||||
{R_BE_BBRPT_CHINFO_ERR_IMR, B_BE_BBRPT_CHINFO_ERR_IMR_CLR,
|
||||
B_BE_BBRPT_CHINFO_ERR_IMR_SET},
|
||||
{R_BE_BBRPT_DFS_ERR_IMR, B_BE_BBRPT_DFS_ERR_IMR_CLR, B_BE_BBRPT_DFS_ERR_IMR_SET},
|
||||
{R_BE_LA_ERRFLAG_IMR, B_BE_LA_ERRFLAG_IMR_CLR, B_BE_LA_ERRFLAG_IMR_SET},
|
||||
{R_BE_CH_INFO_DBGFLAG_IMR, B_BE_CH_INFO_DBGFLAG_IMR_CLR, B_BE_CH_INFO_DBGFLAG_IMR_SET},
|
||||
{R_BE_PLRLS_ERR_IMR, B_BE_PLRLS_ERR_IMR_CLR, B_BE_PLRLS_ERR_IMR_SET},
|
||||
{R_BE_HAXI_IDCT_MSK, B_BE_HAXI_IDCT_MSK_CLR, B_BE_HAXI_IDCT_MSK_SET},
|
||||
};
|
||||
|
||||
static const struct rtw89_imr_table rtw8922a_imr_dmac_table = {
|
||||
.regs = rtw8922a_imr_dmac_regs,
|
||||
.n_regs = ARRAY_SIZE(rtw8922a_imr_dmac_regs),
|
||||
};
|
||||
|
||||
static const struct rtw89_reg_imr rtw8922a_imr_cmac_regs[] = {
|
||||
{R_BE_RESP_IMR, B_BE_RESP_IMR_CLR, B_BE_RESP_IMR_SET},
|
||||
{R_BE_RX_ERROR_FLAG_IMR, B_BE_RX_ERROR_FLAG_IMR_CLR, B_BE_RX_ERROR_FLAG_IMR_SET},
|
||||
{R_BE_TX_ERROR_FLAG_IMR, B_BE_TX_ERROR_FLAG_IMR_CLR, B_BE_TX_ERROR_FLAG_IMR_SET},
|
||||
{R_BE_RX_ERROR_FLAG_IMR_1, B_BE_TX_ERROR_FLAG_IMR_1_CLR, B_BE_TX_ERROR_FLAG_IMR_1_SET},
|
||||
{R_BE_PTCL_IMR1, B_BE_PTCL_IMR1_CLR, B_BE_PTCL_IMR1_SET},
|
||||
{R_BE_PTCL_IMR0, B_BE_PTCL_IMR0_CLR, B_BE_PTCL_IMR0_SET},
|
||||
{R_BE_PTCL_IMR_2, B_BE_PTCL_IMR_2_CLR, B_BE_PTCL_IMR_2_SET},
|
||||
{R_BE_SCHEDULE_ERR_IMR, B_BE_SCHEDULE_ERR_IMR_CLR, B_BE_SCHEDULE_ERR_IMR_SET},
|
||||
{R_BE_C0_TXPWR_IMR, B_BE_C0_TXPWR_IMR_CLR, B_BE_C0_TXPWR_IMR_SET},
|
||||
{R_BE_TRXPTCL_ERROR_INDICA_MASK, B_BE_TRXPTCL_ERROR_INDICA_MASK_CLR,
|
||||
B_BE_TRXPTCL_ERROR_INDICA_MASK_SET},
|
||||
{R_BE_RX_ERR_IMR, B_BE_RX_ERR_IMR_CLR, B_BE_RX_ERR_IMR_SET},
|
||||
{R_BE_PHYINFO_ERR_IMR_V1, B_BE_PHYINFO_ERR_IMR_V1_CLR, B_BE_PHYINFO_ERR_IMR_V1_SET},
|
||||
};
|
||||
|
||||
static const struct rtw89_imr_table rtw8922a_imr_cmac_table = {
|
||||
.regs = rtw8922a_imr_cmac_regs,
|
||||
.n_regs = ARRAY_SIZE(rtw8922a_imr_cmac_regs),
|
||||
};
|
||||
|
||||
static const struct rtw89_efuse_block_cfg rtw8922a_efuse_blocks[] = {
|
||||
[RTW89_EFUSE_BLOCK_SYS] = {.offset = 0x00000, .size = 0x310},
|
||||
[RTW89_EFUSE_BLOCK_RF] = {.offset = 0x10000, .size = 0x240},
|
||||
@ -399,6 +455,8 @@ const struct rtw89_chip_info rtw8922a_chip_info = {
|
||||
.dcfo_comp = NULL,
|
||||
.dcfo_comp_sft = 0,
|
||||
.imr_info = NULL,
|
||||
.imr_dmac_table = &rtw8922a_imr_dmac_table,
|
||||
.imr_cmac_table = &rtw8922a_imr_cmac_table,
|
||||
.bss_clr_vld = {R_BSS_CLR_VLD_V2, B_BSS_CLR_VLD0_V2},
|
||||
.bss_clr_map_reg = R_BSS_CLR_MAP_V2,
|
||||
.dma_ch_mask = 0,
|
||||
|
Loading…
x
Reference in New Issue
Block a user