drm/amd/display: Add a helper to map ODM/MPC/Multi-Plane resources
[Why & How] Add a helper to map ODM/MPC/Multi-Plane resources from DC Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Reviewed-by: Nevenko Stupar <Nevenko.Stupar@amd.com> Reviewed-by: Chaitanya Dhere <chaitanya.dhere@amd.com> Acked-by: Qingqing Zhuo <qingqing.zhuo@amd.com> Signed-off-by: Jun Lei <jun.lei@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
fa28030a83
commit
20dad3813b
@ -1747,7 +1747,6 @@ bool dc_remove_plane_from_context(
|
|||||||
|
|
||||||
for (i = 0; i < stream_status->plane_count; i++) {
|
for (i = 0; i < stream_status->plane_count; i++) {
|
||||||
if (stream_status->plane_states[i] == plane_state) {
|
if (stream_status->plane_states[i] == plane_state) {
|
||||||
|
|
||||||
dc_plane_state_release(stream_status->plane_states[i]);
|
dc_plane_state_release(stream_status->plane_states[i]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -3683,4 +3682,52 @@ bool is_h_timing_divisible_by_2(struct dc_stream_state *stream)
|
|||||||
(stream->timing.h_sync_width % 2 == 0);
|
(stream->timing.h_sync_width % 2 == 0);
|
||||||
}
|
}
|
||||||
return divisible;
|
return divisible;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool dc_resource_acquire_secondary_pipe_for_mpc_odm(
|
||||||
|
const struct dc *dc,
|
||||||
|
struct dc_state *state,
|
||||||
|
struct pipe_ctx *pri_pipe,
|
||||||
|
struct pipe_ctx *sec_pipe,
|
||||||
|
bool odm)
|
||||||
|
{
|
||||||
|
int pipe_idx = sec_pipe->pipe_idx;
|
||||||
|
struct pipe_ctx *sec_top, *sec_bottom, *sec_next, *sec_prev;
|
||||||
|
const struct resource_pool *pool = dc->res_pool;
|
||||||
|
|
||||||
|
sec_top = sec_pipe->top_pipe;
|
||||||
|
sec_bottom = sec_pipe->bottom_pipe;
|
||||||
|
sec_next = sec_pipe->next_odm_pipe;
|
||||||
|
sec_prev = sec_pipe->prev_odm_pipe;
|
||||||
|
|
||||||
|
*sec_pipe = *pri_pipe;
|
||||||
|
|
||||||
|
sec_pipe->top_pipe = sec_top;
|
||||||
|
sec_pipe->bottom_pipe = sec_bottom;
|
||||||
|
sec_pipe->next_odm_pipe = sec_next;
|
||||||
|
sec_pipe->prev_odm_pipe = sec_prev;
|
||||||
|
|
||||||
|
sec_pipe->pipe_idx = pipe_idx;
|
||||||
|
sec_pipe->plane_res.mi = pool->mis[pipe_idx];
|
||||||
|
sec_pipe->plane_res.hubp = pool->hubps[pipe_idx];
|
||||||
|
sec_pipe->plane_res.ipp = pool->ipps[pipe_idx];
|
||||||
|
sec_pipe->plane_res.xfm = pool->transforms[pipe_idx];
|
||||||
|
sec_pipe->plane_res.dpp = pool->dpps[pipe_idx];
|
||||||
|
sec_pipe->plane_res.mpcc_inst = pool->dpps[pipe_idx]->inst;
|
||||||
|
sec_pipe->stream_res.dsc = NULL;
|
||||||
|
if (odm) {
|
||||||
|
if (!sec_pipe->top_pipe)
|
||||||
|
sec_pipe->stream_res.opp = pool->opps[pipe_idx];
|
||||||
|
else
|
||||||
|
sec_pipe->stream_res.opp = sec_pipe->top_pipe->stream_res.opp;
|
||||||
|
if (sec_pipe->stream->timing.flags.DSC == 1) {
|
||||||
|
dcn20_acquire_dsc(dc, &state->res_ctx, &sec_pipe->stream_res.dsc, pipe_idx);
|
||||||
|
ASSERT(sec_pipe->stream_res.dsc);
|
||||||
|
if (sec_pipe->stream_res.dsc == NULL)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
dcn20_build_mapped_resource(dc, state, sec_pipe->stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
@ -1191,6 +1191,8 @@ struct dc_plane_state {
|
|||||||
enum dc_irq_source irq_source;
|
enum dc_irq_source irq_source;
|
||||||
struct kref refcount;
|
struct kref refcount;
|
||||||
struct tg_color visual_confirm_color;
|
struct tg_color visual_confirm_color;
|
||||||
|
|
||||||
|
bool is_statically_allocated;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct dc_plane_info {
|
struct dc_plane_info {
|
||||||
|
@ -1372,7 +1372,7 @@ static struct pipe_ctx *dcn32_find_split_pipe(
|
|||||||
return pipe;
|
return pipe;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool dcn32_split_stream_for_mpc_or_odm(
|
bool dcn32_split_stream_for_mpc_or_odm(
|
||||||
const struct dc *dc,
|
const struct dc *dc,
|
||||||
struct resource_context *res_ctx,
|
struct resource_context *res_ctx,
|
||||||
struct pipe_ctx *pri_pipe,
|
struct pipe_ctx *pri_pipe,
|
||||||
|
@ -39,6 +39,8 @@
|
|||||||
#include "panel_cntl.h"
|
#include "panel_cntl.h"
|
||||||
|
|
||||||
#define MAX_CLOCK_SOURCES 7
|
#define MAX_CLOCK_SOURCES 7
|
||||||
|
#define MAX_SVP_PHANTOM_STREAMS 2
|
||||||
|
#define MAX_SVP_PHANTOM_PLANES 2
|
||||||
|
|
||||||
void enable_surface_flip_reporting(struct dc_plane_state *plane_state,
|
void enable_surface_flip_reporting(struct dc_plane_state *plane_state,
|
||||||
uint32_t controller_id);
|
uint32_t controller_id);
|
||||||
@ -492,6 +494,8 @@ struct dcn_bw_output {
|
|||||||
struct dcn_watermark_set watermarks;
|
struct dcn_watermark_set watermarks;
|
||||||
struct dcn_bw_writeback bw_writeback;
|
struct dcn_bw_writeback bw_writeback;
|
||||||
int compbuf_size_kb;
|
int compbuf_size_kb;
|
||||||
|
unsigned int legacy_svp_drr_stream_index;
|
||||||
|
bool legacy_svp_drr_stream_index_valid;
|
||||||
};
|
};
|
||||||
|
|
||||||
union bw_output {
|
union bw_output {
|
||||||
|
@ -230,4 +230,10 @@ const struct link_hwss *get_link_hwss(const struct dc_link *link,
|
|||||||
|
|
||||||
bool is_h_timing_divisible_by_2(struct dc_stream_state *stream);
|
bool is_h_timing_divisible_by_2(struct dc_stream_state *stream);
|
||||||
|
|
||||||
|
bool dc_resource_acquire_secondary_pipe_for_mpc_odm(
|
||||||
|
const struct dc *dc,
|
||||||
|
struct dc_state *state,
|
||||||
|
struct pipe_ctx *pri_pipe,
|
||||||
|
struct pipe_ctx *sec_pipe,
|
||||||
|
bool odm);
|
||||||
#endif /* DRIVERS_GPU_DRM_AMD_DC_DEV_DC_INC_RESOURCE_H_ */
|
#endif /* DRIVERS_GPU_DRM_AMD_DC_DEV_DC_INC_RESOURCE_H_ */
|
||||||
|
Loading…
Reference in New Issue
Block a user