aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_overlay.c
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2014-10-03 14:24:46 -0400
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2014-10-03 14:24:46 -0400
commit447a8b858e4bda41c394b1bc7fdbc9dc0bdf44f6 (patch)
tree676e741f2552c9cb301e1e49c557b92bf8940f55 /drivers/gpu/drm/i915/intel_overlay.c
parent3049683eafdbbbd7350b0e5ca02a2d8c026a3362 (diff)
parent042e1c79166b9250edd8262bea84e1703f27ad2e (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.c22
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, &regs->OCONFIG); 723 iowrite32(oconfig, &regs->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
784out_unpin: 795out_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));