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>
This commit is contained in:
Alex Hung
2026-06-29 18:45:19 -06:00
committed by Alex Deucher
parent db546ee971
commit 9e8d7ca4cf

View File

@@ -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),
{}
};