blob: cabbed44ed03e71c5b5940a8eea415d3e23943fa [file] [log] [blame]
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