diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a.h | 1 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a_scale.c | 5 |
2 files changed, 5 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h index 49c2a348..02d3ffe0 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/gk20a.h | |||
@@ -950,6 +950,7 @@ struct gk20a { | |||
950 | struct devfreq *devfreq; | 950 | struct devfreq *devfreq; |
951 | 951 | ||
952 | struct gk20a_scale_profile *scale_profile; | 952 | struct gk20a_scale_profile *scale_profile; |
953 | unsigned long last_freq; | ||
953 | 954 | ||
954 | struct gk20a_ctxsw_trace *ctxsw_trace; | 955 | struct gk20a_ctxsw_trace *ctxsw_trace; |
955 | struct gk20a_fecs_trace *fecs_trace; | 956 | struct gk20a_fecs_trace *fecs_trace; |
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a_scale.c b/drivers/gpu/nvgpu/gk20a/gk20a_scale.c index e3b21c5a..dbc2f06c 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a_scale.c +++ b/drivers/gpu/nvgpu/gk20a/gk20a_scale.c | |||
@@ -182,7 +182,7 @@ static int gk20a_scale_target(struct device *dev, unsigned long *freq, | |||
182 | local_freq = max_freq; | 182 | local_freq = max_freq; |
183 | 183 | ||
184 | /* Check for duplicate request */ | 184 | /* Check for duplicate request */ |
185 | if (local_freq == g->devfreq->previous_freq) | 185 | if (local_freq == g->last_freq) |
186 | return 0; | 186 | return 0; |
187 | 187 | ||
188 | /* set the final frequency */ | 188 | /* set the final frequency */ |
@@ -195,6 +195,8 @@ static int gk20a_scale_target(struct device *dev, unsigned long *freq, | |||
195 | *freq = platform->clk_get_rate(dev); | 195 | *freq = platform->clk_get_rate(dev); |
196 | } | 196 | } |
197 | 197 | ||
198 | g->last_freq = *freq; | ||
199 | |||
198 | /* postscale will only scale emc (dram clock) if evaluating | 200 | /* postscale will only scale emc (dram clock) if evaluating |
199 | * gk20a_tegra_get_emc_rate() produces a new or different emc | 201 | * gk20a_tegra_get_emc_rate() produces a new or different emc |
200 | * target because the load or_and gpufreq has changed */ | 202 | * target because the load or_and gpufreq has changed */ |
@@ -259,6 +261,7 @@ void gk20a_scale_resume(struct device *dev) | |||
259 | if (!devfreq) | 261 | if (!devfreq) |
260 | return; | 262 | return; |
261 | 263 | ||
264 | g->last_freq = 0; | ||
262 | devfreq_resume_device(devfreq); | 265 | devfreq_resume_device(devfreq); |
263 | } | 266 | } |
264 | 267 | ||