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

Commit 9dbd224f authored by Marc Gonzalez's avatar Marc Gonzalez Committed by Rafael J. Wysocki
Browse files

cpufreq: dt: Don't use generic platdev driver for tango



On tango platforms, firmware configures the CPU clock, and Linux is
then only allowed to use the cpu_clk_divider to change the frequency.
Build the OPP table dynamically at init, in order to support whatever
firmware throws at us.

Signed-off-by: default avatarMarc Gonzalez <marc_gonzalez@sigmadesigns.com>
Acked-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent bb33270c
Loading
Loading
Loading
Loading
+0 −1
Original line number Original line Diff line number Diff line
@@ -13,7 +13,6 @@
			reg = <0>;
			reg = <0>;
			clocks = <&clkgen CPU_CLK>;
			clocks = <&clkgen CPU_CLK>;
			clock-latency = <1>;
			clock-latency = <1>;
			operating-points = <1215000 0 607500 0 405000 0 243000 0 135000 0>;
		};
		};


		cpu1: cpu@1 {
		cpu1: cpu@1 {
+5 −0
Original line number Original line Diff line number Diff line
@@ -241,6 +241,11 @@ config ARM_STI_CPUFREQ
	  this config option if you wish to add CPUFreq support for STi based
	  this config option if you wish to add CPUFreq support for STi based
	  SoCs.
	  SoCs.


config ARM_TANGO_CPUFREQ
	bool
	depends on CPUFREQ_DT && ARCH_TANGO
	default y

config ARM_TEGRA20_CPUFREQ
config ARM_TEGRA20_CPUFREQ
	bool "Tegra20 CPUFreq support"
	bool "Tegra20 CPUFreq support"
	depends on ARCH_TEGRA
	depends on ARCH_TEGRA
+1 −0
Original line number Original line Diff line number Diff line
@@ -75,6 +75,7 @@ obj-$(CONFIG_ARM_SA1110_CPUFREQ) += sa1110-cpufreq.o
obj-$(CONFIG_ARM_SCPI_CPUFREQ)		+= scpi-cpufreq.o
obj-$(CONFIG_ARM_SCPI_CPUFREQ)		+= scpi-cpufreq.o
obj-$(CONFIG_ARM_SPEAR_CPUFREQ)		+= spear-cpufreq.o
obj-$(CONFIG_ARM_SPEAR_CPUFREQ)		+= spear-cpufreq.o
obj-$(CONFIG_ARM_STI_CPUFREQ)		+= sti-cpufreq.o
obj-$(CONFIG_ARM_STI_CPUFREQ)		+= sti-cpufreq.o
obj-$(CONFIG_ARM_TANGO_CPUFREQ)		+= tango-cpufreq.o
obj-$(CONFIG_ARM_TEGRA20_CPUFREQ)	+= tegra20-cpufreq.o
obj-$(CONFIG_ARM_TEGRA20_CPUFREQ)	+= tegra20-cpufreq.o
obj-$(CONFIG_ARM_TEGRA124_CPUFREQ)	+= tegra124-cpufreq.o
obj-$(CONFIG_ARM_TEGRA124_CPUFREQ)	+= tegra124-cpufreq.o
obj-$(CONFIG_ARM_TEGRA186_CPUFREQ)	+= tegra186-cpufreq.o
obj-$(CONFIG_ARM_TEGRA186_CPUFREQ)	+= tegra186-cpufreq.o
+0 −2
Original line number Original line Diff line number Diff line
@@ -80,8 +80,6 @@ static const struct of_device_id machines[] __initconst = {
	{ .compatible = "rockchip,rk3368", },
	{ .compatible = "rockchip,rk3368", },
	{ .compatible = "rockchip,rk3399", },
	{ .compatible = "rockchip,rk3399", },


	{ .compatible = "sigma,tango4" },

	{ .compatible = "socionext,uniphier-pro5", },
	{ .compatible = "socionext,uniphier-pro5", },
	{ .compatible = "socionext,uniphier-pxs2", },
	{ .compatible = "socionext,uniphier-pxs2", },
	{ .compatible = "socionext,uniphier-ld6b", },
	{ .compatible = "socionext,uniphier-ld6b", },
+38 −0
Original line number Original line Diff line number Diff line
#include <linux/of.h>
#include <linux/cpu.h>
#include <linux/clk.h>
#include <linux/pm_opp.h>
#include <linux/platform_device.h>

static const struct of_device_id machines[] __initconst = {
	{ .compatible = "sigma,tango4" },
	{ /* sentinel */ }
};

static int __init tango_cpufreq_init(void)
{
	struct device *cpu_dev = get_cpu_device(0);
	unsigned long max_freq;
	struct clk *cpu_clk;
	void *res;

	if (!of_match_node(machines, of_root))
		return -ENODEV;

	cpu_clk = clk_get(cpu_dev, NULL);
	if (IS_ERR(cpu_clk))
		return -ENODEV;

	max_freq = clk_get_rate(cpu_clk);

	dev_pm_opp_add(cpu_dev, max_freq / 1, 0);
	dev_pm_opp_add(cpu_dev, max_freq / 2, 0);
	dev_pm_opp_add(cpu_dev, max_freq / 3, 0);
	dev_pm_opp_add(cpu_dev, max_freq / 5, 0);
	dev_pm_opp_add(cpu_dev, max_freq / 9, 0);

	res = platform_device_register_data(NULL, "cpufreq-dt", -1, NULL, 0);

	return PTR_ERR_OR_ZERO(res);
}
device_initcall(tango_cpufreq_init);