From 0dffed743d3f58349e3426b356a91e3f8275bc0f Mon Sep 17 00:00:00 2001 From: Rohan Sethi Date: Thu, 15 Oct 2020 14:10:07 +0530 Subject: [PATCH] msm: kgsl: Store power_interval_timeout in msec Update to store power_interval_timeout in msec instead of jiffies, to make it consistent across the board irrespective of the HZ value. Change-Id: I157da71210268b5b436670452a4bd4ac6abbdcc7 Signed-off-by: Rohan Sethi --- drivers/gpu/msm/adreno.c | 8 +++----- drivers/gpu/msm/adreno_a6xx_gmu.c | 9 +++------ drivers/gpu/msm/adreno_a6xx_hwsched.c | 9 +++------ drivers/gpu/msm/adreno_a6xx_rgmu.c | 9 +++------ drivers/gpu/msm/adreno_dispatch.c | 3 +-- drivers/gpu/msm/adreno_hwsched.c | 3 +-- drivers/gpu/msm/kgsl_device.h | 12 ++++++++++++ drivers/gpu/msm/kgsl_pwrctrl.c | 19 +++++++------------ drivers/gpu/msm/kgsl_pwrctrl.h | 2 +- 9 files changed, 34 insertions(+), 40 deletions(-) diff --git a/drivers/gpu/msm/adreno.c b/drivers/gpu/msm/adreno.c index 99e527988c93..fea2d659d2ea 100644 --- a/drivers/gpu/msm/adreno.c +++ b/drivers/gpu/msm/adreno.c @@ -420,9 +420,8 @@ static void adreno_input_event(struct input_handle *handle, unsigned int type, */ device->flags |= KGSL_FLAG_WAKE_ON_TOUCH; + kgsl_start_idle_timer(device); - mod_timer(&device->idle_timer, - jiffies + device->pwrctrl.interval_timeout); } else if (device->state == KGSL_STATE_SLUMBER) { schedule_work(&adreno_dev->input_work); } @@ -1076,7 +1075,7 @@ static int adreno_of_get_power(struct adreno_device *adreno_dev, l3_pwrlevel_probe(device, pdev->dev.of_node); /* Default timeout is 80 ms across all targets */ - device->pwrctrl.interval_timeout = msecs_to_jiffies(80); + device->pwrctrl.interval_timeout = 80; device->pwrctrl.minbw_timeout = 10; @@ -1937,8 +1936,7 @@ static void adreno_pwrctrl_active_count_put(struct adreno_device *adreno_dev) kgsl_pwrscale_update(device); } - mod_timer(&device->idle_timer, - jiffies + device->pwrctrl.interval_timeout); + kgsl_start_idle_timer(device); } trace_kgsl_active_count(device, diff --git a/drivers/gpu/msm/adreno_a6xx_gmu.c b/drivers/gpu/msm/adreno_a6xx_gmu.c index 4ef85de67eac..b5b12543a674 100644 --- a/drivers/gpu/msm/adreno_a6xx_gmu.c +++ b/drivers/gpu/msm/adreno_a6xx_gmu.c @@ -2770,8 +2770,7 @@ static void a6xx_gmu_active_count_put(struct adreno_device *adreno_dev) if (atomic_dec_and_test(&device->active_cnt)) { kgsl_pwrscale_update_stats(device); kgsl_pwrscale_update(device); - mod_timer(&device->idle_timer, - jiffies + device->pwrctrl.interval_timeout); + kgsl_start_idle_timer(device); } trace_kgsl_active_count(device, @@ -2969,8 +2968,7 @@ static int a6xx_boot(struct adreno_device *adreno_dev) if (ret) return ret; - mod_timer(&device->idle_timer, jiffies + - device->pwrctrl.interval_timeout); + kgsl_start_idle_timer(device); kgsl_pwrscale_wake(device); @@ -3146,8 +3144,7 @@ static void gmu_idle_check(struct work_struct *work) a6xx_power_off(adreno_dev); } else { kgsl_pwrscale_update(device); - mod_timer(&device->idle_timer, - jiffies + device->pwrctrl.interval_timeout); + kgsl_start_idle_timer(device); } done: diff --git a/drivers/gpu/msm/adreno_a6xx_hwsched.c b/drivers/gpu/msm/adreno_a6xx_hwsched.c index 322cb5c376fc..39006d55f29a 100644 --- a/drivers/gpu/msm/adreno_a6xx_hwsched.c +++ b/drivers/gpu/msm/adreno_a6xx_hwsched.c @@ -298,8 +298,7 @@ static void a6xx_hwsched_active_count_put(struct adreno_device *adreno_dev) if (atomic_dec_and_test(&device->active_cnt)) { kgsl_pwrscale_update_stats(device); kgsl_pwrscale_update(device); - mod_timer(&device->idle_timer, - jiffies + device->pwrctrl.interval_timeout); + kgsl_start_idle_timer(device); } trace_kgsl_active_count(device, @@ -527,8 +526,7 @@ static int a6xx_hwsched_boot(struct adreno_device *adreno_dev) if (ret) return ret; - mod_timer(&device->idle_timer, jiffies + - device->pwrctrl.interval_timeout); + kgsl_start_idle_timer(device); kgsl_pwrscale_wake(device); @@ -666,8 +664,7 @@ static void hwsched_idle_check(struct work_struct *work) a6xx_hwsched_power_off(adreno_dev); } else { kgsl_pwrscale_update(device); - mod_timer(&device->idle_timer, - jiffies + device->pwrctrl.interval_timeout); + kgsl_start_idle_timer(device); } done: diff --git a/drivers/gpu/msm/adreno_a6xx_rgmu.c b/drivers/gpu/msm/adreno_a6xx_rgmu.c index d0a921febe3c..79e200f1467f 100644 --- a/drivers/gpu/msm/adreno_a6xx_rgmu.c +++ b/drivers/gpu/msm/adreno_a6xx_rgmu.c @@ -64,8 +64,7 @@ static void a6xx_rgmu_active_count_put(struct adreno_device *adreno_dev) if (atomic_dec_and_test(&device->active_cnt)) { kgsl_pwrscale_update_stats(device); kgsl_pwrscale_update(device); - mod_timer(&device->idle_timer, - jiffies + device->pwrctrl.interval_timeout); + kgsl_start_idle_timer(device); } trace_kgsl_active_count(device, @@ -856,8 +855,7 @@ static void rgmu_idle_check(struct work_struct *work) a6xx_power_off(adreno_dev); } else { kgsl_pwrscale_update(device); - mod_timer(&device->idle_timer, - jiffies + device->pwrctrl.interval_timeout); + kgsl_start_idle_timer(device); } done: @@ -891,8 +889,7 @@ static int a6xx_boot(struct adreno_device *adreno_dev) if (ret) return ret; - mod_timer(&device->idle_timer, jiffies + - device->pwrctrl.interval_timeout); + kgsl_start_idle_timer(device); kgsl_pwrscale_wake(device); diff --git a/drivers/gpu/msm/adreno_dispatch.c b/drivers/gpu/msm/adreno_dispatch.c index 31f7a2646755..440241a5d996 100644 --- a/drivers/gpu/msm/adreno_dispatch.c +++ b/drivers/gpu/msm/adreno_dispatch.c @@ -2454,8 +2454,7 @@ static void _dispatcher_update_timers(struct adreno_device *adreno_dev) /* Kick the idle timer */ mutex_lock(&device->mutex); kgsl_pwrscale_update(device); - mod_timer(&device->idle_timer, - jiffies + device->pwrctrl.interval_timeout); + kgsl_start_idle_timer(device); mutex_unlock(&device->mutex); /* Check to see if we need to update the command timer */ diff --git a/drivers/gpu/msm/adreno_hwsched.c b/drivers/gpu/msm/adreno_hwsched.c index 3cf94e2a5412..b8f5b07dee52 100644 --- a/drivers/gpu/msm/adreno_hwsched.c +++ b/drivers/gpu/msm/adreno_hwsched.c @@ -1307,8 +1307,7 @@ static void adreno_hwsched_work(struct kthread_work *work) } else { mutex_lock(&device->mutex); kgsl_pwrscale_update(device); - mod_timer(&device->idle_timer, - jiffies + device->pwrctrl.interval_timeout); + kgsl_start_idle_timer(device); mutex_unlock(&device->mutex); } diff --git a/drivers/gpu/msm/kgsl_device.h b/drivers/gpu/msm/kgsl_device.h index c639b5112977..53a4fd346ddc 100644 --- a/drivers/gpu/msm/kgsl_device.h +++ b/drivers/gpu/msm/kgsl_device.h @@ -602,6 +602,18 @@ static inline bool kgsl_state_is_nap_or_minbw(struct kgsl_device *device) return false; } +/** + * kgsl_start_idle_timer - Start the idle timer + * @device: A KGSL device handle + * + * Start the idle timer to expire in 'interval_timeout' milliseconds + */ +static inline void kgsl_start_idle_timer(struct kgsl_device *device) +{ + mod_timer(&device->idle_timer, + jiffies + msecs_to_jiffies(device->pwrctrl.interval_timeout)); +} + int kgsl_readtimestamp(struct kgsl_device *device, void *priv, enum kgsl_timestamp_type type, unsigned int *timestamp); diff --git a/drivers/gpu/msm/kgsl_pwrctrl.c b/drivers/gpu/msm/kgsl_pwrctrl.c index ee8ddcd04042..b6b25053ce38 100644 --- a/drivers/gpu/msm/kgsl_pwrctrl.c +++ b/drivers/gpu/msm/kgsl_pwrctrl.c @@ -273,14 +273,14 @@ void kgsl_pwrctrl_set_constraint(struct kgsl_device *device, pwrc_old->sub_type = pwrc->sub_type; pwrc_old->hint.pwrlevel.level = constraint; pwrc_old->owner_id = id; - pwrc_old->expires = jiffies + device->pwrctrl.interval_timeout; + pwrc_old->expires = jiffies + msecs_to_jiffies(device->pwrctrl.interval_timeout); kgsl_pwrctrl_pwrlevel_change(device, constraint); /* Trace the constraint being set by the driver */ trace_kgsl_constraint(device, pwrc_old->type, constraint, 1); } else if ((pwrc_old->type == pwrc->type) && (pwrc_old->hint.pwrlevel.level == constraint)) { pwrc_old->owner_id = id; - pwrc_old->expires = jiffies + device->pwrctrl.interval_timeout; + pwrc_old->expires = jiffies + msecs_to_jiffies(device->pwrctrl.interval_timeout); } } @@ -528,7 +528,7 @@ static ssize_t __timer_store(struct device *dev, struct device_attribute *attr, mutex_lock(&device->mutex); /* Let the timeout be requested in ms, but convert to jiffies. */ if (timer == KGSL_PWR_IDLE_TIMER) - device->pwrctrl.interval_timeout = msecs_to_jiffies(val); + device->pwrctrl.interval_timeout = val; mutex_unlock(&device->mutex); @@ -548,8 +548,7 @@ static ssize_t idle_timer_show(struct device *dev, struct kgsl_device *device = dev_get_drvdata(dev); /* Show the idle_timeout converted to msec */ - return scnprintf(buf, PAGE_SIZE, "%u\n", - jiffies_to_msecs(device->pwrctrl.interval_timeout)); + return scnprintf(buf, PAGE_SIZE, "%u\n", device->pwrctrl.interval_timeout); } static ssize_t minbw_timer_store(struct device *dev, @@ -1653,9 +1652,7 @@ done: kgsl_pwrctrl_request_state(device, KGSL_STATE_NONE); if (device->state == KGSL_STATE_ACTIVE) - mod_timer(&device->idle_timer, - jiffies + - device->pwrctrl.interval_timeout); + kgsl_start_idle_timer(device); } if (device->state != KGSL_STATE_MINBW) @@ -1851,8 +1848,7 @@ static int _wake(struct kgsl_device *device) kgsl_pwrctrl_pwrlevel_change_settings(device, 1); /* All settings for power level transitions are complete*/ pwr->previous_pwrlevel = pwr->active_pwrlevel; - mod_timer(&device->idle_timer, jiffies + - device->pwrctrl.interval_timeout); + kgsl_start_idle_timer(device); del_timer_sync(&device->pwrctrl.minbw_timer); break; case KGSL_STATE_AWARE: @@ -1860,8 +1856,7 @@ static int _wake(struct kgsl_device *device) /* Enable state before turning on irq */ kgsl_pwrctrl_set_state(device, KGSL_STATE_ACTIVE); kgsl_pwrctrl_irq(device, KGSL_PWRFLAGS_ON); - mod_timer(&device->idle_timer, jiffies + - device->pwrctrl.interval_timeout); + kgsl_start_idle_timer(device); del_timer_sync(&device->pwrctrl.minbw_timer); break; default: diff --git a/drivers/gpu/msm/kgsl_pwrctrl.h b/drivers/gpu/msm/kgsl_pwrctrl.h index 3489d79eeca6..82763ff0c63b 100644 --- a/drivers/gpu/msm/kgsl_pwrctrl.h +++ b/drivers/gpu/msm/kgsl_pwrctrl.h @@ -96,7 +96,7 @@ struct kgsl_pwrlevel { * @min_pwrlevel - minimum allowable powerlevel per the user * @num_pwrlevels - number of available power levels * @throttle_mask - LM throttle mask - * @interval_timeout - timeout in jiffies to be idle before a power event + * @interval_timeout - timeout to be idle before a power event * @clock_times - Each GPU frequency's accumulated active time in us * @clk_stats - structure of clock statistics * @input_disable - To disable GPU wakeup on touch input event