From 27625718c4b2e400650885f8c892860c6c7434fd Mon Sep 17 00:00:00 2001 From: Peng Liu Date: Wed, 13 Mar 2019 10:30:54 -0700 Subject: Revert "gpu: nvgpu: cache gpu clk rate" This reverts commit e9a6d179a42e ("gpu: nvgpu: cache gpu clk rate") - Real clock rate doesn't always equal clock rate requested by caller - call of clk_set_rate() and update of cached_rate are not atomic - Real root cause for Bug 2051688 is in bpmp and gboost design Bug 2538692 Change-Id: I9248e0c69e2271ed2d0070587db59afa6f8160f2 Signed-off-by: Peng Liu Reviewed-on: https://git-master.nvidia.com/r/2109708 (cherry picked from commit cc70f89bb4efd106b81c2da5ecd6cbeb69c990d8) Reviewed-on: https://git-master.nvidia.com/r/2113647 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Aaron Tian Tested-by: Aaron Tian Reviewed-by: Bibek Basu Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/os/linux/clk.c | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) (limited to 'drivers/gpu/nvgpu/os/linux/clk.c') diff --git a/drivers/gpu/nvgpu/os/linux/clk.c b/drivers/gpu/nvgpu/os/linux/clk.c index 36c13577..6575a037 100644 --- a/drivers/gpu/nvgpu/os/linux/clk.c +++ b/drivers/gpu/nvgpu/os/linux/clk.c @@ -1,7 +1,7 @@ /* * Linux clock support * - * Copyright (c) 2017-2018, NVIDIA CORPORATION. All rights reserved. + * Copyright (c) 2017-2019, NVIDIA CORPORATION. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -38,13 +38,9 @@ static unsigned long nvgpu_linux_clk_get_rate(struct gk20a *g, u32 api_domain) switch (api_domain) { case CTRL_CLK_DOMAIN_GPCCLK: if (g->clk.tegra_clk) - ret = g->clk.cached_rate ? - g->clk.cached_rate : - clk_get_rate(g->clk.tegra_clk); + ret = clk_get_rate(g->clk.tegra_clk); else - ret = platform->cached_rate ? - platform->cached_rate : - clk_get_rate(platform->clk[0]); + ret = clk_get_rate(platform->clk[0]); break; case CTRL_CLK_DOMAIN_PWRCLK: ret = clk_get_rate(platform->clk[1]); @@ -66,15 +62,10 @@ static int nvgpu_linux_clk_set_rate(struct gk20a *g, switch (api_domain) { case CTRL_CLK_DOMAIN_GPCCLK: - if (g->clk.tegra_clk) { + if (g->clk.tegra_clk) ret = clk_set_rate(g->clk.tegra_clk, rate); - if (!ret) - g->clk.cached_rate = rate; - } else { + else ret = clk_set_rate(platform->clk[0], rate); - if (!ret) - platform->cached_rate = rate; - } break; case CTRL_CLK_DOMAIN_PWRCLK: ret = clk_set_rate(platform->clk[1], rate); -- cgit v1.2.2