mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
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:
parent
15b2a5428b
commit
44f331a217
@ -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",
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user