cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

processor_throttling.c (30948B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 * processor_throttling.c - Throttling submodule of the ACPI processor driver
      4 *
      5 *  Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com>
      6 *  Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
      7 *  Copyright (C) 2004       Dominik Brodowski <linux@brodo.de>
      8 *  Copyright (C) 2004  Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
      9 *                      - Added processor hotplug support
     10 */
     11
     12#define pr_fmt(fmt) "ACPI: " fmt
     13
     14#include <linux/kernel.h>
     15#include <linux/module.h>
     16#include <linux/slab.h>
     17#include <linux/init.h>
     18#include <linux/sched.h>
     19#include <linux/cpufreq.h>
     20#include <linux/acpi.h>
     21#include <acpi/processor.h>
     22#include <asm/io.h>
     23#include <linux/uaccess.h>
     24
     25/* ignore_tpc:
     26 *  0 -> acpi processor driver doesn't ignore _TPC values
     27 *  1 -> acpi processor driver ignores _TPC values
     28 */
     29static int ignore_tpc;
     30module_param(ignore_tpc, int, 0644);
     31MODULE_PARM_DESC(ignore_tpc, "Disable broken BIOS _TPC throttling support");
     32
     33struct throttling_tstate {
     34	unsigned int cpu;		/* cpu nr */
     35	int target_state;		/* target T-state */
     36};
     37
     38struct acpi_processor_throttling_arg {
     39	struct acpi_processor *pr;
     40	int target_state;
     41	bool force;
     42};
     43
     44#define THROTTLING_PRECHANGE       (1)
     45#define THROTTLING_POSTCHANGE      (2)
     46
     47static int acpi_processor_get_throttling(struct acpi_processor *pr);
     48static int __acpi_processor_set_throttling(struct acpi_processor *pr,
     49					   int state, bool force, bool direct);
     50
     51static int acpi_processor_update_tsd_coord(void)
     52{
     53	int count, count_target;
     54	int retval = 0;
     55	unsigned int i, j;
     56	cpumask_var_t covered_cpus;
     57	struct acpi_processor *pr, *match_pr;
     58	struct acpi_tsd_package *pdomain, *match_pdomain;
     59	struct acpi_processor_throttling *pthrottling, *match_pthrottling;
     60
     61	if (!zalloc_cpumask_var(&covered_cpus, GFP_KERNEL))
     62		return -ENOMEM;
     63
     64	/*
     65	 * Now that we have _TSD data from all CPUs, lets setup T-state
     66	 * coordination between all CPUs.
     67	 */
     68	for_each_possible_cpu(i) {
     69		pr = per_cpu(processors, i);
     70		if (!pr)
     71			continue;
     72
     73		/* Basic validity check for domain info */
     74		pthrottling = &(pr->throttling);
     75
     76		/*
     77		 * If tsd package for one cpu is invalid, the coordination
     78		 * among all CPUs is thought as invalid.
     79		 * Maybe it is ugly.
     80		 */
     81		if (!pthrottling->tsd_valid_flag) {
     82			retval = -EINVAL;
     83			break;
     84		}
     85	}
     86	if (retval)
     87		goto err_ret;
     88
     89	for_each_possible_cpu(i) {
     90		pr = per_cpu(processors, i);
     91		if (!pr)
     92			continue;
     93
     94		if (cpumask_test_cpu(i, covered_cpus))
     95			continue;
     96		pthrottling = &pr->throttling;
     97
     98		pdomain = &(pthrottling->domain_info);
     99		cpumask_set_cpu(i, pthrottling->shared_cpu_map);
    100		cpumask_set_cpu(i, covered_cpus);
    101		/*
    102		 * If the number of processor in the TSD domain is 1, it is
    103		 * unnecessary to parse the coordination for this CPU.
    104		 */
    105		if (pdomain->num_processors <= 1)
    106			continue;
    107
    108		/* Validate the Domain info */
    109		count_target = pdomain->num_processors;
    110		count = 1;
    111
    112		for_each_possible_cpu(j) {
    113			if (i == j)
    114				continue;
    115
    116			match_pr = per_cpu(processors, j);
    117			if (!match_pr)
    118				continue;
    119
    120			match_pthrottling = &(match_pr->throttling);
    121			match_pdomain = &(match_pthrottling->domain_info);
    122			if (match_pdomain->domain != pdomain->domain)
    123				continue;
    124
    125			/* Here i and j are in the same domain.
    126			 * If two TSD packages have the same domain, they
    127			 * should have the same num_porcessors and
    128			 * coordination type. Otherwise it will be regarded
    129			 * as illegal.
    130			 */
    131			if (match_pdomain->num_processors != count_target) {
    132				retval = -EINVAL;
    133				goto err_ret;
    134			}
    135
    136			if (pdomain->coord_type != match_pdomain->coord_type) {
    137				retval = -EINVAL;
    138				goto err_ret;
    139			}
    140
    141			cpumask_set_cpu(j, covered_cpus);
    142			cpumask_set_cpu(j, pthrottling->shared_cpu_map);
    143			count++;
    144		}
    145		for_each_possible_cpu(j) {
    146			if (i == j)
    147				continue;
    148
    149			match_pr = per_cpu(processors, j);
    150			if (!match_pr)
    151				continue;
    152
    153			match_pthrottling = &(match_pr->throttling);
    154			match_pdomain = &(match_pthrottling->domain_info);
    155			if (match_pdomain->domain != pdomain->domain)
    156				continue;
    157
    158			/*
    159			 * If some CPUS have the same domain, they
    160			 * will have the same shared_cpu_map.
    161			 */
    162			cpumask_copy(match_pthrottling->shared_cpu_map,
    163				     pthrottling->shared_cpu_map);
    164		}
    165	}
    166
    167err_ret:
    168	free_cpumask_var(covered_cpus);
    169
    170	for_each_possible_cpu(i) {
    171		pr = per_cpu(processors, i);
    172		if (!pr)
    173			continue;
    174
    175		/*
    176		 * Assume no coordination on any error parsing domain info.
    177		 * The coordination type will be forced as SW_ALL.
    178		 */
    179		if (retval) {
    180			pthrottling = &(pr->throttling);
    181			cpumask_clear(pthrottling->shared_cpu_map);
    182			cpumask_set_cpu(i, pthrottling->shared_cpu_map);
    183			pthrottling->shared_type = DOMAIN_COORD_TYPE_SW_ALL;
    184		}
    185	}
    186
    187	return retval;
    188}
    189
    190/*
    191 * Update the T-state coordination after the _TSD
    192 * data for all cpus is obtained.
    193 */
    194void acpi_processor_throttling_init(void)
    195{
    196	if (acpi_processor_update_tsd_coord())
    197		pr_debug("Assume no T-state coordination\n");
    198}
    199
    200static int acpi_processor_throttling_notifier(unsigned long event, void *data)
    201{
    202	struct throttling_tstate *p_tstate = data;
    203	struct acpi_processor *pr;
    204	unsigned int cpu;
    205	int target_state;
    206	struct acpi_processor_limit *p_limit;
    207	struct acpi_processor_throttling *p_throttling;
    208
    209	cpu = p_tstate->cpu;
    210	pr = per_cpu(processors, cpu);
    211	if (!pr) {
    212		pr_debug("Invalid pr pointer\n");
    213		return 0;
    214	}
    215	if (!pr->flags.throttling) {
    216		acpi_handle_debug(pr->handle,
    217				  "Throttling control unsupported on CPU %d\n",
    218				  cpu);
    219		return 0;
    220	}
    221	target_state = p_tstate->target_state;
    222	p_throttling = &(pr->throttling);
    223	switch (event) {
    224	case THROTTLING_PRECHANGE:
    225		/*
    226		 * Prechange event is used to choose one proper t-state,
    227		 * which meets the limits of thermal, user and _TPC.
    228		 */
    229		p_limit = &pr->limit;
    230		if (p_limit->thermal.tx > target_state)
    231			target_state = p_limit->thermal.tx;
    232		if (p_limit->user.tx > target_state)
    233			target_state = p_limit->user.tx;
    234		if (pr->throttling_platform_limit > target_state)
    235			target_state = pr->throttling_platform_limit;
    236		if (target_state >= p_throttling->state_count) {
    237			pr_warn("Exceed the limit of T-state \n");
    238			target_state = p_throttling->state_count - 1;
    239		}
    240		p_tstate->target_state = target_state;
    241		acpi_handle_debug(pr->handle,
    242				  "PreChange Event: target T-state of CPU %d is T%d\n",
    243				  cpu, target_state);
    244		break;
    245	case THROTTLING_POSTCHANGE:
    246		/*
    247		 * Postchange event is only used to update the
    248		 * T-state flag of acpi_processor_throttling.
    249		 */
    250		p_throttling->state = target_state;
    251		acpi_handle_debug(pr->handle,
    252				  "PostChange Event: CPU %d is switched to T%d\n",
    253				  cpu, target_state);
    254		break;
    255	default:
    256		pr_warn("Unsupported Throttling notifier event\n");
    257		break;
    258	}
    259
    260	return 0;
    261}
    262
    263/*
    264 * _TPC - Throttling Present Capabilities
    265 */
    266static int acpi_processor_get_platform_limit(struct acpi_processor *pr)
    267{
    268	acpi_status status = 0;
    269	unsigned long long tpc = 0;
    270
    271	if (!pr)
    272		return -EINVAL;
    273
    274	if (ignore_tpc)
    275		goto end;
    276
    277	status = acpi_evaluate_integer(pr->handle, "_TPC", NULL, &tpc);
    278	if (ACPI_FAILURE(status)) {
    279		if (status != AE_NOT_FOUND)
    280			acpi_evaluation_failure_warn(pr->handle, "_TPC", status);
    281
    282		return -ENODEV;
    283	}
    284
    285end:
    286	pr->throttling_platform_limit = (int)tpc;
    287	return 0;
    288}
    289
    290int acpi_processor_tstate_has_changed(struct acpi_processor *pr)
    291{
    292	int result = 0;
    293	int throttling_limit;
    294	int current_state;
    295	struct acpi_processor_limit *limit;
    296	int target_state;
    297
    298	if (ignore_tpc)
    299		return 0;
    300
    301	result = acpi_processor_get_platform_limit(pr);
    302	if (result) {
    303		/* Throttling Limit is unsupported */
    304		return result;
    305	}
    306
    307	throttling_limit = pr->throttling_platform_limit;
    308	if (throttling_limit >= pr->throttling.state_count) {
    309		/* Uncorrect Throttling Limit */
    310		return -EINVAL;
    311	}
    312
    313	current_state = pr->throttling.state;
    314	if (current_state > throttling_limit) {
    315		/*
    316		 * The current state can meet the requirement of
    317		 * _TPC limit. But it is reasonable that OSPM changes
    318		 * t-states from high to low for better performance.
    319		 * Of course the limit condition of thermal
    320		 * and user should be considered.
    321		 */
    322		limit = &pr->limit;
    323		target_state = throttling_limit;
    324		if (limit->thermal.tx > target_state)
    325			target_state = limit->thermal.tx;
    326		if (limit->user.tx > target_state)
    327			target_state = limit->user.tx;
    328	} else if (current_state == throttling_limit) {
    329		/*
    330		 * Unnecessary to change the throttling state
    331		 */
    332		return 0;
    333	} else {
    334		/*
    335		 * If the current state is lower than the limit of _TPC, it
    336		 * will be forced to switch to the throttling state defined
    337		 * by throttling_platfor_limit.
    338		 * Because the previous state meets with the limit condition
    339		 * of thermal and user, it is unnecessary to check it again.
    340		 */
    341		target_state = throttling_limit;
    342	}
    343	return acpi_processor_set_throttling(pr, target_state, false);
    344}
    345
    346/*
    347 * This function is used to reevaluate whether the T-state is valid
    348 * after one CPU is onlined/offlined.
    349 * It is noted that it won't reevaluate the following properties for
    350 * the T-state.
    351 *	1. Control method.
    352 *	2. the number of supported T-state
    353 *	3. TSD domain
    354 */
    355void acpi_processor_reevaluate_tstate(struct acpi_processor *pr,
    356					bool is_dead)
    357{
    358	int result = 0;
    359
    360	if (is_dead) {
    361		/* When one CPU is offline, the T-state throttling
    362		 * will be invalidated.
    363		 */
    364		pr->flags.throttling = 0;
    365		return;
    366	}
    367	/* the following is to recheck whether the T-state is valid for
    368	 * the online CPU
    369	 */
    370	if (!pr->throttling.state_count) {
    371		/* If the number of T-state is invalid, it is
    372		 * invalidated.
    373		 */
    374		pr->flags.throttling = 0;
    375		return;
    376	}
    377	pr->flags.throttling = 1;
    378
    379	/* Disable throttling (if enabled).  We'll let subsequent
    380	 * policy (e.g.thermal) decide to lower performance if it
    381	 * so chooses, but for now we'll crank up the speed.
    382	 */
    383
    384	result = acpi_processor_get_throttling(pr);
    385	if (result)
    386		goto end;
    387
    388	if (pr->throttling.state) {
    389		result = acpi_processor_set_throttling(pr, 0, false);
    390		if (result)
    391			goto end;
    392	}
    393
    394end:
    395	if (result)
    396		pr->flags.throttling = 0;
    397}
    398/*
    399 * _PTC - Processor Throttling Control (and status) register location
    400 */
    401static int acpi_processor_get_throttling_control(struct acpi_processor *pr)
    402{
    403	int result = 0;
    404	acpi_status status = 0;
    405	struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
    406	union acpi_object *ptc = NULL;
    407	union acpi_object obj;
    408	struct acpi_processor_throttling *throttling;
    409
    410	status = acpi_evaluate_object(pr->handle, "_PTC", NULL, &buffer);
    411	if (ACPI_FAILURE(status)) {
    412		if (status != AE_NOT_FOUND)
    413			acpi_evaluation_failure_warn(pr->handle, "_PTC", status);
    414
    415		return -ENODEV;
    416	}
    417
    418	ptc = (union acpi_object *)buffer.pointer;
    419	if (!ptc || (ptc->type != ACPI_TYPE_PACKAGE)
    420	    || (ptc->package.count != 2)) {
    421		pr_err("Invalid _PTC data\n");
    422		result = -EFAULT;
    423		goto end;
    424	}
    425
    426	/*
    427	 * control_register
    428	 */
    429
    430	obj = ptc->package.elements[0];
    431
    432	if ((obj.type != ACPI_TYPE_BUFFER)
    433	    || (obj.buffer.length < sizeof(struct acpi_ptc_register))
    434	    || (obj.buffer.pointer == NULL)) {
    435		pr_err("Invalid _PTC data (control_register)\n");
    436		result = -EFAULT;
    437		goto end;
    438	}
    439	memcpy(&pr->throttling.control_register, obj.buffer.pointer,
    440	       sizeof(struct acpi_ptc_register));
    441
    442	/*
    443	 * status_register
    444	 */
    445
    446	obj = ptc->package.elements[1];
    447
    448	if ((obj.type != ACPI_TYPE_BUFFER)
    449	    || (obj.buffer.length < sizeof(struct acpi_ptc_register))
    450	    || (obj.buffer.pointer == NULL)) {
    451		pr_err("Invalid _PTC data (status_register)\n");
    452		result = -EFAULT;
    453		goto end;
    454	}
    455
    456	memcpy(&pr->throttling.status_register, obj.buffer.pointer,
    457	       sizeof(struct acpi_ptc_register));
    458
    459	throttling = &pr->throttling;
    460
    461	if ((throttling->control_register.bit_width +
    462		throttling->control_register.bit_offset) > 32) {
    463		pr_err("Invalid _PTC control register\n");
    464		result = -EFAULT;
    465		goto end;
    466	}
    467
    468	if ((throttling->status_register.bit_width +
    469		throttling->status_register.bit_offset) > 32) {
    470		pr_err("Invalid _PTC status register\n");
    471		result = -EFAULT;
    472		goto end;
    473	}
    474
    475end:
    476	kfree(buffer.pointer);
    477
    478	return result;
    479}
    480
    481/*
    482 * _TSS - Throttling Supported States
    483 */
    484static int acpi_processor_get_throttling_states(struct acpi_processor *pr)
    485{
    486	int result = 0;
    487	acpi_status status = AE_OK;
    488	struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
    489	struct acpi_buffer format = { sizeof("NNNNN"), "NNNNN" };
    490	struct acpi_buffer state = { 0, NULL };
    491	union acpi_object *tss = NULL;
    492	int i;
    493
    494	status = acpi_evaluate_object(pr->handle, "_TSS", NULL, &buffer);
    495	if (ACPI_FAILURE(status)) {
    496		if (status != AE_NOT_FOUND)
    497			acpi_evaluation_failure_warn(pr->handle, "_TSS", status);
    498
    499		return -ENODEV;
    500	}
    501
    502	tss = buffer.pointer;
    503	if (!tss || (tss->type != ACPI_TYPE_PACKAGE)) {
    504		pr_err("Invalid _TSS data\n");
    505		result = -EFAULT;
    506		goto end;
    507	}
    508
    509	acpi_handle_debug(pr->handle, "Found %d throttling states\n",
    510			  tss->package.count);
    511
    512	pr->throttling.state_count = tss->package.count;
    513	pr->throttling.states_tss =
    514	    kmalloc_array(tss->package.count,
    515			  sizeof(struct acpi_processor_tx_tss),
    516			  GFP_KERNEL);
    517	if (!pr->throttling.states_tss) {
    518		result = -ENOMEM;
    519		goto end;
    520	}
    521
    522	for (i = 0; i < pr->throttling.state_count; i++) {
    523
    524		struct acpi_processor_tx_tss *tx =
    525		    (struct acpi_processor_tx_tss *)&(pr->throttling.
    526						      states_tss[i]);
    527
    528		state.length = sizeof(struct acpi_processor_tx_tss);
    529		state.pointer = tx;
    530
    531		acpi_handle_debug(pr->handle, "Extracting state %d\n", i);
    532
    533		status = acpi_extract_package(&(tss->package.elements[i]),
    534					      &format, &state);
    535		if (ACPI_FAILURE(status)) {
    536			acpi_handle_warn(pr->handle, "Invalid _TSS data: %s\n",
    537					 acpi_format_exception(status));
    538			result = -EFAULT;
    539			kfree(pr->throttling.states_tss);
    540			goto end;
    541		}
    542
    543		if (!tx->freqpercentage) {
    544			pr_err("Invalid _TSS data: freq is zero\n");
    545			result = -EFAULT;
    546			kfree(pr->throttling.states_tss);
    547			goto end;
    548		}
    549	}
    550
    551end:
    552	kfree(buffer.pointer);
    553
    554	return result;
    555}
    556
    557/*
    558 * _TSD - T-State Dependencies
    559 */
    560static int acpi_processor_get_tsd(struct acpi_processor *pr)
    561{
    562	int result = 0;
    563	acpi_status status = AE_OK;
    564	struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
    565	struct acpi_buffer format = { sizeof("NNNNN"), "NNNNN" };
    566	struct acpi_buffer state = { 0, NULL };
    567	union acpi_object *tsd = NULL;
    568	struct acpi_tsd_package *pdomain;
    569	struct acpi_processor_throttling *pthrottling;
    570
    571	pthrottling = &pr->throttling;
    572	pthrottling->tsd_valid_flag = 0;
    573
    574	status = acpi_evaluate_object(pr->handle, "_TSD", NULL, &buffer);
    575	if (ACPI_FAILURE(status)) {
    576		if (status != AE_NOT_FOUND)
    577			acpi_evaluation_failure_warn(pr->handle, "_TSD", status);
    578
    579		return -ENODEV;
    580	}
    581
    582	tsd = buffer.pointer;
    583	if (!tsd || (tsd->type != ACPI_TYPE_PACKAGE)) {
    584		pr_err("Invalid _TSD data\n");
    585		result = -EFAULT;
    586		goto end;
    587	}
    588
    589	if (tsd->package.count != 1) {
    590		pr_err("Invalid _TSD data\n");
    591		result = -EFAULT;
    592		goto end;
    593	}
    594
    595	pdomain = &(pr->throttling.domain_info);
    596
    597	state.length = sizeof(struct acpi_tsd_package);
    598	state.pointer = pdomain;
    599
    600	status = acpi_extract_package(&(tsd->package.elements[0]),
    601				      &format, &state);
    602	if (ACPI_FAILURE(status)) {
    603		pr_err("Invalid _TSD data\n");
    604		result = -EFAULT;
    605		goto end;
    606	}
    607
    608	if (pdomain->num_entries != ACPI_TSD_REV0_ENTRIES) {
    609		pr_err("Unknown _TSD:num_entries\n");
    610		result = -EFAULT;
    611		goto end;
    612	}
    613
    614	if (pdomain->revision != ACPI_TSD_REV0_REVISION) {
    615		pr_err("Unknown _TSD:revision\n");
    616		result = -EFAULT;
    617		goto end;
    618	}
    619
    620	pthrottling = &pr->throttling;
    621	pthrottling->tsd_valid_flag = 1;
    622	pthrottling->shared_type = pdomain->coord_type;
    623	cpumask_set_cpu(pr->id, pthrottling->shared_cpu_map);
    624	/*
    625	 * If the coordination type is not defined in ACPI spec,
    626	 * the tsd_valid_flag will be clear and coordination type
    627	 * will be forecd as DOMAIN_COORD_TYPE_SW_ALL.
    628	 */
    629	if (pdomain->coord_type != DOMAIN_COORD_TYPE_SW_ALL &&
    630		pdomain->coord_type != DOMAIN_COORD_TYPE_SW_ANY &&
    631		pdomain->coord_type != DOMAIN_COORD_TYPE_HW_ALL) {
    632		pthrottling->tsd_valid_flag = 0;
    633		pthrottling->shared_type = DOMAIN_COORD_TYPE_SW_ALL;
    634	}
    635
    636end:
    637	kfree(buffer.pointer);
    638	return result;
    639}
    640
    641/* --------------------------------------------------------------------------
    642                              Throttling Control
    643   -------------------------------------------------------------------------- */
    644static int acpi_processor_get_throttling_fadt(struct acpi_processor *pr)
    645{
    646	int state = 0;
    647	u32 value = 0;
    648	u32 duty_mask = 0;
    649	u32 duty_value = 0;
    650
    651	if (!pr)
    652		return -EINVAL;
    653
    654	if (!pr->flags.throttling)
    655		return -ENODEV;
    656
    657	/*
    658	 * We don't care about error returns - we just try to mark
    659	 * these reserved so that nobody else is confused into thinking
    660	 * that this region might be unused..
    661	 *
    662	 * (In particular, allocating the IO range for Cardbus)
    663	 */
    664	request_region(pr->throttling.address, 6, "ACPI CPU throttle");
    665
    666	pr->throttling.state = 0;
    667
    668	duty_mask = pr->throttling.state_count - 1;
    669
    670	duty_mask <<= pr->throttling.duty_offset;
    671
    672	local_irq_disable();
    673
    674	value = inl(pr->throttling.address);
    675
    676	/*
    677	 * Compute the current throttling state when throttling is enabled
    678	 * (bit 4 is on).
    679	 */
    680	if (value & 0x10) {
    681		duty_value = value & duty_mask;
    682		duty_value >>= pr->throttling.duty_offset;
    683
    684		if (duty_value)
    685			state = pr->throttling.state_count - duty_value;
    686	}
    687
    688	pr->throttling.state = state;
    689
    690	local_irq_enable();
    691
    692	acpi_handle_debug(pr->handle,
    693			  "Throttling state is T%d (%d%% throttling applied)\n",
    694			  state, pr->throttling.states[state].performance);
    695
    696	return 0;
    697}
    698
    699#ifdef CONFIG_X86
    700static int acpi_throttling_rdmsr(u64 *value)
    701{
    702	u64 msr_high, msr_low;
    703	u64 msr = 0;
    704	int ret = -1;
    705
    706	if ((this_cpu_read(cpu_info.x86_vendor) != X86_VENDOR_INTEL) ||
    707		!this_cpu_has(X86_FEATURE_ACPI)) {
    708		pr_err("HARDWARE addr space,NOT supported yet\n");
    709	} else {
    710		msr_low = 0;
    711		msr_high = 0;
    712		rdmsr_safe(MSR_IA32_THERM_CONTROL,
    713			(u32 *)&msr_low, (u32 *) &msr_high);
    714		msr = (msr_high << 32) | msr_low;
    715		*value = (u64) msr;
    716		ret = 0;
    717	}
    718	return ret;
    719}
    720
    721static int acpi_throttling_wrmsr(u64 value)
    722{
    723	int ret = -1;
    724	u64 msr;
    725
    726	if ((this_cpu_read(cpu_info.x86_vendor) != X86_VENDOR_INTEL) ||
    727		!this_cpu_has(X86_FEATURE_ACPI)) {
    728		pr_err("HARDWARE addr space,NOT supported yet\n");
    729	} else {
    730		msr = value;
    731		wrmsr_safe(MSR_IA32_THERM_CONTROL,
    732			msr & 0xffffffff, msr >> 32);
    733		ret = 0;
    734	}
    735	return ret;
    736}
    737#else
    738static int acpi_throttling_rdmsr(u64 *value)
    739{
    740	pr_err("HARDWARE addr space,NOT supported yet\n");
    741	return -1;
    742}
    743
    744static int acpi_throttling_wrmsr(u64 value)
    745{
    746	pr_err("HARDWARE addr space,NOT supported yet\n");
    747	return -1;
    748}
    749#endif
    750
    751static int acpi_read_throttling_status(struct acpi_processor *pr,
    752					u64 *value)
    753{
    754	u32 bit_width, bit_offset;
    755	u32 ptc_value;
    756	u64 ptc_mask;
    757	struct acpi_processor_throttling *throttling;
    758	int ret = -1;
    759
    760	throttling = &pr->throttling;
    761	switch (throttling->status_register.space_id) {
    762	case ACPI_ADR_SPACE_SYSTEM_IO:
    763		bit_width = throttling->status_register.bit_width;
    764		bit_offset = throttling->status_register.bit_offset;
    765
    766		acpi_os_read_port((acpi_io_address) throttling->status_register.
    767				  address, &ptc_value,
    768				  (u32) (bit_width + bit_offset));
    769		ptc_mask = (1 << bit_width) - 1;
    770		*value = (u64) ((ptc_value >> bit_offset) & ptc_mask);
    771		ret = 0;
    772		break;
    773	case ACPI_ADR_SPACE_FIXED_HARDWARE:
    774		ret = acpi_throttling_rdmsr(value);
    775		break;
    776	default:
    777		pr_err("Unknown addr space %d\n",
    778		       (u32) (throttling->status_register.space_id));
    779	}
    780	return ret;
    781}
    782
    783static int acpi_write_throttling_state(struct acpi_processor *pr,
    784				u64 value)
    785{
    786	u32 bit_width, bit_offset;
    787	u64 ptc_value;
    788	u64 ptc_mask;
    789	struct acpi_processor_throttling *throttling;
    790	int ret = -1;
    791
    792	throttling = &pr->throttling;
    793	switch (throttling->control_register.space_id) {
    794	case ACPI_ADR_SPACE_SYSTEM_IO:
    795		bit_width = throttling->control_register.bit_width;
    796		bit_offset = throttling->control_register.bit_offset;
    797		ptc_mask = (1 << bit_width) - 1;
    798		ptc_value = value & ptc_mask;
    799
    800		acpi_os_write_port((acpi_io_address) throttling->
    801					control_register.address,
    802					(u32) (ptc_value << bit_offset),
    803					(u32) (bit_width + bit_offset));
    804		ret = 0;
    805		break;
    806	case ACPI_ADR_SPACE_FIXED_HARDWARE:
    807		ret = acpi_throttling_wrmsr(value);
    808		break;
    809	default:
    810		pr_err("Unknown addr space %d\n",
    811		       (u32) (throttling->control_register.space_id));
    812	}
    813	return ret;
    814}
    815
    816static int acpi_get_throttling_state(struct acpi_processor *pr,
    817				u64 value)
    818{
    819	int i;
    820
    821	for (i = 0; i < pr->throttling.state_count; i++) {
    822		struct acpi_processor_tx_tss *tx =
    823		    (struct acpi_processor_tx_tss *)&(pr->throttling.
    824						      states_tss[i]);
    825		if (tx->control == value)
    826			return i;
    827	}
    828	return -1;
    829}
    830
    831static int acpi_get_throttling_value(struct acpi_processor *pr,
    832			int state, u64 *value)
    833{
    834	int ret = -1;
    835
    836	if (state >= 0 && state <= pr->throttling.state_count) {
    837		struct acpi_processor_tx_tss *tx =
    838		    (struct acpi_processor_tx_tss *)&(pr->throttling.
    839						      states_tss[state]);
    840		*value = tx->control;
    841		ret = 0;
    842	}
    843	return ret;
    844}
    845
    846static int acpi_processor_get_throttling_ptc(struct acpi_processor *pr)
    847{
    848	int state = 0;
    849	int ret;
    850	u64 value;
    851
    852	if (!pr)
    853		return -EINVAL;
    854
    855	if (!pr->flags.throttling)
    856		return -ENODEV;
    857
    858	pr->throttling.state = 0;
    859
    860	value = 0;
    861	ret = acpi_read_throttling_status(pr, &value);
    862	if (ret >= 0) {
    863		state = acpi_get_throttling_state(pr, value);
    864		if (state == -1) {
    865			acpi_handle_debug(pr->handle,
    866					  "Invalid throttling state, reset\n");
    867			state = 0;
    868			ret = __acpi_processor_set_throttling(pr, state, true,
    869							      true);
    870			if (ret)
    871				return ret;
    872		}
    873		pr->throttling.state = state;
    874	}
    875
    876	return 0;
    877}
    878
    879static long __acpi_processor_get_throttling(void *data)
    880{
    881	struct acpi_processor *pr = data;
    882
    883	return pr->throttling.acpi_processor_get_throttling(pr);
    884}
    885
    886static int acpi_processor_get_throttling(struct acpi_processor *pr)
    887{
    888	if (!pr)
    889		return -EINVAL;
    890
    891	if (!pr->flags.throttling)
    892		return -ENODEV;
    893
    894	/*
    895	 * This is either called from the CPU hotplug callback of
    896	 * processor_driver or via the ACPI probe function. In the latter
    897	 * case the CPU is not guaranteed to be online. Both call sites are
    898	 * protected against CPU hotplug.
    899	 */
    900	if (!cpu_online(pr->id))
    901		return -ENODEV;
    902
    903	return call_on_cpu(pr->id, __acpi_processor_get_throttling, pr, false);
    904}
    905
    906static int acpi_processor_get_fadt_info(struct acpi_processor *pr)
    907{
    908	int i, step;
    909
    910	if (!pr->throttling.address) {
    911		acpi_handle_debug(pr->handle, "No throttling register\n");
    912		return -EINVAL;
    913	} else if (!pr->throttling.duty_width) {
    914		acpi_handle_debug(pr->handle, "No throttling states\n");
    915		return -EINVAL;
    916	}
    917	/* TBD: Support duty_cycle values that span bit 4. */
    918	else if ((pr->throttling.duty_offset + pr->throttling.duty_width) > 4) {
    919		pr_warn("duty_cycle spans bit 4\n");
    920		return -EINVAL;
    921	}
    922
    923	pr->throttling.state_count = 1 << acpi_gbl_FADT.duty_width;
    924
    925	/*
    926	 * Compute state values. Note that throttling displays a linear power
    927	 * performance relationship (at 50% performance the CPU will consume
    928	 * 50% power).  Values are in 1/10th of a percent to preserve accuracy.
    929	 */
    930
    931	step = (1000 / pr->throttling.state_count);
    932
    933	for (i = 0; i < pr->throttling.state_count; i++) {
    934		pr->throttling.states[i].performance = 1000 - step * i;
    935		pr->throttling.states[i].power = 1000 - step * i;
    936	}
    937	return 0;
    938}
    939
    940static int acpi_processor_set_throttling_fadt(struct acpi_processor *pr,
    941					      int state, bool force)
    942{
    943	u32 value = 0;
    944	u32 duty_mask = 0;
    945	u32 duty_value = 0;
    946
    947	if (!pr)
    948		return -EINVAL;
    949
    950	if ((state < 0) || (state > (pr->throttling.state_count - 1)))
    951		return -EINVAL;
    952
    953	if (!pr->flags.throttling)
    954		return -ENODEV;
    955
    956	if (!force && (state == pr->throttling.state))
    957		return 0;
    958
    959	if (state < pr->throttling_platform_limit)
    960		return -EPERM;
    961	/*
    962	 * Calculate the duty_value and duty_mask.
    963	 */
    964	if (state) {
    965		duty_value = pr->throttling.state_count - state;
    966
    967		duty_value <<= pr->throttling.duty_offset;
    968
    969		/* Used to clear all duty_value bits */
    970		duty_mask = pr->throttling.state_count - 1;
    971
    972		duty_mask <<= acpi_gbl_FADT.duty_offset;
    973		duty_mask = ~duty_mask;
    974	}
    975
    976	local_irq_disable();
    977
    978	/*
    979	 * Disable throttling by writing a 0 to bit 4.  Note that we must
    980	 * turn it off before you can change the duty_value.
    981	 */
    982	value = inl(pr->throttling.address);
    983	if (value & 0x10) {
    984		value &= 0xFFFFFFEF;
    985		outl(value, pr->throttling.address);
    986	}
    987
    988	/*
    989	 * Write the new duty_value and then enable throttling.  Note
    990	 * that a state value of 0 leaves throttling disabled.
    991	 */
    992	if (state) {
    993		value &= duty_mask;
    994		value |= duty_value;
    995		outl(value, pr->throttling.address);
    996
    997		value |= 0x00000010;
    998		outl(value, pr->throttling.address);
    999	}
   1000
   1001	pr->throttling.state = state;
   1002
   1003	local_irq_enable();
   1004
   1005	acpi_handle_debug(pr->handle,
   1006			  "Throttling state set to T%d (%d%%)\n", state,
   1007			  (pr->throttling.states[state].performance ? pr->
   1008			   throttling.states[state].performance / 10 : 0));
   1009
   1010	return 0;
   1011}
   1012
   1013static int acpi_processor_set_throttling_ptc(struct acpi_processor *pr,
   1014					     int state, bool force)
   1015{
   1016	int ret;
   1017	u64 value;
   1018
   1019	if (!pr)
   1020		return -EINVAL;
   1021
   1022	if ((state < 0) || (state > (pr->throttling.state_count - 1)))
   1023		return -EINVAL;
   1024
   1025	if (!pr->flags.throttling)
   1026		return -ENODEV;
   1027
   1028	if (!force && (state == pr->throttling.state))
   1029		return 0;
   1030
   1031	if (state < pr->throttling_platform_limit)
   1032		return -EPERM;
   1033
   1034	value = 0;
   1035	ret = acpi_get_throttling_value(pr, state, &value);
   1036	if (ret >= 0) {
   1037		acpi_write_throttling_state(pr, value);
   1038		pr->throttling.state = state;
   1039	}
   1040
   1041	return 0;
   1042}
   1043
   1044static long acpi_processor_throttling_fn(void *data)
   1045{
   1046	struct acpi_processor_throttling_arg *arg = data;
   1047	struct acpi_processor *pr = arg->pr;
   1048
   1049	return pr->throttling.acpi_processor_set_throttling(pr,
   1050			arg->target_state, arg->force);
   1051}
   1052
   1053static int __acpi_processor_set_throttling(struct acpi_processor *pr,
   1054					   int state, bool force, bool direct)
   1055{
   1056	int ret = 0;
   1057	unsigned int i;
   1058	struct acpi_processor *match_pr;
   1059	struct acpi_processor_throttling *p_throttling;
   1060	struct acpi_processor_throttling_arg arg;
   1061	struct throttling_tstate t_state;
   1062
   1063	if (!pr)
   1064		return -EINVAL;
   1065
   1066	if (!pr->flags.throttling)
   1067		return -ENODEV;
   1068
   1069	if ((state < 0) || (state > (pr->throttling.state_count - 1)))
   1070		return -EINVAL;
   1071
   1072	if (cpu_is_offline(pr->id)) {
   1073		/*
   1074		 * the cpu pointed by pr->id is offline. Unnecessary to change
   1075		 * the throttling state any more.
   1076		 */
   1077		return -ENODEV;
   1078	}
   1079
   1080	t_state.target_state = state;
   1081	p_throttling = &(pr->throttling);
   1082
   1083	/*
   1084	 * The throttling notifier will be called for every
   1085	 * affected cpu in order to get one proper T-state.
   1086	 * The notifier event is THROTTLING_PRECHANGE.
   1087	 */
   1088	for_each_cpu_and(i, cpu_online_mask, p_throttling->shared_cpu_map) {
   1089		t_state.cpu = i;
   1090		acpi_processor_throttling_notifier(THROTTLING_PRECHANGE,
   1091							&t_state);
   1092	}
   1093	/*
   1094	 * The function of acpi_processor_set_throttling will be called
   1095	 * to switch T-state. If the coordination type is SW_ALL or HW_ALL,
   1096	 * it is necessary to call it for every affected cpu. Otherwise
   1097	 * it can be called only for the cpu pointed by pr.
   1098	 */
   1099	if (p_throttling->shared_type == DOMAIN_COORD_TYPE_SW_ANY) {
   1100		arg.pr = pr;
   1101		arg.target_state = state;
   1102		arg.force = force;
   1103		ret = call_on_cpu(pr->id, acpi_processor_throttling_fn, &arg,
   1104				  direct);
   1105	} else {
   1106		/*
   1107		 * When the T-state coordination is SW_ALL or HW_ALL,
   1108		 * it is necessary to set T-state for every affected
   1109		 * cpus.
   1110		 */
   1111		for_each_cpu_and(i, cpu_online_mask,
   1112		    p_throttling->shared_cpu_map) {
   1113			match_pr = per_cpu(processors, i);
   1114			/*
   1115			 * If the pointer is invalid, we will report the
   1116			 * error message and continue.
   1117			 */
   1118			if (!match_pr) {
   1119				acpi_handle_debug(pr->handle,
   1120					"Invalid Pointer for CPU %d\n", i);
   1121				continue;
   1122			}
   1123			/*
   1124			 * If the throttling control is unsupported on CPU i,
   1125			 * we will report the error message and continue.
   1126			 */
   1127			if (!match_pr->flags.throttling) {
   1128				acpi_handle_debug(pr->handle,
   1129					"Throttling Control unsupported on CPU %d\n", i);
   1130				continue;
   1131			}
   1132
   1133			arg.pr = match_pr;
   1134			arg.target_state = state;
   1135			arg.force = force;
   1136			ret = call_on_cpu(pr->id, acpi_processor_throttling_fn,
   1137					  &arg, direct);
   1138		}
   1139	}
   1140	/*
   1141	 * After the set_throttling is called, the
   1142	 * throttling notifier is called for every
   1143	 * affected cpu to update the T-states.
   1144	 * The notifier event is THROTTLING_POSTCHANGE
   1145	 */
   1146	for_each_cpu_and(i, cpu_online_mask, p_throttling->shared_cpu_map) {
   1147		t_state.cpu = i;
   1148		acpi_processor_throttling_notifier(THROTTLING_POSTCHANGE,
   1149							&t_state);
   1150	}
   1151
   1152	return ret;
   1153}
   1154
   1155int acpi_processor_set_throttling(struct acpi_processor *pr, int state,
   1156				  bool force)
   1157{
   1158	return __acpi_processor_set_throttling(pr, state, force, false);
   1159}
   1160
   1161int acpi_processor_get_throttling_info(struct acpi_processor *pr)
   1162{
   1163	int result = 0;
   1164	struct acpi_processor_throttling *pthrottling;
   1165
   1166	acpi_handle_debug(pr->handle,
   1167			  "pblk_address[0x%08x] duty_offset[%d] duty_width[%d]\n",
   1168			  pr->throttling.address,
   1169			  pr->throttling.duty_offset,
   1170			  pr->throttling.duty_width);
   1171
   1172	/*
   1173	 * Evaluate _PTC, _TSS and _TPC
   1174	 * They must all be present or none of them can be used.
   1175	 */
   1176	if (acpi_processor_get_throttling_control(pr) ||
   1177		acpi_processor_get_throttling_states(pr) ||
   1178		acpi_processor_get_platform_limit(pr)) {
   1179		pr->throttling.acpi_processor_get_throttling =
   1180		    &acpi_processor_get_throttling_fadt;
   1181		pr->throttling.acpi_processor_set_throttling =
   1182		    &acpi_processor_set_throttling_fadt;
   1183		if (acpi_processor_get_fadt_info(pr))
   1184			return 0;
   1185	} else {
   1186		pr->throttling.acpi_processor_get_throttling =
   1187		    &acpi_processor_get_throttling_ptc;
   1188		pr->throttling.acpi_processor_set_throttling =
   1189		    &acpi_processor_set_throttling_ptc;
   1190	}
   1191
   1192	/*
   1193	 * If TSD package for one CPU can't be parsed successfully, it means
   1194	 * that this CPU will have no coordination with other CPUs.
   1195	 */
   1196	if (acpi_processor_get_tsd(pr)) {
   1197		pthrottling = &pr->throttling;
   1198		pthrottling->tsd_valid_flag = 0;
   1199		cpumask_set_cpu(pr->id, pthrottling->shared_cpu_map);
   1200		pthrottling->shared_type = DOMAIN_COORD_TYPE_SW_ALL;
   1201	}
   1202
   1203	/*
   1204	 * PIIX4 Errata: We don't support throttling on the original PIIX4.
   1205	 * This shouldn't be an issue as few (if any) mobile systems ever
   1206	 * used this part.
   1207	 */
   1208	if (errata.piix4.throttle) {
   1209		acpi_handle_debug(pr->handle,
   1210				  "Throttling not supported on PIIX4 A- or B-step\n");
   1211		return 0;
   1212	}
   1213
   1214	acpi_handle_debug(pr->handle, "Found %d throttling states\n",
   1215			  pr->throttling.state_count);
   1216
   1217	pr->flags.throttling = 1;
   1218
   1219	/*
   1220	 * Disable throttling (if enabled).  We'll let subsequent policy (e.g.
   1221	 * thermal) decide to lower performance if it so chooses, but for now
   1222	 * we'll crank up the speed.
   1223	 */
   1224
   1225	result = acpi_processor_get_throttling(pr);
   1226	if (result)
   1227		goto end;
   1228
   1229	if (pr->throttling.state) {
   1230		acpi_handle_debug(pr->handle,
   1231				  "Disabling throttling (was T%d)\n",
   1232				  pr->throttling.state);
   1233		result = acpi_processor_set_throttling(pr, 0, false);
   1234		if (result)
   1235			goto end;
   1236	}
   1237
   1238end:
   1239	if (result)
   1240		pr->flags.throttling = 0;
   1241
   1242	return result;
   1243}
   1244