| From 1c60f2342b752149f3d6543c63fee11a167dc998 Mon Sep 17 00:00:00 2001 |
| From: "David E. Box" <david.e.box@linux.intel.com> |
| Date: Thu, 2 Apr 2015 21:24:29 -0700 |
| Subject: [PATCH] Fix Powertop support for Intel Braswell SOC |
| |
| Correct Braswell MSR used to determine PC6 residency. |
| |
| Signed-off-by: David E. Box <david.e.box@linux.intel.com> |
| --- |
| src/cpu/intel_cpus.cpp | 21 +++++++++++++++++++-- |
| src/cpu/intel_cpus.h | 1 + |
| 2 files changed, 20 insertions(+), 2 deletions(-) |
| |
| diff --git a/src/cpu/intel_cpus.cpp b/src/cpu/intel_cpus.cpp |
| index d96cb49..1f3647a 100644 |
| --- a/src/cpu/intel_cpus.cpp |
| +++ b/src/cpu/intel_cpus.cpp |
| @@ -289,6 +289,7 @@ nhm_package::nhm_package(int model) |
| has_c8c9c10_res = 0; |
| has_c2c6_res = 0; |
| has_c7_res = 0; |
| + has_c6c_res = 0; |
| |
| switch(model) { |
| case 0x2A: /* SNB */ |
| @@ -314,6 +315,9 @@ nhm_package::nhm_package(int model) |
| else |
| has_c7_res = 0; |
| } |
| + /* BSW only exposes package C6 */ |
| + else if (model == 0x4C) |
| + has_c6c_res = 1; |
| else |
| has_c3_res = 1; |
| |
| @@ -360,7 +364,15 @@ void nhm_package::measurement_start(void) |
| |
| if (this->has_c3_res) |
| c3_before = get_msr(number, MSR_PKG_C3_RESIDENCY); |
| - c6_before = get_msr(number, MSR_PKG_C6_RESIDENCY); |
| + |
| + /* |
| + * Hack for Braswell where C7 MSR is actually BSW C6 |
| + */ |
| + if (this->has_c6c_res) |
| + c6_before = get_msr(number, MSR_PKG_C7_RESIDENCY); |
| + else |
| + c6_before = get_msr(number, MSR_PKG_C6_RESIDENCY); |
| + |
| if (this->has_c7_res) |
| c7_before = get_msr(number, MSR_PKG_C7_RESIDENCY); |
| if (this->has_c8c9c10_res) { |
| @@ -401,7 +413,12 @@ void nhm_package::measurement_end(void) |
| |
| if (this->has_c3_res) |
| c3_after = get_msr(number, MSR_PKG_C3_RESIDENCY); |
| - c6_after = get_msr(number, MSR_PKG_C6_RESIDENCY); |
| + |
| + if (this->has_c6c_res) |
| + c6_after = get_msr(number, MSR_PKG_C7_RESIDENCY); |
| + else |
| + c6_after = get_msr(number, MSR_PKG_C6_RESIDENCY); |
| + |
| if (this->has_c7_res) |
| c7_after = get_msr(number, MSR_PKG_C7_RESIDENCY); |
| if (has_c8c9c10_res) { |
| diff --git a/src/cpu/intel_cpus.h b/src/cpu/intel_cpus.h |
| index 810a243..0331069 100644 |
| --- a/src/cpu/intel_cpus.h |
| +++ b/src/cpu/intel_cpus.h |
| @@ -77,6 +77,7 @@ public: |
| int has_c7_res; |
| int has_c2c6_res; |
| int has_c3_res; |
| + int has_c6c_res; /* BSW */ |
| int has_c8c9c10_res; |
| nhm_package(int model); |
| virtual void measurement_start(void); |
| -- |
| 2.4.4 |
| |