diff options
| author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2014-10-03 14:24:46 -0400 |
|---|---|---|
| committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2014-10-03 14:24:46 -0400 |
| commit | 447a8b858e4bda41c394b1bc7fdbc9dc0bdf44f6 (patch) | |
| tree | 676e741f2552c9cb301e1e49c557b92bf8940f55 /drivers/gpu/drm/i915/intel_overlay.c | |
| parent | 3049683eafdbbbd7350b0e5ca02a2d8c026a3362 (diff) | |
| parent | 042e1c79166b9250edd8262bea84e1703f27ad2e (diff) | |
Merge branch 'next' into for-linus
Prepare first round of input updates for 3.18.
Diffstat (limited to 'drivers/gpu/drm/i915/intel_overlay.c')
| -rw-r--r-- | drivers/gpu/drm/i915/intel_overlay.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/drivers/gpu/drm/i915/intel_overlay.c b/drivers/gpu/drm/i915/intel_overlay.c index daa118978eec..dc2f4f26c961 100644 --- a/drivers/gpu/drm/i915/intel_overlay.c +++ b/drivers/gpu/drm/i915/intel_overlay.c | |||
| @@ -415,6 +415,10 @@ static int intel_overlay_release_old_vid(struct intel_overlay *overlay) | |||
| 415 | } | 415 | } |
| 416 | 416 | ||
| 417 | intel_overlay_release_old_vid_tail(overlay); | 417 | intel_overlay_release_old_vid_tail(overlay); |
| 418 | |||
| 419 | |||
| 420 | i915_gem_track_fb(overlay->old_vid_bo, NULL, | ||
| 421 | INTEL_FRONTBUFFER_OVERLAY(overlay->crtc->pipe)); | ||
| 418 | return 0; | 422 | return 0; |
| 419 | } | 423 | } |
| 420 | 424 | ||
| @@ -686,6 +690,7 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay, | |||
| 686 | bool scale_changed = false; | 690 | bool scale_changed = false; |
| 687 | struct drm_device *dev = overlay->dev; | 691 | struct drm_device *dev = overlay->dev; |
| 688 | u32 swidth, swidthsw, sheight, ostride; | 692 | u32 swidth, swidthsw, sheight, ostride; |
| 693 | enum pipe pipe = overlay->crtc->pipe; | ||
| 689 | 694 | ||
| 690 | BUG_ON(!mutex_is_locked(&dev->struct_mutex)); | 695 | BUG_ON(!mutex_is_locked(&dev->struct_mutex)); |
| 691 | BUG_ON(!drm_modeset_is_locked(&dev->mode_config.connection_mutex)); | 696 | BUG_ON(!drm_modeset_is_locked(&dev->mode_config.connection_mutex)); |
| @@ -713,7 +718,7 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay, | |||
| 713 | oconfig = OCONF_CC_OUT_8BIT; | 718 | oconfig = OCONF_CC_OUT_8BIT; |
| 714 | if (IS_GEN4(overlay->dev)) | 719 | if (IS_GEN4(overlay->dev)) |
| 715 | oconfig |= OCONF_CSC_MODE_BT709; | 720 | oconfig |= OCONF_CSC_MODE_BT709; |
| 716 | oconfig |= overlay->crtc->pipe == 0 ? | 721 | oconfig |= pipe == 0 ? |
| 717 | OCONF_PIPE_A : OCONF_PIPE_B; | 722 | OCONF_PIPE_A : OCONF_PIPE_B; |
| 718 | iowrite32(oconfig, ®s->OCONFIG); | 723 | iowrite32(oconfig, ®s->OCONFIG); |
| 719 | intel_overlay_unmap_regs(overlay, regs); | 724 | intel_overlay_unmap_regs(overlay, regs); |
| @@ -776,9 +781,15 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay, | |||
| 776 | if (ret) | 781 | if (ret) |
| 777 | goto out_unpin; | 782 | goto out_unpin; |
| 778 | 783 | ||
| 784 | i915_gem_track_fb(overlay->vid_bo, new_bo, | ||
| 785 | INTEL_FRONTBUFFER_OVERLAY(pipe)); | ||
| 786 | |||
| 779 | overlay->old_vid_bo = overlay->vid_bo; | 787 | overlay->old_vid_bo = overlay->vid_bo; |
| 780 | overlay->vid_bo = new_bo; | 788 | overlay->vid_bo = new_bo; |
| 781 | 789 | ||
| 790 | intel_frontbuffer_flip(dev, | ||
| 791 | INTEL_FRONTBUFFER_OVERLAY(pipe)); | ||
| 792 | |||
| 782 | return 0; | 793 | return 0; |
| 783 | 794 | ||
| 784 | out_unpin: | 795 | out_unpin: |
| @@ -1028,7 +1039,7 @@ int intel_overlay_put_image(struct drm_device *dev, void *data, | |||
| 1028 | struct drm_intel_overlay_put_image *put_image_rec = data; | 1039 | struct drm_intel_overlay_put_image *put_image_rec = data; |
| 1029 | struct drm_i915_private *dev_priv = dev->dev_private; | 1040 | struct drm_i915_private *dev_priv = dev->dev_private; |
| 1030 | struct intel_overlay *overlay; | 1041 | struct intel_overlay *overlay; |
| 1031 | struct drm_mode_object *drmmode_obj; | 1042 | struct drm_crtc *drmmode_crtc; |
| 1032 | struct intel_crtc *crtc; | 1043 | struct intel_crtc *crtc; |
| 1033 | struct drm_i915_gem_object *new_bo; | 1044 | struct drm_i915_gem_object *new_bo; |
| 1034 | struct put_image_params *params; | 1045 | struct put_image_params *params; |
| @@ -1057,13 +1068,12 @@ int intel_overlay_put_image(struct drm_device *dev, void *data, | |||
| 1057 | if (!params) | 1068 | if (!params) |
| 1058 | return -ENOMEM; | 1069 | return -ENOMEM; |
| 1059 | 1070 | ||
| 1060 | drmmode_obj = drm_mode_object_find(dev, put_image_rec->crtc_id, | 1071 | drmmode_crtc = drm_crtc_find(dev, put_image_rec->crtc_id); |
| 1061 | DRM_MODE_OBJECT_CRTC); | 1072 | if (!drmmode_crtc) { |
| 1062 | if (!drmmode_obj) { | ||
| 1063 | ret = -ENOENT; | 1073 | ret = -ENOENT; |
| 1064 | goto out_free; | 1074 | goto out_free; |
| 1065 | } | 1075 | } |
| 1066 | crtc = to_intel_crtc(obj_to_crtc(drmmode_obj)); | 1076 | crtc = to_intel_crtc(drmmode_crtc); |
| 1067 | 1077 | ||
| 1068 | new_bo = to_intel_bo(drm_gem_object_lookup(dev, file_priv, | 1078 | new_bo = to_intel_bo(drm_gem_object_lookup(dev, file_priv, |
| 1069 | put_image_rec->bo_handle)); | 1079 | put_image_rec->bo_handle)); |
