drm/msm/sde: update the fence support in sde
Update SDE DRM driver with upstream fence support
and avoid using android sync fence to align
the implementation with 4.9 kernel.
Change-Id: I5e55a48b7d7306b39688a4463dfe92ce77c55f37
Signed-off-by: Dhaval Patel <pdhaval@codeaurora.org>
diff --git a/drivers/gpu/drm/msm/sde/sde_plane.c b/drivers/gpu/drm/msm/sde/sde_plane.c
index 01630cf..4e94807 100644
--- a/drivers/gpu/drm/msm/sde/sde_plane.c
+++ b/drivers/gpu/drm/msm/sde/sde_plane.c
@@ -533,6 +533,7 @@
uint32_t prefix;
void *input_fence;
int ret = -EINVAL;
+ signed long rc;
if (!plane) {
SDE_ERROR("invalid plane\n");
@@ -544,24 +545,36 @@
input_fence = pstate->input_fence;
if (input_fence) {
+ psde->is_error = false;
prefix = sde_sync_get_name_prefix(input_fence);
- ret = sde_sync_wait(input_fence, wait_ms);
+ rc = sde_sync_wait(input_fence, wait_ms);
SDE_EVT32(DRMID(plane), -ret, prefix);
- switch (ret) {
+ switch (rc) {
case 0:
- SDE_DEBUG_PLANE(psde, "signaled\n");
- break;
- case -ETIME:
SDE_ERROR_PLANE(psde, "%ums timeout on %08X\n",
wait_ms, prefix);
psde->is_error = true;
+ ret = -ETIMEDOUT;
+ break;
+ case -ERESTARTSYS:
+ SDE_ERROR_PLANE(psde,
+ "%ums wait interrupted on %08X\n",
+ wait_ms, prefix);
+ psde->is_error = true;
+ ret = -ERESTARTSYS;
+ break;
+ case -EINVAL:
+ SDE_ERROR_PLANE(psde,
+ "invalid fence param for %08X\n",
+ prefix);
+ psde->is_error = true;
+ ret = -EINVAL;
break;
default:
- SDE_ERROR_PLANE(psde, "error %d on %08X\n",
- ret, prefix);
- psde->is_error = true;
+ SDE_DEBUG_PLANE(psde, "signaled\n");
+ ret = 0;
break;
}
} else {