Commit 8cc8df90 authored by Bartosz Markowski's avatar Bartosz Markowski Committed by Kalle Valo

ath10k: add SoC power save option to PCI features map

Unify the PCI options location.

By default the SoC PS option is disabled to boost the
performance and due to poor stability on early HW revisions.
In future we can remove the module parameter and turn on/off
the PS for given hardware.

This change also makes the pci module parameter for SoC PS static.
Signed-off-by: default avatarBartosz Markowski <bartosz.markowski@tieto.com>
Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
parent 32270b61
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
#include "ce.h" #include "ce.h"
#include "pci.h" #include "pci.h"
unsigned int ath10k_target_ps; static unsigned int ath10k_target_ps;
module_param(ath10k_target_ps, uint, 0644); module_param(ath10k_target_ps, uint, 0644);
MODULE_PARM_DESC(ath10k_target_ps, "Enable ath10k Target (SoC) PS option"); MODULE_PARM_DESC(ath10k_target_ps, "Enable ath10k Target (SoC) PS option");
...@@ -1759,6 +1759,7 @@ static void ath10k_pci_fw_interrupt_handler(struct ath10k *ar) ...@@ -1759,6 +1759,7 @@ static void ath10k_pci_fw_interrupt_handler(struct ath10k *ar)
static int ath10k_pci_hif_power_up(struct ath10k *ar) static int ath10k_pci_hif_power_up(struct ath10k *ar)
{ {
struct ath10k_pci *ar_pci = ath10k_pci_priv(ar);
int ret; int ret;
ret = ath10k_pci_start_intr(ar); ret = ath10k_pci_start_intr(ar);
...@@ -1783,13 +1784,9 @@ static int ath10k_pci_hif_power_up(struct ath10k *ar) ...@@ -1783,13 +1784,9 @@ static int ath10k_pci_hif_power_up(struct ath10k *ar)
if (ret) if (ret)
goto err_irq; goto err_irq;
if (ath10k_target_ps) { if (!test_bit(ATH10K_PCI_FEATURE_SOC_POWER_SAVE, ar_pci->features))
ath10k_dbg(ATH10K_DBG_PCI, "on-chip power save enabled\n");
} else {
/* Force AWAKE forever */ /* Force AWAKE forever */
ath10k_dbg(ATH10K_DBG_PCI, "on-chip power save disabled\n");
ath10k_do_pci_wake(ar); ath10k_do_pci_wake(ar);
}
ret = ath10k_pci_ce_init(ar); ret = ath10k_pci_ce_init(ar);
if (ret) if (ret)
...@@ -1810,7 +1807,7 @@ static int ath10k_pci_hif_power_up(struct ath10k *ar) ...@@ -1810,7 +1807,7 @@ 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_ps: err_ps:
if (!ath10k_target_ps) if (!test_bit(ATH10K_PCI_FEATURE_SOC_POWER_SAVE, ar_pci->features))
ath10k_do_pci_sleep(ar); ath10k_do_pci_sleep(ar);
err_irq: err_irq:
ath10k_pci_stop_intr(ar); ath10k_pci_stop_intr(ar);
...@@ -1820,9 +1817,12 @@ static int ath10k_pci_hif_power_up(struct ath10k *ar) ...@@ -1820,9 +1817,12 @@ static int ath10k_pci_hif_power_up(struct ath10k *ar)
static void ath10k_pci_hif_power_down(struct ath10k *ar) static void ath10k_pci_hif_power_down(struct ath10k *ar)
{ {
struct ath10k_pci *ar_pci = ath10k_pci_priv(ar);
ath10k_pci_stop_intr(ar); ath10k_pci_stop_intr(ar);
ath10k_pci_ce_deinit(ar); ath10k_pci_ce_deinit(ar);
if (!ath10k_target_ps) if (!test_bit(ATH10K_PCI_FEATURE_SOC_POWER_SAVE, ar_pci->features))
ath10k_do_pci_sleep(ar); ath10k_do_pci_sleep(ar);
} }
...@@ -2272,6 +2272,9 @@ static void ath10k_pci_dump_features(struct ath10k_pci *ar_pci) ...@@ -2272,6 +2272,9 @@ static void ath10k_pci_dump_features(struct ath10k_pci *ar_pci)
case ATH10K_PCI_FEATURE_HW_1_0_WORKAROUND: case ATH10K_PCI_FEATURE_HW_1_0_WORKAROUND:
ath10k_dbg(ATH10K_DBG_PCI, "QCA988X_1.0 workaround enabled\n"); ath10k_dbg(ATH10K_DBG_PCI, "QCA988X_1.0 workaround enabled\n");
break; break;
case ATH10K_PCI_FEATURE_SOC_POWER_SAVE:
ath10k_dbg(ATH10K_DBG_PCI, "QCA98XX SoC power save enabled\n");
break;
} }
} }
} }
...@@ -2307,6 +2310,9 @@ static int ath10k_pci_probe(struct pci_dev *pdev, ...@@ -2307,6 +2310,9 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
goto err_ar_pci; goto err_ar_pci;
} }
if (ath10k_target_ps)
set_bit(ATH10K_PCI_FEATURE_SOC_POWER_SAVE, ar_pci->features);
ath10k_pci_dump_features(ar_pci); ath10k_pci_dump_features(ar_pci);
ar = ath10k_core_create(ar_pci, ar_pci->dev, &ath10k_pci_hif_ops); ar = ath10k_core_create(ar_pci, ar_pci->dev, &ath10k_pci_hif_ops);
......
...@@ -153,6 +153,7 @@ struct service_to_pipe { ...@@ -153,6 +153,7 @@ struct service_to_pipe {
enum ath10k_pci_features { enum ath10k_pci_features {
ATH10K_PCI_FEATURE_MSI_X = 0, ATH10K_PCI_FEATURE_MSI_X = 0,
ATH10K_PCI_FEATURE_HW_1_0_WORKAROUND = 1, ATH10K_PCI_FEATURE_HW_1_0_WORKAROUND = 1,
ATH10K_PCI_FEATURE_SOC_POWER_SAVE = 2,
/* keep last */ /* keep last */
ATH10K_PCI_FEATURE_COUNT ATH10K_PCI_FEATURE_COUNT
...@@ -335,20 +336,22 @@ static inline u32 ath10k_pci_read32(struct ath10k *ar, u32 offset) ...@@ -335,20 +336,22 @@ static inline u32 ath10k_pci_read32(struct ath10k *ar, u32 offset)
return ioread32(ar_pci->mem + offset); return ioread32(ar_pci->mem + offset);
} }
extern unsigned int ath10k_target_ps;
void ath10k_do_pci_wake(struct ath10k *ar); void ath10k_do_pci_wake(struct ath10k *ar);
void ath10k_do_pci_sleep(struct ath10k *ar); void ath10k_do_pci_sleep(struct ath10k *ar);
static inline void ath10k_pci_wake(struct ath10k *ar) static inline void ath10k_pci_wake(struct ath10k *ar)
{ {
if (ath10k_target_ps) struct ath10k_pci *ar_pci = ath10k_pci_priv(ar);
if (test_bit(ATH10K_PCI_FEATURE_SOC_POWER_SAVE, ar_pci->features))
ath10k_do_pci_wake(ar); ath10k_do_pci_wake(ar);
} }
static inline void ath10k_pci_sleep(struct ath10k *ar) static inline void ath10k_pci_sleep(struct ath10k *ar)
{ {
if (ath10k_target_ps) struct ath10k_pci *ar_pci = ath10k_pci_priv(ar);
if (test_bit(ATH10K_PCI_FEATURE_SOC_POWER_SAVE, ar_pci->features))
ath10k_do_pci_sleep(ar); ath10k_do_pci_sleep(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