interconnect: qcom: icc-rpmh: Add keepalive_early flag

Some BCMs only need to be kept alive early in the boot process. Add the
keepalive_early flag, which only prevents them from turning off before
the sync_state callback.

Change-Id: I0699fb0420d1d9f9473e28ede57380fd5b08ca53
Signed-off-by: Mike Tipton <mdtipton@codeaurora.org>
This commit is contained in:
Mike Tipton 2021-07-07 15:32:10 -07:00 committed by Mike Tipton
parent b3588ad7e0
commit d2d4f6d777
3 changed files with 6 additions and 2 deletions

View File

@ -97,7 +97,7 @@ static void bcm_aggregate(struct qcom_icc_bcm *bcm, bool init)
}
}
if (bcm->keepalive) {
if (bcm->keepalive || bcm->keepalive_early) {
/*
* Keepalive should normally only be enforced for AMC/WAKE so
* that BCMs are only kept alive when HLOS is active. But early

View File

@ -480,9 +480,11 @@ void qcom_icc_rpmh_sync_state(struct device *dev)
for (i = 0; i < qp->num_bcms; i++) {
bcm = qp->bcms[i];
if (!bcm->keepalive)
if (!bcm->keepalive && !bcm->keepalive_early)
continue;
bcm->keepalive_early = false;
voter = qp->voters[bcm->voter_idx];
qcom_icc_bcm_voter_add(voter, bcm);
qcom_icc_bcm_voter_commit(voter);

View File

@ -99,6 +99,7 @@ struct qcom_icc_node {
* @perf_mode_mask: mask to OR with enable_mask when QCOM_ICC_TAG_PERF_MODE is set
* @dirty: flag used to indicate whether the bcm needs to be committed
* @keepalive: flag used to indicate whether a keepalive is required
* @keepalive_early: keepalive only prior to sync-state
* @qos_proxy: flag used to indicate whether a proxy vote needed as part of
* qos configuration
* @aux_data: auxiliary data used when calculating threshold values and
@ -119,6 +120,7 @@ struct qcom_icc_bcm {
u32 perf_mode_mask;
bool dirty;
bool keepalive;
bool keepalive_early;
bool qos_proxy;
struct bcm_db aux_data;
struct list_head list;