Commit 009bfc5e authored by Mario Limonciello's avatar Mario Limonciello Committed by Alex Deucher
Browse files

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: default avatarAlex Hung <alex.hung@amd.com>
Link: https://lore.kernel.org/r/20250623171114.1156451-2-mario.limonciello@amd.com


Signed-off-by: default avatarMario Limonciello <mario.limonciello@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 5b852044
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -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
+8 −0
Original line number Diff line number Diff line
@@ -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);
+26 −0
Original line number Diff line number Diff line
@@ -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