Igt-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [igt-dev] [PATCH 0/2] tests/fbdev: Additional tests for resolution and panning
@ 2021-10-11 14:07 Thomas Zimmermann
  2021-10-11 14:07 ` [igt-dev] [PATCH 1/2] tests/fbdev: Test for validity of video mode settings Thomas Zimmermann
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Thomas Zimmermann @ 2021-10-11 14:07 UTC (permalink / raw)
  To: igt-dev; +Cc: Thomas Zimmermann

Add addtional tests for resolution and panning operations on fbdev
devices. Succeed on successful operations. Fail on invalid operations
or state.

DRM's simpledrm driver exposed a bug in DRM's fbdev overallocation code,
[1] which is required for fbdev pageflipping. The new test cases intent
to test panning and page flipping, and detect such issues early.

Tested with the current simpledrm and a hacked version that supports fbdev
overallocation. This will also help to implement the panning functionality
for real in simpledrm and other drivers.

[1] https://lore.kernel.org/dri-devel/20211005070355.7680-1-tzimmermann@suse.de/

Thomas Zimmermann (2):
  tests/fbdev: Test for validity of video mode settings
  tests/fbdev: Add tests for display panning

 tests/fbdev.c | 135 +++++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 127 insertions(+), 8 deletions(-)

--
2.33.0

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [igt-dev] [PATCH 1/2] tests/fbdev: Test for validity of video mode settings
  2021-10-11 14:07 [igt-dev] [PATCH 0/2] tests/fbdev: Additional tests for resolution and panning Thomas Zimmermann
@ 2021-10-11 14:07 ` Thomas Zimmermann
  2021-10-11 14:20   ` Ville Syrjälä
  2021-10-11 14:07 ` [igt-dev] [PATCH 2/2] tests/fbdev: Add tests for display panning Thomas Zimmermann
  2021-10-11 14:43 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/fbdev: Additional tests for resolution and panning Patchwork
  2 siblings, 1 reply; 8+ messages in thread
From: Thomas Zimmermann @ 2021-10-11 14:07 UTC (permalink / raw)
  To: igt-dev; +Cc: Thomas Zimmermann

Add basic tests for video mode resolution and color on fbdev
devices.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 tests/fbdev.c | 43 +++++++++++++++++++++++++++++++++++--------
 1 file changed, 35 insertions(+), 8 deletions(-)

diff --git a/tests/fbdev.c b/tests/fbdev.c
index 443a43dc..c9903f8b 100644
--- a/tests/fbdev.c
+++ b/tests/fbdev.c
@@ -50,14 +50,41 @@ static void mode_tests(int fd)
 
 	igt_describe("Check if screeninfo is valid");
 	igt_subtest("info") {
-		unsigned long size;
-
-		size = var_info.yres * fix_info.line_length;
-		igt_assert_f(size <= fix_info.smem_len,
-			     "screen size (%d x %d) of pitch %d does not fit within mappable area of size %u\n",
-			     var_info.xres, var_info.yres,
-			     fix_info.line_length,
-			     fix_info.smem_len);
+		unsigned long nlines;
+
+		/* video memory configuration */
+		igt_assert_f(fix_info.line_length, "line pitch not set\n");
+		igt_assert_f(fix_info.smem_len, "size of video memory not set\n");
+		igt_assert_f(fix_info.line_length <= fix_info.smem_len,
+			     "line length (%u) exceeds available video memory (%u)\n",
+			     fix_info.line_length, fix_info.smem_len);
+
+		/* color format */
+		igt_assert_f(var_info.bits_per_pixel, "bits-per-pixel not set\n");
+
+		/* horizontal resolution */
+		igt_assert_f(var_info.xres, "horizontal resolution not set\n");
+		igt_assert_f(var_info.xres_virtual, "horizontal virtual resolution not set\n");
+		igt_assert_f(var_info.xres <= var_info.xres_virtual,
+			     "horizontal virtual resolution (%u) less than horizontal resolution (%u)\n",
+			     var_info.xres_virtual, var_info.xres);
+		igt_assert_f(var_info.xoffset <= (var_info.xres_virtual - var_info.xres),
+			     "screen horizontal offset (%u) overflow\n",
+			     var_info.xoffset);
+
+		/* vertical resolution */
+		igt_assert_f(var_info.yres, "vertical resolution not set\n");
+		igt_assert_f(var_info.yres_virtual, "vertical virtual resolution not set\n");
+		igt_assert_f(var_info.yres <= var_info.yres_virtual,
+			     "vertical virtual resolution (%u) less than vertical resolution (%u)\n",
+			     var_info.yres_virtual, var_info.yres);
+		igt_assert_f(var_info.yoffset <= (var_info.yres_virtual - var_info.yres),
+			     "screen vertical offset (%u) overflow\n",
+			     var_info.yoffset);
+		nlines = fix_info.smem_len / fix_info.line_length;
+		igt_assert_f(var_info.yres_virtual <= nlines,
+			     "vertical virtual resolution (%u) with pitch %u exceeds available video memory\n",
+			     var_info.yres_virtual, fix_info.line_length);
 	}
 }
 
-- 
2.33.0

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [igt-dev] [PATCH 2/2] tests/fbdev: Add tests for display panning
  2021-10-11 14:07 [igt-dev] [PATCH 0/2] tests/fbdev: Additional tests for resolution and panning Thomas Zimmermann
  2021-10-11 14:07 ` [igt-dev] [PATCH 1/2] tests/fbdev: Test for validity of video mode settings Thomas Zimmermann
@ 2021-10-11 14:07 ` Thomas Zimmermann
  2021-10-11 14:24   ` Ville Syrjälä
  2021-10-11 14:43 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/fbdev: Additional tests for resolution and panning Patchwork
  2 siblings, 1 reply; 8+ messages in thread
From: Thomas Zimmermann @ 2021-10-11 14:07 UTC (permalink / raw)
  To: igt-dev; +Cc: Thomas Zimmermann

Add tests that perform panning / page flip operations on an fbdev
device. Panning should work when the viewport wi within the virtual
screen and fail otherwise.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 tests/fbdev.c | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 92 insertions(+)

diff --git a/tests/fbdev.c b/tests/fbdev.c
index c9903f8b..17727cd0 100644
--- a/tests/fbdev.c
+++ b/tests/fbdev.c
@@ -86,6 +86,98 @@ static void mode_tests(int fd)
 			     "vertical virtual resolution (%u) with pitch %u exceeds available video memory\n",
 			     var_info.yres_virtual, fix_info.line_length);
 	}
+
+	igt_describe("Check panning / page flipping");
+	igt_subtest("pan") {
+		struct fb_var_screeninfo pan_var, new_var;
+		int ret;
+
+		/* jump to opposite end of virtual screen */
+		pan_var.xoffset = var_info.xres_virtual - var_info.xres - var_info.xoffset;
+		pan_var.yoffset = var_info.yres_virtual - var_info.yres - var_info.yoffset;
+		ret = ioctl(fd, FBIOPAN_DISPLAY, &pan_var);
+		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
+		ret = ioctl(fd, FBIOGET_VSCREENINFO, &new_var);
+		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
+		igt_assert_f(pan_var.xoffset == new_var.xoffset && pan_var.yoffset == new_var.yoffset,
+			     "panning to (%u, %u) moved to (%u, %u)\n",
+			     pan_var.xoffset, pan_var.yoffset, new_var.xoffset, new_var.yoffset);
+
+		/* jump to (0, 0) */
+		pan_var.xoffset = 0;
+		pan_var.yoffset = 0;
+		ret = ioctl(fd, FBIOPAN_DISPLAY, &pan_var);
+		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
+		ret = ioctl(fd, FBIOGET_VSCREENINFO, &new_var);
+		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
+		igt_assert_f(pan_var.xoffset == new_var.xoffset && pan_var.yoffset == new_var.yoffset,
+			     "panning to (%u, %u) moved to (%u, %u)\n",
+			     pan_var.xoffset, pan_var.yoffset, new_var.xoffset, new_var.yoffset);
+
+		/* jump to maximum extend */
+		pan_var.xoffset = var_info.xres_virtual - var_info.xres;
+		pan_var.yoffset = var_info.yres_virtual - var_info.yres;
+		ret = ioctl(fd, FBIOPAN_DISPLAY, &pan_var);
+		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
+		ret = ioctl(fd, FBIOGET_VSCREENINFO, &new_var);
+		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
+		igt_assert_f(pan_var.xoffset == new_var.xoffset && pan_var.yoffset == new_var.yoffset,
+			     "panning to (%u, %u) moved to (%u, %u)\n",
+			     pan_var.xoffset, pan_var.yoffset, new_var.xoffset, new_var.yoffset);
+
+		/* return to original offsets for next tests */
+		ret = ioctl(fd, FBIOPAN_DISPLAY, &var_info);
+		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
+
+		/* jump beyond maximum horizontal extend */
+		pan_var.xoffset = var_info.xres_virtual - var_info.xres + 1;
+		pan_var.yoffset = 0;
+		ret = ioctl(fd, FBIOPAN_DISPLAY, &pan_var);
+		igt_assert_f(ret == -1, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
+		ret = ioctl(fd, FBIOGET_VSCREENINFO, &new_var);
+		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
+		igt_assert_f(var_info.xoffset == new_var.xoffset && var_info.yoffset == new_var.yoffset,
+			     "panning to (%u, %u) moved to (%u, %u)\n",
+			     pan_var.xoffset, pan_var.yoffset, new_var.xoffset, new_var.yoffset);
+
+		/* jump beyond maximum vertical extend */
+		pan_var.xoffset = 0;
+		pan_var.yoffset = var_info.yres_virtual - var_info.yres + 1;
+		ret = ioctl(fd, FBIOPAN_DISPLAY, &pan_var);
+		igt_assert_f(ret == -1, "ioctl(FBIOPAN_DISPLAY), ret=%d\n", ret);
+		ret = ioctl(fd, FBIOGET_VSCREENINFO, &new_var);
+		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
+		igt_assert_f(var_info.xoffset == new_var.xoffset && var_info.yoffset == new_var.yoffset,
+			     "panning to (%u, %u) moved to (%u, %u)\n",
+			     pan_var.xoffset, pan_var.yoffset, new_var.xoffset, new_var.yoffset);
+
+		/* jump beyond horizontal virtual resolution */
+		pan_var.xoffset = var_info.xres_virtual;
+		pan_var.yoffset = 0;
+		ret = ioctl(fd, FBIOPAN_DISPLAY, &pan_var);
+		igt_assert_f(ret == -1, "ioctl(FBIOPAN_DISPLAY), ret=%d\n", ret);
+		ret = ioctl(fd, FBIOGET_VSCREENINFO, &new_var);
+		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
+		igt_assert_f(var_info.xoffset == new_var.xoffset && var_info.yoffset == new_var.yoffset,
+			     "panning to (%u, %u) moved to (%u, %u)\n",
+			     pan_var.xoffset, pan_var.yoffset, new_var.xoffset, new_var.yoffset);
+
+		/* jump beyond vertical virtual resolution */
+		pan_var.xoffset = 0;
+		pan_var.yoffset = var_info.yres_virtual;
+		ret = ioctl(fd, FBIOPAN_DISPLAY, &pan_var);
+		igt_assert_f(ret == -1, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
+		ret = ioctl(fd, FBIOGET_VSCREENINFO, &new_var);
+		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
+		igt_assert_f(var_info.xoffset == new_var.xoffset && var_info.yoffset == new_var.yoffset,
+			     "panning to (%u, %u) moved to (%u, %u)\n",
+			     pan_var.xoffset, pan_var.yoffset, new_var.xoffset, new_var.yoffset);
+	}
+
+	igt_fixture {
+		/* restore original panning offsets */
+		ioctl(fd, FBIOPAN_DISPLAY, &var_info);
+	}
 }
 
 static void framebuffer_tests(int fd)
-- 
2.33.0

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [igt-dev] [PATCH 1/2] tests/fbdev: Test for validity of video mode settings
  2021-10-11 14:07 ` [igt-dev] [PATCH 1/2] tests/fbdev: Test for validity of video mode settings Thomas Zimmermann
@ 2021-10-11 14:20   ` Ville Syrjälä
  2021-10-12 14:23     ` Thomas Zimmermann
  0 siblings, 1 reply; 8+ messages in thread
From: Ville Syrjälä @ 2021-10-11 14:20 UTC (permalink / raw)
  To: Thomas Zimmermann; +Cc: igt-dev

On Mon, Oct 11, 2021 at 04:07:18PM +0200, Thomas Zimmermann wrote:
> Add basic tests for video mode resolution and color on fbdev
> devices.
> 
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> ---
>  tests/fbdev.c | 43 +++++++++++++++++++++++++++++++++++--------
>  1 file changed, 35 insertions(+), 8 deletions(-)
> 
> diff --git a/tests/fbdev.c b/tests/fbdev.c
> index 443a43dc..c9903f8b 100644
> --- a/tests/fbdev.c
> +++ b/tests/fbdev.c
> @@ -50,14 +50,41 @@ static void mode_tests(int fd)
>  
>  	igt_describe("Check if screeninfo is valid");
>  	igt_subtest("info") {
> -		unsigned long size;
> -
> -		size = var_info.yres * fix_info.line_length;
> -		igt_assert_f(size <= fix_info.smem_len,
> -			     "screen size (%d x %d) of pitch %d does not fit within mappable area of size %u\n",
> -			     var_info.xres, var_info.yres,
> -			     fix_info.line_length,
> -			     fix_info.smem_len);
> +		unsigned long nlines;
> +
> +		/* video memory configuration */
> +		igt_assert_f(fix_info.line_length, "line pitch not set\n");
> +		igt_assert_f(fix_info.smem_len, "size of video memory not set\n");
> +		igt_assert_f(fix_info.line_length <= fix_info.smem_len,
> +			     "line length (%u) exceeds available video memory (%u)\n",
> +			     fix_info.line_length, fix_info.smem_len);
> +
> +		/* color format */
> +		igt_assert_f(var_info.bits_per_pixel, "bits-per-pixel not set\n");
> +
> +		/* horizontal resolution */
> +		igt_assert_f(var_info.xres, "horizontal resolution not set\n");
> +		igt_assert_f(var_info.xres_virtual, "horizontal virtual resolution not set\n");
> +		igt_assert_f(var_info.xres <= var_info.xres_virtual,
> +			     "horizontal virtual resolution (%u) less than horizontal resolution (%u)\n",
> +			     var_info.xres_virtual, var_info.xres);
> +		igt_assert_f(var_info.xoffset <= (var_info.xres_virtual - var_info.xres),
> +			     "screen horizontal offset (%u) overflow\n",
> +			     var_info.xoffset);
> +
> +		/* vertical resolution */
> +		igt_assert_f(var_info.yres, "vertical resolution not set\n");
> +		igt_assert_f(var_info.yres_virtual, "vertical virtual resolution not set\n");
> +		igt_assert_f(var_info.yres <= var_info.yres_virtual,
> +			     "vertical virtual resolution (%u) less than vertical resolution (%u)\n",
> +			     var_info.yres_virtual, var_info.yres);
> +		igt_assert_f(var_info.yoffset <= (var_info.yres_virtual - var_info.yres),
> +			     "screen vertical offset (%u) overflow\n",
> +			     var_info.yoffset);

YWRAP does allow for that IIRC. So maybe should check that, or maybe we
don't care about drivers that support it?

> +		nlines = fix_info.smem_len / fix_info.line_length;
> +		igt_assert_f(var_info.yres_virtual <= nlines,
> +			     "vertical virtual resolution (%u) with pitch %u exceeds available video memory\n",
> +			     var_info.yres_virtual, fix_info.line_length);

Maybe add the counterpart for the horizontal direction?

>  	}
>  }
>  
> -- 
> 2.33.0

-- 
Ville Syrjälä
Intel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [igt-dev] [PATCH 2/2] tests/fbdev: Add tests for display panning
  2021-10-11 14:07 ` [igt-dev] [PATCH 2/2] tests/fbdev: Add tests for display panning Thomas Zimmermann
@ 2021-10-11 14:24   ` Ville Syrjälä
  2021-10-12 14:26     ` Thomas Zimmermann
  0 siblings, 1 reply; 8+ messages in thread
From: Ville Syrjälä @ 2021-10-11 14:24 UTC (permalink / raw)
  To: Thomas Zimmermann; +Cc: igt-dev

On Mon, Oct 11, 2021 at 04:07:19PM +0200, Thomas Zimmermann wrote:
> Add tests that perform panning / page flip operations on an fbdev
> device. Panning should work when the viewport wi within the virtual
> screen and fail otherwise.
> 
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> ---
>  tests/fbdev.c | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 92 insertions(+)
> 
> diff --git a/tests/fbdev.c b/tests/fbdev.c
> index c9903f8b..17727cd0 100644
> --- a/tests/fbdev.c
> +++ b/tests/fbdev.c
> @@ -86,6 +86,98 @@ static void mode_tests(int fd)
>  			     "vertical virtual resolution (%u) with pitch %u exceeds available video memory\n",
>  			     var_info.yres_virtual, fix_info.line_length);
>  	}
> +
> +	igt_describe("Check panning / page flipping");
> +	igt_subtest("pan") {
> +		struct fb_var_screeninfo pan_var, new_var;
> +		int ret;
> +
> +		/* jump to opposite end of virtual screen */
> +		pan_var.xoffset = var_info.xres_virtual - var_info.xres - var_info.xoffset;
> +		pan_var.yoffset = var_info.yres_virtual - var_info.yres - var_info.yoffset;

Should look at {x,y}panstep probably before assuming this stuff will do exactly
what you ask it.

> +		ret = ioctl(fd, FBIOPAN_DISPLAY, &pan_var);
> +		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
> +		ret = ioctl(fd, FBIOGET_VSCREENINFO, &new_var);
> +		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
> +		igt_assert_f(pan_var.xoffset == new_var.xoffset && pan_var.yoffset == new_var.yoffset,
> +			     "panning to (%u, %u) moved to (%u, %u)\n",
> +			     pan_var.xoffset, pan_var.yoffset, new_var.xoffset, new_var.yoffset);
> +
> +		/* jump to (0, 0) */
> +		pan_var.xoffset = 0;
> +		pan_var.yoffset = 0;
> +		ret = ioctl(fd, FBIOPAN_DISPLAY, &pan_var);
> +		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
> +		ret = ioctl(fd, FBIOGET_VSCREENINFO, &new_var);
> +		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
> +		igt_assert_f(pan_var.xoffset == new_var.xoffset && pan_var.yoffset == new_var.yoffset,
> +			     "panning to (%u, %u) moved to (%u, %u)\n",
> +			     pan_var.xoffset, pan_var.yoffset, new_var.xoffset, new_var.yoffset);
> +
> +		/* jump to maximum extend */
> +		pan_var.xoffset = var_info.xres_virtual - var_info.xres;
> +		pan_var.yoffset = var_info.yres_virtual - var_info.yres;
> +		ret = ioctl(fd, FBIOPAN_DISPLAY, &pan_var);
> +		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
> +		ret = ioctl(fd, FBIOGET_VSCREENINFO, &new_var);
> +		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
> +		igt_assert_f(pan_var.xoffset == new_var.xoffset && pan_var.yoffset == new_var.yoffset,
> +			     "panning to (%u, %u) moved to (%u, %u)\n",
> +			     pan_var.xoffset, pan_var.yoffset, new_var.xoffset, new_var.yoffset);
> +
> +		/* return to original offsets for next tests */
> +		ret = ioctl(fd, FBIOPAN_DISPLAY, &var_info);
> +		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
> +
> +		/* jump beyond maximum horizontal extend */
> +		pan_var.xoffset = var_info.xres_virtual - var_info.xres + 1;
> +		pan_var.yoffset = 0;
> +		ret = ioctl(fd, FBIOPAN_DISPLAY, &pan_var);
> +		igt_assert_f(ret == -1, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
> +		ret = ioctl(fd, FBIOGET_VSCREENINFO, &new_var);
> +		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
> +		igt_assert_f(var_info.xoffset == new_var.xoffset && var_info.yoffset == new_var.yoffset,
> +			     "panning to (%u, %u) moved to (%u, %u)\n",
> +			     pan_var.xoffset, pan_var.yoffset, new_var.xoffset, new_var.yoffset);
> +
> +		/* jump beyond maximum vertical extend */
> +		pan_var.xoffset = 0;
> +		pan_var.yoffset = var_info.yres_virtual - var_info.yres + 1;
> +		ret = ioctl(fd, FBIOPAN_DISPLAY, &pan_var);
> +		igt_assert_f(ret == -1, "ioctl(FBIOPAN_DISPLAY), ret=%d\n", ret);
> +		ret = ioctl(fd, FBIOGET_VSCREENINFO, &new_var);
> +		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
> +		igt_assert_f(var_info.xoffset == new_var.xoffset && var_info.yoffset == new_var.yoffset,
> +			     "panning to (%u, %u) moved to (%u, %u)\n",
> +			     pan_var.xoffset, pan_var.yoffset, new_var.xoffset, new_var.yoffset);
> +
> +		/* jump beyond horizontal virtual resolution */
> +		pan_var.xoffset = var_info.xres_virtual;
> +		pan_var.yoffset = 0;
> +		ret = ioctl(fd, FBIOPAN_DISPLAY, &pan_var);
> +		igt_assert_f(ret == -1, "ioctl(FBIOPAN_DISPLAY), ret=%d\n", ret);
> +		ret = ioctl(fd, FBIOGET_VSCREENINFO, &new_var);
> +		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
> +		igt_assert_f(var_info.xoffset == new_var.xoffset && var_info.yoffset == new_var.yoffset,
> +			     "panning to (%u, %u) moved to (%u, %u)\n",
> +			     pan_var.xoffset, pan_var.yoffset, new_var.xoffset, new_var.yoffset);
> +
> +		/* jump beyond vertical virtual resolution */
> +		pan_var.xoffset = 0;
> +		pan_var.yoffset = var_info.yres_virtual;
> +		ret = ioctl(fd, FBIOPAN_DISPLAY, &pan_var);
> +		igt_assert_f(ret == -1, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);

Another YWRAP issue here.

> +		ret = ioctl(fd, FBIOGET_VSCREENINFO, &new_var);
> +		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
> +		igt_assert_f(var_info.xoffset == new_var.xoffset && var_info.yoffset == new_var.yoffset,
> +			     "panning to (%u, %u) moved to (%u, %u)\n",
> +			     pan_var.xoffset, pan_var.yoffset, new_var.xoffset, new_var.yoffset);
> +	}
> +
> +	igt_fixture {
> +		/* restore original panning offsets */
> +		ioctl(fd, FBIOPAN_DISPLAY, &var_info);
> +	}
>  }
>  
>  static void framebuffer_tests(int fd)
> -- 
> 2.33.0

-- 
Ville Syrjälä
Intel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [igt-dev] ✓ Fi.CI.BAT: success for tests/fbdev: Additional tests for resolution and panning
  2021-10-11 14:07 [igt-dev] [PATCH 0/2] tests/fbdev: Additional tests for resolution and panning Thomas Zimmermann
  2021-10-11 14:07 ` [igt-dev] [PATCH 1/2] tests/fbdev: Test for validity of video mode settings Thomas Zimmermann
  2021-10-11 14:07 ` [igt-dev] [PATCH 2/2] tests/fbdev: Add tests for display panning Thomas Zimmermann
@ 2021-10-11 14:43 ` Patchwork
  2 siblings, 0 replies; 8+ messages in thread
From: Patchwork @ 2021-10-11 14:43 UTC (permalink / raw)
  To: Thomas Zimmermann; +Cc: igt-dev

[-- Attachment #1: Type: text/plain, Size: 2780 bytes --]

== Series Details ==

Series: tests/fbdev: Additional tests for resolution and panning
URL   : https://patchwork.freedesktop.org/series/95676/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_10715 -> IGTPW_6307
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6307/index.html

Known issues
------------

  Here are the changes found in IGTPW_6307 that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@amdgpu/amd_cs_nop@sync-fork-compute0:
    - fi-snb-2600:        NOTRUN -> [SKIP][1] ([fdo#109271]) +17 similar issues
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6307/fi-snb-2600/igt@amdgpu/amd_cs_nop@sync-fork-compute0.html

  * igt@gem_exec_suspend@basic-s3:
    - fi-tgl-1115g4:      [PASS][2] -> [FAIL][3] ([i915#1888])
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_10715/fi-tgl-1115g4/igt@gem_exec_suspend@basic-s3.html
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6307/fi-tgl-1115g4/igt@gem_exec_suspend@basic-s3.html

  * igt@kms_frontbuffer_tracking@basic:
    - fi-cml-u2:          [PASS][4] -> [DMESG-WARN][5] ([i915#4269])
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_10715/fi-cml-u2/igt@kms_frontbuffer_tracking@basic.html
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6307/fi-cml-u2/igt@kms_frontbuffer_tracking@basic.html

  
#### Possible fixes ####

  * igt@i915_selftest@live@hangcheck:
    - fi-snb-2600:        [INCOMPLETE][6] ([i915#3921]) -> [PASS][7]
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_10715/fi-snb-2600/igt@i915_selftest@live@hangcheck.html
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6307/fi-snb-2600/igt@i915_selftest@live@hangcheck.html

  
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [i915#1888]: https://gitlab.freedesktop.org/drm/intel/issues/1888
  [i915#3921]: https://gitlab.freedesktop.org/drm/intel/issues/3921
  [i915#4269]: https://gitlab.freedesktop.org/drm/intel/issues/4269


Participating hosts (40 -> 35)
------------------------------

  Missing    (5): fi-kbl-soraka fi-tgl-dsi fi-bsw-cyan fi-kbl-guc fi-ctg-p8600 


Build changes
-------------

  * CI: CI-20190529 -> None
  * IGT: IGT_6242 -> IGTPW_6307

  CI-20190529: 20190529
  CI_DRM_10715: 74b6fd5b34d5fbe3672e864d279654d079e88073 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_6307: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6307/index.html
  IGT_6242: 721fd85ee95225ed5df322f7182bdfa9b86a3e68 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git



== Testlist changes ==

+igt@fbdev@pan

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6307/index.html

[-- Attachment #2: Type: text/html, Size: 3465 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [igt-dev] [PATCH 1/2] tests/fbdev: Test for validity of video mode settings
  2021-10-11 14:20   ` Ville Syrjälä
@ 2021-10-12 14:23     ` Thomas Zimmermann
  0 siblings, 0 replies; 8+ messages in thread
From: Thomas Zimmermann @ 2021-10-12 14:23 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: igt-dev


[-- Attachment #1.1: Type: text/plain, Size: 3693 bytes --]

Hi

Am 11.10.21 um 16:20 schrieb Ville Syrjälä:
> On Mon, Oct 11, 2021 at 04:07:18PM +0200, Thomas Zimmermann wrote:
>> Add basic tests for video mode resolution and color on fbdev
>> devices.
>>
>> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
>> ---
>>   tests/fbdev.c | 43 +++++++++++++++++++++++++++++++++++--------
>>   1 file changed, 35 insertions(+), 8 deletions(-)
>>
>> diff --git a/tests/fbdev.c b/tests/fbdev.c
>> index 443a43dc..c9903f8b 100644
>> --- a/tests/fbdev.c
>> +++ b/tests/fbdev.c
>> @@ -50,14 +50,41 @@ static void mode_tests(int fd)
>>   
>>   	igt_describe("Check if screeninfo is valid");
>>   	igt_subtest("info") {
>> -		unsigned long size;
>> -
>> -		size = var_info.yres * fix_info.line_length;
>> -		igt_assert_f(size <= fix_info.smem_len,
>> -			     "screen size (%d x %d) of pitch %d does not fit within mappable area of size %u\n",
>> -			     var_info.xres, var_info.yres,
>> -			     fix_info.line_length,
>> -			     fix_info.smem_len);
>> +		unsigned long nlines;
>> +
>> +		/* video memory configuration */
>> +		igt_assert_f(fix_info.line_length, "line pitch not set\n");
>> +		igt_assert_f(fix_info.smem_len, "size of video memory not set\n");
>> +		igt_assert_f(fix_info.line_length <= fix_info.smem_len,
>> +			     "line length (%u) exceeds available video memory (%u)\n",
>> +			     fix_info.line_length, fix_info.smem_len);
>> +
>> +		/* color format */
>> +		igt_assert_f(var_info.bits_per_pixel, "bits-per-pixel not set\n");
>> +
>> +		/* horizontal resolution */
>> +		igt_assert_f(var_info.xres, "horizontal resolution not set\n");
>> +		igt_assert_f(var_info.xres_virtual, "horizontal virtual resolution not set\n");
>> +		igt_assert_f(var_info.xres <= var_info.xres_virtual,
>> +			     "horizontal virtual resolution (%u) less than horizontal resolution (%u)\n",
>> +			     var_info.xres_virtual, var_info.xres);
>> +		igt_assert_f(var_info.xoffset <= (var_info.xres_virtual - var_info.xres),
>> +			     "screen horizontal offset (%u) overflow\n",
>> +			     var_info.xoffset);
>> +
>> +		/* vertical resolution */
>> +		igt_assert_f(var_info.yres, "vertical resolution not set\n");
>> +		igt_assert_f(var_info.yres_virtual, "vertical virtual resolution not set\n");
>> +		igt_assert_f(var_info.yres <= var_info.yres_virtual,
>> +			     "vertical virtual resolution (%u) less than vertical resolution (%u)\n",
>> +			     var_info.yres_virtual, var_info.yres);
>> +		igt_assert_f(var_info.yoffset <= (var_info.yres_virtual - var_info.yres),
>> +			     "screen vertical offset (%u) overflow\n",
>> +			     var_info.yoffset);
> 
> YWRAP does allow for that IIRC. So maybe should check that, or maybe we
> don't care about drivers that support it?

Some fbdev drivers and omap_drm seem to support it. I'll add a test for it.

> 
>> +		nlines = fix_info.smem_len / fix_info.line_length;
>> +		igt_assert_f(var_info.yres_virtual <= nlines,
>> +			     "vertical virtual resolution (%u) with pitch %u exceeds available video memory\n",
>> +			     var_info.yres_virtual, fix_info.line_length);
> 
> Maybe add the counterpart for the horizontal direction?

I thought about this, but found that maybe some awkward color format 
might not have a clear relation between resolution and linelength. But 
I'll add a test to check against the bit per line. Hopefully this will work.

Best regards
Thomas

> 
>>   	}
>>   }
>>   
>> -- 
>> 2.33.0
> 

-- 
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Felix Imendörffer

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 840 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [igt-dev] [PATCH 2/2] tests/fbdev: Add tests for display panning
  2021-10-11 14:24   ` Ville Syrjälä
@ 2021-10-12 14:26     ` Thomas Zimmermann
  0 siblings, 0 replies; 8+ messages in thread
From: Thomas Zimmermann @ 2021-10-12 14:26 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: igt-dev


[-- Attachment #1.1: Type: text/plain, Size: 6474 bytes --]

Hi

Am 11.10.21 um 16:24 schrieb Ville Syrjälä:
> On Mon, Oct 11, 2021 at 04:07:19PM +0200, Thomas Zimmermann wrote:
>> Add tests that perform panning / page flip operations on an fbdev
>> device. Panning should work when the viewport wi within the virtual
>> screen and fail otherwise.
>>
>> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
>> ---
>>   tests/fbdev.c | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++
>>   1 file changed, 92 insertions(+)
>>
>> diff --git a/tests/fbdev.c b/tests/fbdev.c
>> index c9903f8b..17727cd0 100644
>> --- a/tests/fbdev.c
>> +++ b/tests/fbdev.c
>> @@ -86,6 +86,98 @@ static void mode_tests(int fd)
>>   			     "vertical virtual resolution (%u) with pitch %u exceeds available video memory\n",
>>   			     var_info.yres_virtual, fix_info.line_length);
>>   	}
>> +
>> +	igt_describe("Check panning / page flipping");
>> +	igt_subtest("pan") {
>> +		struct fb_var_screeninfo pan_var, new_var;
>> +		int ret;
>> +
>> +		/* jump to opposite end of virtual screen */
>> +		pan_var.xoffset = var_info.xres_virtual - var_info.xres - var_info.xoffset;
>> +		pan_var.yoffset = var_info.yres_virtual - var_info.yres - var_info.yoffset;
> 
> Should look at {x,y}panstep probably before assuming this stuff will do exactly
> what you ask it.

Good point. Aligning the offsets should do the job.

> 
>> +		ret = ioctl(fd, FBIOPAN_DISPLAY, &pan_var);
>> +		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
>> +		ret = ioctl(fd, FBIOGET_VSCREENINFO, &new_var);
>> +		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
>> +		igt_assert_f(pan_var.xoffset == new_var.xoffset && pan_var.yoffset == new_var.yoffset,
>> +			     "panning to (%u, %u) moved to (%u, %u)\n",
>> +			     pan_var.xoffset, pan_var.yoffset, new_var.xoffset, new_var.yoffset);
>> +
>> +		/* jump to (0, 0) */
>> +		pan_var.xoffset = 0;
>> +		pan_var.yoffset = 0;
>> +		ret = ioctl(fd, FBIOPAN_DISPLAY, &pan_var);
>> +		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
>> +		ret = ioctl(fd, FBIOGET_VSCREENINFO, &new_var);
>> +		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
>> +		igt_assert_f(pan_var.xoffset == new_var.xoffset && pan_var.yoffset == new_var.yoffset,
>> +			     "panning to (%u, %u) moved to (%u, %u)\n",
>> +			     pan_var.xoffset, pan_var.yoffset, new_var.xoffset, new_var.yoffset);
>> +
>> +		/* jump to maximum extend */
>> +		pan_var.xoffset = var_info.xres_virtual - var_info.xres;
>> +		pan_var.yoffset = var_info.yres_virtual - var_info.yres;
>> +		ret = ioctl(fd, FBIOPAN_DISPLAY, &pan_var);
>> +		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
>> +		ret = ioctl(fd, FBIOGET_VSCREENINFO, &new_var);
>> +		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
>> +		igt_assert_f(pan_var.xoffset == new_var.xoffset && pan_var.yoffset == new_var.yoffset,
>> +			     "panning to (%u, %u) moved to (%u, %u)\n",
>> +			     pan_var.xoffset, pan_var.yoffset, new_var.xoffset, new_var.yoffset);
>> +
>> +		/* return to original offsets for next tests */
>> +		ret = ioctl(fd, FBIOPAN_DISPLAY, &var_info);
>> +		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
>> +
>> +		/* jump beyond maximum horizontal extend */
>> +		pan_var.xoffset = var_info.xres_virtual - var_info.xres + 1;
>> +		pan_var.yoffset = 0;
>> +		ret = ioctl(fd, FBIOPAN_DISPLAY, &pan_var);
>> +		igt_assert_f(ret == -1, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
>> +		ret = ioctl(fd, FBIOGET_VSCREENINFO, &new_var);
>> +		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
>> +		igt_assert_f(var_info.xoffset == new_var.xoffset && var_info.yoffset == new_var.yoffset,
>> +			     "panning to (%u, %u) moved to (%u, %u)\n",
>> +			     pan_var.xoffset, pan_var.yoffset, new_var.xoffset, new_var.yoffset);
>> +
>> +		/* jump beyond maximum vertical extend */
>> +		pan_var.xoffset = 0;
>> +		pan_var.yoffset = var_info.yres_virtual - var_info.yres + 1;
>> +		ret = ioctl(fd, FBIOPAN_DISPLAY, &pan_var);
>> +		igt_assert_f(ret == -1, "ioctl(FBIOPAN_DISPLAY), ret=%d\n", ret);
>> +		ret = ioctl(fd, FBIOGET_VSCREENINFO, &new_var);
>> +		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
>> +		igt_assert_f(var_info.xoffset == new_var.xoffset && var_info.yoffset == new_var.yoffset,
>> +			     "panning to (%u, %u) moved to (%u, %u)\n",
>> +			     pan_var.xoffset, pan_var.yoffset, new_var.xoffset, new_var.yoffset);
>> +
>> +		/* jump beyond horizontal virtual resolution */
>> +		pan_var.xoffset = var_info.xres_virtual;
>> +		pan_var.yoffset = 0;
>> +		ret = ioctl(fd, FBIOPAN_DISPLAY, &pan_var);
>> +		igt_assert_f(ret == -1, "ioctl(FBIOPAN_DISPLAY), ret=%d\n", ret);
>> +		ret = ioctl(fd, FBIOGET_VSCREENINFO, &new_var);
>> +		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
>> +		igt_assert_f(var_info.xoffset == new_var.xoffset && var_info.yoffset == new_var.yoffset,
>> +			     "panning to (%u, %u) moved to (%u, %u)\n",
>> +			     pan_var.xoffset, pan_var.yoffset, new_var.xoffset, new_var.yoffset);
>> +
>> +		/* jump beyond vertical virtual resolution */
>> +		pan_var.xoffset = 0;
>> +		pan_var.yoffset = var_info.yres_virtual;
>> +		ret = ioctl(fd, FBIOPAN_DISPLAY, &pan_var);
>> +		igt_assert_f(ret == -1, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
> 
> Another YWRAP issue here.

Really? It's a flag in var.vmode. I'd expect that we can leave it out 
for the tests to disable the wrap-around.

Best regards
Thomas

> 
>> +		ret = ioctl(fd, FBIOGET_VSCREENINFO, &new_var);
>> +		igt_assert_f(ret == 0, "ioctl(FBIOPAN_DISPLAY) failed, ret=%d\n", ret);
>> +		igt_assert_f(var_info.xoffset == new_var.xoffset && var_info.yoffset == new_var.yoffset,
>> +			     "panning to (%u, %u) moved to (%u, %u)\n",
>> +			     pan_var.xoffset, pan_var.yoffset, new_var.xoffset, new_var.yoffset);
>> +	}
>> +
>> +	igt_fixture {
>> +		/* restore original panning offsets */
>> +		ioctl(fd, FBIOPAN_DISPLAY, &var_info);
>> +	}
>>   }
>>   
>>   static void framebuffer_tests(int fd)
>> -- 
>> 2.33.0
> 

-- 
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Felix Imendörffer

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 840 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2021-10-12 14:26 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-10-11 14:07 [igt-dev] [PATCH 0/2] tests/fbdev: Additional tests for resolution and panning Thomas Zimmermann
2021-10-11 14:07 ` [igt-dev] [PATCH 1/2] tests/fbdev: Test for validity of video mode settings Thomas Zimmermann
2021-10-11 14:20   ` Ville Syrjälä
2021-10-12 14:23     ` Thomas Zimmermann
2021-10-11 14:07 ` [igt-dev] [PATCH 2/2] tests/fbdev: Add tests for display panning Thomas Zimmermann
2021-10-11 14:24   ` Ville Syrjälä
2021-10-12 14:26     ` Thomas Zimmermann
2021-10-11 14:43 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/fbdev: Additional tests for resolution and panning Patchwork

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox