logger_types.h defines many DC_LOG_*() categorized debug wrappers.
Most of these use DRM debug API, so are controllable using drm.debug,
but others use bare pr_debug("$prefix: .."), each with a different
class-prefix matching "^\[\w+\]:"

Use DEFINE_DYNAMIC_DEBUG_CATEGORIES to create a /sys debug_dc
parameter, modinfos, and to specify a map from bits -> categorized
pr_debugs to be controlled.

Signed-off-by: Jim Cromie <jim.cro...@gmail.com>
---
 .../gpu/drm/amd/display/dc/core/dc_debug.c    | 44 ++++++++++++++++++-
 1 file changed, 43 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_debug.c 
b/drivers/gpu/drm/amd/display/dc/core/dc_debug.c
index 21be2a684393..69e68d721512 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_debug.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_debug.c
@@ -36,8 +36,50 @@
 
 #include "resource.h"
 
-#define DC_LOGGER_INIT(logger)
+#ifdef DRM_USE_DYNAMIC_DEBUG
+/* define a drm.debug style dyndbg pr-debug control point */
+#include <linux/dynamic_debug.h>
+
+unsigned long __debug_dc;
+EXPORT_SYMBOL(__debug_dc);
+
+#define _help_(key)    "\t   " key "\t- help for " key "\n"
+
+/* Id like to do these inside DEFINE_DYNAMIC_DEBUG_CATEGORIES, if possible */
+#define DC_DYNDBG_BITMAP_DESC(name)                                    \
+       "Control pr_debugs via /sys/module/amdgpu/parameters/" #name    \
+       ", where each bit controls a debug category.\n"                 \
+       _help_("[SURFACE]:")                                            \
+       _help_("[CURSOR]:")                                             \
+       _help_("[PFLIP]:")                                              \
+       _help_("[VBLANK]:")                                             \
+       _help_("[HW_LINK_TRAINING]:")                                   \
+       _help_("[HW_AUDIO]:")                                           \
+       _help_("[SCALER]:")                                             \
+       _help_("[BIOS]:")                                               \
+       _help_("[BANDWIDTH_CALCS]:")                                    \
+       _help_("[DML]:")                                                \
+       _help_("[IF_TRACE]:")                                           \
+       _help_("[GAMMA]:")                                              \
+       _help_("[SMU_MSG]:")
+
+DEFINE_DYNAMIC_DEBUG_CATEGORIES(debug_dc, __debug_dc,
+       DC_DYNDBG_BITMAP_DESC(debug_dc),
+       _DD_cat_("[CURSOR]:"),
+       _DD_cat_("[PFLIP]:"),
+       _DD_cat_("[VBLANK]:"),
+       _DD_cat_("[HW_LINK_TRAINING]:"),
+       _DD_cat_("[HW_AUDIO]:"),
+       _DD_cat_("[SCALER]:"),
+       _DD_cat_("[BIOS]:"),
+       _DD_cat_("[BANDWIDTH_CALCS]:"),
+       _DD_cat_("[DML]:"),
+       _DD_cat_("[IF_TRACE]:"),
+       _DD_cat_("[GAMMA]:"),
+       _DD_cat_("[SMU_MSG]:"));
+#endif
 
+#define DC_LOGGER_INIT(logger)
 
 #define SURFACE_TRACE(...) do {\
                if (dc->debug.surface_trace) \
-- 
2.31.1

Reply via email to