[PATCH 20/41] drm/amd/display: Add KUnit tests for crtc set_static_screen_optimze
<[email protected]> Fri, 31 Jul 2026 17:12:41 -0400
| Newsgroups | org.freedesktop.lists.amd-gfx |
|---|---|
| Message-ID | <[email protected]> |
From: Bhawanpreet Lakha <[email protected]> Add dm_test_crtc_set_static_screen_optimze_sr_entry_psr and dm_test_crtc_set_static_screen_optimze_psr_su_skips to cover the allow_sr_entry == true path of amdgpu_dm_crtc_set_static_screen_optimze(): the replay/PSR event updates when psr_version < DC_PSR_VERSION_SU_1, and skipping the PSR event update when psr_version is DC_PSR_VERSION_SU_1. Assisted-by: Copilot:Claude-Opus-4.8 Reviewed-by: Alex Hung <[email protected]> Signed-off-by: Bhawanpreet Lakha <[email protected]> Signed-off-by: Roman Li <[email protected]> --- .../amdgpu_dm/tests/amdgpu_dm_crtc_test.c | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_crtc_test.c b/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_crtc_test.c index db98e42c561b..fa4986153eda 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_crtc_test.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_crtc_test.c @@ -756,6 +756,59 @@ static void dm_test_crtc_set_static_screen_optimze_no_sr_entry(struct kunit *tes amdgpu_dm_crtc_set_static_screen_optimze(dm, stream, false, false); } +/** + * dm_test_crtc_set_static_screen_optimze_sr_entry_psr - Test SSO toggle drives PSR + * @test: The KUnit test context + * + * With self-refresh entry allowed and a PSR version below DC_PSR_VERSION_SU_1, + * the function must run both the replay and PSR event updates. The link has no + * replay/PSR feature enabled, so both event helpers short-circuit safely. Both + * SSO states are exercised to cover the set_vsync_event computation. + */ +static void dm_test_crtc_set_static_screen_optimze_sr_entry_psr(struct kunit *test) +{ + struct amdgpu_display_manager *dm; + struct dc_link *link; + struct dc_stream_state *stream; + + dm = kunit_kzalloc(test, sizeof(*dm), GFP_KERNEL); + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, dm); + + link = dm_kunit_alloc_link(test); + stream = dm_kunit_alloc_stream(test, link); + + /* psr_version < DC_PSR_VERSION_SU_1 -> PSR event branch is taken. */ + link->psr_settings.psr_version = DC_PSR_VERSION_1; + + amdgpu_dm_crtc_set_static_screen_optimze(dm, stream, true, true); + amdgpu_dm_crtc_set_static_screen_optimze(dm, stream, false, true); +} + +/** + * dm_test_crtc_set_static_screen_optimze_psr_su_skips - Test PSR SU skips PSR event + * @test: The KUnit test context + * + * With self-refresh entry allowed and a PSR version of DC_PSR_VERSION_SU_1, the + * function must update the replay event but skip the PSR event update. + */ +static void dm_test_crtc_set_static_screen_optimze_psr_su_skips(struct kunit *test) +{ + struct amdgpu_display_manager *dm; + struct dc_link *link; + struct dc_stream_state *stream; + + dm = kunit_kzalloc(test, sizeof(*dm), GFP_KERNEL); + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, dm); + + link = dm_kunit_alloc_link(test); + stream = dm_kunit_alloc_stream(test, link); + + /* psr_version >= DC_PSR_VERSION_SU_1 -> PSR event branch is skipped. */ + link->psr_settings.psr_version = DC_PSR_VERSION_SU_1; + + amdgpu_dm_crtc_set_static_screen_optimze(dm, stream, true, true); +} + /* Tests for amdgpu_dm_crtc_enable_vblank() */ /** @@ -1295,6 +1348,8 @@ static struct kunit_case amdgpu_dm_crtc_tests[] = { KUNIT_CASE(dm_test_idle_worker_enabled_runs_body), /* amdgpu_dm_crtc_set_static_screen_optimze */ KUNIT_CASE(dm_test_crtc_set_static_screen_optimze_no_sr_entry), + KUNIT_CASE(dm_test_crtc_set_static_screen_optimze_sr_entry_psr), + KUNIT_CASE(dm_test_crtc_set_static_screen_optimze_psr_su_skips), /* amdgpu_dm_crtc_enable_vblank */ KUNIT_CASE(dm_test_crtc_enable_vblank_rejects_unconfigured), /* amdgpu_dm_crtc_update_crtc_active_planes */ -- 2.34.1