From: Wyatt Wood <wyatt.w...@amd.com>

[Why]
A recent bug showed that logging would be useful in debugging
various gamma issues.

[How]
Add logging in dc.

Signed-off-by: Wyatt Wood <wyatt.w...@amd.com>
Reviewed-by: Krunoslav Kovac <krunoslav.ko...@amd.com>
Acked-by: Leo Li <sunpeng...@amd.com>
---
 .../amd/display/dc/dcn10/dcn10_cm_common.c    |  4 +--
 .../amd/display/dc/dcn10/dcn10_hw_sequencer.c | 32 +++++++++++++++++++
 .../drm/amd/display/include/logger_types.h    |  6 ++++
 3 files changed, 40 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_cm_common.c 
b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_cm_common.c
index 8166fdbacd73..01c7e30b9ce1 100644
--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_cm_common.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_cm_common.c
@@ -343,8 +343,8 @@ bool cm_helper_translate_curve_to_hw_format(
                region_start = -MAX_LOW_POINT;
                region_end   = NUMBER_REGIONS - MAX_LOW_POINT;
        } else {
-               /* 10 segments
-                * segment is from 2^-10 to 2^0
+               /* 11 segments
+                * segment is from 2^-10 to 2^1
                 * There are less than 256 points, for optimization
                 */
                seg_distr[0] = 3;
diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c 
b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
index 0a5c75e737a5..0045b698fb68 100644
--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
@@ -1434,6 +1434,34 @@ static bool dcn10_set_input_transfer_func(struct 
pipe_ctx *pipe_ctx,
        return result;
 }
 
+#define MAX_NUM_HW_POINTS 0x200
+
+static void log_tf(struct dc_context *ctx,
+                               struct dc_transfer_func *tf, uint32_t 
hw_points_num)
+{
+       // DC_LOG_GAMMA is default logging of all hw points
+       // DC_LOG_ALL_GAMMA logs all points, not only hw points
+       // DC_LOG_ALL_TF_POINTS logs all channels of the tf
+       int i = 0;
+
+       DC_LOGGER_INIT(ctx->logger);
+       DC_LOG_GAMMA("Gamma Correction TF");
+       DC_LOG_ALL_GAMMA("Logging all tf points...");
+       DC_LOG_ALL_TF_CHANNELS("Logging all channels...");
+
+       for (i = 0; i < hw_points_num; i++) {
+               DC_LOG_GAMMA("R %d %llu\n", i, tf->tf_pts.red[i].value);
+               DC_LOG_ALL_TF_CHANNELS("G %d, %llu\n", i, 
tf->tf_pts.green[i].value);
+               DC_LOG_ALL_TF_CHANNELS("B %d, %llu\n", i, 
tf->tf_pts.blue[i].value);
+       }
+
+       for (i = hw_points_num; i < MAX_NUM_HW_POINTS; i++) {
+               DC_LOG_ALL_GAMMA("R %d %llu\n", i, tf->tf_pts.red[i].value);
+               DC_LOG_ALL_TF_CHANNELS("G %d %llu\n", i, 
tf->tf_pts.green[i].value);
+               DC_LOG_ALL_TF_CHANNELS("B %d %llu\n", i, 
tf->tf_pts.blue[i].value);
+       }
+}
+
 static bool
 dcn10_set_output_transfer_func(struct pipe_ctx *pipe_ctx,
                               const struct dc_stream_state *stream)
@@ -1462,6 +1490,10 @@ dcn10_set_output_transfer_func(struct pipe_ctx *pipe_ctx,
        } else
                dpp->funcs->dpp_program_regamma_pwl(dpp, NULL, 
OPP_REGAMMA_BYPASS);
 
+       log_tf(stream->ctx,
+                       stream->out_transfer_func,
+                       dpp->regamma_params.hw_points_num);
+
        return true;
 }
 
diff --git a/drivers/gpu/drm/amd/display/include/logger_types.h 
b/drivers/gpu/drm/amd/display/include/logger_types.h
index 81650ee40f0b..2b219cdb13ad 100644
--- a/drivers/gpu/drm/amd/display/include/logger_types.h
+++ b/drivers/gpu/drm/amd/display/include/logger_types.h
@@ -63,6 +63,9 @@
 #define DC_LOG_IF_TRACE(...) pr_debug("[IF_TRACE]:"__VA_ARGS__)
 #define DC_LOG_PERF_TRACE(...) DRM_DEBUG_KMS(__VA_ARGS__)
 #define DC_LOG_RETIMER_REDRIVER(...) DRM_DEBUG_KMS(__VA_ARGS__)
+#define DC_LOG_GAMMA(...) pr_debug("[GAMMA]:"__VA_ARGS__)
+#define DC_LOG_ALL_GAMMA(...) pr_debug("[GAMMA]:"__VA_ARGS__)
+#define DC_LOG_ALL_TF_CHANNELS(...) pr_debug("[GAMMA]:"__VA_ARGS__)
 #ifdef CONFIG_DRM_AMD_DC_DSC_SUPPORT
 #define DC_LOG_DSC(...) DRM_DEBUG_KMS(__VA_ARGS__)
 #endif
@@ -118,6 +121,9 @@ enum dc_log_type {
 #endif
        LOG_DWB,
        LOG_GAMMA_DEBUG,
+       LOG_MAX_HW_POINTS,
+       LOG_ALL_TF_CHANNELS,
+       LOG_SAMPLE_1DLUT,
        LOG_SECTION_TOTAL_COUNT
 };
 
-- 
2.22.0

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to