OSDN Git Service

drm/amd/display: Update scaler recout data for visual confirm
authorLeo (Hanghong) Ma <hanghong.ma@amd.com>
Tue, 28 Mar 2023 20:26:29 +0000 (16:26 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 24 Apr 2023 22:36:46 +0000 (18:36 -0400)
[Why]
Our QA found visual confirm color is not as expected for Auto
Color Management feature test after enable it.

[How]
Calculate scaler recout data when visual confirm enabled to update
the visual confirm bar on the display.

Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Reviewed-by: Aric Cyr <Aric.Cyr@amd.com>
Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: Leo (Hanghong) Ma <hanghong.ma@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/core/dc_resource.c
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp_dscl.c

index 2f704e2..193e09b 100644 (file)
 #include "../dcn32/dcn32_resource.h"
 #include "../dcn321/dcn321_resource.h"
 
+#define VISUAL_CONFIRM_RECT_HEIGHT_DEFAULT 3
+#define VISUAL_CONFIRM_RECT_HEIGHT_MIN 1
+#define VISUAL_CONFIRM_RECT_HEIGHT_MAX 10
+
 #define DC_LOGGER_INIT(logger)
 
 enum dce_version resource_parse_asic_id(struct hw_asic_id asic_id)
@@ -807,6 +811,8 @@ static void calculate_recout(struct pipe_ctx *pipe_ctx)
        struct rect surf_clip = plane_state->clip_rect;
        bool split_tb = stream->view_format == VIEW_3D_FORMAT_TOP_AND_BOTTOM;
        int split_count, split_idx;
+       struct dpp *dpp = pipe_ctx->plane_res.dpp;
+       unsigned short visual_confirm_rect_height = VISUAL_CONFIRM_RECT_HEIGHT_DEFAULT;
 
        calculate_split_count_and_index(pipe_ctx, &split_count, &split_idx);
        if (stream->view_format == VIEW_3D_FORMAT_SIDE_BY_SIDE)
@@ -875,6 +881,18 @@ static void calculate_recout(struct pipe_ctx *pipe_ctx)
                                data->recout.width = data->h_active - data->recout.x;
                }
        }
+
+       /* Check bounds to ensure the VC bar height was set to a sane value */
+       if (dpp != NULL) {
+               if ((dpp->ctx->dc->debug.visual_confirm_rect_height >= VISUAL_CONFIRM_RECT_HEIGHT_MIN) &&
+                       (dpp->ctx->dc->debug.visual_confirm_rect_height <= VISUAL_CONFIRM_RECT_HEIGHT_MAX)) {
+                       visual_confirm_rect_height = dpp->ctx->dc->debug.visual_confirm_rect_height;
+               }
+
+               if (dpp->ctx->dc->debug.visual_confirm != VISUAL_CONFIRM_DISABLE)
+                       data->recout.height = data->recout.height -
+                                       2 * (dpp->inst + visual_confirm_rect_height);
+       }
 }
 
 static void calculate_scaling_ratios(struct pipe_ctx *pipe_ctx)
index b339559..7e140c3 100644 (file)
@@ -39,9 +39,6 @@
 #define BLACK_OFFSET_RGB_Y 0x0
 #define BLACK_OFFSET_CBCR  0x8000
 
-#define VISUAL_CONFIRM_RECT_HEIGHT_DEFAULT 3
-#define VISUAL_CONFIRM_RECT_HEIGHT_MIN 1
-#define VISUAL_CONFIRM_RECT_HEIGHT_MAX 10
 
 #define REG(reg)\
        dpp->tf_regs->reg
@@ -591,18 +588,6 @@ static void dpp1_dscl_set_manual_ratio_init(
 static void dpp1_dscl_set_recout(struct dcn10_dpp *dpp,
                                 const struct rect *recout)
 {
-       int visual_confirm_on = 0;
-       unsigned short visual_confirm_rect_height = VISUAL_CONFIRM_RECT_HEIGHT_DEFAULT;
-
-       if (dpp->base.ctx->dc->debug.visual_confirm != VISUAL_CONFIRM_DISABLE)
-               visual_confirm_on = 1;
-
-       /* Check bounds to ensure the VC bar height was set to a sane value */
-       if ((dpp->base.ctx->dc->debug.visual_confirm_rect_height >= VISUAL_CONFIRM_RECT_HEIGHT_MIN) &&
-                       (dpp->base.ctx->dc->debug.visual_confirm_rect_height <= VISUAL_CONFIRM_RECT_HEIGHT_MAX)) {
-               visual_confirm_rect_height = dpp->base.ctx->dc->debug.visual_confirm_rect_height;
-       }
-
        REG_SET_2(RECOUT_START, 0,
                  /* First pixel of RECOUT in the active OTG area */
                  RECOUT_START_X, recout->x,
@@ -613,8 +598,7 @@ static void dpp1_dscl_set_recout(struct dcn10_dpp *dpp,
                  /* Number of RECOUT horizontal pixels */
                  RECOUT_WIDTH, recout->width,
                  /* Number of RECOUT vertical lines */
-                 RECOUT_HEIGHT, recout->height
-                        - visual_confirm_on * 2 * (dpp->base.inst + visual_confirm_rect_height));
+                 RECOUT_HEIGHT, recout->height);
 }
 
 /**