diff options
| author | Dave Airlie <airlied@gmail.com> | 2015-01-04 02:41:00 -0500 |
|---|---|---|
| committer | Dave Airlie <airlied@gmail.com> | 2015-01-04 02:41:00 -0500 |
| commit | 379a2d31cb8d1eddf1970be95b871b4371be296a (patch) | |
| tree | 034ac65ad43a28fc0c0a32e5cc6dedc9ea4616ca | |
| parent | d753856c9f9ae33a980192aa7b81d8b97d79dec2 (diff) | |
| parent | 5d77d9c5e177d2182df5d9fd61ba986facb64415 (diff) | |
Merge tag 'drm-intel-next-fixes-2014-12-30' of git://anongit.freedesktop.org/drm-intel into linus
I've had these since before -rc1, but they missed my last pull
request. Real bug fixes and mostly cc: stable material.
* tag 'drm-intel-next-fixes-2014-12-30' of git://anongit.freedesktop.org/drm-intel:
drm/i915: add missing rpm ref to i915_gem_pwrite_ioctl
Revert "drm/i915: Preserve VGACNTR bits from the BIOS"
drm/i915: Don't call intel_prepare_page_flip() multiple times on gen2-4
drm/i915: Kill check_power_well() calls
| -rw-r--r-- | drivers/gpu/drm/i915/i915_drv.h | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 8 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_irq.c | 6 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 8 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_runtime_pm.c | 27 |
5 files changed, 10 insertions, 41 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 70d0f0f06f1a..e9f891c432f8 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h | |||
| @@ -1756,8 +1756,6 @@ struct drm_i915_private { | |||
| 1756 | */ | 1756 | */ |
| 1757 | struct workqueue_struct *dp_wq; | 1757 | struct workqueue_struct *dp_wq; |
| 1758 | 1758 | ||
| 1759 | uint32_t bios_vgacntr; | ||
| 1760 | |||
| 1761 | /* Abstract the submission mechanism (legacy ringbuffer or execlists) away */ | 1759 | /* Abstract the submission mechanism (legacy ringbuffer or execlists) away */ |
| 1762 | struct { | 1760 | struct { |
| 1763 | int (*do_execbuf)(struct drm_device *dev, struct drm_file *file, | 1761 | int (*do_execbuf)(struct drm_device *dev, struct drm_file *file, |
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 52adcb680be3..c11603b4cf1d 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c | |||
| @@ -1048,6 +1048,7 @@ int | |||
| 1048 | i915_gem_pwrite_ioctl(struct drm_device *dev, void *data, | 1048 | i915_gem_pwrite_ioctl(struct drm_device *dev, void *data, |
| 1049 | struct drm_file *file) | 1049 | struct drm_file *file) |
| 1050 | { | 1050 | { |
| 1051 | struct drm_i915_private *dev_priv = dev->dev_private; | ||
| 1051 | struct drm_i915_gem_pwrite *args = data; | 1052 | struct drm_i915_gem_pwrite *args = data; |
| 1052 | struct drm_i915_gem_object *obj; | 1053 | struct drm_i915_gem_object *obj; |
| 1053 | int ret; | 1054 | int ret; |
| @@ -1067,9 +1068,11 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data, | |||
| 1067 | return -EFAULT; | 1068 | return -EFAULT; |
| 1068 | } | 1069 | } |
| 1069 | 1070 | ||
| 1071 | intel_runtime_pm_get(dev_priv); | ||
| 1072 | |||
| 1070 | ret = i915_mutex_lock_interruptible(dev); | 1073 | ret = i915_mutex_lock_interruptible(dev); |
| 1071 | if (ret) | 1074 | if (ret) |
| 1072 | return ret; | 1075 | goto put_rpm; |
| 1073 | 1076 | ||
| 1074 | obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->handle)); | 1077 | obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->handle)); |
| 1075 | if (&obj->base == NULL) { | 1078 | if (&obj->base == NULL) { |
| @@ -1121,6 +1124,9 @@ out: | |||
| 1121 | drm_gem_object_unreference(&obj->base); | 1124 | drm_gem_object_unreference(&obj->base); |
| 1122 | unlock: | 1125 | unlock: |
| 1123 | mutex_unlock(&dev->struct_mutex); | 1126 | mutex_unlock(&dev->struct_mutex); |
| 1127 | put_rpm: | ||
| 1128 | intel_runtime_pm_put(dev_priv); | ||
| 1129 | |||
| 1124 | return ret; | 1130 | return ret; |
| 1125 | } | 1131 | } |
| 1126 | 1132 | ||
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index 996c2931c499..d0d3dfbe6d2a 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c | |||
| @@ -3725,8 +3725,6 @@ static bool i8xx_handle_vblank(struct drm_device *dev, | |||
| 3725 | if ((iir & flip_pending) == 0) | 3725 | if ((iir & flip_pending) == 0) |
| 3726 | goto check_page_flip; | 3726 | goto check_page_flip; |
| 3727 | 3727 | ||
| 3728 | intel_prepare_page_flip(dev, plane); | ||
| 3729 | |||
| 3730 | /* We detect FlipDone by looking for the change in PendingFlip from '1' | 3728 | /* We detect FlipDone by looking for the change in PendingFlip from '1' |
| 3731 | * to '0' on the following vblank, i.e. IIR has the Pendingflip | 3729 | * to '0' on the following vblank, i.e. IIR has the Pendingflip |
| 3732 | * asserted following the MI_DISPLAY_FLIP, but ISR is deasserted, hence | 3730 | * asserted following the MI_DISPLAY_FLIP, but ISR is deasserted, hence |
| @@ -3736,6 +3734,7 @@ static bool i8xx_handle_vblank(struct drm_device *dev, | |||
| 3736 | if (I915_READ16(ISR) & flip_pending) | 3734 | if (I915_READ16(ISR) & flip_pending) |
| 3737 | goto check_page_flip; | 3735 | goto check_page_flip; |
| 3738 | 3736 | ||
| 3737 | intel_prepare_page_flip(dev, plane); | ||
| 3739 | intel_finish_page_flip(dev, pipe); | 3738 | intel_finish_page_flip(dev, pipe); |
| 3740 | return true; | 3739 | return true; |
| 3741 | 3740 | ||
| @@ -3907,8 +3906,6 @@ static bool i915_handle_vblank(struct drm_device *dev, | |||
| 3907 | if ((iir & flip_pending) == 0) | 3906 | if ((iir & flip_pending) == 0) |
| 3908 | goto check_page_flip; | 3907 | goto check_page_flip; |
| 3909 | 3908 | ||
| 3910 | intel_prepare_page_flip(dev, plane); | ||
| 3911 | |||
| 3912 | /* We detect FlipDone by looking for the change in PendingFlip from '1' | 3909 | /* We detect FlipDone by looking for the change in PendingFlip from '1' |
| 3913 | * to '0' on the following vblank, i.e. IIR has the Pendingflip | 3910 | * to '0' on the following vblank, i.e. IIR has the Pendingflip |
| 3914 | * asserted following the MI_DISPLAY_FLIP, but ISR is deasserted, hence | 3911 | * asserted following the MI_DISPLAY_FLIP, but ISR is deasserted, hence |
| @@ -3918,6 +3915,7 @@ static bool i915_handle_vblank(struct drm_device *dev, | |||
| 3918 | if (I915_READ(ISR) & flip_pending) | 3915 | if (I915_READ(ISR) & flip_pending) |
| 3919 | goto check_page_flip; | 3916 | goto check_page_flip; |
| 3920 | 3917 | ||
| 3918 | intel_prepare_page_flip(dev, plane); | ||
| 3921 | intel_finish_page_flip(dev, pipe); | 3919 | intel_finish_page_flip(dev, pipe); |
| 3922 | return true; | 3920 | return true; |
| 3923 | 3921 | ||
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index fb3e3d429191..e2af1383b179 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
| @@ -13057,11 +13057,7 @@ static void i915_disable_vga(struct drm_device *dev) | |||
| 13057 | vga_put(dev->pdev, VGA_RSRC_LEGACY_IO); | 13057 | vga_put(dev->pdev, VGA_RSRC_LEGACY_IO); |
| 13058 | udelay(300); | 13058 | udelay(300); |
| 13059 | 13059 | ||
| 13060 | /* | 13060 | I915_WRITE(vga_reg, VGA_DISP_DISABLE); |
| 13061 | * Fujitsu-Siemens Lifebook S6010 (830) has problems resuming | ||
| 13062 | * from S3 without preserving (some of?) the other bits. | ||
| 13063 | */ | ||
| 13064 | I915_WRITE(vga_reg, dev_priv->bios_vgacntr | VGA_DISP_DISABLE); | ||
| 13065 | POSTING_READ(vga_reg); | 13061 | POSTING_READ(vga_reg); |
| 13066 | } | 13062 | } |
| 13067 | 13063 | ||
| @@ -13146,8 +13142,6 @@ void intel_modeset_init(struct drm_device *dev) | |||
| 13146 | 13142 | ||
| 13147 | intel_shared_dpll_init(dev); | 13143 | intel_shared_dpll_init(dev); |
| 13148 | 13144 | ||
| 13149 | /* save the BIOS value before clobbering it */ | ||
| 13150 | dev_priv->bios_vgacntr = I915_READ(i915_vgacntrl_reg(dev)); | ||
| 13151 | /* Just disable it once at startup */ | 13145 | /* Just disable it once at startup */ |
| 13152 | i915_disable_vga(dev); | 13146 | i915_disable_vga(dev); |
| 13153 | intel_setup_outputs(dev); | 13147 | intel_setup_outputs(dev); |
diff --git a/drivers/gpu/drm/i915/intel_runtime_pm.c b/drivers/gpu/drm/i915/intel_runtime_pm.c index f5a78d53e297..ac6da7102fbb 100644 --- a/drivers/gpu/drm/i915/intel_runtime_pm.c +++ b/drivers/gpu/drm/i915/intel_runtime_pm.c | |||
| @@ -615,29 +615,6 @@ static void chv_pipe_power_well_disable(struct drm_i915_private *dev_priv, | |||
| 615 | vlv_power_sequencer_reset(dev_priv); | 615 | vlv_power_sequencer_reset(dev_priv); |
| 616 | } | 616 | } |
| 617 | 617 | ||
| 618 | static void check_power_well_state(struct drm_i915_private *dev_priv, | ||
| 619 | struct i915_power_well *power_well) | ||
| 620 | { | ||
| 621 | bool enabled = power_well->ops->is_enabled(dev_priv, power_well); | ||
| 622 | |||
| 623 | if (power_well->always_on || !i915.disable_power_well) { | ||
| 624 | if (!enabled) | ||
| 625 | goto mismatch; | ||
| 626 | |||
| 627 | return; | ||
| 628 | } | ||
| 629 | |||
| 630 | if (enabled != (power_well->count > 0)) | ||
| 631 | goto mismatch; | ||
| 632 | |||
| 633 | return; | ||
| 634 | |||
| 635 | mismatch: | ||
| 636 | WARN(1, "state mismatch for '%s' (always_on %d hw state %d use-count %d disable_power_well %d\n", | ||
| 637 | power_well->name, power_well->always_on, enabled, | ||
| 638 | power_well->count, i915.disable_power_well); | ||
| 639 | } | ||
| 640 | |||
| 641 | /** | 618 | /** |
| 642 | * intel_display_power_get - grab a power domain reference | 619 | * intel_display_power_get - grab a power domain reference |
| 643 | * @dev_priv: i915 device instance | 620 | * @dev_priv: i915 device instance |
| @@ -669,8 +646,6 @@ void intel_display_power_get(struct drm_i915_private *dev_priv, | |||
| 669 | power_well->ops->enable(dev_priv, power_well); | 646 | power_well->ops->enable(dev_priv, power_well); |
| 670 | power_well->hw_enabled = true; | 647 | power_well->hw_enabled = true; |
| 671 | } | 648 | } |
| 672 | |||
| 673 | check_power_well_state(dev_priv, power_well); | ||
| 674 | } | 649 | } |
| 675 | 650 | ||
| 676 | power_domains->domain_use_count[domain]++; | 651 | power_domains->domain_use_count[domain]++; |
| @@ -709,8 +684,6 @@ void intel_display_power_put(struct drm_i915_private *dev_priv, | |||
| 709 | power_well->hw_enabled = false; | 684 | power_well->hw_enabled = false; |
| 710 | power_well->ops->disable(dev_priv, power_well); | 685 | power_well->ops->disable(dev_priv, power_well); |
| 711 | } | 686 | } |
| 712 | |||
| 713 | check_power_well_state(dev_priv, power_well); | ||
| 714 | } | 687 | } |
| 715 | 688 | ||
| 716 | mutex_unlock(&power_domains->lock); | 689 | mutex_unlock(&power_domains->lock); |
