qcacmn: pointerize hif power_management apis
Bus power management requirements are different for different busses. Add them to the bus opps table. Change-Id: Ia5a2500dc2f1db3be2ddbbaea6a5969420ec0c51 CRs-Fixed: 978810 978802
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

parent
febbf6b9ec
commit
b4149dda4f
@@ -94,3 +94,20 @@ int hif_dummy_target_sleep_state_adjust(struct hif_softc *scn,
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* hif_dummy_enable_power_management - dummy call
|
||||
* hif_ctx: hif context
|
||||
* is_packet_log_enabled: true if packet log is enabled
|
||||
*/
|
||||
void hif_dummy_enable_power_management(struct hif_softc *hif_ctx,
|
||||
bool is_packet_log_enabled)
|
||||
{}
|
||||
|
||||
/**
|
||||
* hif_dummy_disable_power_management - dummy call
|
||||
* hif_ctx: hif context
|
||||
* is_packet_log_enabled: true if packet log is enabled
|
||||
*/
|
||||
void hif_dummy_disable_power_management(struct hif_softc *hif_ctx)
|
||||
{}
|
||||
|
@@ -32,4 +32,6 @@ int hif_dummy_bus_suspend(struct hif_softc *hif_ctx);
|
||||
int hif_dummy_bus_resume(struct hif_softc *hif_ctx);
|
||||
int hif_dummy_target_sleep_state_adjust(struct hif_softc *scn,
|
||||
bool sleep_ok, bool wait_for_it);
|
||||
|
||||
void hif_dummy_enable_power_management(struct hif_softc *hif_ctx,
|
||||
bool is_packet_log_enabled);
|
||||
void hif_dummy_disable_power_management(struct hif_softc *hif_ctx);
|
||||
|
@@ -220,3 +220,35 @@ int hif_dump_registers(struct hif_opaque_softc *hif_hdl)
|
||||
struct hif_softc *hif_sc = HIF_GET_SOFTC(hif_hdl);
|
||||
return hif_sc->bus_ops.hif_dump_registers(hif_sc);
|
||||
}
|
||||
|
||||
/**
|
||||
* hif_enable_power_management() - enable power management after driver load
|
||||
* @hif_hdl: opaque pointer to the hif context
|
||||
* is_packet_log_enabled: true if packet log is enabled
|
||||
*
|
||||
* Driver load and firmware download are done in a high performance mode.
|
||||
* Enable power management after the driver is loaded.
|
||||
* packet log can require fewer power management features to be enabled.
|
||||
*/
|
||||
void hif_enable_power_management(struct hif_opaque_softc *hif_hdl,
|
||||
bool is_packet_log_enabled)
|
||||
{
|
||||
struct hif_softc *hif_sc = HIF_GET_SOFTC(hif_hdl);
|
||||
hif_sc->bus_ops.hif_enable_power_management(hif_sc,
|
||||
is_packet_log_enabled);
|
||||
}
|
||||
|
||||
/**
|
||||
* hif_disable_power_management() - reset the bus power management
|
||||
* @hif_hdl: opaque pointer to the hif context
|
||||
*
|
||||
* return the power management of the bus to its default state.
|
||||
* This isn't necessarily a complete reversal of its counterpart.
|
||||
* This should be called when unloading the driver.
|
||||
*/
|
||||
void hif_disable_power_management(struct hif_opaque_softc *hif_hdl)
|
||||
{
|
||||
struct hif_softc *hif_sc = HIF_GET_SOFTC(hif_hdl);
|
||||
hif_sc->bus_ops.hif_disable_power_management(hif_sc);
|
||||
}
|
||||
|
||||
|
@@ -54,6 +54,10 @@ struct hif_bus_ops {
|
||||
void (*hif_irq_disable)(struct hif_softc *hif_sc, int ce_id);
|
||||
void (*hif_irq_enable)(struct hif_softc *hif_sc, int ce_id);
|
||||
int (*hif_dump_registers)(struct hif_softc *hif_sc);
|
||||
|
||||
void (*hif_enable_power_management)(struct hif_softc *hif_ctx,
|
||||
bool is_packet_log_enabled);
|
||||
void (*hif_disable_power_management)(struct hif_softc *hif_ctx);
|
||||
};
|
||||
|
||||
#ifdef HIF_SNOC
|
||||
|
@@ -67,6 +67,11 @@ QDF_STATUS hif_initialize_pci_ops(struct hif_softc *hif_sc)
|
||||
bus_ops->hif_irq_disable = &hif_pci_irq_disable;
|
||||
bus_ops->hif_irq_enable = &hif_pci_irq_enable;
|
||||
bus_ops->hif_dump_registers = &hif_pci_dump_registers;
|
||||
bus_ops->hif_enable_power_management =
|
||||
&hif_pci_enable_power_management;
|
||||
bus_ops->hif_disable_power_management =
|
||||
&hif_pci_disable_power_management;
|
||||
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
@@ -57,6 +57,10 @@ QDF_STATUS hif_initialize_snoc_ops(struct hif_bus_ops *bus_ops)
|
||||
bus_ops->hif_irq_disable = &hif_snoc_irq_disable;
|
||||
bus_ops->hif_irq_enable = &hif_snoc_irq_enable;
|
||||
bus_ops->hif_dump_registers = &hif_snoc_dump_registers;
|
||||
bus_ops->hif_enable_power_management =
|
||||
&hif_dummy_enable_power_management;
|
||||
bus_ops->hif_disable_power_management =
|
||||
&hif_dummy_disable_power_management;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
@@ -46,3 +46,6 @@ int hif_pci_bus_configure(struct hif_softc *scn);
|
||||
void hif_pci_irq_disable(struct hif_softc *scn, int ce_id);
|
||||
void hif_pci_irq_enable(struct hif_softc *scn, int ce_id);
|
||||
int hif_pci_dump_registers(struct hif_softc *scn);
|
||||
void hif_pci_enable_power_management(struct hif_softc *hif_ctx,
|
||||
bool is_packet_log_enabled);
|
||||
void hif_pci_disable_power_management(struct hif_softc *hif_ctx);
|
||||
|
@@ -1178,12 +1178,9 @@ static void hif_disable_power_gating(struct hif_opaque_softc *hif_ctx)
|
||||
*
|
||||
* enables pcie L1 power states
|
||||
*/
|
||||
static void hif_enable_power_gating(struct hif_opaque_softc *hif_ctx)
|
||||
static void hif_enable_power_gating(struct hif_pci_softc *sc)
|
||||
{
|
||||
struct hif_softc *scn = HIF_GET_SOFTC(hif_ctx);
|
||||
struct hif_pci_softc *sc = HIF_GET_PCI_SOFTC(hif_ctx);
|
||||
|
||||
if (NULL == scn) {
|
||||
if (NULL == sc) {
|
||||
HIF_ERROR("%s: Could not disable ASPM scn is null",
|
||||
__func__);
|
||||
return;
|
||||
@@ -1202,11 +1199,10 @@ static void hif_enable_power_gating(struct hif_opaque_softc *hif_ctx)
|
||||
* the soc sleep after the driver finishes loading and re-enabling
|
||||
* aspm (hif_enable_power_gating).
|
||||
*/
|
||||
void hif_enable_power_management(struct hif_opaque_softc *hif_ctx,
|
||||
void hif_pci_enable_power_management(struct hif_softc *hif_sc,
|
||||
bool is_packet_log_enabled)
|
||||
{
|
||||
struct hif_pci_softc *pci_ctx = HIF_GET_PCI_SOFTC(hif_ctx);
|
||||
struct hif_softc *hif_sc = HIF_GET_SOFTC(hif_ctx);
|
||||
struct hif_pci_softc *pci_ctx = HIF_GET_PCI_SOFTC(hif_sc);
|
||||
|
||||
if (pci_ctx == NULL) {
|
||||
HIF_ERROR("%s, hif_ctx null", __func__);
|
||||
@@ -1216,7 +1212,7 @@ void hif_enable_power_management(struct hif_opaque_softc *hif_ctx,
|
||||
hif_pm_runtime_start(pci_ctx);
|
||||
|
||||
if (!is_packet_log_enabled)
|
||||
hif_enable_power_gating(hif_ctx);
|
||||
hif_enable_power_gating(pci_ctx);
|
||||
|
||||
if (!CONFIG_ATH_PCIE_MAX_PERF &&
|
||||
CONFIG_ATH_PCIE_AWAKE_WHILE_DRIVER_LOAD) {
|
||||
@@ -1234,7 +1230,7 @@ void hif_enable_power_management(struct hif_opaque_softc *hif_ctx,
|
||||
* if runtime pm is not started. Should be updated to take care
|
||||
* of aspm and soc sleep for driver load.
|
||||
*/
|
||||
void hif_disable_power_management(struct hif_opaque_softc *hif_ctx)
|
||||
void hif_pci_disable_power_management(struct hif_softc *hif_ctx)
|
||||
{
|
||||
struct hif_pci_softc *pci_ctx = HIF_GET_PCI_SOFTC(hif_ctx);
|
||||
|
||||
|
Reference in New Issue
Block a user