From e3e7fa9e289b35926faa082a1b2a8d60c429f545 Mon Sep 17 00:00:00 2001 From: Jordan Lazare Date: Mon, 7 Mar 2016 17:24:41 -0500 Subject: [PATCH 0884/1110] drm/amd/dal: Move link encoder destroy from resource to link_encoder We should be treating link_encoder_destroy as a function pointer within link_encoder on a per-link-encoder basis, and not relying on resource to clean it up properly Signed-off-by: Jordan Lazare Acked-by: Harry Wentland Signed-off-by: Alex Deucher --- drivers/gpu/drm/amd/dal/dc/core/dc_link.c | 6 ++---- drivers/gpu/drm/amd/dal/dc/dce100/dce100_resource.c | 1 - drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.c | 10 +++++++++- drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.h | 2 ++ drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c | 7 ------- drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.h | 2 -- drivers/gpu/drm/amd/dal/dc/dce80/dce80_link_encoder.c | 3 ++- drivers/gpu/drm/amd/dal/dc/dce80/dce80_resource.c | 1 - drivers/gpu/drm/amd/dal/dc/inc/core_types.h | 1 - drivers/gpu/drm/amd/dal/dc/inc/hw/link_encoder.h | 1 + drivers/gpu/drm/amd/dal/dc/virtual/virtual_link_encoder.c | 13 ++++++++++++- 11 files changed, 28 insertions(+), 19 deletions(-) diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc_link.c b/drivers/gpu/drm/amd/dal/dc/core/dc_link.c index 0903b0e..68a167b 100644 --- a/drivers/gpu/drm/amd/dal/dc/core/dc_link.c +++ b/drivers/gpu/drm/amd/dal/dc/core/dc_link.c @@ -58,13 +58,11 @@ enum { ******************************************************************************/ static void destruct(struct core_link *link) { - struct core_dc *core_dc = DC_TO_CORE(link->ctx->dc); - if (link->ddc) dal_ddc_service_destroy(&link->ddc); if(link->link_enc) - core_dc->res_pool.funcs->link_enc_destroy(&link->link_enc); + link->link_enc->funcs->destroy(&link->link_enc); } /* @@ -1051,7 +1049,7 @@ static bool construct( return true; device_tag_fail: - link->dc->res_pool.funcs->link_enc_destroy(&link->link_enc); + link->link_enc->funcs->destroy(&link->link_enc); link_enc_create_fail: dal_ddc_service_destroy(&link->ddc); ddc_create_fail: diff --git a/drivers/gpu/drm/amd/dal/dc/dce100/dce100_resource.c b/drivers/gpu/drm/amd/dal/dc/dce100/dce100_resource.c index 1911bbb..a4dba58 100644 --- a/drivers/gpu/drm/amd/dal/dc/dce100/dce100_resource.c +++ b/drivers/gpu/drm/amd/dal/dc/dce100/dce100_resource.c @@ -852,7 +852,6 @@ enum dc_status dce100_validate_with_context( static struct resource_funcs dce100_res_pool_funcs = { .destruct = dce100_destruct_resource_pool, .link_enc_create = dce100_link_encoder_create, - .link_enc_destroy = dce110_link_encoder_destroy, .validate_with_context = dce100_validate_with_context, .validate_bandwidth = dce100_validate_bandwidth }; diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.c index 525a923..0e5588a 100644 --- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.c +++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.c @@ -105,9 +105,11 @@ static struct link_encoder_funcs dce110_lnk_enc_funcs = { .set_lcd_backlight_level = dce110_link_encoder_set_lcd_backlight_level, .backlight_control = dce110_link_encoder_edp_backlight_control, .power_control = dce110_link_encoder_edp_power_control, - .connect_dig_be_to_fe = dce110_link_encoder_connect_dig_be_to_fe + .connect_dig_be_to_fe = dce110_link_encoder_connect_dig_be_to_fe, + .destroy = dce110_link_encoder_destroy }; + static enum bp_result link_transmitter_control( struct dce110_link_encoder *enc110, struct bp_transmitter_control *cntl) @@ -1261,6 +1263,12 @@ void dce110_link_encoder_hw_init( hpd_initialize(enc110); } +void dce110_link_encoder_destroy(struct link_encoder **enc) +{ + dm_free(TO_DCE110_LINK_ENC(*enc)); + *enc = NULL; +} + void dce110_link_encoder_setup( struct link_encoder *enc, enum signal_type signal) diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.h b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.h index e412804..45dfc60 100644 --- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.h +++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_link_encoder.h @@ -88,6 +88,8 @@ bool dce110_link_encoder_validate_output_with_stream( /* initialize HW */ /* why do we initialze aux in here? */ void dce110_link_encoder_hw_init(struct link_encoder *enc); +void dce110_link_encoder_destroy(struct link_encoder **enc); + /* program DIG_MODE in DIG_BE */ /* TODO can this be combined with enable_output? */ void dce110_link_encoder_setup( diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c index ef3f502..f02335e 100644 --- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c +++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c @@ -417,12 +417,6 @@ struct link_encoder *dce110_link_encoder_create( return NULL; } -void dce110_link_encoder_destroy(struct link_encoder **enc) -{ - dm_free(TO_DCE110_LINK_ENC(*enc)); - *enc = NULL; -} - static struct output_pixel_processor *dce110_opp_create( struct dc_context *ctx, uint32_t inst, @@ -979,7 +973,6 @@ enum dc_status dce110_validate_with_context( static struct resource_funcs dce110_res_pool_funcs = { .destruct = dce110_destruct_resource_pool, .link_enc_create = dce110_link_encoder_create, - .link_enc_destroy = dce110_link_encoder_destroy, .validate_with_context = dce110_validate_with_context, .validate_bandwidth = dce110_validate_bandwidth }; diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.h b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.h index 3aeb1e5..cf79abe 100644 --- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.h +++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.h @@ -40,7 +40,5 @@ bool dce110_construct_resource_pool( void dce110_destruct_resource_pool(struct resource_pool *pool); -void dce110_link_encoder_destroy(struct link_encoder **enc); - #endif /* __DC_RESOURCE_DCE110_H__ */ diff --git a/drivers/gpu/drm/amd/dal/dc/dce80/dce80_link_encoder.c b/drivers/gpu/drm/amd/dal/dc/dce80/dce80_link_encoder.c index e8c9e86..e25fca2 100644 --- a/drivers/gpu/drm/amd/dal/dc/dce80/dce80_link_encoder.c +++ b/drivers/gpu/drm/amd/dal/dc/dce80/dce80_link_encoder.c @@ -206,7 +206,8 @@ static struct link_encoder_funcs dce80_lnk_enc_funcs = { .set_lcd_backlight_level = dce110_link_encoder_set_lcd_backlight_level, .backlight_control = dce110_link_encoder_edp_backlight_control, .power_control = dce110_link_encoder_edp_power_control, - .connect_dig_be_to_fe = dce110_link_encoder_connect_dig_be_to_fe + .connect_dig_be_to_fe = dce110_link_encoder_connect_dig_be_to_fe, + .destroy = dce110_link_encoder_destroy }; bool dce80_link_encoder_construct( diff --git a/drivers/gpu/drm/amd/dal/dc/dce80/dce80_resource.c b/drivers/gpu/drm/amd/dal/dc/dce80/dce80_resource.c index 078183b..594f9ab 100644 --- a/drivers/gpu/drm/amd/dal/dc/dce80/dce80_resource.c +++ b/drivers/gpu/drm/amd/dal/dc/dce80/dce80_resource.c @@ -969,7 +969,6 @@ enum dc_status dce80_validate_with_context( static struct resource_funcs dce80_res_pool_funcs = { .destruct = dce80_destruct_resource_pool, .link_enc_create = dce80_link_encoder_create, - .link_enc_destroy = dce110_link_encoder_destroy, .validate_with_context = dce80_validate_with_context, .validate_bandwidth = dce80_validate_bandwidth }; diff --git a/drivers/gpu/drm/amd/dal/dc/inc/core_types.h b/drivers/gpu/drm/amd/dal/dc/inc/core_types.h index 02dddc4..4ec6192 100644 --- a/drivers/gpu/drm/amd/dal/dc/inc/core_types.h +++ b/drivers/gpu/drm/amd/dal/dc/inc/core_types.h @@ -238,7 +238,6 @@ struct resource_funcs { void (*destruct)(struct resource_pool *pool); struct link_encoder *(*link_enc_create)( const struct encoder_init_data *init); - void (*link_enc_destroy)(struct link_encoder **enc); enum dc_status (*validate_with_context)( const struct core_dc *dc, const struct dc_validation_set set[], diff --git a/drivers/gpu/drm/amd/dal/dc/inc/hw/link_encoder.h b/drivers/gpu/drm/amd/dal/dc/inc/hw/link_encoder.h index d11ef05..24d318d 100644 --- a/drivers/gpu/drm/amd/dal/dc/inc/hw/link_encoder.h +++ b/drivers/gpu/drm/amd/dal/dc/inc/hw/link_encoder.h @@ -118,6 +118,7 @@ struct link_encoder_funcs { void (*connect_dig_be_to_fe)(struct link_encoder *enc, enum engine_id engine, bool connect); + void (*destroy)(struct link_encoder **enc); }; #endif /* LINK_ENCODER_H_ */ diff --git a/drivers/gpu/drm/amd/dal/dc/virtual/virtual_link_encoder.c b/drivers/gpu/drm/amd/dal/dc/virtual/virtual_link_encoder.c index 0b3b1b8..66e1fcf 100644 --- a/drivers/gpu/drm/amd/dal/dc/virtual/virtual_link_encoder.c +++ b/drivers/gpu/drm/amd/dal/dc/virtual/virtual_link_encoder.c @@ -23,6 +23,7 @@ * */ +#include "dm_services.h" #include "dm_services_types.h" #include "virtual_link_encoder.h" @@ -90,6 +91,13 @@ static void virtual_link_encoder_connect_dig_be_to_fe( enum engine_id engine, bool connect) {} +static void virtual_link_encoder_destroy(struct link_encoder **enc) +{ + dm_free(*enc); + *enc = NULL; +} + + static struct link_encoder_funcs virtual_lnk_enc_funcs = { .validate_output_with_stream = virtual_link_encoder_validate_output_with_stream, @@ -106,7 +114,8 @@ static struct link_encoder_funcs virtual_lnk_enc_funcs = { .set_lcd_backlight_level = virtual_link_encoder_set_lcd_backlight_level, .backlight_control = virtual_link_encoder_edp_backlight_control, .power_control = virtual_link_encoder_edp_power_control, - .connect_dig_be_to_fe = virtual_link_encoder_connect_dig_be_to_fe + .connect_dig_be_to_fe = virtual_link_encoder_connect_dig_be_to_fe, + .destroy = virtual_link_encoder_destroy }; bool virtual_link_encoder_construct( @@ -131,3 +140,5 @@ bool virtual_link_encoder_construct( return true; } + + -- 2.7.4