cpu/intel/haswell: Enable timed MWAIT if supported

Broadwell code unconditionally enables timed MWAIT, but not all Haswell
steppings support it. In preparation for merging Haswell and Broadwell,
also enable timed MWAIT on Haswell code, but only if it is supported.

Change-Id: I1d11d62f1801d65ae4d5623994fd55fd35e8f34a
Signed-off-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/46916
Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
Angel Pons
2020-10-28 22:23:02 +01:00
committed by Patrick Georgi
parent 8199b88222
commit c89d2a2890
2 changed files with 8 additions and 1 deletions

View File

@@ -431,7 +431,9 @@ void set_power_limits(u8 power_limit_1_time)
static void configure_c_states(void)
{
msr_t msr;
msr_t msr = rdmsr(MSR_PLATFORM_INFO);
const bool timed_mwait_capable = !!(msr.hi & TIMED_MWAIT_SUPPORTED);
msr = rdmsr(MSR_PKG_CST_CONFIG_CONTROL);
msr.lo |= (1 << 30); // Package c-state Undemotion Enable
@@ -441,6 +443,10 @@ static void configure_c_states(void)
msr.lo |= (1 << 26); // C1 Auto Demotion Enable
msr.lo |= (1 << 25); // C3 Auto Demotion Enable
msr.lo &= ~(1 << 10); // Disable IO MWAIT redirection
if (timed_mwait_capable)
msr.lo |= (1 << 31); // Timed MWAIT Enable
/* The deepest package c-state defaults to factory-configured value. */
wrmsr(MSR_PKG_CST_CONFIG_CONTROL, msr);