mirror of
https://github.com/torvalds/linux.git
synced 2026-11-09 13:44:03 +01:00
drm/amd/display: Test backlight caps validation
[WHAT] The sanity check applied to the backlight caps reported by the firmware sits inside a CONFIG_ACPI block. The UML KUnit build cannot enable CONFIG_ACPI, so that logic is never built and stays uncovered. [HOW] Move the check into amdgpu_dm_validate_backlight_caps() and build it whenever CONFIG_ACPI or the KUnit tests are enabled. Behaviour of amdgpu_dm_update_backlight_caps() is unchanged. Add a parameterized test for amdgpu_dm_validate_backlight_caps() covering sane caps, a max above the 8-bit range, a negative min and a spread narrower than AMDGPU_DM_MIN_SPREAD. Assisted-by: Copilot:Claude-Opus-5 Reviewed-by: Bhawanpreet Lakha <bhawanpreet.lakha@amd.com> Signed-off-by: Alex Hung <alex.hung@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
86b6d8b281
commit
4c812f0d8c
|
|
@ -49,6 +49,25 @@
|
|||
#include "amd_shared.h"
|
||||
#include "dm_helpers.h"
|
||||
|
||||
#if defined(CONFIG_ACPI) || IS_ENABLED(CONFIG_DRM_AMD_DC_KUNIT_TEST)
|
||||
STATIC_IFN_KUNIT
|
||||
void amdgpu_dm_validate_backlight_caps(struct amdgpu_display_manager *dm, int bl_idx)
|
||||
{
|
||||
struct amdgpu_dm_backlight_caps *caps = &dm->backlight_caps[bl_idx];
|
||||
int spread = caps->max_input_signal - caps->min_input_signal;
|
||||
|
||||
if (caps->max_input_signal > AMDGPU_DM_DEFAULT_MAX_BACKLIGHT ||
|
||||
caps->min_input_signal < 0 ||
|
||||
spread > AMDGPU_DM_DEFAULT_MAX_BACKLIGHT ||
|
||||
spread < AMDGPU_DM_MIN_SPREAD) {
|
||||
drm_dbg_kms(adev_to_drm(dm->adev), "DM: Invalid backlight caps: min=%d, max=%d\n",
|
||||
caps->min_input_signal, caps->max_input_signal);
|
||||
caps->caps_valid = false;
|
||||
}
|
||||
}
|
||||
EXPORT_IF_KUNIT(amdgpu_dm_validate_backlight_caps);
|
||||
#endif
|
||||
|
||||
void amdgpu_dm_update_backlight_caps(struct amdgpu_display_manager *dm,
|
||||
int bl_idx)
|
||||
{
|
||||
|
|
@ -61,18 +80,8 @@ void amdgpu_dm_update_backlight_caps(struct amdgpu_display_manager *dm,
|
|||
amdgpu_acpi_get_backlight_caps(caps);
|
||||
|
||||
/* validate the firmware value is sane */
|
||||
if (caps->caps_valid) {
|
||||
int spread = caps->max_input_signal - caps->min_input_signal;
|
||||
|
||||
if (caps->max_input_signal > AMDGPU_DM_DEFAULT_MAX_BACKLIGHT ||
|
||||
caps->min_input_signal < 0 ||
|
||||
spread > AMDGPU_DM_DEFAULT_MAX_BACKLIGHT ||
|
||||
spread < AMDGPU_DM_MIN_SPREAD) {
|
||||
drm_dbg_kms(adev_to_drm(dm->adev), "DM: Invalid backlight caps: min=%d, max=%d\n",
|
||||
caps->min_input_signal, caps->max_input_signal);
|
||||
caps->caps_valid = false;
|
||||
}
|
||||
}
|
||||
if (caps->caps_valid)
|
||||
amdgpu_dm_validate_backlight_caps(dm, bl_idx);
|
||||
#else
|
||||
if (caps->aux_support)
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -53,6 +53,7 @@ bool amdgpu_dm_should_create_sysfs(struct amdgpu_dm_connector *aconnector);
|
|||
extern const struct attribute_group amdgpu_group;
|
||||
|
||||
#if IS_ENABLED(CONFIG_DRM_AMD_DC_KUNIT_TEST)
|
||||
void amdgpu_dm_validate_backlight_caps(struct amdgpu_display_manager *dm, int bl_idx);
|
||||
struct dc_stream_state *dm_find_stream_with_link(struct amdgpu_display_manager *dm,
|
||||
struct dc_link *link);
|
||||
int amdgpu_dm_backlight_update_status(struct backlight_device *bd);
|
||||
|
|
|
|||
|
|
@ -792,6 +792,48 @@ static void dm_test_backlight_caps_non_aux_sets_defaults(struct kunit *test)
|
|||
}
|
||||
#endif
|
||||
|
||||
/* Tests for amdgpu_dm_validate_backlight_caps() */
|
||||
|
||||
struct dm_validate_caps_param {
|
||||
const char *name;
|
||||
int min_input_signal;
|
||||
int max_input_signal;
|
||||
bool caps_valid;
|
||||
};
|
||||
|
||||
static const struct dm_validate_caps_param dm_validate_caps_params[] = {
|
||||
{ "sane", AMDGPU_DM_DEFAULT_MIN_BACKLIGHT, AMDGPU_DM_DEFAULT_MAX_BACKLIGHT, true },
|
||||
{ "max_too_large", AMDGPU_DM_DEFAULT_MIN_BACKLIGHT,
|
||||
AMDGPU_DM_DEFAULT_MAX_BACKLIGHT + 1, false },
|
||||
{ "negative_min", -1, AMDGPU_DM_DEFAULT_MAX_BACKLIGHT, false },
|
||||
{ "narrow_spread", 100, 100 + AMDGPU_DM_MIN_SPREAD - 1, false },
|
||||
};
|
||||
|
||||
KUNIT_ARRAY_PARAM_DESC(dm_validate_caps, dm_validate_caps_params, name);
|
||||
|
||||
/**
|
||||
* dm_test_validate_backlight_caps - Test the firmware caps sanity check
|
||||
* @test: The KUnit test context
|
||||
*
|
||||
* Caps above the 8-bit range, with a negative min or with a spread narrower
|
||||
* than AMDGPU_DM_MIN_SPREAD must be rejected.
|
||||
*/
|
||||
static void dm_test_validate_backlight_caps(struct kunit *test)
|
||||
{
|
||||
const struct dm_validate_caps_param *param = test->param_value;
|
||||
struct amdgpu_display_manager *dm = dm_kunit_alloc_dm(test);
|
||||
struct amdgpu_dm_backlight_caps *caps = &dm->backlight_caps[0];
|
||||
|
||||
dm->adev = dm_kunit_alloc_adev(test);
|
||||
caps->caps_valid = true;
|
||||
caps->min_input_signal = param->min_input_signal;
|
||||
caps->max_input_signal = param->max_input_signal;
|
||||
|
||||
amdgpu_dm_validate_backlight_caps(dm, 0);
|
||||
|
||||
KUNIT_EXPECT_EQ(test, caps->caps_valid, param->caps_valid);
|
||||
}
|
||||
|
||||
/* Tests for get_brightness_range() */
|
||||
|
||||
/**
|
||||
|
|
@ -1928,6 +1970,8 @@ static struct kunit_case dm_backlight_test_cases[] = {
|
|||
KUNIT_CASE(dm_test_backlight_caps_aux_support_noop),
|
||||
KUNIT_CASE(dm_test_backlight_caps_non_aux_sets_defaults),
|
||||
#endif
|
||||
/* amdgpu_dm_validate_backlight_caps */
|
||||
KUNIT_CASE_PARAM(dm_test_validate_backlight_caps, dm_validate_caps_gen_params),
|
||||
/* get_brightness_range */
|
||||
KUNIT_CASE(dm_test_brightness_range_null_caps),
|
||||
KUNIT_CASE(dm_test_brightness_range_pwm),
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user