ath10k: deinit copy engine before resetting
authorMichal Kazior <michal.kazior@tieto.com>
Fri, 28 Mar 2014 08:02:45 +0000 (10:02 +0200)
committerKalle Valo <kvalo@qca.qualcomm.com>
Fri, 28 Mar 2014 12:32:18 +0000 (14:32 +0200)
Since copy engine allocation has been revised the
ath10k_pci_ce_deinit() now simply zeroes copy
engine registers. It's probably a good idea to do
that before reseting for a more graceful device
reset.

Before ath10k_pci_ce_deinit() freed copy engine
ringbuffer memory so it was required to call it
after resetting. Otherwise it was possible for
device to access unmapped/freed copy engine
ringbuffer memory.

Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath10k/pci.c

index 7995b0d23b1e1faa78e53d91210eda10b705e344..bf1083d52e61d5f4c29bc6e649f357bf74c7ad51 100644 (file)
@@ -2032,9 +2032,9 @@ static void ath10k_pci_hif_power_down(struct ath10k *ar)
        ath10k_pci_free_early_irq(ar);
        ath10k_pci_kill_tasklet(ar);
        ath10k_pci_deinit_irq(ar);
+       ath10k_pci_ce_deinit(ar);
        ath10k_pci_warm_reset(ar);
 
-       ath10k_pci_ce_deinit(ar);
        if (!test_bit(ATH10K_PCI_FEATURE_SOC_POWER_SAVE, ar_pci->features))
                ath10k_do_pci_sleep(ar);
 }