]> Pileus Git - ~andy/linux/blobdiff - drivers/gpu/drm/i915/intel_display.c
drm/i915: Delay disabling of VGA memory until vgacon->fbcon handoff is done
[~andy/linux] / drivers / gpu / drm / i915 / intel_display.c
index 0ee89011c19af2e8d33fa6f8efa93f64aca1fa71..2489d0b4c7d2db8a8b5d74c04107f1b405c8ad35 100644 (file)
@@ -10040,15 +10040,6 @@ 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);
 
@@ -10056,7 +10047,7 @@ static void i915_disable_vga(struct drm_device *dev)
        POSTING_READ(vga_reg);
 }
 
-static void i915_enable_vga(struct drm_device *dev)
+static void i915_enable_vga_mem(struct drm_device *dev)
 {
        /* Enable VGA memory on Intel HD */
        if (HAS_PCH_SPLIT(dev)) {
@@ -10070,6 +10061,19 @@ static void i915_enable_vga(struct drm_device *dev)
        }
 }
 
+void i915_disable_vga_mem(struct drm_device *dev)
+{
+       /* Disable 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_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);
@@ -10348,6 +10352,7 @@ void i915_redisable_vga(struct drm_device *dev)
        if (I915_READ(vga_reg) != VGA_DISP_DISABLE) {
                DRM_DEBUG_KMS("Something enabled VGA plane, disabling it\n");
                i915_disable_vga(dev);
+               i915_disable_vga_mem(dev);
        }
 }
 
@@ -10561,7 +10566,7 @@ void intel_modeset_cleanup(struct drm_device *dev)
 
        intel_disable_fbc(dev);
 
-       i915_enable_vga(dev);
+       i915_enable_vga_mem(dev);
 
        intel_disable_gt_powersave(dev);