[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <eaa5e9b4a1df82d7cbf2dbd1f267544d69690c97.1657695140.git.viresh.kumar@linaro.org>
Date: Wed, 13 Jul 2022 12:22:58 +0530
From: Viresh Kumar <viresh.kumar@...aro.org>
To: Bjorn Andersson <bjorn.andersson@...aro.org>,
Manivannan Sadhasivam <mani@...nel.org>,
Andy Gross <agross@...nel.org>,
"Rafael J. Wysocki" <rafael@...nel.org>,
Viresh Kumar <viresh.kumar@...aro.org>
Cc: Vincent Guittot <vincent.guittot@...aro.org>,
Johan Hovold <johan@...nel.org>,
Rob Herring <robh+dt@...nel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@...aro.org>,
linux-arm-msm@...r.kernel.org, linux-pm@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: [RFC PATCH 3/4] cpufreq: qcom-cpufreq-hw: Clocks are moved to CPU nodes
The clocks are not in the cpufreq-hw node anymore, and are moved to the
respective CPU nodes. Make changes accordingly here.
Signed-off-by: Viresh Kumar <viresh.kumar@...aro.org>
---
drivers/cpufreq/qcom-cpufreq-hw.c | 43 +++++++++++++++++--------------
1 file changed, 24 insertions(+), 19 deletions(-)
diff --git a/drivers/cpufreq/qcom-cpufreq-hw.c b/drivers/cpufreq/qcom-cpufreq-hw.c
index 0253731d6d25..05fce4a559ca 100644
--- a/drivers/cpufreq/qcom-cpufreq-hw.c
+++ b/drivers/cpufreq/qcom-cpufreq-hw.c
@@ -57,9 +57,10 @@ struct qcom_cpufreq_data {
struct cpufreq_policy *policy;
bool per_core_dcvs;
+ unsigned long cpu_hw_rate;
+ unsigned long xo_rate;
};
-static unsigned long cpu_hw_rate, xo_rate;
static bool icc_scaling_enabled;
static int qcom_cpufreq_set_bw(struct cpufreq_policy *policy,
@@ -209,9 +210,9 @@ static int qcom_cpufreq_hw_read_lut(struct device *cpu_dev,
volt = FIELD_GET(LUT_VOLT, data) * 1000;
if (src)
- freq = xo_rate * lval / 1000;
+ freq = drv_data->xo_rate * lval / 1000;
else
- freq = cpu_hw_rate / 1000;
+ freq = drv_data->cpu_hw_rate / 1000;
if (freq != prev_freq && core_count != LUT_TURBO_IND) {
if (!qcom_cpufreq_update_opp(cpu_dev, freq, volt)) {
@@ -293,7 +294,7 @@ static unsigned long qcom_lmh_get_throttle_freq(struct qcom_cpufreq_data *data)
else
lval = readl_relaxed(data->base + data->soc_data->reg_domain_state) & 0xff;
- return lval * xo_rate;
+ return lval * data->xo_rate;
}
static void qcom_lmh_dcvs_notify(struct qcom_cpufreq_data *data)
@@ -480,6 +481,7 @@ static int qcom_cpufreq_hw_cpu_init(struct cpufreq_policy *policy)
struct device_node *cpu_np;
struct device *cpu_dev;
struct resource *res;
+ struct clk *clk;
void __iomem *base;
struct qcom_cpufreq_data *data;
int ret, index;
@@ -527,6 +529,24 @@ static int qcom_cpufreq_hw_cpu_init(struct cpufreq_policy *policy)
goto unmap_base;
}
+ clk = clk_get(cpu_dev, "xo");
+ if (IS_ERR(clk)) {
+ ret = PTR_ERR(clk);
+ goto error;
+ }
+
+ data->xo_rate = clk_get_rate(clk);
+ clk_put(clk);
+
+ clk = clk_get(cpu_dev, "alternate");
+ if (IS_ERR(clk)) {
+ ret = PTR_ERR(clk);
+ goto error;
+ }
+
+ data->cpu_hw_rate = clk_get_rate(clk) / CLK_HW_DIV;
+ clk_put(clk);
+
data->soc_data = of_device_get_match_data(&pdev->dev);
data->base = base;
data->res = res;
@@ -637,23 +657,8 @@ static struct cpufreq_driver cpufreq_qcom_hw_driver = {
static int qcom_cpufreq_hw_driver_probe(struct platform_device *pdev)
{
struct device *cpu_dev;
- struct clk *clk;
int ret;
- clk = clk_get(&pdev->dev, "xo");
- if (IS_ERR(clk))
- return PTR_ERR(clk);
-
- xo_rate = clk_get_rate(clk);
- clk_put(clk);
-
- clk = clk_get(&pdev->dev, "alternate");
- if (IS_ERR(clk))
- return PTR_ERR(clk);
-
- cpu_hw_rate = clk_get_rate(clk) / CLK_HW_DIV;
- clk_put(clk);
-
cpufreq_qcom_hw_driver.driver_data = pdev;
/* Check for optional interconnect paths on CPU0 */
--
2.31.1.272.g89b43f80a514
Powered by blists - more mailing lists