mirror of
https://github.com/fail0verflow/switch-coreboot.git
synced 2025-05-04 01:39:18 -04:00
cpu/intel: allow non-packaged scoped turbo setting
In the past the turbo disable setting (bit 38) of the IA32_MISC_ENABLES msr has been package scoped. That means knocking the turbo disable bit down enabled turbo for the entire package. Sadly, that's no longer true on all Intel processors. Therefore, allow non-packaged scoped turbo setting by introducing the CPU_INTEL_TURBO_NOT_PACKAGE_SCOPED Kconfig option. It defaults to false which was the original assumption. BUG=chrome-os-partner:25014 BRANCH=baytrail TEST=Built and ran both ways successfully. Change-Id: I71a31e76ff47878023081fc47da643187517b597 Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/182405 Reviewed-by: Duncan Laurie <dlaurie@chromium.org> Reviewed-on: http://review.coreboot.org/5047 Tested-by: build bot (Jenkins) Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
This commit is contained in:
parent
cd3f8ad235
commit
ba6b07e888
3 changed files with 32 additions and 2 deletions
|
@ -37,3 +37,4 @@ source src/cpu/intel/socket_LGA775/Kconfig
|
|||
source src/cpu/intel/socket_rPGA989/Kconfig
|
||||
# Architecture specific features
|
||||
source src/cpu/intel/fit/Kconfig
|
||||
source src/cpu/intel/turbo/Kconfig
|
||||
|
|
6
src/cpu/intel/turbo/Kconfig
Normal file
6
src/cpu/intel/turbo/Kconfig
Normal file
|
@ -0,0 +1,6 @@
|
|||
|
||||
config CPU_INTEL_TURBO_NOT_PACKAGE_SCOPED
|
||||
def_bool n
|
||||
help
|
||||
This option indicates that the turbo mode setting is not package
|
||||
scoped. i.e. enable_turbo() needs to be called on not just the bsp
|
|
@ -24,7 +24,28 @@
|
|||
#include <cpu/x86/msr.h>
|
||||
#include <arch/cpu.h>
|
||||
|
||||
static int turbo_state = TURBO_UNKNOWN;
|
||||
#if CONFIG_CPU_INTEL_TURBO_NOT_PACKAGE_SCOPED
|
||||
static inline int get_global_turbo_state(void)
|
||||
{
|
||||
return TURBO_UNKNOWN;
|
||||
}
|
||||
|
||||
static inline void set_global_turbo_state(int state)
|
||||
{
|
||||
}
|
||||
#else
|
||||
static int g_turbo_state = TURBO_UNKNOWN;
|
||||
|
||||
static inline int get_global_turbo_state(void)
|
||||
{
|
||||
return g_turbo_state;
|
||||
}
|
||||
|
||||
static inline void set_global_turbo_state(int state)
|
||||
{
|
||||
g_turbo_state = state;
|
||||
}
|
||||
#endif
|
||||
|
||||
static const char *turbo_state_desc[] = {
|
||||
[TURBO_UNKNOWN] = "unknown",
|
||||
|
@ -43,6 +64,7 @@ int get_turbo_state(void)
|
|||
struct cpuid_result cpuid_regs;
|
||||
int turbo_en, turbo_cap;
|
||||
msr_t msr;
|
||||
int turbo_state = get_global_turbo_state();
|
||||
|
||||
/* Return cached state if available */
|
||||
if (turbo_state != TURBO_UNKNOWN)
|
||||
|
@ -65,6 +87,7 @@ int get_turbo_state(void)
|
|||
turbo_state = TURBO_ENABLED;
|
||||
}
|
||||
|
||||
set_global_turbo_state(turbo_state);
|
||||
printk(BIOS_INFO, "Turbo is %s\n", turbo_state_desc[turbo_state]);
|
||||
return turbo_state;
|
||||
}
|
||||
|
@ -84,7 +107,7 @@ void enable_turbo(void)
|
|||
wrmsr(MSR_IA32_MISC_ENABLES, msr);
|
||||
|
||||
/* Update cached turbo state */
|
||||
turbo_state = TURBO_ENABLED;
|
||||
set_global_turbo_state(TURBO_ENABLED);
|
||||
printk(BIOS_INFO, "Turbo has been enabled\n");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue