qcacmn: Add delayed reg write support based on EP power state

Even though HP/TP updates are posted writes at CPU level, they
are getting blocked until soc comes out retention which is hogging
CPU.

To avoid this if EP is in low power state update HP/TP writes from
delayed work context. In delayed work vote for EP awake wait till it
comes out low power state and then proceed to HP/TP update.

Change-Id: I61d5795f58f25f850b5a9ad4d30e3181dba23713
CRs-Fixed: 2913495
This commit is contained in:
Karthik Kantamneni
2021-04-20 10:54:47 +05:30
committed by Madan Koyyalamudi
szülő 35b9bf6c44
commit ad0f442d8f
3 fájl változott, egészen pontosan 100 új sor hozzáadva és 0 régi sor törölve

Fájl megtekintése

@@ -1277,6 +1277,44 @@ void hal_delayed_reg_write(struct hal_soc *hal_soc,
#else
#ifdef FEATURE_HAL_DELAYED_REG_WRITE
#ifdef QCA_WIFI_QCA6750
void hal_delayed_reg_write(struct hal_soc *hal_soc,
struct hal_srng *srng,
void __iomem *addr,
uint32_t value)
{
switch (srng->ring_type) {
case CE_SRC:
case CE_DST:
case CE_DST_STATUS:
if (hif_get_ep_vote_access(hal_soc->hif_handle,
HIF_EP_VOTE_NONDP_ACCESS) ==
HIF_EP_VOTE_ACCESS_DISABLE) {
hal_write_address_32_mb(hal_soc, addr, value, false);
qdf_atomic_inc(&hal_soc->stats.wstats.direct);
srng->wstats.direct++;
} else {
hal_reg_write_enqueue(hal_soc, srng, addr, value);
}
break;
default:
if (hif_get_ep_vote_access(hal_soc->hif_handle,
HIF_EP_VOTE_DP_ACCESS) ==
HIF_EP_VOTE_ACCESS_DISABLE ||
hal_is_reg_write_tput_level_high(hal_soc) ||
PLD_MHI_STATE_L0 ==
pld_get_mhi_state(hal_soc->qdf_dev->dev)) {
hal_write_address_32_mb(hal_soc, addr, value, false);
qdf_atomic_inc(&hal_soc->stats.wstats.direct);
srng->wstats.direct++;
} else {
hal_reg_write_enqueue(hal_soc, srng, addr, value);
}
break;
}
}
#else
void hal_delayed_reg_write(struct hal_soc *hal_soc,
struct hal_srng *srng,
void __iomem *addr,
@@ -1293,6 +1331,7 @@ void hal_delayed_reg_write(struct hal_soc *hal_soc,
}
#endif
#endif
#endif
/**
* hal_attach - Initialize HAL layer