IPS driver: add GPU busy and turbo checking
Be sure to enable GPU turbo by default at load time and check GPU busy
and MCP exceeded status correctly. Also fix up CPU power comparison and
work around buggy MCH temp reporting.
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: Matthew Garrett <mjg@redhat.com>
diff --git a/drivers/platform/x86/intel_ips.c b/drivers/platform/x86/intel_ips.c
index f1dce3b..cdaf40e 100644
--- a/drivers/platform/x86/intel_ips.c
+++ b/drivers/platform/x86/intel_ips.c
@@ -515,7 +515,10 @@
*/
static bool ips_gpu_busy(struct ips_driver *ips)
{
- return false;
+ if (!ips->gpu_turbo_enabled)
+ return false;
+
+ return ips->gpu_busy();
}
/**
@@ -627,7 +630,7 @@
avg = cpu ? ips->ctv2_avg_temp : ips->ctv1_avg_temp;
if (avg > (ips->limits->core_temp_limit * 100))
ret = true;
- if (ips->cpu_avg_power > ips->core_power_limit)
+ if (ips->cpu_avg_power > ips->core_power_limit * 100)
ret = true;
spin_unlock_irqrestore(&ips->turbo_status_lock, flags);
@@ -652,6 +655,8 @@
spin_lock_irqsave(&ips->turbo_status_lock, flags);
if (ips->mch_avg_temp > (ips->limits->mch_temp_limit * 100))
ret = true;
+ if (ips->mch_avg_power > ips->mch_power_limit)
+ ret = true;
spin_unlock_irqrestore(&ips->turbo_status_lock, flags);
return ret;
@@ -747,7 +752,7 @@
ips_disable_gpu_turbo(ips);
/* We're outside our comfort zone, crank them down */
- if (!mcp_exceeded(ips)) {
+ if (mcp_exceeded(ips)) {
ips_cpu_lower(ips);
ips_gpu_lower(ips);
goto sleep;
@@ -808,8 +813,7 @@
ret = ((val * slope + 0x40) >> 7) + offset;
-
- return ret;
+ return 0; /* MCH temp reporting buggy */
}
static u16 read_ptv(struct ips_driver *ips)
@@ -1471,14 +1475,6 @@
if (trc & TRC_CORE2_EN)
ips->second_cpu = true;
- if (!ips_get_i915_syms(ips)) {
- dev_err(&dev->dev, "failed to get i915 symbols, graphics turbo disabled\n");
- ips->gpu_turbo_enabled = false;
- } else {
- dev_dbg(&dev->dev, "graphics turbo enabled\n");
- ips->gpu_turbo_enabled = true;
- }
-
update_turbo_limits(ips);
dev_dbg(&dev->dev, "max cpu power clamp: %dW\n",
ips->mcp_power_limit / 10);
@@ -1488,6 +1484,14 @@
if (thm_readl(THM_PSC) & PSP_PBRT)
ips->poll_turbo_status = true;
+ if (!ips_get_i915_syms(ips)) {
+ dev_err(&dev->dev, "failed to get i915 symbols, graphics turbo disabled\n");
+ ips->gpu_turbo_enabled = false;
+ } else {
+ dev_dbg(&dev->dev, "graphics turbo enabled\n");
+ ips->gpu_turbo_enabled = true;
+ }
+
/*
* Check PLATFORM_INFO MSR to make sure this chip is
* turbo capable.