From: Alex Hung <[email protected]> [WHAT] Add KUnit tests for dm_should_disable_stutter covering a full quirk match, a non-matching device, and a partial match that differs only in the PCI revision.
Assisted-by: Copilot:Claude-Opus-4.8 Reviewed-by: Bhawanpreet Lakha <[email protected]> Signed-off-by: Alex Hung <[email protected]> Signed-off-by: Wayne Lin <[email protected]> --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 3 +- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 2 + .../display/amdgpu_dm/tests/amdgpu_dm_test.c | 64 +++++++++++++++++++ 3 files changed, 68 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c index 8fe7e125e14a..8195ca386419 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -424,7 +424,7 @@ static const struct amdgpu_stutter_quirk amdgpu_stutter_quirk_list[] = { { 0, 0, 0, 0, 0 }, }; -static bool dm_should_disable_stutter(struct pci_dev *pdev) +STATIC_IFN_KUNIT bool dm_should_disable_stutter(struct pci_dev *pdev) { const struct amdgpu_stutter_quirk *p = amdgpu_stutter_quirk_list; @@ -440,6 +440,7 @@ static bool dm_should_disable_stutter(struct pci_dev *pdev) } return false; } +EXPORT_IF_KUNIT(dm_should_disable_stutter); void* diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h index 897434504459..84c0bcfc093f 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h @@ -1178,6 +1178,8 @@ bool is_dc_timing_adjust_needed(struct dm_crtc_state *old_state, struct dm_crtc_state *new_state); void set_multisync_trigger_params(struct dc_stream_state *stream); void set_master_stream(struct dc_stream_state *stream_set[], int stream_count); +struct pci_dev; +bool dm_should_disable_stutter(struct pci_dev *pdev); void reset_freesync_config_for_crtc(struct dm_crtc_state *new_crtc_state); void get_freesync_config_for_crtc(struct dm_crtc_state *new_crtc_state, struct dm_connector_state *new_con_state); diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_test.c b/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_test.c index b988198418c6..dfdef08343a4 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_test.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_test.c @@ -1937,6 +1937,66 @@ static void dm_test_per_frame_master_sync_skips_null_stream(struct kunit *test) stream); } +/* Tests for dm_should_disable_stutter() */ + +/** + * dm_test_should_disable_stutter_match - Test the quirk device matches + * @test: The KUnit test context + */ +static void dm_test_should_disable_stutter_match(struct kunit *test) +{ + struct pci_dev *pdev; + + pdev = kunit_kzalloc(test, sizeof(*pdev), GFP_KERNEL); + KUNIT_ASSERT_NOT_NULL(test, pdev); + + pdev->vendor = 0x1002; + pdev->device = 0x15dd; + pdev->subsystem_vendor = 0x1002; + pdev->subsystem_device = 0x15dd; + pdev->revision = 0xc8; + + KUNIT_EXPECT_TRUE(test, dm_should_disable_stutter(pdev)); +} + +/** + * dm_test_should_disable_stutter_no_match - Test a non-quirk device does not match + * @test: The KUnit test context + */ +static void dm_test_should_disable_stutter_no_match(struct kunit *test) +{ + struct pci_dev *pdev; + + pdev = kunit_kzalloc(test, sizeof(*pdev), GFP_KERNEL); + KUNIT_ASSERT_NOT_NULL(test, pdev); + + pdev->vendor = 0x1002; + pdev->device = 0x1234; + + KUNIT_EXPECT_FALSE(test, dm_should_disable_stutter(pdev)); +} + +/** + * dm_test_should_disable_stutter_revision_differs - Test a partial match (revision) fails + * @test: The KUnit test context + */ +static void dm_test_should_disable_stutter_revision_differs(struct kunit *test) +{ + struct pci_dev *pdev; + + pdev = kunit_kzalloc(test, sizeof(*pdev), GFP_KERNEL); + KUNIT_ASSERT_NOT_NULL(test, pdev); + + /* Everything matches the quirk except the revision */ + pdev->vendor = 0x1002; + pdev->device = 0x15dd; + pdev->subsystem_vendor = 0x1002; + pdev->subsystem_device = 0x15dd; + pdev->revision = 0x00; + + KUNIT_EXPECT_FALSE(test, dm_should_disable_stutter(pdev)); +} + static struct kunit_case amdgpu_dm_tests[] = { /* Simple DM callbacks */ KUNIT_CASE(dm_test_is_idle), @@ -2042,6 +2102,10 @@ static struct kunit_case amdgpu_dm_tests[] = { KUNIT_CASE(dm_test_per_frame_master_sync_single_stream), KUNIT_CASE(dm_test_per_frame_master_sync_two_streams), KUNIT_CASE(dm_test_per_frame_master_sync_skips_null_stream), + /* dm_should_disable_stutter */ + KUNIT_CASE(dm_test_should_disable_stutter_match), + KUNIT_CASE(dm_test_should_disable_stutter_no_match), + KUNIT_CASE(dm_test_should_disable_stutter_revision_differs), {} }; -- 2.43.0
