mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-23 18:07:03 +00:00
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
This commit is contained in:
commit
379a2d31cb
@ -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
|
|||||||
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,
|
|||||||
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 @@ out:
|
|||||||
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,
|
|||||||
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,
|
|||||||
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,
|
|||||||
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,
|
|||||||
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)
|
|||||||
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)
|
|||||||
|
|
||||||
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,
|
|||||||
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,
|
|||||||
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,
|
|||||||
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);
|
||||||
|
Loading…
Reference in New Issue
Block a user