diff options
| author | Clarence Ip <cip@codeaurora.org> | 2016-09-01 11:10:54 -0400 |
|---|---|---|
| committer | Clarence Ip <cip@codeaurora.org> | 2016-09-12 15:42:37 -0400 |
| commit | d47fba8511bf19ddef9eda6e1014b5b5be723614 (patch) | |
| tree | 811424617492bdc629bab5f65e819c766f1bba35 /drivers/gpu | |
| parent | c93c7b0138a16e0b267c4c276745fb31c4fa5c3a (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.h | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/sde/sde_crtc.c | 17 |
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, |
