aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0703-drm-amd-dal-Override-some-virtual-functions-for-Diag.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0703-drm-amd-dal-Override-some-virtual-functions-for-Diag.patch')
-rw-r--r--common/recipes-kernel/linux/files/0703-drm-amd-dal-Override-some-virtual-functions-for-Diag.patch1709
1 files changed, 0 insertions, 1709 deletions
diff --git a/common/recipes-kernel/linux/files/0703-drm-amd-dal-Override-some-virtual-functions-for-Diag.patch b/common/recipes-kernel/linux/files/0703-drm-amd-dal-Override-some-virtual-functions-for-Diag.patch
deleted file mode 100644
index ab27d06e..00000000
--- a/common/recipes-kernel/linux/files/0703-drm-amd-dal-Override-some-virtual-functions-for-Diag.patch
+++ /dev/null
@@ -1,1709 +0,0 @@
-From 060a4205ae78b9cb3ffafcf0078c4011ca20d8ee Mon Sep 17 00:00:00 2001
-From: David Rokhvarg <David.Rokhvarg@amd.com>
-Date: Tue, 19 Jan 2016 13:43:50 -0500
-Subject: [PATCH 0703/1110] drm/amd/dal: Override some virtual functions for
- Diagnostics use.
-
-This will prevent access to registers which are non-existent on
-FPGA emulation.
-
-Signed-off-by: David Rokhvarg <David.Rokhvarg@amd.com>
-Acked-by: Harry Wentland <harry.wentland@amd.com>
----
- drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c | 2 +
- drivers/gpu/drm/amd/dal/dc/adapter/Makefile | 6 +
- .../gpu/drm/amd/dal/dc/adapter/adapter_service.c | 180 +++++++++++++--------
- .../gpu/drm/amd/dal/dc/adapter/adapter_service.h | 4 +-
- .../diagnostics/hw_ctx_adapter_service_diag.c | 133 +++++++++++++++
- .../diagnostics/hw_ctx_adapter_service_diag.h | 33 ++++
- drivers/gpu/drm/amd/dal/dc/core/dc.c | 6 +
- drivers/gpu/drm/amd/dal/dc/gpio/Makefile | 8 +
- .../drm/amd/dal/dc/gpio/diagnostics/hw_ddc_diag.c | 98 +++++++++++
- .../drm/amd/dal/dc/gpio/diagnostics/hw_ddc_diag.h | 34 ++++
- .../amd/dal/dc/gpio/diagnostics/hw_factory_diag.c | 70 ++++++++
- .../amd/dal/dc/gpio/diagnostics/hw_factory_diag.h | 32 ++++
- .../drm/amd/dal/dc/gpio/diagnostics/hw_hpd_diag.c | 102 ++++++++++++
- .../drm/amd/dal/dc/gpio/diagnostics/hw_hpd_diag.h | 35 ++++
- .../dal/dc/gpio/diagnostics/hw_translate_diag.c | 42 +++++
- .../dal/dc/gpio/diagnostics/hw_translate_diag.h | 34 ++++
- drivers/gpu/drm/amd/dal/dc/gpio/gpio_service.c | 9 +-
- drivers/gpu/drm/amd/dal/dc/gpio/hw_factory.c | 14 +-
- drivers/gpu/drm/amd/dal/dc/gpio/hw_factory.h | 3 +-
- drivers/gpu/drm/amd/dal/dc/gpio/hw_translate.c | 13 +-
- drivers/gpu/drm/amd/dal/dc/gpio/hw_translate.h | 3 +-
- drivers/gpu/drm/amd/dal/dc/i2caux/Makefile | 10 ++
- .../amd/dal/dc/i2caux/diagnostics/i2caux_diag.c | 113 +++++++++++++
- .../amd/dal/dc/i2caux/diagnostics/i2caux_diag.h | 33 ++++
- drivers/gpu/drm/amd/dal/dc/i2caux/i2caux.c | 11 ++
- drivers/gpu/drm/amd/dal/dc/inc/core_dc.h | 6 +
- .../amd/dal/include/adapter_service_interface.h | 4 +
- drivers/gpu/drm/amd/dal/include/dal_types.h | 7 +
- .../drm/amd/dal/include/gpio_service_interface.h | 3 +-
- 29 files changed, 973 insertions(+), 75 deletions(-)
- create mode 100644 drivers/gpu/drm/amd/dal/dc/adapter/diagnostics/hw_ctx_adapter_service_diag.c
- create mode 100644 drivers/gpu/drm/amd/dal/dc/adapter/diagnostics/hw_ctx_adapter_service_diag.h
- create mode 100644 drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_ddc_diag.c
- create mode 100644 drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_ddc_diag.h
- create mode 100644 drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_factory_diag.c
- create mode 100644 drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_factory_diag.h
- create mode 100644 drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_hpd_diag.c
- create mode 100644 drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_hpd_diag.h
- create mode 100644 drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_translate_diag.c
- create mode 100644 drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_translate_diag.h
- create mode 100644 drivers/gpu/drm/amd/dal/dc/i2caux/diagnostics/i2caux_diag.c
- create mode 100644 drivers/gpu/drm/amd/dal/dc/i2caux/diagnostics/i2caux_diag.h
-
-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 9879512..7614ac8 100644
---- a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c
-+++ b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c
-@@ -527,6 +527,8 @@ int amdgpu_dm_init(struct amdgpu_device *adev)
- init_data.display_param.bool_param_values |=
- 1 << DAL_PARAM_ENABLE_GPU_SCALING;
-
-+ init_data.dce_environment = DCE_ENV_PRODUCTION_DRV;
-+
- /* Display Core create. */
- adev->dm.dc = dc_create(&init_data);
-
-diff --git a/drivers/gpu/drm/amd/dal/dc/adapter/Makefile b/drivers/gpu/drm/amd/dal/dc/adapter/Makefile
-index 8ede504..2c6ca7a 100644
---- a/drivers/gpu/drm/amd/dal/dc/adapter/Makefile
-+++ b/drivers/gpu/drm/amd/dal/dc/adapter/Makefile
-@@ -16,3 +16,9 @@ AMD_DAL_FILES += $(AMD_DAL_ADAPTER)
- ifdef CONFIG_DRM_AMD_DAL_DCE11_0
- AMD_DAL_FILES += $(AMDDALPATH)/dc/adapter/dce110/hw_ctx_adapter_service_dce110.o
- endif
-+
-+###############################################################################
-+# FPGA Diagnositcs
-+###############################################################################
-+
-+AMD_DAL_FILES += $(AMDDALPATH)/dc/adapter/diagnostics/hw_ctx_adapter_service_diag.o
-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 b3b3be7..b8d6033 100644
---- a/drivers/gpu/drm/amd/dal/dc/adapter/adapter_service.c
-+++ b/drivers/gpu/drm/amd/dal/dc/adapter/adapter_service.c
-@@ -45,6 +45,8 @@
- #include "dce110/hw_ctx_adapter_service_dce110.h"
- #endif
-
-+#include "diagnostics/hw_ctx_adapter_service_diag.h"
-+
- /*
- * Adapter service feature entry table.
- *
-@@ -224,6 +226,7 @@ static void initialize_backlight_caps(
- struct platform_info_params params;
- bool custom_curve_present = false;
- bool custom_min_max_present = false;
-+ struct dc_bios *dcb = dal_adapter_service_get_bios_parser(as);
-
- if (!(PM_GET_EXTENDED_BRIGHNESS_CAPS & as->platform_methods_mask)) {
- dal_logger_write(as->ctx->logger,
-@@ -233,8 +236,8 @@ static void initialize_backlight_caps(
- return;
- }
-
-- if (as->dcb->funcs->get_firmware_info(as->dcb, &fw_info) != BP_RESULT_OK ||
-- as->dcb->funcs->get_embedded_panel_info(as->dcb, &panel_info) != BP_RESULT_OK)
-+ if (dcb->funcs->get_firmware_info(dcb, &fw_info) != BP_RESULT_OK ||
-+ dcb->funcs->get_embedded_panel_info(dcb, &panel_info) != BP_RESULT_OK)
- return;
-
- params.data = &caps;
-@@ -550,8 +553,9 @@ static bool get_hpd_info(struct adapter_service *as,
- struct graphics_object_id id,
- struct graphics_object_hpd_info *info)
- {
-- return BP_RESULT_OK ==
-- as->dcb->funcs->get_hpd_info(as->dcb, id, info);
-+ struct dc_bios *dcb = dal_adapter_service_get_bios_parser(as);
-+
-+ return BP_RESULT_OK == dcb->funcs->get_hpd_info(dcb, id, info);
- }
-
- /*
-@@ -662,8 +666,16 @@ static bool generate_feature_set(
- */
- static struct hw_ctx_adapter_service *create_hw_ctx(
- enum dce_version dce_version,
-+ enum dce_environment dce_environment,
- struct dc_context *ctx)
- {
-+ switch (dce_environment) {
-+ case DCE_ENV_DIAG_FPGA_MAXIMUS:
-+ return dal_adapter_service_create_hw_ctx_diag(ctx);
-+ default:
-+ break;
-+ }
-+
- switch (dce_version) {
- #if defined(CONFIG_DRM_AMD_DAL_DCE11_0)
- case DCE_VERSION_11_0:
-@@ -683,12 +695,20 @@ static struct hw_ctx_adapter_service *create_hw_ctx(
- static void adapter_service_destruct(
- struct adapter_service *as)
- {
-+ struct dc_bios *dcb = dal_adapter_service_get_bios_parser(as);
-+
- dal_adapter_service_destroy_hw_ctx(&as->hw_ctx);
- dal_i2caux_destroy(&as->i2caux);
- dal_gpio_service_destroy(&as->gpio_service);
- dal_asic_capability_destroy(&as->asic_cap);
-- as->dcb->funcs->destroy_integrated_info(as->dcb, &as->integrated_info);
-- dal_bios_parser_destroy(&as->dcb);
-+
-+ dcb->funcs->destroy_integrated_info(dcb, &as->integrated_info);
-+
-+ if (as->dcb_internal) {
-+ /* We are responsible only for destruction of Internal BIOS.
-+ * The External one will be destroyed by its creator. */
-+ dal_bios_parser_destroy(&as->dcb_internal);
-+ }
- }
-
- /*
-@@ -700,6 +720,9 @@ static bool adapter_service_construct(
- struct adapter_service *as,
- struct as_init_data *init_data)
- {
-+ struct dc_bios *dcb;
-+ enum dce_version dce_version;
-+
- if (!init_data)
- return false;
-
-@@ -734,25 +757,32 @@ static bool adapter_service_construct(
- goto failed_to_generate_features;
- }
-
-+ as->dce_environment = init_data->dce_environment;
-+
- if (init_data->vbios_override)
-- as->dcb = init_data->vbios_override;
-+ as->dcb_override = init_data->vbios_override;
- else {
- /* Create BIOS parser */
- init_data->bp_init_data.ctx = init_data->ctx;
-
-- as->dcb = dal_bios_parser_create(&init_data->bp_init_data, as);
-- }
-+ as->dcb_internal = dal_bios_parser_create(
-+ &init_data->bp_init_data, as);
-
-- if (!as->dcb) {
-- ASSERT_CRITICAL(false);
-- goto failed_to_create_bios_parser;
-+ if (!as->dcb_internal) {
-+ ASSERT_CRITICAL(false);
-+ goto failed_to_create_bios_parser;
-+ }
- }
-
-+ dcb = dal_adapter_service_get_bios_parser(as);
-+
-+ dce_version = dal_adapter_service_get_dce_version(as);
-+
- /* Create GPIO service */
-- as->gpio_service =
-- dal_gpio_service_create(
-- dal_adapter_service_get_dce_version(as),
-- as->ctx);
-+ as->gpio_service = dal_gpio_service_create(
-+ dce_version,
-+ as->dce_environment,
-+ as->ctx);
-
- if (!as->gpio_service) {
- ASSERT_CRITICAL(false);
-@@ -769,8 +799,9 @@ static bool adapter_service_construct(
-
- /* Create Adapter Service HW Context*/
- as->hw_ctx = create_hw_ctx(
-- dal_adapter_service_get_dce_version(as),
-- as->ctx);
-+ dce_version,
-+ as->dce_environment,
-+ as->ctx);
-
- if (!as->hw_ctx) {
- ASSERT_CRITICAL(false);
-@@ -780,10 +811,9 @@ static bool adapter_service_construct(
- /* Avoid wireless encoder creation in upstream branch. */
-
- /* Integrated info is not provided on discrete ASIC. NULL is allowed */
-- as->integrated_info = as->dcb->funcs->create_integrated_info(
-- as->dcb);
-+ as->integrated_info = dcb->funcs->create_integrated_info(dcb);
-
-- as->dcb->funcs->post_init(as->dcb);
-+ dcb->funcs->post_init(dcb);
-
- /* Generate backlight translation table and initializes
- other brightness properties */
-@@ -805,7 +835,8 @@ failed_to_create_i2caux:
- dal_gpio_service_destroy(&as->gpio_service);
-
- failed_to_create_gpio_service:
-- dal_bios_parser_destroy(&as->dcb);
-+ if (as->dcb_internal)
-+ dal_bios_parser_destroy(&as->dcb_internal);
-
- failed_to_create_bios_parser:
- dal_asic_capability_destroy(&as->asic_cap);
-@@ -890,6 +921,13 @@ enum dce_version dal_adapter_service_get_dce_version(
- }
- }
-
-+enum dce_environment dal_adapter_service_get_dce_environment(
-+ const struct adapter_service *as)
-+{
-+ return as->dce_environment;
-+}
-+
-+
- /*
- * dal_adapter_service_get_controllers_num
- *
-@@ -956,10 +994,12 @@ static bool is_wireless_object(struct graphics_object_id id)
- uint32_t dal_adapter_service_get_src_num(
- struct adapter_service *as, struct graphics_object_id id)
- {
-+ struct dc_bios *dcb = dal_adapter_service_get_bios_parser(as);
-+
- if (is_wireless_object(id))
- return wireless_get_srcs_num(as, id);
- else
-- return as->dcb->funcs->get_src_number(as->dcb, id);
-+ return dcb->funcs->get_src_number(dcb, id);
- }
-
- /**
-@@ -979,18 +1019,19 @@ struct graphics_object_id dal_adapter_service_get_src_obj(
- uint32_t index)
- {
- struct graphics_object_id src_object_id;
-+ struct dc_bios *dcb = dal_adapter_service_get_bios_parser(as);
-
- if (is_wireless_object(id))
- src_object_id = wireless_get_src_obj_id(as, id, index);
- else {
-- if (BP_RESULT_OK !=
-- as->dcb->funcs->get_src_obj(
-- as->dcb, id, index, &src_object_id))
-+ if (BP_RESULT_OK != dcb->funcs->get_src_obj(dcb, id, index,
-+ &src_object_id)) {
- src_object_id =
- dal_graphics_object_id_init(
- 0,
- ENUM_ID_UNKNOWN,
- OBJECT_TYPE_UNKNOWN);
-+ }
- }
-
- return src_object_id;
-@@ -1017,13 +1058,9 @@ struct graphics_object_id dal_adapter_service_get_connector_obj_id(
- bios_connectors_num = dcb->funcs->get_connectors_number(dcb);
-
- if (connector_index >= bios_connectors_num)
-- return wireless_get_connector_id(
-- as,
-- connector_index);
-+ return wireless_get_connector_id(as, connector_index);
- else
-- return as->dcb->funcs->get_connector_id(
-- as->dcb,
-- connector_index);
-+ return dcb->funcs->get_connector_id(dcb, connector_index);
- }
-
- bool dal_adapter_service_get_device_tag(
-@@ -1032,7 +1069,9 @@ bool dal_adapter_service_get_device_tag(
- uint32_t device_tag_index,
- struct connector_device_tag_info *info)
- {
-- if (BP_RESULT_OK == as->dcb->funcs->get_device_tag(as->dcb,
-+ struct dc_bios *dcb = dal_adapter_service_get_bios_parser(as);
-+
-+ if (BP_RESULT_OK == dcb->funcs->get_device_tag(dcb,
- connector_object_id, device_tag_index, info))
- return true;
- else
-@@ -1043,7 +1082,9 @@ bool dal_adapter_service_get_device_tag(
- bool dal_adapter_service_is_device_id_supported(struct adapter_service *as,
- struct device_id id)
- {
-- return as->dcb->funcs->is_device_id_supported(as->dcb, id);
-+ struct dc_bios *dcb = dal_adapter_service_get_bios_parser(as);
-+
-+ return dcb->funcs->is_device_id_supported(dcb, id);
- }
-
- bool dal_adapter_service_is_meet_underscan_req(struct adapter_service *as)
-@@ -1080,14 +1121,13 @@ uint8_t dal_adapter_service_get_clock_sources_num(
- struct firmware_info fw_info;
- uint32_t max_clk_src = 0;
- uint32_t num = as->asic_cap->data[ASIC_DATA_CLOCKSOURCES_NUM];
-+ struct dc_bios *dcb = dal_adapter_service_get_bios_parser(as);
-
- /*
- * Check is system supports the use of the External clock source
- * as a clock source for DP
- */
-- enum bp_result bp_result =
-- as->dcb->funcs->get_firmware_info(as->dcb,
-- &fw_info);
-+ enum bp_result bp_result = dcb->funcs->get_firmware_info(dcb, &fw_info);
-
- if (BP_RESULT_OK == bp_result &&
- fw_info.external_clock_source_frequency_for_dp != 0)
-@@ -1199,13 +1239,14 @@ bool dal_adapter_service_get_i2c_info(
- struct graphics_object_id id,
- struct graphics_object_i2c_info *i2c_info)
- {
-+ struct dc_bios *dcb = dal_adapter_service_get_bios_parser(as);
-+
- if (!i2c_info) {
- ASSERT_CRITICAL(false);
- return false;
- }
-
-- return BP_RESULT_OK ==
-- as->dcb->funcs->get_i2c_info(as->dcb, id, i2c_info);
-+ return BP_RESULT_OK == dcb->funcs->get_i2c_info(dcb, id, i2c_info);
- }
-
- /*
-@@ -1256,14 +1297,14 @@ struct irq *dal_adapter_service_obtain_hpd_irq(
- struct graphics_object_id id)
- {
- enum bp_result bp_result;
--
-+ struct dc_bios *dcb = dal_adapter_service_get_bios_parser(as);
- struct graphics_object_hpd_info hpd_info;
- struct gpio_pin_info pin_info;
-
- if (!get_hpd_info(as, id, &hpd_info))
- return NULL;
-
-- bp_result = as->dcb->funcs->get_gpio_pin_info(as->dcb,
-+ bp_result = dcb->funcs->get_gpio_pin_info(dcb,
- hpd_info.hpd_int_gpio_uid, &pin_info);
-
- if (bp_result != BP_RESULT_OK) {
-@@ -1298,7 +1339,9 @@ uint32_t dal_adapter_service_get_ss_info_num(
- struct adapter_service *as,
- enum as_signal_type signal)
- {
-- return as->dcb->funcs->get_ss_entry_number(as->dcb, signal);
-+ struct dc_bios *dcb = dal_adapter_service_get_bios_parser(as);
-+
-+ return dcb->funcs->get_ss_entry_number(dcb, signal);
- }
-
- /*
-@@ -1312,9 +1355,10 @@ bool dal_adapter_service_get_ss_info(
- uint32_t idx,
- struct spread_spectrum_info *info)
- {
-- enum bp_result bp_result =
-- as->dcb->funcs->get_spread_spectrum_info(
-- as->dcb, signal, idx, info);
-+ struct dc_bios *dcb = dal_adapter_service_get_bios_parser(as);
-+
-+ enum bp_result bp_result = dcb->funcs->get_spread_spectrum_info(dcb,
-+ signal, idx, info);
-
- return BP_RESULT_OK == bp_result;
- }
-@@ -1521,17 +1565,18 @@ struct gpio *dal_adapter_service_obtain_stereo_gpio(
-
- struct bp_gpio_cntl_info cntl_info;
- struct gpio_pin_info pin_info;
-+ struct dc_bios *dcb = dal_adapter_service_get_bios_parser(as);
-
- /* Get GPIO record for this object.
- * Stereo GPIO record should have exactly one entry
- * where active state defines stereosync polarity */
-- if (1 != as->dcb->funcs->get_gpio_record(
-- as->dcb, id, &cntl_info,
-+ if (1 != dcb->funcs->get_gpio_record(
-+ dcb, id, &cntl_info,
- 1)) {
- return NULL;
- } else if (BP_RESULT_OK
-- != as->dcb->funcs->get_gpio_pin_info(
-- as->dcb, cntl_info.id,
-+ != dcb->funcs->get_gpio_pin_info(
-+ dcb, cntl_info.id,
- &pin_info)) {
- /*ASSERT_CRITICAL(false);*/
- return NULL;
-@@ -1564,8 +1609,9 @@ bool dal_adapter_service_get_firmware_info(
- struct adapter_service *as,
- struct firmware_info *info)
- {
-- return as->dcb->funcs->get_firmware_info(as->dcb, info) ==
-- BP_RESULT_OK;
-+ struct dc_bios *dcb = dal_adapter_service_get_bios_parser(as);
-+
-+ return dcb->funcs->get_firmware_info(dcb, info) == BP_RESULT_OK;
- }
-
- /*
-@@ -1664,7 +1710,7 @@ uint32_t dal_adapter_service_get_memory_type_multiplier(
- struct dc_bios *dal_adapter_service_get_bios_parser(
- struct adapter_service *as)
- {
-- return as->dcb;
-+ return as->dcb_override ? as->dcb_override : as->dcb_internal;
- }
-
- /*
-@@ -1751,12 +1797,13 @@ bool dal_adapter_service_get_embedded_panel_info(
- struct embedded_panel_info *info)
- {
- enum bp_result result;
-+ struct dc_bios *dcb = dal_adapter_service_get_bios_parser(as);
-
- if (info == NULL)
- /*TODO: add DALASSERT_MSG here*/
- return false;
-
-- result = as->dcb->funcs->get_embedded_panel_info(as->dcb, info);
-+ result = dcb->funcs->get_embedded_panel_info(dcb, info);
-
- return result == BP_RESULT_OK;
- }
-@@ -1767,13 +1814,13 @@ bool dal_adapter_service_enum_embedded_panel_patch_mode(
- struct embedded_panel_patch_mode *mode)
- {
- enum bp_result result;
-+ struct dc_bios *dcb = dal_adapter_service_get_bios_parser(as);
-
- if (mode == NULL)
- /*TODO: add DALASSERT_MSG here*/
- return false;
-
-- result = as->dcb->funcs->enum_embedded_panel_patch_mode(
-- as->dcb, index, mode);
-+ result = dcb->funcs->enum_embedded_panel_patch_mode(dcb, index, mode);
-
- return result == BP_RESULT_OK;
- }
-@@ -1783,8 +1830,9 @@ bool dal_adapter_service_get_faked_edid_len(
- uint32_t *len)
- {
- enum bp_result result;
-+ struct dc_bios *dcb = dal_adapter_service_get_bios_parser(as);
-
-- result = as->dcb->funcs->get_faked_edid_len(as->dcb, len);
-+ result = dcb->funcs->get_faked_edid_len(dcb, len);
-
- return result == BP_RESULT_OK;
- }
-@@ -1795,11 +1843,10 @@ bool dal_adapter_service_get_faked_edid_buf(
- uint32_t len)
- {
- enum bp_result result;
-+ struct dc_bios *dcb = dal_adapter_service_get_bios_parser(as);
-+
-+ result = dcb->funcs->get_faked_edid_buf(dcb, buf, len);
-
-- result = as->dcb->funcs->get_faked_edid_buf(
-- as->dcb,
-- buf,
-- len);
- return result == BP_RESULT_OK;
-
- }
-@@ -1886,7 +1933,9 @@ bool dal_adapter_service_should_optimize(
- */
- bool dal_adapter_service_is_in_accelerated_mode(struct adapter_service *as)
- {
-- return as->dcb->funcs->is_accelerated_mode(as->dcb);
-+ struct dc_bios *dcb = dal_adapter_service_get_bios_parser(as);
-+
-+ return dcb->funcs->is_accelerated_mode(dcb);
- }
-
- struct ddc *dal_adapter_service_obtain_ddc_from_i2c_info(
-@@ -1927,6 +1976,7 @@ bool dal_adapter_service_is_lid_open(struct adapter_service *as)
- {
- bool is_lid_open = false;
- struct platform_info_params params;
-+ struct dc_bios *dcb = dal_adapter_service_get_bios_parser(as);
-
- params.data = &is_lid_open;
- params.method = PM_GET_LID_STATE;
-@@ -1936,7 +1986,7 @@ bool dal_adapter_service_is_lid_open(struct adapter_service *as)
- return is_lid_open;
-
- #if defined(CONFIG_DRM_AMD_DAL_VBIOS_PRESENT)
-- return as->dcb->funcs->is_lid_open(as->dcb);
-+ return dcb->funcs->is_lid_open(dcb);
- #else
- return false;
- #endif
-@@ -2009,6 +2059,7 @@ bool dal_adapter_service_get_encoder_cap_info(
- {
- struct bp_encoder_cap_info bp_cap_info = {0};
- enum bp_result result;
-+ struct dc_bios *dcb = dal_adapter_service_get_bios_parser(as);
-
- if (NULL == info) {
- ASSERT_CRITICAL(false);
-@@ -2023,10 +2074,7 @@ bool dal_adapter_service_get_encoder_cap_info(
- * - dpHbr2Cap: indicates supported/not supported by HW Encoder
- * - dpHbr2En : indicates DP spec compliant/not compliant
- */
-- result = as->dcb->funcs->get_encoder_cap_info(
-- as->dcb,
-- id,
-- &bp_cap_info);
-+ result = dcb->funcs->get_encoder_cap_info(dcb, id, &bp_cap_info);
-
- /* Set dp_hbr2_validated flag (it's equal to Enable) */
- info->dp_hbr2_validated = bp_cap_info.DP_HBR2_EN;
-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 5bb4446..60464e8 100644
---- a/drivers/gpu/drm/amd/dal/dc/adapter/adapter_service.h
-+++ b/drivers/gpu/drm/amd/dal/dc/adapter/adapter_service.h
-@@ -42,7 +42,9 @@ struct asic_cap;
- struct adapter_service {
- struct dc_context *ctx;
- struct asic_capability *asic_cap;
-- struct dc_bios *dcb;
-+ struct dc_bios *dcb_internal;/* created by DC */
-+ struct dc_bios *dcb_override;/* supplied by creator of DC */
-+ enum dce_environment dce_environment;
- struct gpio_service *gpio_service;
- struct i2caux *i2caux;
- struct wireless_data wireless_data;
-diff --git a/drivers/gpu/drm/amd/dal/dc/adapter/diagnostics/hw_ctx_adapter_service_diag.c b/drivers/gpu/drm/amd/dal/dc/adapter/diagnostics/hw_ctx_adapter_service_diag.c
-new file mode 100644
-index 0000000..de45ce3
---- /dev/null
-+++ b/drivers/gpu/drm/amd/dal/dc/adapter/diagnostics/hw_ctx_adapter_service_diag.c
-@@ -0,0 +1,133 @@
-+/*
-+ * Copyright 2012-16 Advanced Micro Devices, Inc.
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the "Software"),
-+ * to deal in the Software without restriction, including without limitation
-+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-+ * and/or sell copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice shall be included in
-+ * all copies or substantial portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
-+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-+ * OTHER DEALINGS IN THE SOFTWARE.
-+ *
-+ * Authors: AMD
-+ *
-+ */
-+
-+/* FPGA Diagnostics version of AS HW CTX. */
-+
-+#include "dal_services.h"
-+
-+#include "../hw_ctx_adapter_service.h"
-+
-+#include "hw_ctx_adapter_service_diag.h"
-+
-+#include "include/logger_interface.h"
-+#include "include/grph_object_id.h"
-+
-+static const struct graphics_object_id invalid_go = {
-+ 0, ENUM_ID_UNKNOWN, OBJECT_TYPE_UNKNOWN
-+};
-+
-+static void destroy(
-+ struct hw_ctx_adapter_service *hw_ctx)
-+{
-+}
-+
-+static bool power_up(
-+ struct hw_ctx_adapter_service *hw_ctx)
-+{
-+ return true;
-+}
-+
-+static struct graphics_object_id enum_fake_path_resource(
-+ const struct hw_ctx_adapter_service *hw_ctx,
-+ uint32_t index)
-+{
-+ return invalid_go;
-+}
-+
-+static struct graphics_object_id enum_stereo_sync_object(
-+ const struct hw_ctx_adapter_service *hw_ctx,
-+ uint32_t index)
-+{
-+ return invalid_go;
-+}
-+
-+static struct graphics_object_id enum_sync_output_object(
-+ const struct hw_ctx_adapter_service *hw_ctx,
-+ uint32_t index)
-+{
-+ return invalid_go;
-+}
-+
-+static struct graphics_object_id enum_audio_object(
-+ const struct hw_ctx_adapter_service *hw_ctx,
-+ uint32_t index)
-+{
-+ return invalid_go;
-+}
-+
-+static void update_audio_connectivity(
-+ struct hw_ctx_adapter_service *hw_ctx,
-+ uint32_t number_of_audio_capable_display_path,
-+ uint32_t number_of_controllers)
-+{
-+}
-+
-+static const struct hw_ctx_adapter_service_funcs funcs = {
-+ destroy,
-+ power_up,
-+ enum_fake_path_resource,
-+ enum_stereo_sync_object,
-+ enum_sync_output_object,
-+ enum_audio_object,
-+ update_audio_connectivity
-+};
-+
-+static bool construct(
-+ struct hw_ctx_adapter_service *hw_ctx,
-+ struct dc_context *ctx)
-+
-+{
-+ if (!dal_adapter_service_construct_hw_ctx(hw_ctx, ctx)) {
-+ ASSERT_CRITICAL(false);
-+ return false;
-+ }
-+
-+ hw_ctx->funcs = &funcs;
-+
-+ return true;
-+}
-+
-+struct hw_ctx_adapter_service *dal_adapter_service_create_hw_ctx_diag(
-+ struct dc_context *ctx)
-+{
-+ struct hw_ctx_adapter_service *hw_ctx = dc_service_alloc(ctx,
-+ sizeof(*hw_ctx));
-+
-+ if (!hw_ctx) {
-+ ASSERT_CRITICAL(false);
-+ return NULL;
-+ }
-+
-+ if (construct(hw_ctx, ctx))
-+ return hw_ctx;
-+
-+ ASSERT_CRITICAL(false);
-+
-+ dc_service_free(ctx, hw_ctx);
-+
-+ return NULL;
-+}
-+
-+/*****************************************************************************/
-diff --git a/drivers/gpu/drm/amd/dal/dc/adapter/diagnostics/hw_ctx_adapter_service_diag.h b/drivers/gpu/drm/amd/dal/dc/adapter/diagnostics/hw_ctx_adapter_service_diag.h
-new file mode 100644
-index 0000000..39ae752
---- /dev/null
-+++ b/drivers/gpu/drm/amd/dal/dc/adapter/diagnostics/hw_ctx_adapter_service_diag.h
-@@ -0,0 +1,33 @@
-+/*
-+ * Copyright 2012-16 Advanced Micro Devices, Inc.
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the "Software"),
-+ * to deal in the Software without restriction, including without limitation
-+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-+ * and/or sell copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice shall be included in
-+ * all copies or substantial portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
-+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-+ * OTHER DEALINGS IN THE SOFTWARE.
-+ *
-+ * Authors: AMD
-+ *
-+ */
-+
-+#ifndef __DAL_HW_CTX_ADAPTER_SERVICE_DIAG_H__
-+#define __DAL_HW_CTX_ADAPTER_SERVICE_DIAG_H__
-+
-+
-+struct hw_ctx_adapter_service *dal_adapter_service_create_hw_ctx_diag(
-+ struct dc_context *ctx);
-+
-+#endif /* __DAL_HW_CTX_ADAPTER_SERVICE_DIAG_H__ */
-diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc.c b/drivers/gpu/drm/amd/dal/dc/core/dc.c
-index 4e87da5..14a1171 100644
---- a/drivers/gpu/drm/amd/dal/dc/core/dc.c
-+++ b/drivers/gpu/drm/amd/dal/dc/core/dc.c
-@@ -228,6 +228,7 @@ static struct adapter_service *create_as(
-
- init_data.display_param = &init->display_param;
- init_data.vbios_override = init->vbios_override;
-+ init_data.dce_environment = init->dce_environment;
-
- as = dal_adapter_service_create(&init_data);
-
-@@ -334,6 +335,11 @@ static bool construct(struct dc *dc, const struct dal_init_data *init_params)
-
- dc->ctx = dc_init_data.ctx;
-
-+ dc->dce_version = dal_adapter_service_get_dce_version(
-+ dc_init_data.adapter_srv);
-+ dc->dce_environment = dal_adapter_service_get_dce_environment(
-+ dc_init_data.adapter_srv);
-+
- /* Create hardware sequencer */
- if (!dc_construct_hw_sequencer(dc_init_data.adapter_srv, dc))
- goto hwss_fail;
-diff --git a/drivers/gpu/drm/amd/dal/dc/gpio/Makefile b/drivers/gpu/drm/amd/dal/dc/gpio/Makefile
-index 7380910..50a1d34 100644
---- a/drivers/gpu/drm/amd/dal/dc/gpio/Makefile
-+++ b/drivers/gpu/drm/amd/dal/dc/gpio/Makefile
-@@ -22,3 +22,11 @@ AMD_DAL_GPIO_DCE110 = $(addprefix $(AMDDALPATH)/dc/gpio/dce110/,$(GPIO_DCE110))
- AMD_DAL_FILES += $(AMD_DAL_GPIO_DCE110)
- endif
-
-+###############################################################################
-+# Diagnostics on FPGA
-+###############################################################################
-+GPIO_DIAG_FPGA = hw_translate_diag.o hw_factory_diag.o hw_hpd_diag.o hw_ddc_diag.o
-+
-+AMD_DAL_GPIO_DIAG_FPGA = $(addprefix $(AMDDALPATH)/dc/gpio/diagnostics/,$(GPIO_DIAG_FPGA))
-+
-+AMD_DAL_FILES += $(AMD_DAL_GPIO_DIAG_FPGA)
-diff --git a/drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_ddc_diag.c b/drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_ddc_diag.c
-new file mode 100644
-index 0000000..f566241
---- /dev/null
-+++ b/drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_ddc_diag.c
-@@ -0,0 +1,98 @@
-+/*
-+ * Copyright 2012-16 Advanced Micro Devices, Inc.
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the "Software"),
-+ * to deal in the Software without restriction, including without limitation
-+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-+ * and/or sell copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice shall be included in
-+ * all copies or substantial portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
-+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-+ * OTHER DEALINGS IN THE SOFTWARE.
-+ *
-+ * Authors: AMD
-+ *
-+ */
-+
-+#include "dal_services.h"
-+
-+/*
-+ * Pre-requisites: headers required by header of this unit
-+ */
-+
-+#include "include/gpio_types.h"
-+#include "../hw_gpio_pin.h"
-+#include "../hw_gpio.h"
-+#include "../hw_ddc.h"
-+
-+/*
-+ * This unit
-+ */
-+static void destruct(
-+ struct hw_ddc *pin)
-+{
-+ dal_hw_ddc_destruct(pin);
-+}
-+
-+static void destroy(
-+ struct hw_gpio_pin **ptr)
-+{
-+ struct hw_ddc *pin = HW_DDC_FROM_BASE(*ptr);
-+
-+ destruct(pin);
-+
-+ dc_service_free((*ptr)->ctx, pin);
-+
-+ *ptr = NULL;
-+}
-+
-+static const struct hw_gpio_pin_funcs funcs = {
-+ .destroy = destroy,
-+ .open = NULL,
-+ .get_value = NULL,
-+ .set_value = NULL,
-+ .set_config = NULL,
-+ .change_mode = NULL,
-+ .close = NULL,
-+};
-+
-+static bool construct(
-+ struct hw_ddc *pin,
-+ enum gpio_id id,
-+ uint32_t en,
-+ struct dc_context *ctx)
-+{
-+ pin->base.base.funcs = &funcs;
-+ return true;
-+}
-+
-+struct hw_gpio_pin *dal_hw_ddc_diag_fpga_create(
-+ struct dc_context *ctx,
-+ enum gpio_id id,
-+ uint32_t en)
-+{
-+ struct hw_ddc *pin = dc_service_alloc(ctx, sizeof(struct hw_ddc));
-+
-+ if (!pin) {
-+ ASSERT_CRITICAL(false);
-+ return NULL;
-+ }
-+
-+ if (construct(pin, id, en, ctx))
-+ return &pin->base.base;
-+
-+ ASSERT_CRITICAL(false);
-+
-+ dc_service_free(ctx, pin);
-+
-+ return NULL;
-+}
-diff --git a/drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_ddc_diag.h b/drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_ddc_diag.h
-new file mode 100644
-index 0000000..7515aaf
---- /dev/null
-+++ b/drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_ddc_diag.h
-@@ -0,0 +1,34 @@
-+/*
-+ * Copyright 2012-16 Advanced Micro Devices, Inc.
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the "Software"),
-+ * to deal in the Software without restriction, including without limitation
-+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-+ * and/or sell copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice shall be included in
-+ * all copies or substantial portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
-+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-+ * OTHER DEALINGS IN THE SOFTWARE.
-+ *
-+ * Authors: AMD
-+ *
-+ */
-+
-+#ifndef __DAL_HW_DDC_DIAG_FPGA_H__
-+#define __DAL_HW_DDC_DIAG_FPGA_H__
-+
-+struct hw_gpio_pin *dal_hw_ddc_diag_fpga_create(
-+ struct dc_context *ctx,
-+ enum gpio_id id,
-+ uint32_t en);
-+
-+#endif
-diff --git a/drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_factory_diag.c b/drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_factory_diag.c
-new file mode 100644
-index 0000000..13b69e2
---- /dev/null
-+++ b/drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_factory_diag.c
-@@ -0,0 +1,70 @@
-+/*
-+ * Copyright 2013-16 Advanced Micro Devices, Inc.
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the "Software"),
-+ * to deal in the Software without restriction, including without limitation
-+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-+ * and/or sell copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice shall be included in
-+ * all copies or substantial portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
-+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-+ * OTHER DEALINGS IN THE SOFTWARE.
-+ *
-+ * Authors: AMD
-+ *
-+ */
-+
-+/*
-+ * Pre-requisites: headers required by header of this unit
-+ */
-+
-+#include "dal_services.h"
-+#include "include/gpio_types.h"
-+#include "../hw_factory.h"
-+
-+/*
-+ * Header of this unit
-+ */
-+
-+#include "../hw_gpio_pin.h"
-+#include "../hw_gpio.h"
-+#include "../hw_ddc.h"
-+#include "../hw_hpd.h"
-+
-+/* function table */
-+static const struct hw_factory_funcs funcs = {
-+ .create_dvo = NULL,
-+ .create_ddc_data = NULL,
-+ .create_ddc_clock = NULL,
-+ .create_generic = NULL,
-+ .create_hpd = NULL,
-+ .create_gpio_pad = NULL,
-+ .create_sync = NULL,
-+ .create_gsl = NULL,
-+};
-+
-+void dal_hw_factory_diag_fpga_init(struct hw_factory *factory)
-+{
-+ factory->number_of_pins[GPIO_ID_DVO1] = 24;
-+ factory->number_of_pins[GPIO_ID_DVO12] = 2;
-+ factory->number_of_pins[GPIO_ID_DVO24] = 1;
-+ factory->number_of_pins[GPIO_ID_DDC_DATA] = 8;
-+ factory->number_of_pins[GPIO_ID_DDC_CLOCK] = 8;
-+ factory->number_of_pins[GPIO_ID_GENERIC] = 7;
-+ factory->number_of_pins[GPIO_ID_HPD] = 6;
-+ factory->number_of_pins[GPIO_ID_GPIO_PAD] = 31;
-+ factory->number_of_pins[GPIO_ID_VIP_PAD] = 0;
-+ factory->number_of_pins[GPIO_ID_SYNC] = 2;
-+ factory->number_of_pins[GPIO_ID_GSL] = 4;
-+
-+ factory->funcs = &funcs;
-+}
-diff --git a/drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_factory_diag.h b/drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_factory_diag.h
-new file mode 100644
-index 0000000..8a74f6a
---- /dev/null
-+++ b/drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_factory_diag.h
-@@ -0,0 +1,32 @@
-+/*
-+ * Copyright 2013-16 Advanced Micro Devices, Inc.
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the "Software"),
-+ * to deal in the Software without restriction, including without limitation
-+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-+ * and/or sell copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice shall be included in
-+ * all copies or substantial portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
-+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-+ * OTHER DEALINGS IN THE SOFTWARE.
-+ *
-+ * Authors: AMD
-+ *
-+ */
-+
-+#ifndef __DAL_HW_FACTORY_DIAG_FPGA_H__
-+#define __DAL_HW_FACTORY_DIAG_FPGA_H__
-+
-+/* Initialize HW factory function pointers and pin info */
-+void dal_hw_factory_diag_fpga_init(struct hw_factory *factory);
-+
-+#endif /* __DAL_HW_FACTORY_DIAG_FPGA_H__ */
-diff --git a/drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_hpd_diag.c b/drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_hpd_diag.c
-new file mode 100644
-index 0000000..baf5caf
---- /dev/null
-+++ b/drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_hpd_diag.c
-@@ -0,0 +1,102 @@
-+/*
-+ * Copyright 2012-16 Advanced Micro Devices, Inc.
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the "Software"),
-+ * to deal in the Software without restriction, including without limitation
-+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-+ * and/or sell copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice shall be included in
-+ * all copies or substantial portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
-+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-+ * OTHER DEALINGS IN THE SOFTWARE.
-+ *
-+ * Authors: AMD
-+ *
-+ */
-+
-+#include "dal_services.h"
-+
-+/*
-+ * Pre-requisites: headers required by header of this unit
-+ */
-+
-+#include "include/gpio_types.h"
-+#include "../hw_gpio_pin.h"
-+#include "../hw_gpio.h"
-+#include "../hw_hpd.h"
-+
-+
-+static void destruct(
-+ struct hw_hpd *pin)
-+{
-+ dal_hw_hpd_destruct(pin);
-+}
-+
-+static void destroy(
-+ struct hw_gpio_pin **ptr)
-+{
-+ struct hw_hpd *pin = HW_HPD_FROM_BASE(*ptr);
-+
-+ destruct(pin);
-+
-+ dc_service_free((*ptr)->ctx, pin);
-+
-+ *ptr = NULL;
-+}
-+
-+static const struct hw_gpio_pin_funcs funcs = {
-+ .destroy = destroy,
-+ .open = NULL,
-+ .get_value = NULL,
-+ .set_value = NULL,
-+ .set_config = NULL,
-+ .change_mode = NULL,
-+ .close = NULL,
-+};
-+
-+static bool construct(
-+ struct hw_hpd *pin,
-+ enum gpio_id id,
-+ uint32_t en,
-+ struct dc_context *ctx)
-+{
-+ if (!dal_hw_hpd_construct(pin, id, en, ctx)) {
-+ ASSERT_CRITICAL(false);
-+ return false;
-+ }
-+
-+ pin->base.base.funcs = &funcs;
-+
-+ return true;
-+}
-+
-+struct hw_gpio_pin *dal_hw_hpd_diag_fpga_create(
-+ struct dc_context *ctx,
-+ enum gpio_id id,
-+ uint32_t en)
-+{
-+ struct hw_hpd *pin = dc_service_alloc(ctx, sizeof(struct hw_hpd));
-+
-+ if (!pin) {
-+ ASSERT_CRITICAL(false);
-+ return NULL;
-+ }
-+
-+ if (construct(pin, id, en, ctx))
-+ return &pin->base.base;
-+
-+ ASSERT_CRITICAL(false);
-+
-+ dc_service_free(ctx, pin);
-+
-+ return NULL;
-+}
-diff --git a/drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_hpd_diag.h b/drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_hpd_diag.h
-new file mode 100644
-index 0000000..bfa2c24
---- /dev/null
-+++ b/drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_hpd_diag.h
-@@ -0,0 +1,35 @@
-+/*
-+ * Copyright 2012-16 Advanced Micro Devices, Inc.
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the "Software"),
-+ * to deal in the Software without restriction, including without limitation
-+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-+ * and/or sell copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice shall be included in
-+ * all copies or substantial portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
-+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-+ * OTHER DEALINGS IN THE SOFTWARE.
-+ *
-+ * Authors: AMD
-+ *
-+ */
-+
-+#ifndef __DAL_HW_HPD_DIAG_FPGA_H__
-+#define __DAL_HW_HPD_DIAG_FPGA_H__
-+
-+
-+struct hw_gpio_pin *dal_hw_hpd_diag_fpga_create(
-+ struct dc_context *ctx,
-+ enum gpio_id id,
-+ uint32_t en);
-+
-+#endif /*__DAL_HW_HPD_DIAG_FPGA_H__*/
-diff --git a/drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_translate_diag.c b/drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_translate_diag.c
-new file mode 100644
-index 0000000..6d4da30
---- /dev/null
-+++ b/drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_translate_diag.c
-@@ -0,0 +1,42 @@
-+/*
-+ * Copyright 2013-16 Advanced Micro Devices, Inc.
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the "Software"),
-+ * to deal in the Software without restriction, including without limitation
-+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-+ * and/or sell copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice shall be included in
-+ * all copies or substantial portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
-+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-+ * OTHER DEALINGS IN THE SOFTWARE.
-+ *
-+ * Authors: AMD
-+ *
-+ */
-+
-+
-+#include "dal_services.h"
-+#include "include/gpio_types.h"
-+
-+#include "../hw_translate.h"
-+
-+
-+/* function table */
-+static const struct hw_translate_funcs funcs = {
-+ .offset_to_id = NULL,
-+ .id_to_offset = NULL,
-+};
-+
-+void dal_hw_translate_diag_fpga_init(struct hw_translate *tr)
-+{
-+ tr->funcs = &funcs;
-+}
-diff --git a/drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_translate_diag.h b/drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_translate_diag.h
-new file mode 100644
-index 0000000..4f05324
---- /dev/null
-+++ b/drivers/gpu/drm/amd/dal/dc/gpio/diagnostics/hw_translate_diag.h
-@@ -0,0 +1,34 @@
-+/*
-+ * Copyright 2013-16 Advanced Micro Devices, Inc.
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the "Software"),
-+ * to deal in the Software without restriction, including without limitation
-+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-+ * and/or sell copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice shall be included in
-+ * all copies or substantial portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
-+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-+ * OTHER DEALINGS IN THE SOFTWARE.
-+ *
-+ * Authors: AMD
-+ *
-+ */
-+
-+#ifndef __DAL_HW_TRANSLATE_DIAG_FPGA_H__
-+#define __DAL_HW_TRANSLATE_DIAG_FPGA_H__
-+
-+struct hw_translate;
-+
-+/* Initialize Hw translate function pointers */
-+void dal_hw_translate_diag_fpga_init(struct hw_translate *tr);
-+
-+#endif /* __DAL_HW_TRANSLATE_DIAG_FPGA_H__ */
-diff --git a/drivers/gpu/drm/amd/dal/dc/gpio/gpio_service.c b/drivers/gpu/drm/amd/dal/dc/gpio/gpio_service.c
-index 660f80f..3a6b5f4 100644
---- a/drivers/gpu/drm/amd/dal/dc/gpio/gpio_service.c
-+++ b/drivers/gpu/drm/amd/dal/dc/gpio/gpio_service.c
-@@ -63,7 +63,8 @@
- */
-
- struct gpio_service *dal_gpio_service_create(
-- enum dce_version dce_version,
-+ enum dce_version dce_version_major,
-+ enum dce_version dce_version_minor,
- struct dc_context *ctx)
- {
- struct gpio_service *service;
-@@ -77,12 +78,14 @@ struct gpio_service *dal_gpio_service_create(
- return NULL;
- }
-
-- if (!dal_hw_translate_init(&service->translate, dce_version)) {
-+ if (!dal_hw_translate_init(&service->translate, dce_version_major,
-+ dce_version_minor)) {
- BREAK_TO_DEBUGGER();
- goto failure_1;
- }
-
-- if (!dal_hw_factory_init(&service->factory, dce_version)) {
-+ if (!dal_hw_factory_init(&service->factory, dce_version_major,
-+ dce_version_minor)) {
- BREAK_TO_DEBUGGER();
- goto failure_1;
- }
-diff --git a/drivers/gpu/drm/amd/dal/dc/gpio/hw_factory.c b/drivers/gpu/drm/amd/dal/dc/gpio/hw_factory.c
-index d1b6b7e..a01024e 100644
---- a/drivers/gpu/drm/amd/dal/dc/gpio/hw_factory.c
-+++ b/drivers/gpu/drm/amd/dal/dc/gpio/hw_factory.c
-@@ -44,14 +44,26 @@
- #if defined(CONFIG_DRM_AMD_DAL_DCE11_0)
- #include "dce110/hw_factory_dce110.h"
- #endif
-+
-+#include "diagnostics/hw_factory_diag.h"
-+
- /*
- * This unit
- */
-
- bool dal_hw_factory_init(
- struct hw_factory *factory,
-- enum dce_version dce_version)
-+ enum dce_version dce_version,
-+ enum dce_environment dce_environment)
- {
-+ switch (dce_environment) {
-+ case DCE_ENV_DIAG_FPGA_MAXIMUS:
-+ dal_hw_factory_diag_fpga_init(factory);
-+ return true;
-+ default:
-+ break;
-+ }
-+
- switch (dce_version) {
-
- #if defined(CONFIG_DRM_AMD_DAL_DCE11_0)
-diff --git a/drivers/gpu/drm/amd/dal/dc/gpio/hw_factory.h b/drivers/gpu/drm/amd/dal/dc/gpio/hw_factory.h
-index f16678c..7fef3fa 100644
---- a/drivers/gpu/drm/amd/dal/dc/gpio/hw_factory.h
-+++ b/drivers/gpu/drm/amd/dal/dc/gpio/hw_factory.h
-@@ -69,6 +69,7 @@ struct hw_factory {
-
- bool dal_hw_factory_init(
- struct hw_factory *factory,
-- enum dce_version dce_version);
-+ enum dce_version dce_version,
-+ enum dce_environment dce_environment);
-
- #endif
-diff --git a/drivers/gpu/drm/amd/dal/dc/gpio/hw_translate.c b/drivers/gpu/drm/amd/dal/dc/gpio/hw_translate.c
-index 96e135f..d49e952 100644
---- a/drivers/gpu/drm/amd/dal/dc/gpio/hw_translate.c
-+++ b/drivers/gpu/drm/amd/dal/dc/gpio/hw_translate.c
-@@ -45,14 +45,25 @@
- #include "dce110/hw_translate_dce110.h"
- #endif
-
-+#include "diagnostics/hw_translate_diag.h"
-+
- /*
- * This unit
- */
-
- bool dal_hw_translate_init(
- struct hw_translate *translate,
-- enum dce_version dce_version)
-+ enum dce_version dce_version,
-+ enum dce_environment dce_environment)
- {
-+ switch (dce_environment) {
-+ case DCE_ENV_DIAG_FPGA_MAXIMUS:
-+ dal_hw_translate_diag_fpga_init(translate);
-+ return true;
-+ default:
-+ break;
-+ }
-+
- switch (dce_version) {
-
- #if defined(CONFIG_DRM_AMD_DAL_DCE11_0)
-diff --git a/drivers/gpu/drm/amd/dal/dc/gpio/hw_translate.h b/drivers/gpu/drm/amd/dal/dc/gpio/hw_translate.h
-index d5740ac..3a7d89c 100644
---- a/drivers/gpu/drm/amd/dal/dc/gpio/hw_translate.h
-+++ b/drivers/gpu/drm/amd/dal/dc/gpio/hw_translate.h
-@@ -44,6 +44,7 @@ struct hw_translate {
-
- bool dal_hw_translate_init(
- struct hw_translate *translate,
-- enum dce_version dce_version);
-+ enum dce_version dce_version,
-+ enum dce_environment dce_environment);
-
- #endif
-diff --git a/drivers/gpu/drm/amd/dal/dc/i2caux/Makefile b/drivers/gpu/drm/amd/dal/dc/i2caux/Makefile
-index 15902a8..390d83d 100644
---- a/drivers/gpu/drm/amd/dal/dc/i2caux/Makefile
-+++ b/drivers/gpu/drm/amd/dal/dc/i2caux/Makefile
-@@ -21,3 +21,13 @@ AMD_DAL_I2CAUX_DCE110 = $(addprefix $(AMDDALPATH)/dc/i2caux/dce110/,$(I2CAUX_DCE
-
- AMD_DAL_FILES += $(AMD_DAL_I2CAUX_DCE110)
- endif
-+
-+###############################################################################
-+# Diagnostics on FPGA
-+###############################################################################
-+I2CAUX_DIAG = i2caux_diag.o
-+
-+AMD_DAL_I2CAUX_DIAG = $(addprefix $(AMDDALPATH)/dc/i2caux/diagnostics/,$(I2CAUX_DIAG))
-+
-+AMD_DAL_FILES += $(AMD_DAL_I2CAUX_DIAG)
-+
-diff --git a/drivers/gpu/drm/amd/dal/dc/i2caux/diagnostics/i2caux_diag.c b/drivers/gpu/drm/amd/dal/dc/i2caux/diagnostics/i2caux_diag.c
-new file mode 100644
-index 0000000..86b606d
---- /dev/null
-+++ b/drivers/gpu/drm/amd/dal/dc/i2caux/diagnostics/i2caux_diag.c
-@@ -0,0 +1,113 @@
-+/*
-+ * Copyright 2012-16 Advanced Micro Devices, Inc.
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the "Software"),
-+ * to deal in the Software without restriction, including without limitation
-+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-+ * and/or sell copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice shall be included in
-+ * all copies or substantial portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
-+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-+ * OTHER DEALINGS IN THE SOFTWARE.
-+ *
-+ * Authors: AMD
-+ *
-+ */
-+
-+#include "dal_services.h"
-+
-+/*
-+ * Pre-requisites: headers required by header of this unit
-+ */
-+
-+#include "include/i2caux_interface.h"
-+#include "../i2caux.h"
-+#include "../engine.h"
-+#include "../i2c_engine.h"
-+#include "../i2c_sw_engine.h"
-+#include "../i2c_hw_engine.h"
-+
-+/*
-+ * Header of this unit
-+ */
-+#include "i2caux_diag.h"
-+
-+/*
-+ * Post-requisites: headers required by this unit
-+ */
-+
-+/*
-+ * This unit
-+ */
-+
-+static void destruct(
-+ struct i2caux *i2caux)
-+{
-+ dal_i2caux_destruct(i2caux);
-+}
-+
-+static void destroy(
-+ struct i2caux **i2c_engine)
-+{
-+ destruct(*i2c_engine);
-+
-+ dc_service_free((*i2c_engine)->ctx, *i2c_engine);
-+
-+ *i2c_engine = NULL;
-+}
-+
-+
-+
-+/* function table */
-+static const struct i2caux_funcs i2caux_funcs = {
-+ .destroy = destroy,
-+ .acquire_i2c_hw_engine = NULL,
-+ .release_engine = NULL,
-+ .acquire_i2c_sw_engine = NULL,
-+ .acquire_aux_engine = NULL,
-+};
-+
-+static bool construct(
-+ struct i2caux *i2caux,
-+ struct adapter_service *as,
-+ struct dc_context *ctx)
-+{
-+ if (!dal_i2caux_construct(i2caux, as, ctx)) {
-+ ASSERT_CRITICAL(false);
-+ return false;
-+ }
-+
-+ i2caux->funcs = &i2caux_funcs;
-+
-+ return true;
-+}
-+
-+struct i2caux *dal_i2caux_diag_fpga_create(
-+ struct adapter_service *as,
-+ struct dc_context *ctx)
-+{
-+ struct i2caux *i2caux = dc_service_alloc(ctx, sizeof(struct i2caux));
-+
-+ if (!i2caux) {
-+ ASSERT_CRITICAL(false);
-+ return NULL;
-+ }
-+
-+ if (construct(i2caux, as, ctx))
-+ return i2caux;
-+
-+ ASSERT_CRITICAL(false);
-+
-+ dc_service_free(ctx, i2caux);
-+
-+ return NULL;
-+}
-diff --git a/drivers/gpu/drm/amd/dal/dc/i2caux/diagnostics/i2caux_diag.h b/drivers/gpu/drm/amd/dal/dc/i2caux/diagnostics/i2caux_diag.h
-new file mode 100644
-index 0000000..3de250b
---- /dev/null
-+++ b/drivers/gpu/drm/amd/dal/dc/i2caux/diagnostics/i2caux_diag.h
-@@ -0,0 +1,33 @@
-+/*
-+ * Copyright 2012-16 Advanced Micro Devices, Inc.
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the "Software"),
-+ * to deal in the Software without restriction, including without limitation
-+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-+ * and/or sell copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice shall be included in
-+ * all copies or substantial portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
-+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-+ * OTHER DEALINGS IN THE SOFTWARE.
-+ *
-+ * Authors: AMD
-+ *
-+ */
-+
-+#ifndef __DAL_I2C_AUX_DIAG_FPGA_H__
-+#define __DAL_I2C_AUX_DIAG_FPGA_H__
-+
-+struct i2caux *dal_i2caux_diag_fpga_create(
-+ struct adapter_service *as,
-+ struct dc_context *ctx);
-+
-+#endif /* __DAL_I2C_AUX_DIAG_FPGA_H__ */
-diff --git a/drivers/gpu/drm/amd/dal/dc/i2caux/i2caux.c b/drivers/gpu/drm/amd/dal/dc/i2caux/i2caux.c
-index 50262a4..6de108c 100644
---- a/drivers/gpu/drm/amd/dal/dc/i2caux/i2caux.c
-+++ b/drivers/gpu/drm/amd/dal/dc/i2caux/i2caux.c
-@@ -53,6 +53,8 @@
- #include "dce110/i2caux_dce110.h"
- #endif
-
-+#include "diagnostics/i2caux_diag.h"
-+
- /*
- * @brief
- * Plain API, available publicly
-@@ -63,6 +65,7 @@ struct i2caux *dal_i2caux_create(
- struct dc_context *ctx)
- {
- enum dce_version dce_version;
-+ enum dce_environment dce_environment;
-
- if (!as) {
- BREAK_TO_DEBUGGER();
-@@ -70,6 +73,14 @@ struct i2caux *dal_i2caux_create(
- }
-
- dce_version = dal_adapter_service_get_dce_version(as);
-+ dce_environment = dal_adapter_service_get_dce_environment(as);
-+
-+ switch (dce_environment) {
-+ case DCE_ENV_DIAG_FPGA_MAXIMUS:
-+ return dal_i2caux_diag_fpga_create(as, ctx);
-+ default:
-+ break;
-+ }
-
- switch (dce_version) {
- #if defined(CONFIG_DRM_AMD_DAL_DCE11_0)
-diff --git a/drivers/gpu/drm/amd/dal/dc/inc/core_dc.h b/drivers/gpu/drm/amd/dal/dc/inc/core_dc.h
-index 9d62a24..be46f97 100644
---- a/drivers/gpu/drm/amd/dal/dc/inc/core_dc.h
-+++ b/drivers/gpu/drm/amd/dal/dc/inc/core_dc.h
-@@ -34,6 +34,12 @@ struct dc {
-
- /* HW functions */
- struct hw_sequencer_funcs hwss;
-+
-+ /* Diagnostics */
-+ enum dce_version dce_version;
-+ enum dce_environment dce_environment;
- };
-
-+#define IS_DIAGNOSTICS_DC(dc) ((dc)->dce_environment == DCE_ENV_DIAG_FPGA_MAXIMUS)
-+
- #endif /* __CORE_DC_H__ */
-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 2851266..8ebbe65 100644
---- a/drivers/gpu/drm/amd/dal/include/adapter_service_interface.h
-+++ b/drivers/gpu/drm/amd/dal/include/adapter_service_interface.h
-@@ -322,6 +322,7 @@ struct as_init_data {
- struct bdf_info bdf_info;
- const struct dal_override_parameters *display_param;
- struct dc_bios *vbios_override;
-+ enum dce_environment dce_environment;
- };
-
- /* Create adapter service */
-@@ -336,6 +337,9 @@ void dal_adapter_service_destroy(
- enum dce_version dal_adapter_service_get_dce_version(
- const struct adapter_service *as);
-
-+enum dce_environment dal_adapter_service_get_dce_environment(
-+ const struct adapter_service *as);
-+
- /* Get firmware information from BIOS */
- bool dal_adapter_service_get_firmware_info(
- struct adapter_service *as,
-diff --git a/drivers/gpu/drm/amd/dal/include/dal_types.h b/drivers/gpu/drm/amd/dal/include/dal_types.h
-index caaacf6..f756d36 100644
---- a/drivers/gpu/drm/amd/dal/include/dal_types.h
-+++ b/drivers/gpu/drm/amd/dal/include/dal_types.h
-@@ -40,6 +40,12 @@ enum dce_version {
- DCE_VERSION_MAX
- };
-
-+enum dce_environment {
-+ DCE_ENV_PRODUCTION_DRV = 0,
-+ DCE_ENV_DIAG_FPGA_MAXIMUS, /* Emulation on FPGA, in Maximus System. */
-+ DCE_ENV_DIAG_SILICON, /* Emulation on real HW */
-+};
-+
- /*
- * ASIC Runtime Flags
- */
-@@ -141,6 +147,7 @@ struct dal_init_data {
- /* If 'vbios_override' not NULL, it will be called instead
- * of the real VBIOS. Intended use is Diagnostics on FPGA. */
- struct dc_bios *vbios_override;
-+ enum dce_environment dce_environment;
- };
-
- struct dal_dc_init_data {
-diff --git a/drivers/gpu/drm/amd/dal/include/gpio_service_interface.h b/drivers/gpu/drm/amd/dal/include/gpio_service_interface.h
-index b22bb1b..b4f30dd 100644
---- a/drivers/gpu/drm/amd/dal/include/gpio_service_interface.h
-+++ b/drivers/gpu/drm/amd/dal/include/gpio_service_interface.h
-@@ -35,7 +35,8 @@
- struct gpio_service;
-
- struct gpio_service *dal_gpio_service_create(
-- enum dce_version dce_version,
-+ enum dce_version dce_version_major,
-+ enum dce_version dce_version_minor,
- struct dc_context *ctx);
-
- struct gpio *dal_gpio_service_create_gpio(
---
-2.7.4
-