[PATCH] drm/amd/display: log amdgpu_dm_atomic_check() failure cause

Harry Wentland harry.wentland at amd.com
Tue Nov 9 13:55:11 UTC 2021


On 2021-11-09 00:14, Shirish S wrote:
> update developers with next level of info about unsupported
> display configuration query that led to atomic check failure.
> 
> Signed-off-by: Shirish S <shirish.s at amd.com>

Reviewed-by: Harry Wentland <harry.wentland at amd.com>

Harry

> ---
>  .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 69 ++++++++++++++-----
>  1 file changed, 51 insertions(+), 18 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> index b1d9e89e5ae9..b7044c04a7c5 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -10755,8 +10755,10 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
>  	trace_amdgpu_dm_atomic_check_begin(state);
>  
>  	ret = drm_atomic_helper_check_modeset(dev, state);
> -	if (ret)
> +	if (ret) {
> +		DRM_DEBUG_DRIVER("drm_atomic_helper_check_modeset() failed\n");
>  		goto fail;
> +	}
>  
>  	/* Check connector changes */
>  	for_each_oldnew_connector_in_state(state, connector, old_con_state, new_con_state, i) {
> @@ -10772,6 +10774,7 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
>  
>  		new_crtc_state = drm_atomic_get_crtc_state(state, new_con_state->crtc);
>  		if (IS_ERR(new_crtc_state)) {
> +			DRM_DEBUG_DRIVER("drm_atomic_get_crtc_state() failed\n");
>  			ret = PTR_ERR(new_crtc_state);
>  			goto fail;
>  		}
> @@ -10786,8 +10789,10 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
>  		for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) {
>  			if (drm_atomic_crtc_needs_modeset(new_crtc_state)) {
>  				ret = add_affected_mst_dsc_crtcs(state, crtc);
> -				if (ret)
> +				if (ret) {
> +					DRM_DEBUG_DRIVER("add_affected_mst_dsc_crtcs() failed\n");
>  					goto fail;
> +				}
>  			}
>  		}
>  	}
> @@ -10802,19 +10807,25 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
>  			continue;
>  
>  		ret = amdgpu_dm_verify_lut_sizes(new_crtc_state);
> -		if (ret)
> +		if (ret) {
> +			DRM_DEBUG_DRIVER("amdgpu_dm_verify_lut_sizes() failed\n");
>  			goto fail;
> +		}
>  
>  		if (!new_crtc_state->enable)
>  			continue;
>  
>  		ret = drm_atomic_add_affected_connectors(state, crtc);
> -		if (ret)
> +		if (ret) {
> +			DRM_DEBUG_DRIVER("drm_atomic_add_affected_connectors() failed\n");
>  			goto fail;
> +		}
>  
>  		ret = drm_atomic_add_affected_planes(state, crtc);
> -		if (ret)
> +		if (ret) {
> +			DRM_DEBUG_DRIVER("drm_atomic_add_affected_planes() failed\n");
>  			goto fail;
> +		}
>  
>  		if (dm_old_crtc_state->dsc_force_changed)
>  			new_crtc_state->mode_changed = true;
> @@ -10851,6 +10862,7 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
>  
>  			if (IS_ERR(new_plane_state)) {
>  				ret = PTR_ERR(new_plane_state);
> +				DRM_DEBUG_DRIVER("new_plane_state is BAD\n");
>  				goto fail;
>  			}
>  		}
> @@ -10863,8 +10875,10 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
>  					    new_plane_state,
>  					    false,
>  					    &lock_and_validation_needed);
> -		if (ret)
> +		if (ret) {
> +			DRM_DEBUG_DRIVER("dm_update_plane_state() failed\n");
>  			goto fail;
> +		}
>  	}
>  
>  	/* Disable all crtcs which require disable */
> @@ -10874,8 +10888,10 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
>  					   new_crtc_state,
>  					   false,
>  					   &lock_and_validation_needed);
> -		if (ret)
> +		if (ret) {
> +			DRM_DEBUG_DRIVER("DISABLE: dm_update_crtc_state() failed\n");
>  			goto fail;
> +		}
>  	}
>  
>  	/* Enable all crtcs which require enable */
> @@ -10885,8 +10901,10 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
>  					   new_crtc_state,
>  					   true,
>  					   &lock_and_validation_needed);
> -		if (ret)
> +		if (ret) {
> +			DRM_DEBUG_DRIVER("ENABLE: dm_update_crtc_state() failed\n");
>  			goto fail;
> +		}
>  	}
>  
>  	/* Add new/modified planes */
> @@ -10896,20 +10914,26 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
>  					    new_plane_state,
>  					    true,
>  					    &lock_and_validation_needed);
> -		if (ret)
> +		if (ret) {
> +			DRM_DEBUG_DRIVER("dm_update_plane_state() failed\n");
>  			goto fail;
> +		}
>  	}
>  
>  	/* Run this here since we want to validate the streams we created */
>  	ret = drm_atomic_helper_check_planes(dev, state);
> -	if (ret)
> +	if (ret) {
> +		DRM_DEBUG_DRIVER("drm_atomic_helper_check_planes() failed\n");
>  		goto fail;
> +	}
>  
>  	/* Check cursor planes scaling */
>  	for_each_new_crtc_in_state(state, crtc, new_crtc_state, i) {
>  		ret = dm_check_crtc_cursor(state, crtc, new_crtc_state);
> -		if (ret)
> +		if (ret) {
> +			DRM_DEBUG_DRIVER("dm_check_crtc_cursor() failed\n");
>  			goto fail;
> +		}
>  	}
>  
>  	if (state->legacy_cursor_update) {
> @@ -10996,20 +11020,28 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
>  	 */
>  	if (lock_and_validation_needed) {
>  		ret = dm_atomic_get_state(state, &dm_state);
> -		if (ret)
> +		if (ret) {
> +			DRM_DEBUG_DRIVER("dm_atomic_get_state() failed\n");
>  			goto fail;
> +		}
>  
>  		ret = do_aquire_global_lock(dev, state);
> -		if (ret)
> +		if (ret) {
> +			DRM_DEBUG_DRIVER("do_aquire_global_lock() failed\n");
>  			goto fail;
> +		}
>  
>  #if defined(CONFIG_DRM_AMD_DC_DCN)
> -		if (!compute_mst_dsc_configs_for_state(state, dm_state->context, vars))
> +		if (!compute_mst_dsc_configs_for_state(state, dm_state->context, vars)) {
> +			DRM_DEBUG_DRIVER("compute_mst_dsc_configs_for_state() failed\n");
>  			goto fail;
> +		}
>  
>  		ret = dm_update_mst_vcpi_slots_for_dsc(state, dm_state->context, vars);
> -		if (ret)
> +		if (ret) {
> +			DRM_DEBUG_DRIVER("dm_update_mst_vcpi_slots_for_dsc() failed\n");
>  			goto fail;
> +		}
>  #endif
>  
>  		/*
> @@ -11019,12 +11051,13 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
>  		 * to get stuck in an infinite loop and hang eventually.
>  		 */
>  		ret = drm_dp_mst_atomic_check(state);
> -		if (ret)
> +		if (ret) {
> +			DRM_DEBUG_DRIVER("drm_dp_mst_atomic_check() failed\n");
>  			goto fail;
> +		}
>  		status = dc_validate_global_state(dc, dm_state->context, false);
>  		if (status != DC_OK) {
> -			drm_dbg_atomic(dev,
> -				       "DC global validation failure: %s (%d)",
> +			DRM_DEBUG_DRIVER("DC global validation failure: %s (%d)",
>  				       dc_status_to_str(status), status);
>  			ret = -EINVAL;
>  			goto fail;
> 



More information about the amd-gfx mailing list