interconnect: qcom: icc-rpmh: Vote initial floor in sleep set

Currently the initial floor is only voted in AMC/WAKE, which means the
floor is removed when entering the sleep set. However, some use cases
require bus BW even when the CPU is idle. If all clients haven't voted
yet, then assume we need to keep these votes around permanently.

Change-Id: I2277e62e0a4e1ea949f1c7fbad052e76cf451c68
Signed-off-by: Mike Tipton <mdtipton@codeaurora.org>
This commit is contained in:
Mike Tipton 2021-07-09 12:54:49 -07:00 committed by Mike Tipton
parent bba0dddd2a
commit b3588ad7e0

View File

@ -98,11 +98,20 @@ static void bcm_aggregate(struct qcom_icc_bcm *bcm, bool init)
}
if (bcm->keepalive) {
/*
* Keepalive should normally only be enforced for AMC/WAKE so
* that BCMs are only kept alive when HLOS is active. But early
* during init all clients haven't had a chance to vot yet, and
* some have use cases that persist when HLOS is asleep. So
* during init vote to all sets, including SLEEP.
*/
if (init) {
bcm->vote_x[QCOM_ICC_BUCKET_AMC] = 16000;
bcm->vote_x[QCOM_ICC_BUCKET_WAKE] = 16000;
bcm->vote_x[QCOM_ICC_BUCKET_SLEEP] = 16000;
bcm->vote_y[QCOM_ICC_BUCKET_AMC] = 16000;
bcm->vote_y[QCOM_ICC_BUCKET_WAKE] = 16000;
bcm->vote_y[QCOM_ICC_BUCKET_SLEEP] = 16000;
} else if (bcm->vote_x[QCOM_ICC_BUCKET_AMC] == 0 &&
bcm->vote_y[QCOM_ICC_BUCKET_AMC] == 0) {
bcm->vote_x[QCOM_ICC_BUCKET_AMC] = 1;