Skip to content

Commit 327e62f

Browse files
superm1alexdeucher
authored andcommitted
drm/amd/display: Validate backlight caps are sane
Currently amdgpu takes backlight caps provided by the ACPI tables on systems as is. If the firmware sets maximums that are too low this means that users don't get a good experience. To avoid having to maintain a quirk list of such systems, do a sanity check on the values. Check that the spread is at least half of the values that amdgpu would use if no ACPI table was found and if not use the amdgpu defaults. Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3020 Reviewed-by: Harry Wentland <harry.wentland@amd.com> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Cc: stable@vger.kernel.org
1 parent b74571a commit 327e62f

1 file changed

Lines changed: 16 additions & 0 deletions

File tree

drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4469,6 +4469,7 @@ static int amdgpu_dm_mode_config_init(struct amdgpu_device *adev)
44694469

44704470
#define AMDGPU_DM_DEFAULT_MIN_BACKLIGHT 12
44714471
#define AMDGPU_DM_DEFAULT_MAX_BACKLIGHT 255
4472+
#define AMDGPU_DM_MIN_SPREAD ((AMDGPU_DM_DEFAULT_MAX_BACKLIGHT - AMDGPU_DM_DEFAULT_MIN_BACKLIGHT) / 2)
44724473
#define AUX_BL_DEFAULT_TRANSITION_TIME_MS 50
44734474

44744475
static void amdgpu_dm_update_backlight_caps(struct amdgpu_display_manager *dm,
@@ -4483,6 +4484,21 @@ static void amdgpu_dm_update_backlight_caps(struct amdgpu_display_manager *dm,
44834484
return;
44844485

44854486
amdgpu_acpi_get_backlight_caps(&caps);
4487+
4488+
/* validate the firmware value is sane */
4489+
if (caps.caps_valid) {
4490+
int spread = caps.max_input_signal - caps.min_input_signal;
4491+
4492+
if (caps.max_input_signal > AMDGPU_DM_DEFAULT_MAX_BACKLIGHT ||
4493+
caps.min_input_signal < AMDGPU_DM_DEFAULT_MIN_BACKLIGHT ||
4494+
spread > AMDGPU_DM_DEFAULT_MAX_BACKLIGHT ||
4495+
spread < AMDGPU_DM_MIN_SPREAD) {
4496+
DRM_DEBUG_KMS("DM: Invalid backlight caps: min=%d, max=%d\n",
4497+
caps.min_input_signal, caps.max_input_signal);
4498+
caps.caps_valid = false;
4499+
}
4500+
}
4501+
44864502
if (caps.caps_valid) {
44874503
dm->backlight_caps[bl_idx].caps_valid = true;
44884504
if (caps.aux_support)

0 commit comments

Comments
 (0)