diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-09-29 13:02:40 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-09-29 13:02:40 -0400 |
| commit | b97b869a83318c473aa5fce8dcd45edb0275004e (patch) | |
| tree | 19462fe1fd7463237f09282c75eed4fe0a3489d3 | |
| parent | 669fc2f0c70a6e14eefc503b72ce350448e9634e (diff) | |
| parent | 665441791f553221901f679cb47236798f9a649c (diff) | |
Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux
Pull drm fixes from Dave Airlie:
"Nothing too major, radeon still has some dpm changes for off by
default.
Radeon, intel, msm:
- radeon: a few more dpm fixes (still off by default), uvd fixes
- i915: runtime warn backtrace and regression fix
- msm: iommu changes fallout"
* 'drm-fixes' of git://people.freedesktop.org/~airlied/linux: (27 commits)
drm/msm: use drm_gem_dumb_destroy helper
drm/msm: deal with mach/iommu.h removal
drm/msm: Remove iommu include from mdp4_kms.c
drm/msm: Odd PTR_ERR usage
drm/i915: Fix up usage of SHRINK_STOP
drm/radeon: fix hdmi audio on DCE3.0/3.1 asics
drm/i915: preserve pipe A quirk in i9xx_set_pipeconf
drm/i915/tv: clear adjusted_mode.flags
drm/i915/dp: increase i2c-over-aux retry interval on AUX DEFER
drm/radeon/cik: fix overflow in vram fetch
drm/radeon: add missing hdmi callbacks for rv6xx
drm/i915: Use a temporary va_list for two-pass string handling
drm/radeon/uvd: lower msg&fb buffer requirements on UVD3
drm/radeon: disable tests/benchmarks if accel is disabled
drm/radeon: don't set default clocks for SI when DPM is disabled
drm/radeon/dpm/ci: filter clocks based on voltage/clk dep tables
drm/radeon/dpm/si: filter clocks based on voltage/clk dep tables
drm/radeon/dpm/ni: filter clocks based on voltage/clk dep tables
drm/radeon/dpm/btc: filter clocks based on voltage/clk dep tables
drm/radeon/dpm: fetch the max clk from voltage dep tables helper
...
26 files changed, 266 insertions, 77 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index df9253d890ee..cdfb9da0e4ce 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c | |||
| @@ -4800,10 +4800,10 @@ i915_gem_inactive_count(struct shrinker *shrinker, struct shrink_control *sc) | |||
| 4800 | 4800 | ||
| 4801 | if (!mutex_trylock(&dev->struct_mutex)) { | 4801 | if (!mutex_trylock(&dev->struct_mutex)) { |
| 4802 | if (!mutex_is_locked_by(&dev->struct_mutex, current)) | 4802 | if (!mutex_is_locked_by(&dev->struct_mutex, current)) |
| 4803 | return SHRINK_STOP; | 4803 | return 0; |
| 4804 | 4804 | ||
| 4805 | if (dev_priv->mm.shrinker_no_lock_stealing) | 4805 | if (dev_priv->mm.shrinker_no_lock_stealing) |
| 4806 | return SHRINK_STOP; | 4806 | return 0; |
| 4807 | 4807 | ||
| 4808 | unlock = false; | 4808 | unlock = false; |
| 4809 | } | 4809 | } |
| @@ -4901,10 +4901,10 @@ i915_gem_inactive_scan(struct shrinker *shrinker, struct shrink_control *sc) | |||
| 4901 | 4901 | ||
| 4902 | if (!mutex_trylock(&dev->struct_mutex)) { | 4902 | if (!mutex_trylock(&dev->struct_mutex)) { |
| 4903 | if (!mutex_is_locked_by(&dev->struct_mutex, current)) | 4903 | if (!mutex_is_locked_by(&dev->struct_mutex, current)) |
| 4904 | return 0; | 4904 | return SHRINK_STOP; |
| 4905 | 4905 | ||
| 4906 | if (dev_priv->mm.shrinker_no_lock_stealing) | 4906 | if (dev_priv->mm.shrinker_no_lock_stealing) |
| 4907 | return 0; | 4907 | return SHRINK_STOP; |
| 4908 | 4908 | ||
| 4909 | unlock = false; | 4909 | unlock = false; |
| 4910 | } | 4910 | } |
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c index aba9d7498996..dae364f0028c 100644 --- a/drivers/gpu/drm/i915/i915_gpu_error.c +++ b/drivers/gpu/drm/i915/i915_gpu_error.c | |||
| @@ -143,8 +143,10 @@ static void i915_error_vprintf(struct drm_i915_error_state_buf *e, | |||
| 143 | 143 | ||
| 144 | /* Seek the first printf which is hits start position */ | 144 | /* Seek the first printf which is hits start position */ |
| 145 | if (e->pos < e->start) { | 145 | if (e->pos < e->start) { |
| 146 | len = vsnprintf(NULL, 0, f, args); | 146 | va_list tmp; |
| 147 | if (!__i915_error_seek(e, len)) | 147 | |
| 148 | va_copy(tmp, args); | ||
| 149 | if (!__i915_error_seek(e, vsnprintf(NULL, 0, f, tmp))) | ||
| 148 | return; | 150 | return; |
| 149 | } | 151 | } |
| 150 | 152 | ||
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index d8a1d98693e7..e5822e79f912 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
| @@ -4775,6 +4775,10 @@ static void i9xx_set_pipeconf(struct intel_crtc *intel_crtc) | |||
| 4775 | 4775 | ||
| 4776 | pipeconf = 0; | 4776 | pipeconf = 0; |
| 4777 | 4777 | ||
| 4778 | if (dev_priv->quirks & QUIRK_PIPEA_FORCE && | ||
| 4779 | I915_READ(PIPECONF(intel_crtc->pipe)) & PIPECONF_ENABLE) | ||
| 4780 | pipeconf |= PIPECONF_ENABLE; | ||
| 4781 | |||
| 4778 | if (intel_crtc->pipe == 0 && INTEL_INFO(dev)->gen < 4) { | 4782 | if (intel_crtc->pipe == 0 && INTEL_INFO(dev)->gen < 4) { |
| 4779 | /* Enable pixel doubling when the dot clock is > 90% of the (display) | 4783 | /* Enable pixel doubling when the dot clock is > 90% of the (display) |
| 4780 | * core speed. | 4784 | * core speed. |
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index 2151d13772b8..79c14e298ba6 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c | |||
| @@ -588,7 +588,18 @@ intel_dp_i2c_aux_ch(struct i2c_adapter *adapter, int mode, | |||
| 588 | DRM_DEBUG_KMS("aux_ch native nack\n"); | 588 | DRM_DEBUG_KMS("aux_ch native nack\n"); |
| 589 | return -EREMOTEIO; | 589 | return -EREMOTEIO; |
| 590 | case AUX_NATIVE_REPLY_DEFER: | 590 | case AUX_NATIVE_REPLY_DEFER: |
| 591 | udelay(100); | 591 | /* |
| 592 | * For now, just give more slack to branch devices. We | ||
| 593 | * could check the DPCD for I2C bit rate capabilities, | ||
| 594 | * and if available, adjust the interval. We could also | ||
| 595 | * be more careful with DP-to-Legacy adapters where a | ||
| 596 | * long legacy cable may force very low I2C bit rates. | ||
| 597 | */ | ||
| 598 | if (intel_dp->dpcd[DP_DOWNSTREAMPORT_PRESENT] & | ||
| 599 | DP_DWN_STRM_PORT_PRESENT) | ||
| 600 | usleep_range(500, 600); | ||
| 601 | else | ||
| 602 | usleep_range(300, 400); | ||
| 592 | continue; | 603 | continue; |
| 593 | default: | 604 | default: |
| 594 | DRM_ERROR("aux_ch invalid native reply 0x%02x\n", | 605 | DRM_ERROR("aux_ch invalid native reply 0x%02x\n", |
diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c index f2c6d7909ae2..dd6f84bf6c22 100644 --- a/drivers/gpu/drm/i915/intel_tv.c +++ b/drivers/gpu/drm/i915/intel_tv.c | |||
| @@ -916,6 +916,14 @@ intel_tv_compute_config(struct intel_encoder *encoder, | |||
| 916 | DRM_DEBUG_KMS("forcing bpc to 8 for TV\n"); | 916 | DRM_DEBUG_KMS("forcing bpc to 8 for TV\n"); |
| 917 | pipe_config->pipe_bpp = 8*3; | 917 | pipe_config->pipe_bpp = 8*3; |
| 918 | 918 | ||
| 919 | /* TV has it's own notion of sync and other mode flags, so clear them. */ | ||
| 920 | pipe_config->adjusted_mode.flags = 0; | ||
| 921 | |||
| 922 | /* | ||
| 923 | * FIXME: We don't check whether the input mode is actually what we want | ||
| 924 | * or whether userspace is doing something stupid. | ||
| 925 | */ | ||
| 926 | |||
| 919 | return true; | 927 | return true; |
| 920 | } | 928 | } |
| 921 | 929 | ||
diff --git a/drivers/gpu/drm/msm/mdp4/mdp4_kms.c b/drivers/gpu/drm/msm/mdp4/mdp4_kms.c index 5db5bbaedae2..bc7fd11ad8be 100644 --- a/drivers/gpu/drm/msm/mdp4/mdp4_kms.c +++ b/drivers/gpu/drm/msm/mdp4/mdp4_kms.c | |||
| @@ -19,8 +19,6 @@ | |||
| 19 | #include "msm_drv.h" | 19 | #include "msm_drv.h" |
| 20 | #include "mdp4_kms.h" | 20 | #include "mdp4_kms.h" |
| 21 | 21 | ||
| 22 | #include <mach/iommu.h> | ||
| 23 | |||
| 24 | static struct mdp4_platform_config *mdp4_get_config(struct platform_device *dev); | 22 | static struct mdp4_platform_config *mdp4_get_config(struct platform_device *dev); |
| 25 | 23 | ||
| 26 | static int mdp4_hw_init(struct msm_kms *kms) | 24 | static int mdp4_hw_init(struct msm_kms *kms) |
diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c index 008d772384c7..b3a2f1629041 100644 --- a/drivers/gpu/drm/msm/msm_drv.c +++ b/drivers/gpu/drm/msm/msm_drv.c | |||
| @@ -18,8 +18,6 @@ | |||
| 18 | #include "msm_drv.h" | 18 | #include "msm_drv.h" |
| 19 | #include "msm_gpu.h" | 19 | #include "msm_gpu.h" |
| 20 | 20 | ||
| 21 | #include <mach/iommu.h> | ||
| 22 | |||
| 23 | static void msm_fb_output_poll_changed(struct drm_device *dev) | 21 | static void msm_fb_output_poll_changed(struct drm_device *dev) |
| 24 | { | 22 | { |
| 25 | struct msm_drm_private *priv = dev->dev_private; | 23 | struct msm_drm_private *priv = dev->dev_private; |
| @@ -62,6 +60,8 @@ int msm_iommu_attach(struct drm_device *dev, struct iommu_domain *iommu, | |||
| 62 | int i, ret; | 60 | int i, ret; |
| 63 | 61 | ||
| 64 | for (i | ||
