diff options
author | Komal Seelam <kseelam@codeaurora.org> | 2016-05-06 13:06:00 +0530 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-08-24 04:40:49 -0700 |
commit | ec79695605b6ba27190d9f74bc9febf2f7042b56 (patch) | |
tree | 95f9696fcbef509e2d1a1aa4a8e4ab1bdc7a769e /drivers/net | |
parent | ae275bab72c704ed0a7545f13ea5f8a33e379aad (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.c | 8 |
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; |