aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/i915/i915_dma.c6
-rw-r--r--drivers/gpu/drm/i915/intel_display.c27
-rw-r--r--drivers/gpu/drm/i915/intel_drv.h1
3 files changed, 23 insertions, 11 deletions
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index 3de60503378e..9b265a4c6a3d 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -1351,6 +1351,12 @@ static int i915_load_modeset_init(struct drm_device *dev)
1351 */ 1351 */
1352 intel_fbdev_initial_config(dev); 1352 intel_fbdev_initial_config(dev);
1353 1353
1354 /*
1355 * Must do this after fbcon init so that
1356 * vgacon_save_screen() works during the handover.
1357 */
1358 i915_disable_vga_mem(dev);
1359
1354 /* Only enable hotplug handling once the fbdev is fully set up. */ 1360 /* Only enable hotplug handling once the fbdev is fully set up. */
1355 dev_priv->enable_hotplug_processing = true; 1361 dev_priv->enable_hotplug_processing = true;
1356 1362
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 0ee89011c19a..2489d0b4c7d2 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -10040,15 +10040,6 @@ static void i915_disable_vga(struct drm_device *dev)
10040 outb(SR01, VGA_SR_INDEX); 10040 outb(SR01, VGA_SR_INDEX);
10041 sr1 = inb(VGA_SR_DATA); 10041 sr1 = inb(VGA_SR_DATA);
10042 outb(sr1 | 1<<5, VGA_SR_DATA); 10042 outb(sr1 | 1<<5, VGA_SR_DATA);
10043
10044 /* Disable VGA memory on Intel HD */
10045 if (HAS_PCH_SPLIT(dev)) {
10046 outb(inb(VGA_MSR_READ) & ~VGA_MSR_MEM_EN, VGA_MSR_WRITE);
10047 vga_set_legacy_decoding(dev->pdev, VGA_RSRC_LEGACY_IO |
10048 VGA_RSRC_NORMAL_IO |
10049 VGA_RSRC_NORMAL_MEM);
10050 }
10051
10052 vga_put(dev->pdev, VGA_RSRC_LEGACY_IO); 10043 vga_put(dev->pdev, VGA_RSRC_LEGACY_IO);
10053 udelay(300); 10044 udelay(300);
10054 10045
@@ -10056,7 +10047,7 @@ static void i915_disable_vga(struct drm_device *dev)
10056 POSTING_READ(vga_reg); 10047 POSTING_READ(vga_reg);
10057} 10048}
10058 10049
10059static void i915_enable_vga(struct drm_device *dev) 10050static void i915_enable_vga_mem(struct drm_device *dev)
10060{ 10051{
10061 /* Enable VGA memory on Intel HD */ 10052 /* Enable VGA memory on Intel HD */
10062 if (HAS_PCH_SPLIT(dev)) { 10053 if (HAS_PCH_SPLIT(dev)) {
@@ -10070,6 +10061,19 @@ static void i915_enable_vga(struct drm_device *dev)
10070 } 10061 }
10071} 10062}
10072 10063
10064void i915_disable_vga_mem(struct drm_device *dev)
10065{
10066 /* Disable VGA memory on Intel HD */
10067 if (HAS_PCH_SPLIT(dev)) {
10068 vga_get_uninterruptible(dev->pdev, VGA_RSRC_LEGACY_IO);
10069 outb(inb(VGA_MSR_READ) & ~VGA_MSR_MEM_EN, VGA_MSR_WRITE);
10070 vga_set_legacy_decoding(dev->pdev, VGA_RSRC_LEGACY_IO |
10071 VGA_RSRC_NORMAL_IO |
10072 VGA_RSRC_NORMAL_MEM);
10073 vga_put(dev->pdev, VGA_RSRC_LEGACY_IO);
10074 }
10075}
10076
10073void intel_modeset_init_hw(struct drm_device *dev) 10077void intel_modeset_init_hw(struct drm_device *dev)
10074{ 10078{
10075 intel_init_power_well(dev); 10079 intel_init_power_well(dev);
@@ -10348,6 +10352,7 @@ void i915_redisable_vga(struct drm_device *dev)
10348 if (I915_READ(vga_reg) != VGA_DISP_DISABLE) { 10352 if (I915_READ(vga_reg) != VGA_DISP_DISABLE) {
10349 DRM_DEBUG_KMS("Something enabled VGA plane, disabling it\n"); 10353 DRM_DEBUG_KMS("Something enabled VGA plane, disabling it\n");
10350 i915_disable_vga(dev); 10354 i915_disable_vga(dev);
10355 i915_disable_vga_mem(dev);
10351 } 10356 }
10352} 10357}
10353 10358
@@ -10561,7 +10566,7 @@ void intel_modeset_cleanup(struct drm_device *dev)
10561 10566
10562 intel_disable_fbc(dev); 10567 intel_disable_fbc(dev);
10563 10568
10564 i915_enable_vga(dev); 10569 i915_enable_vga_mem(dev);
10565 10570
10566 intel_disable_gt_powersave(dev); 10571 intel_disable_gt_powersave(dev);
10567 10572
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index dbfe5f7bb3de..a47799e832c6 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -792,5 +792,6 @@ extern void hsw_pc8_disable_interrupts(struct drm_device *dev);
792extern void hsw_pc8_restore_interrupts(struct drm_device *dev); 792extern void hsw_pc8_restore_interrupts(struct drm_device *dev);
793extern void intel_aux_display_runtime_get(struct drm_i915_private *dev_priv); 793extern void intel_aux_display_runtime_get(struct drm_i915_private *dev_priv);
794extern void intel_aux_display_runtime_put(struct drm_i915_private *dev_priv); 794extern void intel_aux_display_runtime_put(struct drm_i915_private *dev_priv);
795extern void i915_disable_vga_mem(struct drm_device *dev);
795 796
796#endif /* __INTEL_DRV_H__ */ 797#endif /* __INTEL_DRV_H__ */