diff options
Diffstat (limited to 'src/cpu/intel')
-rw-r--r-- | src/cpu/intel/Kconfig | 1 | ||||
-rw-r--r-- | src/cpu/intel/turbo/Kconfig | 6 | ||||
-rw-r--r-- | src/cpu/intel/turbo/turbo.c | 27 |
3 files changed, 32 insertions, 2 deletions
diff --git a/src/cpu/intel/Kconfig b/src/cpu/intel/Kconfig index 6f4f561bf2..af0361945f 100644 --- a/src/cpu/intel/Kconfig +++ b/src/cpu/intel/Kconfig @@ -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 diff --git a/src/cpu/intel/turbo/Kconfig b/src/cpu/intel/turbo/Kconfig new file mode 100644 index 0000000000..5432c28eb3 --- /dev/null +++ b/src/cpu/intel/turbo/Kconfig @@ -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 diff --git a/src/cpu/intel/turbo/turbo.c b/src/cpu/intel/turbo/turbo.c index 779550e26b..7599ff1d05 100644 --- a/src/cpu/intel/turbo/turbo.c +++ b/src/cpu/intel/turbo/turbo.c @@ -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"); } } |