diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-02-18 19:36:07 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-02-18 19:36:07 -0500 |
| commit | 960dfc4eb23a28495276b02604d7458e0e1a1ed8 (patch) | |
| tree | 35bc4c0ab921dd2e7e482a0747d34309690abff1 | |
| parent | 525b870974802a5b72a81a4c7dbf9a706a659b46 (diff) | |
| parent | 75936c65dda54a08d9124f24f8725f86a4adc286 (diff) | |
Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux
Pull drm fixes from Dave Airlie:
"Lots of little small things, nothing too major: nouveau regression
fixes, vmware fixes for the new hw support, memory leaks in error path
fixes"
* 'drm-fixes' of git://people.freedesktop.org/~airlied/linux: (31 commits)
drm/radeon/ni: fix typo in dpm sq ramping setup
drm/radeon/si: fix typo in dpm sq ramping setup
drm/radeon: fix CP semaphores on CIK
drm/radeon: delete a stray tab
drm/radeon: fix display tiling setup on SI
drm/radeon/dpm: reduce r7xx vblank mclk threshold to 200
drm/radeon: fill in DRM_CAPs for cursor size
drm: add DRM_CAPs for cursor size
drm/radeon: unify bpc handling
drm/ttm: Fix memory leak in ttm_agp_backend.c
drm/ttm: declare 'struct device' in ttm_page_alloc.h
drm/nouveau: fix TTM_PL_TT memtype on pre-nv50
drm/nv50/disp: use correct register to determine DP display bpp
drm/nouveau/fb: use correct ram oclass for nv1a hardware
drm/nv50/gr: add missing nv_error parameter priv
drm/nouveau: fix ENG_RUNLIST register address
drm/nv4c/bios: disallow retrieving from prom on nv4x igp's
drm/nv4c/vga: decode register is in a different place on nv4x igp's
drm/nv4c/mc: nv4x igp's have a different msi rearm register
drm/nouveau: set irq_enabled manually
...
44 files changed, 292 insertions, 116 deletions
diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c index dffc836144cc..f4dc9b7a3831 100644 --- a/drivers/gpu/drm/drm_ioctl.c +++ b/drivers/gpu/drm/drm_ioctl.c | |||
| @@ -296,6 +296,18 @@ int drm_getcap(struct drm_device *dev, void *data, struct drm_file *file_priv) | |||
| 296 | case DRM_CAP_ASYNC_PAGE_FLIP: | 296 | case DRM_CAP_ASYNC_PAGE_FLIP: |
| 297 | req->value = dev->mode_config.async_page_flip; | 297 | req->value = dev->mode_config.async_page_flip; |
| 298 | break; | 298 | break; |
| 299 | case DRM_CAP_CURSOR_WIDTH: | ||
| 300 | if (dev->mode_config.cursor_width) | ||
| 301 | req->value = dev->mode_config.cursor_width; | ||
| 302 | else | ||
| 303 | req->value = 64; | ||
| 304 | break; | ||
| 305 | case DRM_CAP_CURSOR_HEIGHT: | ||
| 306 | if (dev->mode_config.cursor_height) | ||
| 307 | req->value = dev->mode_config.cursor_height; | ||
| 308 | else | ||
| 309 | req->value = 64; | ||
| 310 | break; | ||
| 299 | default: | 311 | default: |
| 300 | return -EINVAL; | 312 | return -EINVAL; |
| 301 | } | 313 | } |
diff --git a/drivers/gpu/drm/i2c/tda998x_drv.c b/drivers/gpu/drm/i2c/tda998x_drv.c index fa18cf374470..faa77f543a07 100644 --- a/drivers/gpu/drm/i2c/tda998x_drv.c +++ b/drivers/gpu/drm/i2c/tda998x_drv.c | |||
| @@ -1151,8 +1151,10 @@ tda998x_encoder_init(struct i2c_client *client, | |||
| 1151 | 1151 | ||
| 1152 | priv->current_page = 0xff; | 1152 | priv->current_page = 0xff; |
| 1153 | priv->cec = i2c_new_dummy(client->adapter, 0x34); | 1153 | priv->cec = i2c_new_dummy(client->adapter, 0x34); |
| 1154 | if (!priv->cec) | 1154 | if (!priv->cec) { |
| 1155 | kfree(priv); | ||
| 1155 | return -ENODEV; | 1156 | return -ENODEV; |
| 1157 | } | ||
| 1156 | priv->dpms = DRM_MODE_DPMS_OFF; | 1158 | priv->dpms = DRM_MODE_DPMS_OFF; |
| 1157 | 1159 | ||
| 1158 | encoder_slave->slave_priv = priv; | 1160 | encoder_slave->slave_priv = priv; |
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 9fa24347963a..4c1672809493 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
| @@ -8586,6 +8586,20 @@ static int intel_gen7_queue_flip(struct drm_device *dev, | |||
| 8586 | if (ring->id == RCS) | 8586 | if (ring->id == RCS) |
| 8587 | len += 6; | 8587 | len += 6; |
| 8588 | 8588 | ||
| 8589 | /* | ||
| 8590 | * BSpec MI_DISPLAY_FLIP for IVB: | ||
| 8591 | * "The full packet must be contained within the same cache line." | ||
| 8592 | * | ||
| 8593 | * Currently the LRI+SRM+MI_DISPLAY_FLIP all fit within the same | ||
| 8594 | * cacheline, if we ever start emitting more commands before | ||
| 8595 | * the MI_DISPLAY_FLIP we may need to first emit everything else, | ||
| 8596 | * then do the cacheline alignment, and finally emit the | ||
| 8597 | * MI_DISPLAY_FLIP. | ||
| 8598 | */ | ||
| 8599 | ret = intel_ring_cacheline_align(ring); | ||
| 8600 | if (ret) | ||
| 8601 | goto err_unpin; | ||
| 8602 | |||
| 8589 | ret = intel_ring_begin(ring, len); | 8603 | ret = intel_ring_begin(ring, len); |
| 8590 | if (ret) | 8604 | if (ret) |
| 8591 | goto err_unpin; | 8605 | goto err_unpin; |
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index 2f517b85b3f4..57552eb386b0 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c | |||
| @@ -537,6 +537,7 @@ intel_dp_aux_native_write(struct intel_dp *intel_dp, | |||
| 537 | uint8_t msg[20]; | 537 | uint8_t msg[20]; |
| 538 | int msg_bytes; | 538 | int msg_bytes; |
| 539 | uint8_t ack; | 539 | uint8_t ack; |
| 540 | int retry; | ||
| 540 | 541 | ||
| 541 | if (WARN_ON(send_bytes > 16)) | 542 | if (WARN_ON(send_bytes > 16)) |
| 542 | return -E2BIG; | 543 | return -E2BIG; |
| @@ -548,19 +549,21 @@ intel_dp_aux_native_write(struct intel_dp *intel_dp, | |||
| 548 | msg[3] = send_bytes - 1; | 549 | msg[3] = send_bytes - 1; |
| 549 | memcpy(&msg[4], send, send_bytes); | 550 | memcpy(&msg[4], send, send_bytes); |
| 550 | msg_bytes = send_bytes + 4; | 551 | msg_bytes = send_bytes + 4; |
| 551 | for (;;) { | 552 | for (retry = 0; retry < 7; retry++) { |
| 552 | ret = intel_dp_aux_ch(intel_dp, msg, msg_bytes, &ack, 1); | 553 | ret = intel_dp_aux_ch(intel_dp, msg, msg_bytes, &ack, 1); |
| 553 | if (ret < 0) | 554 | if (ret < 0) |
| 554 | return ret; | 555 | return ret; |
| 555 | ack >>= 4; | 556 | ack >>= 4; |
| 556 | if ((ack & DP_AUX_NATIVE_REPLY_MASK) == DP_AUX_NATIVE_REPLY_ACK) | 557 | if ((ack & DP_AUX_NATIVE_REPLY_MASK) == DP_AUX_NATIVE_REPLY_ACK) |
| 557 | break; | 558 | return send_bytes; |
| 558 | else if ((ack & DP_AUX_NATIVE_REPLY_MASK) == DP_AUX_NATIVE_REPLY_DEFER) | 559 | else if ((ack & DP_AUX_NATIVE_REPLY_MASK) == DP_AUX_NATIVE_REPLY_DEFER) |
| 559 | udelay(100); | 560 | usleep_range(400, 500); |
| 560 | else | 561 | else |
| 561 | return -EIO; | 562 | return -EIO; |
| 562 | } | 563 | } |
| 563 | return send_bytes; | 564 | |
| 565 | DRM_ERROR("too many retries, giving up\n"); | ||
| 566 | return -EIO; | ||
| 564 | } | 567 | } |
| 565 | 568 | ||
| 566 | /* Write a single byte to the aux channel in native mode */ | 569 | /* Write a single byte to the aux channel in native mode */ |
| @@ -582,6 +585,7 @@ intel_dp_aux_native_read(struct intel_dp *intel_dp, | |||
| 582 | int reply_bytes; | 585 | int reply_bytes; |
