|
@@ -257,10 +257,13 @@ static irqreturn_t wil6210_irq_misc(int irq, void *cookie)
|
|
|
wil6210_mask_irq_misc(wil);
|
|
|
|
|
|
if (isr & ISR_MISC_FW_ERROR) {
|
|
|
- wil_dbg_irq(wil, "IRQ: Firmware error\n");
|
|
|
+ wil_err(wil, "Firmware error detected\n");
|
|
|
clear_bit(wil_status_fwready, &wil->status);
|
|
|
- wil_notify_fw_error(wil);
|
|
|
- isr &= ~ISR_MISC_FW_ERROR;
|
|
|
+ /*
|
|
|
+ * do not clear @isr here - we do 2-nd part in thread
|
|
|
+ * there, user space get notified, and it should be done
|
|
|
+ * in non-atomic context
|
|
|
+ */
|
|
|
}
|
|
|
|
|
|
if (isr & ISR_MISC_FW_READY) {
|
|
@@ -289,6 +292,11 @@ static irqreturn_t wil6210_irq_misc_thread(int irq, void *cookie)
|
|
|
|
|
|
wil_dbg_irq(wil, "Thread ISR MISC 0x%08x\n", isr);
|
|
|
|
|
|
+ if (isr & ISR_MISC_FW_ERROR) {
|
|
|
+ wil_notify_fw_error(wil);
|
|
|
+ isr &= ~ISR_MISC_FW_ERROR;
|
|
|
+ }
|
|
|
+
|
|
|
if (isr & ISR_MISC_MBOX_EVT) {
|
|
|
wil_dbg_irq(wil, "MBOX event\n");
|
|
|
wmi_recv_cmd(wil);
|