Commit 18c84852 authored by José Expósito's avatar José Expósito
Browse files

drm/format-helper: Fix test on big endian architectures



The tests fail on big endian architectures, like PowerPC:

 $ ./tools/testing/kunit/kunit.py run \
   --kunitconfig=drivers/gpu/drm/tests \
   --arch=powerpc --cross_compile=powerpc64-linux-gnu-

Transform the XRGB8888 buffer from little endian to the CPU endian
before calling the conversion function to avoid this error.

Fixes: 8f456104 ("drm/format-helper: Add KUnit tests for drm_fb_xrgb8888_to_rgb332()")
Reported-by: default avatarDavid Gow <davidgow@google.com>
Reviewed-by: default avatarDavid Gow <davidgow@google.com>
Signed-off-by: default avatarJosé Expósito <jose.exposito89@gmail.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220726230916.390575-2-jose.exposito89@gmail.com
parent 8e61cbd4
Loading
Loading
Loading
Loading
+21 −2
Original line number Diff line number Diff line
@@ -111,6 +111,21 @@ 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)
{
	u32 *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] = le32_to_cpu((__force __le32)buf[n]);

	return dst;
}

static void xrgb8888_to_rgb332_case_desc(struct xrgb8888_to_rgb332_case *t,
					 char *desc)
{
@@ -125,6 +140,7 @@ static void xrgb8888_to_rgb332_test(struct kunit *test)
	const struct xrgb8888_to_rgb332_case *params = test->param_value;
	size_t dst_size;
	__u8 *dst = NULL;
	__u32 *src = NULL;

	struct drm_framebuffer fb = {
		.format = drm_format_info(DRM_FORMAT_XRGB8888),
@@ -138,8 +154,11 @@ static void xrgb8888_to_rgb332_test(struct kunit *test)
	dst = kunit_kzalloc(test, dst_size, GFP_KERNEL);
	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, dst);

	drm_fb_xrgb8888_to_rgb332(dst, params->dst_pitch, params->xrgb8888,
				  &fb, &params->clip);
	src = le32buf_to_cpu(test, params->xrgb8888, TEST_BUF_SIZE);
	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, src);

	drm_fb_xrgb8888_to_rgb332(dst, params->dst_pitch, src, &fb,
				  &params->clip);
	KUNIT_EXPECT_EQ(test, memcmp(dst, params->expected, dst_size), 0);
}