On Fri, Apr 24, 2020 at 06:54:04PM +0300, Georgi Djakov wrote: > In addition to clocks and regulators, some devices can scale the bandwidth > of their on-chip interconnect - for example between CPU and DDR memory. Add > support for that, so that platforms which support it can make use of it. > > Signed-off-by: Georgi Djakov <georgi.djakov@xxxxxxxxxx> > --- > v7: > * Drop using dev_pm_opp_set_paths(), as it has been removed. > * Add Kconfig dependency on INTERCONNECT, as it can be module. > > > v2: https://lore.kernel.org/r/20190423132823.7915-6-georgi.djakov@xxxxxxxxxx > > drivers/cpufreq/Kconfig | 1 + > drivers/cpufreq/cpufreq-dt.c | 15 +++++++++++++++ > 2 files changed, 16 insertions(+) > > diff --git a/drivers/cpufreq/Kconfig b/drivers/cpufreq/Kconfig > index c3e6bd59e920..db2ad54ee67f 100644 > --- a/drivers/cpufreq/Kconfig > +++ b/drivers/cpufreq/Kconfig > @@ -217,6 +217,7 @@ config CPUFREQ_DT > > config CPUFREQ_DT_PLATDEV > bool > + depends on INTERCONNECT || !INTERCONNECT > help > This adds a generic DT based cpufreq platdev driver for frequency > management. This creates a 'cpufreq-dt' platform device, on the > diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c > index 26fe8dfb9ce6..4ecef3257532 100644 > --- a/drivers/cpufreq/cpufreq-dt.c > +++ b/drivers/cpufreq/cpufreq-dt.c > @@ -13,6 +13,7 @@ > #include <linux/cpufreq.h> > #include <linux/cpumask.h> > #include <linux/err.h> > +#include <linux/interconnect.h> > #include <linux/module.h> > #include <linux/of.h> > #include <linux/pm_opp.h> > @@ -95,6 +96,7 @@ static int resources_available(void) > struct device *cpu_dev; > struct regulator *cpu_reg; > struct clk *cpu_clk; > + struct icc_path *cpu_path; > int ret = 0; > const char *name; > > @@ -121,6 +123,19 @@ static int resources_available(void) > > clk_put(cpu_clk); > > + cpu_path = of_icc_get(cpu_dev, NULL); > + ret = PTR_ERR_OR_ZERO(cpu_path); > + if (ret) { > + if (ret == -EPROBE_DEFER) > + dev_dbg(cpu_dev, "defer icc path: %d\n", ret); > + else > + dev_err(cpu_dev, "failed to get icc path: %d\n", ret); > + > + return ret; > + } > + > + icc_put(cpu_path); > + > name = find_supply_name(cpu_dev); > /* Platform doesn't require regulator */ > if (!name) Reviewed-by: Matthias Kaehlcke <mka@xxxxxxxxxxxx>