lkml.org 
[lkml]   [2022]   [Oct]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 6.0 357/862] drm/format-helper: Fix test on big endian architectures
    Date
    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, &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.35.1


    \
     
     \ /
      Last update: 2022-10-19 12:47    [W:4.032 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site