diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0856-drm-amd-dal-Refactor-DC-creation-merge-dc-and-dal-in.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0856-drm-amd-dal-Refactor-DC-creation-merge-dc-and-dal-in.patch | 406 |
1 files changed, 406 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0856-drm-amd-dal-Refactor-DC-creation-merge-dc-and-dal-in.patch b/common/recipes-kernel/linux/files/0856-drm-amd-dal-Refactor-DC-creation-merge-dc-and-dal-in.patch new file mode 100644 index 00000000..5ad0f63c --- /dev/null +++ b/common/recipes-kernel/linux/files/0856-drm-amd-dal-Refactor-DC-creation-merge-dc-and-dal-in.patch @@ -0,0 +1,406 @@ +From 735bfe630c7dbbd8387dbeba3e353b5898d7c8be Mon Sep 17 00:00:00 2001 +From: Eric Yang <eric.yang2@amd.com> +Date: Sat, 27 Feb 2016 14:22:46 -0500 +Subject: [PATCH 0856/1110] drm/amd/dal: Refactor DC creation merge dc and dal + init_data + +Also deletes unused members in the two init data structures + +Signed-off-by: Eric Yang <eric.yang2@amd.com> +Acked-by: Harry Wentland <harry.wentland@amd.com> +--- + drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c | 11 +-- + .../gpu/drm/amd/dal/dc/adapter/adapter_service.c | 5 -- + .../gpu/drm/amd/dal/dc/adapter/adapter_service.h | 1 - + drivers/gpu/drm/amd/dal/dc/core/dc.c | 89 ++++++++++------------ + drivers/gpu/drm/amd/dal/dc/dc.h | 12 +-- + drivers/gpu/drm/amd/dal/dc/dc_types.h | 15 ---- + .../amd/dal/include/adapter_service_interface.h | 4 - + 7 files changed, 44 insertions(+), 93 deletions(-) + +diff --git a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c +index 257969f..ed2cdc5 100644 +--- a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c ++++ b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c +@@ -246,8 +246,7 @@ static void hotplug_notify_work_func(struct work_struct *work) + */ + int amdgpu_dm_init(struct amdgpu_device *adev) + { +- struct dal_init_data init_data; +- struct drm_device *ddev = adev->ddev; ++ struct dc_init_data init_data; + adev->dm.ddev = adev->ddev; + adev->dm.adev = adev; + +@@ -265,14 +264,6 @@ int amdgpu_dm_init(struct amdgpu_device *adev) + goto error; + } + +- if (ddev->pdev) { +- init_data.bdf_info.DEVICE_NUMBER = PCI_SLOT(ddev->pdev->devfn); +- init_data.bdf_info.FUNCTION_NUMBER = +- PCI_FUNC(ddev->pdev->devfn); +- if (ddev->pdev->bus) +- init_data.bdf_info.BUS_NUMBER = ddev->pdev->bus->number; +- } +- + init_data.display_param = display_param; + + init_data.asic_id.chip_family = adev->family; +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 99ba0c7..339f046 100644 +--- a/drivers/gpu/drm/amd/dal/dc/adapter/adapter_service.c ++++ b/drivers/gpu/drm/amd/dal/dc/adapter/adapter_service.c +@@ -1938,11 +1938,6 @@ struct ddc *dal_adapter_service_obtain_ddc_from_i2c_info( + (1 << info->gpio_info.clk_a_shift), &hw_info); + } + +-struct bdf_info dal_adapter_service_get_adapter_info(struct adapter_service *as) +-{ +- return as->bdf_info; +-} +- + /* + * dal_adapter_service_should_psr_skip_wait_for_pll_lock + * +diff --git a/drivers/gpu/drm/amd/dal/dc/adapter/adapter_service.h b/drivers/gpu/drm/amd/dal/dc/adapter/adapter_service.h +index 7cc8991..57f9a87 100644 +--- a/drivers/gpu/drm/amd/dal/dc/adapter/adapter_service.h ++++ b/drivers/gpu/drm/amd/dal/dc/adapter/adapter_service.h +@@ -49,7 +49,6 @@ struct adapter_service { + struct wireless_data wireless_data; + struct hw_ctx_adapter_service *hw_ctx; + struct integrated_info *integrated_info; +- struct bdf_info bdf_info; + uint32_t platform_methods_mask; + uint32_t ac_level_percentage; + uint32_t dc_level_percentage; +diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc.c b/drivers/gpu/drm/amd/dal/dc/core/dc.c +index 44f43ea..ef238a0 100644 +--- a/drivers/gpu/drm/amd/dal/dc/core/dc.c ++++ b/drivers/gpu/drm/amd/dal/dc/core/dc.c +@@ -69,7 +69,10 @@ static void destroy_links(struct core_dc *dc) + } + } + +-static bool create_links(struct core_dc *dc, const struct dc_init_data *init_params) ++static bool create_links( ++ struct core_dc *dc, ++ struct adapter_service *as, ++ uint32_t num_virtual_links) + { + int i; + int connectors_num; +@@ -77,7 +80,7 @@ static bool create_links(struct core_dc *dc, const struct dc_init_data *init_par + + dc->link_count = 0; + +- dcb = dal_adapter_service_get_bios_parser(init_params->adapter_srv); ++ dcb = dal_adapter_service_get_bios_parser(as); + + connectors_num = dcb->funcs->get_connectors_number(dcb); + +@@ -89,7 +92,7 @@ static bool create_links(struct core_dc *dc, const struct dc_init_data *init_par + return false; + } + +- if (connectors_num == 0 && init_params->num_virtual_links == 0) { ++ if (connectors_num == 0 && num_virtual_links == 0) { + dm_error("DC: Number of connectors can not be zero!\n"); + return false; + } +@@ -98,14 +101,14 @@ static bool create_links(struct core_dc *dc, const struct dc_init_data *init_par + "DC: %s: connectors_num: physical:%d, virtual:%d\n", + __func__, + connectors_num, +- init_params->num_virtual_links); ++ num_virtual_links); + + for (i = 0; i < connectors_num; i++) { + struct link_init_data link_init_params = {0}; + struct core_link *link; + +- link_init_params.ctx = init_params->ctx; +- link_init_params.adapter_srv = init_params->adapter_srv; ++ link_init_params.ctx = dc->ctx; ++ link_init_params.adapter_srv = as; + link_init_params.connector_index = i; + link_init_params.link_index = dc->link_count; + link_init_params.dc = dc; +@@ -120,7 +123,7 @@ static bool create_links(struct core_dc *dc, const struct dc_init_data *init_par + } + } + +- for (i = 0; i < init_params->num_virtual_links; i++) { ++ for (i = 0; i < num_virtual_links; i++) { + struct core_link *link = dm_alloc(sizeof(*link)); + struct encoder_init_data enc_init = {0}; + +@@ -129,8 +132,8 @@ static bool create_links(struct core_dc *dc, const struct dc_init_data *init_par + goto failed_alloc; + } + +- link->adapter_srv = init_params->adapter_srv; +- link->ctx = init_params->ctx; ++ link->adapter_srv = as; ++ link->ctx = dc->ctx; + link->dc = dc; + link->public.connector_signal = SIGNAL_TYPE_VIRTUAL; + link->link_id.type = OBJECT_TYPE_CONNECTOR; +@@ -138,8 +141,8 @@ static bool create_links(struct core_dc *dc, const struct dc_init_data *init_par + link->link_id.enum_id = ENUM_ID_1; + link->link_enc = dm_alloc(sizeof(*link->link_enc)); + +- enc_init.adapter_service = init_params->adapter_srv; +- enc_init.ctx = init_params->ctx; ++ enc_init.adapter_service = as; ++ enc_init.ctx = dc->ctx; + enc_init.channel = CHANNEL_ID_UNKNOWN; + enc_init.hpd_source = HPD_SOURCEID_UNKNOWN; + enc_init.transmitter = TRANSMITTER_UNKNOWN; +@@ -215,18 +218,18 @@ static void init_hw(struct core_dc *dc) + } + + static struct adapter_service *create_as( +- struct dc_init_data *dc_init_data, +- const struct dal_init_data *init) ++ const struct dc_init_data *init, ++ struct dc_context *dc_ctx) + { + struct adapter_service *as = NULL; + struct as_init_data init_data; + + dm_memset(&init_data, 0, sizeof(init_data)); + +- init_data.ctx = dc_init_data->ctx; ++ init_data.ctx = dc_ctx; + + /* BIOS parser init data */ +- init_data.bp_init_data.ctx = dc_init_data->ctx; ++ init_data.bp_init_data.ctx = dc_ctx; + init_data.bp_init_data.bios = init->asic_id.atombios_base_address; + + /* HW init data */ +@@ -240,9 +243,6 @@ static struct adapter_service *create_as( + init_data.hw_init_data.vram_width = init->asic_id.vram_width; + init_data.hw_init_data.vram_type = init->asic_id.vram_type; + +- /* bdf is BUS,DEVICE,FUNCTION*/ +- init_data.bdf_info = init->bdf_info; +- + init_data.display_param = &init->display_param; + init_data.vbios_override = init->vbios_override; + init_data.dce_environment = init->dce_environment; +@@ -298,72 +298,63 @@ static void bw_calcs_data_update_from_pplib(struct core_dc *dc) + 1000); + } + +-static bool construct(struct core_dc *dc, const struct dal_init_data *init_params) ++static bool construct(struct core_dc *dc, const struct dc_init_data *init_params) + { + struct dal_logger *logger; +- /* Tempory code +- * TODO: replace dal_init_data with dc_init_data when dal is removed +- */ +- struct dc_init_data dc_init_data = {0}; +- +- /* Create dc context */ +- /* A temp dc context is used only to allocate the memory for actual +- * dc context */ +- struct dc_context ctx = {0}; +- ctx.cgs_device = init_params->cgs_device; +- ctx.dc = dc; ++ struct adapter_service *as; ++ struct dc_context *dc_ctx = dm_alloc(sizeof(*dc_ctx)); + +- dc_init_data.ctx = dm_alloc(sizeof(*dc_init_data.ctx)); +- if (!dc_init_data.ctx) { ++ ++ if (!dc_ctx) { + dm_error("%s: failed to create ctx\n", __func__); + goto ctx_fail; + } +- dc_init_data.ctx->driver_context = init_params->driver; +- dc_init_data.ctx->cgs_device = init_params->cgs_device; +- dc_init_data.num_virtual_links = init_params->num_virtual_links; +- dc_init_data.ctx->dc = dc; ++ ++ dc_ctx->cgs_device = init_params->cgs_device; ++ dc_ctx->driver_context = init_params->driver; ++ dc_ctx->dc = dc; + + /* Create logger */ +- logger = dal_logger_create(dc_init_data.ctx); ++ logger = dal_logger_create(dc_ctx); + + if (!logger) { + /* can *not* call logger. call base driver 'print error' */ + dm_error("%s: failed to create Logger!\n", __func__); + goto logger_fail; + } +- dc_init_data.ctx->logger = logger; ++ dc_ctx->logger = logger; + + /* Create adapter service */ +- dc_init_data.adapter_srv = create_as(&dc_init_data, init_params); ++ as = create_as(init_params, dc_ctx); + +- if (!dc_init_data.adapter_srv) { ++ if (!as) { + dm_error("%s: create_as() failed!\n", __func__); + goto as_fail; + } + + /* Initialize HW controlled by Adapter Service */ + if (false == dal_adapter_service_initialize_hw_data( +- dc_init_data.adapter_srv)) { ++ as)) { + dm_error("%s: dal_adapter_service_initialize_hw_data()"\ + " failed!\n", __func__); + /* Note that AS exist, so have to destroy it.*/ + goto as_fail; + } + +- dc->ctx = dc_init_data.ctx; ++ dc->ctx = dc_ctx; + + dc->ctx->dce_environment = dal_adapter_service_get_dce_environment( +- dc_init_data.adapter_srv); ++ as); + + /* Create hardware sequencer */ +- if (!dc_construct_hw_sequencer(dc_init_data.adapter_srv, dc)) ++ if (!dc_construct_hw_sequencer(as, dc)) + goto hwss_fail; + + if (!dc_construct_resource_pool( +- dc_init_data.adapter_srv, dc, dc_init_data.num_virtual_links)) ++ as, dc, init_params->num_virtual_links)) + goto construct_resource_fail; + +- if (!create_links(dc, &dc_init_data)) ++ if (!create_links(dc, as, init_params->num_virtual_links)) + goto create_links_fail; + + bw_calcs_init(&dc->bw_dceip, &dc->bw_vbios); +@@ -376,10 +367,10 @@ static bool construct(struct core_dc *dc, const struct dal_init_data *init_param + construct_resource_fail: + create_links_fail: + as_fail: +- dal_logger_destroy(&dc_init_data.ctx->logger); ++ dal_logger_destroy(&dc_ctx->logger); + logger_fail: + hwss_fail: +- dm_free(dc_init_data.ctx); ++ dm_free(dc_ctx); + ctx_fail: + return false; + } +@@ -463,7 +454,7 @@ static int8_t acquire_first_free_underlay( + * Public functions + ******************************************************************************/ + +-struct core_dc *dc_create(const struct dal_init_data *init_params) ++struct core_dc *dc_create(const struct dc_init_data *init_params) + { + struct dc_context ctx = { + .driver_context = init_params->driver, +diff --git a/drivers/gpu/drm/amd/dal/dc/dc.h b/drivers/gpu/drm/amd/dal/dc/dc.h +index aacdefe..41010f7 100644 +--- a/drivers/gpu/drm/amd/dal/dc/dc.h ++++ b/drivers/gpu/drm/amd/dal/dc/dc.h +@@ -38,11 +38,6 @@ + /******************************************************************************* + * Display Core Interfaces + ******************************************************************************/ +-struct dc_init_data { +- struct dc_context *ctx; +- struct adapter_service *adapter_srv; +- uint8_t num_virtual_links; +-}; + + struct dc_caps { + uint32_t max_targets; +@@ -52,13 +47,12 @@ struct dc_caps { + + void dc_get_caps(const struct core_dc *dc, struct dc_caps *caps); + +-struct dal_init_data { ++struct dc_init_data { + struct hw_asic_id asic_id; +- struct view_port_alignment vp_alignment; +- struct bdf_info bdf_info; + struct dal_override_parameters display_param; + void *driver; /* ctx */ + void *cgs_device; ++ + uint8_t num_virtual_links; + /* + * If 'vbios_override' not NULL, it will be called instead +@@ -68,7 +62,7 @@ struct dal_init_data { + enum dce_environment dce_environment; + }; + +-struct core_dc *dc_create(const struct dal_init_data *init_params); ++struct core_dc *dc_create(const struct dc_init_data *init_params); + void dc_destroy(struct core_dc **dc); + + /******************************************************************************* +diff --git a/drivers/gpu/drm/amd/dal/dc/dc_types.h b/drivers/gpu/drm/amd/dal/dc/dc_types.h +index b737206..0fb4822 100644 +--- a/drivers/gpu/drm/amd/dal/dc/dc_types.h ++++ b/drivers/gpu/drm/amd/dal/dc/dc_types.h +@@ -120,14 +120,6 @@ struct hw_asic_id { + void *atombios_base_address; + }; + +-/* this is pci information. BDF stands for BUS,DEVICE,FUNCTION*/ +- +-struct bdf_info { +- uint16_t BUS_NUMBER:8; +- uint16_t DEVICE_NUMBER:5; +- uint16_t FUNCTION_NUMBER:3; +-}; +- + /* array index for integer override parameters*/ + enum int_param_array_index { + DAL_PARAM_MAX_COFUNC_NON_DP_DISPLAYS = 0, +@@ -534,13 +526,6 @@ enum dc_acpi_cm_power_state { + DC_ACPI_CM_POWER_STATE_D3 = 8 + }; + +-struct view_port_alignment { +- uint8_t x_width_size_alignment; +- uint8_t y_height_size_alignment; +- uint8_t x_start_alignment; +- uint8_t y_start_alignment; +-}; +- + enum dc_connection_type { + dc_connection_none, + dc_connection_single, +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 a4b37ff..cc093b1 100644 +--- a/drivers/gpu/drm/amd/dal/include/adapter_service_interface.h ++++ b/drivers/gpu/drm/amd/dal/include/adapter_service_interface.h +@@ -318,7 +318,6 @@ struct as_init_data { + struct hw_asic_id hw_init_data; + struct bp_init_data bp_init_data; + struct dc_context *ctx; +- struct bdf_info bdf_info; + const struct dal_override_parameters *display_param; + struct dc_bios *vbios_override; + enum dce_environment dce_environment; +@@ -580,9 +579,6 @@ struct ddc *dal_adapter_service_obtain_ddc_from_i2c_info( + struct adapter_service *as, + struct graphics_object_i2c_info *info); + +-struct bdf_info dal_adapter_service_get_adapter_info( +- struct adapter_service *as); +- + /* Determine if this ASIC needs to wait on PLL lock bit */ + bool dal_adapter_service_should_psr_skip_wait_for_pll_lock( + struct adapter_service *as); +-- +2.7.4 + |