|
|
60eb6b |
diff --git a/src/cpu/cpu.cpp b/src/cpu/cpu.cpp
|
|
|
60eb6b |
index f3711f5..019d922 100644
|
|
|
60eb6b |
--- a/src/cpu/cpu.cpp
|
|
|
60eb6b |
+++ b/src/cpu/cpu.cpp
|
|
|
60eb6b |
@@ -68,7 +68,7 @@ static class abstract_cpu * new_package(int package, int cpu, char * vendor, int
|
|
|
60eb6b |
char packagename[128];
|
|
|
60eb6b |
if (strcmp(vendor, "GenuineIntel") == 0)
|
|
|
60eb6b |
if (family == 6)
|
|
|
60eb6b |
- if (is_supported_intel_cpu(model))
|
|
|
60eb6b |
+ if (is_supported_intel_cpu(model, cpu))
|
|
|
60eb6b |
ret = new class nhm_package(model);
|
|
|
60eb6b |
|
|
|
60eb6b |
if (!ret)
|
|
|
60eb6b |
@@ -105,7 +105,7 @@ static class abstract_cpu * new_core(int core, int cpu, char * vendor, int famil
|
|
|
60eb6b |
|
|
|
60eb6b |
if (strcmp(vendor, "GenuineIntel") == 0)
|
|
|
60eb6b |
if (family == 6)
|
|
|
60eb6b |
- if (is_supported_intel_cpu(model))
|
|
|
60eb6b |
+ if (is_supported_intel_cpu(model, cpu))
|
|
|
60eb6b |
ret = new class nhm_core(model);
|
|
|
60eb6b |
|
|
|
60eb6b |
if (!ret)
|
|
|
60eb6b |
@@ -134,7 +134,7 @@ static class abstract_cpu * new_cpu(int number, char * vendor, int family, int m
|
|
|
60eb6b |
|
|
|
60eb6b |
if (strcmp(vendor, "GenuineIntel") == 0)
|
|
|
60eb6b |
if (family == 6)
|
|
|
60eb6b |
- if (is_supported_intel_cpu(model))
|
|
|
60eb6b |
+ if (is_supported_intel_cpu(model, number))
|
|
|
60eb6b |
ret = new class nhm_cpu;
|
|
|
60eb6b |
|
|
|
60eb6b |
if (!ret)
|
|
|
60eb6b |
diff --git a/src/cpu/intel_cpus.cpp b/src/cpu/intel_cpus.cpp
|
|
|
60eb6b |
index 4c7b315..0030dba 100644
|
|
|
60eb6b |
--- a/src/cpu/intel_cpus.cpp
|
|
|
60eb6b |
+++ b/src/cpu/intel_cpus.cpp
|
|
|
60eb6b |
@@ -77,13 +77,15 @@ static int intel_cpu_models[] = {
|
|
|
60eb6b |
|
|
|
60eb6b |
static int intel_pstate_driver_loaded = -1;
|
|
|
60eb6b |
|
|
|
60eb6b |
-int is_supported_intel_cpu(int model)
|
|
|
60eb6b |
+int is_supported_intel_cpu(int model, int cpu)
|
|
|
60eb6b |
{
|
|
|
60eb6b |
int i;
|
|
|
60eb6b |
+ uint64_t msr;
|
|
|
60eb6b |
|
|
|
60eb6b |
for (i = 0; intel_cpu_models[i] != 0; i++)
|
|
|
60eb6b |
if (model == intel_cpu_models[i])
|
|
|
60eb6b |
- return 1;
|
|
|
60eb6b |
+ if (cpu < 0 || read_msr(cpu, MSR_APERF, &msr) >= 0)
|
|
|
60eb6b |
+ return 1;
|
|
|
60eb6b |
|
|
|
60eb6b |
return 0;
|
|
|
60eb6b |
}
|
|
|
60eb6b |
diff --git a/src/cpu/intel_cpus.h b/src/cpu/intel_cpus.h
|
|
|
60eb6b |
index d20db9a..79afb98 100644
|
|
|
60eb6b |
--- a/src/cpu/intel_cpus.h
|
|
|
60eb6b |
+++ b/src/cpu/intel_cpus.h
|
|
|
60eb6b |
@@ -172,7 +172,7 @@ public:
|
|
|
60eb6b |
|
|
|
60eb6b |
};
|
|
|
60eb6b |
|
|
|
60eb6b |
-int is_supported_intel_cpu(int model);
|
|
|
60eb6b |
+int is_supported_intel_cpu(int model, int cpu);
|
|
|
60eb6b |
int byt_has_ahci();
|
|
|
60eb6b |
|
|
|
60eb6b |
int is_intel_pstate_driver_loaded();
|