aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0884-drm-amd-dal-Move-link-encoder-destroy-from-resource-.patch
diff options
context:
space:
mode:
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-.patch242
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
+