From: Zeyu Fan <Zeyu.Fan@xxxxxxx> Signed-off-by: Zeyu Fan <Zeyu.Fan at amd.com> Acked-by: Harry Wentland <harry.wentland at amd.com> --- drivers/gpu/drm/amd/dal/dc/core/dc.c | 26 ++++++++++++++++++++++ drivers/gpu/drm/amd/dal/dc/dc.h | 19 ++++++++++++++++ .../gpu/drm/amd/dal/dc/dce110/dce110_mem_input.c | 3 ++- drivers/gpu/drm/amd/dal/dc/dce80/dce80_mem_input.c | 3 ++- drivers/gpu/drm/amd/dal/dc/inc/hw/mem_input.h | 3 +++ 5 files changed, 52 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc.c b/drivers/gpu/drm/amd/dal/dc/core/dc.c index d928b3f93ab6..0c814cf886c3 100644 --- a/drivers/gpu/drm/amd/dal/dc/core/dc.c +++ b/drivers/gpu/drm/amd/dal/dc/core/dc.c @@ -1802,3 +1802,29 @@ const struct dc_stream_status *dc_stream_get_status( return &stream->status; } + +bool dc_init_dchub(struct dc *dc, struct dchub_init_data *dh_data) +{ + int i; + int status_check = false; + struct core_dc *core_dc = DC_TO_CORE(dc); + struct mem_input *mi; + + for (i = 0; i < core_dc->res_pool->pipe_count; i++) { + if (core_dc->res_pool->mis[i] != NULL) { + mi = core_dc->res_pool->mis[i]; + break; + } + } + + + if (mi->funcs->mem_input_update_dchub) + mi->funcs->mem_input_update_dchub(mi, dh_data); + else + ASSERT(mi->funcs->mem_input_update_dchub); + + + return true; + +} + diff --git a/drivers/gpu/drm/amd/dal/dc/dc.h b/drivers/gpu/drm/amd/dal/dc/dc.h index 26624e2661fa..4c969eb26e85 100644 --- a/drivers/gpu/drm/amd/dal/dc/dc.h +++ b/drivers/gpu/drm/amd/dal/dc/dc.h @@ -155,6 +155,21 @@ struct dc { struct dc_debug debug; }; +enum frame_buffer_mode { + FRAME_BUFFER_MODE_LOCAL_ONLY = 0, + FRAME_BUFFER_MODE_ZFB_ONLY, + FRAME_BUFFER_MODE_MIXED_ZFB_AND_LOCAL, +} ; + +struct dchub_init_data { + bool dchub_initialzied; + bool dchub_info_valid; + int64_t zfb_phys_addr_base; + int64_t zfb_mc_base_addr; + uint64_t zfb_size_in_byte; + enum frame_buffer_mode fb_mode; +}; + struct dc_init_data { struct hw_asic_id asic_id; void *driver; /* ctx */ @@ -172,8 +187,11 @@ struct dc_init_data { }; struct dc *dc_create(const struct dc_init_data *init_params); + void dc_destroy(struct dc **dc); +bool dc_init_dchub(struct dc *dc, struct dchub_init_data *dh_data); + /******************************************************************************* * Surface Interfaces ******************************************************************************/ @@ -346,6 +364,7 @@ bool dc_post_update_surfaces_to_target( void dc_update_surfaces_for_target(struct dc *dc, struct dc_surface_update *updates, int surface_count, struct dc_target *dc_target); + /******************************************************************************* * Target Interfaces ******************************************************************************/ diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_mem_input.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_mem_input.c index 0b778c984e9a..834a73222926 100644 --- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_mem_input.c +++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_mem_input.c @@ -983,7 +983,8 @@ static struct mem_input_funcs dce110_mem_input_funcs = { .mem_input_program_surface_config = dce110_mem_input_program_surface_config, .mem_input_is_flip_pending = - dce110_mem_input_is_flip_pending + dce110_mem_input_is_flip_pending, + .mem_input_update_dchub = NULL }; /*****************************************/ /* Constructor, Destructor */ diff --git a/drivers/gpu/drm/amd/dal/dc/dce80/dce80_mem_input.c b/drivers/gpu/drm/amd/dal/dc/dce80/dce80_mem_input.c index 078a608dc737..7cc3ae89b7ee 100644 --- a/drivers/gpu/drm/amd/dal/dc/dce80/dce80_mem_input.c +++ b/drivers/gpu/drm/amd/dal/dc/dce80/dce80_mem_input.c @@ -175,7 +175,8 @@ static struct mem_input_funcs dce80_mem_input_funcs = { .mem_input_program_surface_config = dce110_mem_input_program_surface_config, .mem_input_is_flip_pending = - dce110_mem_input_is_flip_pending + dce110_mem_input_is_flip_pending, + .mem_input_update_dchub = NULL }; /*****************************************/ diff --git a/drivers/gpu/drm/amd/dal/dc/inc/hw/mem_input.h b/drivers/gpu/drm/amd/dal/dc/inc/hw/mem_input.h index c4a78eefd362..a4e91cc719d6 100644 --- a/drivers/gpu/drm/amd/dal/dc/inc/hw/mem_input.h +++ b/drivers/gpu/drm/amd/dal/dc/inc/hw/mem_input.h @@ -91,6 +91,9 @@ struct mem_input_funcs { bool horizontal_mirror); bool (*mem_input_is_flip_pending)(struct mem_input *mem_input); + + void (*mem_input_update_dchub)(struct mem_input *mem_input, + struct dchub_init_data *dh_data); }; #endif -- 2.10.1