Commit c05da59e authored by Leo Zeng's avatar Leo Zeng Committed by Alex Deucher
Browse files

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: default avatarAric Cyr <aric.cyr@amd.com>
Signed-off-by: default avatarLeo Zeng <Leo.Zeng@amd.com>
Signed-off-by: default avatarAurabindo Pillai <aurabindo.pillai@amd.com>
Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 9cdd9c4d
Loading
Loading
Loading
Loading
+45 −0
Original line number Diff line number Diff line
@@ -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;
+5 −0
Original line number Diff line number Diff line
@@ -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);

+0 −1
Original line number Diff line number Diff line
@@ -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);
	}
}