summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cpu/intel/Kconfig1
-rw-r--r--src/cpu/intel/turbo/Kconfig6
-rw-r--r--src/cpu/intel/turbo/turbo.c27
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");
}
}