[Intel-gfx] [RFC 4/7] drm/i915: Add checks specific to async flips
Karthik B S
karthik.b.s at intel.com
Fri Mar 6 11:39:24 UTC 2020
Support added only for async flips on primary plane.
If flip is requested on any other plane, reject it.
Signed-off-by: Karthik B S <karthik.b.s at intel.com>
---
drivers/gpu/drm/i915/display/intel_display.c | 29 ++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 25fad5d01e67..a8de08c3773e 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -14732,6 +14732,31 @@ static bool intel_cpu_transcoders_need_modeset(struct intel_atomic_state *state,
return false;
}
+static int intel_atomic_check_async(struct intel_atomic_state *state)
+{
+ struct drm_plane *plane;
+ struct drm_plane_state *plane_state;
+ struct intel_crtc_state *crtc_state;
+ struct intel_crtc *crtc;
+ int i, j;
+
+ /*FIXME: Async flip is only supported for primary plane currently
+ * Support for overlays to be added.
+ */
+ for_each_new_intel_crtc_in_state(state, crtc, crtc_state, i) {
+ if (crtc_state->uapi.async_flip) {
+ for_each_new_plane_in_state(&state->base,
+ plane, plane_state, j) {
+ if (plane->type != DRM_PLANE_TYPE_PRIMARY) {
+ DRM_ERROR("Async flips is NOT supported for non-primary plane\n");
+ return -EINVAL;
+ }
+ }
+ }
+ }
+ return 0;
+}
+
/**
* intel_atomic_check - validate state object
* @dev: drm device
@@ -14760,6 +14785,10 @@ static int intel_atomic_check(struct drm_device *dev,
if (ret)
goto fail;
+ ret = intel_atomic_check_async(state);
+ if (ret)
+ goto fail;
+
for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state,
new_crtc_state, i) {
if (!needs_modeset(new_crtc_state)) {
--
2.22.0
More information about the Intel-gfx
mailing list