Commit 297a6622 authored by Viresh Kumar's avatar Viresh Kumar Committed by Rafael J. Wysocki

cpufreq: dt: Support governor tunables per policy

The cpufreq-dt driver is also used for systems with multiple
clock/voltage domains for CPUs, i.e. multiple cpufreq policies in a
system.

And in such cases the platform users may want to enable "governor
tunables per policy". Support that via platform data, as not all users
of the driver would want that behavior.
Reported-by: default avatarJuri Lelli <Juri.Lelli@arm.com>
Signed-off-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 33cc4fc1
...@@ -11,6 +11,8 @@ ...@@ -11,6 +11,8 @@
#include <linux/of.h> #include <linux/of.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include "cpufreq-dt.h"
static const struct of_device_id machines[] __initconst = { static const struct of_device_id machines[] __initconst = {
{ .compatible = "allwinner,sun4i-a10", }, { .compatible = "allwinner,sun4i-a10", },
{ .compatible = "allwinner,sun5i-a10s", }, { .compatible = "allwinner,sun5i-a10s", },
...@@ -93,7 +95,8 @@ static int __init cpufreq_dt_platdev_init(void) ...@@ -93,7 +95,8 @@ static int __init cpufreq_dt_platdev_init(void)
if (!match) if (!match)
return -ENODEV; return -ENODEV;
return PTR_ERR_OR_ZERO(platform_device_register_simple("cpufreq-dt", -1, return PTR_ERR_OR_ZERO(platform_device_register_data(NULL, "cpufreq-dt",
NULL, 0)); -1, match->data,
sizeof(struct cpufreq_dt_platform_data)));
} }
device_initcall(cpufreq_dt_platdev_init); device_initcall(cpufreq_dt_platdev_init);
...@@ -25,6 +25,8 @@ ...@@ -25,6 +25,8 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/thermal.h> #include <linux/thermal.h>
#include "cpufreq-dt.h"
struct private_data { struct private_data {
struct device *cpu_dev; struct device *cpu_dev;
struct thermal_cooling_device *cdev; struct thermal_cooling_device *cdev;
...@@ -353,6 +355,7 @@ static struct cpufreq_driver dt_cpufreq_driver = { ...@@ -353,6 +355,7 @@ static struct cpufreq_driver dt_cpufreq_driver = {
static int dt_cpufreq_probe(struct platform_device *pdev) static int dt_cpufreq_probe(struct platform_device *pdev)
{ {
struct cpufreq_dt_platform_data *data = dev_get_platdata(&pdev->dev);
int ret; int ret;
/* /*
...@@ -366,6 +369,9 @@ static int dt_cpufreq_probe(struct platform_device *pdev) ...@@ -366,6 +369,9 @@ static int dt_cpufreq_probe(struct platform_device *pdev)
if (ret) if (ret)
return ret; return ret;
if (data && data->have_governor_per_policy)
dt_cpufreq_driver.flags |= CPUFREQ_HAVE_GOVERNOR_PER_POLICY;
ret = cpufreq_register_driver(&dt_cpufreq_driver); ret = cpufreq_register_driver(&dt_cpufreq_driver);
if (ret) if (ret)
dev_err(&pdev->dev, "failed register driver: %d\n", ret); dev_err(&pdev->dev, "failed register driver: %d\n", ret);
......
/*
* Copyright (C) 2016 Linaro
* Viresh Kumar <viresh.kumar@linaro.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#ifndef __CPUFREQ_DT_H__
#define __CPUFREQ_DT_H__
#include <linux/types.h>
struct cpufreq_dt_platform_data {
bool have_governor_per_policy;
};
#endif /* __CPUFREQ_DT_H__ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment