msm: kgsl: Redo adreno governor tz init after hibernation

Re-initialize adreno freq table to TZ when resuming from
hibernation, since TZ is not aware of hibernation.

Change-Id: Ia01be44521b9f79c5595510e9a777102ce223e25
Signed-off-by: Thomas (Wonyoung) Yun <wyun@codeaurora.org>
This commit is contained in:
Thomas (Wonyoung) Yun 2019-04-03 17:57:56 -04:00
parent 15b2a5428b
commit 44f331a217
3 changed files with 47 additions and 0 deletions

View File

@ -519,6 +519,37 @@ static int tz_handler(struct devfreq *devfreq, unsigned int event, void *data)
return result;
}
int msm_adreno_devfreq_init_tz(struct devfreq *devfreq)
{
struct devfreq_msm_adreno_tz_data *priv;
unsigned int tz_pwrlevels[MSM_ADRENO_MAX_PWRLEVELS + 1];
int i, out = 1, ret;
unsigned int version;
if (!devfreq)
return -EINVAL;
priv = devfreq->data;
if (devfreq->profile->max_state < MSM_ADRENO_MAX_PWRLEVELS) {
for (i = 0; i < devfreq->profile->max_state; i++)
tz_pwrlevels[out++] = devfreq->profile->freq_table[i];
tz_pwrlevels[0] = i;
} else {
pr_err(TAG "tz_pwrlevels[] is too short\n");
return -EINVAL;
}
ret = tz_init(priv, tz_pwrlevels, sizeof(tz_pwrlevels), &version,
sizeof(version));
if (ret != 0 || version > MAX_TZ_VERSION) {
pr_err(TAG "tz_init failed\n");
return ret ? ret : -EINVAL;
}
return 0;
}
EXPORT_SYMBOL(msm_adreno_devfreq_init_tz);
static struct devfreq_governor msm_adreno_tz = {
.name = "msm-adreno-tz",

View File

@ -4083,6 +4083,13 @@ static int adreno_resume_device(struct kgsl_device *device,
&device->gmu_core.flags);
}
}
if (device->pwrscale.devfreqptr) {
ret = msm_adreno_devfreq_init_tz(
device->pwrscale.devfreqptr);
if (ret)
return ret;
}
}
if (device->state == KGSL_STATE_SUSPEND)

View File

@ -79,4 +79,13 @@ int devfreq_vbif_update_bw(unsigned long ib, unsigned long ab);
int devfreq_vbif_register_callback(void *callback);
#endif
#ifdef CONFIG_DEVFREQ_GOV_QCOM_ADRENO_TZ
int msm_adreno_devfreq_init_tz(struct devfreq *devfreq);
#else
static inline int msm_adreno_devfreq_init_tz(struct devfreq *devfreq)
{
return 0;
}
#endif
#endif