diff options
Diffstat (limited to 'drivers/gpu/drm/tests')
| -rw-r--r-- | drivers/gpu/drm/tests/Makefile | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/tests/drm_format_helper_test.c | 384 | ||||
| -rw-r--r-- | drivers/gpu/drm/tests/drm_mm_test.c | 6 | 
3 files changed, 373 insertions, 19 deletions
| diff --git a/drivers/gpu/drm/tests/Makefile b/drivers/gpu/drm/tests/Makefile index aaf357e29c65..bca726a8f483 100644 --- a/drivers/gpu/drm/tests/Makefile +++ b/drivers/gpu/drm/tests/Makefile @@ -18,3 +18,5 @@ obj-$(CONFIG_DRM_KUNIT_TEST) += \  	drm_plane_helper_test.o \  	drm_probe_helper_test.o \  	drm_rect_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 567c71f95edc..34e80eb6d96e 100644 --- a/drivers/gpu/drm/tests/drm_format_helper_test.c +++ b/drivers/gpu/drm/tests/drm_format_helper_test.c @@ -32,16 +32,41 @@ struct convert_to_rgb565_result {  	const u16 expected_swab[TEST_BUF_SIZE];  }; +struct convert_to_xrgb1555_result { +	unsigned int dst_pitch; +	const u16 expected[TEST_BUF_SIZE]; +}; + +struct convert_to_argb1555_result { +	unsigned int dst_pitch; +	const u16 expected[TEST_BUF_SIZE]; +}; + +struct convert_to_rgba5551_result { +	unsigned int dst_pitch; +	const u16 expected[TEST_BUF_SIZE]; +}; +  struct convert_to_rgb888_result {  	unsigned int dst_pitch;  	const u8 expected[TEST_BUF_SIZE];  }; +struct convert_to_argb8888_result { +	unsigned int dst_pitch; +	const u32 expected[TEST_BUF_SIZE]; +}; +  struct convert_to_xrgb2101010_result {  	unsigned int dst_pitch;  	const u32 expected[TEST_BUF_SIZE];  }; +struct convert_to_argb2101010_result { +	unsigned int dst_pitch; +	const u32 expected[TEST_BUF_SIZE]; +}; +  struct convert_xrgb8888_case {  	const char *name;  	unsigned int pitch; @@ -50,8 +75,13 @@ struct convert_xrgb8888_case {  	struct convert_to_gray8_result gray8_result;  	struct convert_to_rgb332_result rgb332_result;  	struct convert_to_rgb565_result rgb565_result; +	struct convert_to_xrgb1555_result xrgb1555_result; +	struct convert_to_argb1555_result argb1555_result; +	struct convert_to_rgba5551_result rgba5551_result;  	struct convert_to_rgb888_result rgb888_result; +	struct convert_to_argb8888_result argb8888_result;  	struct convert_to_xrgb2101010_result xrgb2101010_result; +	struct convert_to_argb2101010_result argb2101010_result;  };  static struct convert_xrgb8888_case convert_xrgb8888_cases[] = { @@ -73,14 +103,34 @@ static struct convert_xrgb8888_case convert_xrgb8888_cases[] = {  			.expected = { 0xF800 },  			.expected_swab = { 0x00F8 },  		}, +		.xrgb1555_result = { +			.dst_pitch = 0, +			.expected = { 0x7C00 }, +		}, +		.argb1555_result = { +			.dst_pitch = 0, +			.expected = { 0xFC00 }, +		}, +		.rgba5551_result = { +			.dst_pitch = 0, +			.expected = { 0xF801 }, +		},  		.rgb888_result = {  			.dst_pitch = 0,  			.expected = { 0x00, 0x00, 0xFF },  		}, +		.argb8888_result = { +			.dst_pitch = 0, +			.expected = { 0xFFFF0000 }, +		},  		.xrgb2101010_result = {  			.dst_pitch = 0,  			.expected = { 0x3FF00000 },  		}, +		.argb2101010_result = { +			.dst_pitch = 0, +			.expected = { 0xFFF00000 }, +		},  	},  	{  		.name = "single_pixel_clip_rectangle", @@ -103,14 +153,34 @@ static struct convert_xrgb8888_case convert_xrgb8888_cases[] = {  			.expected = { 0xF800 },  			.expected_swab = { 0x00F8 },  		}, +		.xrgb1555_result = { +			.dst_pitch = 0, +			.expected = { 0x7C00 }, +		}, +		.argb1555_result = { +			.dst_pitch = 0, +			.expected = { 0xFC00 }, +		}, +		.rgba5551_result = { +			.dst_pitch = 0, +			.expected = { 0xF801 }, +		},  		.rgb888_result = {  			.dst_pitch = 0,  			.expected = { 0x00, 0x00, 0xFF },  		}, +		.argb8888_result = { +			.dst_pitch = 0, +			.expected = { 0xFFFF0000 }, +		},  		.xrgb2101010_result = {  			.dst_pitch = 0,  			.expected = { 0x3FF00000 },  		}, +		.argb2101010_result = { +			.dst_pitch = 0, +			.expected = { 0xFFF00000 }, +		},  	},  	{  		/* Well known colors: White, black, red, green, blue, magenta, @@ -160,6 +230,33 @@ static struct convert_xrgb8888_case convert_xrgb8888_cases[] = {  				0xE0FF, 0xFF07,  			},  		}, +		.xrgb1555_result = { +			.dst_pitch = 0, +			.expected = { +				0x7FFF, 0x0000, +				0x7C00, 0x03E0, +				0x001F, 0x7C1F, +				0x7FE0, 0x03FF, +			}, +		}, +		.argb1555_result = { +			.dst_pitch = 0, +			.expected = { +				0xFFFF, 0x8000, +				0xFC00, 0x83E0, +				0x801F, 0xFC1F, +				0xFFE0, 0x83FF, +			}, +		}, +		.rgba5551_result = { +			.dst_pitch = 0, +			.expected = { +				0xFFFF, 0x0001, +				0xF801, 0x07C1, +				0x003F, 0xF83F, +				0xFFC1, 0x07FF, +			}, +		},  		.rgb888_result = {  			.dst_pitch = 0,  			.expected = { @@ -169,6 +266,15 @@ static struct convert_xrgb8888_case convert_xrgb8888_cases[] = {  				0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,  			},  		}, +		.argb8888_result = { +			.dst_pitch = 0, +			.expected = { +				0xFFFFFFFF, 0xFF000000, +				0xFFFF0000, 0xFF00FF00, +				0xFF0000FF, 0xFFFF00FF, +				0xFFFFFF00, 0xFF00FFFF, +			}, +		},  		.xrgb2101010_result = {  			.dst_pitch = 0,  			.expected = { @@ -178,6 +284,15 @@ static struct convert_xrgb8888_case convert_xrgb8888_cases[] = {  				0x3FFFFC00, 0x000FFFFF,  			},  		}, +		.argb2101010_result = { +			.dst_pitch = 0, +			.expected = { +				0xFFFFFFFF, 0xC0000000, +				0xFFF00000, 0xC00FFC00, +				0xC00003FF, 0xFFF003FF, +				0xFFFFFC00, 0xC00FFFFF, +			}, +		},  	},  	{  		/* Randomly picked colors. Full buffer within the clip area. */ @@ -218,6 +333,30 @@ static struct convert_xrgb8888_case convert_xrgb8888_cases[] = {  				0x00A8, 0x8E6B, 0x330A, 0x0000, 0x0000,  			},  		}, +		.xrgb1555_result = { +			.dst_pitch = 10, +			.expected = { +				0x0513, 0x0920, 0x5400, 0x0000, 0x0000, +				0x35CE, 0x0513, 0x0920, 0x0000, 0x0000, +				0x5400, 0x35CE, 0x0513, 0x0000, 0x0000, +			}, +		}, +		.argb1555_result = { +			.dst_pitch = 10, +			.expected = { +				0x8513, 0x8920, 0xD400, 0x0000, 0x0000, +				0xB5CE, 0x8513, 0x8920, 0x0000, 0x0000, +				0xD400, 0xB5CE, 0x8513, 0x0000, 0x0000, +			}, +		}, +		.rgba5551_result = { +			.dst_pitch = 10, +			.expected = { +				0x0A27, 0x1241, 0xA801, 0x0000, 0x0000, +				0x6B9D, 0x0A27, 0x1241, 0x0000, 0x0000, +				0xA801, 0x6B9D, 0x0A27, 0x0000, 0x0000, +			}, +		},  		.rgb888_result = {  			.dst_pitch = 15,  			.expected = { @@ -229,6 +368,14 @@ static struct convert_xrgb8888_case convert_xrgb8888_cases[] = {  				0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  			},  		}, +		.argb8888_result = { +			.dst_pitch = 20, +			.expected = { +				0xFF0E449C, 0xFF114D05, 0xFFA80303, 0x00000000, 0x00000000, +				0xFF6C7073, 0xFF0E449C, 0xFF114D05, 0x00000000, 0x00000000, +				0xFFA80303, 0xFF6C7073, 0xFF0E449C, 0x00000000, 0x00000000, +			}, +		},  		.xrgb2101010_result = {  			.dst_pitch = 20,  			.expected = { @@ -237,6 +384,14 @@ static struct convert_xrgb8888_case convert_xrgb8888_cases[] = {  				0x2A20300C, 0x1B1705CD, 0x03844672, 0x00000000, 0x00000000,  			},  		}, +		.argb2101010_result = { +			.dst_pitch = 20, +			.expected = { +				0xC3844672, 0xC444D414, 0xEA20300C, 0x00000000, 0x00000000, +				0xDB1705CD, 0xC3844672, 0xC444D414, 0x00000000, 0x00000000, +				0xEA20300C, 0xDB1705CD, 0xC3844672, 0x00000000, 0x00000000, +			}, +		},  	},  }; @@ -264,7 +419,22 @@ static size_t conversion_buf_size(u32 dst_format, unsigned int dst_pitch,  	return dst_pitch * drm_rect_height(clip);  } -static u32 *le32buf_to_cpu(struct kunit *test, const u32 *buf, size_t buf_size) +static u16 *le16buf_to_cpu(struct kunit *test, const __le16 *buf, size_t buf_size) +{ +	u16 *dst = NULL; +	int n; + +	dst = kunit_kzalloc(test, sizeof(*dst) * buf_size, GFP_KERNEL); +	if (!dst) +		return NULL; + +	for (n = 0; n < buf_size; n++) +		dst[n] = le16_to_cpu(buf[n]); + +	return dst; +} + +static u32 *le32buf_to_cpu(struct kunit *test, const __le32 *buf, size_t buf_size)  {  	u32 *dst = NULL;  	int n; @@ -279,6 +449,21 @@ static u32 *le32buf_to_cpu(struct kunit *test, const u32 *buf, size_t buf_size)  	return dst;  } +static __le32 *cpubuf_to_le32(struct kunit *test, const u32 *buf, size_t buf_size) +{ +	__le32 *dst = NULL; +	int n; + +	dst = kunit_kzalloc(test, sizeof(*dst) * buf_size, GFP_KERNEL); +	if (!dst) +		return NULL; + +	for (n = 0; n < buf_size; n++) +		dst[n] = cpu_to_le32(buf[n]); + +	return dst; +} +  static void convert_xrgb8888_case_desc(struct convert_xrgb8888_case *t,  				       char *desc)  { @@ -293,8 +478,8 @@ static void drm_test_fb_xrgb8888_to_gray8(struct kunit *test)  	const struct convert_xrgb8888_case *params = test->param_value;  	const struct convert_to_gray8_result *result = ¶ms->gray8_result;  	size_t dst_size; -	__u8 *buf = NULL; -	__u32 *xrgb8888 = NULL; +	u8 *buf = NULL; +	__le32 *xrgb8888 = NULL;  	struct iosys_map dst, src;  	struct drm_framebuffer fb = { @@ -310,7 +495,7 @@ static void drm_test_fb_xrgb8888_to_gray8(struct kunit *test)  	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf);  	iosys_map_set_vaddr(&dst, buf); -	xrgb8888 = le32buf_to_cpu(test, params->xrgb8888, TEST_BUF_SIZE); +	xrgb8888 = cpubuf_to_le32(test, params->xrgb8888, TEST_BUF_SIZE);  	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, xrgb8888);  	iosys_map_set_vaddr(&src, xrgb8888); @@ -323,8 +508,8 @@ static void drm_test_fb_xrgb8888_to_rgb332(struct kunit *test)  	const struct convert_xrgb8888_case *params = test->param_value;  	const struct convert_to_rgb332_result *result = ¶ms->rgb332_result;  	size_t dst_size; -	__u8 *buf = NULL; -	__u32 *xrgb8888 = NULL; +	u8 *buf = NULL; +	__le32 *xrgb8888 = NULL;  	struct iosys_map dst, src;  	struct drm_framebuffer fb = { @@ -340,7 +525,7 @@ static void drm_test_fb_xrgb8888_to_rgb332(struct kunit *test)  	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf);  	iosys_map_set_vaddr(&dst, buf); -	xrgb8888 = le32buf_to_cpu(test, params->xrgb8888, TEST_BUF_SIZE); +	xrgb8888 = cpubuf_to_le32(test, params->xrgb8888, TEST_BUF_SIZE);  	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, xrgb8888);  	iosys_map_set_vaddr(&src, xrgb8888); @@ -353,8 +538,8 @@ static void drm_test_fb_xrgb8888_to_rgb565(struct kunit *test)  	const struct convert_xrgb8888_case *params = test->param_value;  	const struct convert_to_rgb565_result *result = ¶ms->rgb565_result;  	size_t dst_size; -	__u16 *buf = NULL; -	__u32 *xrgb8888 = NULL; +	u16 *buf = NULL; +	__le32 *xrgb8888 = NULL;  	struct iosys_map dst, src;  	struct drm_framebuffer fb = { @@ -370,24 +555,120 @@ static void drm_test_fb_xrgb8888_to_rgb565(struct kunit *test)  	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf);  	iosys_map_set_vaddr(&dst, buf); -	xrgb8888 = le32buf_to_cpu(test, params->xrgb8888, TEST_BUF_SIZE); +	xrgb8888 = cpubuf_to_le32(test, params->xrgb8888, TEST_BUF_SIZE);  	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, xrgb8888);  	iosys_map_set_vaddr(&src, xrgb8888);  	drm_fb_xrgb8888_to_rgb565(&dst, &result->dst_pitch, &src, &fb, ¶ms->clip, false); +	buf = le16buf_to_cpu(test, (__force const __le16 *)buf, dst_size / sizeof(__le16));  	KUNIT_EXPECT_MEMEQ(test, buf, result->expected, dst_size); +	buf = dst.vaddr; /* restore original value of buf */  	drm_fb_xrgb8888_to_rgb565(&dst, &result->dst_pitch, &src, &fb, ¶ms->clip, true); +	buf = le16buf_to_cpu(test, (__force const __le16 *)buf, dst_size / sizeof(__le16));  	KUNIT_EXPECT_MEMEQ(test, buf, result->expected_swab, dst_size);  } +static void drm_test_fb_xrgb8888_to_xrgb1555(struct kunit *test) +{ +	const struct convert_xrgb8888_case *params = test->param_value; +	const struct convert_to_xrgb1555_result *result = ¶ms->xrgb1555_result; +	size_t dst_size; +	u16 *buf = NULL; +	__le32 *xrgb8888 = NULL; +	struct iosys_map dst, src; + +	struct drm_framebuffer fb = { +		.format = drm_format_info(DRM_FORMAT_XRGB8888), +		.pitches = { params->pitch, 0, 0 }, +	}; + +	dst_size = conversion_buf_size(DRM_FORMAT_XRGB1555, result->dst_pitch, +				       ¶ms->clip); +	KUNIT_ASSERT_GT(test, dst_size, 0); + +	buf = kunit_kzalloc(test, dst_size, GFP_KERNEL); +	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf); +	iosys_map_set_vaddr(&dst, buf); + +	xrgb8888 = cpubuf_to_le32(test, params->xrgb8888, TEST_BUF_SIZE); +	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, xrgb8888); +	iosys_map_set_vaddr(&src, xrgb8888); + +	drm_fb_xrgb8888_to_xrgb1555(&dst, &result->dst_pitch, &src, &fb, ¶ms->clip); +	buf = le16buf_to_cpu(test, (__force const __le16 *)buf, dst_size / sizeof(__le16)); +	KUNIT_EXPECT_EQ(test, memcmp(buf, result->expected, dst_size), 0); +} + +static void drm_test_fb_xrgb8888_to_argb1555(struct kunit *test) +{ +	const struct convert_xrgb8888_case *params = test->param_value; +	const struct convert_to_argb1555_result *result = ¶ms->argb1555_result; +	size_t dst_size; +	u16 *buf = NULL; +	__le32 *xrgb8888 = NULL; +	struct iosys_map dst, src; + +	struct drm_framebuffer fb = { +		.format = drm_format_info(DRM_FORMAT_XRGB8888), +		.pitches = { params->pitch, 0, 0 }, +	}; + +	dst_size = conversion_buf_size(DRM_FORMAT_ARGB1555, result->dst_pitch, +				       ¶ms->clip); +	KUNIT_ASSERT_GT(test, dst_size, 0); + +	buf = kunit_kzalloc(test, dst_size, GFP_KERNEL); +	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf); +	iosys_map_set_vaddr(&dst, buf); + +	xrgb8888 = cpubuf_to_le32(test, params->xrgb8888, TEST_BUF_SIZE); +	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, xrgb8888); +	iosys_map_set_vaddr(&src, xrgb8888); + +	drm_fb_xrgb8888_to_argb1555(&dst, &result->dst_pitch, &src, &fb, ¶ms->clip); +	buf = le16buf_to_cpu(test, (__force const __le16 *)buf, dst_size / sizeof(__le16)); +	KUNIT_EXPECT_EQ(test, memcmp(buf, result->expected, dst_size), 0); +} + +static void drm_test_fb_xrgb8888_to_rgba5551(struct kunit *test) +{ +	const struct convert_xrgb8888_case *params = test->param_value; +	const struct convert_to_rgba5551_result *result = ¶ms->rgba5551_result; +	size_t dst_size; +	u16 *buf = NULL; +	__le32 *xrgb8888 = NULL; +	struct iosys_map dst, src; + +	struct drm_framebuffer fb = { +		.format = drm_format_info(DRM_FORMAT_XRGB8888), +		.pitches = { params->pitch, 0, 0 }, +	}; + +	dst_size = conversion_buf_size(DRM_FORMAT_RGBA5551, result->dst_pitch, +				       ¶ms->clip); +	KUNIT_ASSERT_GT(test, dst_size, 0); + +	buf = kunit_kzalloc(test, dst_size, GFP_KERNEL); +	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf); +	iosys_map_set_vaddr(&dst, buf); + +	xrgb8888 = cpubuf_to_le32(test, params->xrgb8888, TEST_BUF_SIZE); +	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, xrgb8888); +	iosys_map_set_vaddr(&src, xrgb8888); + +	drm_fb_xrgb8888_to_rgba5551(&dst, &result->dst_pitch, &src, &fb, ¶ms->clip); +	buf = le16buf_to_cpu(test, (__force const __le16 *)buf, dst_size / sizeof(__le16)); +	KUNIT_EXPECT_EQ(test, memcmp(buf, result->expected, dst_size), 0); +} +  static void drm_test_fb_xrgb8888_to_rgb888(struct kunit *test)  {  	const struct convert_xrgb8888_case *params = test->param_value;  	const struct convert_to_rgb888_result *result = ¶ms->rgb888_result;  	size_t dst_size; -	__u8 *buf = NULL; -	__u32 *xrgb8888 = NULL; +	u8 *buf = NULL; +	__le32 *xrgb8888 = NULL;  	struct iosys_map dst, src;  	struct drm_framebuffer fb = { @@ -403,21 +684,56 @@ static void drm_test_fb_xrgb8888_to_rgb888(struct kunit *test)  	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf);  	iosys_map_set_vaddr(&dst, buf); -	xrgb8888 = le32buf_to_cpu(test, params->xrgb8888, TEST_BUF_SIZE); +	xrgb8888 = cpubuf_to_le32(test, params->xrgb8888, TEST_BUF_SIZE);  	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, xrgb8888);  	iosys_map_set_vaddr(&src, xrgb8888); +	/* +	 * RGB888 expected results are already in little-endian +	 * order, so there's no need to convert the test output. +	 */  	drm_fb_xrgb8888_to_rgb888(&dst, &result->dst_pitch, &src, &fb, ¶ms->clip);  	KUNIT_EXPECT_MEMEQ(test, buf, result->expected, dst_size);  } +static void drm_test_fb_xrgb8888_to_argb8888(struct kunit *test) +{ +	const struct convert_xrgb8888_case *params = test->param_value; +	const struct convert_to_argb8888_result *result = ¶ms->argb8888_result; +	size_t dst_size; +	u32 *buf = NULL; +	__le32 *xrgb8888 = NULL; +	struct iosys_map dst, src; + +	struct drm_framebuffer fb = { +		.format = drm_format_info(DRM_FORMAT_XRGB8888), +		.pitches = { params->pitch, 0, 0 }, +	}; + +	dst_size = conversion_buf_size(DRM_FORMAT_ARGB8888, +				       result->dst_pitch, ¶ms->clip); +	KUNIT_ASSERT_GT(test, dst_size, 0); + +	buf = kunit_kzalloc(test, dst_size, GFP_KERNEL); +	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf); +	iosys_map_set_vaddr(&dst, buf); + +	xrgb8888 = cpubuf_to_le32(test, params->xrgb8888, TEST_BUF_SIZE); +	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, xrgb8888); +	iosys_map_set_vaddr(&src, xrgb8888); + +	drm_fb_xrgb8888_to_argb8888(&dst, &result->dst_pitch, &src, &fb, ¶ms->clip); +	buf = le32buf_to_cpu(test, (__force const __le32 *)buf, dst_size / sizeof(u32)); +	KUNIT_EXPECT_EQ(test, memcmp(buf, result->expected, dst_size), 0); +} +  static void drm_test_fb_xrgb8888_to_xrgb2101010(struct kunit *test)  {  	const struct convert_xrgb8888_case *params = test->param_value;  	const struct convert_to_xrgb2101010_result *result = ¶ms->xrgb2101010_result;  	size_t dst_size; -	__u32 *buf = NULL; -	__u32 *xrgb8888 = NULL; +	u32 *buf = NULL; +	__le32 *xrgb8888 = NULL;  	struct iosys_map dst, src;  	struct drm_framebuffer fb = { @@ -433,7 +749,7 @@ static void drm_test_fb_xrgb8888_to_xrgb2101010(struct kunit *test)  	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf);  	iosys_map_set_vaddr(&dst, buf); -	xrgb8888 = le32buf_to_cpu(test, params->xrgb8888, TEST_BUF_SIZE); +	xrgb8888 = cpubuf_to_le32(test, params->xrgb8888, TEST_BUF_SIZE);  	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, xrgb8888);  	iosys_map_set_vaddr(&src, xrgb8888); @@ -442,12 +758,48 @@ static void drm_test_fb_xrgb8888_to_xrgb2101010(struct kunit *test)  	KUNIT_EXPECT_MEMEQ(test, buf, result->expected, dst_size);  } +static void drm_test_fb_xrgb8888_to_argb2101010(struct kunit *test) +{ +	const struct convert_xrgb8888_case *params = test->param_value; +	const struct convert_to_argb2101010_result *result = ¶ms->argb2101010_result; +	size_t dst_size; +	u32 *buf = NULL; +	__le32 *xrgb8888 = NULL; +	struct iosys_map dst, src; + +	struct drm_framebuffer fb = { +		.format = drm_format_info(DRM_FORMAT_XRGB8888), +		.pitches = { params->pitch, 0, 0 }, +	}; + +	dst_size = conversion_buf_size(DRM_FORMAT_ARGB2101010, +				       result->dst_pitch, ¶ms->clip); +	KUNIT_ASSERT_GT(test, dst_size, 0); + +	buf = kunit_kzalloc(test, dst_size, GFP_KERNEL); +	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf); +	iosys_map_set_vaddr(&dst, buf); + +	xrgb8888 = cpubuf_to_le32(test, params->xrgb8888, TEST_BUF_SIZE); +	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, xrgb8888); +	iosys_map_set_vaddr(&src, xrgb8888); + +	drm_fb_xrgb8888_to_argb2101010(&dst, &result->dst_pitch, &src, &fb, ¶ms->clip); +	buf = le32buf_to_cpu(test, (__force const __le32 *)buf, dst_size / sizeof(u32)); +	KUNIT_EXPECT_EQ(test, memcmp(buf, result->expected, dst_size), 0); +} +  static struct kunit_case drm_format_helper_test_cases[] = {  	KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_gray8, convert_xrgb8888_gen_params),  	KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_rgb332, convert_xrgb8888_gen_params),  	KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_rgb565, convert_xrgb8888_gen_params), +	KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_xrgb1555, convert_xrgb8888_gen_params), +	KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_argb1555, convert_xrgb8888_gen_params), +	KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_rgba5551, convert_xrgb8888_gen_params),  	KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_rgb888, convert_xrgb8888_gen_params), +	KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_argb8888, convert_xrgb8888_gen_params),  	KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_xrgb2101010, convert_xrgb8888_gen_params), +	KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_argb2101010, convert_xrgb8888_gen_params),  	{}  }; diff --git a/drivers/gpu/drm/tests/drm_mm_test.c b/drivers/gpu/drm/tests/drm_mm_test.c index 89f12d3b4a21..186b28dc7038 100644 --- a/drivers/gpu/drm/tests/drm_mm_test.c +++ b/drivers/gpu/drm/tests/drm_mm_test.c @@ -298,9 +298,9 @@ static bool expect_reserve_fail(struct kunit *test, struct drm_mm *mm, struct dr  	return false;  } -static bool check_reserve_boundaries(struct kunit *test, struct drm_mm *mm, -				     unsigned int count, -				     u64 size) +static bool noinline_for_stack check_reserve_boundaries(struct kunit *test, struct drm_mm *mm, +							unsigned int count, +							u64 size)  {  	const struct boundary {  		u64 start, size; | 
