Commit 707b1bbd authored by Bartosz Markowski's avatar Bartosz Markowski Committed by Kalle Valo

ath10k: fix pm resume after suspend

Firmware was crashing when we were trying to warm reset it
after suspend. This was due to the fact that target registeres
can be accessed only if the hardware is awaken.

This patch makes sure to awake the device also on the hif up,
not only in case of probe call.
Signed-off-by: default avatarBartosz Markowski <bartosz.markowski@tieto.com>
Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
parent aa292fa4
...@@ -1875,6 +1875,12 @@ static int ath10k_pci_hif_power_up(struct ath10k *ar) ...@@ -1875,6 +1875,12 @@ static int ath10k_pci_hif_power_up(struct ath10k *ar)
ath10k_dbg(ar, ATH10K_DBG_BOOT, "boot hif power up\n"); ath10k_dbg(ar, ATH10K_DBG_BOOT, "boot hif power up\n");
ret = ath10k_pci_wake(ar);
if (ret) {
ath10k_err(ar, "failed to wake up target: %d\n", ret);
return ret;
}
/* /*
* Bring the target up cleanly. * Bring the target up cleanly.
* *
...@@ -1888,13 +1894,13 @@ static int ath10k_pci_hif_power_up(struct ath10k *ar) ...@@ -1888,13 +1894,13 @@ static int ath10k_pci_hif_power_up(struct ath10k *ar)
ret = ath10k_pci_chip_reset(ar); ret = ath10k_pci_chip_reset(ar);
if (ret) { if (ret) {
ath10k_err(ar, "failed to reset chip: %d\n", ret); ath10k_err(ar, "failed to reset chip: %d\n", ret);
goto err; goto err_sleep;
} }
ret = ath10k_pci_init_pipes(ar); ret = ath10k_pci_init_pipes(ar);
if (ret) { if (ret) {
ath10k_err(ar, "failed to initialize CE: %d\n", ret); ath10k_err(ar, "failed to initialize CE: %d\n", ret);
goto err; goto err_sleep;
} }
ret = ath10k_pci_init_config(ar); ret = ath10k_pci_init_config(ar);
...@@ -1914,7 +1920,8 @@ static int ath10k_pci_hif_power_up(struct ath10k *ar) ...@@ -1914,7 +1920,8 @@ static int ath10k_pci_hif_power_up(struct ath10k *ar)
err_ce: err_ce:
ath10k_pci_ce_deinit(ar); ath10k_pci_ce_deinit(ar);
err: err_sleep:
ath10k_pci_sleep(ar);
return ret; return ret;
} }
...@@ -1925,6 +1932,8 @@ static void ath10k_pci_hif_power_down(struct ath10k *ar) ...@@ -1925,6 +1932,8 @@ static void ath10k_pci_hif_power_down(struct ath10k *ar)
/* Currently hif_power_up performs effectively a reset and hif_stop /* Currently hif_power_up performs effectively a reset and hif_stop
* resets the chip as well so there's no point in resetting here. * resets the chip as well so there's no point in resetting here.
*/ */
ath10k_pci_sleep(ar);
} }
#ifdef CONFIG_PM #ifdef CONFIG_PM
...@@ -2526,6 +2535,8 @@ static int ath10k_pci_probe(struct pci_dev *pdev, ...@@ -2526,6 +2535,8 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
goto err_deinit_irq; goto err_deinit_irq;
} }
ath10k_pci_sleep(ar);
ret = ath10k_core_register(ar, chip_id); ret = ath10k_core_register(ar, chip_id);
if (ret) { if (ret) {
ath10k_err(ar, "failed to register driver core: %d\n", ret); ath10k_err(ar, "failed to register driver core: %d\n", ret);
...@@ -2577,7 +2588,6 @@ static void ath10k_pci_remove(struct pci_dev *pdev) ...@@ -2577,7 +2588,6 @@ static void ath10k_pci_remove(struct pci_dev *pdev)
ath10k_pci_deinit_irq(ar); ath10k_pci_deinit_irq(ar);
ath10k_pci_ce_deinit(ar); ath10k_pci_ce_deinit(ar);
ath10k_pci_free_pipes(ar); ath10k_pci_free_pipes(ar);
ath10k_pci_sleep(ar);
ath10k_pci_release(ar); ath10k_pci_release(ar);
ath10k_core_destroy(ar); ath10k_core_destroy(ar);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment