For failures in async flip atomic check/commit path return user readable
error codes in struct drm_atomic_state.

Signed-off-by: Arun R Murthy <arun.r.mur...@intel.com>
---
 drivers/gpu/drm/i915/display/intel_display.c | 31 +++++++++++++++++++++-------
 1 file changed, 23 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display.c 
b/drivers/gpu/drm/i915/display/intel_display.c
index 
c1a3a95c65f0b66c24ddd64f47dfdc67bbde86c9..41b054764fdec37e4d9410fa7fbe62dbcbd3a11f
 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -5935,6 +5935,7 @@ static int intel_async_flip_check_uapi(struct 
intel_atomic_state *state,
        struct intel_plane_state *new_plane_state;
        struct intel_plane *plane;
        int i;
+       char *err_string;
 
        if (!new_crtc_state->uapi.async_flip)
                return 0;
@@ -5947,9 +5948,13 @@ static int intel_async_flip_check_uapi(struct 
intel_atomic_state *state,
        }
 
        if (intel_crtc_needs_modeset(new_crtc_state)) {
-               drm_dbg_kms(display->drm,
-                           "[CRTC:%d:%s] modeset required\n",
-                           crtc->base.base.id, crtc->base.name);
+               err_string = "requires full modeset";
+               drm_dbg_kms(display->drm, "[CRTC:%d:%s] %s\n",
+                           crtc->base.base.id, crtc->base.name,
+                           err_string);
+               drm_mode_atomic_add_error_msg(state->base.error_code,
+                                             
DRM_MODE_ATOMIC_CRTC_NEED_FULL_MODESET,
+                                             err_string);
                return -EINVAL;
        }
 
@@ -6001,6 +6006,7 @@ static int intel_async_flip_check_hw(struct 
intel_atomic_state *state, struct in
        const struct intel_plane_state *new_plane_state, *old_plane_state;
        struct intel_plane *plane;
        int i;
+       char *err_string;
 
        old_crtc_state = intel_atomic_get_old_crtc_state(state, crtc);
        new_crtc_state = intel_atomic_get_new_crtc_state(state, crtc);
@@ -6016,9 +6022,13 @@ static int intel_async_flip_check_hw(struct 
intel_atomic_state *state, struct in
        }
 
        if (intel_crtc_needs_modeset(new_crtc_state)) {
-               drm_dbg_kms(display->drm,
-                           "[CRTC:%d:%s] modeset required\n",
-                           crtc->base.base.id, crtc->base.name);
+               err_string = "requires full modeset";
+               drm_dbg_kms(display->drm, "[CRTC:%d:%s] %s\n",
+                           crtc->base.base.id, crtc->base.name,
+                           err_string);
+               drm_mode_atomic_add_error_msg(state->base.error_code,
+                                             
DRM_MODE_ATOMIC_CRTC_NEED_FULL_MODESET,
+                                             err_string);
                return -EINVAL;
        }
 
@@ -6056,11 +6066,16 @@ static int intel_async_flip_check_hw(struct 
intel_atomic_state *state, struct in
 
                if (!intel_plane_can_async_flip(plane, 
new_plane_state->hw.fb->format->format,
                                                
new_plane_state->hw.fb->modifier)) {
+                       err_string = "modifier does not support async flip";
                        drm_dbg_kms(display->drm,
-                                   "[PLANE:%d:%s] pixel format %p4cc / 
modifier 0x%llx does not support async flip\n",
+                                   "[PLANE:%d:%s] pixel format %p4cc / 0x%llx 
%s\n",
                                    plane->base.base.id, plane->base.name,
                                    &new_plane_state->hw.fb->format->format,
-                                   new_plane_state->hw.fb->modifier);
+                                   new_plane_state->hw.fb->modifier,
+                                   err_string);
+                       drm_mode_atomic_add_error_msg(state->base.error_code,
+                                                     
DRM_MODE_ATOMIC_ASYNC_MODIFIER_NOT_SUPP,
+                                                     err_string);
                        return -EINVAL;
                }
 

-- 
2.25.1

Reply via email to