Commit 37b7ecb7 authored by Wen Gong's avatar Wen Gong Committed by Kalle Valo

ath10k: start recovery process when read int status fail for sdio

When running simulate crash stress test, it happened
"failed to read from address 0x800: -110".

Test steps:
1. Run command continuous
echo soft > /sys/kernel/debug/ieee80211/phy0/ath10k/simulate_fw_crash

2. error happened and it did not begin recovery for long time.
[74377.334846] ath10k_sdio mmc1:0001:1: simulating soft firmware crash
[74378.378217] ath10k_sdio mmc1:0001:1: failed to read from address 0x800: -110
[74378.378371] ath10k_sdio mmc1:0001:1: failed to process pending SDIO interrupts: -110

It has sdio errors since it can not read MBOX_HOST_INT_STATUS_ADDRESS,
then it has to do recovery process to recovery ath10k.

Tested with QCA6174 SDIO with firmware WLAN.RMH.4.4.1-00042.
Signed-off-by: default avatarWen Gong <wgong@codeaurora.org>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 6e51b0e4
...@@ -953,8 +953,11 @@ static int ath10k_sdio_mbox_read_int_status(struct ath10k *ar, ...@@ -953,8 +953,11 @@ static int ath10k_sdio_mbox_read_int_status(struct ath10k *ar,
*/ */
ret = ath10k_sdio_read(ar, MBOX_HOST_INT_STATUS_ADDRESS, ret = ath10k_sdio_read(ar, MBOX_HOST_INT_STATUS_ADDRESS,
irq_proc_reg, sizeof(*irq_proc_reg)); irq_proc_reg, sizeof(*irq_proc_reg));
if (ret) if (ret) {
queue_work(ar->workqueue, &ar->restart_work);
ath10k_warn(ar, "read int status fail, start recovery\n");
goto out; goto out;
}
/* Update only those registers that are enabled */ /* Update only those registers that are enabled */
*host_int_status = irq_proc_reg->host_int_status & *host_int_status = irq_proc_reg->host_int_status &
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment