summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorseshendra Gadagottu <sgadagottu@nvidia.com>2018-01-23 16:12:04 -0500
committermobile promotions <svcmobile_promotions@nvidia.com>2018-01-31 17:21:56 -0500
commit9afb084055e77622d1e3faa6099c340d00f94968 (patch)
treedc16c443755c00e6fead2c63a891452ab3d1fc04 /drivers
parent791ce6bd5480a8393c12be55e8afa459cb4dd1ff (diff)
gpu: nvgpu: enable devfreq after finalize poweron
Enabling gpu scaling driver after finalize poweron, will make gpu booting happen at initially set frequency(1GHz). Also doing platform specific init scale after enabling scaling driver. Bug 2049965 Bug 2039013 Bug 200377508 Change-Id: I633f8f5a25d9de18cbb3a022913b8b725ccd87e5 Signed-off-by: seshendra Gadagottu <sgadagottu@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1644703 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/nvgpu/common/linux/driver_common.c8
-rw-r--r--drivers/gpu/nvgpu/common/linux/module.c7
-rw-r--r--drivers/gpu/nvgpu/common/linux/platform_gk20a.h3
-rw-r--r--drivers/gpu/nvgpu/common/linux/platform_gk20a_tegra.c9
-rw-r--r--drivers/gpu/nvgpu/common/linux/platform_gp10b_tegra.c6
5 files changed, 20 insertions, 13 deletions
diff --git a/drivers/gpu/nvgpu/common/linux/driver_common.c b/drivers/gpu/nvgpu/common/linux/driver_common.c
index b90574e0..948bb69f 100644
--- a/drivers/gpu/nvgpu/common/linux/driver_common.c
+++ b/drivers/gpu/nvgpu/common/linux/driver_common.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. 2 * Copyright (c) 2016-2018, NVIDIA CORPORATION. All rights reserved.
3 * 3 *
4 * This program is free software; you can redistribute it and/or modify it 4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms and conditions of the GNU General Public License, 5 * under the terms and conditions of the GNU General Public License,
@@ -27,7 +27,6 @@
27#include <nvgpu/debug.h> 27#include <nvgpu/debug.h>
28#include <nvgpu/sizes.h> 28#include <nvgpu/sizes.h>
29 29
30#include "scale.h"
31#include "gk20a/gk20a.h" 30#include "gk20a/gk20a.h"
32#include "platform_gk20a.h" 31#include "platform_gk20a.h"
33#include "module.h" 32#include "module.h"
@@ -226,11 +225,6 @@ int nvgpu_probe(struct gk20a *g,
226 if (err) 225 if (err)
227 return err; 226 return err;
228 227
229
230 /* Initialise scaling */
231 if (IS_ENABLED(CONFIG_GK20A_DEVFREQ))
232 gk20a_scale_init(dev);
233
234 if (platform->late_probe) { 228 if (platform->late_probe) {
235 err = platform->late_probe(dev); 229 err = platform->late_probe(dev);
236 if (err) { 230 if (err) {
diff --git a/drivers/gpu/nvgpu/common/linux/module.c b/drivers/gpu/nvgpu/common/linux/module.c
index d22455ff..b0cad0ce 100644
--- a/drivers/gpu/nvgpu/common/linux/module.c
+++ b/drivers/gpu/nvgpu/common/linux/module.c
@@ -264,6 +264,13 @@ int gk20a_pm_finalize_poweron(struct device *dev)
264 if (err) 264 if (err)
265 goto done; 265 goto done;
266 266
267 /* Initialise scaling: it will initialize scaling drive only once */
268 if (IS_ENABLED(CONFIG_GK20A_DEVFREQ)) {
269 gk20a_scale_init(dev);
270 if (platform->initscale)
271 platform->initscale(dev);
272 }
273
267 trace_gk20a_finalize_poweron_done(dev_name(dev)); 274 trace_gk20a_finalize_poweron_done(dev_name(dev));
268 275
269 err = nvgpu_init_os_linux_ops(l); 276 err = nvgpu_init_os_linux_ops(l);
diff --git a/drivers/gpu/nvgpu/common/linux/platform_gk20a.h b/drivers/gpu/nvgpu/common/linux/platform_gk20a.h
index b0c089e6..60e71a74 100644
--- a/drivers/gpu/nvgpu/common/linux/platform_gk20a.h
+++ b/drivers/gpu/nvgpu/common/linux/platform_gk20a.h
@@ -177,6 +177,9 @@ struct gk20a_platform {
177 /* Called to register GPCPLL with common clk framework */ 177 /* Called to register GPCPLL with common clk framework */
178 int (*clk_register)(struct gk20a *g); 178 int (*clk_register)(struct gk20a *g);
179 179
180 /* platform specific scale init quirks */
181 void (*initscale)(struct device *dev);
182
180 /* Postscale callback is called after frequency change */ 183 /* Postscale callback is called after frequency change */
181 void (*postscale)(struct device *dev, 184 void (*postscale)(struct device *dev,
182 unsigned long freq); 185 unsigned long freq);
diff --git a/drivers/gpu/nvgpu/common/linux/platform_gk20a_tegra.c b/drivers/gpu/nvgpu/common/linux/platform_gk20a_tegra.c
index c40eafe4..db30fff2 100644
--- a/drivers/gpu/nvgpu/common/linux/platform_gk20a_tegra.c
+++ b/drivers/gpu/nvgpu/common/linux/platform_gk20a_tegra.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * GK20A Tegra Platform Interface 2 * GK20A Tegra Platform Interface
3 * 3 *
4 * Copyright (c) 2014-2017, NVIDIA CORPORATION. All rights reserved. 4 * Copyright (c) 2014-2018, NVIDIA CORPORATION. All rights reserved.
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify it 6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms and conditions of the GNU General Public License, 7 * under the terms and conditions of the GNU General Public License,
@@ -592,6 +592,9 @@ static void gk20a_tegra_scale_init(struct device *dev)
592 if (!profile) 592 if (!profile)
593 return; 593 return;
594 594
595 if (profile->private_data)
596 return;
597
595 emc_params = nvgpu_kzalloc(platform->g, sizeof(*emc_params)); 598 emc_params = nvgpu_kzalloc(platform->g, sizeof(*emc_params));
596 if (!emc_params) 599 if (!emc_params)
597 return; 600 return;
@@ -850,9 +853,6 @@ static int gk20a_tegra_late_probe(struct device *dev)
850 /* Cause early VPR resize */ 853 /* Cause early VPR resize */
851 gk20a_tegra_secure_page_alloc(dev); 854 gk20a_tegra_secure_page_alloc(dev);
852 855
853 /* Initialise tegra specific scaling quirks */
854 gk20a_tegra_scale_init(dev);
855
856 return 0; 856 return 0;
857} 857}
858 858
@@ -958,6 +958,7 @@ struct gk20a_platform gm20b_tegra_platform = {
958#endif 958#endif
959 959
960 /* frequency scaling configuration */ 960 /* frequency scaling configuration */
961 .initscale = gk20a_tegra_scale_init,
961 .prescale = gk20a_tegra_prescale, 962 .prescale = gk20a_tegra_prescale,
962#ifdef CONFIG_TEGRA_BWMGR 963#ifdef CONFIG_TEGRA_BWMGR
963 .postscale = gm20b_tegra_postscale, 964 .postscale = gm20b_tegra_postscale,
diff --git a/drivers/gpu/nvgpu/common/linux/platform_gp10b_tegra.c b/drivers/gpu/nvgpu/common/linux/platform_gp10b_tegra.c
index 00cbe48e..36052ee3 100644
--- a/drivers/gpu/nvgpu/common/linux/platform_gp10b_tegra.c
+++ b/drivers/gpu/nvgpu/common/linux/platform_gp10b_tegra.c
@@ -106,6 +106,9 @@ static void gp10b_tegra_scale_init(struct device *dev)
106 if (!profile) 106 if (!profile)
107 return; 107 return;
108 108
109 if ((struct tegra_bwmgr_client *)profile->private_data)
110 return;
111
109 bwmgr_handle = tegra_bwmgr_register(TEGRA_BWMGR_CLIENT_GPU); 112 bwmgr_handle = tegra_bwmgr_register(TEGRA_BWMGR_CLIENT_GPU);
110 if (!bwmgr_handle) 113 if (!bwmgr_handle)
111 return; 114 return;
@@ -157,8 +160,6 @@ static int gp10b_tegra_late_probe(struct device *dev)
157 /* Cause early VPR resize */ 160 /* Cause early VPR resize */
158 gk20a_tegra_secure_page_alloc(dev); 161 gk20a_tegra_secure_page_alloc(dev);
159 162
160 /* Initialise tegra specific scaling quirks */
161 gp10b_tegra_scale_init(dev);
162 return 0; 163 return 0;
163} 164}
164 165
@@ -405,6 +406,7 @@ struct gk20a_platform gp10b_tegra_platform = {
405 .get_clk_freqs = gp10b_clk_get_freqs, 406 .get_clk_freqs = gp10b_clk_get_freqs,
406 407
407 /* frequency scaling configuration */ 408 /* frequency scaling configuration */
409 .initscale = gp10b_tegra_scale_init,
408 .prescale = gp10b_tegra_prescale, 410 .prescale = gp10b_tegra_prescale,
409 .postscale = gp10b_tegra_postscale, 411 .postscale = gp10b_tegra_postscale,
410 .devfreq_governor = "nvhost_podgov", 412 .devfreq_governor = "nvhost_podgov",