summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKyle McMartin <kyle@dreadnought.i.jkkm.org>2010-09-30 13:14:30 -0400
committerKyle McMartin <kyle@dreadnought.i.jkkm.org>2010-09-30 13:14:30 -0400
commita1ae90088001391a0a1d4892f5850a02564102cc (patch)
tree79aba6348a3c41c559aee2ee13275b2e3e9b9139
parentb990650569ea9685a17d761f133ae0160a8344af (diff)
downloadkernel-a1ae90088001391a0a1d4892f5850a02564102cc.tar.gz
kernel-a1ae90088001391a0a1d4892f5850a02564102cc.tar.xz
kernel-a1ae90088001391a0a1d4892f5850a02564102cc.zip
make intel_ips work
-rw-r--r--fix-intel_ips-to-work-properly.patch105
-rw-r--r--kernel.spec9
2 files changed, 113 insertions, 1 deletions
diff --git a/fix-intel_ips-to-work-properly.patch b/fix-intel_ips-to-work-properly.patch
new file mode 100644
index 000000000..a5e03d294
--- /dev/null
+++ b/fix-intel_ips-to-work-properly.patch
@@ -0,0 +1,105 @@
+diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
+index 9d67b48..c74e4e8 100644
+--- a/drivers/gpu/drm/i915/i915_dma.c
++++ b/drivers/gpu/drm/i915/i915_dma.c
+@@ -1787,9 +1787,9 @@ unsigned long i915_chipset_val(struct drm_i915_private *dev_priv)
+ }
+ }
+
+- div_u64(diff, diff1);
++ diff = div_u64(diff, diff1);
+ ret = ((m * diff) + c);
+- div_u64(ret, 10);
++ ret = div_u64(ret, 10);
+
+ dev_priv->last_count1 = total_count;
+ dev_priv->last_time1 = now;
+@@ -1858,7 +1858,7 @@ void i915_update_gfx_val(struct drm_i915_private *dev_priv)
+
+ /* More magic constants... */
+ diff = diff * 1181;
+- div_u64(diff, diffms * 10);
++ diff = div_u64(diff, diffms * 10);
+ dev_priv->gfx_power = diff;
+ }
+
+diff --git a/drivers/platform/x86/intel_ips.c b/drivers/platform/x86/intel_ips.c
+index 9024480..bfa9c72 100644
+--- a/drivers/platform/x86/intel_ips.c
++++ b/drivers/platform/x86/intel_ips.c
+@@ -230,7 +230,7 @@
+ #define THM_TC2 0xac
+ #define THM_DTV 0xb0
+ #define THM_ITV 0xd8
+-#define ITV_ME_SEQNO_MASK 0x000f0000 /* ME should update every ~200ms */
++#define ITV_ME_SEQNO_MASK 0x00ff0000 /* ME should update every ~200ms */
+ #define ITV_ME_SEQNO_SHIFT (16)
+ #define ITV_MCH_TEMP_MASK 0x0000ff00
+ #define ITV_MCH_TEMP_SHIFT (8)
+@@ -940,7 +940,6 @@ static int ips_monitor(void *data)
+ kfree(mch_samples);
+ kfree(cpu_samples);
+ kfree(mchp_samples);
+- kthread_stop(ips->adjust);
+ return -ENOMEM;
+ }
+
+@@ -948,7 +947,7 @@ static int ips_monitor(void *data)
+ ITV_ME_SEQNO_SHIFT;
+ seqno_timestamp = get_jiffies_64();
+
+- old_cpu_power = thm_readl(THM_CEC) / 65535;
++ old_cpu_power = thm_readl(THM_CEC);
+ schedule_timeout_interruptible(msecs_to_jiffies(IPS_SAMPLE_PERIOD));
+
+ /* Collect an initial average */
+@@ -1390,7 +1389,7 @@ static bool ips_get_i915_syms(struct ips_driver *ips)
+ return true;
+
+ out_put_busy:
+- symbol_put(i915_gpu_turbo_disable);
++ symbol_put(i915_gpu_busy);
+ out_put_lower:
+ symbol_put(i915_gpu_lower);
+ out_put_raise:
+@@ -1535,19 +1534,24 @@ static int ips_probe(struct pci_dev *dev, const struct pci_device_id *id)
+ ips_enable_cpu_turbo(ips);
+ ips->cpu_turbo_enabled = true;
+
+- /* Set up the work queue and monitor/adjust threads */
+- ips->monitor = kthread_run(ips_monitor, ips, "ips-monitor");
+- if (IS_ERR(ips->monitor)) {
++ /* Create thermal adjust thread */
++ ips->adjust = kthread_create(ips_adjust, ips, "ips-adjust");
++ if (IS_ERR(ips->adjust)) {
+ dev_err(&dev->dev,
+- "failed to create thermal monitor thread, aborting\n");
++ "failed to create thermal adjust thread, aborting\n");
+ ret = -ENOMEM;
+ goto error_free_irq;
++
+ }
+
+- ips->adjust = kthread_create(ips_adjust, ips, "ips-adjust");
+- if (IS_ERR(ips->adjust)) {
++ /*
++ * Set up the work queue and monitor thread. The monitor thread
++ * will wake up ips_adjust thread.
++ */
++ ips->monitor = kthread_run(ips_monitor, ips, "ips-monitor");
++ if (IS_ERR(ips->monitor)) {
+ dev_err(&dev->dev,
+- "failed to create thermal adjust thread, aborting\n");
++ "failed to create thermal monitor thread, aborting\n");
+ ret = -ENOMEM;
+ goto error_thread_cleanup;
+ }
+@@ -1566,7 +1570,7 @@ static int ips_probe(struct pci_dev *dev, const struct pci_device_id *id)
+ return ret;
+
+ error_thread_cleanup:
+- kthread_stop(ips->monitor);
++ kthread_stop(ips->adjust);
+ error_free_irq:
+ free_irq(ips->dev->irq, ips);
+ error_unmap:
diff --git a/kernel.spec b/kernel.spec
index 1be1b8ade..3613ec780 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -51,7 +51,7 @@ Summary: The Linux kernel
# For non-released -rc kernels, this will be prepended with "0.", so
# for example a 3 here will become 0.3
#
-%global baserelease 28
+%global baserelease 30
%global fedora_build %{baserelease}
# base_sublevel is the kernel version we're starting with and patching
@@ -723,6 +723,8 @@ Patch12224: pci-v2-4-4-PCI-allocate-bus-resources-from-the-top-down.patch
Patch12300: btusb-macbookpro-7-1.patch
Patch12301: btusb-macbookpro-6-2.patch
+Patch12310: fix-intel_ips-to-work-properly.patch
+
%endif
BuildRoot: %{_tmppath}/kernel-%{KVERREL}-root
@@ -1328,6 +1330,8 @@ ApplyPatch pci-v2-4-4-PCI-allocate-bus-resources-from-the-top-down.patch
ApplyPatch btusb-macbookpro-7-1.patch
ApplyPatch btusb-macbookpro-6-2.patch
+ApplyPatch fix-intel_ips-to-work-properly.patch
+
# END OF PATCH APPLICATIONS
%endif
@@ -1935,6 +1939,9 @@ fi
# || ||
%changelog
+* Thu Sep 30 2010 Kyle McMartin <kyle@redhat.com> 2.6.36-0.30.rc6
+- Collection of patches to make intel_ips work properly.
+
* Wed Sep 29 2010 Dave Jones <davej@redhat.com>
- Add back an old hack to make an SDV e1000e variant work.