[igt-dev] [PATCH i-g-t] tests/fbcon: Skip test if fbcon modeset if not compatible with feature tested

Sripada, Radhakrishna radhakrishna.sripada at intel.com
Thu Nov 19 18:32:25 UTC 2020


On Mon, Nov 02, 2020 at 05:33:04PM -0800, José Roberto de Souza wrote:
> IGT has no control of what is going to be the modeset of fbcon and as
> it could set a mode that is not compatible with the feature being
> tested lets check for those incompatibilities and skip the test if
> needed.
> 
> Fixes: https://gitlab.freedesktop.org/drm/intel/-/issues/2327
LGTM,
Reviewed-by: Radhakrishna Sripada <radhakrishna.sripada at intel.com>

-RK
> Signed-off-by: José Roberto de Souza <jose.souza at intel.com>
> ---
>  tests/kms_fbcon_fbt.c | 47 +++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 47 insertions(+)
> 
> diff --git a/tests/kms_fbcon_fbt.c b/tests/kms_fbcon_fbt.c
> index e99a1f2f2..4df4db521 100644
> --- a/tests/kms_fbcon_fbt.c
> +++ b/tests/kms_fbcon_fbt.c
> @@ -255,6 +255,48 @@ static inline void psr_debugfs_enable(int device, int debugfs_fd)
>  	psr_enable(device, debugfs_fd, PSR_MODE_1);
>  }
>  
> +static void fbc_skips_on_fbcon(int debugfs_fd)
> +{
> +	const char *reasons[] = {
> +		"incompatible mode",
> +		"mode too large for compression",
> +		"framebuffer not tiled or fenced",
> +		"pixel format is invalid",
> +		"rotation unsupported",
> +		"tiling unsupported",
> +		"framebuffer stride not supported",
> +		"per-pixel alpha blending is incompatible with FBC",
> +		"pixel rate is too big",
> +		"CFB requirements changed",
> +		"plane Y offset is misaligned",
> +		"plane height + offset is non-modulo of 4"
> +	};
> +	bool skip = false;
> +	char buf[128];
> +	int i;
> +
> +	igt_debugfs_simple_read(debugfs_fd, "i915_fbc_status", buf, sizeof(buf));
> +	if (strstr(buf, "FBC enabled\n"))
> +		return;
> +
> +	for (i = 0; skip == false && i < ARRAY_SIZE(reasons); i++)
> +		skip = strstr(buf, reasons[i]);
> +
> +	if (skip)
> +		igt_skip("fbcon modeset is not compatible with FBC\n");
> +}
> +
> +static void psr_skips_on_fbcon(int debugfs_fd)
> +{
> +	/*
> +	 * Unless fbcon enables interlaced mode all other PSR restrictions
> +	 * will be caught and skipped in supported_on_chipset() hook.
> +	 * As PSR don't expose in debugfs why it is not enabling for now
> +	 * not checking not even if it was not enabled because of interlaced
> +	 * mode, if some day it happens changes will be needed first.
> +	 */
> +}
> +
>  struct feature {
>  	bool (*supported_on_chipset)(int device, int debugfs_fd);
>  	bool (*wait_until_enabled)(int debugfs_fd);
> @@ -262,6 +304,8 @@ struct feature {
>  	bool (*wait_until_update)(struct drm_info *drm);
>  	bool (*connector_possible_fn)(drmModeConnectorPtr connector);
>  	void (*enable)(int device, int debugfs_fd);
> +	/* skip test if feature can't be enabled due fbcon modeset */
> +	void (*skips_on_fbcon)(int debugfs_fd);
>  } fbc = {
>  	.supported_on_chipset = fbc_supported_on_chipset,
>  	.wait_until_enabled = fbc_wait_until_enabled,
> @@ -269,6 +313,7 @@ struct feature {
>  	.wait_until_update = fbc_wait_until_update,
>  	.connector_possible_fn = connector_can_fbc,
>  	.enable = fbc_modparam_enable,
> +	.skips_on_fbcon = fbc_skips_on_fbcon,
>  }, psr = {
>  	.supported_on_chipset = psr_supported_on_chipset,
>  	.wait_until_enabled = psr_wait_until_enabled,
> @@ -276,6 +321,7 @@ struct feature {
>  	.wait_until_update = psr_wait_until_update,
>  	.connector_possible_fn = connector_can_psr,
>  	.enable = psr_debugfs_enable,
> +	.skips_on_fbcon = psr_skips_on_fbcon,
>  };
>  
>  static void restore_fbcon(struct drm_info *drm)
> @@ -317,6 +363,7 @@ static void subtest(struct drm_info *drm, struct feature *feature, bool suspend)
>  	sleep(3);
>  
>  	wait_user("Back to fbcon.");
> +	feature->skips_on_fbcon(drm->debugfs_fd);
>  	igt_assert(feature->wait_until_update(drm));
>  
>  	if (suspend) {
> -- 
> 2.29.2
> 
> _______________________________________________
> igt-dev mailing list
> igt-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/igt-dev


More information about the igt-dev mailing list