]> git.hungrycats.org Git - linux/commitdiff
drm/i915: save/restore GMBUS freq across suspend/resume on gen4
authorJesse Barnes <jbarnes@virtuousgeek.org>
Wed, 10 Dec 2014 20:16:05 +0000 (12:16 -0800)
committerJiri Slaby <jslaby@suse.cz>
Thu, 30 Jul 2015 11:21:20 +0000 (13:21 +0200)
commit 9f49c37635d5c2a801f7670d5fbf0b25ec461f2c upstream.

Should probably just init this in the GMbus code all the time, based on
the cdclk and HPLL like we do on newer platforms.  Ville has code for
that in a rework branch, but until then we can fix this bug fairly
easily.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=76301
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Tested-by: Nikolay <mar.kolya@gmail.com>
Cc: stable@vger.kernel.org
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/i915_reg.h
drivers/gpu/drm/i915/i915_suspend.c

index 881c9af0971dfeb0ac73bef7493f75d45b745bc0..8bfbbab820ef5721913871dff34203083dfc1ce6 100644 (file)
@@ -817,6 +817,7 @@ struct i915_suspend_saved_registers {
        u32 savePIPEB_LINK_N1;
        u32 saveMCHBAR_RENDER_STANDBY;
        u32 savePCH_PORT_HOTPLUG;
+       u16 saveGCDGMBUS;
 };
 
 struct intel_gen6_power_mgmt {
index 4e0053e64f14eb30e3dbf08db6f43c5cbe5b531c..4438a43cf19362e79504a9c5c8810f0d6956532b 100644 (file)
@@ -72,6 +72,7 @@
 #define   I915_GC_RENDER_CLOCK_166_MHZ (0 << 0)
 #define   I915_GC_RENDER_CLOCK_200_MHZ (1 << 0)
 #define   I915_GC_RENDER_CLOCK_333_MHZ (4 << 0)
+#define GCDGMBUS 0xcc
 #define LBB    0xf4
 
 /* Graphics reset regs */
index 70db618989c42a3bcd3a73df44593a368e2d66d0..97f395f16f1c3874e03ee340c6fffad6e5172017 100644 (file)
@@ -366,6 +366,10 @@ int i915_save_state(struct drm_device *dev)
 
        intel_disable_gt_powersave(dev);
 
+       if (IS_GEN4(dev))
+               pci_read_config_word(dev->pdev, GCDGMBUS,
+                                    &dev_priv->regfile.saveGCDGMBUS);
+
        /* Cache mode state */
        dev_priv->regfile.saveCACHE_MODE_0 = I915_READ(CACHE_MODE_0);
 
@@ -413,6 +417,10 @@ int i915_restore_state(struct drm_device *dev)
                }
        }
 
+       if (IS_GEN4(dev))
+               pci_read_config_word(dev->pdev, GCDGMBUS,
+                                    &dev_priv->regfile.saveGCDGMBUS);
+
        /* Cache mode state */
        I915_WRITE(CACHE_MODE_0, dev_priv->regfile.saveCACHE_MODE_0 | 0xffff0000);