Next Kernel update fix i915 graphics turbo prob?

Questions about hardware and drivers
Forum rules
Before you post please read how to get help

Next Kernel update fix i915 graphics turbo prob?

Postby mrjoeyman on Fri Oct 14, 2011 10:47 pm

I have searched high and low for the answer to this problem, from this forum to Ubuntu's. ( http://ubuntuforums.org/showthread.php?t=1594981 )My graphics card is Intel Hd Graphics and will not function correctly due to a problem that MANY people are having with the kernel not putting something in the right load order. I found that some folks have built kernels that solve the problem for them. Supposedly they fixed them with this patch in ubuntu:


Code: Select all
drivers/gpu/drm/i915/i915_dma.c  |   23 +++++++++++++++++++++++
 drivers/platform/x86/intel_ips.c |   36 +++++++++++++++++++++++++++++++++---
 drivers/platform/x86/intel_ips.h |   21 +++++++++++++++++++++
 3 files changed, 77 insertions(+), 3 deletions(-)
 create mode 100644 drivers/platform/x86/intel_ips.h

diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index 18746e6..8cb7f93 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -34,6 +34,7 @@
 #include "i915_drm.h"
 #include "i915_drv.h"
 #include "i915_trace.h"
+#include "../../../platform/x86/intel_ips.h"
 #include <linux/pci.h>
 #include <linux/vgaarb.h>
 #include <linux/acpi.h>
@@ -1834,6 +1835,26 @@ out_unlock:
 EXPORT_SYMBOL_GPL(i915_gpu_turbo_disable);
 
 /**
+ * Tells the intel_ips driver that the i915 driver is now loaded, if
+ * IPS got loaded first.
+ *
+ * This awkward dance is so that neither module has to depend on the
+ * other in order for IPS to do the appropriate communication of
+ * GPU turbo limits to i915.
+ */
+static void
+ips_ping_for_i915_load(void)
+{
+   void (*link)(void);
+
+   link = symbol_get(ips_link_to_i915_driver);
+   if (link) {
+      link();
+      symbol_put(ips_link_to_i915_driver);
+   }
+}
+
+/**
  * i915_driver_load - setup chip and create an initial config
  * @dev: DRM device
  * @flags: startup flags
@@ -2019,6 +2040,8 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
    dev_priv->mchdev_lock = &mchdev_lock;
    spin_unlock(&mchdev_lock);
 
+   ips_ping_for_i915_load();
+
    return 0;
 
 out_gem_unload:
diff --git a/drivers/platform/x86/intel_ips.c b/drivers/platform/x86/intel_ips.c
index aa5f9b6..a8d21ee 100644
--- a/drivers/platform/x86/intel_ips.c
+++ b/drivers/platform/x86/intel_ips.c
@@ -75,6 +75,7 @@
 #include <drm/i915_drm.h>
 #include <asm/msr.h>
 #include <asm/processor.h>
+#include "intel_ips.h"
 
 #define PCI_DEVICE_ID_INTEL_THERMAL_SENSOR 0x3b32
 
@@ -245,6 +246,7 @@
 #define thm_writel(off, val) writel((val), ips->regmap + (off))
 
 static const int IPS_ADJUST_PERIOD = 5000; /* ms */
+static bool late_i915_load = false;
 
 /* For initial average collection */
 static const int IPS_SAMPLE_PERIOD = 200; /* ms */
@@ -339,6 +341,9 @@ struct ips_driver {
    u64 orig_turbo_ratios;
 };
 
+static bool
+ips_gpu_turbo_enabled(struct ips_driver *ips);
+
 /**
  * ips_cpu_busy - is CPU busy?
  * @ips: IPS driver struct
@@ -517,7 +522,7 @@ static void ips_disable_cpu_turbo(struct ips_driver *ips)
  */
 static bool ips_gpu_busy(struct ips_driver *ips)
 {
-   if (!ips->gpu_turbo_enabled)
+   if (!ips_gpu_turbo_enabled(ips))
       return false;
 
    return ips->gpu_busy();
@@ -532,7 +537,7 @@ static bool ips_gpu_busy(struct ips_driver *ips)
  */
 static void ips_gpu_raise(struct ips_driver *ips)
 {
-   if (!ips->gpu_turbo_enabled)
+   if (!ips_gpu_turbo_enabled(ips))
       return;
 
    if (!ips->gpu_raise())
@@ -549,7 +554,7 @@ static void ips_gpu_raise(struct ips_driver *ips)
  */
 static void ips_gpu_lower(struct ips_driver *ips)
 {
-   if (!ips->gpu_turbo_enabled)
+   if (!ips_gpu_turbo_enabled(ips))
       return;
 
    if (!ips->gpu_lower())
@@ -1454,6 +1459,31 @@ out_err:
    return false;
 }
 
+static bool
+ips_gpu_turbo_enabled(struct ips_driver *ips)
+{
+   if (!ips->gpu_busy && late_i915_load) {
+      if (ips_get_i915_syms(ips)) {
+         dev_info(&ips->dev->dev,
+             "i915 driver attached, reenabling gpu turbo\n");
+         ips->gpu_turbo_enabled = !(thm_readl(THM_HTS) & HTS_GTD_DIS);
+      }
+   }
+
+   return ips->gpu_turbo_enabled;
+}
+
+void
+ips_link_to_i915_driver()
+{
+   /* We can't cleanly get at the various ips_driver structs from
+    * this caller (the i915 driver), so just set a flag saying
+    * that it's time to try getting the symbols again.
+    */
+   late_i915_load = true;
+}
+EXPORT_SYMBOL_GPL(ips_link_to_i915_driver);
+
 static DEFINE_PCI_DEVICE_TABLE(ips_id_table) = {
    { PCI_DEVICE(PCI_VENDOR_ID_INTEL,
            PCI_DEVICE_ID_INTEL_THERMAL_SENSOR), },
diff --git a/drivers/platform/x86/intel_ips.h b/drivers/platform/x86/intel_ips.h
new file mode 100644
index 0000000..73299be
--- /dev/null
+++ b/drivers/platform/x86/intel_ips.h
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2010 Intel Corporation
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * The full GNU General Public License is included in this distribution in
+ * the file called "COPYING".
+ */
+
+void ips_link_to_i915_driver(void);
--
1.7.2.3


Is there any way someone can or (tell me how) to make this patch work with the newest LMDE kernel? Or maybe does anyone know if it will be addressed in one of the rolling distro upgrades? This is one problem that I wish Clem could weigh in on.
mrjoeyman
Level 2
Level 2
 
Posts: 90
Joined: Sat Oct 01, 2011 10:17 pm

Linux Mint is funded by ads and donations.
 

Return to Hardware Support

Who is online

Users browsing this forum: No registered users and 1 guest