Lines Matching +full:power +full:- +full:limits
1 // SPDX-License-Identifier: GPL-2.0-only
3 * Intel Running Average Power Limit (RAPL) Driver via MSR interface
26 #include <asm/intel-family.h>
54 .limits[RAPL_DOMAIN_PACKAGE] = BIT(POWER_LIMIT2),
55 .limits[RAPL_DOMAIN_PLATFORM] = BIT(POWER_LIMIT2),
65 /* Handles CPU hotplug on multi-socket systems.
70 * per-domain level.
82 cpumask_set_cpu(cpu, &rp->cpumask); in rapl_cpu_online()
95 cpumask_clear_cpu(cpu, &rp->cpumask); in rapl_cpu_down_prep()
96 lead_cpu = cpumask_first(&rp->cpumask); in rapl_cpu_down_prep()
99 else if (rp->lead_cpu == cpu) in rapl_cpu_down_prep()
100 rp->lead_cpu = lead_cpu; in rapl_cpu_down_prep()
106 if (rdmsrl_safe_on_cpu(cpu, ra->reg.msr, &ra->value)) { in rapl_msr_read_raw()
107 pr_debug("failed to read msr 0x%x on cpu %d\n", ra->reg.msr, cpu); in rapl_msr_read_raw()
108 return -EIO; in rapl_msr_read_raw()
110 ra->value &= ra->mask; in rapl_msr_read_raw()
119 ra->err = rdmsrl_safe(ra->reg.msr, &val); in rapl_msr_update_func()
120 if (ra->err) in rapl_msr_update_func()
123 val &= ~ra->mask; in rapl_msr_update_func()
124 val |= ra->value; in rapl_msr_update_func()
126 ra->err = wrmsrl_safe(ra->reg.msr, val); in rapl_msr_update_func()
137 return ra->err; in rapl_msr_write_raw()
169 pr_err("intel-rapl does not support CPU vendor %d\n", boot_cpu_data.x86_vendor); in rapl_msr_probe()
170 return -ENODEV; in rapl_msr_probe()
172 rapl_msr_priv->read_raw = rapl_msr_read_raw; in rapl_msr_probe()
173 rapl_msr_priv->write_raw = rapl_msr_write_raw; in rapl_msr_probe()
176 rapl_msr_priv->limits[RAPL_DOMAIN_PACKAGE] |= BIT(POWER_LIMIT4); in rapl_msr_probe()
177 rapl_msr_priv->regs[RAPL_DOMAIN_PACKAGE][RAPL_DOMAIN_REG_PL4].msr = in rapl_msr_probe()
182 rapl_msr_priv->control_type = powercap_register_control_type(NULL, "intel-rapl", NULL); in rapl_msr_probe()
183 if (IS_ERR(rapl_msr_priv->control_type)) { in rapl_msr_probe()
185 return PTR_ERR(rapl_msr_priv->control_type); in rapl_msr_probe()
192 rapl_msr_priv->pcap_rapl_online = ret; in rapl_msr_probe()
198 powercap_unregister_control_type(rapl_msr_priv->control_type); in rapl_msr_probe()
204 cpuhp_remove_state(rapl_msr_priv->pcap_rapl_online); in rapl_msr_remove()
205 powercap_unregister_control_type(rapl_msr_priv->control_type); in rapl_msr_remove()
225 MODULE_DESCRIPTION("Driver for Intel RAPL (Running Average Power Limit) control via MSR interface");