Skip to content

Commit

Permalink
Merge branches 'pm-core', 'pm-sleep', 'pm-tools' and 'powercap'
Browse files Browse the repository at this point in the history
* pm-core:
  PM: runtime: Fix typo in pm_runtime_set_active() helper comment

* pm-sleep:
  PM: sleep: remove unreachable break

* pm-tools:
  cpupower: speed up generating git version string
  cpupowerutils: fix spelling mistake "dependant" -> "dependent"

* powercap:
  powercap: Fix typo in Kconfig "Plance" -> "Plane"
  powercap/intel_rapl: enumerate Psys RAPL domain together with package RAPL domain
  powercap/intel_rapl: Fix domain detection
  • Loading branch information
rafaeljw committed Oct 23, 2020
5 parents db06391 + aa9c9b3 + d298787 + 79d6c40 + f8fee6e commit 71d47b5
Show file tree
Hide file tree
Showing 8 changed files with 23 additions and 80 deletions.
1 change: 0 additions & 1 deletion drivers/base/power/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,6 @@ static pm_callback_t pm_op(const struct dev_pm_ops *ops, pm_message_t state)
case PM_EVENT_THAW:
case PM_EVENT_RECOVER:
return ops->thaw;
break;
case PM_EVENT_RESTORE:
return ops->restore;
#endif /* CONFIG_HIBERNATE_CALLBACKS */
Expand Down
2 changes: 1 addition & 1 deletion drivers/powercap/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ config INTEL_RAPL

In RAPL, the platform level settings are divided into domains for
fine grained control. These domains include processor package, DRAM
controller, CPU core (Power Plance 0), graphics uncore (Power Plane
controller, CPU core (Power Plane 0), graphics uncore (Power Plane
1), etc.

config IDLE_INJECT
Expand Down
82 changes: 15 additions & 67 deletions drivers/powercap/intel_rapl_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -544,7 +544,14 @@ static void rapl_init_domains(struct rapl_package *rp)
continue;

rd->rp = rp;
rd->name = rapl_domain_names[i];

if (i == RAPL_DOMAIN_PLATFORM && rp->id > 0) {
snprintf(rd->name, RAPL_DOMAIN_NAME_LENGTH, "psys-%d",
cpu_data(rp->lead_cpu).phys_proc_id);
} else
snprintf(rd->name, RAPL_DOMAIN_NAME_LENGTH, "%s",
rapl_domain_names[i]);

rd->id = i;
rd->rpl[0].prim_id = PL1_ENABLE;
rd->rpl[0].name = pl1_name;
Expand Down Expand Up @@ -1112,13 +1119,17 @@ static int rapl_package_register_powercap(struct rapl_package *rp)
}
/* now register domains as children of the socket/package */
for (rd = rp->domains; rd < rp->domains + rp->nr_domains; rd++) {
struct powercap_zone *parent = rp->power_zone;

if (rd->id == RAPL_DOMAIN_PACKAGE)
continue;
if (rd->id == RAPL_DOMAIN_PLATFORM)
parent = NULL;
/* number of power limits per domain varies */
nr_pl = find_nr_power_limit(rd);
power_zone = powercap_register_zone(&rd->power_zone,
rp->priv->control_type,
rd->name, rp->power_zone,
rd->name, parent,
&zone_ops[rd->id], nr_pl,
&constraint_ops);

Expand All @@ -1145,67 +1156,6 @@ static int rapl_package_register_powercap(struct rapl_package *rp)
return ret;
}

int rapl_add_platform_domain(struct rapl_if_priv *priv)
{
struct rapl_domain *rd;
struct powercap_zone *power_zone;
struct reg_action ra;
int ret;

ra.reg = priv->regs[RAPL_DOMAIN_PLATFORM][RAPL_DOMAIN_REG_STATUS];
ra.mask = ~0;
ret = priv->read_raw(0, &ra);
if (ret || !ra.value)
return -ENODEV;

ra.reg = priv->regs[RAPL_DOMAIN_PLATFORM][RAPL_DOMAIN_REG_LIMIT];
ra.mask = ~0;
ret = priv->read_raw(0, &ra);
if (ret || !ra.value)
return -ENODEV;

rd = kzalloc(sizeof(*rd), GFP_KERNEL);
if (!rd)
return -ENOMEM;

rd->name = rapl_domain_names[RAPL_DOMAIN_PLATFORM];
rd->id = RAPL_DOMAIN_PLATFORM;
rd->regs[RAPL_DOMAIN_REG_LIMIT] =
priv->regs[RAPL_DOMAIN_PLATFORM][RAPL_DOMAIN_REG_LIMIT];
rd->regs[RAPL_DOMAIN_REG_STATUS] =
priv->regs[RAPL_DOMAIN_PLATFORM][RAPL_DOMAIN_REG_STATUS];
rd->rpl[0].prim_id = PL1_ENABLE;
rd->rpl[0].name = pl1_name;
rd->rpl[1].prim_id = PL2_ENABLE;
rd->rpl[1].name = pl2_name;
rd->rp = rapl_find_package_domain(0, priv);

power_zone = powercap_register_zone(&rd->power_zone, priv->control_type,
"psys", NULL,
&zone_ops[RAPL_DOMAIN_PLATFORM],
2, &constraint_ops);

if (IS_ERR(power_zone)) {
kfree(rd);
return PTR_ERR(power_zone);
}

priv->platform_rapl_domain = rd;

return 0;
}
EXPORT_SYMBOL_GPL(rapl_add_platform_domain);

void rapl_remove_platform_domain(struct rapl_if_priv *priv)
{
if (priv->platform_rapl_domain) {
powercap_unregister_zone(priv->control_type,
&priv->platform_rapl_domain->power_zone);
kfree(priv->platform_rapl_domain);
}
}
EXPORT_SYMBOL_GPL(rapl_remove_platform_domain);

static int rapl_check_domain(int cpu, int domain, struct rapl_package *rp)
{
struct reg_action ra;
Expand All @@ -1215,11 +1165,9 @@ static int rapl_check_domain(int cpu, int domain, struct rapl_package *rp)
case RAPL_DOMAIN_PP0:
case RAPL_DOMAIN_PP1:
case RAPL_DOMAIN_DRAM:
case RAPL_DOMAIN_PLATFORM:
ra.reg = rp->priv->regs[domain][RAPL_DOMAIN_REG_STATUS];
break;
case RAPL_DOMAIN_PLATFORM:
/* PSYS(PLATFORM) is not a CPU domain, so avoid printng error */
return -EINVAL;
default:
pr_err("invalid domain id %d\n", domain);
return -EINVAL;
Expand All @@ -1228,7 +1176,7 @@ static int rapl_check_domain(int cpu, int domain, struct rapl_package *rp)
* values, otherwise skip it.
*/

ra.mask = ~0;
ra.mask = ENERGY_STATUS_MASK;
if (rp->priv->read_raw(cpu, &ra) || !ra.value)
return -ENODEV;

Expand Down
5 changes: 1 addition & 4 deletions drivers/powercap/intel_rapl_msr.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ static struct rapl_if_priv rapl_msr_priv = {
.regs[RAPL_DOMAIN_PLATFORM] = {
MSR_PLATFORM_POWER_LIMIT, MSR_PLATFORM_ENERGY_STATUS, 0, 0, 0},
.limits[RAPL_DOMAIN_PACKAGE] = 2,
.limits[RAPL_DOMAIN_PLATFORM] = 2,
};

/* Handles CPU hotplug on multi-socket systems.
Expand Down Expand Up @@ -157,9 +158,6 @@ static int rapl_msr_probe(struct platform_device *pdev)
goto out;
rapl_msr_priv.pcap_rapl_online = ret;

/* Don't bail out if PSys is not supported */
rapl_add_platform_domain(&rapl_msr_priv);

return 0;

out:
Expand All @@ -171,7 +169,6 @@ static int rapl_msr_probe(struct platform_device *pdev)
static int rapl_msr_remove(struct platform_device *pdev)
{
cpuhp_remove_state(rapl_msr_priv.pcap_rapl_online);
rapl_remove_platform_domain(&rapl_msr_priv);
powercap_unregister_control_type(rapl_msr_priv.control_type);
return 0;
}
Expand Down
7 changes: 3 additions & 4 deletions include/linux/intel_rapl.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,10 @@ struct rapl_power_limit {

struct rapl_package;

#define RAPL_DOMAIN_NAME_LENGTH 16

struct rapl_domain {
const char *name;
char name[RAPL_DOMAIN_NAME_LENGTH];
enum rapl_domain_type id;
u64 regs[RAPL_DOMAIN_REG_MAX];
struct powercap_zone power_zone;
Expand Down Expand Up @@ -152,7 +154,4 @@ struct rapl_package *rapl_find_package_domain(int cpu, struct rapl_if_priv *priv
struct rapl_package *rapl_add_package(int cpu, struct rapl_if_priv *priv);
void rapl_remove_package(struct rapl_package *rp);

int rapl_add_platform_domain(struct rapl_if_priv *priv);
void rapl_remove_platform_domain(struct rapl_if_priv *priv);

#endif /* __INTEL_RAPL_H__ */
2 changes: 1 addition & 1 deletion include/linux/pm_runtime.h
Original file line number Diff line number Diff line change
Expand Up @@ -479,7 +479,7 @@ static inline int pm_runtime_set_active(struct device *dev)
}

/**
* pm_runtime_set_suspended - Set runtime PM status to "active".
* pm_runtime_set_suspended - Set runtime PM status to "suspended".
* @dev: Target device.
*
* Set the runtime PM status of @dev to %RPM_SUSPENDED and ensure that
Expand Down
2 changes: 1 addition & 1 deletion tools/power/cpupower/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ DESTDIR ?=
# Package-related definitions. Distributions can modify the version
# and _should_ modify the PACKAGE_BUGREPORT definition

VERSION= $(shell ./utils/version-gen.sh)
VERSION:= $(shell ./utils/version-gen.sh)
LIB_MAJ= 0.0.1
LIB_MIN= 0

Expand Down
2 changes: 1 addition & 1 deletion tools/power/cpupower/debug/i386/intel_gsic.c
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ int main (void)
printf("\tsmi_cmd=0x?? smi_port=0x?? smi_sig=1\n");
printf("\nUnfortunately, you have to know what exactly are "
"smi_cmd and smi_port, and this\nis system "
"dependant.\n");
"dependent.\n");
}
return 1;
}

0 comments on commit 71d47b5

Please sign in to comment.