1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * processor_throttling.c - Throttling submodule of the ACPI processor driver
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
12 #define pr_fmt(fmt) "ACPI: " fmt
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>
23 #include <linux/uaccess.h>
26 * 0 -> acpi processor driver doesn't ignore _TPC values
27 * 1 -> acpi processor driver ignores _TPC values
29 static int ignore_tpc
;
30 module_param(ignore_tpc
, int, 0644);
31 MODULE_PARM_DESC(ignore_tpc
, "Disable broken BIOS _TPC throttling support");
33 struct throttling_tstate
{
34 unsigned int cpu
; /* cpu nr */
35 int target_state
; /* target T-state */
38 struct acpi_processor_throttling_arg
{
39 struct acpi_processor
*pr
;
44 #define THROTTLING_PRECHANGE (1)
45 #define THROTTLING_POSTCHANGE (2)
47 static int acpi_processor_get_throttling(struct acpi_processor
*pr
);
48 static int __acpi_processor_set_throttling(struct acpi_processor
*pr
,
49 int state
, bool force
, bool direct
);
51 static int acpi_processor_update_tsd_coord(void)
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
;
61 if (!zalloc_cpumask_var(&covered_cpus
, GFP_KERNEL
))
65 * Now that we have _TSD data from all CPUs, lets setup T-state
66 * coordination between all CPUs.
68 for_each_possible_cpu(i
) {
69 pr
= per_cpu(processors
, i
);
73 /* Basic validity check for domain info */
74 pthrottling
= &(pr
->throttling
);
77 * If tsd package for one cpu is invalid, the coordination
78 * among all CPUs is thought as invalid.
81 if (!pthrottling
->tsd_valid_flag
) {
89 for_each_possible_cpu(i
) {
90 pr
= per_cpu(processors
, i
);
94 if (cpumask_test_cpu(i
, covered_cpus
))
96 pthrottling
= &pr
->throttling
;
98 pdomain
= &(pthrottling
->domain_info
);
99 cpumask_set_cpu(i
, pthrottling
->shared_cpu_map
);
100 cpumask_set_cpu(i
, covered_cpus
);
102 * If the number of processor in the TSD domain is 1, it is
103 * unnecessary to parse the coordination for this CPU.
105 if (pdomain
->num_processors
<= 1)
108 /* Validate the Domain info */
109 count_target
= pdomain
->num_processors
;
111 for_each_possible_cpu(j
) {
115 match_pr
= per_cpu(processors
, j
);
119 match_pthrottling
= &(match_pr
->throttling
);
120 match_pdomain
= &(match_pthrottling
->domain_info
);
121 if (match_pdomain
->domain
!= pdomain
->domain
)
124 /* Here i and j are in the same domain.
125 * If two TSD packages have the same domain, they
126 * should have the same num_porcessors and
127 * coordination type. Otherwise it will be regarded
130 if (match_pdomain
->num_processors
!= count_target
) {
135 if (pdomain
->coord_type
!= match_pdomain
->coord_type
) {
140 cpumask_set_cpu(j
, covered_cpus
);
141 cpumask_set_cpu(j
, pthrottling
->shared_cpu_map
);
143 for_each_possible_cpu(j
) {
147 match_pr
= per_cpu(processors
, j
);
151 match_pthrottling
= &(match_pr
->throttling
);
152 match_pdomain
= &(match_pthrottling
->domain_info
);
153 if (match_pdomain
->domain
!= pdomain
->domain
)
157 * If some CPUS have the same domain, they
158 * will have the same shared_cpu_map.
160 cpumask_copy(match_pthrottling
->shared_cpu_map
,
161 pthrottling
->shared_cpu_map
);
166 free_cpumask_var(covered_cpus
);
168 for_each_possible_cpu(i
) {
169 pr
= per_cpu(processors
, i
);
174 * Assume no coordination on any error parsing domain info.
175 * The coordination type will be forced as SW_ALL.
178 pthrottling
= &(pr
->throttling
);
179 cpumask_clear(pthrottling
->shared_cpu_map
);
180 cpumask_set_cpu(i
, pthrottling
->shared_cpu_map
);
181 pthrottling
->shared_type
= DOMAIN_COORD_TYPE_SW_ALL
;
189 * Update the T-state coordination after the _TSD
190 * data for all cpus is obtained.
192 void acpi_processor_throttling_init(void)
194 if (acpi_processor_update_tsd_coord())
195 pr_debug("Assume no T-state coordination\n");
198 static int acpi_processor_throttling_notifier(unsigned long event
, void *data
)
200 struct throttling_tstate
*p_tstate
= data
;
201 struct acpi_processor
*pr
;
204 struct acpi_processor_limit
*p_limit
;
205 struct acpi_processor_throttling
*p_throttling
;
208 pr
= per_cpu(processors
, cpu
);
210 pr_debug("Invalid pr pointer\n");
213 if (!pr
->flags
.throttling
) {
214 acpi_handle_debug(pr
->handle
,
215 "Throttling control unsupported on CPU %d\n",
219 target_state
= p_tstate
->target_state
;
220 p_throttling
= &(pr
->throttling
);
222 case THROTTLING_PRECHANGE
:
224 * Prechange event is used to choose one proper t-state,
225 * which meets the limits of thermal, user and _TPC.
227 p_limit
= &pr
->limit
;
228 if (p_limit
->thermal
.tx
> target_state
)
229 target_state
= p_limit
->thermal
.tx
;
230 if (p_limit
->user
.tx
> target_state
)
231 target_state
= p_limit
->user
.tx
;
232 if (pr
->throttling_platform_limit
> target_state
)
233 target_state
= pr
->throttling_platform_limit
;
234 if (target_state
>= p_throttling
->state_count
) {
235 pr_warn("Exceed the limit of T-state \n");
236 target_state
= p_throttling
->state_count
- 1;
238 p_tstate
->target_state
= target_state
;
239 acpi_handle_debug(pr
->handle
,
240 "PreChange Event: target T-state of CPU %d is T%d\n",
243 case THROTTLING_POSTCHANGE
:
245 * Postchange event is only used to update the
246 * T-state flag of acpi_processor_throttling.
248 p_throttling
->state
= target_state
;
249 acpi_handle_debug(pr
->handle
,
250 "PostChange Event: CPU %d is switched to T%d\n",
254 pr_warn("Unsupported Throttling notifier event\n");
262 * _TPC - Throttling Present Capabilities
264 static int acpi_processor_get_platform_limit(struct acpi_processor
*pr
)
266 acpi_status status
= 0;
267 unsigned long long tpc
= 0;
275 status
= acpi_evaluate_integer(pr
->handle
, "_TPC", NULL
, &tpc
);
276 if (ACPI_FAILURE(status
)) {
277 if (status
!= AE_NOT_FOUND
)
278 acpi_evaluation_failure_warn(pr
->handle
, "_TPC", status
);
284 pr
->throttling_platform_limit
= (int)tpc
;
288 int acpi_processor_tstate_has_changed(struct acpi_processor
*pr
)
291 int throttling_limit
;
293 struct acpi_processor_limit
*limit
;
299 result
= acpi_processor_get_platform_limit(pr
);
301 /* Throttling Limit is unsupported */
305 throttling_limit
= pr
->throttling_platform_limit
;
306 if (throttling_limit
>= pr
->throttling
.state_count
) {
307 /* Uncorrect Throttling Limit */
311 current_state
= pr
->throttling
.state
;
312 if (current_state
> throttling_limit
) {
314 * The current state can meet the requirement of
315 * _TPC limit. But it is reasonable that OSPM changes
316 * t-states from high to low for better performance.
317 * Of course the limit condition of thermal
318 * and user should be considered.
321 target_state
= throttling_limit
;
322 if (limit
->thermal
.tx
> target_state
)
323 target_state
= limit
->thermal
.tx
;
324 if (limit
->user
.tx
> target_state
)
325 target_state
= limit
->user
.tx
;
326 } else if (current_state
== throttling_limit
) {
328 * Unnecessary to change the throttling state
333 * If the current state is lower than the limit of _TPC, it
334 * will be forced to switch to the throttling state defined
335 * by throttling_platfor_limit.
336 * Because the previous state meets with the limit condition
337 * of thermal and user, it is unnecessary to check it again.
339 target_state
= throttling_limit
;
341 return acpi_processor_set_throttling(pr
, target_state
, false);
345 * This function is used to reevaluate whether the T-state is valid
346 * after one CPU is onlined/offlined.
347 * It is noted that it won't reevaluate the following properties for
350 * 2. the number of supported T-state
353 void acpi_processor_reevaluate_tstate(struct acpi_processor
*pr
,
359 /* When one CPU is offline, the T-state throttling
360 * will be invalidated.
362 pr
->flags
.throttling
= 0;
365 /* the following is to recheck whether the T-state is valid for
368 if (!pr
->throttling
.state_count
) {
369 /* If the number of T-state is invalid, it is
372 pr
->flags
.throttling
= 0;
375 pr
->flags
.throttling
= 1;
377 /* Disable throttling (if enabled). We'll let subsequent
378 * policy (e.g.thermal) decide to lower performance if it
379 * so chooses, but for now we'll crank up the speed.
382 result
= acpi_processor_get_throttling(pr
);
386 if (pr
->throttling
.state
) {
387 result
= acpi_processor_set_throttling(pr
, 0, false);
394 pr
->flags
.throttling
= 0;
397 * _PTC - Processor Throttling Control (and status) register location
399 static int acpi_processor_get_throttling_control(struct acpi_processor
*pr
)
402 acpi_status status
= 0;
403 struct acpi_buffer buffer
= { ACPI_ALLOCATE_BUFFER
, NULL
};
404 union acpi_object
*ptc
= NULL
;
405 union acpi_object obj
;
406 struct acpi_processor_throttling
*throttling
;
408 status
= acpi_evaluate_object(pr
->handle
, "_PTC", NULL
, &buffer
);
409 if (ACPI_FAILURE(status
)) {
410 if (status
!= AE_NOT_FOUND
)
411 acpi_evaluation_failure_warn(pr
->handle
, "_PTC", status
);
416 ptc
= (union acpi_object
*)buffer
.pointer
;
417 if (!ptc
|| (ptc
->type
!= ACPI_TYPE_PACKAGE
)
418 || (ptc
->package
.count
!= 2)) {
419 pr_err("Invalid _PTC data\n");
428 obj
= ptc
->package
.elements
[0];
430 if ((obj
.type
!= ACPI_TYPE_BUFFER
)
431 || (obj
.buffer
.length
< sizeof(struct acpi_ptc_register
))
432 || (obj
.buffer
.pointer
== NULL
)) {
433 pr_err("Invalid _PTC data (control_register)\n");
437 memcpy(&pr
->throttling
.control_register
, obj
.buffer
.pointer
,
438 sizeof(struct acpi_ptc_register
));
444 obj
= ptc
->package
.elements
[1];
446 if ((obj
.type
!= ACPI_TYPE_BUFFER
)
447 || (obj
.buffer
.length
< sizeof(struct acpi_ptc_register
))
448 || (obj
.buffer
.pointer
== NULL
)) {
449 pr_err("Invalid _PTC data (status_register)\n");
454 memcpy(&pr
->throttling
.status_register
, obj
.buffer
.pointer
,
455 sizeof(struct acpi_ptc_register
));
457 throttling
= &pr
->throttling
;
459 if ((throttling
->control_register
.bit_width
+
460 throttling
->control_register
.bit_offset
) > 32) {
461 pr_err("Invalid _PTC control register\n");
466 if ((throttling
->status_register
.bit_width
+
467 throttling
->status_register
.bit_offset
) > 32) {
468 pr_err("Invalid _PTC status register\n");
474 kfree(buffer
.pointer
);
480 * _TSS - Throttling Supported States
482 static int acpi_processor_get_throttling_states(struct acpi_processor
*pr
)
485 acpi_status status
= AE_OK
;
486 struct acpi_buffer buffer
= { ACPI_ALLOCATE_BUFFER
, NULL
};
487 struct acpi_buffer format
= { sizeof("NNNNN"), "NNNNN" };
488 struct acpi_buffer state
= { 0, NULL
};
489 union acpi_object
*tss
= NULL
;
492 status
= acpi_evaluate_object(pr
->handle
, "_TSS", NULL
, &buffer
);
493 if (ACPI_FAILURE(status
)) {
494 if (status
!= AE_NOT_FOUND
)
495 acpi_evaluation_failure_warn(pr
->handle
, "_TSS", status
);
500 tss
= buffer
.pointer
;
501 if (!tss
|| (tss
->type
!= ACPI_TYPE_PACKAGE
)) {
502 pr_err("Invalid _TSS data\n");
507 acpi_handle_debug(pr
->handle
, "Found %d throttling states\n",
510 pr
->throttling
.state_count
= tss
->package
.count
;
511 pr
->throttling
.states_tss
=
512 kmalloc_array(tss
->package
.count
,
513 sizeof(struct acpi_processor_tx_tss
),
515 if (!pr
->throttling
.states_tss
) {
520 for (i
= 0; i
< pr
->throttling
.state_count
; i
++) {
522 struct acpi_processor_tx_tss
*tx
=
523 (struct acpi_processor_tx_tss
*)&(pr
->throttling
.
526 state
.length
= sizeof(struct acpi_processor_tx_tss
);
529 acpi_handle_debug(pr
->handle
, "Extracting state %d\n", i
);
531 status
= acpi_extract_package(&(tss
->package
.elements
[i
]),
533 if (ACPI_FAILURE(status
)) {
534 acpi_handle_warn(pr
->handle
, "Invalid _TSS data: %s\n",
535 acpi_format_exception(status
));
537 kfree(pr
->throttling
.states_tss
);
541 if (!tx
->freqpercentage
) {
542 pr_err("Invalid _TSS data: freq is zero\n");
544 kfree(pr
->throttling
.states_tss
);
550 kfree(buffer
.pointer
);
556 * _TSD - T-State Dependencies
558 static int acpi_processor_get_tsd(struct acpi_processor
*pr
)
561 acpi_status status
= AE_OK
;
562 struct acpi_buffer buffer
= { ACPI_ALLOCATE_BUFFER
, NULL
};
563 struct acpi_buffer format
= { sizeof("NNNNN"), "NNNNN" };
564 struct acpi_buffer state
= { 0, NULL
};
565 union acpi_object
*tsd
= NULL
;
566 struct acpi_tsd_package
*pdomain
;
567 struct acpi_processor_throttling
*pthrottling
;
569 pthrottling
= &pr
->throttling
;
570 pthrottling
->tsd_valid_flag
= 0;
572 status
= acpi_evaluate_object(pr
->handle
, "_TSD", NULL
, &buffer
);
573 if (ACPI_FAILURE(status
)) {
574 if (status
!= AE_NOT_FOUND
)
575 acpi_evaluation_failure_warn(pr
->handle
, "_TSD", status
);
580 tsd
= buffer
.pointer
;
581 if (!tsd
|| (tsd
->type
!= ACPI_TYPE_PACKAGE
)) {
582 pr_err("Invalid _TSD data\n");
587 if (tsd
->package
.count
!= 1) {
588 pr_err("Invalid _TSD data\n");
593 pdomain
= &(pr
->throttling
.domain_info
);
595 state
.length
= sizeof(struct acpi_tsd_package
);
596 state
.pointer
= pdomain
;
598 status
= acpi_extract_package(&(tsd
->package
.elements
[0]),
600 if (ACPI_FAILURE(status
)) {
601 pr_err("Invalid _TSD data\n");
606 if (pdomain
->num_entries
!= ACPI_TSD_REV0_ENTRIES
) {
607 pr_err("Unknown _TSD:num_entries\n");
612 if (pdomain
->revision
!= ACPI_TSD_REV0_REVISION
) {
613 pr_err("Unknown _TSD:revision\n");
618 pthrottling
= &pr
->throttling
;
619 pthrottling
->tsd_valid_flag
= 1;
620 pthrottling
->shared_type
= pdomain
->coord_type
;
621 cpumask_set_cpu(pr
->id
, pthrottling
->shared_cpu_map
);
623 * If the coordination type is not defined in ACPI spec,
624 * the tsd_valid_flag will be clear and coordination type
625 * will be forecd as DOMAIN_COORD_TYPE_SW_ALL.
627 if (pdomain
->coord_type
!= DOMAIN_COORD_TYPE_SW_ALL
&&
628 pdomain
->coord_type
!= DOMAIN_COORD_TYPE_SW_ANY
&&
629 pdomain
->coord_type
!= DOMAIN_COORD_TYPE_HW_ALL
) {
630 pthrottling
->tsd_valid_flag
= 0;
631 pthrottling
->shared_type
= DOMAIN_COORD_TYPE_SW_ALL
;
635 kfree(buffer
.pointer
);
639 /* --------------------------------------------------------------------------
641 -------------------------------------------------------------------------- */
642 static int acpi_processor_get_throttling_fadt(struct acpi_processor
*pr
)
652 if (!pr
->flags
.throttling
)
656 * We don't care about error returns - we just try to mark
657 * these reserved so that nobody else is confused into thinking
658 * that this region might be unused..
660 * (In particular, allocating the IO range for Cardbus)
662 request_region(pr
->throttling
.address
, 6, "ACPI CPU throttle");
664 pr
->throttling
.state
= 0;
666 duty_mask
= pr
->throttling
.state_count
- 1;
668 duty_mask
<<= pr
->throttling
.duty_offset
;
672 value
= inl(pr
->throttling
.address
);
675 * Compute the current throttling state when throttling is enabled
679 duty_value
= value
& duty_mask
;
680 duty_value
>>= pr
->throttling
.duty_offset
;
683 state
= pr
->throttling
.state_count
- duty_value
;
686 pr
->throttling
.state
= state
;
690 acpi_handle_debug(pr
->handle
,
691 "Throttling state is T%d (%d%% throttling applied)\n",
692 state
, pr
->throttling
.states
[state
].performance
);
698 static int acpi_throttling_rdmsr(u64
*value
)
700 u64 msr_high
, msr_low
;
704 if ((this_cpu_read(cpu_info
.x86_vendor
) != X86_VENDOR_INTEL
) ||
705 !this_cpu_has(X86_FEATURE_ACPI
)) {
706 pr_err("HARDWARE addr space,NOT supported yet\n");
710 rdmsr_safe(MSR_IA32_THERM_CONTROL
,
711 (u32
*)&msr_low
, (u32
*) &msr_high
);
712 msr
= (msr_high
<< 32) | msr_low
;
719 static int acpi_throttling_wrmsr(u64 value
)
724 if ((this_cpu_read(cpu_info
.x86_vendor
) != X86_VENDOR_INTEL
) ||
725 !this_cpu_has(X86_FEATURE_ACPI
)) {
726 pr_err("HARDWARE addr space,NOT supported yet\n");
729 wrmsr_safe(MSR_IA32_THERM_CONTROL
,
730 msr
& 0xffffffff, msr
>> 32);
736 static int acpi_throttling_rdmsr(u64
*value
)
738 pr_err("HARDWARE addr space,NOT supported yet\n");
742 static int acpi_throttling_wrmsr(u64 value
)
744 pr_err("HARDWARE addr space,NOT supported yet\n");
749 static int acpi_read_throttling_status(struct acpi_processor
*pr
,
752 u32 bit_width
, bit_offset
;
755 struct acpi_processor_throttling
*throttling
;
758 throttling
= &pr
->throttling
;
759 switch (throttling
->status_register
.space_id
) {
760 case ACPI_ADR_SPACE_SYSTEM_IO
:
761 bit_width
= throttling
->status_register
.bit_width
;
762 bit_offset
= throttling
->status_register
.bit_offset
;
764 acpi_os_read_port((acpi_io_address
) throttling
->status_register
.
766 (u32
) (bit_width
+ bit_offset
));
767 ptc_mask
= (1 << bit_width
) - 1;
768 *value
= (u64
) ((ptc_value
>> bit_offset
) & ptc_mask
);
771 case ACPI_ADR_SPACE_FIXED_HARDWARE
:
772 ret
= acpi_throttling_rdmsr(value
);
775 pr_err("Unknown addr space %d\n",
776 (u32
) (throttling
->status_register
.space_id
));
781 static int acpi_write_throttling_state(struct acpi_processor
*pr
,
784 u32 bit_width
, bit_offset
;
787 struct acpi_processor_throttling
*throttling
;
790 throttling
= &pr
->throttling
;
791 switch (throttling
->control_register
.space_id
) {
792 case ACPI_ADR_SPACE_SYSTEM_IO
:
793 bit_width
= throttling
->control_register
.bit_width
;
794 bit_offset
= throttling
->control_register
.bit_offset
;
795 ptc_mask
= (1 << bit_width
) - 1;
796 ptc_value
= value
& ptc_mask
;
798 acpi_os_write_port((acpi_io_address
) throttling
->
799 control_register
.address
,
800 (u32
) (ptc_value
<< bit_offset
),
801 (u32
) (bit_width
+ bit_offset
));
804 case ACPI_ADR_SPACE_FIXED_HARDWARE
:
805 ret
= acpi_throttling_wrmsr(value
);
808 pr_err("Unknown addr space %d\n",
809 (u32
) (throttling
->control_register
.space_id
));
814 static int acpi_get_throttling_state(struct acpi_processor
*pr
,
819 for (i
= 0; i
< pr
->throttling
.state_count
; i
++) {
820 struct acpi_processor_tx_tss
*tx
=
821 (struct acpi_processor_tx_tss
*)&(pr
->throttling
.
823 if (tx
->control
== value
)
829 static int acpi_get_throttling_value(struct acpi_processor
*pr
,
830 int state
, u64
*value
)
834 if (state
>= 0 && state
<= pr
->throttling
.state_count
) {
835 struct acpi_processor_tx_tss
*tx
=
836 (struct acpi_processor_tx_tss
*)&(pr
->throttling
.
838 *value
= tx
->control
;
844 static int acpi_processor_get_throttling_ptc(struct acpi_processor
*pr
)
853 if (!pr
->flags
.throttling
)
856 pr
->throttling
.state
= 0;
859 ret
= acpi_read_throttling_status(pr
, &value
);
861 state
= acpi_get_throttling_state(pr
, value
);
863 acpi_handle_debug(pr
->handle
,
864 "Invalid throttling state, reset\n");
866 ret
= __acpi_processor_set_throttling(pr
, state
, true,
871 pr
->throttling
.state
= state
;
877 static long __acpi_processor_get_throttling(void *data
)
879 struct acpi_processor
*pr
= data
;
881 return pr
->throttling
.acpi_processor_get_throttling(pr
);
884 static int acpi_processor_get_throttling(struct acpi_processor
*pr
)
889 if (!pr
->flags
.throttling
)
893 * This is either called from the CPU hotplug callback of
894 * processor_driver or via the ACPI probe function. In the latter
895 * case the CPU is not guaranteed to be online. Both call sites are
896 * protected against CPU hotplug.
898 if (!cpu_online(pr
->id
))
901 return call_on_cpu(pr
->id
, __acpi_processor_get_throttling
, pr
, false);
904 static int acpi_processor_get_fadt_info(struct acpi_processor
*pr
)
908 if (!pr
->throttling
.address
) {
909 acpi_handle_debug(pr
->handle
, "No throttling register\n");
911 } else if (!pr
->throttling
.duty_width
) {
912 acpi_handle_debug(pr
->handle
, "No throttling states\n");
915 /* TBD: Support duty_cycle values that span bit 4. */
916 else if ((pr
->throttling
.duty_offset
+ pr
->throttling
.duty_width
) > 4) {
917 pr_warn("duty_cycle spans bit 4\n");
921 pr
->throttling
.state_count
= 1 << acpi_gbl_FADT
.duty_width
;
924 * Compute state values. Note that throttling displays a linear power
925 * performance relationship (at 50% performance the CPU will consume
926 * 50% power). Values are in 1/10th of a percent to preserve accuracy.
929 step
= (1000 / pr
->throttling
.state_count
);
931 for (i
= 0; i
< pr
->throttling
.state_count
; i
++) {
932 pr
->throttling
.states
[i
].performance
= 1000 - step
* i
;
933 pr
->throttling
.states
[i
].power
= 1000 - step
* i
;
938 static int acpi_processor_set_throttling_fadt(struct acpi_processor
*pr
,
939 int state
, bool force
)
948 if ((state
< 0) || (state
> (pr
->throttling
.state_count
- 1)))
951 if (!pr
->flags
.throttling
)
954 if (!force
&& (state
== pr
->throttling
.state
))
957 if (state
< pr
->throttling_platform_limit
)
960 * Calculate the duty_value and duty_mask.
963 duty_value
= pr
->throttling
.state_count
- state
;
965 duty_value
<<= pr
->throttling
.duty_offset
;
967 /* Used to clear all duty_value bits */
968 duty_mask
= pr
->throttling
.state_count
- 1;
970 duty_mask
<<= acpi_gbl_FADT
.duty_offset
;
971 duty_mask
= ~duty_mask
;
977 * Disable throttling by writing a 0 to bit 4. Note that we must
978 * turn it off before you can change the duty_value.
980 value
= inl(pr
->throttling
.address
);
983 outl(value
, pr
->throttling
.address
);
987 * Write the new duty_value and then enable throttling. Note
988 * that a state value of 0 leaves throttling disabled.
993 outl(value
, pr
->throttling
.address
);
996 outl(value
, pr
->throttling
.address
);
999 pr
->throttling
.state
= state
;
1003 acpi_handle_debug(pr
->handle
,
1004 "Throttling state set to T%d (%d%%)\n", state
,
1005 (pr
->throttling
.states
[state
].performance
? pr
->
1006 throttling
.states
[state
].performance
/ 10 : 0));
1011 static int acpi_processor_set_throttling_ptc(struct acpi_processor
*pr
,
1012 int state
, bool force
)
1020 if ((state
< 0) || (state
> (pr
->throttling
.state_count
- 1)))
1023 if (!pr
->flags
.throttling
)
1026 if (!force
&& (state
== pr
->throttling
.state
))
1029 if (state
< pr
->throttling_platform_limit
)
1033 ret
= acpi_get_throttling_value(pr
, state
, &value
);
1035 acpi_write_throttling_state(pr
, value
);
1036 pr
->throttling
.state
= state
;
1042 static long acpi_processor_throttling_fn(void *data
)
1044 struct acpi_processor_throttling_arg
*arg
= data
;
1045 struct acpi_processor
*pr
= arg
->pr
;
1047 return pr
->throttling
.acpi_processor_set_throttling(pr
,
1048 arg
->target_state
, arg
->force
);
1051 static int __acpi_processor_set_throttling(struct acpi_processor
*pr
,
1052 int state
, bool force
, bool direct
)
1056 struct acpi_processor
*match_pr
;
1057 struct acpi_processor_throttling
*p_throttling
;
1058 struct acpi_processor_throttling_arg arg
;
1059 struct throttling_tstate t_state
;
1064 if (!pr
->flags
.throttling
)
1067 if ((state
< 0) || (state
> (pr
->throttling
.state_count
- 1)))
1070 if (cpu_is_offline(pr
->id
)) {
1072 * the cpu pointed by pr->id is offline. Unnecessary to change
1073 * the throttling state any more.
1078 t_state
.target_state
= state
;
1079 p_throttling
= &(pr
->throttling
);
1082 * The throttling notifier will be called for every
1083 * affected cpu in order to get one proper T-state.
1084 * The notifier event is THROTTLING_PRECHANGE.
1086 for_each_cpu_and(i
, cpu_online_mask
, p_throttling
->shared_cpu_map
) {
1088 acpi_processor_throttling_notifier(THROTTLING_PRECHANGE
,
1092 * The function of acpi_processor_set_throttling will be called
1093 * to switch T-state. If the coordination type is SW_ALL or HW_ALL,
1094 * it is necessary to call it for every affected cpu. Otherwise
1095 * it can be called only for the cpu pointed by pr.
1097 if (p_throttling
->shared_type
== DOMAIN_COORD_TYPE_SW_ANY
) {
1099 arg
.target_state
= state
;
1101 ret
= call_on_cpu(pr
->id
, acpi_processor_throttling_fn
, &arg
,
1105 * When the T-state coordination is SW_ALL or HW_ALL,
1106 * it is necessary to set T-state for every affected
1109 for_each_cpu_and(i
, cpu_online_mask
,
1110 p_throttling
->shared_cpu_map
) {
1111 match_pr
= per_cpu(processors
, i
);
1113 * If the pointer is invalid, we will report the
1114 * error message and continue.
1117 acpi_handle_debug(pr
->handle
,
1118 "Invalid Pointer for CPU %d\n", i
);
1122 * If the throttling control is unsupported on CPU i,
1123 * we will report the error message and continue.
1125 if (!match_pr
->flags
.throttling
) {
1126 acpi_handle_debug(pr
->handle
,
1127 "Throttling Control unsupported on CPU %d\n", i
);
1132 arg
.target_state
= state
;
1134 ret
= call_on_cpu(pr
->id
, acpi_processor_throttling_fn
,
1139 * After the set_throttling is called, the
1140 * throttling notifier is called for every
1141 * affected cpu to update the T-states.
1142 * The notifier event is THROTTLING_POSTCHANGE
1144 for_each_cpu_and(i
, cpu_online_mask
, p_throttling
->shared_cpu_map
) {
1146 acpi_processor_throttling_notifier(THROTTLING_POSTCHANGE
,
1153 int acpi_processor_set_throttling(struct acpi_processor
*pr
, int state
,
1156 return __acpi_processor_set_throttling(pr
, state
, force
, false);
1159 int acpi_processor_get_throttling_info(struct acpi_processor
*pr
)
1162 struct acpi_processor_throttling
*pthrottling
;
1164 acpi_handle_debug(pr
->handle
,
1165 "pblk_address[0x%08x] duty_offset[%d] duty_width[%d]\n",
1166 pr
->throttling
.address
,
1167 pr
->throttling
.duty_offset
,
1168 pr
->throttling
.duty_width
);
1171 * Evaluate _PTC, _TSS and _TPC
1172 * They must all be present or none of them can be used.
1174 if (acpi_processor_get_throttling_control(pr
) ||
1175 acpi_processor_get_throttling_states(pr
) ||
1176 acpi_processor_get_platform_limit(pr
)) {
1177 pr
->throttling
.acpi_processor_get_throttling
=
1178 &acpi_processor_get_throttling_fadt
;
1179 pr
->throttling
.acpi_processor_set_throttling
=
1180 &acpi_processor_set_throttling_fadt
;
1181 if (acpi_processor_get_fadt_info(pr
))
1184 pr
->throttling
.acpi_processor_get_throttling
=
1185 &acpi_processor_get_throttling_ptc
;
1186 pr
->throttling
.acpi_processor_set_throttling
=
1187 &acpi_processor_set_throttling_ptc
;
1191 * If TSD package for one CPU can't be parsed successfully, it means
1192 * that this CPU will have no coordination with other CPUs.
1194 if (acpi_processor_get_tsd(pr
)) {
1195 pthrottling
= &pr
->throttling
;
1196 pthrottling
->tsd_valid_flag
= 0;
1197 cpumask_set_cpu(pr
->id
, pthrottling
->shared_cpu_map
);
1198 pthrottling
->shared_type
= DOMAIN_COORD_TYPE_SW_ALL
;
1202 * PIIX4 Errata: We don't support throttling on the original PIIX4.
1203 * This shouldn't be an issue as few (if any) mobile systems ever
1206 if (errata
.piix4
.throttle
) {
1207 acpi_handle_debug(pr
->handle
,
1208 "Throttling not supported on PIIX4 A- or B-step\n");
1212 acpi_handle_debug(pr
->handle
, "Found %d throttling states\n",
1213 pr
->throttling
.state_count
);
1215 pr
->flags
.throttling
= 1;
1218 * Disable throttling (if enabled). We'll let subsequent policy (e.g.
1219 * thermal) decide to lower performance if it so chooses, but for now
1220 * we'll crank up the speed.
1223 result
= acpi_processor_get_throttling(pr
);
1227 if (pr
->throttling
.state
) {
1228 acpi_handle_debug(pr
->handle
,
1229 "Disabling throttling (was T%d)\n",
1230 pr
->throttling
.state
);
1231 result
= acpi_processor_set_throttling(pr
, 0, false);
1238 pr
->flags
.throttling
= 0;