[PATCH v2 2/3] drm/tests: Test drm_fb_build_fourcc_list() in separate test suite

José Expósito jose.exposito89 at gmail.com
Fri Jun 13 14:03:20 UTC 2025


On Thu, Jun 12, 2025 at 03:52:23PM +0200, Thomas Zimmermann wrote:
> Only sysfb drivers use drm_fb_build_fourcc_list(). The helper will
> be moved from format helpers to sysfb helpers. Moving the related
> tests to their own test suite.
> 
> v2:
> - rename filename to match tested code (Maxime)
> 
> Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
> Acked-by: Maxime Ripard <mripard at kernel.org>
> ---
>  drivers/gpu/drm/tests/Makefile                |   3 +-
>  .../gpu/drm/tests/drm_format_helper_test.c    | 142 ---------------
>  .../gpu/drm/tests/drm_sysfb_modeset_test.c    | 166 ++++++++++++++++++
>  3 files changed, 168 insertions(+), 143 deletions(-)
>  create mode 100644 drivers/gpu/drm/tests/drm_sysfb_modeset_test.c
> 
> diff --git a/drivers/gpu/drm/tests/Makefile b/drivers/gpu/drm/tests/Makefile
> index 3afd6587df08..c0e952293ad0 100644
> --- a/drivers/gpu/drm/tests/Makefile
> +++ b/drivers/gpu/drm/tests/Makefile
> @@ -23,6 +23,7 @@ obj-$(CONFIG_DRM_KUNIT_TEST) += \
>  	drm_modes_test.o \
>  	drm_plane_helper_test.o \
>  	drm_probe_helper_test.o \
> -	drm_rect_test.o
> +	drm_rect_test.o \
> +	drm_sysfb_modeset_test.o
>  
>  CFLAGS_drm_mm_test.o := $(DISABLE_STRUCTLEAK_PLUGIN)
> diff --git a/drivers/gpu/drm/tests/drm_format_helper_test.c b/drivers/gpu/drm/tests/drm_format_helper_test.c
> index 8aacc1ffa93a..ef1cc3b28f1b 100644
> --- a/drivers/gpu/drm/tests/drm_format_helper_test.c
> +++ b/drivers/gpu/drm/tests/drm_format_helper_test.c
> @@ -1335,147 +1335,6 @@ static void drm_test_fb_clip_offset(struct kunit *test)
>  	KUNIT_EXPECT_EQ(test, offset, params->expected_offset);
>  }
>  
> -struct fb_build_fourcc_list_case {
> -	const char *name;
> -	u32 native_fourccs[TEST_BUF_SIZE];
> -	size_t native_fourccs_size;
> -	u32 expected[TEST_BUF_SIZE];
> -	size_t expected_fourccs_size;
> -};
> -
> -static struct fb_build_fourcc_list_case fb_build_fourcc_list_cases[] = {
> -	{
> -		.name = "no native formats",
> -		.native_fourccs = { },
> -		.native_fourccs_size = 0,
> -		.expected = { DRM_FORMAT_XRGB8888 },
> -		.expected_fourccs_size = 1,
> -	},
> -	{
> -		.name = "XRGB8888 as native format",
> -		.native_fourccs = { DRM_FORMAT_XRGB8888 },
> -		.native_fourccs_size = 1,
> -		.expected = { DRM_FORMAT_XRGB8888 },
> -		.expected_fourccs_size = 1,
> -	},
> -	{
> -		.name = "remove duplicates",
> -		.native_fourccs = {
> -			DRM_FORMAT_XRGB8888,
> -			DRM_FORMAT_XRGB8888,
> -			DRM_FORMAT_RGB888,
> -			DRM_FORMAT_RGB888,
> -			DRM_FORMAT_RGB888,
> -			DRM_FORMAT_XRGB8888,
> -			DRM_FORMAT_RGB888,
> -			DRM_FORMAT_RGB565,
> -			DRM_FORMAT_RGB888,
> -			DRM_FORMAT_XRGB8888,
> -			DRM_FORMAT_RGB565,
> -			DRM_FORMAT_RGB565,
> -			DRM_FORMAT_XRGB8888,
> -		},
> -		.native_fourccs_size = 11,
> -		.expected = {
> -			DRM_FORMAT_XRGB8888,
> -			DRM_FORMAT_RGB888,
> -			DRM_FORMAT_RGB565,
> -		},
> -		.expected_fourccs_size = 3,
> -	},
> -	{
> -		.name = "convert alpha formats",
> -		.native_fourccs = {
> -			DRM_FORMAT_ARGB1555,
> -			DRM_FORMAT_ABGR1555,
> -			DRM_FORMAT_RGBA5551,
> -			DRM_FORMAT_BGRA5551,
> -			DRM_FORMAT_ARGB8888,
> -			DRM_FORMAT_ABGR8888,
> -			DRM_FORMAT_RGBA8888,
> -			DRM_FORMAT_BGRA8888,
> -			DRM_FORMAT_ARGB2101010,
> -			DRM_FORMAT_ABGR2101010,
> -			DRM_FORMAT_RGBA1010102,
> -			DRM_FORMAT_BGRA1010102,
> -		},
> -		.native_fourccs_size = 12,
> -		.expected = {
> -			DRM_FORMAT_XRGB1555,
> -			DRM_FORMAT_XBGR1555,
> -			DRM_FORMAT_RGBX5551,
> -			DRM_FORMAT_BGRX5551,
> -			DRM_FORMAT_XRGB8888,
> -			DRM_FORMAT_XBGR8888,
> -			DRM_FORMAT_RGBX8888,
> -			DRM_FORMAT_BGRX8888,
> -			DRM_FORMAT_XRGB2101010,
> -			DRM_FORMAT_XBGR2101010,
> -			DRM_FORMAT_RGBX1010102,
> -			DRM_FORMAT_BGRX1010102,
> -		},
> -		.expected_fourccs_size = 12,
> -	},
> -	{
> -		.name = "random formats",
> -		.native_fourccs = {
> -			DRM_FORMAT_Y212,
> -			DRM_FORMAT_ARGB1555,
> -			DRM_FORMAT_ABGR16161616F,
> -			DRM_FORMAT_C8,
> -			DRM_FORMAT_BGR888,
> -			DRM_FORMAT_XRGB1555,
> -			DRM_FORMAT_RGBA5551,
> -			DRM_FORMAT_BGR565_A8,
> -			DRM_FORMAT_R10,
> -			DRM_FORMAT_XYUV8888,
> -		},
> -		.native_fourccs_size = 10,
> -		.expected = {
> -			DRM_FORMAT_Y212,
> -			DRM_FORMAT_XRGB1555,
> -			DRM_FORMAT_ABGR16161616F,
> -			DRM_FORMAT_C8,
> -			DRM_FORMAT_BGR888,
> -			DRM_FORMAT_RGBX5551,
> -			DRM_FORMAT_BGR565_A8,
> -			DRM_FORMAT_R10,
> -			DRM_FORMAT_XYUV8888,
> -			DRM_FORMAT_XRGB8888,
> -		},
> -		.expected_fourccs_size = 10,
> -	},
> -};
> -
> -static void fb_build_fourcc_list_case_desc(struct fb_build_fourcc_list_case *t, char *desc)
> -{
> -	strscpy(desc, t->name, KUNIT_PARAM_DESC_SIZE);
> -}
> -
> -KUNIT_ARRAY_PARAM(fb_build_fourcc_list, fb_build_fourcc_list_cases, fb_build_fourcc_list_case_desc);
> -
> -static void drm_test_fb_build_fourcc_list(struct kunit *test)
> -{
> -	const struct fb_build_fourcc_list_case *params = test->param_value;
> -	u32 fourccs_out[TEST_BUF_SIZE] = {0};
> -	size_t nfourccs_out;
> -	struct drm_device *drm;
> -	struct device *dev;
> -
> -	dev = drm_kunit_helper_alloc_device(test);
> -	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, dev);
> -
> -	drm = __drm_kunit_helper_alloc_drm_device(test, dev, sizeof(*drm), 0, DRIVER_MODESET);
> -	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, drm);
> -
> -	nfourccs_out = drm_fb_build_fourcc_list(drm, params->native_fourccs,
> -						params->native_fourccs_size,
> -						fourccs_out, TEST_BUF_SIZE);
> -
> -	KUNIT_EXPECT_EQ(test, nfourccs_out, params->expected_fourccs_size);
> -	KUNIT_EXPECT_MEMEQ(test, fourccs_out, params->expected, TEST_BUF_SIZE);
> -}
> -
>  struct fb_memcpy_case {
>  	const char *name;
>  	u32 format;
> @@ -1864,7 +1723,6 @@ static struct kunit_case drm_format_helper_test_cases[] = {
>  	KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_xbgr8888, convert_xrgb8888_gen_params),
>  	KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_abgr8888, convert_xrgb8888_gen_params),
>  	KUNIT_CASE_PARAM(drm_test_fb_clip_offset, clip_offset_gen_params),
> -	KUNIT_CASE_PARAM(drm_test_fb_build_fourcc_list, fb_build_fourcc_list_gen_params),
>  	KUNIT_CASE_PARAM(drm_test_fb_memcpy, fb_memcpy_gen_params),
>  	{}
>  };
> diff --git a/drivers/gpu/drm/tests/drm_sysfb_modeset_test.c b/drivers/gpu/drm/tests/drm_sysfb_modeset_test.c
> new file mode 100644
> index 000000000000..88a4bf28c745
> --- /dev/null
> +++ b/drivers/gpu/drm/tests/drm_sysfb_modeset_test.c
> @@ -0,0 +1,166 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +
> +#include <kunit/test.h>
> +
> +#include <drm/drm_format_helper.h>
> +#include <drm/drm_fourcc.h>
> +#include <drm/drm_kunit_helpers.h>
> +
> +#define TEST_BUF_SIZE 50
> +
> +struct fb_build_fourcc_list_case {
> +	const char *name;
> +	u32 native_fourccs[TEST_BUF_SIZE];
> +	size_t native_fourccs_size;
> +	u32 expected[TEST_BUF_SIZE];
> +	size_t expected_fourccs_size;
> +};
> +
> +static struct fb_build_fourcc_list_case fb_build_fourcc_list_cases[] = {
> +	{
> +		.name = "no native formats",
> +		.native_fourccs = { },
> +		.native_fourccs_size = 0,
> +		.expected = { DRM_FORMAT_XRGB8888 },
> +		.expected_fourccs_size = 1,
> +	},
> +	{
> +		.name = "XRGB8888 as native format",
> +		.native_fourccs = { DRM_FORMAT_XRGB8888 },
> +		.native_fourccs_size = 1,
> +		.expected = { DRM_FORMAT_XRGB8888 },
> +		.expected_fourccs_size = 1,
> +	},
> +	{
> +		.name = "remove duplicates",
> +		.native_fourccs = {
> +			DRM_FORMAT_XRGB8888,
> +			DRM_FORMAT_XRGB8888,
> +			DRM_FORMAT_RGB888,
> +			DRM_FORMAT_RGB888,
> +			DRM_FORMAT_RGB888,
> +			DRM_FORMAT_XRGB8888,
> +			DRM_FORMAT_RGB888,
> +			DRM_FORMAT_RGB565,
> +			DRM_FORMAT_RGB888,
> +			DRM_FORMAT_XRGB8888,
> +			DRM_FORMAT_RGB565,
> +			DRM_FORMAT_RGB565,
> +			DRM_FORMAT_XRGB8888,
> +		},
> +		.native_fourccs_size = 11,
> +		.expected = {
> +			DRM_FORMAT_XRGB8888,
> +			DRM_FORMAT_RGB888,
> +			DRM_FORMAT_RGB565,
> +		},
> +		.expected_fourccs_size = 3,
> +	},
> +	{
> +		.name = "convert alpha formats",
> +		.native_fourccs = {
> +			DRM_FORMAT_ARGB1555,
> +			DRM_FORMAT_ABGR1555,
> +			DRM_FORMAT_RGBA5551,
> +			DRM_FORMAT_BGRA5551,
> +			DRM_FORMAT_ARGB8888,
> +			DRM_FORMAT_ABGR8888,
> +			DRM_FORMAT_RGBA8888,
> +			DRM_FORMAT_BGRA8888,
> +			DRM_FORMAT_ARGB2101010,
> +			DRM_FORMAT_ABGR2101010,
> +			DRM_FORMAT_RGBA1010102,
> +			DRM_FORMAT_BGRA1010102,
> +		},
> +		.native_fourccs_size = 12,
> +		.expected = {
> +			DRM_FORMAT_XRGB1555,
> +			DRM_FORMAT_XBGR1555,
> +			DRM_FORMAT_RGBX5551,
> +			DRM_FORMAT_BGRX5551,
> +			DRM_FORMAT_XRGB8888,
> +			DRM_FORMAT_XBGR8888,
> +			DRM_FORMAT_RGBX8888,
> +			DRM_FORMAT_BGRX8888,
> +			DRM_FORMAT_XRGB2101010,
> +			DRM_FORMAT_XBGR2101010,
> +			DRM_FORMAT_RGBX1010102,
> +			DRM_FORMAT_BGRX1010102,
> +		},
> +		.expected_fourccs_size = 12,
> +	},
> +	{
> +		.name = "random formats",
> +		.native_fourccs = {
> +			DRM_FORMAT_Y212,
> +			DRM_FORMAT_ARGB1555,
> +			DRM_FORMAT_ABGR16161616F,
> +			DRM_FORMAT_C8,
> +			DRM_FORMAT_BGR888,
> +			DRM_FORMAT_XRGB1555,
> +			DRM_FORMAT_RGBA5551,
> +			DRM_FORMAT_BGR565_A8,
> +			DRM_FORMAT_R10,
> +			DRM_FORMAT_XYUV8888,
> +		},
> +		.native_fourccs_size = 10,
> +		.expected = {
> +			DRM_FORMAT_Y212,
> +			DRM_FORMAT_XRGB1555,
> +			DRM_FORMAT_ABGR16161616F,
> +			DRM_FORMAT_C8,
> +			DRM_FORMAT_BGR888,
> +			DRM_FORMAT_RGBX5551,
> +			DRM_FORMAT_BGR565_A8,
> +			DRM_FORMAT_R10,
> +			DRM_FORMAT_XYUV8888,
> +			DRM_FORMAT_XRGB8888,
> +		},
> +		.expected_fourccs_size = 10,
> +	},
> +};
> +
> +static void fb_build_fourcc_list_case_desc(struct fb_build_fourcc_list_case *t, char *desc)
> +{
> +	strscpy(desc, t->name, KUNIT_PARAM_DESC_SIZE);
> +}
> +
> +KUNIT_ARRAY_PARAM(fb_build_fourcc_list, fb_build_fourcc_list_cases, fb_build_fourcc_list_case_desc);
> +
> +static void drm_test_fb_build_fourcc_list(struct kunit *test)
> +{
> +	const struct fb_build_fourcc_list_case *params = test->param_value;
> +	u32 fourccs_out[TEST_BUF_SIZE] = {0};
> +	size_t nfourccs_out;
> +	struct drm_device *drm;
> +	struct device *dev;
> +
> +	dev = drm_kunit_helper_alloc_device(test);
> +	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, dev);
> +
> +	drm = __drm_kunit_helper_alloc_drm_device(test, dev, sizeof(*drm), 0, DRIVER_MODESET);
> +	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, drm);
> +
> +	nfourccs_out = drm_fb_build_fourcc_list(drm, params->native_fourccs,
> +						params->native_fourccs_size,
> +						fourccs_out, TEST_BUF_SIZE);
> +
> +	KUNIT_EXPECT_EQ(test, nfourccs_out, params->expected_fourccs_size);
> +	KUNIT_EXPECT_MEMEQ(test, fourccs_out, params->expected, TEST_BUF_SIZE);
> +}
> +
> +static struct kunit_case drm_sysfb_helper_test_cases[] = {
> +	KUNIT_CASE_PARAM(drm_test_fb_build_fourcc_list, fb_build_fourcc_list_gen_params),
> +	{}
> +};
> +
> +static struct kunit_suite drm_sysfb_helper_test_suite = {
> +	.name = "drm_sysfb_helper_test",

Other tests use the same name as the file live in, dropping or not
the "_test" suffix.

Is this a missing change from the rename in v1?

Other than that:

Reviewed-by: José Expósito <jose.exposito89 at gmail.com>

> +	.test_cases = drm_sysfb_helper_test_cases,
> +};
> +
> +kunit_test_suite(drm_sysfb_helper_test_suite);
> +
> +MODULE_DESCRIPTION("KUnit tests for the drm_sysfb_helper APIs");
> +MODULE_LICENSE("GPL");
> +MODULE_AUTHOR("José Expósito <jose.exposito89 at gmail.com>");
> -- 
> 2.49.0
> 


More information about the dri-devel mailing list