[PATCH 23/34] drm/amd/display: test native cursor state check
Tom Chung <[email protected]> Wed, 5 Aug 2026 14:36:35 +0800
| Newsgroups | org.freedesktop.lists.amd-gfx |
|---|---|
| Message-ID | <[email protected]> |
From: Alex Hung <[email protected]> [WHAT] Add three KUnit tests for amdgpu_dm_check_native_cursor_state(), reusing the cursor framebuffer fixture, covering the disabled-cursor path, rejection of a non-zero source offset, and delegation to the framebuffer check. Assisted-by: Copilot:GPT-5.6-Sol Reviewed-by: Bhawanpreet Lakha <[email protected]> Signed-off-by: Alex Hung <[email protected]> Signed-off-by: Tom Chung <[email protected]> --- .../amd/display/amdgpu_dm/amdgpu_dm_cursor.c | 1 + .../amdgpu_dm/tests/amdgpu_dm_cursor_test.c | 79 +++++++++++++++++++ 2 files changed, 80 insertions(+) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_cursor.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_cursor.c index 953ad34918af..2b4801fa26af 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_cursor.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_cursor.c @@ -143,6 +143,7 @@ int amdgpu_dm_check_native_cursor_state(struct drm_crtc *new_plane_crtc, return 0; } +EXPORT_IF_KUNIT(amdgpu_dm_check_native_cursor_state); bool amdgpu_dm_should_update_native_cursor(struct drm_atomic_commit *state, struct drm_crtc *old_plane_crtc, diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_cursor_test.c b/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_cursor_test.c index f2ac94805777..78a4b40fad3e 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_cursor_test.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_cursor_test.c @@ -203,6 +203,81 @@ static void dm_test_check_cursor_fb_modifier_skips_tiling(struct kunit *test) 0); } +/* Tests for amdgpu_dm_check_native_cursor_state() */ + +/** + * dm_test_check_native_cursor_state_disabled - Test disabled cursor needs no validation + * @test: The KUnit test context + */ +static void dm_test_check_native_cursor_state_disabled(struct kunit *test) +{ + KUNIT_EXPECT_EQ(test, + amdgpu_dm_check_native_cursor_state(NULL, NULL, NULL, false), + 0); +} + +/** + * dm_test_check_native_cursor_state_rejects_offset - Test source offset rejection + * @test: The KUnit test context + */ +static void dm_test_check_native_cursor_state_rejects_offset(struct kunit *test) +{ + struct amdgpu_device *adev = dm_kunit_alloc_adev(test); + struct amdgpu_crtc *acrtc; + struct drm_plane *plane; + struct drm_plane_state *old_plane_state; + struct drm_plane_state *new_plane_state; + int ret; + + acrtc = kunit_kzalloc(test, sizeof(*acrtc), GFP_KERNEL); + KUNIT_ASSERT_NOT_NULL(test, acrtc); + plane = kunit_kzalloc(test, sizeof(*plane), GFP_KERNEL); + KUNIT_ASSERT_NOT_NULL(test, plane); + old_plane_state = kunit_kzalloc(test, sizeof(*old_plane_state), GFP_KERNEL); + KUNIT_ASSERT_NOT_NULL(test, old_plane_state); + new_plane_state = kunit_kzalloc(test, sizeof(*new_plane_state), GFP_KERNEL); + KUNIT_ASSERT_NOT_NULL(test, new_plane_state); + + acrtc->base.dev = &adev->ddev; + old_plane_state->crtc = &acrtc->base; + new_plane_state->crtc = &acrtc->base; + new_plane_state->src_x = 1; + plane->state = old_plane_state; + + ret = amdgpu_dm_check_native_cursor_state(&acrtc->base, plane, + new_plane_state, true); + KUNIT_EXPECT_EQ(test, ret, -EINVAL); +} + +/** + * dm_test_check_native_cursor_state_checks_fb - Test framebuffer validation propagation + * @test: The KUnit test context + */ +static void dm_test_check_native_cursor_state_checks_fb(struct kunit *test) +{ + struct dm_cursor_fb_fixture fixture = dm_test_alloc_cursor_fb_fixture(test); + struct drm_plane *plane; + struct drm_plane_state *old_plane_state; + int ret; + + plane = kunit_kzalloc(test, sizeof(*plane), GFP_KERNEL); + KUNIT_ASSERT_NOT_NULL(test, plane); + old_plane_state = kunit_kzalloc(test, sizeof(*old_plane_state), GFP_KERNEL); + KUNIT_ASSERT_NOT_NULL(test, old_plane_state); + old_plane_state->crtc = &fixture.acrtc->base; + fixture.plane_state->crtc = &fixture.acrtc->base; + plane->state = old_plane_state; + + ret = amdgpu_dm_check_native_cursor_state(&fixture.acrtc->base, plane, + fixture.plane_state, true); + KUNIT_EXPECT_EQ(test, ret, 0); + + fixture.afb->base.width = fixture.acrtc->max_cursor_width + 1; + ret = amdgpu_dm_check_native_cursor_state(&fixture.acrtc->base, plane, + fixture.plane_state, true); + KUNIT_EXPECT_EQ(test, ret, -EINVAL); +} + /* Tests for amdgpu_dm_should_update_native_cursor() */ /** @@ -436,6 +511,10 @@ static struct kunit_case amdgpu_dm_cursor_tests[] = { KUNIT_CASE(dm_test_check_cursor_fb_gfx12_tiling), KUNIT_CASE(dm_test_check_cursor_fb_pre_ai_tiling), KUNIT_CASE(dm_test_check_cursor_fb_modifier_skips_tiling), + /* amdgpu_dm_check_native_cursor_state */ + KUNIT_CASE(dm_test_check_native_cursor_state_disabled), + KUNIT_CASE(dm_test_check_native_cursor_state_rejects_offset), + KUNIT_CASE(dm_test_check_native_cursor_state_checks_fb), /* amdgpu_dm_should_update_native_cursor */ KUNIT_CASE(dm_test_should_update_native_cursor_without_crtc), KUNIT_CASE(dm_test_should_update_native_cursor_disable_native), -- 2.43.0