diff mbox

[1/2] IPS driver: add GPU busy and turbo checking

Message ID 20100520142723.01c217d0@virtuousgeek.org (mailing list archive)
State Deferred, archived
Headers show

Commit Message

Jesse Barnes May 20, 2010, 9:27 p.m. UTC
None
diff mbox

Patch

diff --git a/drivers/platform/x86/intel_ips.c b/drivers/platform/x86/intel_ips.c
index c675bf2..62b1e41 100644
--- a/drivers/platform/x86/intel_ips.c
+++ b/drivers/platform/x86/intel_ips.c
@@ -515,7 +515,10 @@  static void ips_disable_cpu_turbo(struct ips_driver *ips)
  */
 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 @@  static bool cpu_exceeded(struct ips_driver *ips, int cpu)
 	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 @@  static bool mch_exceeded(struct ips_driver *ips)
 	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 @@  static int ips_adjust(void *data)
 			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 @@  static u16 read_mgtv(struct ips_driver *ips)
 
 	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 @@  static int ips_probe(struct pci_dev *dev, const struct pci_device_id *id)
 	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 @@  static int ips_probe(struct pci_dev *dev, const struct pci_device_id *id)
 	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.