mirror of
https://github.com/torvalds/linux.git
synced 2026-05-02 13:32:40 -04:00
Merge tag 'drm-misc-next-2022-10-20' of git://anongit.freedesktop.org/drm/drm-misc into drm-next
drm-misc-next for 6.2:
UAPI Changes:
- Documentation for page-flip flags
Cross-subsystem Changes:
- dma-buf: Add unlocked variant of vmapping and attachment-mapping
functions
Core Changes:
- atomic-helpers: CRTC primary plane test fixes
- connector: TV API consistency improvements, cmdline parsing
improvements
- crtc-helpers: Introduce drm_crtc_helper_atomic_check() helper
- edid: Fixes for HFVSDB parsing,
- fourcc: Addition of the Vivante tiled modifier
- makefile: Sort and reorganize the objects files
- mode_config: Remove fb_base from drm_mode_config_funcs
- sched: Add a module parameter to change the scheduling policy,
refcounting fix for fences
- tests: Sort the Kunit tests in the Makefile, improvements to the
DP-MST tests
- ttm: Remove unnecessary drm_mm_clean() call
Driver Changes:
- New driver: ofdrm
- Move all drivers to a common dma-buf locking convention
- bridge:
- adv7533: Remove dynamic lane switching
- it6505: Runtime PM support
- ps8640: Handle AUX defer messages
- tc358775: Drop soft-reset over I2C
- ast: Atomic Gamma LUT Support, Convert to SHMEM, various
improvements
- lcdif: Support for YUV planes
- mgag200: Fix PLL Setup on some revisions
- udl: Modesetting improvements, hot-unplug support
- vc4: Fix support for PAL-M
Signed-off-by: Dave Airlie <airlied@redhat.com>
From: Maxime Ripard <maxime@cerno.tech>
Link: https://patchwork.freedesktop.org/patch/msgid/20221020072405.g3o4hxuk75gmeumw@houat
This commit is contained in:
@@ -1,5 +1,13 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
obj-$(CONFIG_DRM_KUNIT_TEST) += drm_format_helper_test.o drm_damage_helper_test.o \
|
||||
drm_cmdline_parser_test.o drm_rect_test.o drm_format_test.o drm_plane_helper_test.o \
|
||||
drm_dp_mst_helper_test.o drm_framebuffer_test.o drm_buddy_test.o drm_mm_test.o
|
||||
obj-$(CONFIG_DRM_KUNIT_TEST) += \
|
||||
drm_buddy_test.o \
|
||||
drm_cmdline_parser_test.o \
|
||||
drm_damage_helper_test.o \
|
||||
drm_dp_mst_helper_test.o \
|
||||
drm_format_helper_test.o \
|
||||
drm_format_test.o \
|
||||
drm_framebuffer_test.o \
|
||||
drm_mm_test.o \
|
||||
drm_plane_helper_test.o \
|
||||
drm_rect_test.o
|
||||
|
||||
@@ -5,44 +5,280 @@
|
||||
* Copyright (c) 2022 Maíra Canal <mairacanal@riseup.net>
|
||||
*/
|
||||
|
||||
#define PREFIX_STR "[drm_dp_mst_helper]"
|
||||
|
||||
#include <kunit/test.h>
|
||||
|
||||
#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"
|
||||
|
||||
struct drm_dp_mst_calc_pbn_mode_test {
|
||||
const int clock;
|
||||
const int bpp;
|
||||
const bool dsc;
|
||||
const int expected;
|
||||
};
|
||||
|
||||
static const struct drm_dp_mst_calc_pbn_mode_test drm_dp_mst_calc_pbn_mode_cases[] = {
|
||||
{
|
||||
.clock = 154000,
|
||||
.bpp = 30,
|
||||
.dsc = false,
|
||||
.expected = 689
|
||||
},
|
||||
{
|
||||
.clock = 234000,
|
||||
.bpp = 30,
|
||||
.dsc = false,
|
||||
.expected = 1047
|
||||
},
|
||||
{
|
||||
.clock = 297000,
|
||||
.bpp = 24,
|
||||
.dsc = false,
|
||||
.expected = 1063
|
||||
},
|
||||
{
|
||||
.clock = 332880,
|
||||
.bpp = 24,
|
||||
.dsc = true,
|
||||
.expected = 50
|
||||
},
|
||||
{
|
||||
.clock = 324540,
|
||||
.bpp = 24,
|
||||
.dsc = true,
|
||||
.expected = 49
|
||||
},
|
||||
};
|
||||
|
||||
static void drm_test_dp_mst_calc_pbn_mode(struct kunit *test)
|
||||
{
|
||||
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 },
|
||||
};
|
||||
const struct drm_dp_mst_calc_pbn_mode_test *params = test->param_value;
|
||||
|
||||
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);
|
||||
KUNIT_EXPECT_EQ_MSG(test, 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);
|
||||
}
|
||||
KUNIT_EXPECT_EQ(test, drm_dp_calc_pbn_mode(params->clock, params->bpp, params->dsc),
|
||||
params->expected);
|
||||
}
|
||||
|
||||
static void dp_mst_calc_pbn_mode_desc(const struct drm_dp_mst_calc_pbn_mode_test *t, char *desc)
|
||||
{
|
||||
sprintf(desc, "Clock %d BPP %d DSC %s", t->clock, t->bpp, t->dsc ? "enabled" : "disabled");
|
||||
}
|
||||
|
||||
KUNIT_ARRAY_PARAM(drm_dp_mst_calc_pbn_mode, drm_dp_mst_calc_pbn_mode_cases,
|
||||
dp_mst_calc_pbn_mode_desc);
|
||||
|
||||
static u8 data[] = { 0xff, 0x00, 0xdd };
|
||||
|
||||
struct drm_dp_mst_sideband_msg_req_test {
|
||||
const char *desc;
|
||||
const struct drm_dp_sideband_msg_req_body in;
|
||||
};
|
||||
|
||||
static const struct drm_dp_mst_sideband_msg_req_test drm_dp_mst_sideband_msg_req_cases[] = {
|
||||
{
|
||||
.desc = "DP_ENUM_PATH_RESOURCES with port number",
|
||||
.in = {
|
||||
.req_type = DP_ENUM_PATH_RESOURCES,
|
||||
.u.port_num.port_number = 5,
|
||||
},
|
||||
},
|
||||
{
|
||||
.desc = "DP_POWER_UP_PHY with port number",
|
||||
.in = {
|
||||
.req_type = DP_POWER_UP_PHY,
|
||||
.u.port_num.port_number = 5,
|
||||
},
|
||||
},
|
||||
{
|
||||
.desc = "DP_POWER_DOWN_PHY with port number",
|
||||
.in = {
|
||||
.req_type = DP_POWER_DOWN_PHY,
|
||||
.u.port_num.port_number = 5,
|
||||
},
|
||||
},
|
||||
{
|
||||
.desc = "DP_ALLOCATE_PAYLOAD with SDP stream sinks",
|
||||
.in = {
|
||||
.req_type = DP_ALLOCATE_PAYLOAD,
|
||||
.u.allocate_payload.number_sdp_streams = 3,
|
||||
.u.allocate_payload.sdp_stream_sink = { 1, 2, 3 },
|
||||
},
|
||||
},
|
||||
{
|
||||
.desc = "DP_ALLOCATE_PAYLOAD with port number",
|
||||
.in = {
|
||||
.req_type = DP_ALLOCATE_PAYLOAD,
|
||||
.u.allocate_payload.port_number = 0xf,
|
||||
},
|
||||
},
|
||||
{
|
||||
.desc = "DP_ALLOCATE_PAYLOAD with VCPI",
|
||||
.in = {
|
||||
.req_type = DP_ALLOCATE_PAYLOAD,
|
||||
.u.allocate_payload.vcpi = 0x7f,
|
||||
},
|
||||
},
|
||||
{
|
||||
.desc = "DP_ALLOCATE_PAYLOAD with PBN",
|
||||
.in = {
|
||||
.req_type = DP_ALLOCATE_PAYLOAD,
|
||||
.u.allocate_payload.pbn = U16_MAX,
|
||||
},
|
||||
},
|
||||
{
|
||||
.desc = "DP_QUERY_PAYLOAD with port number",
|
||||
.in = {
|
||||
.req_type = DP_QUERY_PAYLOAD,
|
||||
.u.query_payload.port_number = 0xf,
|
||||
},
|
||||
},
|
||||
{
|
||||
.desc = "DP_QUERY_PAYLOAD with VCPI",
|
||||
.in = {
|
||||
.req_type = DP_QUERY_PAYLOAD,
|
||||
.u.query_payload.vcpi = 0x7f,
|
||||
},
|
||||
},
|
||||
{
|
||||
.desc = "DP_REMOTE_DPCD_READ with port number",
|
||||
.in = {
|
||||
.req_type = DP_REMOTE_DPCD_READ,
|
||||
.u.dpcd_read.port_number = 0xf,
|
||||
},
|
||||
},
|
||||
{
|
||||
.desc = "DP_REMOTE_DPCD_READ with DPCD address",
|
||||
.in = {
|
||||
.req_type = DP_REMOTE_DPCD_READ,
|
||||
.u.dpcd_read.dpcd_address = 0xfedcb,
|
||||
},
|
||||
},
|
||||
{
|
||||
.desc = "DP_REMOTE_DPCD_READ with max number of bytes",
|
||||
.in = {
|
||||
.req_type = DP_REMOTE_DPCD_READ,
|
||||
.u.dpcd_read.num_bytes = U8_MAX,
|
||||
},
|
||||
},
|
||||
{
|
||||
.desc = "DP_REMOTE_DPCD_WRITE with port number",
|
||||
.in = {
|
||||
.req_type = DP_REMOTE_DPCD_WRITE,
|
||||
.u.dpcd_write.port_number = 0xf,
|
||||
},
|
||||
},
|
||||
{
|
||||
.desc = "DP_REMOTE_DPCD_WRITE with DPCD address",
|
||||
.in = {
|
||||
.req_type = DP_REMOTE_DPCD_WRITE,
|
||||
.u.dpcd_write.dpcd_address = 0xfedcb,
|
||||
},
|
||||
},
|
||||
{
|
||||
.desc = "DP_REMOTE_DPCD_WRITE with data array",
|
||||
.in = {
|
||||
.req_type = DP_REMOTE_DPCD_WRITE,
|
||||
.u.dpcd_write.num_bytes = ARRAY_SIZE(data),
|
||||
.u.dpcd_write.bytes = data,
|
||||
},
|
||||
},
|
||||
{
|
||||
.desc = "DP_REMOTE_I2C_READ with port number",
|
||||
.in = {
|
||||
.req_type = DP_REMOTE_I2C_READ,
|
||||
.u.i2c_read.port_number = 0xf,
|
||||
},
|
||||
},
|
||||
{
|
||||
.desc = "DP_REMOTE_I2C_READ with I2C device ID",
|
||||
.in = {
|
||||
.req_type = DP_REMOTE_I2C_READ,
|
||||
.u.i2c_read.read_i2c_device_id = 0x7f,
|
||||
},
|
||||
},
|
||||
{
|
||||
.desc = "DP_REMOTE_I2C_READ with transactions array",
|
||||
.in = {
|
||||
.req_type = DP_REMOTE_I2C_READ,
|
||||
.u.i2c_read.num_transactions = 3,
|
||||
.u.i2c_read.num_bytes_read = ARRAY_SIZE(data) * 3,
|
||||
.u.i2c_read.transactions = {
|
||||
{ .bytes = data, .num_bytes = ARRAY_SIZE(data), .i2c_dev_id = 0x7f,
|
||||
.i2c_transaction_delay = 0xf, },
|
||||
{ .bytes = data, .num_bytes = ARRAY_SIZE(data), .i2c_dev_id = 0x7e,
|
||||
.i2c_transaction_delay = 0xe, },
|
||||
{ .bytes = data, .num_bytes = ARRAY_SIZE(data), .i2c_dev_id = 0x7d,
|
||||
.i2c_transaction_delay = 0xd, },
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
.desc = "DP_REMOTE_I2C_WRITE with port number",
|
||||
.in = {
|
||||
.req_type = DP_REMOTE_I2C_WRITE,
|
||||
.u.i2c_write.port_number = 0xf,
|
||||
},
|
||||
},
|
||||
{
|
||||
.desc = "DP_REMOTE_I2C_WRITE with I2C device ID",
|
||||
.in = {
|
||||
.req_type = DP_REMOTE_I2C_WRITE,
|
||||
.u.i2c_write.write_i2c_device_id = 0x7f,
|
||||
},
|
||||
},
|
||||
{
|
||||
.desc = "DP_REMOTE_I2C_WRITE with data array",
|
||||
.in = {
|
||||
.req_type = DP_REMOTE_I2C_WRITE,
|
||||
.u.i2c_write.num_bytes = ARRAY_SIZE(data),
|
||||
.u.i2c_write.bytes = data,
|
||||
},
|
||||
},
|
||||
{
|
||||
.desc = "DP_QUERY_STREAM_ENC_STATUS with stream ID",
|
||||
.in = {
|
||||
.req_type = DP_QUERY_STREAM_ENC_STATUS,
|
||||
.u.enc_status.stream_id = 1,
|
||||
},
|
||||
},
|
||||
{
|
||||
.desc = "DP_QUERY_STREAM_ENC_STATUS with client ID",
|
||||
.in = {
|
||||
.req_type = DP_QUERY_STREAM_ENC_STATUS,
|
||||
.u.enc_status.client_id = { 0x4f, 0x7f, 0xb4, 0x00, 0x8c, 0x0d, 0x67 },
|
||||
},
|
||||
},
|
||||
{
|
||||
.desc = "DP_QUERY_STREAM_ENC_STATUS with stream event",
|
||||
.in = {
|
||||
.req_type = DP_QUERY_STREAM_ENC_STATUS,
|
||||
.u.enc_status.stream_event = 3,
|
||||
},
|
||||
},
|
||||
{
|
||||
.desc = "DP_QUERY_STREAM_ENC_STATUS with valid stream event",
|
||||
.in = {
|
||||
.req_type = DP_QUERY_STREAM_ENC_STATUS,
|
||||
.u.enc_status.valid_stream_event = 0,
|
||||
},
|
||||
},
|
||||
{
|
||||
.desc = "DP_QUERY_STREAM_ENC_STATUS with stream behavior",
|
||||
.in = {
|
||||
.req_type = DP_QUERY_STREAM_ENC_STATUS,
|
||||
.u.enc_status.stream_behavior = 3,
|
||||
},
|
||||
},
|
||||
{
|
||||
.desc = "DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior",
|
||||
.in = {
|
||||
.req_type = DP_QUERY_STREAM_ENC_STATUS,
|
||||
.u.enc_status.valid_stream_behavior = 1,
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
static bool
|
||||
sideband_msg_req_equal(const struct drm_dp_sideband_msg_req_body *in,
|
||||
const struct drm_dp_sideband_msg_req_body *out)
|
||||
@@ -118,41 +354,41 @@ sideband_msg_req_equal(const struct drm_dp_sideband_msg_req_body *in,
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
sideband_msg_req_encode_decode(struct drm_dp_sideband_msg_req_body *in)
|
||||
static void drm_test_dp_mst_msg_printf(struct drm_printer *p, struct va_format *vaf)
|
||||
{
|
||||
struct kunit *test = p->arg;
|
||||
|
||||
kunit_err(test, "%pV", vaf);
|
||||
}
|
||||
|
||||
static void drm_test_dp_mst_sideband_msg_req_decode(struct kunit *test)
|
||||
{
|
||||
const struct drm_dp_mst_sideband_msg_req_test *params = test->param_value;
|
||||
const struct drm_dp_sideband_msg_req_body *in = ¶ms->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;
|
||||
struct drm_printer p = {
|
||||
.printfn = drm_test_dp_mst_msg_printf,
|
||||
.arg = test
|
||||
};
|
||||
int i;
|
||||
|
||||
out = kzalloc(sizeof(*out), GFP_KERNEL);
|
||||
if (!out)
|
||||
return false;
|
||||
out = kunit_kzalloc(test, sizeof(*out), GFP_KERNEL);
|
||||
KUNIT_ASSERT_NOT_NULL(test, out);
|
||||
|
||||
txmsg = kzalloc(sizeof(*txmsg), GFP_KERNEL);
|
||||
if (!txmsg) {
|
||||
kfree(out);
|
||||
return false;
|
||||
}
|
||||
txmsg = kunit_kzalloc(test, sizeof(*txmsg), GFP_KERNEL);
|
||||
KUNIT_ASSERT_NOT_NULL(test, txmsg);
|
||||
|
||||
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;
|
||||
}
|
||||
KUNIT_EXPECT_GE_MSG(test, drm_dp_decode_sideband_req(txmsg, out), 0,
|
||||
"Failed to decode sideband request");
|
||||
|
||||
if (!sideband_msg_req_equal(in, out)) {
|
||||
drm_printf(&p, "Encode/decode failed, expected:\n");
|
||||
KUNIT_FAIL(test, "Encode/decode failed");
|
||||
kunit_err(test, "Expected:");
|
||||
drm_dp_dump_sideband_msg_req_body(in, 1, &p);
|
||||
drm_printf(&p, "Got:\n");
|
||||
kunit_err(test, "Got:");
|
||||
drm_dp_dump_sideband_msg_req_body(out, 1, &p);
|
||||
result = false;
|
||||
goto out;
|
||||
}
|
||||
|
||||
switch (in->req_type) {
|
||||
@@ -167,112 +403,21 @@ sideband_msg_req_encode_decode(struct drm_dp_sideband_msg_req_body *in)
|
||||
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;
|
||||
}
|
||||
|
||||
static void drm_test_dp_mst_sideband_msg_req_decode(struct kunit *test)
|
||||
static void
|
||||
drm_dp_mst_sideband_msg_req_desc(const struct drm_dp_mst_sideband_msg_req_test *t, char *desc)
|
||||
{
|
||||
struct drm_dp_sideband_msg_req_body in = { 0 };
|
||||
u8 data[] = { 0xff, 0x0, 0xdd };
|
||||
int i;
|
||||
|
||||
in.req_type = DP_ENUM_PATH_RESOURCES;
|
||||
in.u.port_num.port_number = 5;
|
||||
KUNIT_EXPECT_TRUE(test, sideband_msg_req_encode_decode(&in));
|
||||
|
||||
in.req_type = DP_POWER_UP_PHY;
|
||||
in.u.port_num.port_number = 5;
|
||||
KUNIT_EXPECT_TRUE(test, sideband_msg_req_encode_decode(&in));
|
||||
|
||||
in.req_type = DP_POWER_DOWN_PHY;
|
||||
in.u.port_num.port_number = 5;
|
||||
KUNIT_EXPECT_TRUE(test, sideband_msg_req_encode_decode(&in));
|
||||
|
||||
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;
|
||||
KUNIT_EXPECT_TRUE(test, sideband_msg_req_encode_decode(&in));
|
||||
in.u.allocate_payload.port_number = 0xf;
|
||||
KUNIT_EXPECT_TRUE(test, sideband_msg_req_encode_decode(&in));
|
||||
in.u.allocate_payload.vcpi = 0x7f;
|
||||
KUNIT_EXPECT_TRUE(test, sideband_msg_req_encode_decode(&in));
|
||||
in.u.allocate_payload.pbn = U16_MAX;
|
||||
KUNIT_EXPECT_TRUE(test, sideband_msg_req_encode_decode(&in));
|
||||
|
||||
in.req_type = DP_QUERY_PAYLOAD;
|
||||
in.u.query_payload.port_number = 0xf;
|
||||
KUNIT_EXPECT_TRUE(test, sideband_msg_req_encode_decode(&in));
|
||||
in.u.query_payload.vcpi = 0x7f;
|
||||
KUNIT_EXPECT_TRUE(test, sideband_msg_req_encode_decode(&in));
|
||||
|
||||
in.req_type = DP_REMOTE_DPCD_READ;
|
||||
in.u.dpcd_read.port_number = 0xf;
|
||||
KUNIT_EXPECT_TRUE(test, sideband_msg_req_encode_decode(&in));
|
||||
in.u.dpcd_read.dpcd_address = 0xfedcb;
|
||||
KUNIT_EXPECT_TRUE(test, sideband_msg_req_encode_decode(&in));
|
||||
in.u.dpcd_read.num_bytes = U8_MAX;
|
||||
KUNIT_EXPECT_TRUE(test, sideband_msg_req_encode_decode(&in));
|
||||
|
||||
in.req_type = DP_REMOTE_DPCD_WRITE;
|
||||
in.u.dpcd_write.port_number = 0xf;
|
||||
KUNIT_EXPECT_TRUE(test, sideband_msg_req_encode_decode(&in));
|
||||
in.u.dpcd_write.dpcd_address = 0xfedcb;
|
||||
KUNIT_EXPECT_TRUE(test, sideband_msg_req_encode_decode(&in));
|
||||
in.u.dpcd_write.num_bytes = ARRAY_SIZE(data);
|
||||
in.u.dpcd_write.bytes = data;
|
||||
KUNIT_EXPECT_TRUE(test, sideband_msg_req_encode_decode(&in));
|
||||
|
||||
in.req_type = DP_REMOTE_I2C_READ;
|
||||
in.u.i2c_read.port_number = 0xf;
|
||||
KUNIT_EXPECT_TRUE(test, sideband_msg_req_encode_decode(&in));
|
||||
in.u.i2c_read.read_i2c_device_id = 0x7f;
|
||||
KUNIT_EXPECT_TRUE(test, sideband_msg_req_encode_decode(&in));
|
||||
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;
|
||||
}
|
||||
KUNIT_EXPECT_TRUE(test, sideband_msg_req_encode_decode(&in));
|
||||
|
||||
in.req_type = DP_REMOTE_I2C_WRITE;
|
||||
in.u.i2c_write.port_number = 0xf;
|
||||
KUNIT_EXPECT_TRUE(test, sideband_msg_req_encode_decode(&in));
|
||||
in.u.i2c_write.write_i2c_device_id = 0x7f;
|
||||
KUNIT_EXPECT_TRUE(test, sideband_msg_req_encode_decode(&in));
|
||||
in.u.i2c_write.num_bytes = ARRAY_SIZE(data);
|
||||
in.u.i2c_write.bytes = data;
|
||||
KUNIT_EXPECT_TRUE(test, sideband_msg_req_encode_decode(&in));
|
||||
|
||||
in.req_type = DP_QUERY_STREAM_ENC_STATUS;
|
||||
in.u.enc_status.stream_id = 1;
|
||||
KUNIT_EXPECT_TRUE(test, sideband_msg_req_encode_decode(&in));
|
||||
get_random_bytes(in.u.enc_status.client_id,
|
||||
sizeof(in.u.enc_status.client_id));
|
||||
KUNIT_EXPECT_TRUE(test, sideband_msg_req_encode_decode(&in));
|
||||
in.u.enc_status.stream_event = 3;
|
||||
KUNIT_EXPECT_TRUE(test, sideband_msg_req_encode_decode(&in));
|
||||
in.u.enc_status.valid_stream_event = 0;
|
||||
KUNIT_EXPECT_TRUE(test, sideband_msg_req_encode_decode(&in));
|
||||
in.u.enc_status.stream_behavior = 3;
|
||||
KUNIT_EXPECT_TRUE(test, sideband_msg_req_encode_decode(&in));
|
||||
in.u.enc_status.valid_stream_behavior = 1;
|
||||
KUNIT_EXPECT_TRUE(test, sideband_msg_req_encode_decode(&in));
|
||||
strcpy(desc, t->desc);
|
||||
}
|
||||
|
||||
KUNIT_ARRAY_PARAM(drm_dp_mst_sideband_msg_req, drm_dp_mst_sideband_msg_req_cases,
|
||||
drm_dp_mst_sideband_msg_req_desc);
|
||||
|
||||
static struct kunit_case drm_dp_mst_helper_tests[] = {
|
||||
KUNIT_CASE(drm_test_dp_mst_calc_pbn_mode),
|
||||
KUNIT_CASE(drm_test_dp_mst_sideband_msg_req_decode),
|
||||
KUNIT_CASE_PARAM(drm_test_dp_mst_calc_pbn_mode, drm_dp_mst_calc_pbn_mode_gen_params),
|
||||
KUNIT_CASE_PARAM(drm_test_dp_mst_sideband_msg_req_decode,
|
||||
drm_dp_mst_sideband_msg_req_gen_params),
|
||||
{ }
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user