wcn36xx: Put DXE block into reset before freeing memory
When deiniting the DXE hardware we should reset the block to ensure there
is no spurious DMA write transaction from the downstream WCNSS to upstream
MSM at a skbuff address we will have released.
Fixes: 8e84c25821
("wcn36xx: mac80211 driver for Qualcomm WCN3660/WCN3680 hardware")
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20211105122152.1580542-4-bryan.odonoghue@linaro.org
This commit is contained in:
Родитель
3652096e52
Коммит
ed04ea76e6
|
@ -1044,6 +1044,8 @@ out_err_txh_ch:
|
|||
|
||||
void wcn36xx_dxe_deinit(struct wcn36xx *wcn)
|
||||
{
|
||||
int reg_data = 0;
|
||||
|
||||
/* Disable channel interrupts */
|
||||
wcn36xx_dxe_disable_ch_int(wcn, WCN36XX_INT_MASK_CHAN_RX_H);
|
||||
wcn36xx_dxe_disable_ch_int(wcn, WCN36XX_INT_MASK_CHAN_RX_L);
|
||||
|
@ -1059,6 +1061,10 @@ void wcn36xx_dxe_deinit(struct wcn36xx *wcn)
|
|||
wcn->tx_ack_skb = NULL;
|
||||
}
|
||||
|
||||
/* Put the DXE block into reset before freeing memory */
|
||||
reg_data = WCN36XX_DXE_REG_RESET;
|
||||
wcn36xx_dxe_write_register(wcn, WCN36XX_DXE_REG_CSR_RESET, reg_data);
|
||||
|
||||
wcn36xx_dxe_ch_free_skbs(wcn, &wcn->dxe_rx_l_ch);
|
||||
wcn36xx_dxe_ch_free_skbs(wcn, &wcn->dxe_rx_h_ch);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче