File Index
Files and directories
Sign in
FILE

drm_sysfb_modeset_test.c

File preview with syntax highlighting.

linux-6.19.14/drivers/gpu/drm/tests/drm_sysfb_modeset_test.c C
  1// SPDX-License-Identifier: GPL-2.0+
  2
  3#include <kunit/test.h>
  4
  5#include <drm/drm_fourcc.h>
  6#include <drm/drm_kunit_helpers.h>
  7
  8#include "../sysfb/drm_sysfb_helper.h"
  9
 10#define TEST_BUF_SIZE 50
 11
 12struct sysfb_build_fourcc_list_case {
 13	const char *name;
 14	u32 native_fourccs[TEST_BUF_SIZE];
 15	size_t native_fourccs_size;
 16	u32 expected[TEST_BUF_SIZE];
 17	size_t expected_fourccs_size;
 18};
 19
 20static struct sysfb_build_fourcc_list_case sysfb_build_fourcc_list_cases[] = {
 21	{
 22		.name = "no native formats",
 23		.native_fourccs = { },
 24		.native_fourccs_size = 0,
 25		.expected = { DRM_FORMAT_XRGB8888 },
 26		.expected_fourccs_size = 1,
 27	},
 28	{
 29		.name = "XRGB8888 as native format",
 30		.native_fourccs = { DRM_FORMAT_XRGB8888 },
 31		.native_fourccs_size = 1,
 32		.expected = { DRM_FORMAT_XRGB8888 },
 33		.expected_fourccs_size = 1,
 34	},
 35	{
 36		.name = "remove duplicates",
 37		.native_fourccs = {
 38			DRM_FORMAT_XRGB8888,
 39			DRM_FORMAT_XRGB8888,
 40			DRM_FORMAT_RGB888,
 41			DRM_FORMAT_RGB888,
 42			DRM_FORMAT_RGB888,
 43			DRM_FORMAT_XRGB8888,
 44			DRM_FORMAT_RGB888,
 45			DRM_FORMAT_RGB565,
 46			DRM_FORMAT_RGB888,
 47			DRM_FORMAT_XRGB8888,
 48			DRM_FORMAT_RGB565,
 49			DRM_FORMAT_RGB565,
 50			DRM_FORMAT_XRGB8888,
 51		},
 52		.native_fourccs_size = 11,
 53		.expected = {
 54			DRM_FORMAT_XRGB8888,
 55			DRM_FORMAT_RGB888,
 56			DRM_FORMAT_RGB565,
 57		},
 58		.expected_fourccs_size = 3,
 59	},
 60	{
 61		.name = "convert alpha formats",
 62		.native_fourccs = {
 63			DRM_FORMAT_ARGB1555,
 64			DRM_FORMAT_ABGR1555,
 65			DRM_FORMAT_RGBA5551,
 66			DRM_FORMAT_BGRA5551,
 67			DRM_FORMAT_ARGB8888,
 68			DRM_FORMAT_ABGR8888,
 69			DRM_FORMAT_RGBA8888,
 70			DRM_FORMAT_BGRA8888,
 71			DRM_FORMAT_ARGB2101010,
 72			DRM_FORMAT_ABGR2101010,
 73			DRM_FORMAT_RGBA1010102,
 74			DRM_FORMAT_BGRA1010102,
 75		},
 76		.native_fourccs_size = 12,
 77		.expected = {
 78			DRM_FORMAT_XRGB1555,
 79			DRM_FORMAT_XBGR1555,
 80			DRM_FORMAT_RGBX5551,
 81			DRM_FORMAT_BGRX5551,
 82			DRM_FORMAT_XRGB8888,
 83			DRM_FORMAT_XBGR8888,
 84			DRM_FORMAT_RGBX8888,
 85			DRM_FORMAT_BGRX8888,
 86			DRM_FORMAT_XRGB2101010,
 87			DRM_FORMAT_XBGR2101010,
 88			DRM_FORMAT_RGBX1010102,
 89			DRM_FORMAT_BGRX1010102,
 90		},
 91		.expected_fourccs_size = 12,
 92	},
 93	{
 94		.name = "random formats",
 95		.native_fourccs = {
 96			DRM_FORMAT_Y212,
 97			DRM_FORMAT_ARGB1555,
 98			DRM_FORMAT_ABGR16161616F,
 99			DRM_FORMAT_C8,
100			DRM_FORMAT_BGR888,
101			DRM_FORMAT_XRGB1555,
102			DRM_FORMAT_RGBA5551,
103			DRM_FORMAT_BGR565_A8,
104			DRM_FORMAT_R10,
105			DRM_FORMAT_XYUV8888,
106		},
107		.native_fourccs_size = 10,
108		.expected = {
109			DRM_FORMAT_Y212,
110			DRM_FORMAT_XRGB1555,
111			DRM_FORMAT_ABGR16161616F,
112			DRM_FORMAT_C8,
113			DRM_FORMAT_BGR888,
114			DRM_FORMAT_RGBX5551,
115			DRM_FORMAT_BGR565_A8,
116			DRM_FORMAT_R10,
117			DRM_FORMAT_XYUV8888,
118			DRM_FORMAT_XRGB8888,
119		},
120		.expected_fourccs_size = 10,
121	},
122};
123
124static void sysfb_build_fourcc_list_case_desc(struct sysfb_build_fourcc_list_case *t, char *desc)
125{
126	strscpy(desc, t->name, KUNIT_PARAM_DESC_SIZE);
127}
128
129KUNIT_ARRAY_PARAM(sysfb_build_fourcc_list, sysfb_build_fourcc_list_cases,
130		  sysfb_build_fourcc_list_case_desc);
131
132static void drm_test_sysfb_build_fourcc_list(struct kunit *test)
133{
134	const struct sysfb_build_fourcc_list_case *params = test->param_value;
135	u32 fourccs_out[TEST_BUF_SIZE] = {0};
136	size_t nfourccs_out;
137	struct drm_device *drm;
138	struct device *dev;
139
140	dev = drm_kunit_helper_alloc_device(test);
141	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, dev);
142
143	drm = __drm_kunit_helper_alloc_drm_device(test, dev, sizeof(*drm), 0, DRIVER_MODESET);
144	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, drm);
145
146	nfourccs_out = drm_sysfb_build_fourcc_list(drm, params->native_fourccs,
147						   params->native_fourccs_size,
148						   fourccs_out, TEST_BUF_SIZE);
149
150	KUNIT_EXPECT_EQ(test, nfourccs_out, params->expected_fourccs_size);
151	KUNIT_EXPECT_MEMEQ(test, fourccs_out, params->expected, TEST_BUF_SIZE);
152}
153
154static struct kunit_case drm_sysfb_modeset_test_cases[] = {
155	KUNIT_CASE_PARAM(drm_test_sysfb_build_fourcc_list, sysfb_build_fourcc_list_gen_params),
156	{}
157};
158
159static struct kunit_suite drm_sysfb_modeset_test_suite = {
160	.name = "drm_sysfb_modeset_test",
161	.test_cases = drm_sysfb_modeset_test_cases,
162};
163
164kunit_test_suite(drm_sysfb_modeset_test_suite);
165
166MODULE_DESCRIPTION("KUnit tests for the drm_sysfb_modeset APIs");
167MODULE_LICENSE("GPL");
168MODULE_AUTHOR("José Expósito <jose.exposito89@gmail.com>");
~/ Read-only file preview.