[PATCH 24/76] drm/amd/dal: instantiate i2caux outside of AS
Harry Wentland
harry.wentland at amd.com
Mon Nov 21 23:00:44 UTC 2016
From: Tony Cheng <tony.cheng at amd.com>
- also consolidate dc create failure using destruct
Signed-off-by: Tony Cheng <tony.cheng at amd.com>
Acked-by: Harry Wentland <harry.wentland at amd.com>
---
.../gpu/drm/amd/dal/dc/adapter/adapter_service.c | 25 --------
drivers/gpu/drm/amd/dal/dc/bios/bios_parser.c | 2 +-
drivers/gpu/drm/amd/dal/dc/core/dc.c | 72 ++++++++++++++--------
drivers/gpu/drm/amd/dal/dc/core/dc_link_ddc.c | 10 +--
drivers/gpu/drm/amd/dal/dc/dc_types.h | 1 +
.../gpu/drm/amd/dal/dc/dce100/dce100_resource.c | 3 -
.../gpu/drm/amd/dal/dc/dce110/dce110_resource.c | 4 --
.../gpu/drm/amd/dal/dc/dce112/dce112_resource.c | 4 --
drivers/gpu/drm/amd/dal/dc/dce80/dce80_resource.c | 4 --
.../amd/dal/include/adapter_service_interface.h | 5 --
10 files changed, 52 insertions(+), 78 deletions(-)
diff --git a/drivers/gpu/drm/amd/dal/dc/adapter/adapter_service.c b/drivers/gpu/drm/amd/dal/dc/adapter/adapter_service.c
index f2e633e3ab74..435b222c48a4 100644
--- a/drivers/gpu/drm/amd/dal/dc/adapter/adapter_service.c
+++ b/drivers/gpu/drm/amd/dal/dc/adapter/adapter_service.c
@@ -595,9 +595,6 @@ static bool generate_feature_set(
static void adapter_service_destruct(
struct adapter_service *as)
{
- struct dc_bios *dcb = as->ctx->dc_bios;
-
- dal_i2caux_destroy(&as->i2caux);
dal_asic_capability_destroy(&as->asic_cap);
}
@@ -659,14 +656,6 @@ static bool adapter_service_construct(
dcb = as->ctx->dc_bios;
- /* Create I2C AUX */
- as->i2caux = dal_i2caux_create(as->ctx);
-
- if (!as->i2caux) {
- ASSERT_CRITICAL(false);
- goto failed_to_create_i2caux;
- }
-
dcb->funcs->post_init(dcb, as);
/* Generate backlight translation table and initializes
@@ -680,9 +669,6 @@ static bool adapter_service_construct(
return true;
failed_to_generate_features:
- dal_i2caux_destroy(&as->i2caux);
-
-failed_to_create_i2caux:
dal_asic_capability_destroy(&as->asic_cap);
return false;
@@ -966,17 +952,6 @@ bool dal_adapter_service_get_feature_value(struct adapter_service *as,
return true;
}
-/*
- * dal_adapter_service_get_i2caux
- *
- * Get i2c aux handler
- */
-struct i2caux *dal_adapter_service_get_i2caux(
- struct adapter_service *as)
-{
- return as->i2caux;
-}
-
bool dal_adapter_service_get_embedded_panel_info(
struct adapter_service *as,
struct embedded_panel_info *info)
diff --git a/drivers/gpu/drm/amd/dal/dc/bios/bios_parser.c b/drivers/gpu/drm/amd/dal/dc/bios/bios_parser.c
index 41093c21ce30..586df420f87b 100644
--- a/drivers/gpu/drm/amd/dal/dc/bios/bios_parser.c
+++ b/drivers/gpu/drm/amd/dal/dc/bios/bios_parser.c
@@ -2968,7 +2968,7 @@ static bool i2c_read(
/* TODO route this through drm i2c_adapter */
result = dal_i2caux_submit_i2c_command(
- dal_adapter_service_get_i2caux(as),
+ ddc->ctx->i2caux,
ddc,
&cmd);
}
diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc.c b/drivers/gpu/drm/amd/dal/dc/core/dc.c
index ec33cf9a7fd0..766cdb1d4286 100644
--- a/drivers/gpu/drm/amd/dal/dc/core/dc.c
+++ b/drivers/gpu/drm/amd/dal/dc/core/dc.c
@@ -479,6 +479,39 @@ static void allocate_dc_stream_funcs(struct core_dc *core_dc)
set_test_pattern;
}
+static void destruct(struct core_dc *dc)
+{
+ resource_validate_ctx_destruct(dc->current_context);
+
+ dm_free(dc->temp_flip_context);
+ dc->current_context = NULL;
+
+ destroy_links(dc);
+
+ if (dc->res_pool)
+ dc->res_pool->funcs->destroy(&dc->res_pool);
+
+ if (dc->ctx->gpio_service)
+ dal_gpio_service_destroy(&dc->ctx->gpio_service);
+
+ if (dc->ctx->adapter_srv)
+ dal_adapter_service_destroy(&dc->ctx->adapter_srv);
+
+ if (dc->ctx->i2caux)
+ dal_i2caux_destroy(&dc->ctx->i2caux);
+
+ if (dc->ctx->created_bios)
+ dal_bios_parser_destroy(&dc->ctx->dc_bios);
+
+ if (dc->ctx->logger)
+ dal_logger_destroy(&dc->ctx->logger);
+
+ dm_free(dc->current_context);
+ dm_free(dc->ctx);
+
+ dc->ctx = NULL;
+}
+
static bool construct(struct core_dc *dc,
const struct dc_init_data *init_params)
{
@@ -543,6 +576,14 @@ static bool construct(struct core_dc *dc,
dc_ctx->created_bios = true;
}
+ /* Create I2C AUX */
+ dc_ctx->i2caux = dal_i2caux_create(dc_ctx);
+
+ if (!dc_ctx->i2caux) {
+ ASSERT_CRITICAL(false);
+ goto failed_to_create_i2caux;
+ }
+
/* TODO: Refactor DCE code to remove AS and asic caps */
if (dc_version < DCE_VERSION_MAX) {
/* Create adapter service */
@@ -552,6 +593,7 @@ static bool construct(struct core_dc *dc,
dm_error("%s: create_as() failed!\n", __func__);
goto as_fail;
}
+ dc_ctx->adapter_srv = as;
}
/* Create GPIO service */
@@ -583,42 +625,18 @@ static bool construct(struct core_dc *dc,
/**** error handling here ****/
create_links_fail:
- dc->res_pool->funcs->destroy(&dc->res_pool);
create_resource_fail:
- if (dc->ctx->gpio_service)
- dal_gpio_service_destroy(&dc_ctx->gpio_service);
gpio_fail:
- if (as)
- dal_adapter_service_destroy(&as);
as_fail:
- if (dc->ctx->created_bios)
- dal_bios_parser_destroy(&dc->ctx->dc_bios);
+failed_to_create_i2caux:
bios_fail:
- dal_logger_destroy(&dc_ctx->logger);
logger_fail:
- dm_free(dc->current_context);
val_ctx_fail:
- dm_free(dc_ctx);
ctx_fail:
+ destruct(dc);
return false;
}
-static void destruct(struct core_dc *dc)
-{
- dal_gpio_service_destroy(&dc->ctx->gpio_service);
- resource_validate_ctx_destruct(dc->current_context);
- dm_free(dc->current_context);
- dm_free(dc->temp_flip_context);
- dc->current_context = NULL;
- destroy_links(dc);
- dc->res_pool->funcs->destroy(&dc->res_pool);
- dal_logger_destroy(&dc->ctx->logger);
- if (dc->ctx->created_bios)
- dal_bios_parser_destroy(&dc->ctx->dc_bios);
- dm_free(dc->ctx);
- dc->ctx = NULL;
-}
-
/*
void ProgramPixelDurationV(unsigned int pixelClockInKHz )
{
@@ -1710,7 +1728,7 @@ bool dc_submit_i2c(
struct ddc_service *ddc = link->ddc;
return dal_i2caux_submit_i2c_command(
- dal_adapter_service_get_i2caux(ddc->as),
+ ddc->ctx->i2caux,
ddc->ddc_pin,
cmd);
}
diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc_link_ddc.c b/drivers/gpu/drm/amd/dal/dc/core/dc_link_ddc.c
index c440d9d123ad..c945d4b27def 100644
--- a/drivers/gpu/drm/amd/dal/dc/core/dc_link_ddc.c
+++ b/drivers/gpu/drm/amd/dal/dc/core/dc_link_ddc.c
@@ -507,7 +507,7 @@ static uint8_t aux_read_edid_block(
}
if (!dal_i2caux_submit_aux_command(
- dal_adapter_service_get_i2caux(ddc->as),
+ ddc->ctx->i2caux,
ddc->ddc_pin,
&cmd))
/* cannot read, break*/
@@ -530,7 +530,7 @@ static uint8_t aux_read_edid_block(
cmd.payloads = payloads;
result = dal_i2caux_submit_aux_command(
- dal_adapter_service_get_i2caux(ddc->as),
+ ddc->ctx->i2caux,
ddc->ddc_pin,
&cmd);
@@ -927,7 +927,7 @@ bool dal_ddc_service_query_ddc_data(
dal_ddc_aux_payloads_get_count(payloads);
ret = dal_i2caux_submit_aux_command(
- dal_adapter_service_get_i2caux(ddc->as),
+ ddc->ctx->i2caux,
ddc->ddc_pin,
&command);
@@ -989,7 +989,7 @@ enum ddc_result dal_ddc_service_read_dpcd_data(
}
if (dal_i2caux_submit_aux_command(
- dal_adapter_service_get_i2caux(ddc->as),
+ ddc->ctx->i2caux,
ddc->ddc_pin,
&command))
return DDC_RESULT_SUCESSFULL;
@@ -1023,7 +1023,7 @@ enum ddc_result dal_ddc_service_write_dpcd_data(
}
if (dal_i2caux_submit_aux_command(
- dal_adapter_service_get_i2caux(ddc->as),
+ ddc->ctx->i2caux,
ddc->ddc_pin,
&command))
return DDC_RESULT_SUCESSFULL;
diff --git a/drivers/gpu/drm/amd/dal/dc/dc_types.h b/drivers/gpu/drm/amd/dal/dc/dc_types.h
index b30dfbf7281e..15f45180a0cf 100644
--- a/drivers/gpu/drm/amd/dal/dc/dc_types.h
+++ b/drivers/gpu/drm/amd/dal/dc/dc_types.h
@@ -81,6 +81,7 @@ struct dc_context {
bool created_bios;
struct gpio_service *gpio_service;
struct i2caux *i2caux;
+ struct adapter_service *adapter_srv;
};
/*
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 d1587fe3b854..81319166ed16 100644
--- a/drivers/gpu/drm/amd/dal/dc/dce100/dce100_resource.c
+++ b/drivers/gpu/drm/amd/dal/dc/dce100/dce100_resource.c
@@ -659,9 +659,6 @@ static void destruct(struct dce110_resource_pool *pool)
if (pool->base.irqs != NULL)
dal_irq_service_destroy(&pool->base.irqs);
-
- if (pool->base.adapter_srv != NULL)
- dal_adapter_service_destroy(&pool->base.adapter_srv);
}
static enum dc_status validate_mapped_resource(
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 33f4455e80f6..15958e6cedd1 100644
--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c
+++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c
@@ -631,10 +631,6 @@ static void destruct(struct dce110_resource_pool *pool)
if (pool->base.irqs != NULL) {
dal_irq_service_destroy(&pool->base.irqs);
}
-
- if (pool->base.adapter_srv != NULL) {
- dal_adapter_service_destroy(&pool->base.adapter_srv);
- }
}
diff --git a/drivers/gpu/drm/amd/dal/dc/dce112/dce112_resource.c b/drivers/gpu/drm/amd/dal/dc/dce112/dce112_resource.c
index 5d53a0b9e8e1..950c505cde66 100644
--- a/drivers/gpu/drm/amd/dal/dc/dce112/dce112_resource.c
+++ b/drivers/gpu/drm/amd/dal/dc/dce112/dce112_resource.c
@@ -692,10 +692,6 @@ static void destruct(struct dce110_resource_pool *pool)
if (pool->base.irqs != NULL) {
dal_irq_service_destroy(&pool->base.irqs);
}
-
- if (pool->base.adapter_srv != NULL) {
- dal_adapter_service_destroy(&pool->base.adapter_srv);
- }
}
static struct clock_source *find_matching_pll(struct resource_context *res_ctx,
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 932f37559da9..1e38c9aacdad 100644
--- a/drivers/gpu/drm/amd/dal/dc/dce80/dce80_resource.c
+++ b/drivers/gpu/drm/amd/dal/dc/dce80/dce80_resource.c
@@ -609,10 +609,6 @@ static void destruct(struct dce110_resource_pool *pool)
if (pool->base.irqs != NULL) {
dal_irq_service_destroy(&pool->base.irqs);
}
-
- if (pool->base.adapter_srv != NULL) {
- dal_adapter_service_destroy(&pool->base.adapter_srv);
- }
}
static enum dc_status validate_mapped_resource(
diff --git a/drivers/gpu/drm/amd/dal/include/adapter_service_interface.h b/drivers/gpu/drm/amd/dal/include/adapter_service_interface.h
index 7b001f0aa9db..39adbbf25638 100644
--- a/drivers/gpu/drm/amd/dal/include/adapter_service_interface.h
+++ b/drivers/gpu/drm/amd/dal/include/adapter_service_interface.h
@@ -297,7 +297,6 @@ struct adapter_service {
struct dc_context *ctx;
struct asic_capability *asic_cap;
enum dce_environment dce_environment;
- struct i2caux *i2caux;
uint32_t platform_methods_mask;
uint32_t ac_level_percentage;
uint32_t dc_level_percentage;
@@ -371,10 +370,6 @@ bool dal_adapter_service_get_i2c_info(
struct graphics_object_id id,
struct graphics_object_i2c_info *i2c_info);
-/* Get i2c aux handler */
-struct i2caux *dal_adapter_service_get_i2caux(
- struct adapter_service *as);
-
struct dal_asic_runtime_flags dal_adapter_service_get_asic_runtime_flags(
struct adapter_service *as);
--
2.10.1
More information about the amd-gfx
mailing list