diff options
author | Maíra Canal <maira.canal@usp.br> | 2022-07-08 22:30:49 +0200 |
---|---|---|
committer | Javier Martinez Canillas <javierm@redhat.com> | 2022-07-11 14:00:00 +0200 |
commit | 848b3c0be2b944f633fe9beb28ad28f15c39f7a1 (patch) | |
tree | 38cb96a0dd078aa36fe351d3b8b1fd6e95615c6a /drivers/gpu/drm/selftests | |
parent | drm: selftest: convert drm_plane_helper selftest to KUnit (diff) | |
download | linux-848b3c0be2b944f633fe9beb28ad28f15c39f7a1.tar.xz linux-848b3c0be2b944f633fe9beb28ad28f15c39f7a1.zip |
drm: selftest: convert drm_dp_mst_helper selftest to KUnit
Considering the current adoption of the KUnit framework, convert the
DRM DP MST helper selftest to the KUnit API.
Co-developed-by: Rubens Gomes Neto <rubens.gomes.neto@usp.br>
Signed-off-by: Rubens Gomes Neto <rubens.gomes.neto@usp.br>
Tested-by: David Gow <davidgow@google.com>
Acked-by: Daniel Latypov <dlatypov@google.com>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Signed-off-by: Maíra Canal <maira.canal@usp.br>
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220708203052.236290-7-maira.canal@usp.br
Diffstat (limited to 'drivers/gpu/drm/selftests')
-rw-r--r-- | drivers/gpu/drm/selftests/Makefile | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/selftests/drm_modeset_selftests.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/selftests/test-drm_dp_mst_helper.c | 275 | ||||
-rw-r--r-- | drivers/gpu/drm/selftests/test-drm_modeset_common.h | 2 |
4 files changed, 1 insertions, 281 deletions
diff --git a/drivers/gpu/drm/selftests/Makefile b/drivers/gpu/drm/selftests/Makefile index 9e0ccb482841..1539f55db9a7 100644 --- a/drivers/gpu/drm/selftests/Makefile +++ b/drivers/gpu/drm/selftests/Makefile @@ -1,6 +1,5 @@ # SPDX-License-Identifier: GPL-2.0-only -test-drm_modeset-y := test-drm_modeset_common.o test-drm_framebuffer.o \ - test-drm_dp_mst_helper.o +test-drm_modeset-y := test-drm_modeset_common.o test-drm_framebuffer.o obj-$(CONFIG_DRM_DEBUG_SELFTEST) += test-drm_mm.o test-drm_modeset.o \ test-drm_buddy.o diff --git a/drivers/gpu/drm/selftests/drm_modeset_selftests.h b/drivers/gpu/drm/selftests/drm_modeset_selftests.h index 22e467f6465a..40a29b8cf386 100644 --- a/drivers/gpu/drm/selftests/drm_modeset_selftests.h +++ b/drivers/gpu/drm/selftests/drm_modeset_selftests.h @@ -7,5 +7,3 @@ * Tests are executed in order by igt/drm_selftests_helper */ selftest(check_drm_framebuffer_create, igt_check_drm_framebuffer_create) -selftest(dp_mst_calc_pbn_mode, igt_dp_mst_calc_pbn_mode) -selftest(dp_mst_sideband_msg_req_decode, igt_dp_mst_sideband_msg_req_decode) diff --git a/drivers/gpu/drm/selftests/test-drm_dp_mst_helper.c b/drivers/gpu/drm/selftests/test-drm_dp_mst_helper.c deleted file mode 100644 index 4caa9be900ac..000000000000 --- a/drivers/gpu/drm/selftests/test-drm_dp_mst_helper.c +++ /dev/null @@ -1,275 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * Test cases for the DRM DP MST helpers - */ - -#define PREFIX_STR "[drm_dp_mst_helper]" - -#include <linux/random.h> - -#include <drm/display/drm_dp_mst_helper.h> -#include <drm/drm_print.h> - -#include "../display/drm_dp_mst_topology_internal.h" -#include "test-drm_modeset_common.h" - -int igt_dp_mst_calc_pbn_mode(void *ignored) -{ - int pbn, i; - const struct { - int rate; - int bpp; - int expected; - bool dsc; - } test_params[] = { - { 154000, 30, 689, false }, - { 234000, 30, 1047, false }, - { 297000, 24, 1063, false }, - { 332880, 24, 50, true }, - { 324540, 24, 49, true }, - }; - - for (i = 0; i < ARRAY_SIZE(test_params); i++) { - pbn = drm_dp_calc_pbn_mode(test_params[i].rate, - test_params[i].bpp, - test_params[i].dsc); - FAIL(pbn != test_params[i].expected, - "Expected PBN %d for clock %d bpp %d, got %d\n", - test_params[i].expected, test_params[i].rate, - test_params[i].bpp, pbn); - } - - return 0; -} - -static bool -sideband_msg_req_equal(const struct drm_dp_sideband_msg_req_body *in, - const struct drm_dp_sideband_msg_req_body *out) -{ - const struct drm_dp_remote_i2c_read_tx *txin, *txout; - int i; - - if (in->req_type != out->req_type) - return false; - - switch (in->req_type) { - /* - * Compare struct members manually for request types which can't be - * compared simply using memcmp(). This is because said request types - * contain pointers to other allocated structs - */ - case DP_REMOTE_I2C_READ: -#define IN in->u.i2c_read -#define OUT out->u.i2c_read - if (IN.num_bytes_read != OUT.num_bytes_read || - IN.num_transactions != OUT.num_transactions || - IN.port_number != OUT.port_number || - IN.read_i2c_device_id != OUT.read_i2c_device_id) - return false; - - for (i = 0; i < IN.num_transactions; i++) { - txin = &IN.transactions[i]; - txout = &OUT.transactions[i]; - - if (txin->i2c_dev_id != txout->i2c_dev_id || - txin->no_stop_bit != txout->no_stop_bit || - txin->num_bytes != txout->num_bytes || - txin->i2c_transaction_delay != - txout->i2c_transaction_delay) - return false; - - if (memcmp(txin->bytes, txout->bytes, - txin->num_bytes) != 0) - return false; - } - break; -#undef IN -#undef OUT - - case DP_REMOTE_DPCD_WRITE: -#define IN in->u.dpcd_write -#define OUT out->u.dpcd_write - if (IN.dpcd_address != OUT.dpcd_address || - IN.num_bytes != OUT.num_bytes || - IN.port_number != OUT.port_number) - return false; - - return memcmp(IN.bytes, OUT.bytes, IN.num_bytes) == 0; -#undef IN -#undef OUT - - case DP_REMOTE_I2C_WRITE: -#define IN in->u.i2c_write -#define OUT out->u.i2c_write - if (IN.port_number != OUT.port_number || - IN.write_i2c_device_id != OUT.write_i2c_device_id || - IN.num_bytes != OUT.num_bytes) - return false; - - return memcmp(IN.bytes, OUT.bytes, IN.num_bytes) == 0; -#undef IN -#undef OUT - - default: - return memcmp(in, out, sizeof(*in)) == 0; - } - - return true; -} - -static bool -sideband_msg_req_encode_decode(struct drm_dp_sideband_msg_req_body *in) -{ - struct drm_dp_sideband_msg_req_body *out; - struct drm_printer p = drm_err_printer(PREFIX_STR); - struct drm_dp_sideband_msg_tx *txmsg; - int i, ret; - bool result = true; - - out = kzalloc(sizeof(*out), GFP_KERNEL); - if (!out) - return false; - - txmsg = kzalloc(sizeof(*txmsg), GFP_KERNEL); - if (!txmsg) { - kfree(out); - return false; - } - - drm_dp_encode_sideband_req(in, txmsg); - ret = drm_dp_decode_sideband_req(txmsg, out); - if (ret < 0) { - drm_printf(&p, "Failed to decode sideband request: %d\n", - ret); - result = false; - goto out; - } - - if (!sideband_msg_req_equal(in, out)) { - drm_printf(&p, "Encode/decode failed, expected:\n"); - drm_dp_dump_sideband_msg_req_body(in, 1, &p); - drm_printf(&p, "Got:\n"); - drm_dp_dump_sideband_msg_req_body(out, 1, &p); - result = false; - goto out; - } - - switch (in->req_type) { - case DP_REMOTE_DPCD_WRITE: - kfree(out->u.dpcd_write.bytes); - break; - case DP_REMOTE_I2C_READ: - for (i = 0; i < out->u.i2c_read.num_transactions; i++) - kfree(out->u.i2c_read.transactions[i].bytes); - break; - case DP_REMOTE_I2C_WRITE: - kfree(out->u.i2c_write.bytes); - break; - } - - /* Clear everything but the req_type for the input */ - memset(&in->u, 0, sizeof(in->u)); - -out: - kfree(out); - kfree(txmsg); - return result; -} - -int igt_dp_mst_sideband_msg_req_decode(void *unused) -{ - struct drm_dp_sideband_msg_req_body in = { 0 }; - u8 data[] = { 0xff, 0x0, 0xdd }; - int i; - -#define DO_TEST() FAIL_ON(!sideband_msg_req_encode_decode(&in)) - - in.req_type = DP_ENUM_PATH_RESOURCES; - in.u.port_num.port_number = 5; - DO_TEST(); - - in.req_type = DP_POWER_UP_PHY; - in.u.port_num.port_number = 5; - DO_TEST(); - - in.req_type = DP_POWER_DOWN_PHY; - in.u.port_num.port_number = 5; - DO_TEST(); - - in.req_type = DP_ALLOCATE_PAYLOAD; - in.u.allocate_payload.number_sdp_streams = 3; - for (i = 0; i < in.u.allocate_payload.number_sdp_streams; i++) - in.u.allocate_payload.sdp_stream_sink[i] = i + 1; - DO_TEST(); - in.u.allocate_payload.port_number = 0xf; - DO_TEST(); - in.u.allocate_payload.vcpi = 0x7f; - DO_TEST(); - in.u.allocate_payload.pbn = U16_MAX; - DO_TEST(); - - in.req_type = DP_QUERY_PAYLOAD; - in.u.query_payload.port_number = 0xf; - DO_TEST(); - in.u.query_payload.vcpi = 0x7f; - DO_TEST(); - - in.req_type = DP_REMOTE_DPCD_READ; - in.u.dpcd_read.port_number = 0xf; - DO_TEST(); - in.u.dpcd_read.dpcd_address = 0xfedcb; - DO_TEST(); - in.u.dpcd_read.num_bytes = U8_MAX; - DO_TEST(); - - in.req_type = DP_REMOTE_DPCD_WRITE; - in.u.dpcd_write.port_number = 0xf; - DO_TEST(); - in.u.dpcd_write.dpcd_address = 0xfedcb; - DO_TEST(); - in.u.dpcd_write.num_bytes = ARRAY_SIZE(data); - in.u.dpcd_write.bytes = data; - DO_TEST(); - - in.req_type = DP_REMOTE_I2C_READ; - in.u.i2c_read.port_number = 0xf; - DO_TEST(); - in.u.i2c_read.read_i2c_device_id = 0x7f; - DO_TEST(); - in.u.i2c_read.num_transactions = 3; - in.u.i2c_read.num_bytes_read = ARRAY_SIZE(data) * 3; - for (i = 0; i < in.u.i2c_read.num_transactions; i++) { - in.u.i2c_read.transactions[i].bytes = data; - in.u.i2c_read.transactions[i].num_bytes = ARRAY_SIZE(data); - in.u.i2c_read.transactions[i].i2c_dev_id = 0x7f & ~i; - in.u.i2c_read.transactions[i].i2c_transaction_delay = 0xf & ~i; - } - DO_TEST(); - - in.req_type = DP_REMOTE_I2C_WRITE; - in.u.i2c_write.port_number = 0xf; - DO_TEST(); - in.u.i2c_write.write_i2c_device_id = 0x7f; - DO_TEST(); - in.u.i2c_write.num_bytes = ARRAY_SIZE(data); - in.u.i2c_write.bytes = data; - DO_TEST(); - - in.req_type = DP_QUERY_STREAM_ENC_STATUS; - in.u.enc_status.stream_id = 1; - DO_TEST(); - get_random_bytes(in.u.enc_status.client_id, - sizeof(in.u.enc_status.client_id)); - DO_TEST(); - in.u.enc_status.stream_event = 3; - DO_TEST(); - in.u.enc_status.valid_stream_event = 0; - DO_TEST(); - in.u.enc_status.stream_behavior = 3; - DO_TEST(); - in.u.enc_status.valid_stream_behavior = 1; - DO_TEST(); - -#undef DO_TEST - return 0; -} diff --git a/drivers/gpu/drm/selftests/test-drm_modeset_common.h b/drivers/gpu/drm/selftests/test-drm_modeset_common.h index 790f3cf31f0d..3feb2fea1a6b 100644 --- a/drivers/gpu/drm/selftests/test-drm_modeset_common.h +++ b/drivers/gpu/drm/selftests/test-drm_modeset_common.h @@ -17,7 +17,5 @@ #define FAIL_ON(x) FAIL((x), "%s", "FAIL_ON(" __stringify(x) ")\n") int igt_check_drm_framebuffer_create(void *ignored); -int igt_dp_mst_calc_pbn_mode(void *ignored); -int igt_dp_mst_sideband_msg_req_decode(void *ignored); #endif |