drm/amd/display: Get visual confirm color for stream

[WHY]
We want to output visual confirm color based on stream.

[HOW]
If visual confirm is for DMUB, use DMUB to get color.
Otherwise, find plane with highest layer index, output visual confirm color
of pipe that contains plane with highest index.

Reviewed-by: Aric Cyr <aric.cyr@amd.com>
Signed-off-by: Leo Zeng <Leo.Zeng@amd.com>
Signed-off-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
Leo Zeng
2025-02-26 14:35:05 -05:00
committed by Alex Deucher
parent 9cdd9c4d03
commit c05da59e97
3 changed files with 50 additions and 1 deletions

View File

@@ -1231,6 +1231,51 @@ static void dc_update_visual_confirm_color(struct dc *dc, struct dc_state *conte
}
}
void dc_get_visual_confirm_for_stream(
struct dc *dc,
struct dc_stream_state *stream_state,
struct tg_color *color)
{
struct dc_stream_status *stream_status = dc_stream_get_status(stream_state);
struct pipe_ctx *pipe_ctx;
int i;
struct dc_plane_state *plane_state = NULL;
if (!stream_status)
return;
switch (dc->debug.visual_confirm) {
case VISUAL_CONFIRM_DISABLE:
return;
case VISUAL_CONFIRM_PSR:
case VISUAL_CONFIRM_FAMS:
pipe_ctx = dc_stream_get_pipe_ctx(stream_state);
if (!pipe_ctx)
return;
dc_dmub_srv_get_visual_confirm_color_cmd(dc, pipe_ctx);
memcpy(color, &dc->ctx->dmub_srv->dmub->visual_confirm_color, sizeof(struct tg_color));
return;
default:
/* find plane with highest layer_index */
for (i = 0; i < stream_status->plane_count; i++) {
if (stream_status->plane_states[i]->visible)
plane_state = stream_status->plane_states[i];
}
if (!plane_state)
return;
/* find pipe that contains plane with highest layer index */
for (i = 0; i < MAX_PIPES; i++) {
struct pipe_ctx *pipe = &dc->current_state->res_ctx.pipe_ctx[i];
if (pipe->plane_state == plane_state) {
memcpy(color, &pipe->visual_confirm_color, sizeof(struct tg_color));
return;
}
}
}
}
static void disable_dangling_plane(struct dc *dc, struct dc_state *context)
{
int i, j;

View File

@@ -2590,6 +2590,11 @@ unsigned int dc_get_det_buffer_size_from_state(const struct dc_state *context);
/* DSC Interfaces */
#include "dc_dsc.h"
void dc_get_visual_confirm_for_stream(
struct dc *dc,
struct dc_stream_state *stream_state,
struct tg_color *color);
/* Disable acc mode Interfaces */
void dc_disable_accelerated_mode(struct dc *dc);

View File

@@ -2664,7 +2664,6 @@ void dcn10_update_visual_confirm_color(struct dc *dc,
struct mpc *mpc = dc->res_pool->mpc;
if (mpc->funcs->set_bg_color) {
memcpy(&pipe_ctx->plane_state->visual_confirm_color, &(pipe_ctx->visual_confirm_color), sizeof(struct tg_color));
mpc->funcs->set_bg_color(mpc, &(pipe_ctx->visual_confirm_color), mpcc_id);
}
}