diff options
-rw-r--r-- | drivers/gpu/drm/i915/i915_dma.c | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 27 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_drv.h | 1 |
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 | ||
10059 | static void i915_enable_vga(struct drm_device *dev) | 10050 | static 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 | ||
10064 | void 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 | |||
10073 | void intel_modeset_init_hw(struct drm_device *dev) | 10077 | void 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); | |||
792 | extern void hsw_pc8_restore_interrupts(struct drm_device *dev); | 792 | extern void hsw_pc8_restore_interrupts(struct drm_device *dev); |
793 | extern void intel_aux_display_runtime_get(struct drm_i915_private *dev_priv); | 793 | extern void intel_aux_display_runtime_get(struct drm_i915_private *dev_priv); |
794 | extern void intel_aux_display_runtime_put(struct drm_i915_private *dev_priv); | 794 | extern void intel_aux_display_runtime_put(struct drm_i915_private *dev_priv); |
795 | extern void i915_disable_vga_mem(struct drm_device *dev); | ||
795 | 796 | ||
796 | #endif /* __INTEL_DRV_H__ */ | 797 | #endif /* __INTEL_DRV_H__ */ |