[PATCH RFT 3/3] drm/amd/display: Add a KUnit test for the custom curve minimum
From: Hugo Sales
Date: Wed Nov 04 2026 - 09:24:48 EST
Check that convert_brightness_from_user() adds the minimum once with a
custom curve: a request for 0 gives user_min on the AUX and the PWM
range, and half the AUX range matches a value worked out by hand
Signed-off-by: Hugo Sales <hugo@xxxxxxx>
---
KUnit on UML with PROVE_LOCKING: amdgpu_dm_backlight passes 74 of 74.
Without patch 1 the new test fails with 1998, 131999 and 6023
---
.../amdgpu_dm/tests/amdgpu_dm_backlight_test.c | 40 ++++++++++++++++++++++
1 file changed, 40 insertions(+)
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 f1a558516cd8b..3d00cde8c77bc 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
@@ -1383,6 +1383,45 @@ static void dm_test_brightness_from_user_midrange(struct kunit *test)
KUNIT_EXPECT_LE(test, result, max);
}
+/**
+ * dm_test_brightness_from_user_curve_min - Test Custom curve adds the minimum once
+ * @test: The KUnit test context
+ *
+ * On the AUX range of 1..512 nits with points (50, 20%) and (200, 80%), a
+ * request for 0 must give the 1000 millinit minimum, where adding the
+ * minimum twice gave 1998. Half the scale is signal 128, luminance 51%,
+ * so 51 * 128 / 101 = 65 of 255, which is 1000 + 511000 * 65 / 255 =
+ * 131255. A request for 0 on the PWM range with min_input_signal 12 must
+ * give 12 * 0x101
+ */
+static void dm_test_brightness_from_user_curve_min(struct kunit *test)
+{
+ struct amdgpu_dm_backlight_caps caps = {};
+ uint saved_mask = amdgpu_dm_get_dc_debug_mask();
+
+ amdgpu_dm_set_dc_debug_mask(amdgpu_dm_get_dc_debug_mask() &
+ ~DC_DISABLE_CUSTOM_BRIGHTNESS_CURVE);
+
+ caps.aux_support = true;
+ caps.aux_min_input_signal = 1;
+ caps.aux_max_input_signal = 512;
+ caps.min_input_signal = 12;
+ caps.max_input_signal = AMDGPU_DM_DEFAULT_MAX_BACKLIGHT;
+ caps.data_points = 2;
+ caps.luminance_data[0].input_signal = 50;
+ caps.luminance_data[0].luminance = 20;
+ caps.luminance_data[1].input_signal = 200;
+ caps.luminance_data[1].luminance = 80;
+
+ KUNIT_EXPECT_EQ(test, convert_brightness_from_user(&caps, 0), 1000U);
+ KUNIT_EXPECT_EQ(test, convert_brightness_from_user(&caps, 256000), 131255U);
+
+ caps.aux_support = false;
+ KUNIT_EXPECT_EQ(test, convert_brightness_from_user(&caps, 0), 12U * 0x101);
+
+ amdgpu_dm_set_dc_debug_mask(saved_mask);
+}
+
/**
* dm_test_brightness_from_user_with_curve - Test Brightness from user with custom curve active
* @test: The KUnit test context
@@ -1976,6 +2015,7 @@ static struct kunit_case dm_backlight_test_cases[] = {
KUNIT_CASE(dm_test_brightness_to_user_above_max),
KUNIT_CASE(dm_test_brightness_from_user_midrange),
KUNIT_CASE(dm_test_brightness_from_user_with_curve),
+ KUNIT_CASE(dm_test_brightness_from_user_curve_min),
KUNIT_CASE(dm_test_brightness_range_zero_signals),
/* amdgpu_dm_backlight_fill_props */
KUNIT_CASE(dm_test_backlight_fill_props_ac_linear),
--
2.56.0