diff options
author | Srikar Srimath Tirumala <srikars@nvidia.com> | 2017-01-06 17:36:09 -0500 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2017-01-30 19:34:35 -0500 |
commit | 0aba2e99d0f7e4654c830c05095a14bca497520c (patch) | |
tree | 128f299706a21d953da440502c85d053f9334ce6 /drivers/gpu | |
parent | 60c66212977885add0162922b531691a81a617cb (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')
-rw-r--r-- | drivers/gpu/nvgpu/gm20b/clk_gm20b.c | 10 |
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); |