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 Original line Diff line number Diff line
@@ -13,3 +13,4 @@ Working-State Power Management
   intel_pstate
   intel_pstate
   cpufreq_drivers
   cpufreq_drivers
   intel_epb
   intel_epb
   intel-speed-select
+8 −0
Original line number Original line Diff line number Diff line
@@ -91,6 +91,14 @@ config ARM_EXYNOS_BUS_DEVFREQ
	  and adjusts the operating frequencies and voltages with OPP support.
	  and adjusts the operating frequencies and voltages with OPP support.
	  This does not yet operate with optimal voltages.
	  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
config ARM_IMX8M_DDRC_DEVFREQ
	tristate "i.MX8M DDRC DEVFREQ Driver"
	tristate "i.MX8M DDRC DEVFREQ Driver"
	depends on (ARCH_MXC && HAVE_ARM_SMCCC) || \
	depends on (ARCH_MXC && HAVE_ARM_SMCCC) || \
+1 −0
Original line number Original line Diff line number Diff line
@@ -9,6 +9,7 @@ obj-$(CONFIG_DEVFREQ_GOV_PASSIVE) += governor_passive.o


# DEVFREQ Drivers
# DEVFREQ Drivers
obj-$(CONFIG_ARM_EXYNOS_BUS_DEVFREQ)	+= exynos-bus.o
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_IMX8M_DDRC_DEVFREQ)	+= imx8m-ddrc.o
obj-$(CONFIG_ARM_RK3399_DMC_DEVFREQ)	+= rk3399_dmc.o
obj-$(CONFIG_ARM_RK3399_DMC_DEVFREQ)	+= rk3399_dmc.o
obj-$(CONFIG_ARM_TEGRA_DEVFREQ)		+= tegra30-devfreq.o
obj-$(CONFIG_ARM_TEGRA_DEVFREQ)		+= tegra30-devfreq.o
+8 −11
Original line number Original line Diff line number Diff line
@@ -60,12 +60,12 @@ static struct devfreq *find_device_devfreq(struct device *dev)
{
{
	struct devfreq *tmp_devfreq;
	struct devfreq *tmp_devfreq;


	lockdep_assert_held(&devfreq_list_lock);

	if (IS_ERR_OR_NULL(dev)) {
	if (IS_ERR_OR_NULL(dev)) {
		pr_err("DEVFREQ: %s: Invalid parameters\n", __func__);
		pr_err("DEVFREQ: %s: Invalid parameters\n", __func__);
		return ERR_PTR(-EINVAL);
		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) {
	list_for_each_entry(tmp_devfreq, &devfreq_list, node) {
		if (tmp_devfreq->dev.parent == dev)
		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;
	struct devfreq_governor *tmp_governor;


	lockdep_assert_held(&devfreq_list_lock);

	if (IS_ERR_OR_NULL(name)) {
	if (IS_ERR_OR_NULL(name)) {
		pr_err("DEVFREQ: %s: Invalid parameters\n", __func__);
		pr_err("DEVFREQ: %s: Invalid parameters\n", __func__);
		return ERR_PTR(-EINVAL);
		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) {
	list_for_each_entry(tmp_governor, &devfreq_governor_list, node) {
		if (!strncmp(tmp_governor->name, name, DEVFREQ_NAME_LEN))
		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;
	struct devfreq_governor *governor;
	int err = 0;
	int err = 0;


	lockdep_assert_held(&devfreq_list_lock);

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


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


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


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