mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 20:54:03 +02:00
drm/amd/amdgpu: Fix stack frame size warnings in KUnit tests
[WHAT] Replace stack-allocated large structs with kunit_kzalloc() in KUnit test functions that exceed the kernel 1280-byte stack frame limit. Also add CONFIG_FRAME_WARN=1024 to .kunitconfig to enforce the limit. Affected structs and files: - struct dc_link in amdgpu_dm_connector_test.c and amdgpu_dm_mst_types_test.c - struct drm_plane, drm_plane_state, drm_framebuffer in amdgpu_dm_plane_test.c - struct drm_connector_state, drm_atomic_state in amdgpu_dm_mst_types_test.c - struct dm_connector_state in amdgpu_dm_test.c Reported-by: kernel test robot <lkp@intel.com> Closes: https://lore.kernel.org/oe-kbuild-all/202606230825.9qMV9L0g-lkp@intel.com/ Assisted-by: Copilot:Claude-Opus-4.6 Acked-by: George Zhang <george.zhang@amd.com> Signed-off-by: Alex Hung <alex.hung@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
e007830d28
commit
2e9e7234f1
|
|
@ -15,6 +15,9 @@ CONFIG_I2C=y
|
|||
CONFIG_POWER_SUPPLY=y
|
||||
CONFIG_CRC16=y
|
||||
|
||||
# Limit stack size to 1280
|
||||
CONFIG_FRAME_WARN=1280
|
||||
|
||||
# Treat warnings as errors
|
||||
CONFIG_WERROR=y
|
||||
|
||||
|
|
|
|||
|
|
@ -29,10 +29,12 @@
|
|||
*/
|
||||
static void dm_test_subconnector_type_none(struct kunit *test)
|
||||
{
|
||||
struct dc_link link = {};
|
||||
struct dc_link *link = kunit_kzalloc(test, sizeof(*link), GFP_KERNEL);
|
||||
|
||||
link.dpcd_caps.dongle_type = DISPLAY_DONGLE_NONE;
|
||||
KUNIT_EXPECT_EQ(test, (int)get_subconnector_type(&link), (int)DRM_MODE_SUBCONNECTOR_Native);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, link);
|
||||
|
||||
link->dpcd_caps.dongle_type = DISPLAY_DONGLE_NONE;
|
||||
KUNIT_EXPECT_EQ(test, (int)get_subconnector_type(link), (int)DRM_MODE_SUBCONNECTOR_Native);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -41,10 +43,12 @@ static void dm_test_subconnector_type_none(struct kunit *test)
|
|||
*/
|
||||
static void dm_test_subconnector_type_vga(struct kunit *test)
|
||||
{
|
||||
struct dc_link link = {};
|
||||
struct dc_link *link = kunit_kzalloc(test, sizeof(*link), GFP_KERNEL);
|
||||
|
||||
link.dpcd_caps.dongle_type = DISPLAY_DONGLE_DP_VGA_CONVERTER;
|
||||
KUNIT_EXPECT_EQ(test, (int)get_subconnector_type(&link), (int)DRM_MODE_SUBCONNECTOR_VGA);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, link);
|
||||
|
||||
link->dpcd_caps.dongle_type = DISPLAY_DONGLE_DP_VGA_CONVERTER;
|
||||
KUNIT_EXPECT_EQ(test, (int)get_subconnector_type(link), (int)DRM_MODE_SUBCONNECTOR_VGA);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -53,10 +57,12 @@ static void dm_test_subconnector_type_vga(struct kunit *test)
|
|||
*/
|
||||
static void dm_test_subconnector_type_dvi_converter(struct kunit *test)
|
||||
{
|
||||
struct dc_link link = {};
|
||||
struct dc_link *link = kunit_kzalloc(test, sizeof(*link), GFP_KERNEL);
|
||||
|
||||
link.dpcd_caps.dongle_type = DISPLAY_DONGLE_DP_DVI_CONVERTER;
|
||||
KUNIT_EXPECT_EQ(test, (int)get_subconnector_type(&link), (int)DRM_MODE_SUBCONNECTOR_DVID);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, link);
|
||||
|
||||
link->dpcd_caps.dongle_type = DISPLAY_DONGLE_DP_DVI_CONVERTER;
|
||||
KUNIT_EXPECT_EQ(test, (int)get_subconnector_type(link), (int)DRM_MODE_SUBCONNECTOR_DVID);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -65,10 +71,12 @@ static void dm_test_subconnector_type_dvi_converter(struct kunit *test)
|
|||
*/
|
||||
static void dm_test_subconnector_type_dvi_dongle(struct kunit *test)
|
||||
{
|
||||
struct dc_link link = {};
|
||||
struct dc_link *link = kunit_kzalloc(test, sizeof(*link), GFP_KERNEL);
|
||||
|
||||
link.dpcd_caps.dongle_type = DISPLAY_DONGLE_DP_DVI_DONGLE;
|
||||
KUNIT_EXPECT_EQ(test, (int)get_subconnector_type(&link), (int)DRM_MODE_SUBCONNECTOR_DVID);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, link);
|
||||
|
||||
link->dpcd_caps.dongle_type = DISPLAY_DONGLE_DP_DVI_DONGLE;
|
||||
KUNIT_EXPECT_EQ(test, (int)get_subconnector_type(link), (int)DRM_MODE_SUBCONNECTOR_DVID);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -77,10 +85,12 @@ static void dm_test_subconnector_type_dvi_dongle(struct kunit *test)
|
|||
*/
|
||||
static void dm_test_subconnector_type_hdmi_converter(struct kunit *test)
|
||||
{
|
||||
struct dc_link link = {};
|
||||
struct dc_link *link = kunit_kzalloc(test, sizeof(*link), GFP_KERNEL);
|
||||
|
||||
link.dpcd_caps.dongle_type = DISPLAY_DONGLE_DP_HDMI_CONVERTER;
|
||||
KUNIT_EXPECT_EQ(test, (int)get_subconnector_type(&link), (int)DRM_MODE_SUBCONNECTOR_HDMIA);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, link);
|
||||
|
||||
link->dpcd_caps.dongle_type = DISPLAY_DONGLE_DP_HDMI_CONVERTER;
|
||||
KUNIT_EXPECT_EQ(test, (int)get_subconnector_type(link), (int)DRM_MODE_SUBCONNECTOR_HDMIA);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -89,10 +99,12 @@ static void dm_test_subconnector_type_hdmi_converter(struct kunit *test)
|
|||
*/
|
||||
static void dm_test_subconnector_type_hdmi_dongle(struct kunit *test)
|
||||
{
|
||||
struct dc_link link = {};
|
||||
struct dc_link *link = kunit_kzalloc(test, sizeof(*link), GFP_KERNEL);
|
||||
|
||||
link.dpcd_caps.dongle_type = DISPLAY_DONGLE_DP_HDMI_DONGLE;
|
||||
KUNIT_EXPECT_EQ(test, (int)get_subconnector_type(&link), (int)DRM_MODE_SUBCONNECTOR_HDMIA);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, link);
|
||||
|
||||
link->dpcd_caps.dongle_type = DISPLAY_DONGLE_DP_HDMI_DONGLE;
|
||||
KUNIT_EXPECT_EQ(test, (int)get_subconnector_type(link), (int)DRM_MODE_SUBCONNECTOR_HDMIA);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -101,10 +113,12 @@ static void dm_test_subconnector_type_hdmi_dongle(struct kunit *test)
|
|||
*/
|
||||
static void dm_test_subconnector_type_mismatched(struct kunit *test)
|
||||
{
|
||||
struct dc_link link = {};
|
||||
struct dc_link *link = kunit_kzalloc(test, sizeof(*link), GFP_KERNEL);
|
||||
|
||||
link.dpcd_caps.dongle_type = DISPLAY_DONGLE_DP_HDMI_MISMATCHED_DONGLE;
|
||||
KUNIT_EXPECT_EQ(test, (int)get_subconnector_type(&link), (int)DRM_MODE_SUBCONNECTOR_Unknown);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, link);
|
||||
|
||||
link->dpcd_caps.dongle_type = DISPLAY_DONGLE_DP_HDMI_MISMATCHED_DONGLE;
|
||||
KUNIT_EXPECT_EQ(test, (int)get_subconnector_type(link), (int)DRM_MODE_SUBCONNECTOR_Unknown);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -113,10 +127,12 @@ static void dm_test_subconnector_type_mismatched(struct kunit *test)
|
|||
*/
|
||||
static void dm_test_subconnector_type_default_unknown(struct kunit *test)
|
||||
{
|
||||
struct dc_link link = {};
|
||||
struct dc_link *link = kunit_kzalloc(test, sizeof(*link), GFP_KERNEL);
|
||||
|
||||
link.dpcd_caps.dongle_type = (typeof(link.dpcd_caps.dongle_type))0x7f;
|
||||
KUNIT_EXPECT_EQ(test, (int)get_subconnector_type(&link), (int)DRM_MODE_SUBCONNECTOR_Unknown);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, link);
|
||||
|
||||
link->dpcd_caps.dongle_type = (typeof(link->dpcd_caps.dongle_type))0x7f;
|
||||
KUNIT_EXPECT_EQ(test, (int)get_subconnector_type(link), (int)DRM_MODE_SUBCONNECTOR_Unknown);
|
||||
}
|
||||
|
||||
/* Tests for get_output_content_type() */
|
||||
|
|
|
|||
|
|
@ -129,13 +129,15 @@ static ssize_t dm_mst_test_desc_aux_transfer(struct drm_dp_aux *aux,
|
|||
*/
|
||||
static void dm_mst_test_needs_dsc_aux_workaround_match(struct kunit *test)
|
||||
{
|
||||
struct dc_link link = {0};
|
||||
struct dc_link *link = kunit_kzalloc(test, sizeof(*link), GFP_KERNEL);
|
||||
|
||||
link.dpcd_caps.branch_dev_id = DP_BRANCH_DEVICE_ID_90CC24;
|
||||
link.dpcd_caps.dpcd_rev.raw = DPCD_REV_14;
|
||||
link.dpcd_caps.sink_count.bits.SINK_COUNT = 2;
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, link);
|
||||
|
||||
KUNIT_EXPECT_TRUE(test, needs_dsc_aux_workaround(&link));
|
||||
link->dpcd_caps.branch_dev_id = DP_BRANCH_DEVICE_ID_90CC24;
|
||||
link->dpcd_caps.dpcd_rev.raw = DPCD_REV_14;
|
||||
link->dpcd_caps.sink_count.bits.SINK_COUNT = 2;
|
||||
|
||||
KUNIT_EXPECT_TRUE(test, needs_dsc_aux_workaround(link));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -147,13 +149,15 @@ static void dm_mst_test_needs_dsc_aux_workaround_match(struct kunit *test)
|
|||
*/
|
||||
static void dm_mst_test_needs_dsc_aux_workaround_rev12(struct kunit *test)
|
||||
{
|
||||
struct dc_link link = {0};
|
||||
struct dc_link *link = kunit_kzalloc(test, sizeof(*link), GFP_KERNEL);
|
||||
|
||||
link.dpcd_caps.branch_dev_id = DP_BRANCH_DEVICE_ID_90CC24;
|
||||
link.dpcd_caps.dpcd_rev.raw = DPCD_REV_12;
|
||||
link.dpcd_caps.sink_count.bits.SINK_COUNT = 3;
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, link);
|
||||
|
||||
KUNIT_EXPECT_TRUE(test, needs_dsc_aux_workaround(&link));
|
||||
link->dpcd_caps.branch_dev_id = DP_BRANCH_DEVICE_ID_90CC24;
|
||||
link->dpcd_caps.dpcd_rev.raw = DPCD_REV_12;
|
||||
link->dpcd_caps.sink_count.bits.SINK_COUNT = 3;
|
||||
|
||||
KUNIT_EXPECT_TRUE(test, needs_dsc_aux_workaround(link));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -165,13 +169,15 @@ static void dm_mst_test_needs_dsc_aux_workaround_rev12(struct kunit *test)
|
|||
*/
|
||||
static void dm_mst_test_needs_dsc_aux_workaround_wrong_dev_id(struct kunit *test)
|
||||
{
|
||||
struct dc_link link = {0};
|
||||
struct dc_link *link = kunit_kzalloc(test, sizeof(*link), GFP_KERNEL);
|
||||
|
||||
link.dpcd_caps.branch_dev_id = 0x123456;
|
||||
link.dpcd_caps.dpcd_rev.raw = DPCD_REV_14;
|
||||
link.dpcd_caps.sink_count.bits.SINK_COUNT = 2;
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, link);
|
||||
|
||||
KUNIT_EXPECT_FALSE(test, needs_dsc_aux_workaround(&link));
|
||||
link->dpcd_caps.branch_dev_id = 0x123456;
|
||||
link->dpcd_caps.dpcd_rev.raw = DPCD_REV_14;
|
||||
link->dpcd_caps.sink_count.bits.SINK_COUNT = 2;
|
||||
|
||||
KUNIT_EXPECT_FALSE(test, needs_dsc_aux_workaround(link));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -183,13 +189,15 @@ static void dm_mst_test_needs_dsc_aux_workaround_wrong_dev_id(struct kunit *test
|
|||
*/
|
||||
static void dm_mst_test_needs_dsc_aux_workaround_wrong_rev(struct kunit *test)
|
||||
{
|
||||
struct dc_link link = {0};
|
||||
struct dc_link *link = kunit_kzalloc(test, sizeof(*link), GFP_KERNEL);
|
||||
|
||||
link.dpcd_caps.branch_dev_id = DP_BRANCH_DEVICE_ID_90CC24;
|
||||
link.dpcd_caps.dpcd_rev.raw = 0x11; /* DPCD 1.1 */
|
||||
link.dpcd_caps.sink_count.bits.SINK_COUNT = 2;
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, link);
|
||||
|
||||
KUNIT_EXPECT_FALSE(test, needs_dsc_aux_workaround(&link));
|
||||
link->dpcd_caps.branch_dev_id = DP_BRANCH_DEVICE_ID_90CC24;
|
||||
link->dpcd_caps.dpcd_rev.raw = 0x11; /* DPCD 1.1 */
|
||||
link->dpcd_caps.sink_count.bits.SINK_COUNT = 2;
|
||||
|
||||
KUNIT_EXPECT_FALSE(test, needs_dsc_aux_workaround(link));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -201,13 +209,15 @@ static void dm_mst_test_needs_dsc_aux_workaround_wrong_rev(struct kunit *test)
|
|||
*/
|
||||
static void dm_mst_test_needs_dsc_aux_workaround_low_sink_count(struct kunit *test)
|
||||
{
|
||||
struct dc_link link = {0};
|
||||
struct dc_link *link = kunit_kzalloc(test, sizeof(*link), GFP_KERNEL);
|
||||
|
||||
link.dpcd_caps.branch_dev_id = DP_BRANCH_DEVICE_ID_90CC24;
|
||||
link.dpcd_caps.dpcd_rev.raw = DPCD_REV_14;
|
||||
link.dpcd_caps.sink_count.bits.SINK_COUNT = 1;
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, link);
|
||||
|
||||
KUNIT_EXPECT_FALSE(test, needs_dsc_aux_workaround(&link));
|
||||
link->dpcd_caps.branch_dev_id = DP_BRANCH_DEVICE_ID_90CC24;
|
||||
link->dpcd_caps.dpcd_rev.raw = DPCD_REV_14;
|
||||
link->dpcd_caps.sink_count.bits.SINK_COUNT = 1;
|
||||
|
||||
KUNIT_EXPECT_FALSE(test, needs_dsc_aux_workaround(link));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -219,13 +229,15 @@ static void dm_mst_test_needs_dsc_aux_workaround_low_sink_count(struct kunit *te
|
|||
*/
|
||||
static void dm_mst_test_needs_dsc_aux_workaround_zero_sink_count(struct kunit *test)
|
||||
{
|
||||
struct dc_link link = {0};
|
||||
struct dc_link *link = kunit_kzalloc(test, sizeof(*link), GFP_KERNEL);
|
||||
|
||||
link.dpcd_caps.branch_dev_id = DP_BRANCH_DEVICE_ID_90CC24;
|
||||
link.dpcd_caps.dpcd_rev.raw = DPCD_REV_14;
|
||||
link.dpcd_caps.sink_count.bits.SINK_COUNT = 0;
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, link);
|
||||
|
||||
KUNIT_EXPECT_FALSE(test, needs_dsc_aux_workaround(&link));
|
||||
link->dpcd_caps.branch_dev_id = DP_BRANCH_DEVICE_ID_90CC24;
|
||||
link->dpcd_caps.dpcd_rev.raw = DPCD_REV_14;
|
||||
link->dpcd_caps.sink_count.bits.SINK_COUNT = 0;
|
||||
|
||||
KUNIT_EXPECT_FALSE(test, needs_dsc_aux_workaround(link));
|
||||
}
|
||||
|
||||
/* Tests for dm_mst_get_pbn_divider */
|
||||
|
|
@ -943,17 +955,23 @@ static void dm_mst_test_create_fake_mst_encoders(struct kunit *test)
|
|||
*/
|
||||
static void dm_mst_test_atomic_check_no_old_crtc(struct kunit *test)
|
||||
{
|
||||
struct drm_connector_state old_conn_state = { 0 };
|
||||
struct drm_connector_state new_conn_state = { 0 };
|
||||
struct drm_atomic_commit state = { 0 };
|
||||
struct drm_connector_state *old_conn_state;
|
||||
struct drm_connector_state *new_conn_state;
|
||||
struct drm_atomic_commit *state;
|
||||
struct amdgpu_dm_connector *aconnector;
|
||||
struct amdgpu_dm_connector *root;
|
||||
struct drm_dp_mst_port *port;
|
||||
unsigned int connector_index = 2;
|
||||
|
||||
old_conn_state = kunit_kzalloc(test, sizeof(*old_conn_state), GFP_KERNEL);
|
||||
new_conn_state = kunit_kzalloc(test, sizeof(*new_conn_state), GFP_KERNEL);
|
||||
state = kunit_kzalloc(test, sizeof(*state), GFP_KERNEL);
|
||||
aconnector = kunit_kzalloc(test, sizeof(*aconnector), GFP_KERNEL);
|
||||
root = kunit_kzalloc(test, sizeof(*root), GFP_KERNEL);
|
||||
port = kunit_kzalloc(test, sizeof(*port), GFP_KERNEL);
|
||||
KUNIT_ASSERT_NOT_NULL(test, old_conn_state);
|
||||
KUNIT_ASSERT_NOT_NULL(test, new_conn_state);
|
||||
KUNIT_ASSERT_NOT_NULL(test, state);
|
||||
KUNIT_ASSERT_NOT_NULL(test, aconnector);
|
||||
KUNIT_ASSERT_NOT_NULL(test, root);
|
||||
KUNIT_ASSERT_NOT_NULL(test, port);
|
||||
|
|
@ -962,18 +980,18 @@ static void dm_mst_test_atomic_check_no_old_crtc(struct kunit *test)
|
|||
aconnector->mst_root = root;
|
||||
aconnector->mst_output_port = port;
|
||||
port->connector = &aconnector->base;
|
||||
old_conn_state.connector = &aconnector->base;
|
||||
new_conn_state.connector = &aconnector->base;
|
||||
state.num_connector = connector_index + 1;
|
||||
state.connectors = kunit_kzalloc(test,
|
||||
sizeof(*state.connectors) * state.num_connector,
|
||||
old_conn_state->connector = &aconnector->base;
|
||||
new_conn_state->connector = &aconnector->base;
|
||||
state->num_connector = connector_index + 1;
|
||||
state->connectors = kunit_kzalloc(test,
|
||||
sizeof(*state->connectors) * state->num_connector,
|
||||
GFP_KERNEL);
|
||||
KUNIT_ASSERT_NOT_NULL(test, state.connectors);
|
||||
state.connectors[connector_index].ptr = &aconnector->base;
|
||||
state.connectors[connector_index].old_state = &old_conn_state;
|
||||
state.connectors[connector_index].new_state = &new_conn_state;
|
||||
KUNIT_ASSERT_NOT_NULL(test, state->connectors);
|
||||
state->connectors[connector_index].ptr = &aconnector->base;
|
||||
state->connectors[connector_index].old_state = old_conn_state;
|
||||
state->connectors[connector_index].new_state = new_conn_state;
|
||||
|
||||
KUNIT_EXPECT_EQ(test, dm_dp_mst_atomic_check(&aconnector->base, &state), 0);
|
||||
KUNIT_EXPECT_EQ(test, dm_dp_mst_atomic_check(&aconnector->base, state), 0);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -185,22 +185,26 @@ static void dm_test_fill_blending_coverage_alpha_format(struct kunit *test)
|
|||
static void dm_test_fill_blending_global_alpha(struct kunit *test)
|
||||
{
|
||||
struct amdgpu_device *adev;
|
||||
struct drm_plane plane = {0};
|
||||
struct drm_plane_state state = { 0 };
|
||||
struct drm_plane *plane;
|
||||
struct drm_plane_state *state;
|
||||
bool per_pixel_alpha;
|
||||
bool pre_multiplied_alpha;
|
||||
bool global_alpha;
|
||||
int global_alpha_value;
|
||||
|
||||
adev = kunit_kzalloc(test, sizeof(*adev), GFP_KERNEL);
|
||||
plane = kunit_kzalloc(test, sizeof(*plane), GFP_KERNEL);
|
||||
state = kunit_kzalloc(test, sizeof(*state), GFP_KERNEL);
|
||||
KUNIT_ASSERT_NOT_NULL(test, adev);
|
||||
KUNIT_ASSERT_NOT_NULL(test, plane);
|
||||
KUNIT_ASSERT_NOT_NULL(test, state);
|
||||
|
||||
plane.dev = &adev->ddev;
|
||||
state.plane = &plane;
|
||||
state.pixel_blend_mode = DRM_MODE_BLEND_PIXEL_NONE;
|
||||
state.alpha = 0x8000;
|
||||
plane->dev = &adev->ddev;
|
||||
state->plane = plane;
|
||||
state->pixel_blend_mode = DRM_MODE_BLEND_PIXEL_NONE;
|
||||
state->alpha = 0x8000;
|
||||
|
||||
amdgpu_dm_plane_fill_blending_from_plane_state(&state,
|
||||
amdgpu_dm_plane_fill_blending_from_plane_state(state,
|
||||
&per_pixel_alpha,
|
||||
&pre_multiplied_alpha,
|
||||
&global_alpha,
|
||||
|
|
@ -250,23 +254,28 @@ static void dm_test_modifier_gfx9_swizzle_mode(struct kunit *test)
|
|||
*/
|
||||
static void dm_test_get_plane_formats(struct kunit *test)
|
||||
{
|
||||
struct drm_plane plane = {0};
|
||||
struct dc_plane_cap cap = {0};
|
||||
struct drm_plane *plane;
|
||||
struct dc_plane_cap *cap;
|
||||
uint32_t formats[32] = {0};
|
||||
|
||||
plane.type = DRM_PLANE_TYPE_PRIMARY;
|
||||
KUNIT_EXPECT_EQ(test, amdgpu_dm_plane_get_plane_formats(&plane, NULL, formats, 32), 14);
|
||||
plane = kunit_kzalloc(test, sizeof(*plane), GFP_KERNEL);
|
||||
cap = kunit_kzalloc(test, sizeof(*cap), GFP_KERNEL);
|
||||
KUNIT_ASSERT_NOT_NULL(test, plane);
|
||||
KUNIT_ASSERT_NOT_NULL(test, cap);
|
||||
|
||||
cap.pixel_format_support.nv12 = true;
|
||||
cap.pixel_format_support.p010 = true;
|
||||
cap.pixel_format_support.fp16 = true;
|
||||
KUNIT_EXPECT_EQ(test, amdgpu_dm_plane_get_plane_formats(&plane, &cap, formats, 32), 20);
|
||||
plane->type = DRM_PLANE_TYPE_PRIMARY;
|
||||
KUNIT_EXPECT_EQ(test, amdgpu_dm_plane_get_plane_formats(plane, NULL, formats, 32), 14);
|
||||
|
||||
plane.type = DRM_PLANE_TYPE_OVERLAY;
|
||||
KUNIT_EXPECT_EQ(test, amdgpu_dm_plane_get_plane_formats(&plane, NULL, formats, 32), 9);
|
||||
cap->pixel_format_support.nv12 = true;
|
||||
cap->pixel_format_support.p010 = true;
|
||||
cap->pixel_format_support.fp16 = true;
|
||||
KUNIT_EXPECT_EQ(test, amdgpu_dm_plane_get_plane_formats(plane, cap, formats, 32), 20);
|
||||
|
||||
plane.type = DRM_PLANE_TYPE_CURSOR;
|
||||
KUNIT_EXPECT_EQ(test, amdgpu_dm_plane_get_plane_formats(&plane, NULL, formats, 32), 1);
|
||||
plane->type = DRM_PLANE_TYPE_OVERLAY;
|
||||
KUNIT_EXPECT_EQ(test, amdgpu_dm_plane_get_plane_formats(plane, NULL, formats, 32), 9);
|
||||
|
||||
plane->type = DRM_PLANE_TYPE_CURSOR;
|
||||
KUNIT_EXPECT_EQ(test, amdgpu_dm_plane_get_plane_formats(plane, NULL, formats, 32), 1);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -433,30 +442,36 @@ static void dm_test_get_cursor_position(struct kunit *test)
|
|||
{
|
||||
struct amdgpu_device *adev;
|
||||
struct amdgpu_crtc *amdgpu_crtc;
|
||||
struct drm_plane plane = {0};
|
||||
struct drm_plane_state state = {0};
|
||||
struct drm_framebuffer fb = {0};
|
||||
struct drm_plane *plane;
|
||||
struct drm_plane_state *state;
|
||||
struct drm_framebuffer *fb;
|
||||
struct dc_cursor_position position = {0};
|
||||
|
||||
adev = kunit_kzalloc(test, sizeof(*adev), GFP_KERNEL);
|
||||
amdgpu_crtc = kunit_kzalloc(test, sizeof(*amdgpu_crtc), GFP_KERNEL);
|
||||
plane = kunit_kzalloc(test, sizeof(*plane), GFP_KERNEL);
|
||||
state = kunit_kzalloc(test, sizeof(*state), GFP_KERNEL);
|
||||
fb = kunit_kzalloc(test, sizeof(*fb), GFP_KERNEL);
|
||||
KUNIT_ASSERT_NOT_NULL(test, adev);
|
||||
KUNIT_ASSERT_NOT_NULL(test, amdgpu_crtc);
|
||||
KUNIT_ASSERT_NOT_NULL(test, plane);
|
||||
KUNIT_ASSERT_NOT_NULL(test, state);
|
||||
KUNIT_ASSERT_NOT_NULL(test, fb);
|
||||
|
||||
adev->ip_versions[DCE_HWIP][0] = IP_VERSION(4, 0, 0);
|
||||
amdgpu_crtc->max_cursor_width = 64;
|
||||
amdgpu_crtc->max_cursor_height = 64;
|
||||
|
||||
plane.dev = &adev->ddev;
|
||||
plane.state = &state;
|
||||
state.fb = &fb;
|
||||
state.crtc_x = -5;
|
||||
state.crtc_y = -7;
|
||||
state.crtc_w = 32;
|
||||
state.crtc_h = 32;
|
||||
plane->dev = &adev->ddev;
|
||||
plane->state = state;
|
||||
state->fb = fb;
|
||||
state->crtc_x = -5;
|
||||
state->crtc_y = -7;
|
||||
state->crtc_w = 32;
|
||||
state->crtc_h = 32;
|
||||
|
||||
KUNIT_ASSERT_EQ(test,
|
||||
amdgpu_dm_plane_get_cursor_position(&plane, &amdgpu_crtc->base, &position),
|
||||
amdgpu_dm_plane_get_cursor_position(plane, &amdgpu_crtc->base, &position),
|
||||
0);
|
||||
KUNIT_EXPECT_TRUE(test, position.enable);
|
||||
KUNIT_EXPECT_EQ(test, position.x, 0);
|
||||
|
|
@ -466,10 +481,10 @@ static void dm_test_get_cursor_position(struct kunit *test)
|
|||
KUNIT_EXPECT_TRUE(test, position.translate_by_source);
|
||||
|
||||
memset(&position, 0, sizeof(position));
|
||||
state.crtc_x = -64;
|
||||
state.crtc_y = 0;
|
||||
state->crtc_x = -64;
|
||||
state->crtc_y = 0;
|
||||
KUNIT_ASSERT_EQ(test,
|
||||
amdgpu_dm_plane_get_cursor_position(&plane, &amdgpu_crtc->base, &position),
|
||||
amdgpu_dm_plane_get_cursor_position(plane, &amdgpu_crtc->base, &position),
|
||||
0);
|
||||
KUNIT_EXPECT_FALSE(test, position.enable);
|
||||
}
|
||||
|
|
@ -483,35 +498,37 @@ static void dm_test_get_cursor_position(struct kunit *test)
|
|||
static void dm_test_format_mod_supported(struct kunit *test)
|
||||
{
|
||||
struct amdgpu_device *adev;
|
||||
struct drm_plane plane = {0};
|
||||
struct drm_plane *plane;
|
||||
uint64_t listed_mod;
|
||||
|
||||
adev = kunit_kzalloc(test, sizeof(*adev), GFP_KERNEL);
|
||||
plane = kunit_kzalloc(test, sizeof(*plane), GFP_KERNEL);
|
||||
KUNIT_ASSERT_NOT_NULL(test, adev);
|
||||
KUNIT_ASSERT_NOT_NULL(test, plane);
|
||||
|
||||
adev->family = AMDGPU_FAMILY_NV;
|
||||
plane.dev = &adev->ddev;
|
||||
plane->dev = &adev->ddev;
|
||||
|
||||
KUNIT_EXPECT_TRUE(test,
|
||||
amdgpu_dm_plane_format_mod_supported(&plane, DRM_FORMAT_XRGB8888,
|
||||
amdgpu_dm_plane_format_mod_supported(plane, DRM_FORMAT_XRGB8888,
|
||||
DRM_FORMAT_MOD_LINEAR));
|
||||
KUNIT_EXPECT_TRUE(test,
|
||||
amdgpu_dm_plane_format_mod_supported(&plane, DRM_FORMAT_XRGB8888,
|
||||
amdgpu_dm_plane_format_mod_supported(plane, DRM_FORMAT_XRGB8888,
|
||||
DRM_FORMAT_MOD_INVALID));
|
||||
|
||||
KUNIT_EXPECT_FALSE(test,
|
||||
amdgpu_dm_plane_format_mod_supported(&plane, DRM_FORMAT_XRGB8888,
|
||||
amdgpu_dm_plane_format_mod_supported(plane, DRM_FORMAT_XRGB8888,
|
||||
DRM_FORMAT_MOD_VENDOR_AMD));
|
||||
|
||||
listed_mod = AMD_FMT_MOD |
|
||||
AMD_FMT_MOD_SET(TILE, AMD_FMT_MOD_TILE_GFX9_64K_S_X) |
|
||||
AMD_FMT_MOD_SET(TILE_VERSION, AMD_FMT_MOD_TILE_VER_GFX9) |
|
||||
AMD_FMT_MOD_SET(DCC, 1);
|
||||
plane.modifiers = &listed_mod;
|
||||
plane.modifier_count = 1;
|
||||
plane->modifiers = &listed_mod;
|
||||
plane->modifier_count = 1;
|
||||
|
||||
KUNIT_EXPECT_FALSE(test,
|
||||
amdgpu_dm_plane_format_mod_supported(&plane, DRM_FORMAT_NV12, listed_mod));
|
||||
amdgpu_dm_plane_format_mod_supported(plane, DRM_FORMAT_NV12, listed_mod));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -452,14 +452,19 @@ static void dm_test_get_plane_scale_zero_src_width(struct kunit *test)
|
|||
*/
|
||||
static void dm_test_scaling_state_same(struct kunit *test)
|
||||
{
|
||||
struct dm_connector_state a = { 0 };
|
||||
struct dm_connector_state b = { 0 };
|
||||
struct dm_connector_state *a;
|
||||
struct dm_connector_state *b;
|
||||
|
||||
a.scaling = RMX_FULL;
|
||||
a.underscan_enable = false;
|
||||
b = a;
|
||||
a = kunit_kzalloc(test, sizeof(*a), GFP_KERNEL);
|
||||
b = kunit_kzalloc(test, sizeof(*b), GFP_KERNEL);
|
||||
KUNIT_ASSERT_NOT_NULL(test, a);
|
||||
KUNIT_ASSERT_NOT_NULL(test, b);
|
||||
|
||||
KUNIT_EXPECT_FALSE(test, is_scaling_state_different(&a, &b));
|
||||
a->scaling = RMX_FULL;
|
||||
a->underscan_enable = false;
|
||||
*b = *a;
|
||||
|
||||
KUNIT_EXPECT_FALSE(test, is_scaling_state_different(a, b));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -468,13 +473,18 @@ static void dm_test_scaling_state_same(struct kunit *test)
|
|||
*/
|
||||
static void dm_test_scaling_state_scaling_changed(struct kunit *test)
|
||||
{
|
||||
struct dm_connector_state a = { 0 };
|
||||
struct dm_connector_state b = { 0 };
|
||||
struct dm_connector_state *a;
|
||||
struct dm_connector_state *b;
|
||||
|
||||
a.scaling = RMX_FULL;
|
||||
b.scaling = RMX_CENTER;
|
||||
a = kunit_kzalloc(test, sizeof(*a), GFP_KERNEL);
|
||||
b = kunit_kzalloc(test, sizeof(*b), GFP_KERNEL);
|
||||
KUNIT_ASSERT_NOT_NULL(test, a);
|
||||
KUNIT_ASSERT_NOT_NULL(test, b);
|
||||
|
||||
KUNIT_EXPECT_TRUE(test, is_scaling_state_different(&a, &b));
|
||||
a->scaling = RMX_FULL;
|
||||
b->scaling = RMX_CENTER;
|
||||
|
||||
KUNIT_EXPECT_TRUE(test, is_scaling_state_different(a, b));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -483,16 +493,21 @@ static void dm_test_scaling_state_scaling_changed(struct kunit *test)
|
|||
*/
|
||||
static void dm_test_scaling_state_underscan_enabled(struct kunit *test)
|
||||
{
|
||||
struct dm_connector_state old_state = { 0 };
|
||||
struct dm_connector_state new_state = { 0 };
|
||||
struct dm_connector_state *old_state;
|
||||
struct dm_connector_state *new_state;
|
||||
|
||||
old_state = kunit_kzalloc(test, sizeof(*old_state), GFP_KERNEL);
|
||||
new_state = kunit_kzalloc(test, sizeof(*new_state), GFP_KERNEL);
|
||||
KUNIT_ASSERT_NOT_NULL(test, old_state);
|
||||
KUNIT_ASSERT_NOT_NULL(test, new_state);
|
||||
|
||||
/* new enables underscan with non-zero borders, old has it disabled */
|
||||
new_state.underscan_enable = true;
|
||||
new_state.underscan_hborder = 16;
|
||||
new_state.underscan_vborder = 16;
|
||||
old_state.underscan_enable = false;
|
||||
new_state->underscan_enable = true;
|
||||
new_state->underscan_hborder = 16;
|
||||
new_state->underscan_vborder = 16;
|
||||
old_state->underscan_enable = false;
|
||||
|
||||
KUNIT_EXPECT_TRUE(test, is_scaling_state_different(&new_state, &old_state));
|
||||
KUNIT_EXPECT_TRUE(test, is_scaling_state_different(new_state, old_state));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -501,16 +516,21 @@ static void dm_test_scaling_state_underscan_enabled(struct kunit *test)
|
|||
*/
|
||||
static void dm_test_scaling_state_underscan_border_changed(struct kunit *test)
|
||||
{
|
||||
struct dm_connector_state a = { 0 };
|
||||
struct dm_connector_state b = { 0 };
|
||||
struct dm_connector_state *a;
|
||||
struct dm_connector_state *b;
|
||||
|
||||
a.underscan_enable = true;
|
||||
a.underscan_hborder = 16;
|
||||
a.underscan_vborder = 16;
|
||||
b = a;
|
||||
b.underscan_hborder = 32;
|
||||
a = kunit_kzalloc(test, sizeof(*a), GFP_KERNEL);
|
||||
b = kunit_kzalloc(test, sizeof(*b), GFP_KERNEL);
|
||||
KUNIT_ASSERT_NOT_NULL(test, a);
|
||||
KUNIT_ASSERT_NOT_NULL(test, b);
|
||||
|
||||
KUNIT_EXPECT_TRUE(test, is_scaling_state_different(&a, &b));
|
||||
a->underscan_enable = true;
|
||||
a->underscan_hborder = 16;
|
||||
a->underscan_vborder = 16;
|
||||
*b = *a;
|
||||
b->underscan_hborder = 32;
|
||||
|
||||
KUNIT_EXPECT_TRUE(test, is_scaling_state_different(a, b));
|
||||
}
|
||||
|
||||
/* Tests for is_timing_unchanged_for_freesync() */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user