[PATCH 24/34] drm/amd/display: test dm_plane_color_pipeline_active
Tom Chung <[email protected]> Wed, 5 Aug 2026 14:36:36 +0800
| Newsgroups | org.freedesktop.lists.amd-gfx |
|---|---|
| Message-ID | <[email protected]> |
From: Alex Hung <[email protected]> [WHAT] Add two KUnit tests for dm_plane_color_pipeline_active(): one confirming an active pipeline is detected, and one confirming colorops on an unrelated plane are ignored. 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 | 7 +- .../amd/display/amdgpu_dm/amdgpu_dm_cursor.h | 3 + .../amdgpu_dm/tests/amdgpu_dm_cursor_test.c | 83 +++++++++++++++++++ 3 files changed, 90 insertions(+), 3 deletions(-) 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 2b4801fa26af..34b5f2b28e91 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 @@ -235,9 +235,9 @@ EXPORT_IF_KUNIT(dm_get_plane_scale); * * Return: true if the pipeline modifies pixels, false otherwise. */ -static bool dm_plane_color_pipeline_active(struct drm_atomic_commit *state, - struct drm_plane *plane, - bool use_old) +STATIC_IFN_KUNIT bool dm_plane_color_pipeline_active(struct drm_atomic_commit *state, + struct drm_plane *plane, + bool use_old) { struct drm_colorop *colorop; struct drm_colorop_state *old_colorop_state, *new_colorop_state; @@ -253,6 +253,7 @@ static bool dm_plane_color_pipeline_active(struct drm_atomic_commit *state, } return false; } +EXPORT_IF_KUNIT(dm_plane_color_pipeline_active); /** * amdgpu_dm_crtc_get_cursor_mode() - Determine the required cursor mode on crtc diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_cursor.h b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_cursor.h index 8879888745eb..cda6d73e9bda 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_cursor.h +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_cursor.h @@ -46,6 +46,9 @@ int amdgpu_dm_crtc_get_cursor_mode(struct amdgpu_device *adev, int dm_check_cursor_fb(struct amdgpu_crtc *new_acrtc, struct drm_plane_state *new_plane_state, struct drm_framebuffer *fb); +bool dm_plane_color_pipeline_active(struct drm_atomic_commit *state, + struct drm_plane *plane, + bool use_old); void dm_get_oriented_plane_size(struct drm_plane_state *plane_state, int *src_w, int *src_h); void dm_get_plane_scale(struct drm_plane_state *plane_state, 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 78a4b40fad3e..e093420bb2fd 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 @@ -8,6 +8,7 @@ #include <kunit/test.h> #include <drm/drm_atomic.h> #include <drm/drm_blend.h> +#include <drm/drm_colorop.h> #include <drm/drm_crtc.h> #include <drm/drm_fourcc.h> #include <drm/drm_framebuffer.h> @@ -278,6 +279,85 @@ static void dm_test_check_native_cursor_state_checks_fb(struct kunit *test) KUNIT_EXPECT_EQ(test, ret, -EINVAL); } +/* Tests for dm_plane_color_pipeline_active() */ + +/** + * dm_test_plane_color_pipeline_active - Test old and new colorop activity + * @test: The KUnit test context + */ +static void dm_test_plane_color_pipeline_active(struct kunit *test) +{ + struct amdgpu_device *adev = dm_kunit_alloc_adev(test); + struct drm_atomic_commit *state; + struct drm_colorop *colorop; + struct drm_colorop_state *old_colorop_state; + struct drm_colorop_state *new_colorop_state; + struct drm_plane *plane; + + state = kunit_kzalloc(test, sizeof(*state), GFP_KERNEL); + KUNIT_ASSERT_NOT_NULL(test, state); + colorop = kunit_kzalloc(test, sizeof(*colorop), GFP_KERNEL); + KUNIT_ASSERT_NOT_NULL(test, colorop); + old_colorop_state = kunit_kzalloc(test, sizeof(*old_colorop_state), GFP_KERNEL); + KUNIT_ASSERT_NOT_NULL(test, old_colorop_state); + new_colorop_state = kunit_kzalloc(test, sizeof(*new_colorop_state), GFP_KERNEL); + KUNIT_ASSERT_NOT_NULL(test, new_colorop_state); + plane = kunit_kzalloc(test, sizeof(*plane), GFP_KERNEL); + KUNIT_ASSERT_NOT_NULL(test, plane); + state->colorops = kunit_kzalloc(test, sizeof(*state->colorops), GFP_KERNEL); + KUNIT_ASSERT_NOT_NULL(test, state->colorops); + + adev->ddev.mode_config.num_colorop = 1; + state->dev = &adev->ddev; + state->colorops[0].ptr = colorop; + state->colorops[0].old_state = old_colorop_state; + state->colorops[0].new_state = new_colorop_state; + colorop->plane = plane; + old_colorop_state->colorop = colorop; + old_colorop_state->bypass = true; + new_colorop_state->colorop = colorop; + new_colorop_state->bypass = false; + + KUNIT_EXPECT_FALSE(test, dm_plane_color_pipeline_active(state, plane, true)); + KUNIT_EXPECT_TRUE(test, dm_plane_color_pipeline_active(state, plane, false)); +} + +/** + * dm_test_plane_color_pipeline_ignores_other_plane - Test unrelated colorops are ignored + * @test: The KUnit test context + */ +static void dm_test_plane_color_pipeline_ignores_other_plane(struct kunit *test) +{ + struct amdgpu_device *adev = dm_kunit_alloc_adev(test); + struct drm_atomic_commit *state; + struct drm_colorop *colorop; + struct drm_colorop_state *colorop_state; + struct drm_plane *colorop_plane; + struct drm_plane *other_plane; + + state = kunit_kzalloc(test, sizeof(*state), GFP_KERNEL); + KUNIT_ASSERT_NOT_NULL(test, state); + colorop = kunit_kzalloc(test, sizeof(*colorop), GFP_KERNEL); + KUNIT_ASSERT_NOT_NULL(test, colorop); + colorop_state = kunit_kzalloc(test, sizeof(*colorop_state), GFP_KERNEL); + KUNIT_ASSERT_NOT_NULL(test, colorop_state); + colorop_plane = kunit_kzalloc(test, sizeof(*colorop_plane), GFP_KERNEL); + KUNIT_ASSERT_NOT_NULL(test, colorop_plane); + other_plane = kunit_kzalloc(test, sizeof(*other_plane), GFP_KERNEL); + KUNIT_ASSERT_NOT_NULL(test, other_plane); + state->colorops = kunit_kzalloc(test, sizeof(*state->colorops), GFP_KERNEL); + KUNIT_ASSERT_NOT_NULL(test, state->colorops); + + adev->ddev.mode_config.num_colorop = 1; + state->dev = &adev->ddev; + state->colorops[0].ptr = colorop; + state->colorops[0].new_state = colorop_state; + colorop->plane = colorop_plane; + colorop_state->colorop = colorop; + + KUNIT_EXPECT_FALSE(test, dm_plane_color_pipeline_active(state, other_plane, false)); +} + /* Tests for amdgpu_dm_should_update_native_cursor() */ /** @@ -515,6 +595,9 @@ static struct kunit_case amdgpu_dm_cursor_tests[] = { 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), + /* dm_plane_color_pipeline_active */ + KUNIT_CASE(dm_test_plane_color_pipeline_active), + KUNIT_CASE(dm_test_plane_color_pipeline_ignores_other_plane), /* 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