Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f5f263fe authored by Viresh Kumar's avatar Viresh Kumar Committed by Rafael J. Wysocki
Browse files

cpu_cooling: Make of_cpufreq_power_cooling_register() parse DT



All the callers of of_cpufreq_power_cooling_register() have almost
identical code and it makes more sense to move that code into the helper
as its all about reading DT properties.

This got rid of lot of redundant code.

Acked-by: default avatarEduardo Valentin <edubezval@gmail.com>
Signed-off-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent ae64f9bd
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -51,8 +51,7 @@ Dynamic power). "plat_static_func" is a function to calculate the
static power consumed by these cpus (See 2.2 Static power).

1.1.4 struct thermal_cooling_device *of_cpufreq_power_cooling_register(
    struct device_node *np, const struct cpumask *clip_cpus, u32 capacitance,
    get_static_t plat_static_func)
					struct cpufreq_policy *policy)

Similar to cpufreq_power_cooling_register, this function register a
cpufreq cooling device with power extensions using the device tree
@@ -76,8 +75,8 @@ cpu. If you are using CONFIG_CPUFREQ_DT then the
device.

The `plat_static_func` parameter of `cpufreq_power_cooling_register()`
and `of_cpufreq_power_cooling_register()` is optional.  If you don't
provide it, only dynamic power will be considered.
is optional.  If you don't provide it, only dynamic power will be
considered.

2.1 Dynamic power

+1 −22
Original line number Diff line number Diff line
@@ -526,34 +526,13 @@ static int bL_cpufreq_exit(struct cpufreq_policy *policy)

static void bL_cpufreq_ready(struct cpufreq_policy *policy)
{
	struct device *cpu_dev = get_cpu_device(policy->cpu);
	int cur_cluster = cpu_to_cluster(policy->cpu);
	struct device_node *np;

	/* Do not register a cpu_cooling device if we are in IKS mode */
	if (cur_cluster >= MAX_CLUSTERS)
		return;

	np = of_node_get(cpu_dev->of_node);
	if (WARN_ON(!np))
		return;

	if (of_find_property(np, "#cooling-cells", NULL)) {
		u32 power_coefficient = 0;

		of_property_read_u32(np, "dynamic-power-coefficient",
				     &power_coefficient);

		cdev[cur_cluster] = of_cpufreq_power_cooling_register(np,
				policy, power_coefficient, NULL);
		if (IS_ERR(cdev[cur_cluster])) {
			dev_err(cpu_dev,
				"running cpufreq without cooling device: %ld\n",
				PTR_ERR(cdev[cur_cluster]));
			cdev[cur_cluster] = NULL;
		}
	}
	of_node_put(np);
	cdev[cur_cluster] = of_cpufreq_power_cooling_register(policy);
}

static struct cpufreq_driver bL_cpufreq_driver = {
+1 −26
Original line number Diff line number Diff line
@@ -319,33 +319,8 @@ static int cpufreq_exit(struct cpufreq_policy *policy)
static void cpufreq_ready(struct cpufreq_policy *policy)
{
	struct private_data *priv = policy->driver_data;
	struct device_node *np = of_node_get(priv->cpu_dev->of_node);

	if (WARN_ON(!np))
		return;

	/*
	 * For now, just loading the cooling device;
	 * thermal DT code takes care of matching them.
	 */
	if (of_find_property(np, "#cooling-cells", NULL)) {
		u32 power_coefficient = 0;

		of_property_read_u32(np, "dynamic-power-coefficient",
				     &power_coefficient);

		priv->cdev = of_cpufreq_power_cooling_register(np,
				policy, power_coefficient, NULL);
		if (IS_ERR(priv->cdev)) {
			dev_err(priv->cpu_dev,
				"running cpufreq without cooling device: %ld\n",
				PTR_ERR(priv->cdev));

			priv->cdev = NULL;
		}
	}

	of_node_put(np);
	priv->cdev = of_cpufreq_power_cooling_register(policy);
}

static struct cpufreq_driver dt_cpufreq_driver = {
+1 −21
Original line number Diff line number Diff line
@@ -310,28 +310,8 @@ static int mtk_cpufreq_set_target(struct cpufreq_policy *policy,
static void mtk_cpufreq_ready(struct cpufreq_policy *policy)
{
	struct mtk_cpu_dvfs_info *info = policy->driver_data;
	struct device_node *np = of_node_get(info->cpu_dev->of_node);
	u32 capacitance = 0;

	if (WARN_ON(!np))
		return;

	if (of_find_property(np, "#cooling-cells", NULL)) {
		of_property_read_u32(np, DYNAMIC_POWER, &capacitance);

		info->cdev = of_cpufreq_power_cooling_register(np,
						policy, capacitance, NULL);

		if (IS_ERR(info->cdev)) {
			dev_err(info->cpu_dev,
				"running cpufreq without cooling device: %ld\n",
				PTR_ERR(info->cdev));

			info->cdev = NULL;
		}
	}

	of_node_put(np);
	info->cdev = of_cpufreq_power_cooling_register(policy);
}

static int mtk_cpu_dvfs_info_init(struct mtk_cpu_dvfs_info *info, int cpu)
+1 −13
Original line number Diff line number Diff line
@@ -275,20 +275,8 @@ static int qoriq_cpufreq_target(struct cpufreq_policy *policy,
static void qoriq_cpufreq_ready(struct cpufreq_policy *policy)
{
	struct cpu_data *cpud = policy->driver_data;
	struct device_node *np = of_get_cpu_node(policy->cpu, NULL);

	if (of_find_property(np, "#cooling-cells", NULL)) {
		cpud->cdev = of_cpufreq_cooling_register(np, policy);

		if (IS_ERR(cpud->cdev) && PTR_ERR(cpud->cdev) != -ENOSYS) {
			pr_err("cpu%d is not running as cooling device: %ld\n",
					policy->cpu, PTR_ERR(cpud->cdev));

			cpud->cdev = NULL;
		}
	}

	of_node_put(np);
	cpud->cdev = of_cpufreq_power_cooling_register(policy);
}

static struct cpufreq_driver qoriq_cpufreq_driver = {
Loading