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 <david...@google.com>
Signed-off-by: José Expósito <jose.exposit...@gmail.com>
---
 .../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..4d074c2e48bf 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, buf_size, GFP_KERNEL);
+       if (!dst)
+               return NULL;
+
+       for (n = 0; n < buf_size; n++)
+               dst[n] = le32_to_cpu(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);
 }
 
-- 
2.25.1

Reply via email to