drm/amd/display: refactor dirty rect dmub command decision
[Why] To wrap the decision logic of sending dirty rect dmub command for both frame update and cursor update path. Signed-off-by: Robin Chen <po-tchen@amd.com> Acked-by: Leo Li <sunpeng.li@amd.com> Reviewed-by: Harry Wentland <harry.wentland@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
f9f4daf153
commit
2ff6a14b20
@ -2827,6 +2827,18 @@ static void commit_planes_do_stream_update(struct dc *dc,
|
||||
}
|
||||
}
|
||||
|
||||
static bool dc_dmub_should_send_dirty_rect_cmd(struct dc *dc, struct dc_stream_state *stream)
|
||||
{
|
||||
if (stream->link->psr_settings.psr_version == DC_PSR_VERSION_SU_1)
|
||||
return true;
|
||||
|
||||
if (stream->link->psr_settings.psr_version == DC_PSR_VERSION_1 &&
|
||||
dc->debug.enable_sw_cntl_psr)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void dc_dmub_update_dirty_rect(struct dc *dc,
|
||||
int surface_count,
|
||||
struct dc_stream_state *stream,
|
||||
@ -2839,7 +2851,7 @@ void dc_dmub_update_dirty_rect(struct dc *dc,
|
||||
unsigned int i, j;
|
||||
unsigned int panel_inst = 0;
|
||||
|
||||
if (stream->link->psr_settings.psr_version != DC_PSR_VERSION_SU_1)
|
||||
if (!dc_dmub_should_send_dirty_rect_cmd(dc, stream))
|
||||
return;
|
||||
|
||||
if (!dc_get_edp_link_panel_inst(dc, stream->link, &panel_inst))
|
||||
|
@ -3330,6 +3330,23 @@ static bool dcn10_can_pipe_disable_cursor(struct pipe_ctx *pipe_ctx)
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool dcn10_dmub_should_update_cursor_data(
|
||||
struct pipe_ctx *pipe_ctx,
|
||||
struct dc_debug_options *debug)
|
||||
{
|
||||
if (pipe_ctx->plane_state->address.type == PLN_ADDR_TYPE_VIDEO_PROGRESSIVE)
|
||||
return false;
|
||||
|
||||
if (pipe_ctx->stream->link->psr_settings.psr_version == DC_PSR_VERSION_SU_1)
|
||||
return true;
|
||||
|
||||
if (pipe_ctx->stream->link->psr_settings.psr_version == DC_PSR_VERSION_1 &&
|
||||
debug->enable_sw_cntl_psr)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static void dcn10_dmub_update_cursor_data(
|
||||
struct pipe_ctx *pipe_ctx,
|
||||
struct hubp *hubp,
|
||||
@ -3351,13 +3368,8 @@ static void dcn10_dmub_update_cursor_data(
|
||||
|
||||
struct dc_debug_options *debug = &hubp->ctx->dc->debug;
|
||||
|
||||
if (!debug->enable_sw_cntl_psr && pipe_ctx->stream->link->psr_settings.psr_version != DC_PSR_VERSION_SU_1)
|
||||
if (!dcn10_dmub_should_update_cursor_data(pipe_ctx, debug))
|
||||
return;
|
||||
|
||||
if (pipe_ctx->stream->link->psr_settings.psr_version == DC_PSR_VERSION_UNSUPPORTED ||
|
||||
pipe_ctx->plane_state->address.type == PLN_ADDR_TYPE_VIDEO_PROGRESSIVE)
|
||||
return;
|
||||
|
||||
/**
|
||||
* if cur_pos == NULL means the caller is from cursor_set_attribute
|
||||
* then driver use previous cursor position data
|
||||
|
Loading…
x
Reference in New Issue
Block a user