Commit 379a2d31 authored by Dave Airlie's avatar Dave Airlie

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
parents d753856c 5d77d9c5
...@@ -1756,8 +1756,6 @@ struct drm_i915_private { ...@@ -1756,8 +1756,6 @@ struct drm_i915_private {
*/ */
struct workqueue_struct *dp_wq; struct workqueue_struct *dp_wq;
uint32_t bios_vgacntr;
/* Abstract the submission mechanism (legacy ringbuffer or execlists) away */ /* Abstract the submission mechanism (legacy ringbuffer or execlists) away */
struct { struct {
int (*do_execbuf)(struct drm_device *dev, struct drm_file *file, int (*do_execbuf)(struct drm_device *dev, struct drm_file *file,
......
...@@ -1048,6 +1048,7 @@ int ...@@ -1048,6 +1048,7 @@ int
i915_gem_pwrite_ioctl(struct drm_device *dev, void *data, i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,
struct drm_file *file) struct drm_file *file)
{ {
struct drm_i915_private *dev_priv = dev->dev_private;
struct drm_i915_gem_pwrite *args = data; struct drm_i915_gem_pwrite *args = data;
struct drm_i915_gem_object *obj; struct drm_i915_gem_object *obj;
int ret; int ret;
...@@ -1067,9 +1068,11 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data, ...@@ -1067,9 +1068,11 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,
return -EFAULT; return -EFAULT;
} }
intel_runtime_pm_get(dev_priv);
ret = i915_mutex_lock_interruptible(dev); ret = i915_mutex_lock_interruptible(dev);
if (ret) if (ret)
return ret; goto put_rpm;
obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->handle)); obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->handle));
if (&obj->base == NULL) { if (&obj->base == NULL) {
...@@ -1121,6 +1124,9 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data, ...@@ -1121,6 +1124,9 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,
drm_gem_object_unreference(&obj->base); drm_gem_object_unreference(&obj->base);
unlock: unlock:
mutex_unlock(&dev->struct_mutex); mutex_unlock(&dev->struct_mutex);
put_rpm:
intel_runtime_pm_put(dev_priv);
return ret; return ret;
} }
......
...@@ -3725,8 +3725,6 @@ static bool i8xx_handle_vblank(struct drm_device *dev, ...@@ -3725,8 +3725,6 @@ static bool i8xx_handle_vblank(struct drm_device *dev,
if ((iir & flip_pending) == 0) if ((iir & flip_pending) == 0)
goto check_page_flip; goto check_page_flip;
intel_prepare_page_flip(dev, plane);
/* We detect FlipDone by looking for the change in PendingFlip from '1' /* We detect FlipDone by looking for the change in PendingFlip from '1'
* to '0' on the following vblank, i.e. IIR has the Pendingflip * to '0' on the following vblank, i.e. IIR has the Pendingflip
* asserted following the MI_DISPLAY_FLIP, but ISR is deasserted, hence * 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,6 +3734,7 @@ static bool i8xx_handle_vblank(struct drm_device *dev,
if (I915_READ16(ISR) & flip_pending) if (I915_READ16(ISR) & flip_pending)
goto check_page_flip; goto check_page_flip;
intel_prepare_page_flip(dev, plane);
intel_finish_page_flip(dev, pipe); intel_finish_page_flip(dev, pipe);
return true; return true;
...@@ -3907,8 +3906,6 @@ static bool i915_handle_vblank(struct drm_device *dev, ...@@ -3907,8 +3906,6 @@ static bool i915_handle_vblank(struct drm_device *dev,
if ((iir & flip_pending) == 0) if ((iir & flip_pending) == 0)
goto check_page_flip; goto check_page_flip;
intel_prepare_page_flip(dev, plane);
/* We detect FlipDone by looking for the change in PendingFlip from '1' /* We detect FlipDone by looking for the change in PendingFlip from '1'
* to '0' on the following vblank, i.e. IIR has the Pendingflip * to '0' on the following vblank, i.e. IIR has the Pendingflip
* asserted following the MI_DISPLAY_FLIP, but ISR is deasserted, hence * 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,6 +3915,7 @@ static bool i915_handle_vblank(struct drm_device *dev,
if (I915_READ(ISR) & flip_pending) if (I915_READ(ISR) & flip_pending)
goto check_page_flip; goto check_page_flip;
intel_prepare_page_flip(dev, plane);
intel_finish_page_flip(dev, pipe); intel_finish_page_flip(dev, pipe);
return true; return true;
......
...@@ -13057,11 +13057,7 @@ static void i915_disable_vga(struct drm_device *dev) ...@@ -13057,11 +13057,7 @@ static void i915_disable_vga(struct drm_device *dev)
vga_put(dev->pdev, VGA_RSRC_LEGACY_IO); vga_put(dev->pdev, VGA_RSRC_LEGACY_IO);
udelay(300); udelay(300);
/* I915_WRITE(vga_reg, VGA_DISP_DISABLE);
* Fujitsu-Siemens Lifebook S6010 (830) has problems resuming
* from S3 without preserving (some of?) the other bits.
*/
I915_WRITE(vga_reg, dev_priv->bios_vgacntr | VGA_DISP_DISABLE);
POSTING_READ(vga_reg); POSTING_READ(vga_reg);
} }
...@@ -13146,8 +13142,6 @@ void intel_modeset_init(struct drm_device *dev) ...@@ -13146,8 +13142,6 @@ void intel_modeset_init(struct drm_device *dev)
intel_shared_dpll_init(dev); intel_shared_dpll_init(dev);
/* save the BIOS value before clobbering it */
dev_priv->bios_vgacntr = I915_READ(i915_vgacntrl_reg(dev));
/* Just disable it once at startup */ /* Just disable it once at startup */
i915_disable_vga(dev); i915_disable_vga(dev);
intel_setup_outputs(dev); intel_setup_outputs(dev);
......
...@@ -615,29 +615,6 @@ static void chv_pipe_power_well_disable(struct drm_i915_private *dev_priv, ...@@ -615,29 +615,6 @@ static void chv_pipe_power_well_disable(struct drm_i915_private *dev_priv,
vlv_power_sequencer_reset(dev_priv); vlv_power_sequencer_reset(dev_priv);
} }
static void check_power_well_state(struct drm_i915_private *dev_priv,
struct i915_power_well *power_well)
{
bool enabled = power_well->ops->is_enabled(dev_priv, power_well);
if (power_well->always_on || !i915.disable_power_well) {
if (!enabled)
goto mismatch;
return;
}
if (enabled != (power_well->count > 0))
goto mismatch;
return;
mismatch:
WARN(1, "state mismatch for '%s' (always_on %d hw state %d use-count %d disable_power_well %d\n",
power_well->name, power_well->always_on, enabled,
power_well->count, i915.disable_power_well);
}
/** /**
* intel_display_power_get - grab a power domain reference * intel_display_power_get - grab a power domain reference
* @dev_priv: i915 device instance * @dev_priv: i915 device instance
...@@ -669,8 +646,6 @@ void intel_display_power_get(struct drm_i915_private *dev_priv, ...@@ -669,8 +646,6 @@ void intel_display_power_get(struct drm_i915_private *dev_priv,
power_well->ops->enable(dev_priv, power_well); power_well->ops->enable(dev_priv, power_well);
power_well->hw_enabled = true; power_well->hw_enabled = true;
} }
check_power_well_state(dev_priv, power_well);
} }
power_domains->domain_use_count[domain]++; power_domains->domain_use_count[domain]++;
...@@ -709,8 +684,6 @@ void intel_display_power_put(struct drm_i915_private *dev_priv, ...@@ -709,8 +684,6 @@ void intel_display_power_put(struct drm_i915_private *dev_priv,
power_well->hw_enabled = false; power_well->hw_enabled = false;
power_well->ops->disable(dev_priv, power_well); power_well->ops->disable(dev_priv, power_well);
} }
check_power_well_state(dev_priv, power_well);
} }
mutex_unlock(&power_domains->lock); mutex_unlock(&power_domains->lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment