summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gm20b/clk_gm20b.c
diff options
context:
space:
mode:
authorSrikar Srimath Tirumala <srikars@nvidia.com>2017-01-06 17:36:09 -0500
committermobile promotions <svcmobile_promotions@nvidia.com>2017-01-30 19:34:35 -0500
commit0aba2e99d0f7e4654c830c05095a14bca497520c (patch)
tree128f299706a21d953da440502c85d053f9334ce6 /drivers/gpu/nvgpu/gm20b/clk_gm20b.c
parent60c66212977885add0162922b531691a81a617cb (diff)
gpu: nvgpu: fix gm20b round rate ops
Make the clk_round_rate ops consider the max rate supported by DVFS while calculating the max frequency. Bug 200233943 Change-Id: Ib36a40a29cb16231dd1442aa652a20819e0f4016 Signed-off-by: Srikar Srimath Tirumala <srikars@nvidia.com> Reviewed-on: http://git-master/r/1281552 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gm20b/clk_gm20b.c')
-rw-r--r--drivers/gpu/nvgpu/gm20b/clk_gm20b.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/gpu/nvgpu/gm20b/clk_gm20b.c b/drivers/gpu/nvgpu/gm20b/clk_gm20b.c
index 7f0e3055..4f63f956 100644
--- a/drivers/gpu/nvgpu/gm20b/clk_gm20b.c
+++ b/drivers/gpu/nvgpu/gm20b/clk_gm20b.c
@@ -1266,13 +1266,16 @@ static long gm20b_round_rate(struct clk_hw *hw, unsigned long rate,
1266 unsigned long *parent_rate) 1266 unsigned long *parent_rate)
1267{ 1267{
1268 struct clk_gk20a *clk = to_clk_gk20a(hw); 1268 struct clk_gk20a *clk = to_clk_gk20a(hw);
1269 u32 freq, old_freq; 1269 u32 freq;
1270 struct pll tmp_pll; 1270 struct pll tmp_pll;
1271 unsigned long maxrate;
1272
1273 maxrate = tegra_dvfs_get_maxrate(clk_get_parent(clk->tegra_clk));
1274 if (rate > maxrate)
1275 rate = maxrate;
1271 1276
1272 mutex_lock(&clk->clk_mutex); 1277 mutex_lock(&clk->clk_mutex);
1273 old_freq = clk->gpc_pll.freq;
1274 freq = rate_gpu_to_gpc2clk(rate); 1278 freq = rate_gpu_to_gpc2clk(rate);
1275
1276 if (freq > gpc_pll_params.max_freq) 1279 if (freq > gpc_pll_params.max_freq)
1277 freq = gpc_pll_params.max_freq; 1280 freq = gpc_pll_params.max_freq;
1278 else if (freq < gpc_pll_params.min_freq) 1281 else if (freq < gpc_pll_params.min_freq)
@@ -1280,7 +1283,6 @@ static long gm20b_round_rate(struct clk_hw *hw, unsigned long rate,
1280 1283
1281 tmp_pll = clk->gpc_pll; 1284 tmp_pll = clk->gpc_pll;
1282 clk_config_pll(clk, &tmp_pll, &gpc_pll_params, &freq, true); 1285 clk_config_pll(clk, &tmp_pll, &gpc_pll_params, &freq, true);
1283
1284 mutex_unlock(&clk->clk_mutex); 1286 mutex_unlock(&clk->clk_mutex);
1285 1287
1286 return rate_gpc2clk_to_gpu(tmp_pll.freq); 1288 return rate_gpc2clk_to_gpu(tmp_pll.freq);