diff options
Diffstat (limited to 'drivers/net/wireless/ath/wil6210')
-rw-r--r-- | drivers/net/wireless/ath/wil6210/interrupt.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/drivers/net/wireless/ath/wil6210/interrupt.c b/drivers/net/wireless/ath/wil6210/interrupt.c index dc97e7b2609c..de9b971ea159 100644 --- a/drivers/net/wireless/ath/wil6210/interrupt.c +++ b/drivers/net/wireless/ath/wil6210/interrupt.c | |||
@@ -257,10 +257,13 @@ static irqreturn_t wil6210_irq_misc(int irq, void *cookie) | |||
257 | wil6210_mask_irq_misc(wil); | 257 | wil6210_mask_irq_misc(wil); |
258 | 258 | ||
259 | if (isr & ISR_MISC_FW_ERROR) { | 259 | if (isr & ISR_MISC_FW_ERROR) { |
260 | wil_dbg_irq(wil, "IRQ: Firmware error\n"); | 260 | wil_err(wil, "Firmware error detected\n"); |
261 | clear_bit(wil_status_fwready, &wil->status); | 261 | clear_bit(wil_status_fwready, &wil->status); |
262 | wil_notify_fw_error(wil); | 262 | /* |
263 | isr &= ~ISR_MISC_FW_ERROR; | 263 | * do not clear @isr here - we do 2-nd part in thread |
264 | * there, user space get notified, and it should be done | ||
265 | * in non-atomic context | ||
266 | */ | ||
264 | } | 267 | } |
265 | 268 | ||
266 | if (isr & ISR_MISC_FW_READY) { | 269 | if (isr & ISR_MISC_FW_READY) { |
@@ -289,6 +292,11 @@ static irqreturn_t wil6210_irq_misc_thread(int irq, void *cookie) | |||
289 | 292 | ||
290 | wil_dbg_irq(wil, "Thread ISR MISC 0x%08x\n", isr); | 293 | wil_dbg_irq(wil, "Thread ISR MISC 0x%08x\n", isr); |
291 | 294 | ||
295 | if (isr & ISR_MISC_FW_ERROR) { | ||
296 | wil_notify_fw_error(wil); | ||
297 | isr &= ~ISR_MISC_FW_ERROR; | ||
298 | } | ||
299 | |||
292 | if (isr & ISR_MISC_MBOX_EVT) { | 300 | if (isr & ISR_MISC_MBOX_EVT) { |
293 | wil_dbg_irq(wil, "MBOX event\n"); | 301 | wil_dbg_irq(wil, "MBOX event\n"); |
294 | wmi_recv_cmd(wil); | 302 | wmi_recv_cmd(wil); |