Re: [PATCH v7 6/8] clk: tegra: cclk: Handle thermal DIV2 CPU frequency throttling
From: Dmitry Osipenko <digetx@gmail.com>
Date: 2021-05-11 15:23:39
Also in:
linux-clk, linux-tegra, lkml
11.05.2021 17:41, Michał Mirosław пишет:
On Tue, May 11, 2021 at 02:17:35AM +0300, Dmitry Osipenko wrote:quoted
Check whether thermal DIV2 throttle is active in order to report the CPU frequency properly. This very useful for userspace tools like cpufreq-info which show actual frequency asserted from hardware. Signed-off-by: Dmitry Osipenko <digetx@gmail.com> --- drivers/clk/tegra/clk-tegra-super-cclk.c | 16 ++++++++++++++-- drivers/clk/tegra/clk-tegra30.c | 2 +- 2 files changed, 15 insertions(+), 3 deletions(-)diff --git a/drivers/clk/tegra/clk-tegra-super-cclk.c b/drivers/clk/tegra/clk-tegra-super-cclk.c index a03119c30456..f75822b71d0e 100644 --- a/drivers/clk/tegra/clk-tegra-super-cclk.c +++ b/drivers/clk/tegra/clk-tegra-super-cclk.c@@ -25,6 +25,8 @@ #define SUPER_CDIV_ENB BIT(31) +#define TSENSOR_SLOWDOWN BIT(23) + static struct tegra_clk_super_mux *cclk_super; static bool cclk_on_pllx;@@ -47,10 +49,20 @@ static int cclk_super_set_rate(struct clk_hw *hw, unsigned long rate, static unsigned long cclk_super_recalc_rate(struct clk_hw *hw, unsigned long parent_rate) { + struct tegra_clk_super_mux *super = to_clk_super_mux(hw); + u32 val = readl_relaxed(super->reg); + unsigned int div2; + + /* check whether thermal throttling is active */ + if (val & TSENSOR_SLOWDOWN) + div2 = 2; + else + div2 = 1; + if (cclk_super_get_parent(hw) == PLLX_INDEX) - return parent_rate; + return parent_rate / div2; - return tegra_clk_super_ops.recalc_rate(hw, parent_rate); + return tegra_clk_super_ops.recalc_rate(hw, parent_rate) / div2; }Could you check if the compiler can optimize out the division? I know this is a slow path, but nevertheless the 'shr' version would be the same amount of source code.
Hello Michał, GCC can't optimize that division. I'll wait for more comments and then update this patch in v8 with yours suggestion. Thank you for taking a look at the patches.