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