intel_pstate.c 31.3 KB
Newer Older
1
/*
2
 * intel_pstate.c: Native P state management for Intel processors
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
 *
 * (C) Copyright 2012 Intel Corporation
 * Author: Dirk Brandewie <dirk.j.brandewie@intel.com>
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; version 2
 * of the License.
 */

#include <linux/kernel.h>
#include <linux/kernel_stat.h>
#include <linux/module.h>
#include <linux/ktime.h>
#include <linux/hrtimer.h>
#include <linux/tick.h>
#include <linux/slab.h>
#include <linux/sched.h>
#include <linux/list.h>
#include <linux/cpu.h>
#include <linux/cpufreq.h>
#include <linux/sysfs.h>
#include <linux/types.h>
#include <linux/fs.h>
#include <linux/debugfs.h>
28
#include <linux/acpi.h>
29
#include <linux/vmalloc.h>
30 31 32 33 34
#include <trace/events/power.h>

#include <asm/div64.h>
#include <asm/msr.h>
#include <asm/cpu_device_id.h>
35
#include <asm/cpufeature.h>
36

37 38 39
#define BYT_RATIOS		0x66a
#define BYT_VIDS		0x66b
#define BYT_TURBO_RATIOS	0x66c
40
#define BYT_TURBO_VIDS		0x66d
41

42
#define FRAC_BITS 8
43 44
#define int_tofp(X) ((int64_t)(X) << FRAC_BITS)
#define fp_toint(X) ((X) >> FRAC_BITS)
45

46 47 48 49 50
static inline int32_t mul_fp(int32_t x, int32_t y)
{
	return ((int64_t)x * (int64_t)y) >> FRAC_BITS;
}

51
static inline int32_t div_fp(s64 x, s64 y)
52
{
53
	return div64_s64((int64_t)x << FRAC_BITS, y);
54 55
}

56 57 58 59 60 61 62 63 64 65 66
static inline int ceiling_fp(int32_t x)
{
	int mask, ret;

	ret = fp_toint(x);
	mask = (1 << FRAC_BITS) - 1;
	if (x & mask)
		ret += 1;
	return ret;
}

67
struct sample {
68
	int32_t core_pct_busy;
69 70
	u64 aperf;
	u64 mperf;
71
	u64 tsc;
72
	int freq;
73
	ktime_t time;
74 75 76 77 78 79
};

struct pstate_data {
	int	current_pstate;
	int	min_pstate;
	int	max_pstate;
80
	int	max_pstate_physical;
81
	int	scaling;
82 83 84
	int	turbo_pstate;
};

85
struct vid_data {
86 87 88
	int min;
	int max;
	int turbo;
89 90 91
	int32_t ratio;
};

92 93 94 95 96 97 98
struct _pid {
	int setpoint;
	int32_t integral;
	int32_t p_gain;
	int32_t i_gain;
	int32_t d_gain;
	int deadband;
99
	int32_t last_err;
100 101 102 103 104 105 106 107
};

struct cpudata {
	int cpu;

	struct timer_list timer;

	struct pstate_data pstate;
108
	struct vid_data vid;
109 110
	struct _pid pid;

111
	ktime_t last_sample_time;
112 113
	u64	prev_aperf;
	u64	prev_mperf;
114
	u64	prev_tsc;
115
	struct sample sample;
116 117 118 119 120 121 122 123 124 125 126 127
};

static struct cpudata **all_cpu_data;
struct pstate_adjust_policy {
	int sample_rate_ms;
	int deadband;
	int setpoint;
	int p_gain_pct;
	int d_gain_pct;
	int i_gain_pct;
};

128 129
struct pstate_funcs {
	int (*get_max)(void);
130
	int (*get_max_physical)(void);
131 132
	int (*get_min)(void);
	int (*get_turbo)(void);
133
	int (*get_scaling)(void);
134 135
	void (*set)(struct cpudata*, int pstate);
	void (*get_vid)(struct cpudata *);
136 137
};

138 139 140
struct cpu_defaults {
	struct pstate_adjust_policy pid_policy;
	struct pstate_funcs funcs;
141 142
};

143 144
static struct pstate_adjust_policy pid_params;
static struct pstate_funcs pstate_funcs;
D
Dirk Brandewie 已提交
145
static int hwp_active;
146

147 148
struct perf_limits {
	int no_turbo;
149
	int turbo_disabled;
150 151 152 153
	int max_perf_pct;
	int min_perf_pct;
	int32_t max_perf;
	int32_t min_perf;
154 155
	int max_policy_pct;
	int max_sysfs_pct;
156 157
	int min_policy_pct;
	int min_sysfs_pct;
158 159 160 161
};

static struct perf_limits limits = {
	.no_turbo = 0,
162
	.turbo_disabled = 0,
163 164 165 166
	.max_perf_pct = 100,
	.max_perf = int_tofp(1),
	.min_perf_pct = 0,
	.min_perf = 0,
167 168
	.max_policy_pct = 100,
	.max_sysfs_pct = 100,
169 170
	.min_policy_pct = 0,
	.min_sysfs_pct = 0,
171 172 173
};

static inline void pid_reset(struct _pid *pid, int setpoint, int busy,
174
			     int deadband, int integral) {
175 176 177
	pid->setpoint = setpoint;
	pid->deadband  = deadband;
	pid->integral  = int_tofp(integral);
178
	pid->last_err  = int_tofp(setpoint) - int_tofp(busy);
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195
}

static inline void pid_p_gain_set(struct _pid *pid, int percent)
{
	pid->p_gain = div_fp(int_tofp(percent), int_tofp(100));
}

static inline void pid_i_gain_set(struct _pid *pid, int percent)
{
	pid->i_gain = div_fp(int_tofp(percent), int_tofp(100));
}

static inline void pid_d_gain_set(struct _pid *pid, int percent)
{
	pid->d_gain = div_fp(int_tofp(percent), int_tofp(100));
}

196
static signed int pid_calc(struct _pid *pid, int32_t busy)
197
{
198
	signed int result;
199 200 201
	int32_t pterm, dterm, fp_error;
	int32_t integral_limit;

202
	fp_error = int_tofp(pid->setpoint) - busy;
203

204
	if (abs(fp_error) <= int_tofp(pid->deadband))
205 206 207 208 209 210
		return 0;

	pterm = mul_fp(pid->p_gain, fp_error);

	pid->integral += fp_error;

211 212 213 214 215 216 217 218
	/*
	 * We limit the integral here so that it will never
	 * get higher than 30.  This prevents it from becoming
	 * too large an input over long periods of time and allows
	 * it to get factored out sooner.
	 *
	 * The value of 30 was chosen through experimentation.
	 */
219 220 221 222 223 224
	integral_limit = int_tofp(30);
	if (pid->integral > integral_limit)
		pid->integral = integral_limit;
	if (pid->integral < -integral_limit)
		pid->integral = -integral_limit;

225 226
	dterm = mul_fp(pid->d_gain, fp_error - pid->last_err);
	pid->last_err = fp_error;
227 228

	result = pterm + mul_fp(pid->integral, pid->i_gain) + dterm;
229
	result = result + (1 << (FRAC_BITS-1));
230 231 232 233 234
	return (signed int)fp_toint(result);
}

static inline void intel_pstate_busy_pid_reset(struct cpudata *cpu)
{
235 236 237
	pid_p_gain_set(&cpu->pid, pid_params.p_gain_pct);
	pid_d_gain_set(&cpu->pid, pid_params.d_gain_pct);
	pid_i_gain_set(&cpu->pid, pid_params.i_gain_pct);
238

239
	pid_reset(&cpu->pid, pid_params.setpoint, 100, pid_params.deadband, 0);
240 241 242 243 244
}

static inline void intel_pstate_reset_all_pid(void)
{
	unsigned int cpu;
245

246 247 248 249 250 251
	for_each_online_cpu(cpu) {
		if (all_cpu_data[cpu])
			intel_pstate_busy_pid_reset(all_cpu_data[cpu]);
	}
}

252 253 254 255 256 257 258 259 260 261 262 263
static inline void update_turbo_state(void)
{
	u64 misc_en;
	struct cpudata *cpu;

	cpu = all_cpu_data[0];
	rdmsrl(MSR_IA32_MISC_ENABLE, misc_en);
	limits.turbo_disabled =
		(misc_en & MSR_IA32_MISC_ENABLE_TURBO_DISABLE ||
		 cpu->pstate.max_pstate == cpu->pstate.turbo_pstate);
}

D
Dirk Brandewie 已提交
264 265
static void intel_pstate_hwp_set(void)
{
266 267 268 269 270 271 272
	int min, hw_min, max, hw_max, cpu, range, adj_range;
	u64 value, cap;

	rdmsrl(MSR_HWP_CAPABILITIES, cap);
	hw_min = HWP_LOWEST_PERF(cap);
	hw_max = HWP_HIGHEST_PERF(cap);
	range = hw_max - hw_min;
D
Dirk Brandewie 已提交
273 274 275 276 277

	get_online_cpus();

	for_each_online_cpu(cpu) {
		rdmsrl_on_cpu(cpu, MSR_HWP_REQUEST, &value);
278 279
		adj_range = limits.min_perf_pct * range / 100;
		min = hw_min + adj_range;
D
Dirk Brandewie 已提交
280 281 282
		value &= ~HWP_MIN_PERF(~0L);
		value |= HWP_MIN_PERF(min);

283 284
		adj_range = limits.max_perf_pct * range / 100;
		max = hw_min + adj_range;
D
Dirk Brandewie 已提交
285
		if (limits.no_turbo) {
286 287 288
			hw_max = HWP_GUARANTEED_PERF(cap);
			if (hw_max < max)
				max = hw_max;
D
Dirk Brandewie 已提交
289 290 291 292 293 294 295 296 297 298
		}

		value &= ~HWP_MAX_PERF(~0L);
		value |= HWP_MAX_PERF(max);
		wrmsrl_on_cpu(cpu, MSR_HWP_REQUEST, value);
	}

	put_online_cpus();
}

299 300 301 302 303 304 305
/************************** debugfs begin ************************/
static int pid_param_set(void *data, u64 val)
{
	*(u32 *)data = val;
	intel_pstate_reset_all_pid();
	return 0;
}
306

307 308 309 310 311
static int pid_param_get(void *data, u64 *val)
{
	*val = *(u32 *)data;
	return 0;
}
312
DEFINE_SIMPLE_ATTRIBUTE(fops_pid_param, pid_param_get, pid_param_set, "%llu\n");
313 314 315 316 317 318 319

struct pid_param {
	char *name;
	void *value;
};

static struct pid_param pid_files[] = {
320 321 322 323 324 325
	{"sample_rate_ms", &pid_params.sample_rate_ms},
	{"d_gain_pct", &pid_params.d_gain_pct},
	{"i_gain_pct", &pid_params.i_gain_pct},
	{"deadband", &pid_params.deadband},
	{"setpoint", &pid_params.setpoint},
	{"p_gain_pct", &pid_params.p_gain_pct},
326 327 328
	{NULL, NULL}
};

329
static void __init intel_pstate_debug_expose_params(void)
330
{
331
	struct dentry *debugfs_parent;
332 333
	int i = 0;

D
Dirk Brandewie 已提交
334 335
	if (hwp_active)
		return;
336 337 338 339 340
	debugfs_parent = debugfs_create_dir("pstate_snb", NULL);
	if (IS_ERR_OR_NULL(debugfs_parent))
		return;
	while (pid_files[i].name) {
		debugfs_create_file(pid_files[i].name, 0660,
341 342
				    debugfs_parent, pid_files[i].value,
				    &fops_pid_param);
343 344 345 346 347 348 349 350 351 352 353 354 355 356
		i++;
	}
}

/************************** debugfs end ************************/

/************************** sysfs begin ************************/
#define show_one(file_name, object)					\
	static ssize_t show_##file_name					\
	(struct kobject *kobj, struct attribute *attr, char *buf)	\
	{								\
		return sprintf(buf, "%u\n", limits.object);		\
	}

357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372
static ssize_t show_turbo_pct(struct kobject *kobj,
				struct attribute *attr, char *buf)
{
	struct cpudata *cpu;
	int total, no_turbo, turbo_pct;
	uint32_t turbo_fp;

	cpu = all_cpu_data[0];

	total = cpu->pstate.turbo_pstate - cpu->pstate.min_pstate + 1;
	no_turbo = cpu->pstate.max_pstate - cpu->pstate.min_pstate + 1;
	turbo_fp = div_fp(int_tofp(no_turbo), int_tofp(total));
	turbo_pct = 100 - fp_toint(mul_fp(turbo_fp, int_tofp(100)));
	return sprintf(buf, "%u\n", turbo_pct);
}

373 374 375 376 377 378 379 380 381 382 383
static ssize_t show_num_pstates(struct kobject *kobj,
				struct attribute *attr, char *buf)
{
	struct cpudata *cpu;
	int total;

	cpu = all_cpu_data[0];
	total = cpu->pstate.turbo_pstate - cpu->pstate.min_pstate + 1;
	return sprintf(buf, "%u\n", total);
}

384 385 386 387 388 389 390 391 392 393 394 395 396 397
static ssize_t show_no_turbo(struct kobject *kobj,
			     struct attribute *attr, char *buf)
{
	ssize_t ret;

	update_turbo_state();
	if (limits.turbo_disabled)
		ret = sprintf(buf, "%u\n", limits.turbo_disabled);
	else
		ret = sprintf(buf, "%u\n", limits.no_turbo);

	return ret;
}

398
static ssize_t store_no_turbo(struct kobject *a, struct attribute *b,
399
			      const char *buf, size_t count)
400 401 402
{
	unsigned int input;
	int ret;
403

404 405 406
	ret = sscanf(buf, "%u", &input);
	if (ret != 1)
		return -EINVAL;
407 408

	update_turbo_state();
409
	if (limits.turbo_disabled) {
410
		pr_warn("intel_pstate: Turbo disabled by BIOS or unavailable on processor\n");
411
		return -EPERM;
412
	}
D
Dirk Brandewie 已提交
413

414 415
	limits.no_turbo = clamp_t(int, input, 0, 1);

D
Dirk Brandewie 已提交
416 417 418
	if (hwp_active)
		intel_pstate_hwp_set();

419 420 421 422
	return count;
}

static ssize_t store_max_perf_pct(struct kobject *a, struct attribute *b,
423
				  const char *buf, size_t count)
424 425 426
{
	unsigned int input;
	int ret;
427

428 429 430 431
	ret = sscanf(buf, "%u", &input);
	if (ret != 1)
		return -EINVAL;

432 433
	limits.max_sysfs_pct = clamp_t(int, input, 0 , 100);
	limits.max_perf_pct = min(limits.max_policy_pct, limits.max_sysfs_pct);
434 435
	limits.max_perf_pct = max(limits.min_policy_pct, limits.max_perf_pct);
	limits.max_perf_pct = max(limits.min_perf_pct, limits.max_perf_pct);
436
	limits.max_perf = div_fp(int_tofp(limits.max_perf_pct), int_tofp(100));
437

D
Dirk Brandewie 已提交
438 439
	if (hwp_active)
		intel_pstate_hwp_set();
440 441 442 443
	return count;
}

static ssize_t store_min_perf_pct(struct kobject *a, struct attribute *b,
444
				  const char *buf, size_t count)
445 446 447
{
	unsigned int input;
	int ret;
448

449 450 451
	ret = sscanf(buf, "%u", &input);
	if (ret != 1)
		return -EINVAL;
452 453 454

	limits.min_sysfs_pct = clamp_t(int, input, 0 , 100);
	limits.min_perf_pct = max(limits.min_policy_pct, limits.min_sysfs_pct);
455 456
	limits.min_perf_pct = min(limits.max_policy_pct, limits.min_perf_pct);
	limits.min_perf_pct = min(limits.max_perf_pct, limits.min_perf_pct);
457 458
	limits.min_perf = div_fp(int_tofp(limits.min_perf_pct), int_tofp(100));

D
Dirk Brandewie 已提交
459 460
	if (hwp_active)
		intel_pstate_hwp_set();
461 462 463 464 465 466 467 468 469
	return count;
}

show_one(max_perf_pct, max_perf_pct);
show_one(min_perf_pct, min_perf_pct);

define_one_global_rw(no_turbo);
define_one_global_rw(max_perf_pct);
define_one_global_rw(min_perf_pct);
470
define_one_global_ro(turbo_pct);
471
define_one_global_ro(num_pstates);
472 473 474 475 476

static struct attribute *intel_pstate_attributes[] = {
	&no_turbo.attr,
	&max_perf_pct.attr,
	&min_perf_pct.attr,
477
	&turbo_pct.attr,
478
	&num_pstates.attr,
479 480 481 482 483 484 485
	NULL
};

static struct attribute_group intel_pstate_attr_group = {
	.attrs = intel_pstate_attributes,
};

486
static void __init intel_pstate_sysfs_expose_params(void)
487
{
488
	struct kobject *intel_pstate_kobject;
489 490 491 492 493
	int rc;

	intel_pstate_kobject = kobject_create_and_add("intel_pstate",
						&cpu_subsys.dev_root->kobj);
	BUG_ON(!intel_pstate_kobject);
494
	rc = sysfs_create_group(intel_pstate_kobject, &intel_pstate_attr_group);
495 496 497
	BUG_ON(rc);
}
/************************** sysfs end ************************/
D
Dirk Brandewie 已提交
498

499
static void intel_pstate_hwp_enable(struct cpudata *cpudata)
D
Dirk Brandewie 已提交
500
{
501
	pr_info("intel_pstate: HWP enabled\n");
D
Dirk Brandewie 已提交
502

503
	wrmsrl_on_cpu(cpudata->cpu, MSR_PM_ENABLE, 0x1);
D
Dirk Brandewie 已提交
504 505
}

506 507 508
static int byt_get_min_pstate(void)
{
	u64 value;
509

510
	rdmsrl(BYT_RATIOS, value);
D
Dirk Brandewie 已提交
511
	return (value >> 8) & 0x7F;
512 513 514 515 516
}

static int byt_get_max_pstate(void)
{
	u64 value;
517

518
	rdmsrl(BYT_RATIOS, value);
D
Dirk Brandewie 已提交
519
	return (value >> 16) & 0x7F;
520
}
521

522 523 524
static int byt_get_turbo_pstate(void)
{
	u64 value;
525

526
	rdmsrl(BYT_TURBO_RATIOS, value);
D
Dirk Brandewie 已提交
527
	return value & 0x7F;
528 529
}

530 531 532 533 534 535
static void byt_set_pstate(struct cpudata *cpudata, int pstate)
{
	u64 val;
	int32_t vid_fp;
	u32 vid;

536
	val = (u64)pstate << 8;
537
	if (limits.no_turbo && !limits.turbo_disabled)
538 539 540 541 542 543 544
		val |= (u64)1 << 32;

	vid_fp = cpudata->vid.min + mul_fp(
		int_tofp(pstate - cpudata->pstate.min_pstate),
		cpudata->vid.ratio);

	vid_fp = clamp_t(int32_t, vid_fp, cpudata->vid.min, cpudata->vid.max);
545
	vid = ceiling_fp(vid_fp);
546

547 548 549
	if (pstate > cpudata->pstate.max_pstate)
		vid = cpudata->vid.turbo;

550 551
	val |= vid;

552
	wrmsrl_on_cpu(cpudata->cpu, MSR_IA32_PERF_CTL, val);
553 554
}

555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570
#define BYT_BCLK_FREQS 5
static int byt_freq_table[BYT_BCLK_FREQS] = { 833, 1000, 1333, 1167, 800};

static int byt_get_scaling(void)
{
	u64 value;
	int i;

	rdmsrl(MSR_FSB_FREQ, value);
	i = value & 0x3;

	BUG_ON(i > BYT_BCLK_FREQS);

	return byt_freq_table[i] * 100;
}

571 572 573 574 575
static void byt_get_vid(struct cpudata *cpudata)
{
	u64 value;

	rdmsrl(BYT_VIDS, value);
D
Dirk Brandewie 已提交
576 577
	cpudata->vid.min = int_tofp((value >> 8) & 0x7f);
	cpudata->vid.max = int_tofp((value >> 16) & 0x7f);
578 579 580 581
	cpudata->vid.ratio = div_fp(
		cpudata->vid.max - cpudata->vid.min,
		int_tofp(cpudata->pstate.max_pstate -
			cpudata->pstate.min_pstate));
582 583 584

	rdmsrl(BYT_TURBO_VIDS, value);
	cpudata->vid.turbo = value & 0x7f;
585 586
}

587
static int core_get_min_pstate(void)
588 589
{
	u64 value;
590

591
	rdmsrl(MSR_PLATFORM_INFO, value);
592 593 594
	return (value >> 40) & 0xFF;
}

595 596 597 598 599 600 601 602
static int core_get_max_pstate_physical(void)
{
	u64 value;

	rdmsrl(MSR_PLATFORM_INFO, value);
	return (value >> 8) & 0xFF;
}

603
static int core_get_max_pstate(void)
604
{
605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637
	u64 tar;
	u64 plat_info;
	int max_pstate;
	int err;

	rdmsrl(MSR_PLATFORM_INFO, plat_info);
	max_pstate = (plat_info >> 8) & 0xFF;

	err = rdmsrl_safe(MSR_TURBO_ACTIVATION_RATIO, &tar);
	if (!err) {
		/* Do some sanity checking for safety */
		if (plat_info & 0x600000000) {
			u64 tdp_ctrl;
			u64 tdp_ratio;
			int tdp_msr;

			err = rdmsrl_safe(MSR_CONFIG_TDP_CONTROL, &tdp_ctrl);
			if (err)
				goto skip_tar;

			tdp_msr = MSR_CONFIG_TDP_NOMINAL + tdp_ctrl;
			err = rdmsrl_safe(tdp_msr, &tdp_ratio);
			if (err)
				goto skip_tar;

			if (tdp_ratio - 1 == tar) {
				max_pstate = tar;
				pr_debug("max_pstate=TAC %x\n", max_pstate);
			} else {
				goto skip_tar;
			}
		}
	}
638

639 640
skip_tar:
	return max_pstate;
641 642
}

643
static int core_get_turbo_pstate(void)
644 645 646
{
	u64 value;
	int nont, ret;
647

648
	rdmsrl(MSR_NHM_TURBO_RATIO_LIMIT, value);
649
	nont = core_get_max_pstate();
650
	ret = (value) & 255;
651 652 653 654 655
	if (ret <= nont)
		ret = nont;
	return ret;
}

656 657 658 659 660
static inline int core_get_scaling(void)
{
	return 100000;
}

661
static void core_set_pstate(struct cpudata *cpudata, int pstate)
662 663 664
{
	u64 val;

665
	val = (u64)pstate << 8;
666
	if (limits.no_turbo && !limits.turbo_disabled)
667 668
		val |= (u64)1 << 32;

669
	wrmsrl_on_cpu(cpudata->cpu, MSR_IA32_PERF_CTL, val);
670 671
}

672 673 674 675 676 677 678 679 680 681 682 683 684
static int knl_get_turbo_pstate(void)
{
	u64 value;
	int nont, ret;

	rdmsrl(MSR_NHM_TURBO_RATIO_LIMIT, value);
	nont = core_get_max_pstate();
	ret = (((value) >> 8) & 0xFF);
	if (ret <= nont)
		ret = nont;
	return ret;
}

685 686 687 688 689 690 691 692 693 694 695
static struct cpu_defaults core_params = {
	.pid_policy = {
		.sample_rate_ms = 10,
		.deadband = 0,
		.setpoint = 97,
		.p_gain_pct = 20,
		.d_gain_pct = 0,
		.i_gain_pct = 0,
	},
	.funcs = {
		.get_max = core_get_max_pstate,
696
		.get_max_physical = core_get_max_pstate_physical,
697 698
		.get_min = core_get_min_pstate,
		.get_turbo = core_get_turbo_pstate,
699
		.get_scaling = core_get_scaling,
700 701 702 703
		.set = core_set_pstate,
	},
};

704 705 706 707
static struct cpu_defaults byt_params = {
	.pid_policy = {
		.sample_rate_ms = 10,
		.deadband = 0,
708
		.setpoint = 60,
709 710 711 712 713 714
		.p_gain_pct = 14,
		.d_gain_pct = 0,
		.i_gain_pct = 4,
	},
	.funcs = {
		.get_max = byt_get_max_pstate,
715
		.get_max_physical = byt_get_max_pstate,
716
		.get_min = byt_get_min_pstate,
717
		.get_turbo = byt_get_turbo_pstate,
718
		.set = byt_set_pstate,
719
		.get_scaling = byt_get_scaling,
720
		.get_vid = byt_get_vid,
721 722 723
	},
};

724 725 726 727 728 729 730 731 732 733 734
static struct cpu_defaults knl_params = {
	.pid_policy = {
		.sample_rate_ms = 10,
		.deadband = 0,
		.setpoint = 97,
		.p_gain_pct = 20,
		.d_gain_pct = 0,
		.i_gain_pct = 0,
	},
	.funcs = {
		.get_max = core_get_max_pstate,
735
		.get_max_physical = core_get_max_pstate_physical,
736 737
		.get_min = core_get_min_pstate,
		.get_turbo = knl_get_turbo_pstate,
738
		.get_scaling = core_get_scaling,
739 740 741 742
		.set = core_set_pstate,
	},
};

743 744 745
static void intel_pstate_get_min_max(struct cpudata *cpu, int *min, int *max)
{
	int max_perf = cpu->pstate.turbo_pstate;
746
	int max_perf_adj;
747
	int min_perf;
748

749
	if (limits.no_turbo || limits.turbo_disabled)
750 751
		max_perf = cpu->pstate.max_pstate;

752 753 754 755 756
	/*
	 * performance can be limited by user through sysfs, by cpufreq
	 * policy, or by cpu specific default values determined through
	 * experimentation.
	 */
757 758
	max_perf_adj = fp_toint(mul_fp(int_tofp(max_perf), limits.max_perf));
	*max = clamp_t(int, max_perf_adj,
759 760 761
			cpu->pstate.min_pstate, cpu->pstate.turbo_pstate);

	min_perf = fp_toint(mul_fp(int_tofp(max_perf), limits.min_perf));
762
	*min = clamp_t(int, min_perf, cpu->pstate.min_pstate, max_perf);
763 764
}

765
static void intel_pstate_set_pstate(struct cpudata *cpu, int pstate, bool force)
766 767 768
{
	int max_perf, min_perf;

769 770
	if (force) {
		update_turbo_state();
771

772
		intel_pstate_get_min_max(cpu, &min_perf, &max_perf);
773

774
		pstate = clamp_t(int, pstate, min_perf, max_perf);
775

776 777 778
		if (pstate == cpu->pstate.current_pstate)
			return;
	}
779
	trace_cpu_frequency(pstate * cpu->pstate.scaling, cpu->cpu);
780

781 782
	cpu->pstate.current_pstate = pstate;

783
	pstate_funcs.set(cpu, pstate);
784 785 786 787
}

static void intel_pstate_get_cpu_pstates(struct cpudata *cpu)
{
788 789
	cpu->pstate.min_pstate = pstate_funcs.get_min();
	cpu->pstate.max_pstate = pstate_funcs.get_max();
790
	cpu->pstate.max_pstate_physical = pstate_funcs.get_max_physical();
791
	cpu->pstate.turbo_pstate = pstate_funcs.get_turbo();
792
	cpu->pstate.scaling = pstate_funcs.get_scaling();
793

794 795
	if (pstate_funcs.get_vid)
		pstate_funcs.get_vid(cpu);
796
	intel_pstate_set_pstate(cpu, cpu->pstate.min_pstate, false);
797 798
}

799
static inline void intel_pstate_calc_busy(struct cpudata *cpu)
800
{
801
	struct sample *sample = &cpu->sample;
802
	int64_t core_pct;
803

804
	core_pct = int_tofp(sample->aperf) * int_tofp(100);
805
	core_pct = div64_u64(core_pct, int_tofp(sample->mperf));
806

807
	sample->freq = fp_toint(
808
		mul_fp(int_tofp(
809 810
			cpu->pstate.max_pstate_physical *
			cpu->pstate.scaling / 100),
811
			core_pct));
812

813
	sample->core_pct_busy = (int32_t)core_pct;
814 815 816 817 818
}

static inline void intel_pstate_sample(struct cpudata *cpu)
{
	u64 aperf, mperf;
819
	unsigned long flags;
820
	u64 tsc;
821

822
	local_irq_save(flags);
823 824
	rdmsrl(MSR_IA32_APERF, aperf);
	rdmsrl(MSR_IA32_MPERF, mperf);
825
	tsc = rdtsc();
826
	local_irq_restore(flags);
827

828 829
	cpu->last_sample_time = cpu->sample.time;
	cpu->sample.time = ktime_get();
830 831
	cpu->sample.aperf = aperf;
	cpu->sample.mperf = mperf;
832
	cpu->sample.tsc =  tsc;
833 834
	cpu->sample.aperf -= cpu->prev_aperf;
	cpu->sample.mperf -= cpu->prev_mperf;
835
	cpu->sample.tsc -= cpu->prev_tsc;
836

837
	intel_pstate_calc_busy(cpu);
838 839 840

	cpu->prev_aperf = aperf;
	cpu->prev_mperf = mperf;
841
	cpu->prev_tsc = tsc;
842 843
}

D
Dirk Brandewie 已提交
844 845 846 847 848 849 850 851
static inline void intel_hwp_set_sample_time(struct cpudata *cpu)
{
	int delay;

	delay = msecs_to_jiffies(50);
	mod_timer_pinned(&cpu->timer, jiffies + delay);
}

852 853
static inline void intel_pstate_set_sample_time(struct cpudata *cpu)
{
854
	int delay;
855

856
	delay = msecs_to_jiffies(pid_params.sample_rate_ms);
857 858 859
	mod_timer_pinned(&cpu->timer, jiffies + delay);
}

860
static inline int32_t intel_pstate_get_scaled_busy(struct cpudata *cpu)
861
{
862
	int32_t core_busy, max_pstate, current_pstate, sample_ratio;
863
	s64 duration_us;
864
	u32 sample_time;
865

866 867 868 869 870 871 872 873 874 875 876
	/*
	 * core_busy is the ratio of actual performance to max
	 * max_pstate is the max non turbo pstate available
	 * current_pstate was the pstate that was requested during
	 * 	the last sample period.
	 *
	 * We normalize core_busy, which was our actual percent
	 * performance to what we requested during the last sample
	 * period. The result will be a percentage of busy at a
	 * specified pstate.
	 */
877
	core_busy = cpu->sample.core_pct_busy;
878
	max_pstate = int_tofp(cpu->pstate.max_pstate_physical);
879
	current_pstate = int_tofp(cpu->pstate.current_pstate);
880
	core_busy = mul_fp(core_busy, div_fp(max_pstate, current_pstate));
881

882 883 884 885 886 887 888
	/*
	 * Since we have a deferred timer, it will not fire unless
	 * we are in C0.  So, determine if the actual elapsed time
	 * is significantly greater (3x) than our sample interval.  If it
	 * is, then we were idle for a long enough period of time
	 * to adjust our busyness.
	 */
889
	sample_time = pid_params.sample_rate_ms  * USEC_PER_MSEC;
890 891
	duration_us = ktime_us_delta(cpu->sample.time,
				     cpu->last_sample_time);
892 893
	if (duration_us > sample_time * 3) {
		sample_ratio = div_fp(int_tofp(sample_time),
894
				      int_tofp(duration_us));
895 896 897
		core_busy = mul_fp(core_busy, sample_ratio);
	}

898
	return core_busy;
899 900 901 902
}

static inline void intel_pstate_adjust_busy_pstate(struct cpudata *cpu)
{
903
	int32_t busy_scaled;
904
	struct _pid *pid;
905
	signed int ctl;
906 907 908 909
	int from;
	struct sample *sample;

	from = cpu->pstate.current_pstate;
910 911 912 913 914 915

	pid = &cpu->pid;
	busy_scaled = intel_pstate_get_scaled_busy(cpu);

	ctl = pid_calc(pid, busy_scaled);

916
	/* Negative values of ctl increase the pstate and vice versa */
917
	intel_pstate_set_pstate(cpu, cpu->pstate.current_pstate - ctl, true);
918 919 920 921 922 923 924 925 926 927

	sample = &cpu->sample;
	trace_pstate_sample(fp_toint(sample->core_pct_busy),
		fp_toint(busy_scaled),
		from,
		cpu->pstate.current_pstate,
		sample->mperf,
		sample->aperf,
		sample->tsc,
		sample->freq);
928 929
}

D
Dirk Brandewie 已提交
930 931 932 933 934 935 936 937
static void intel_hwp_timer_func(unsigned long __data)
{
	struct cpudata *cpu = (struct cpudata *) __data;

	intel_pstate_sample(cpu);
	intel_hwp_set_sample_time(cpu);
}

938 939 940 941 942
static void intel_pstate_timer_func(unsigned long __data)
{
	struct cpudata *cpu = (struct cpudata *) __data;

	intel_pstate_sample(cpu);
943

944
	intel_pstate_adjust_busy_pstate(cpu);
945

946 947 948 949
	intel_pstate_set_sample_time(cpu);
}

#define ICPU(model, policy) \
950 951
	{ X86_VENDOR_INTEL, 6, model, X86_FEATURE_APERFMPERF,\
			(unsigned long)&policy }
952 953

static const struct x86_cpu_id intel_pstate_cpu_ids[] = {
954 955
	ICPU(0x2a, core_params),
	ICPU(0x2d, core_params),
956
	ICPU(0x37, byt_params),
957 958
	ICPU(0x3a, core_params),
	ICPU(0x3c, core_params),
959
	ICPU(0x3d, core_params),
960 961 962 963
	ICPU(0x3e, core_params),
	ICPU(0x3f, core_params),
	ICPU(0x45, core_params),
	ICPU(0x46, core_params),
964
	ICPU(0x47, core_params),
965
	ICPU(0x4c, byt_params),
966
	ICPU(0x4e, core_params),
967
	ICPU(0x4f, core_params),
968
	ICPU(0x5e, core_params),
969
	ICPU(0x56, core_params),
970
	ICPU(0x57, knl_params),
971 972 973 974
	{}
};
MODULE_DEVICE_TABLE(x86cpu, intel_pstate_cpu_ids);

D
Dirk Brandewie 已提交
975 976 977 978 979
static const struct x86_cpu_id intel_pstate_cpu_oob_ids[] = {
	ICPU(0x56, core_params),
	{}
};

980 981 982 983
static int intel_pstate_init_cpu(unsigned int cpunum)
{
	struct cpudata *cpu;

984 985 986
	if (!all_cpu_data[cpunum])
		all_cpu_data[cpunum] = kzalloc(sizeof(struct cpudata),
					       GFP_KERNEL);
987 988 989 990 991 992
	if (!all_cpu_data[cpunum])
		return -ENOMEM;

	cpu = all_cpu_data[cpunum];

	cpu->cpu = cpunum;
993 994 995 996

	if (hwp_active)
		intel_pstate_hwp_enable(cpu);

997
	intel_pstate_get_cpu_pstates(cpu);
998

999
	init_timer_deferrable(&cpu->timer);
1000
	cpu->timer.data = (unsigned long)cpu;
1001
	cpu->timer.expires = jiffies + HZ/100;
D
Dirk Brandewie 已提交
1002 1003 1004 1005 1006 1007

	if (!hwp_active)
		cpu->timer.function = intel_pstate_timer_func;
	else
		cpu->timer.function = intel_hwp_timer_func;

1008 1009 1010 1011 1012
	intel_pstate_busy_pid_reset(cpu);
	intel_pstate_sample(cpu);

	add_timer_on(&cpu->timer, cpunum);

1013
	pr_debug("intel_pstate: controlling: cpu %d\n", cpunum);
1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025

	return 0;
}

static unsigned int intel_pstate_get(unsigned int cpu_num)
{
	struct sample *sample;
	struct cpudata *cpu;

	cpu = all_cpu_data[cpu_num];
	if (!cpu)
		return 0;
1026
	sample = &cpu->sample;
1027 1028 1029 1030 1031
	return sample->freq;
}

static int intel_pstate_set_policy(struct cpufreq_policy *policy)
{
1032 1033 1034
	if (!policy->cpuinfo.max_freq)
		return -ENODEV;

1035 1036
	if (policy->policy == CPUFREQ_POLICY_PERFORMANCE &&
	    policy->max >= policy->cpuinfo.max_freq) {
1037
		limits.min_policy_pct = 100;
1038 1039
		limits.min_perf_pct = 100;
		limits.min_perf = int_tofp(1);
1040
		limits.max_policy_pct = 100;
1041 1042
		limits.max_perf_pct = 100;
		limits.max_perf = int_tofp(1);
1043
		limits.no_turbo = 0;
1044
		return 0;
1045
	}
D
Dirk Brandewie 已提交
1046

1047 1048
	limits.min_policy_pct = (policy->min * 100) / policy->cpuinfo.max_freq;
	limits.min_policy_pct = clamp_t(int, limits.min_policy_pct, 0 , 100);
1049
	limits.max_policy_pct = (policy->max * 100) / policy->cpuinfo.max_freq;
1050
	limits.max_policy_pct = clamp_t(int, limits.max_policy_pct, 0 , 100);
1051 1052 1053 1054

	/* Normalize user input to [min_policy_pct, max_policy_pct] */
	limits.min_perf_pct = max(limits.min_policy_pct, limits.min_sysfs_pct);
	limits.min_perf_pct = min(limits.max_policy_pct, limits.min_perf_pct);
1055
	limits.max_perf_pct = min(limits.max_policy_pct, limits.max_sysfs_pct);
1056 1057 1058 1059 1060 1061
	limits.max_perf_pct = max(limits.min_policy_pct, limits.max_perf_pct);

	/* Make sure min_perf_pct <= max_perf_pct */
	limits.min_perf_pct = min(limits.max_perf_pct, limits.min_perf_pct);

	limits.min_perf = div_fp(int_tofp(limits.min_perf_pct), int_tofp(100));
1062
	limits.max_perf = div_fp(int_tofp(limits.max_perf_pct), int_tofp(100));
1063

D
Dirk Brandewie 已提交
1064 1065 1066
	if (hwp_active)
		intel_pstate_hwp_set();

1067 1068 1069 1070 1071
	return 0;
}

static int intel_pstate_verify_policy(struct cpufreq_policy *policy)
{
1072
	cpufreq_verify_within_cpu_limits(policy);
1073

1074
	if (policy->policy != CPUFREQ_POLICY_POWERSAVE &&
1075
	    policy->policy != CPUFREQ_POLICY_PERFORMANCE)
1076 1077 1078 1079 1080
		return -EINVAL;

	return 0;
}

1081
static void intel_pstate_stop_cpu(struct cpufreq_policy *policy)
1082
{
1083 1084
	int cpu_num = policy->cpu;
	struct cpudata *cpu = all_cpu_data[cpu_num];
1085

1086
	pr_debug("intel_pstate: CPU %d exiting\n", cpu_num);
1087

1088
	del_timer_sync(&all_cpu_data[cpu_num]->timer);
D
Dirk Brandewie 已提交
1089 1090 1091
	if (hwp_active)
		return;

1092
	intel_pstate_set_pstate(cpu, cpu->pstate.min_pstate, false);
1093 1094
}

1095
static int intel_pstate_cpu_init(struct cpufreq_policy *policy)
1096 1097
{
	struct cpudata *cpu;
1098
	int rc;
1099 1100 1101 1102 1103 1104 1105

	rc = intel_pstate_init_cpu(policy->cpu);
	if (rc)
		return rc;

	cpu = all_cpu_data[policy->cpu];

1106
	if (limits.min_perf_pct == 100 && limits.max_perf_pct == 100)
1107 1108 1109 1110
		policy->policy = CPUFREQ_POLICY_PERFORMANCE;
	else
		policy->policy = CPUFREQ_POLICY_POWERSAVE;

1111 1112
	policy->min = cpu->pstate.min_pstate * cpu->pstate.scaling;
	policy->max = cpu->pstate.turbo_pstate * cpu->pstate.scaling;
1113 1114

	/* cpuinfo and default policy values */
1115 1116 1117
	policy->cpuinfo.min_freq = cpu->pstate.min_pstate * cpu->pstate.scaling;
	policy->cpuinfo.max_freq =
		cpu->pstate.turbo_pstate * cpu->pstate.scaling;
1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129
	policy->cpuinfo.transition_latency = CPUFREQ_ETERNAL;
	cpumask_set_cpu(policy->cpu, policy->cpus);

	return 0;
}

static struct cpufreq_driver intel_pstate_driver = {
	.flags		= CPUFREQ_CONST_LOOPS,
	.verify		= intel_pstate_verify_policy,
	.setpolicy	= intel_pstate_set_policy,
	.get		= intel_pstate_get,
	.init		= intel_pstate_cpu_init,
1130
	.stop_cpu	= intel_pstate_stop_cpu,
1131 1132 1133
	.name		= "intel_pstate",
};

1134
static int __initdata no_load;
D
Dirk Brandewie 已提交
1135
static int __initdata no_hwp;
1136
static int __initdata hwp_only;
1137
static unsigned int force_load;
1138

1139 1140
static int intel_pstate_msrs_not_valid(void)
{
1141
	if (!pstate_funcs.get_max() ||
1142 1143
	    !pstate_funcs.get_min() ||
	    !pstate_funcs.get_turbo())
1144 1145 1146 1147
		return -ENODEV;

	return 0;
}
1148

1149
static void copy_pid_params(struct pstate_adjust_policy *policy)
1150 1151 1152 1153 1154 1155 1156 1157 1158
{
	pid_params.sample_rate_ms = policy->sample_rate_ms;
	pid_params.p_gain_pct = policy->p_gain_pct;
	pid_params.i_gain_pct = policy->i_gain_pct;
	pid_params.d_gain_pct = policy->d_gain_pct;
	pid_params.deadband = policy->deadband;
	pid_params.setpoint = policy->setpoint;
}

1159
static void copy_cpu_funcs(struct pstate_funcs *funcs)
1160 1161
{
	pstate_funcs.get_max   = funcs->get_max;
1162
	pstate_funcs.get_max_physical = funcs->get_max_physical;
1163 1164
	pstate_funcs.get_min   = funcs->get_min;
	pstate_funcs.get_turbo = funcs->get_turbo;
1165
	pstate_funcs.get_scaling = funcs->get_scaling;
1166
	pstate_funcs.set       = funcs->set;
1167
	pstate_funcs.get_vid   = funcs->get_vid;
1168 1169
}

1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201
#if IS_ENABLED(CONFIG_ACPI)
#include <acpi/processor.h>

static bool intel_pstate_no_acpi_pss(void)
{
	int i;

	for_each_possible_cpu(i) {
		acpi_status status;
		union acpi_object *pss;
		struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
		struct acpi_processor *pr = per_cpu(processors, i);

		if (!pr)
			continue;

		status = acpi_evaluate_object(pr->handle, "_PSS", NULL, &buffer);
		if (ACPI_FAILURE(status))
			continue;

		pss = buffer.pointer;
		if (pss && pss->type == ACPI_TYPE_PACKAGE) {
			kfree(pss);
			return false;
		}

		kfree(pss);
	}

	return true;
}

1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221
static bool intel_pstate_has_acpi_ppc(void)
{
	int i;

	for_each_possible_cpu(i) {
		struct acpi_processor *pr = per_cpu(processors, i);

		if (!pr)
			continue;
		if (acpi_has_method(pr->handle, "_PPC"))
			return true;
	}
	return false;
}

enum {
	PSS,
	PPC,
};

1222 1223 1224 1225
struct hw_vendor_info {
	u16  valid;
	char oem_id[ACPI_OEM_ID_SIZE];
	char oem_table_id[ACPI_OEM_TABLE_ID_SIZE];
1226
	int  oem_pwr_table;
1227 1228 1229 1230
};

/* Hardware vendor-specific info that has its own power management modes */
static struct hw_vendor_info vendor_info[] = {
1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241
	{1, "HP    ", "ProLiant", PSS},
	{1, "ORACLE", "X4-2    ", PPC},
	{1, "ORACLE", "X4-2L   ", PPC},
	{1, "ORACLE", "X4-2B   ", PPC},
	{1, "ORACLE", "X3-2    ", PPC},
	{1, "ORACLE", "X3-2L   ", PPC},
	{1, "ORACLE", "X3-2B   ", PPC},
	{1, "ORACLE", "X4470M2 ", PPC},
	{1, "ORACLE", "X4270M3 ", PPC},
	{1, "ORACLE", "X4270M2 ", PPC},
	{1, "ORACLE", "X4170M2 ", PPC},
1242 1243 1244 1245
	{1, "ORACLE", "X4170 M3", PPC},
	{1, "ORACLE", "X4275 M3", PPC},
	{1, "ORACLE", "X6-2    ", PPC},
	{1, "ORACLE", "Sudbury ", PPC},
1246 1247 1248 1249 1250 1251 1252
	{0, "", ""},
};

static bool intel_pstate_platform_pwr_mgmt_exists(void)
{
	struct acpi_table_header hdr;
	struct hw_vendor_info *v_info;
D
Dirk Brandewie 已提交
1253 1254 1255 1256 1257 1258 1259 1260 1261
	const struct x86_cpu_id *id;
	u64 misc_pwr;

	id = x86_match_cpu(intel_pstate_cpu_oob_ids);
	if (id) {
		rdmsrl(MSR_MISC_PWR_MGMT, misc_pwr);
		if ( misc_pwr & (1 << 8))
			return true;
	}
1262

1263 1264
	if (acpi_disabled ||
	    ACPI_FAILURE(acpi_get_table_header(ACPI_SIG_FADT, 0, &hdr)))
1265 1266 1267
		return false;

	for (v_info = vendor_info; v_info->valid; v_info++) {
1268
		if (!strncmp(hdr.oem_id, v_info->oem_id, ACPI_OEM_ID_SIZE) &&
1269 1270 1271 1272 1273 1274
			!strncmp(hdr.oem_table_id, v_info->oem_table_id,
						ACPI_OEM_TABLE_ID_SIZE))
			switch (v_info->oem_pwr_table) {
			case PSS:
				return intel_pstate_no_acpi_pss();
			case PPC:
1275 1276
				return intel_pstate_has_acpi_ppc() &&
					(!force_load);
1277
			}
1278 1279 1280 1281 1282 1283
	}

	return false;
}
#else /* CONFIG_ACPI not enabled */
static inline bool intel_pstate_platform_pwr_mgmt_exists(void) { return false; }
1284
static inline bool intel_pstate_has_acpi_ppc(void) { return false; }
1285 1286
#endif /* CONFIG_ACPI */

1287 1288
static int __init intel_pstate_init(void)
{
1289
	int cpu, rc = 0;
1290
	const struct x86_cpu_id *id;
1291
	struct cpu_defaults *cpu_def;
1292

1293 1294 1295
	if (no_load)
		return -ENODEV;

1296 1297 1298 1299
	id = x86_match_cpu(intel_pstate_cpu_ids);
	if (!id)
		return -ENODEV;

1300 1301 1302 1303 1304 1305 1306
	/*
	 * The Intel pstate driver will be ignored if the platform
	 * firmware has its own power management modes.
	 */
	if (intel_pstate_platform_pwr_mgmt_exists())
		return -ENODEV;

1307
	cpu_def = (struct cpu_defaults *)id->driver_data;
1308

1309 1310
	copy_pid_params(&cpu_def->pid_policy);
	copy_cpu_funcs(&cpu_def->funcs);
1311

1312 1313 1314
	if (intel_pstate_msrs_not_valid())
		return -ENODEV;

1315 1316
	pr_info("Intel P-state driver initializing.\n");

1317
	all_cpu_data = vzalloc(sizeof(void *) * num_possible_cpus());
1318 1319 1320
	if (!all_cpu_data)
		return -ENOMEM;

1321
	if (static_cpu_has_safe(X86_FEATURE_HWP) && !no_hwp)
1322
		hwp_active++;
D
Dirk Brandewie 已提交
1323

1324 1325 1326
	if (!hwp_active && hwp_only)
		goto out;

1327 1328 1329 1330 1331 1332
	rc = cpufreq_register_driver(&intel_pstate_driver);
	if (rc)
		goto out;

	intel_pstate_debug_expose_params();
	intel_pstate_sysfs_expose_params();
1333

1334 1335
	return rc;
out:
1336 1337 1338 1339 1340 1341 1342 1343 1344 1345
	get_online_cpus();
	for_each_online_cpu(cpu) {
		if (all_cpu_data[cpu]) {
			del_timer_sync(&all_cpu_data[cpu]->timer);
			kfree(all_cpu_data[cpu]);
		}
	}

	put_online_cpus();
	vfree(all_cpu_data);
1346 1347 1348 1349
	return -ENODEV;
}
device_initcall(intel_pstate_init);

1350 1351 1352 1353 1354 1355 1356
static int __init intel_pstate_setup(char *str)
{
	if (!str)
		return -EINVAL;

	if (!strcmp(str, "disable"))
		no_load = 1;
D
Dirk Brandewie 已提交
1357 1358
	if (!strcmp(str, "no_hwp"))
		no_hwp = 1;
1359 1360
	if (!strcmp(str, "force"))
		force_load = 1;
1361 1362
	if (!strcmp(str, "hwp_only"))
		hwp_only = 1;
1363 1364 1365 1366
	return 0;
}
early_param("intel_pstate", intel_pstate_setup);

1367 1368 1369
MODULE_AUTHOR("Dirk Brandewie <dirk.j.brandewie@intel.com>");
MODULE_DESCRIPTION("'intel_pstate' - P state driver Intel Core processors");
MODULE_LICENSE("GPL");