diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0884-drm-amd-dal-Move-link-encoder-destroy-from-resource-.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0884-drm-amd-dal-Move-link-encoder-destroy-from-resource-.patch | 242 |
1 files changed, 242 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0884-drm-amd-dal-Move-link-encoder-destroy-from-resource-.patch b/common/recipes-kernel/linux/files/0884-drm-amd-dal-Move-link-encoder-destroy-from-resource-.patch new file mode 100644 index 00000000..042d0170 --- /dev/null +++ b/common/recipes-kernel/linux/files/0884-drm-amd-dal-Move-link-encoder-destroy-from-resource-.patch @@ -0,0 +1,242 @@ +From e3e7fa9e289b35926faa082a1b2a8d60c429f545 Mon Sep 17 00:00:00 2001 +From: Jordan Lazare <Jordan.Lazare@amd.com> +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 <Jordan.Lazare@amd.com> +Acked-by: Harry Wentland <harry.wentland@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + 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 + |