From 0aba2e99d0f7e4654c830c05095a14bca497520c Mon Sep 17 00:00:00 2001 From: Srikar Srimath Tirumala Date: Fri, 6 Jan 2017 14:36:09 -0800 Subject: 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 Reviewed-on: http://git-master/r/1281552 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/gm20b/clk_gm20b.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'drivers/gpu/nvgpu/gm20b/clk_gm20b.c') 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, unsigned long *parent_rate) { struct clk_gk20a *clk = to_clk_gk20a(hw); - u32 freq, old_freq; + u32 freq; struct pll tmp_pll; + unsigned long maxrate; + + maxrate = tegra_dvfs_get_maxrate(clk_get_parent(clk->tegra_clk)); + if (rate > maxrate) + rate = maxrate; mutex_lock(&clk->clk_mutex); - old_freq = clk->gpc_pll.freq; freq = rate_gpu_to_gpc2clk(rate); - if (freq > gpc_pll_params.max_freq) freq = gpc_pll_params.max_freq; else if (freq < gpc_pll_params.min_freq) @@ -1280,7 +1283,6 @@ static long gm20b_round_rate(struct clk_hw *hw, unsigned long rate, tmp_pll = clk->gpc_pll; clk_config_pll(clk, &tmp_pll, &gpc_pll_params, &freq, true); - mutex_unlock(&clk->clk_mutex); return rate_gpc2clk_to_gpu(tmp_pll.freq); -- cgit v1.2.2