]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amd/display: Add a trace event for brightness programming
authorMario Limonciello <mario.limonciello@amd.com>
Mon, 23 Jun 2025 17:11:14 +0000 (12:11 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 24 Jun 2025 14:05:32 +0000 (10:05 -0400)
[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>
Documentation/gpu/amdgpu/debugging.rst
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_trace.h

index 7cbfea0606e15fe4b19f764b0ef0436105981170..ac914d5247410d5ebe39ff9cd93c92bdbbce9821 100644 (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
index 14e7c2aea206be694ecff717f56d666577d7f17f..9310cb7629a2087363cbd4c21286037b80075c0b 100644 (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);
index 4686d4b0cbad29892f317eacafb130e88d843704..95f890fda8aaae138591c7fb3bf48c4d180e05c2 100644 (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