summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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,