drm/amd/display: Add a trace event for brightness programming

[Why]
Brightness programming may involve a conversion of a user requested
brightness against what was in a custom brightness curve. The values
might not match what a user programmed.

[How]
Add a new trace event to show specific converted brightness values.

Reviewed-by: Alex Hung <alex.hung@amd.com>
Link: https://lore.kernel.org/r/20250623171114.1156451-2-mario.limonciello@amd.com
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
Mario Limonciello
2025-06-23 12:11:14 -05:00
committed by Alex Deucher
parent 5b852044eb
commit 009bfc5ec5
3 changed files with 52 additions and 0 deletions

View File

@@ -85,3 +85,21 @@ UMR
GPU debugging and diagnostics tool. Please see the umr
`documentation <https://umr.readthedocs.io/en/main/>`_ for more information
about its capabilities.
Debugging backlight brightness
==============================
Default backlight brightness is intended to be set via the policy advertised
by the firmware. Firmware will often provide different defaults for AC or DC.
Furthermore, some userspace software will save backlight brightness during
the previous boot and attempt to restore it.
Some firmware also has support for a feature called "Custom Backlight Curves"
where an input value for brightness is mapped along a linearly interpolated
curve of brightness values that better match display characteristics.
In the event of problems happening with backlight, there is a trace event
that can be enabled at bootup to log every brightness change request.
This can help isolate where the problem is. To enable the trace event add
the following to the kernel command line:
tp_printk trace_event=amdgpu_dm:amdgpu_dm_brightness:mod:amdgpu trace_buf_size=1M

View File

@@ -4861,6 +4861,14 @@ static void amdgpu_dm_backlight_set_level(struct amdgpu_display_manager *dm,
reallow_idle = true;
}
if (trace_amdgpu_dm_brightness_enabled()) {
trace_amdgpu_dm_brightness(__builtin_return_address(0),
user_brightness,
brightness,
caps->aux_support,
power_supply_is_system_supplied() > 0);
}
if (caps->aux_support) {
rc = dc_link_set_backlight_level_nits(link, true, brightness,
AUX_BL_DEFAULT_TRANSITION_TIME_MS);

View File

@@ -726,6 +726,32 @@ TRACE_EVENT(dcn_optc_lock_unlock_state,
)
);
TRACE_EVENT(amdgpu_dm_brightness,
TP_PROTO(void *function, u32 user_brightness, u32 converted_brightness, bool aux, bool ac),
TP_ARGS(function, user_brightness, converted_brightness, aux, ac),
TP_STRUCT__entry(
__field(void *, function)
__field(u32, user_brightness)
__field(u32, converted_brightness)
__field(bool, aux)
__field(bool, ac)
),
TP_fast_assign(
__entry->function = function;
__entry->user_brightness = user_brightness;
__entry->converted_brightness = converted_brightness;
__entry->aux = aux;
__entry->ac = ac;
),
TP_printk("%ps: brightness requested=%u converted=%u aux=%s power=%s",
(void *)__entry->function,
(u32)__entry->user_brightness,
(u32)__entry->converted_brightness,
(__entry->aux) ? "true" : "false",
(__entry->ac) ? "AC" : "DC"
)
);
#endif /* _AMDGPU_DM_TRACE_H_ */
#undef TRACE_INCLUDE_PATH