summaryrefslogtreecommitdiff
path: root/drivers/gpu
diff options
context:
space:
mode:
authorClarence Ip <cip@codeaurora.org>2016-09-01 11:10:54 -0400
committerClarence Ip <cip@codeaurora.org>2016-09-12 15:42:37 -0400
commitd47fba8511bf19ddef9eda6e1014b5b5be723614 (patch)
tree811424617492bdc629bab5f65e819c766f1bba35 /drivers/gpu
parentc93c7b0138a16e0b267c4c276745fb31c4fa5c3a (diff)
DOWNSTREAM: drm/msm/sde: optionally delay output fence signal
Android's HWC1 requires fences returned after a commit to be signalled only after the next commit has been received. This change provides a new 'output_fence_offset' property on the CRTC to allow user space clients to optionally delay the fence signalling by an additional commit. Change-Id: I9938d9b746766ccdfec7568ba80eb6a7bf37b778 Signed-off-by: Clarence Ip <cip@codeaurora.org>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/msm/msm_drv.h1
-rw-r--r--drivers/gpu/drm/msm/sde/sde_crtc.c17
2 files changed, 12 insertions, 6 deletions
diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h
index dccd3ed6eca7..318c55daec9b 100644
--- a/drivers/gpu/drm/msm/msm_drv.h
+++ b/drivers/gpu/drm/msm/msm_drv.h
@@ -109,6 +109,7 @@ enum msm_mdp_crtc_property {
/* range properties */
CRTC_PROP_INPUT_FENCE_TIMEOUT = CRTC_PROP_BLOBCOUNT,
CRTC_PROP_OUTPUT_FENCE,
+ CRTC_PROP_OUTPUT_FENCE_OFFSET,
/* total # of properties */
CRTC_PROP_COUNT
diff --git a/drivers/gpu/drm/msm/sde/sde_crtc.c b/drivers/gpu/drm/msm/sde/sde_crtc.c
index 76732181cb98..949cb837868e 100644
--- a/drivers/gpu/drm/msm/sde/sde_crtc.c
+++ b/drivers/gpu/drm/msm/sde/sde_crtc.c
@@ -1000,6 +1000,10 @@ static void sde_crtc_install_properties(struct drm_crtc *crtc)
msm_property_install_range(&sde_crtc->property_info, "output_fence",
0x0, 0, INR_OPEN_MAX, 0x0, CRTC_PROP_OUTPUT_FENCE);
+
+ msm_property_install_range(&sde_crtc->property_info,
+ "output_fence_offset", 0x0, 0, 1, 0,
+ CRTC_PROP_OUTPUT_FENCE_OFFSET);
}
/**
@@ -1077,12 +1081,13 @@ static int sde_crtc_atomic_get_property(struct drm_crtc *crtc,
cstate = to_sde_crtc_state(state);
i = msm_property_index(&sde_crtc->property_info, property);
if (i == CRTC_PROP_OUTPUT_FENCE) {
- /*
- * Set output fence offset to zero so that fences
- * returned during a commit will signal at the end
- * of the same commit.
- */
- ret = sde_fence_create(&sde_crtc->output_fence, val, 0);
+ int offset = sde_crtc_get_property(cstate,
+ CRTC_PROP_OUTPUT_FENCE_OFFSET);
+
+ ret = sde_fence_create(
+ &sde_crtc->output_fence, val, offset);
+ if (ret)
+ SDE_ERROR("fence create failed\n");
} else {
ret = msm_property_atomic_get(&sde_crtc->property_info,
cstate->property_values,