summaryrefslogtreecommitdiff
path: root/drivers/net
diff options
context:
space:
mode:
authorKomal Seelam <kseelam@codeaurora.org>2016-05-06 13:06:00 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2016-08-24 04:40:49 -0700
commitec79695605b6ba27190d9f74bc9febf2f7042b56 (patch)
tree95f9696fcbef509e2d1a1aa4a8e4ab1bdc7a769e /drivers/net
parentae275bab72c704ed0a7545f13ea5f8a33e379aad (diff)
cnss: Disable wlan irq when PCIe link down is detected
Interrupt Storm is observed on the APPS side, when PCIe link down is simulated, as FW keeps generating interrupts to host, as it's not aware of the PCIe link down. When PCIe link down is identified, wlan platform driver schedules work to start recovery. During Recovery we cut down power to QCA6174, which stops the interrupt storm. During the window where platform driver schedule work and the work actually gets schedules, interrupt storm happened and the APPS triggered watchdog. Change-Id: Ica3c32007bc9b8acce79c5bb2175790ff27180d0 CRs-Fixed: 967956 Signed-off-by: Komal Seelam <kseelam@codeaurora.org>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/wireless/cnss/cnss_pci.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/net/wireless/cnss/cnss_pci.c b/drivers/net/wireless/cnss/cnss_pci.c
index efe0e7ad43d0..a5a308667003 100644
--- a/drivers/net/wireless/cnss/cnss_pci.c
+++ b/drivers/net/wireless/cnss/cnss_pci.c
@@ -1960,6 +1960,13 @@ void cnss_schedule_recovery_work(void)
}
EXPORT_SYMBOL(cnss_schedule_recovery_work);
+static inline void __cnss_disable_irq(void *data)
+{
+ struct pci_dev *pdev = data;
+
+ disable_irq(pdev->irq);
+}
+
void cnss_pci_events_cb(struct msm_pcie_notify *notify)
{
unsigned long flags;
@@ -1983,6 +1990,7 @@ void cnss_pci_events_cb(struct msm_pcie_notify *notify)
spin_unlock_irqrestore(&pci_link_down_lock, flags);
pr_err("PCI link down, schedule recovery\n");
+ __cnss_disable_irq(notify->user);
schedule_work(&cnss_pci_recovery_work);
break;