void kgsl_pwrctrl_pwrlevel_change(struct kgsl_device *device, unsigned int new_level) { struct kgsl_pwrctrl *pwr = &device->pwrctrl; if (new_level < (pwr->num_pwrlevels - 1) && new_level >= pwr->thermal_pwrlevel && new_level != pwr->active_pwrlevel) { struct kgsl_pwrlevel *pwrlevel = &pwr->pwrlevels[new_level]; pwr->active_pwrlevel = new_level; if ((test_bit(KGSL_PWRFLAGS_CLK_ON, &pwr->power_flags)) || (device->state == KGSL_STATE_NAP)) { /* * On some platforms, instability is caused on * changing clock freq when the core is busy. * Idle the gpu core before changing the clock freq. */ if (pwr->idle_needed == true) device->ftbl->idle(device, KGSL_TIMEOUT_DEFAULT); clk_set_rate(pwr->grp_clks[0], pwrlevel->gpu_freq); } if (test_bit(KGSL_PWRFLAGS_AXI_ON, &pwr->power_flags)) { if (pwr->pcl) msm_bus_scale_client_update_request(pwr->pcl, pwrlevel->bus_freq); else if (pwr->ebi1_clk) clk_set_rate(pwr->ebi1_clk, pwrlevel->bus_freq); } trace_kgsl_pwrlevel(device, pwr->active_pwrlevel, pwrlevel->gpu_freq); } }
static void tz_sleep(struct kgsl_device *device, struct kgsl_pwrscale *pwrscale) { struct tz_priv *priv = pwrscale->priv; trace_kgsl_pwrlevel(device, 0, 0); __secure_tz_entry(TZ_RESET_ID, 0, device->id); priv->no_switch_cnt = 0; }
static void tz_wake(struct kgsl_device *device, struct kgsl_pwrscale *pwrscale) { struct tz_priv *priv = pwrscale->priv; if (device->state != KGSL_STATE_NAP && priv->governor == TZ_GOVERNOR_ONDEMAND) { trace_kgsl_pwrlevel(device, device->pwrctrl.default_pwrlevel, device->pwrctrl.pwrlevels[device->pwrctrl.default_pwrlevel].gpu_freq); kgsl_pwrctrl_pwrlevel_change(device, device->pwrctrl.default_pwrlevel); } }
void kgsl_pwrctrl_pwrlevel_change(struct kgsl_device *device, unsigned int new_level) { struct kgsl_pwrctrl *pwr = &device->pwrctrl; if (new_level < (pwr->num_pwrlevels - 1) && new_level >= pwr->thermal_pwrlevel && new_level != pwr->active_pwrlevel) { struct kgsl_pwrlevel *pwrlevel = &pwr->pwrlevels[new_level]; pwr->active_pwrlevel = new_level; if ((test_bit(KGSL_PWRFLAGS_CLK_ON, &pwr->power_flags)) || (device->state == KGSL_STATE_NAP)) clk_set_rate(pwr->grp_clks[0], pwrlevel->gpu_freq); if (test_bit(KGSL_PWRFLAGS_AXI_ON, &pwr->power_flags)) { if (pwr->pcl) msm_bus_scale_client_update_request(pwr->pcl, pwrlevel->bus_freq); else if (pwr->ebi1_clk) clk_set_rate(pwr->ebi1_clk, pwrlevel->bus_freq); } trace_kgsl_pwrlevel(device, pwr->active_pwrlevel, pwrlevel->gpu_freq); } }