Loading drivers/gpu/msm/adreno.c +1 −1 Original line number Diff line number Diff line Loading @@ -2053,7 +2053,7 @@ static int adreno_setproperty(struct kgsl_device_private *dev_priv, KGSL_STATE_ACTIVE); device->pwrctrl.ctrl_flags = KGSL_PWR_ON; adreno_fault_detect_stop(adreno_dev); kgsl_pwrscale_disable(device); kgsl_pwrscale_disable(device, true); } mutex_unlock(&device->mutex); Loading drivers/gpu/msm/kgsl_pwrctrl.c +45 −0 Original line number Diff line number Diff line Loading @@ -1181,6 +1181,47 @@ static ssize_t kgsl_popp_show(struct device *dev, test_bit(POPP_ON, &device->pwrscale.popp_state)); } static ssize_t kgsl_pwrctrl_pwrscale_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct kgsl_device *device = kgsl_device_from_dev(dev); int ret; unsigned int enable = 0; if (device == NULL) return 0; ret = kgsl_sysfs_store(buf, &enable); if (ret) return ret; mutex_lock(&device->mutex); if (enable) kgsl_pwrscale_enable(device); else kgsl_pwrscale_disable(device, false); mutex_unlock(&device->mutex); return count; } static ssize_t kgsl_pwrctrl_pwrscale_show(struct device *dev, struct device_attribute *attr, char *buf) { struct kgsl_device *device = kgsl_device_from_dev(dev); struct kgsl_pwrscale *psc; if (device == NULL) return 0; psc = &device->pwrscale; return snprintf(buf, PAGE_SIZE, "%u\n", psc->enabled); } static DEVICE_ATTR(gpuclk, 0644, kgsl_pwrctrl_gpuclk_show, kgsl_pwrctrl_gpuclk_store); static DEVICE_ATTR(max_gpuclk, 0644, kgsl_pwrctrl_max_gpuclk_show, Loading Loading @@ -1234,6 +1275,9 @@ static DEVICE_ATTR(popp, 0644, kgsl_popp_show, kgsl_popp_store); static DEVICE_ATTR(force_non_retention_on, 0644, kgsl_pwrctrl_force_non_retention_on_show, kgsl_pwrctrl_force_non_retention_on_store); static DEVICE_ATTR(pwrscale, 0644, kgsl_pwrctrl_pwrscale_show, kgsl_pwrctrl_pwrscale_store); static const struct device_attribute *pwrctrl_attr_list[] = { &dev_attr_gpuclk, Loading @@ -1256,6 +1300,7 @@ static const struct device_attribute *pwrctrl_attr_list[] = { &dev_attr_bus_split, &dev_attr_default_pwrlevel, &dev_attr_popp, &dev_attr_pwrscale, NULL }; Loading drivers/gpu/msm/kgsl_pwrscale.c +4 −2 Original line number Diff line number Diff line Loading @@ -189,18 +189,20 @@ EXPORT_SYMBOL(kgsl_pwrscale_update); /* * kgsl_pwrscale_disable - temporarily disable the governor * @device: The device * @turbo: Indicates if pwrlevel should be forced to turbo * * Temporarily disable the governor, to prevent interference * with profiling tools that expect a fixed clock frequency. * This function must be called with the device mutex locked. */ void kgsl_pwrscale_disable(struct kgsl_device *device) void kgsl_pwrscale_disable(struct kgsl_device *device, bool turbo) { BUG_ON(!mutex_is_locked(&device->mutex)); if (device->pwrscale.devfreqptr) queue_work(device->pwrscale.devfreq_wq, &device->pwrscale.devfreq_suspend_ws); device->pwrscale.enabled = false; if (turbo) kgsl_pwrctrl_pwrlevel_change(device, KGSL_PWRLEVEL_TURBO); } EXPORT_SYMBOL(kgsl_pwrscale_disable); Loading drivers/gpu/msm/kgsl_pwrscale.h +2 −2 Original line number Diff line number Diff line /* Copyright (c) 2010-2015, The Linux Foundation. All rights reserved. /* Copyright (c) 2010-2016, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -123,7 +123,7 @@ void kgsl_pwrscale_sleep(struct kgsl_device *device); void kgsl_pwrscale_wake(struct kgsl_device *device); void kgsl_pwrscale_enable(struct kgsl_device *device); void kgsl_pwrscale_disable(struct kgsl_device *device); void kgsl_pwrscale_disable(struct kgsl_device *device, bool turbo); int kgsl_devfreq_target(struct device *dev, unsigned long *freq, u32 flags); int kgsl_devfreq_get_dev_status(struct device *, struct devfreq_dev_status *); Loading Loading
drivers/gpu/msm/adreno.c +1 −1 Original line number Diff line number Diff line Loading @@ -2053,7 +2053,7 @@ static int adreno_setproperty(struct kgsl_device_private *dev_priv, KGSL_STATE_ACTIVE); device->pwrctrl.ctrl_flags = KGSL_PWR_ON; adreno_fault_detect_stop(adreno_dev); kgsl_pwrscale_disable(device); kgsl_pwrscale_disable(device, true); } mutex_unlock(&device->mutex); Loading
drivers/gpu/msm/kgsl_pwrctrl.c +45 −0 Original line number Diff line number Diff line Loading @@ -1181,6 +1181,47 @@ static ssize_t kgsl_popp_show(struct device *dev, test_bit(POPP_ON, &device->pwrscale.popp_state)); } static ssize_t kgsl_pwrctrl_pwrscale_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct kgsl_device *device = kgsl_device_from_dev(dev); int ret; unsigned int enable = 0; if (device == NULL) return 0; ret = kgsl_sysfs_store(buf, &enable); if (ret) return ret; mutex_lock(&device->mutex); if (enable) kgsl_pwrscale_enable(device); else kgsl_pwrscale_disable(device, false); mutex_unlock(&device->mutex); return count; } static ssize_t kgsl_pwrctrl_pwrscale_show(struct device *dev, struct device_attribute *attr, char *buf) { struct kgsl_device *device = kgsl_device_from_dev(dev); struct kgsl_pwrscale *psc; if (device == NULL) return 0; psc = &device->pwrscale; return snprintf(buf, PAGE_SIZE, "%u\n", psc->enabled); } static DEVICE_ATTR(gpuclk, 0644, kgsl_pwrctrl_gpuclk_show, kgsl_pwrctrl_gpuclk_store); static DEVICE_ATTR(max_gpuclk, 0644, kgsl_pwrctrl_max_gpuclk_show, Loading Loading @@ -1234,6 +1275,9 @@ static DEVICE_ATTR(popp, 0644, kgsl_popp_show, kgsl_popp_store); static DEVICE_ATTR(force_non_retention_on, 0644, kgsl_pwrctrl_force_non_retention_on_show, kgsl_pwrctrl_force_non_retention_on_store); static DEVICE_ATTR(pwrscale, 0644, kgsl_pwrctrl_pwrscale_show, kgsl_pwrctrl_pwrscale_store); static const struct device_attribute *pwrctrl_attr_list[] = { &dev_attr_gpuclk, Loading @@ -1256,6 +1300,7 @@ static const struct device_attribute *pwrctrl_attr_list[] = { &dev_attr_bus_split, &dev_attr_default_pwrlevel, &dev_attr_popp, &dev_attr_pwrscale, NULL }; Loading
drivers/gpu/msm/kgsl_pwrscale.c +4 −2 Original line number Diff line number Diff line Loading @@ -189,18 +189,20 @@ EXPORT_SYMBOL(kgsl_pwrscale_update); /* * kgsl_pwrscale_disable - temporarily disable the governor * @device: The device * @turbo: Indicates if pwrlevel should be forced to turbo * * Temporarily disable the governor, to prevent interference * with profiling tools that expect a fixed clock frequency. * This function must be called with the device mutex locked. */ void kgsl_pwrscale_disable(struct kgsl_device *device) void kgsl_pwrscale_disable(struct kgsl_device *device, bool turbo) { BUG_ON(!mutex_is_locked(&device->mutex)); if (device->pwrscale.devfreqptr) queue_work(device->pwrscale.devfreq_wq, &device->pwrscale.devfreq_suspend_ws); device->pwrscale.enabled = false; if (turbo) kgsl_pwrctrl_pwrlevel_change(device, KGSL_PWRLEVEL_TURBO); } EXPORT_SYMBOL(kgsl_pwrscale_disable); Loading
drivers/gpu/msm/kgsl_pwrscale.h +2 −2 Original line number Diff line number Diff line /* Copyright (c) 2010-2015, The Linux Foundation. All rights reserved. /* Copyright (c) 2010-2016, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -123,7 +123,7 @@ void kgsl_pwrscale_sleep(struct kgsl_device *device); void kgsl_pwrscale_wake(struct kgsl_device *device); void kgsl_pwrscale_enable(struct kgsl_device *device); void kgsl_pwrscale_disable(struct kgsl_device *device); void kgsl_pwrscale_disable(struct kgsl_device *device, bool turbo); int kgsl_devfreq_target(struct device *dev, unsigned long *freq, u32 flags); int kgsl_devfreq_get_dev_status(struct device *, struct devfreq_dev_status *); Loading