Commit a34024d9 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

Merge branches 'pm-devfreq', 'powercap', 'pm-docs' and 'pm-tools'

* pm-devfreq:
  PM / devfreq: Use lockdep asserts instead of manual checks for locked mutex
  PM / devfreq: imx-bus: Fix inconsistent IS_ERR and PTR_ERR
  PM / devfreq: Replace strncpy with strscpy
  PM / devfreq: imx: Register interconnect device
  PM / devfreq: Add generic imx bus scaling driver
  PM / devfreq: tegra30: Delete an error message in tegra_devfreq_probe()
  PM / devfreq: tegra30: Make CPUFreq notifier to take into account boosting

* powercap:
  powercap: RAPL: remove unused local MSR define
  powercap/intel_rapl: add support for ElkhartLake

* pm-docs:
  Documentation: admin-guide: pm: Document intel-speed-select

* pm-tools:
  cpupower: Remove unneeded semicolon
Loading
Loading
Loading
Loading
+917 −0

File added.

Preview size limit exceeded, changes collapsed.

+1 −0
Original line number Diff line number Diff line
@@ -13,3 +13,4 @@ Working-State Power Management
   intel_pstate
   cpufreq_drivers
   intel_epb
   intel-speed-select
+8 −0
Original line number Diff line number Diff line
@@ -91,6 +91,14 @@ config ARM_EXYNOS_BUS_DEVFREQ
	  and adjusts the operating frequencies and voltages with OPP support.
	  This does not yet operate with optimal voltages.

config ARM_IMX_BUS_DEVFREQ
	tristate "i.MX Generic Bus DEVFREQ Driver"
	depends on ARCH_MXC || COMPILE_TEST
	select DEVFREQ_GOV_USERSPACE
	help
	  This adds the generic DEVFREQ driver for i.MX interconnects. It
	  allows adjusting NIC/NOC frequency.

config ARM_IMX8M_DDRC_DEVFREQ
	tristate "i.MX8M DDRC DEVFREQ Driver"
	depends on (ARCH_MXC && HAVE_ARM_SMCCC) || \
+1 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ obj-$(CONFIG_DEVFREQ_GOV_PASSIVE) += governor_passive.o

# DEVFREQ Drivers
obj-$(CONFIG_ARM_EXYNOS_BUS_DEVFREQ)	+= exynos-bus.o
obj-$(CONFIG_ARM_IMX_BUS_DEVFREQ)	+= imx-bus.o
obj-$(CONFIG_ARM_IMX8M_DDRC_DEVFREQ)	+= imx8m-ddrc.o
obj-$(CONFIG_ARM_RK3399_DMC_DEVFREQ)	+= rk3399_dmc.o
obj-$(CONFIG_ARM_TEGRA_DEVFREQ)		+= tegra30-devfreq.o
+8 −11
Original line number Diff line number Diff line
@@ -60,12 +60,12 @@ static struct devfreq *find_device_devfreq(struct device *dev)
{
	struct devfreq *tmp_devfreq;

	lockdep_assert_held(&devfreq_list_lock);

	if (IS_ERR_OR_NULL(dev)) {
		pr_err("DEVFREQ: %s: Invalid parameters\n", __func__);
		return ERR_PTR(-EINVAL);
	}
	WARN(!mutex_is_locked(&devfreq_list_lock),
	     "devfreq_list_lock must be locked.");

	list_for_each_entry(tmp_devfreq, &devfreq_list, node) {
		if (tmp_devfreq->dev.parent == dev)
@@ -258,12 +258,12 @@ static struct devfreq_governor *find_devfreq_governor(const char *name)
{
	struct devfreq_governor *tmp_governor;

	lockdep_assert_held(&devfreq_list_lock);

	if (IS_ERR_OR_NULL(name)) {
		pr_err("DEVFREQ: %s: Invalid parameters\n", __func__);
		return ERR_PTR(-EINVAL);
	}
	WARN(!mutex_is_locked(&devfreq_list_lock),
	     "devfreq_list_lock must be locked.");

	list_for_each_entry(tmp_governor, &devfreq_governor_list, node) {
		if (!strncmp(tmp_governor->name, name, DEVFREQ_NAME_LEN))
@@ -289,12 +289,12 @@ static struct devfreq_governor *try_then_request_governor(const char *name)
	struct devfreq_governor *governor;
	int err = 0;

	lockdep_assert_held(&devfreq_list_lock);

	if (IS_ERR_OR_NULL(name)) {
		pr_err("DEVFREQ: %s: Invalid parameters\n", __func__);
		return ERR_PTR(-EINVAL);
	}
	WARN(!mutex_is_locked(&devfreq_list_lock),
	     "devfreq_list_lock must be locked.");

	governor = find_devfreq_governor(name);
	if (IS_ERR(governor)) {
@@ -392,10 +392,7 @@ int update_devfreq(struct devfreq *devfreq)
	int err = 0;
	u32 flags = 0;

	if (!mutex_is_locked(&devfreq->lock)) {
		WARN(true, "devfreq->lock must be locked by the caller.\n");
		return -EINVAL;
	}
	lockdep_assert_held(&devfreq->lock);

	if (!devfreq->governor)
		return -EINVAL;
@@ -768,7 +765,7 @@ struct devfreq *devfreq_add_device(struct device *dev,
	devfreq->dev.release = devfreq_dev_release;
	INIT_LIST_HEAD(&devfreq->node);
	devfreq->profile = profile;
	strncpy(devfreq->governor_name, governor_name, DEVFREQ_NAME_LEN);
	strscpy(devfreq->governor_name, governor_name, DEVFREQ_NAME_LEN);
	devfreq->previous_freq = profile->initial_freq;
	devfreq->last_status.current_frequency = profile->initial_freq;
	devfreq->data = data;
Loading