mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-30 12:13:51 -04:00
drm/amd/display: Add stream validation tests for connector
Add KUnit coverage for amdgpu_dm_create_validate_stream_for_sink() and amdgpu_dm_connector_funcs_update_after_detect(): null dm_state, MST no-op, and unchanged sink handling. Assisted-by: Copilot:Claude-Opus-4.8 Reviewed-by: Alex Hung <alex.hung@amd.com> Signed-off-by: Bhawanpreet Lakha <bhawanpreet.lakha@amd.com> Signed-off-by: Wayne Lin <wayne.lin@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
committed by
Alex Deucher
parent
ec3938e1a9
commit
5af478e1dd
@@ -659,6 +659,7 @@ void amdgpu_dm_update_connector_after_detect(
|
||||
if (!drm_kms_helper_is_poll_worker())
|
||||
mutex_unlock(&dev->mode_config.mutex);
|
||||
}
|
||||
EXPORT_IF_KUNIT(amdgpu_dm_update_connector_after_detect);
|
||||
|
||||
enum dc_color_depth
|
||||
amdgpu_dm_convert_color_depth_from_display_info(const struct drm_connector *connector,
|
||||
@@ -2276,6 +2277,7 @@ amdgpu_dm_create_validate_stream_for_sink(struct drm_connector *connector,
|
||||
|
||||
return stream;
|
||||
}
|
||||
EXPORT_IF_KUNIT(amdgpu_dm_create_validate_stream_for_sink);
|
||||
|
||||
enum drm_mode_status amdgpu_dm_connector_mode_valid(struct drm_connector *connector,
|
||||
const struct drm_display_mode *mode)
|
||||
|
||||
@@ -4997,6 +4997,69 @@ static void dm_test_s3_handle_hdmi_cec_resume(struct kunit *test)
|
||||
amdgpu_dm_s3_handle_hdmi_cec(drm, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* dm_test_create_validate_stream_null_dm_state - Test NULL state returns NULL
|
||||
* @test: The KUnit test context
|
||||
*
|
||||
* Without a connector state there is nothing to validate against, so the
|
||||
* helper bails out with NULL before touching the dc handle.
|
||||
*/
|
||||
static void dm_test_create_validate_stream_null_dm_state(struct kunit *test)
|
||||
{
|
||||
struct amdgpu_dm_connector *aconnector;
|
||||
|
||||
aconnector = kunit_kzalloc(test, sizeof(*aconnector), GFP_KERNEL);
|
||||
KUNIT_ASSERT_NOT_NULL(test, aconnector);
|
||||
|
||||
KUNIT_EXPECT_NULL(test,
|
||||
amdgpu_dm_create_validate_stream_for_sink(&aconnector->base,
|
||||
NULL, NULL, NULL));
|
||||
}
|
||||
|
||||
/**
|
||||
* dm_test_update_after_detect_mst_noop - Test MST connectors are left to drm_mst
|
||||
* @test: The KUnit test context
|
||||
*
|
||||
* An MST connector is handled by the drm_mst framework, so the function
|
||||
* returns immediately and never dereferences the (NULL) dc_link.
|
||||
*/
|
||||
static void dm_test_update_after_detect_mst_noop(struct kunit *test)
|
||||
{
|
||||
struct amdgpu_dm_connector *aconnector;
|
||||
|
||||
aconnector = kunit_kzalloc(test, sizeof(*aconnector), GFP_KERNEL);
|
||||
KUNIT_ASSERT_NOT_NULL(test, aconnector);
|
||||
|
||||
aconnector->mst_mgr.mst_state = true;
|
||||
|
||||
amdgpu_dm_update_connector_after_detect(aconnector);
|
||||
}
|
||||
|
||||
/**
|
||||
* dm_test_update_after_detect_sink_unchanged - Test the short-pulse no-op path
|
||||
* @test: The KUnit test context
|
||||
*
|
||||
* When the link reports no local sink and the connector already has no
|
||||
* dc_sink, the "sink didn't change" path returns without touching DC.
|
||||
*/
|
||||
static void dm_test_update_after_detect_sink_unchanged(struct kunit *test)
|
||||
{
|
||||
struct drm_device *drm = dm_test_alloc_drm(test);
|
||||
struct amdgpu_dm_connector *aconnector;
|
||||
struct dc_link *link;
|
||||
|
||||
aconnector = dm_test_add_connector(test, drm, DRM_MODE_CONNECTOR_HDMIA);
|
||||
link = kunit_kzalloc(test, sizeof(*link), GFP_KERNEL);
|
||||
KUNIT_ASSERT_NOT_NULL(test, link);
|
||||
|
||||
aconnector->dc_link = link;
|
||||
|
||||
/* link->local_sink and aconnector->dc_sink are both NULL. */
|
||||
amdgpu_dm_update_connector_after_detect(aconnector);
|
||||
|
||||
KUNIT_EXPECT_NULL(test, aconnector->dc_sink);
|
||||
}
|
||||
|
||||
static struct kunit_case amdgpu_dm_connector_tests[] = {
|
||||
/* get_subconnector_type */
|
||||
KUNIT_CASE(dm_test_subconnector_type_none),
|
||||
@@ -5271,6 +5334,11 @@ static struct kunit_case amdgpu_dm_connector_tests[] = {
|
||||
/* amdgpu_dm_s3_handle_hdmi_cec */
|
||||
KUNIT_CASE(dm_test_s3_handle_hdmi_cec_suspend),
|
||||
KUNIT_CASE(dm_test_s3_handle_hdmi_cec_resume),
|
||||
/* amdgpu_dm_create_validate_stream_for_sink */
|
||||
KUNIT_CASE(dm_test_create_validate_stream_null_dm_state),
|
||||
/* amdgpu_dm_update_connector_after_detect */
|
||||
KUNIT_CASE(dm_test_update_after_detect_mst_noop),
|
||||
KUNIT_CASE(dm_test_update_after_detect_sink_unchanged),
|
||||
{}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user