summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Hung <alex.hung@amd.com>2026-06-29 18:45:19 -0600
committerAlex Deucher <alexander.deucher@amd.com>2026-07-15 09:15:40 -0400
commit9e8d7ca4cfde3ec44bb9e661534ea08e6cb89dc6 (patch)
treeaea3244fbba0ca23bd97d3e0677b78207d333c9f
parentdb546ee97153c95ea719da015cf002f970175605 (diff)
downloadlinux-9e8d7ca4cfde3ec44bb9e661534ea08e6cb89dc6.tar.gz
linux-9e8d7ca4cfde3ec44bb9e661534ea08e6cb89dc6.zip
drm/amd/display: Test backlight ABM property attach
[WHAT] Cover the eDP success path of amdgpu_dm_setup_backlight_device() where the ABM level property is attached to the connector. A DRM-managed connector fixture (drmm_mode_config_init + drmm_connector_init) lets the test verify that one property is added and that its value is ABM_SYSFS_CONTROL. Assisted-by: Copilot:Claude-Opus-4.8 Reviewed-by: Bhawanpreet Lakha <bhawanpreet.lakha@amd.com> Signed-off-by: Alex Hung <alex.hung@amd.com> Signed-off-by: George Zhang <george.zhang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_backlight_test.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_backlight_test.c b/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_backlight_test.c
index b74bbbc7f56f..f55f93747df7 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_backlight_test.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_backlight_test.c
@@ -16,6 +16,7 @@
#include "dc.h"
#include "dc_dmub_srv.h"
#include "amdgpu.h"
+#include "amdgpu_display.h"
#include "amdgpu_mode.h"
#include "amdgpu_dm.h"
#include "amdgpu_dm_backlight.h"
@@ -30,6 +31,12 @@ struct dm_backlight_connector_fixture {
struct dc_link *link;
};
+static const struct drm_connector_funcs dm_backlight_test_connector_funcs = {
+ .reset = drm_atomic_helper_connector_reset,
+ .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
+ .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
+};
+
static void setup_test_connector(struct kunit *test,
struct dm_backlight_connector_fixture *fixture,
int bl_idx, enum signal_type signal)
@@ -1787,6 +1794,61 @@ static void dm_test_setup_backlight_device_oled_success(struct kunit *test)
amdgpu_dm_set_abm_level_param(saved_abm_level);
}
+/**
+ * dm_test_setup_backlight_device_attaches_abm_property - Test ABM property path
+ * @test: The KUnit test context
+ */
+static void dm_test_setup_backlight_device_attaches_abm_property(struct kunit *test)
+{
+ struct amdgpu_dm_connector *aconnector;
+ struct amdgpu_display_manager *dm;
+ struct amdgpu_device *adev;
+ struct drm_property *prop;
+ struct dc_link *link;
+ int saved_abm_level = amdgpu_dm_get_abm_level_param();
+ int saved_backlight = amdgpu_dm_get_backlight_param();
+ int old_count;
+ int ret;
+
+ amdgpu_dm_set_abm_level_param(-1);
+ amdgpu_dm_set_backlight_param(-1);
+ adev = dm_kunit_alloc_adev(test);
+ ret = drmm_mode_config_init(&adev->ddev);
+ KUNIT_ASSERT_EQ(test, ret, 0);
+
+ prop = drm_property_create_range(&adev->ddev, 0, "abm level", 0, 4);
+ KUNIT_ASSERT_NOT_ERR_OR_NULL(test, prop);
+ adev->mode_info.abm_level_property = prop;
+
+ aconnector = dm_kunit_alloc_connector(test, adev, NULL);
+ ret = drmm_connector_init(&adev->ddev, &aconnector->base,
+ &dm_backlight_test_connector_funcs,
+ DRM_MODE_CONNECTOR_eDP, NULL);
+ KUNIT_ASSERT_EQ(test, ret, 0);
+
+ link = dm_kunit_alloc_link(test);
+ link->connector_signal = SIGNAL_TYPE_EDP;
+ link->type = dc_connection_single;
+ aconnector->dc_link = link;
+ aconnector->bl_idx = -1;
+ dm = &adev->dm;
+ dm->adev = adev;
+ dm->ddev = &adev->ddev;
+ old_count = aconnector->base.base.properties->count;
+
+ amdgpu_dm_setup_backlight_device(dm, aconnector);
+
+ KUNIT_EXPECT_EQ(test, dm->num_of_edps, 1);
+ KUNIT_EXPECT_EQ(test, aconnector->bl_idx, 0);
+ KUNIT_EXPECT_EQ(test, aconnector->base.base.properties->count, old_count + 1);
+ KUNIT_EXPECT_PTR_EQ(test, aconnector->base.base.properties->properties[old_count], prop);
+ KUNIT_EXPECT_EQ(test, aconnector->base.base.properties->values[old_count],
+ (uint64_t)ABM_SYSFS_CONTROL);
+
+ amdgpu_dm_set_backlight_param(saved_backlight);
+ amdgpu_dm_set_abm_level_param(saved_abm_level);
+}
+
static struct kunit_case dm_backlight_test_cases[] = {
/* dm_find_stream_with_link */
KUNIT_CASE(dm_test_find_stream_with_link_returns_match),
@@ -1872,6 +1934,7 @@ static struct kunit_case dm_backlight_test_cases[] = {
KUNIT_CASE(dm_test_setup_backlight_device_connection_none),
KUNIT_CASE(dm_test_setup_backlight_device_max_edps),
KUNIT_CASE(dm_test_setup_backlight_device_oled_success),
+ KUNIT_CASE(dm_test_setup_backlight_device_attaches_abm_property),
{}
};