Commit 9ff4be96 authored by Michal Kazior's avatar Michal Kazior Committed by Kalle Valo

ath10k: save/restore pci config space properly

The check was't really necessary and couldn't even
work to begin with because pci_restore_state()
restores only first 64 bytes of PCI configuration
space.

Actually the PCI subsystem takes care of this so
there's no need for explicit calls to save PCI
state in ath10k.

This is necessary for future WoWLAN support.
Signed-off-by: default avatarMichal Kazior <michal.kazior@tieto.com>
Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
parent 320e14b8
...@@ -2053,25 +2053,10 @@ static void ath10k_pci_hif_power_down(struct ath10k *ar) ...@@ -2053,25 +2053,10 @@ static void ath10k_pci_hif_power_down(struct ath10k *ar)
#ifdef CONFIG_PM #ifdef CONFIG_PM
#define ATH10K_PCI_PM_CONTROL 0x44
static int ath10k_pci_hif_suspend(struct ath10k *ar) static int ath10k_pci_hif_suspend(struct ath10k *ar)
{ {
struct ath10k_pci *ar_pci = ath10k_pci_priv(ar);
struct pci_dev *pdev = ar_pci->pdev;
u32 val;
ath10k_pci_sleep(ar); ath10k_pci_sleep(ar);
pci_read_config_dword(pdev, ATH10K_PCI_PM_CONTROL, &val);
if ((val & 0x000000ff) != 0x3) {
pci_save_state(pdev);
pci_disable_device(pdev);
pci_write_config_dword(pdev, ATH10K_PCI_PM_CONTROL,
(val & 0xffffff00) | 0x03);
}
return 0; return 0;
} }
...@@ -2088,22 +2073,14 @@ static int ath10k_pci_hif_resume(struct ath10k *ar) ...@@ -2088,22 +2073,14 @@ static int ath10k_pci_hif_resume(struct ath10k *ar)
return ret; return ret;
} }
pci_read_config_dword(pdev, ATH10K_PCI_PM_CONTROL, &val); /* Suspend/Resume resets the PCI configuration space, so we have to
* re-disable the RETRY_TIMEOUT register (0x41) to keep PCI Tx retries
if ((val & 0x000000ff) != 0) { * from interfering with C3 CPU state. pci_restore_state won't help
pci_restore_state(pdev); * here since it only restores the first 64 bytes pci config header.
pci_write_config_dword(pdev, ATH10K_PCI_PM_CONTROL, */
val & 0xffffff00); pci_read_config_dword(pdev, 0x40, &val);
/* if ((val & 0x0000ff00) != 0)
* Suspend/Resume resets the PCI configuration space, pci_write_config_dword(pdev, 0x40, val & 0xffff00ff);
* so we have to re-disable the RETRY_TIMEOUT register (0x41)
* to keep PCI Tx retries from interfering with C3 CPU state
*/
pci_read_config_dword(pdev, 0x40, &val);
if ((val & 0x0000ff00) != 0)
pci_write_config_dword(pdev, 0x40, val & 0xffff00ff);
}
return ret; return ret;
} }
......
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