| From 7187781d0039c9ef7cabfe54aed40e8c285af5bd Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 27 Jul 2022 01:09:13 +0200 |
| Subject: drm/format-helper: Fix test on big endian architectures |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: José Expósito <jose.exposito89@gmail.com> |
| |
| [ Upstream commit 18c8485236a5e3f491b670c018ae391c9cb84dfa ] |
| |
| 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: 8f456104915f ("drm/format-helper: Add KUnit tests for drm_fb_xrgb8888_to_rgb332()") |
| Reported-by: David Gow <davidgow@google.com> |
| Reviewed-by: David Gow <davidgow@google.com> |
| Signed-off-by: José Expósito <jose.exposito89@gmail.com> |
| Link: https://patchwork.freedesktop.org/patch/msgid/20220726230916.390575-2-jose.exposito89@gmail.com |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| .../gpu/drm/tests/drm_format_helper_test.c | 23 +++++++++++++++++-- |
| 1 file changed, 21 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/tests/drm_format_helper_test.c b/drivers/gpu/drm/tests/drm_format_helper_test.c |
| index 98583bf56044..eefaba3aaea2 100644 |
| --- a/drivers/gpu/drm/tests/drm_format_helper_test.c |
| +++ b/drivers/gpu/drm/tests/drm_format_helper_test.c |
| @@ -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, ¶ms->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, |
| + ¶ms->clip); |
| KUNIT_EXPECT_EQ(test, memcmp(dst, params->expected, dst_size), 0); |
| } |
| |
| -- |
| 2.35.1 |
| |