|
@@ -10041,6 +10041,15 @@ static void i915_disable_vga(struct drm_device *dev)
|
|
|
outb(SR01, VGA_SR_INDEX);
|
|
|
sr1 = inb(VGA_SR_DATA);
|
|
|
outb(sr1 | 1<<5, VGA_SR_DATA);
|
|
|
+
|
|
|
+ /* Disable VGA memory on Intel HD */
|
|
|
+ if (HAS_PCH_SPLIT(dev)) {
|
|
|
+ outb(inb(VGA_MSR_READ) & ~VGA_MSR_MEM_EN, VGA_MSR_WRITE);
|
|
|
+ vga_set_legacy_decoding(dev->pdev, VGA_RSRC_LEGACY_IO |
|
|
|
+ VGA_RSRC_NORMAL_IO |
|
|
|
+ VGA_RSRC_NORMAL_MEM);
|
|
|
+ }
|
|
|
+
|
|
|
vga_put(dev->pdev, VGA_RSRC_LEGACY_IO);
|
|
|
udelay(300);
|
|
|
|
|
@@ -10048,6 +10057,20 @@ static void i915_disable_vga(struct drm_device *dev)
|
|
|
POSTING_READ(vga_reg);
|
|
|
}
|
|
|
|
|
|
+static void i915_enable_vga(struct drm_device *dev)
|
|
|
+{
|
|
|
+ /* Enable VGA memory on Intel HD */
|
|
|
+ if (HAS_PCH_SPLIT(dev)) {
|
|
|
+ vga_get_uninterruptible(dev->pdev, VGA_RSRC_LEGACY_IO);
|
|
|
+ outb(inb(VGA_MSR_READ) | VGA_MSR_MEM_EN, VGA_MSR_WRITE);
|
|
|
+ vga_set_legacy_decoding(dev->pdev, VGA_RSRC_LEGACY_IO |
|
|
|
+ VGA_RSRC_LEGACY_MEM |
|
|
|
+ VGA_RSRC_NORMAL_IO |
|
|
|
+ VGA_RSRC_NORMAL_MEM);
|
|
|
+ vga_put(dev->pdev, VGA_RSRC_LEGACY_IO);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
void intel_modeset_init_hw(struct drm_device *dev)
|
|
|
{
|
|
|
intel_init_power_well(dev);
|
|
@@ -10539,6 +10562,8 @@ void intel_modeset_cleanup(struct drm_device *dev)
|
|
|
|
|
|
intel_disable_fbc(dev);
|
|
|
|
|
|
+ i915_enable_vga(dev);
|
|
|
+
|
|
|
intel_disable_gt_powersave(dev);
|
|
|
|
|
|
ironlake_teardown_rc6(dev);
|