[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