rtw89: ser: configure top ERR IMR for firmware to recover
Turn on ERR IMR, and then firmware can capture interrupts reflecting errors to recover hardware states. Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Signed-off-by: Kalle Valo <kvalo@kernel.org> Link: https://lore.kernel.org/r/20220408001353.17188-5-pkshih@realtek.com
This commit is contained in:
parent
d86369e937
commit
9f405b0162
@ -2842,6 +2842,19 @@ static int rtw89_mac_enable_imr(struct rtw89_dev *rtwdev, u8 mac_idx,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void rtw89_mac_err_imr_ctrl(struct rtw89_dev *rtwdev, bool en)
|
||||
{
|
||||
enum rtw89_core_chip_id chip_id = rtwdev->chip->chip_id;
|
||||
|
||||
rtw89_write32(rtwdev, R_AX_DMAC_ERR_IMR,
|
||||
en ? DMAC_ERR_IMR_EN : DMAC_ERR_IMR_DIS);
|
||||
rtw89_write32(rtwdev, R_AX_CMAC_ERR_IMR,
|
||||
en ? CMAC0_ERR_IMR_EN : CMAC0_ERR_IMR_DIS);
|
||||
if (chip_id != RTL8852B && rtwdev->mac.dle_info.c1_rx_qta)
|
||||
rtw89_write32(rtwdev, R_AX_CMAC_ERR_IMR_C1,
|
||||
en ? CMAC1_ERR_IMR_EN : CMAC1_ERR_IMR_DIS);
|
||||
}
|
||||
|
||||
static int rtw89_mac_dbcc_enable(struct rtw89_dev *rtwdev, bool enable)
|
||||
{
|
||||
int ret = 0;
|
||||
@ -2923,6 +2936,8 @@ static int rtw89_mac_trx_init(struct rtw89_dev *rtwdev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
rtw89_mac_err_imr_ctrl(rtwdev, true);
|
||||
|
||||
ret = set_host_rpr(rtwdev);
|
||||
if (ret) {
|
||||
rtw89_err(rtwdev, "[ERR] set host rpr %d\n", ret);
|
||||
|
@ -504,6 +504,21 @@
|
||||
#define B_AX_WDE_EMPTY_QUE_CMAC0_MBH BIT(1)
|
||||
#define B_AX_WDE_EMPTY_QUE_CMAC0_ALL_AC BIT(0)
|
||||
|
||||
#define R_AX_DMAC_ERR_IMR 0x8520
|
||||
#define B_AX_DLE_CPUIO_ERR_INT_EN BIT(10)
|
||||
#define B_AX_APB_BRIDGE_ERR_INT_EN BIT(9)
|
||||
#define B_AX_DISPATCH_ERR_INT_EN BIT(8)
|
||||
#define B_AX_PKTIN_ERR_INT_EN BIT(7)
|
||||
#define B_AX_PLE_DLE_ERR_INT_EN BIT(6)
|
||||
#define B_AX_TXPKTCTRL_ERR_INT_EN BIT(5)
|
||||
#define B_AX_WDE_DLE_ERR_INT_EN BIT(4)
|
||||
#define B_AX_STA_SCHEDULER_ERR_INT_EN BIT(3)
|
||||
#define B_AX_MPDU_ERR_INT_EN BIT(2)
|
||||
#define B_AX_WSEC_ERR_INT_EN BIT(1)
|
||||
#define B_AX_WDRLS_ERR_INT_EN BIT(0)
|
||||
#define DMAC_ERR_IMR_EN GENMASK(31, 0)
|
||||
#define DMAC_ERR_IMR_DIS 0
|
||||
|
||||
#define R_AX_DMAC_ERR_ISR 0x8524
|
||||
#define B_AX_DLE_CPUIO_ERR_FLAG BIT(10)
|
||||
#define B_AX_APB_BRIDGE_ERR_FLAG BIT(9)
|
||||
@ -1805,6 +1820,20 @@
|
||||
#define B_AX_TXSC_40M_MASK GENMASK(7, 4)
|
||||
#define B_AX_TXSC_20M_MASK GENMASK(3, 0)
|
||||
|
||||
#define R_AX_CMAC_ERR_IMR 0xC160
|
||||
#define R_AX_CMAC_ERR_IMR_C1 0xE160
|
||||
#define B_AX_WMAC_TX_ERR_IND_EN BIT(7)
|
||||
#define B_AX_WMAC_RX_ERR_IND_EN BIT(6)
|
||||
#define B_AX_TXPWR_CTRL_ERR_IND_EN BIT(5)
|
||||
#define B_AX_PHYINTF_ERR_IND_EN BIT(4)
|
||||
#define B_AX_DMA_TOP_ERR_IND_EN BIT(3)
|
||||
#define B_AX_PTCL_TOP_ERR_IND_EN BIT(1)
|
||||
#define B_AX_SCHEDULE_TOP_ERR_IND_EN BIT(0)
|
||||
#define CMAC0_ERR_IMR_EN GENMASK(31, 0)
|
||||
#define CMAC1_ERR_IMR_EN GENMASK(31, 0)
|
||||
#define CMAC0_ERR_IMR_DIS 0
|
||||
#define CMAC1_ERR_IMR_DIS 0
|
||||
|
||||
#define R_AX_CMAC_ERR_ISR 0xC164
|
||||
#define R_AX_CMAC_ERR_ISR_C1 0xE164
|
||||
#define B_AX_WMAC_TX_ERR_IND BIT(7)
|
||||
|
Loading…
x
Reference in New Issue
Block a user