summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu
diff options
context:
space:
mode:
authorSeshendra Gadagottu <sgadagottu@nvidia.com>2016-05-24 19:47:13 -0400
committerDeepak Nibade <dnibade@nvidia.com>2016-12-27 04:56:16 -0500
commitba949fd8af16283e9712541ed69eaffcc35ed38c (patch)
tree2fb3b22c47911ffa81968b25c6a9798556f7d9b7 /drivers/gpu/nvgpu
parent1e67de6e6ea930091bee381ff4a96ae0ca0c76d6 (diff)
gpu: nvgpu: gp10b: set floor emc freq to bwmgr
Set emc floor frequency as zero during rail-gate and set max emc frequency as floor frequency during rail-ungate. Bug 1770241 Change-Id: Ib6b6ea6c8b04518423126c3ca3600b4afac15180 Signed-off-by: Seshendra Gadagottu <sgadagottu@nvidia.com> Reviewed-on: http://git-master/r/1152848 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu')
-rw-r--r--drivers/gpu/nvgpu/gp10b/platform_gp10b_tegra.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/gp10b/platform_gp10b_tegra.c b/drivers/gpu/nvgpu/gp10b/platform_gp10b_tegra.c
index 68179685..d3ccd98e 100644
--- a/drivers/gpu/nvgpu/gp10b/platform_gp10b_tegra.c
+++ b/drivers/gpu/nvgpu/gp10b/platform_gp10b_tegra.c
@@ -220,6 +220,13 @@ static bool gp10b_tegra_is_railgated(struct device *dev)
220static int gp10b_tegra_railgate(struct device *dev) 220static int gp10b_tegra_railgate(struct device *dev)
221{ 221{
222 struct gk20a_platform *platform = gk20a_get_platform(dev); 222 struct gk20a_platform *platform = gk20a_get_platform(dev);
223 struct gk20a_scale_profile *profile = platform->g->scale_profile;
224
225 /* remove emc frequency floor */
226 if (profile)
227 tegra_bwmgr_set_emc(
228 (struct tegra_bwmgr_client *)profile->private_data,
229 0, TEGRA_BWMGR_SET_EMC_FLOOR);
223 230
224 if (tegra_bpmp_running() && 231 if (tegra_bpmp_running() &&
225 tegra_powergate_is_powered(TEGRA_POWERGATE_GPU)) { 232 tegra_powergate_is_powered(TEGRA_POWERGATE_GPU)) {
@@ -237,6 +244,7 @@ static int gp10b_tegra_unrailgate(struct device *dev)
237{ 244{
238 int ret = 0; 245 int ret = 0;
239 struct gk20a_platform *platform = gk20a_get_platform(dev); 246 struct gk20a_platform *platform = gk20a_get_platform(dev);
247 struct gk20a_scale_profile *profile = platform->g->scale_profile;
240 248
241 if (tegra_bpmp_running()) { 249 if (tegra_bpmp_running()) {
242 int i; 250 int i;
@@ -246,6 +254,13 @@ static int gp10b_tegra_unrailgate(struct device *dev)
246 clk_prepare_enable(platform->clk[i]); 254 clk_prepare_enable(platform->clk[i]);
247 } 255 }
248 } 256 }
257
258 /* to start with set emc frequency floor to max rate*/
259 if (profile)
260 tegra_bwmgr_set_emc(
261 (struct tegra_bwmgr_client *)profile->private_data,
262 tegra_bwmgr_get_max_emc_rate(),
263 TEGRA_BWMGR_SET_EMC_FLOOR);
249 return ret; 264 return ret;
250} 265}
251 266
@@ -407,7 +422,6 @@ struct gk20a_platform t18x_gpu_tegra_platform = {
407 /* frequency scaling configuration */ 422 /* frequency scaling configuration */
408 .prescale = gp10b_tegra_prescale, 423 .prescale = gp10b_tegra_prescale,
409 .postscale = gp10b_tegra_postscale, 424 .postscale = gp10b_tegra_postscale,
410
411 .devfreq_governor = "nvhost_podgov", 425 .devfreq_governor = "nvhost_podgov",
412 .qos_id = PM_QOS_GPU_FREQ_MIN, 426 .qos_id = PM_QOS_GPU_FREQ_MIN,
413 427