Loading drivers/gpu/msm/kgsl_pwrctrl.c +8 −1 Original line number Diff line number Diff line Loading @@ -1096,6 +1096,7 @@ int kgsl_pwrctrl_init(struct kgsl_device *device) pwr->active_pwrlevel = pdata->init_level; pwr->default_pwrlevel = pdata->init_level; pwr->init_pwrlevel = pdata->init_level; pwr->wakeup_maxpwrlevel = 0; for (i = 0; i < pdata->num_levels; i++) { pwr->pwrlevels[i].gpu_freq = (pdata->pwrlevel[i].gpu_freq > 0) ? Loading Loading @@ -1555,9 +1556,15 @@ EXPORT_SYMBOL(kgsl_pwrctrl_wake); void kgsl_pwrctrl_enable(struct kgsl_device *device) { struct kgsl_pwrctrl *pwr = &device->pwrctrl; int level; /* Order pwrrail/clk sequence based upon platform */ kgsl_pwrctrl_pwrrail(device, KGSL_PWRFLAGS_ON); kgsl_pwrctrl_pwrlevel_change(device, pwr->active_pwrlevel); if (pwr->wakeup_maxpwrlevel) { level = pwr->max_pwrlevel; pwr->wakeup_maxpwrlevel = 0; } else level = pwr->default_pwrlevel; kgsl_pwrctrl_pwrlevel_change(device, level); kgsl_pwrctrl_clk(device, KGSL_PWRFLAGS_ON, KGSL_STATE_ACTIVE); kgsl_pwrctrl_axi(device, KGSL_PWRFLAGS_ON); } Loading drivers/gpu/msm/kgsl_pwrctrl.h +1 −0 Original line number Diff line number Diff line Loading @@ -81,6 +81,7 @@ struct kgsl_pwrctrl { int thermal_pwrlevel; unsigned int default_pwrlevel; unsigned int init_pwrlevel; unsigned int wakeup_maxpwrlevel; unsigned int max_pwrlevel; unsigned int min_pwrlevel; unsigned int num_pwrlevels; Loading drivers/gpu/msm/kgsl_pwrscale.c +8 −0 Original line number Diff line number Diff line Loading @@ -196,6 +196,14 @@ int kgsl_devfreq_target(struct device *dev, unsigned long *freq, u32 flags) return 0; pwr = &device->pwrctrl; if (flags & DEVFREQ_FLAG_WAKEUP_MAXFREQ) { /* * The GPU is about to get suspended, * but it needs to be at the max power level when waking up */ pwr->wakeup_maxpwrlevel = 1; return 0; } mutex_lock(&device->mutex); cur_freq = kgsl_pwrctrl_active_freq(pwr); Loading Loading
drivers/gpu/msm/kgsl_pwrctrl.c +8 −1 Original line number Diff line number Diff line Loading @@ -1096,6 +1096,7 @@ int kgsl_pwrctrl_init(struct kgsl_device *device) pwr->active_pwrlevel = pdata->init_level; pwr->default_pwrlevel = pdata->init_level; pwr->init_pwrlevel = pdata->init_level; pwr->wakeup_maxpwrlevel = 0; for (i = 0; i < pdata->num_levels; i++) { pwr->pwrlevels[i].gpu_freq = (pdata->pwrlevel[i].gpu_freq > 0) ? Loading Loading @@ -1555,9 +1556,15 @@ EXPORT_SYMBOL(kgsl_pwrctrl_wake); void kgsl_pwrctrl_enable(struct kgsl_device *device) { struct kgsl_pwrctrl *pwr = &device->pwrctrl; int level; /* Order pwrrail/clk sequence based upon platform */ kgsl_pwrctrl_pwrrail(device, KGSL_PWRFLAGS_ON); kgsl_pwrctrl_pwrlevel_change(device, pwr->active_pwrlevel); if (pwr->wakeup_maxpwrlevel) { level = pwr->max_pwrlevel; pwr->wakeup_maxpwrlevel = 0; } else level = pwr->default_pwrlevel; kgsl_pwrctrl_pwrlevel_change(device, level); kgsl_pwrctrl_clk(device, KGSL_PWRFLAGS_ON, KGSL_STATE_ACTIVE); kgsl_pwrctrl_axi(device, KGSL_PWRFLAGS_ON); } Loading
drivers/gpu/msm/kgsl_pwrctrl.h +1 −0 Original line number Diff line number Diff line Loading @@ -81,6 +81,7 @@ struct kgsl_pwrctrl { int thermal_pwrlevel; unsigned int default_pwrlevel; unsigned int init_pwrlevel; unsigned int wakeup_maxpwrlevel; unsigned int max_pwrlevel; unsigned int min_pwrlevel; unsigned int num_pwrlevels; Loading
drivers/gpu/msm/kgsl_pwrscale.c +8 −0 Original line number Diff line number Diff line Loading @@ -196,6 +196,14 @@ int kgsl_devfreq_target(struct device *dev, unsigned long *freq, u32 flags) return 0; pwr = &device->pwrctrl; if (flags & DEVFREQ_FLAG_WAKEUP_MAXFREQ) { /* * The GPU is about to get suspended, * but it needs to be at the max power level when waking up */ pwr->wakeup_maxpwrlevel = 1; return 0; } mutex_lock(&device->mutex); cur_freq = kgsl_pwrctrl_active_freq(pwr); Loading