mirror of https://gitee.com/openkylin/linux.git
Merge tag 'drm-intel-fixes-2014-08-28' of git://anongit.freedesktop.org/drm-intel into drm-fixes
Some more fixes for 3.17, mostly stable material. * tag 'drm-intel-fixes-2014-08-28' of git://anongit.freedesktop.org/drm-intel: drm/i915: Remove bogus __init annotation from DMI callbacks drm/i915: don't warn if backlight unexpectedly enabled drm/i915: Move intel_ddi_set_vc_payload_alloc(false) to haswell_crtc_disable() drm/i915: fix plane/cursor handling when runtime suspended drm/i915: Ignore VBT backlight presence check on Acer C720 (4005U)
This commit is contained in:
commit
46712cc959
|
@ -1123,7 +1123,7 @@ init_vbt_defaults(struct drm_i915_private *dev_priv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init intel_no_opregion_vbt_callback(const struct dmi_system_id *id)
|
static int intel_no_opregion_vbt_callback(const struct dmi_system_id *id)
|
||||||
{
|
{
|
||||||
DRM_DEBUG_KMS("Falling back to manually reading VBT from "
|
DRM_DEBUG_KMS("Falling back to manually reading VBT from "
|
||||||
"VBIOS ROM for %s\n",
|
"VBIOS ROM for %s\n",
|
||||||
|
|
|
@ -804,7 +804,7 @@ static const struct drm_encoder_funcs intel_crt_enc_funcs = {
|
||||||
.destroy = intel_encoder_destroy,
|
.destroy = intel_encoder_destroy,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init intel_no_crt_dmi_callback(const struct dmi_system_id *id)
|
static int intel_no_crt_dmi_callback(const struct dmi_system_id *id)
|
||||||
{
|
{
|
||||||
DRM_INFO("Skipping CRT initialization for %s\n", id->ident);
|
DRM_INFO("Skipping CRT initialization for %s\n", id->ident);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -2233,6 +2233,15 @@ intel_pin_and_fence_fb_obj(struct drm_device *dev,
|
||||||
if (need_vtd_wa(dev) && alignment < 256 * 1024)
|
if (need_vtd_wa(dev) && alignment < 256 * 1024)
|
||||||
alignment = 256 * 1024;
|
alignment = 256 * 1024;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Global gtt pte registers are special registers which actually forward
|
||||||
|
* writes to a chunk of system memory. Which means that there is no risk
|
||||||
|
* that the register values disappear as soon as we call
|
||||||
|
* intel_runtime_pm_put(), so it is correct to wrap only the
|
||||||
|
* pin/unpin/fence and not more.
|
||||||
|
*/
|
||||||
|
intel_runtime_pm_get(dev_priv);
|
||||||
|
|
||||||
dev_priv->mm.interruptible = false;
|
dev_priv->mm.interruptible = false;
|
||||||
ret = i915_gem_object_pin_to_display_plane(obj, alignment, pipelined);
|
ret = i915_gem_object_pin_to_display_plane(obj, alignment, pipelined);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
@ -2250,12 +2259,14 @@ intel_pin_and_fence_fb_obj(struct drm_device *dev,
|
||||||
i915_gem_object_pin_fence(obj);
|
i915_gem_object_pin_fence(obj);
|
||||||
|
|
||||||
dev_priv->mm.interruptible = true;
|
dev_priv->mm.interruptible = true;
|
||||||
|
intel_runtime_pm_put(dev_priv);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_unpin:
|
err_unpin:
|
||||||
i915_gem_object_unpin_from_display_plane(obj);
|
i915_gem_object_unpin_from_display_plane(obj);
|
||||||
err_interruptible:
|
err_interruptible:
|
||||||
dev_priv->mm.interruptible = true;
|
dev_priv->mm.interruptible = true;
|
||||||
|
intel_runtime_pm_put(dev_priv);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4188,10 +4199,6 @@ static void ironlake_crtc_disable(struct drm_crtc *crtc)
|
||||||
intel_set_pch_fifo_underrun_reporting(dev, pipe, false);
|
intel_set_pch_fifo_underrun_reporting(dev, pipe, false);
|
||||||
|
|
||||||
intel_disable_pipe(dev_priv, pipe);
|
intel_disable_pipe(dev_priv, pipe);
|
||||||
|
|
||||||
if (intel_crtc->config.dp_encoder_is_mst)
|
|
||||||
intel_ddi_set_vc_payload_alloc(crtc, false);
|
|
||||||
|
|
||||||
ironlake_pfit_disable(intel_crtc);
|
ironlake_pfit_disable(intel_crtc);
|
||||||
|
|
||||||
for_each_encoder_on_crtc(dev, crtc, encoder)
|
for_each_encoder_on_crtc(dev, crtc, encoder)
|
||||||
|
@ -4256,6 +4263,9 @@ static void haswell_crtc_disable(struct drm_crtc *crtc)
|
||||||
intel_set_pch_fifo_underrun_reporting(dev, TRANSCODER_A, false);
|
intel_set_pch_fifo_underrun_reporting(dev, TRANSCODER_A, false);
|
||||||
intel_disable_pipe(dev_priv, pipe);
|
intel_disable_pipe(dev_priv, pipe);
|
||||||
|
|
||||||
|
if (intel_crtc->config.dp_encoder_is_mst)
|
||||||
|
intel_ddi_set_vc_payload_alloc(crtc, false);
|
||||||
|
|
||||||
intel_ddi_disable_transcoder_func(dev_priv, cpu_transcoder);
|
intel_ddi_disable_transcoder_func(dev_priv, cpu_transcoder);
|
||||||
|
|
||||||
ironlake_pfit_disable(intel_crtc);
|
ironlake_pfit_disable(intel_crtc);
|
||||||
|
@ -8240,6 +8250,15 @@ static int intel_crtc_cursor_set_obj(struct drm_crtc *crtc,
|
||||||
goto fail_locked;
|
goto fail_locked;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Global gtt pte registers are special registers which actually
|
||||||
|
* forward writes to a chunk of system memory. Which means that
|
||||||
|
* there is no risk that the register values disappear as soon
|
||||||
|
* as we call intel_runtime_pm_put(), so it is correct to wrap
|
||||||
|
* only the pin/unpin/fence and not more.
|
||||||
|
*/
|
||||||
|
intel_runtime_pm_get(dev_priv);
|
||||||
|
|
||||||
/* Note that the w/a also requires 2 PTE of padding following
|
/* Note that the w/a also requires 2 PTE of padding following
|
||||||
* the bo. We currently fill all unused PTE with the shadow
|
* the bo. We currently fill all unused PTE with the shadow
|
||||||
* page and so we should always have valid PTE following the
|
* page and so we should always have valid PTE following the
|
||||||
|
@ -8252,16 +8271,20 @@ static int intel_crtc_cursor_set_obj(struct drm_crtc *crtc,
|
||||||
ret = i915_gem_object_pin_to_display_plane(obj, alignment, NULL);
|
ret = i915_gem_object_pin_to_display_plane(obj, alignment, NULL);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
DRM_DEBUG_KMS("failed to move cursor bo into the GTT\n");
|
DRM_DEBUG_KMS("failed to move cursor bo into the GTT\n");
|
||||||
|
intel_runtime_pm_put(dev_priv);
|
||||||
goto fail_locked;
|
goto fail_locked;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = i915_gem_object_put_fence(obj);
|
ret = i915_gem_object_put_fence(obj);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
DRM_DEBUG_KMS("failed to release fence for cursor");
|
DRM_DEBUG_KMS("failed to release fence for cursor");
|
||||||
|
intel_runtime_pm_put(dev_priv);
|
||||||
goto fail_unpin;
|
goto fail_unpin;
|
||||||
}
|
}
|
||||||
|
|
||||||
addr = i915_gem_obj_ggtt_offset(obj);
|
addr = i915_gem_obj_ggtt_offset(obj);
|
||||||
|
|
||||||
|
intel_runtime_pm_put(dev_priv);
|
||||||
} else {
|
} else {
|
||||||
int align = IS_I830(dev) ? 16 * 1024 : 256;
|
int align = IS_I830(dev) ? 16 * 1024 : 256;
|
||||||
ret = i915_gem_object_attach_phys(obj, align);
|
ret = i915_gem_object_attach_phys(obj, align);
|
||||||
|
@ -12481,6 +12504,9 @@ static struct intel_quirk intel_quirks[] = {
|
||||||
/* Acer C720 and C720P Chromebooks (Celeron 2955U) have backlights */
|
/* Acer C720 and C720P Chromebooks (Celeron 2955U) have backlights */
|
||||||
{ 0x0a06, 0x1025, 0x0a11, quirk_backlight_present },
|
{ 0x0a06, 0x1025, 0x0a11, quirk_backlight_present },
|
||||||
|
|
||||||
|
/* Acer C720 Chromebook (Core i3 4005U) */
|
||||||
|
{ 0x0a16, 0x1025, 0x0a11, quirk_backlight_present },
|
||||||
|
|
||||||
/* Toshiba CB35 Chromebook (Celeron 2955U) */
|
/* Toshiba CB35 Chromebook (Celeron 2955U) */
|
||||||
{ 0x0a06, 0x1179, 0x0a88, quirk_backlight_present },
|
{ 0x0a06, 0x1179, 0x0a88, quirk_backlight_present },
|
||||||
|
|
||||||
|
|
|
@ -538,7 +538,7 @@ static const struct drm_encoder_funcs intel_lvds_enc_funcs = {
|
||||||
.destroy = intel_encoder_destroy,
|
.destroy = intel_encoder_destroy,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init intel_no_lvds_dmi_callback(const struct dmi_system_id *id)
|
static int intel_no_lvds_dmi_callback(const struct dmi_system_id *id)
|
||||||
{
|
{
|
||||||
DRM_INFO("Skipping LVDS initialization for %s\n", id->ident);
|
DRM_INFO("Skipping LVDS initialization for %s\n", id->ident);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -801,7 +801,7 @@ static void pch_enable_backlight(struct intel_connector *connector)
|
||||||
|
|
||||||
cpu_ctl2 = I915_READ(BLC_PWM_CPU_CTL2);
|
cpu_ctl2 = I915_READ(BLC_PWM_CPU_CTL2);
|
||||||
if (cpu_ctl2 & BLM_PWM_ENABLE) {
|
if (cpu_ctl2 & BLM_PWM_ENABLE) {
|
||||||
WARN(1, "cpu backlight already enabled\n");
|
DRM_DEBUG_KMS("cpu backlight already enabled\n");
|
||||||
cpu_ctl2 &= ~BLM_PWM_ENABLE;
|
cpu_ctl2 &= ~BLM_PWM_ENABLE;
|
||||||
I915_WRITE(BLC_PWM_CPU_CTL2, cpu_ctl2);
|
I915_WRITE(BLC_PWM_CPU_CTL2, cpu_ctl2);
|
||||||
}
|
}
|
||||||
|
@ -845,7 +845,7 @@ static void i9xx_enable_backlight(struct intel_connector *connector)
|
||||||
|
|
||||||
ctl = I915_READ(BLC_PWM_CTL);
|
ctl = I915_READ(BLC_PWM_CTL);
|
||||||
if (ctl & BACKLIGHT_DUTY_CYCLE_MASK_PNV) {
|
if (ctl & BACKLIGHT_DUTY_CYCLE_MASK_PNV) {
|
||||||
WARN(1, "backlight already enabled\n");
|
DRM_DEBUG_KMS("backlight already enabled\n");
|
||||||
I915_WRITE(BLC_PWM_CTL, 0);
|
I915_WRITE(BLC_PWM_CTL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -876,7 +876,7 @@ static void i965_enable_backlight(struct intel_connector *connector)
|
||||||
|
|
||||||
ctl2 = I915_READ(BLC_PWM_CTL2);
|
ctl2 = I915_READ(BLC_PWM_CTL2);
|
||||||
if (ctl2 & BLM_PWM_ENABLE) {
|
if (ctl2 & BLM_PWM_ENABLE) {
|
||||||
WARN(1, "backlight already enabled\n");
|
DRM_DEBUG_KMS("backlight already enabled\n");
|
||||||
ctl2 &= ~BLM_PWM_ENABLE;
|
ctl2 &= ~BLM_PWM_ENABLE;
|
||||||
I915_WRITE(BLC_PWM_CTL2, ctl2);
|
I915_WRITE(BLC_PWM_CTL2, ctl2);
|
||||||
}
|
}
|
||||||
|
@ -910,7 +910,7 @@ static void vlv_enable_backlight(struct intel_connector *connector)
|
||||||
|
|
||||||
ctl2 = I915_READ(VLV_BLC_PWM_CTL2(pipe));
|
ctl2 = I915_READ(VLV_BLC_PWM_CTL2(pipe));
|
||||||
if (ctl2 & BLM_PWM_ENABLE) {
|
if (ctl2 & BLM_PWM_ENABLE) {
|
||||||
WARN(1, "backlight already enabled\n");
|
DRM_DEBUG_KMS("backlight already enabled\n");
|
||||||
ctl2 &= ~BLM_PWM_ENABLE;
|
ctl2 &= ~BLM_PWM_ENABLE;
|
||||||
I915_WRITE(VLV_BLC_PWM_CTL2(pipe), ctl2);
|
I915_WRITE(VLV_BLC_PWM_CTL2(pipe), ctl2);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue