summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.h1
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a_scale.c5
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