mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-10 07:10:27 +00:00
ACPI: processor: Clear C_C2C3_FFH and C_C1_FFH in arch_acpi_set_proc_cap_bits()
Currently arch_acpi_set_proc_cap_bits() clears ACPI_PDC_C_C2C3_FFH bit in case MWAIT instruction is not supported. It should also clear ACPI_PDC_C_C1_FFH, as when MWAIT is not supported, C1 is entered by executing the HLT instruction. Quote from the C_C1_FFH description: "If set, OSPM is capable of performing native C State instructions (beyond halt) for the C1 handler in multi-processor configurations". As without MWAIT there is no native C-state instructions beyond HALT, this bit should be toggled off." Clear ACPI_PDC_C_C1_FFH and ACPI_PDC_C_C2C3_FFH in arch_acpi_set_proc_cap_bits() in case MWAIT is not supported or overridden. Remove setting those bits from the processor_pdc.c code. Suggested-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Signed-off-by: Michal Wilczynski <michal.wilczynski@intel.com> [ rjw: Subject and changelog edits ] Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
c9e6c5e64f
commit
4f37ab5e05
@ -113,11 +113,12 @@ static inline void arch_acpi_set_proc_cap_bits(u32 *cap)
|
|||||||
*cap |= ACPI_PROC_CAP_T_FFH;
|
*cap |= ACPI_PROC_CAP_T_FFH;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If mwait/monitor is unsupported, C2/C3_FFH will be disabled
|
* If mwait/monitor is unsupported, C_C1_FFH and
|
||||||
|
* C2/C3_FFH will be disabled.
|
||||||
*/
|
*/
|
||||||
if (!cpu_has(c, X86_FEATURE_MWAIT))
|
if (!cpu_has(c, X86_FEATURE_MWAIT) ||
|
||||||
*cap &= ~(ACPI_PROC_CAP_C_C2C3_FFH);
|
boot_option_idle_override == IDLE_NOMWAIT)
|
||||||
|
*cap &= ~(ACPI_PROC_CAP_C_C1_FFH | ACPI_PROC_CAP_C_C2C3_FFH);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool acpi_has_cpu_in_madt(void)
|
static inline bool acpi_has_cpu_in_madt(void)
|
||||||
|
@ -74,20 +74,6 @@ acpi_processor_eval_pdc(acpi_handle handle, struct acpi_object_list *pdc_in)
|
|||||||
{
|
{
|
||||||
acpi_status status = AE_OK;
|
acpi_status status = AE_OK;
|
||||||
|
|
||||||
if (boot_option_idle_override == IDLE_NOMWAIT) {
|
|
||||||
/*
|
|
||||||
* If mwait is disabled for CPU C-states, the C2C3_FFH access
|
|
||||||
* mode will be disabled in the parameter of _PDC object.
|
|
||||||
* Of course C1_FFH access mode will also be disabled.
|
|
||||||
*/
|
|
||||||
union acpi_object *obj;
|
|
||||||
u32 *buffer = NULL;
|
|
||||||
|
|
||||||
obj = pdc_in->pointer;
|
|
||||||
buffer = (u32 *)(obj->buffer.pointer);
|
|
||||||
buffer[2] &= ~(ACPI_PDC_C_C2C3_FFH | ACPI_PDC_C_C1_FFH);
|
|
||||||
|
|
||||||
}
|
|
||||||
status = acpi_evaluate_object(handle, "_PDC", pdc_in, NULL);
|
status = acpi_evaluate_object(handle, "_PDC", pdc_in, NULL);
|
||||||
|
|
||||||
if (ACPI_FAILURE(status))
|
if (ACPI_FAILURE(status))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user