diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0692-drm-amd-dal-Define-interface-for-External-VBIOS-part.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0692-drm-amd-dal-Define-interface-for-External-VBIOS-part.patch | 3301 |
1 files changed, 3301 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0692-drm-amd-dal-Define-interface-for-External-VBIOS-part.patch b/common/recipes-kernel/linux/files/0692-drm-amd-dal-Define-interface-for-External-VBIOS-part.patch new file mode 100644 index 00000000..315c116c --- /dev/null +++ b/common/recipes-kernel/linux/files/0692-drm-amd-dal-Define-interface-for-External-VBIOS-part.patch @@ -0,0 +1,3301 @@ +From 777022b361d791813c9e399bd7d7b1e3efe28232 Mon Sep 17 00:00:00 2001 +From: David Rokhvarg <David.Rokhvarg@amd.com> +Date: Tue, 12 Jan 2016 12:01:10 -0500 +Subject: [PATCH 0692/1110] drm/amd/dal: Define interface for External VBIOS - + part 2. + +Signed-off-by: David Rokhvarg <David.Rokhvarg@amd.com> +Acked-by: Jordan Lazare <Jordan.Lazare@amd.com> +--- + .../gpu/drm/amd/dal/dc/adapter/adapter_service.c | 140 ++-- + .../gpu/drm/amd/dal/dc/adapter/adapter_service.h | 5 +- + .../drm/amd/dal/dc/adapter/wireless_data_source.c | 9 +- + .../drm/amd/dal/dc/adapter/wireless_data_source.h | 4 +- + drivers/gpu/drm/amd/dal/dc/bios/bios_parser.c | 807 ++++++++++++++------- + .../gpu/drm/amd/dal/dc/bios/bios_parser_helper.c | 1 - + drivers/gpu/drm/amd/dal/dc/core/dc.c | 4 +- + drivers/gpu/drm/amd/dal/dc/dc.h | 5 +- + drivers/gpu/drm/amd/dal/dc/dc_bios_types.h | 248 ++++++- + drivers/gpu/drm/amd/dal/dc/dc_helpers.h | 2 + + .../drm/amd/dal/dc/dce110/dce110_hw_sequencer.c | 51 +- + .../drm/amd/dal/dc/dce110/dce110_link_encoder.c | 59 +- + .../gpu/drm/amd/dal/dc/dce110/dce110_resource.c | 2 +- + .../drm/amd/dal/dc/dce110/dce110_stream_encoder.c | 7 +- + .../drm/amd/dal/dc/dce110/dce110_stream_encoder.h | 2 +- + .../amd/dal/dc/dce110/dce110_timing_generator.c | 7 +- + .../gpu/drm/amd/dal/dc/gpu/calc_pll_clock_source.c | 2 +- + .../gpu/drm/amd/dal/dc/gpu/calc_pll_clock_source.h | 4 +- + drivers/gpu/drm/amd/dal/dc/gpu/clock_source.c | 7 +- + drivers/gpu/drm/amd/dal/dc/gpu/clock_source.h | 2 +- + .../amd/dal/dc/gpu/dce110/display_clock_dce110.c | 4 +- + .../dal/dc/gpu/dce110/pll_clock_source_dce110.c | 6 +- + .../dal/dc/gpu/dce110/vce_clock_source_dce110.c | 4 +- + drivers/gpu/drm/amd/dal/dc/gpu/ext_clock_source.c | 11 +- + drivers/gpu/drm/amd/dal/dc/gpu/pll_clock_source.c | 7 +- + drivers/gpu/drm/amd/dal/dc/inc/hw_sequencer.h | 2 +- + drivers/gpu/drm/amd/dal/dc/inc/stream_encoder.h | 4 +- + .../amd/dal/include/adapter_service_interface.h | 3 +- + .../drm/amd/dal/include/adapter_service_types.h | 1 + + .../drm/amd/dal/include/bios_parser_interface.h | 216 +----- + .../gpu/drm/amd/dal/include/bios_parser_types.h | 19 +- + .../drm/amd/dal/include/timing_generator_types.h | 3 +- + 32 files changed, 1007 insertions(+), 641 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 6084466..b3b3be7 100644 +--- a/drivers/gpu/drm/amd/dal/dc/adapter/adapter_service.c ++++ b/drivers/gpu/drm/amd/dal/dc/adapter/adapter_service.c +@@ -26,15 +26,15 @@ + + #include "dal_services.h" + ++#include "dc_bios_types.h" ++ + #include "include/adapter_service_interface.h" + #include "include/i2caux_interface.h" + #include "include/asic_capability_types.h" +-#include "include/bios_parser_interface.h" + #include "include/gpio_service_interface.h" + #include "include/asic_capability_interface.h" + #include "include/logger_interface.h" + +-#include "dc_bios_types.h" + #include "adapter_service.h" + #include "hw_ctx_adapter_service.h" + #include "wireless_data_source.h" +@@ -233,10 +233,8 @@ static void initialize_backlight_caps( + return; + } + +- if (dal_bios_parser_get_firmware_info +- (as->bios_parser, &fw_info) != BP_RESULT_OK || +- dal_bios_parser_get_embedded_panel_info +- (as->bios_parser, &panel_info) != BP_RESULT_OK) ++ 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) + return; + + params.data = ∩︀ +@@ -553,7 +551,7 @@ static bool get_hpd_info(struct adapter_service *as, + struct graphics_object_hpd_info *info) + { + return BP_RESULT_OK == +- dal_bios_parser_get_hpd_info(as->bios_parser, id, info); ++ as->dcb->funcs->get_hpd_info(as->dcb, id, info); + } + + /* +@@ -687,10 +685,10 @@ static void adapter_service_destruct( + { + dal_adapter_service_destroy_hw_ctx(&as->hw_ctx); + dal_i2caux_destroy(&as->i2caux); +- dal_bios_parser_destroy(&as->bios_parser); + dal_gpio_service_destroy(&as->gpio_service); + dal_asic_capability_destroy(&as->asic_cap); +- dal_bios_parser_destroy_integrated_info(as->ctx, &as->integrated_info); ++ as->dcb->funcs->destroy_integrated_info(as->dcb, &as->integrated_info); ++ dal_bios_parser_destroy(&as->dcb); + } + + /* +@@ -736,18 +734,16 @@ static bool adapter_service_construct( + goto failed_to_generate_features; + } + +- if (init_data->vbios_override) { +- /* TODO: remove the typecast */ +- as->bios_parser = (struct bios_parser *)init_data->vbios_override; +- } else { ++ if (init_data->vbios_override) ++ as->dcb = init_data->vbios_override; ++ else { + /* Create BIOS parser */ + init_data->bp_init_data.ctx = init_data->ctx; + +- as->bios_parser = +- dal_bios_parser_create(&init_data->bp_init_data, as); ++ as->dcb = dal_bios_parser_create(&init_data->bp_init_data, as); + } + +- if (!as->bios_parser) { ++ if (!as->dcb) { + ASSERT_CRITICAL(false); + goto failed_to_create_bios_parser; + } +@@ -784,10 +780,10 @@ 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 = dal_bios_parser_create_integrated_info( +- as->bios_parser); ++ as->integrated_info = as->dcb->funcs->create_integrated_info( ++ as->dcb); + +- dal_bios_parser_post_init(as->bios_parser); ++ as->dcb->funcs->post_init(as->dcb); + + /* Generate backlight translation table and initializes + other brightness properties */ +@@ -809,7 +805,7 @@ failed_to_create_i2caux: + dal_gpio_service_destroy(&as->gpio_service); + + failed_to_create_gpio_service: +- dal_bios_parser_destroy(&as->bios_parser); ++ dal_bios_parser_destroy(&as->dcb); + + failed_to_create_bios_parser: + dal_asic_capability_destroy(&as->asic_cap); +@@ -926,8 +922,7 @@ uint8_t dal_adapter_service_get_connectors_num( + uint8_t wireless_connectors_num = 0; + struct dc_bios *dcb; + +- /* TODO: remove type cast */ +- dcb = (struct dc_bios*)dal_adapter_service_get_bios_parser(as); ++ dcb = dal_adapter_service_get_bios_parser(as); + + vbios_connectors_num = dcb->funcs->get_connectors_number(dcb); + +@@ -964,7 +959,7 @@ uint32_t dal_adapter_service_get_src_num( + if (is_wireless_object(id)) + return wireless_get_srcs_num(as, id); + else +- return dal_bios_parser_get_src_number(as->bios_parser, id); ++ return as->dcb->funcs->get_src_number(as->dcb, id); + } + + /** +@@ -989,8 +984,8 @@ struct graphics_object_id dal_adapter_service_get_src_obj( + src_object_id = wireless_get_src_obj_id(as, id, index); + else { + if (BP_RESULT_OK != +- dal_bios_parser_get_src_obj( +- as->bios_parser, id, index, &src_object_id)) ++ as->dcb->funcs->get_src_obj( ++ as->dcb, id, index, &src_object_id)) + src_object_id = + dal_graphics_object_id_init( + 0, +@@ -1017,8 +1012,7 @@ struct graphics_object_id dal_adapter_service_get_connector_obj_id( + struct dc_bios *dcb; + uint8_t bios_connectors_num; + +- /* TODO: remove type cast */ +- dcb = (struct dc_bios*)dal_adapter_service_get_bios_parser(as); ++ dcb = dal_adapter_service_get_bios_parser(as); + + bios_connectors_num = dcb->funcs->get_connectors_number(dcb); + +@@ -1027,8 +1021,8 @@ struct graphics_object_id dal_adapter_service_get_connector_obj_id( + as, + connector_index); + else +- return dal_bios_parser_get_connector_id( +- as->bios_parser, ++ return as->dcb->funcs->get_connector_id( ++ as->dcb, + connector_index); + } + +@@ -1038,7 +1032,7 @@ bool dal_adapter_service_get_device_tag( + uint32_t device_tag_index, + struct connector_device_tag_info *info) + { +- if (BP_RESULT_OK == dal_bios_parser_get_device_tag(as->bios_parser, ++ if (BP_RESULT_OK == as->dcb->funcs->get_device_tag(as->dcb, + connector_object_id, device_tag_index, info)) + return true; + else +@@ -1049,7 +1043,7 @@ bool dal_adapter_service_get_device_tag( + bool dal_adapter_service_is_device_id_supported(struct adapter_service *as, + struct device_id id) + { +- return dal_bios_parser_is_device_id_supported(as->bios_parser, id); ++ return as->dcb->funcs->is_device_id_supported(as->dcb, id); + } + + bool dal_adapter_service_is_meet_underscan_req(struct adapter_service *as) +@@ -1092,7 +1086,7 @@ uint8_t dal_adapter_service_get_clock_sources_num( + * as a clock source for DP + */ + enum bp_result bp_result = +- dal_bios_parser_get_firmware_info(as->bios_parser, ++ as->dcb->funcs->get_firmware_info(as->dcb, + &fw_info); + + if (BP_RESULT_OK == bp_result && +@@ -1211,7 +1205,7 @@ bool dal_adapter_service_get_i2c_info( + } + + return BP_RESULT_OK == +- dal_bios_parser_get_i2c_info(as->bios_parser, id, i2c_info); ++ as->dcb->funcs->get_i2c_info(as->dcb, id, i2c_info); + } + + /* +@@ -1269,7 +1263,7 @@ struct irq *dal_adapter_service_obtain_hpd_irq( + if (!get_hpd_info(as, id, &hpd_info)) + return NULL; + +- bp_result = dal_bios_parser_get_gpio_pin_info(as->bios_parser, ++ bp_result = as->dcb->funcs->get_gpio_pin_info(as->dcb, + hpd_info.hpd_int_gpio_uid, &pin_info); + + if (bp_result != BP_RESULT_OK) { +@@ -1304,7 +1298,7 @@ uint32_t dal_adapter_service_get_ss_info_num( + struct adapter_service *as, + enum as_signal_type signal) + { +- return dal_bios_parser_get_ss_entry_number(as->bios_parser, signal); ++ return as->dcb->funcs->get_ss_entry_number(as->dcb, signal); + } + + /* +@@ -1319,8 +1313,8 @@ bool dal_adapter_service_get_ss_info( + struct spread_spectrum_info *info) + { + enum bp_result bp_result = +- dal_bios_parser_get_spread_spectrum_info( +- as->bios_parser, signal, idx, info); ++ as->dcb->funcs->get_spread_spectrum_info( ++ as->dcb, signal, idx, info); + + return BP_RESULT_OK == bp_result; + } +@@ -1510,22 +1504,20 @@ struct gpio *dal_adapter_service_obtain_stereo_gpio( + result.raw = as->asic_cap->data[ASIC_DATA_FEATURE_FLAGS]; + + /* Case 1 : Workstation stereo */ +- if (result.bits.WORKSTATION_STEREO) ++ if (result.bits.WORKSTATION_STEREO) { + /* "active low" <--> "default 3d right eye polarity" = false */ +- return dal_gpio_service_create_gpio_ex( +- as->gpio_service, GPIO_ID_GENERIC, GPIO_GENERIC_A, +- GPIO_PIN_OUTPUT_STATE_ACTIVE_LOW); ++ return dal_gpio_service_create_gpio_ex(as->gpio_service, ++ GPIO_ID_GENERIC, GPIO_GENERIC_A, ++ GPIO_PIN_OUTPUT_STATE_ACTIVE_LOW); + /* Case 2 : runtime parameter override for sideband stereo */ +- else if (have_param_stereo_gpio) { ++ } else if (have_param_stereo_gpio) { + /* TODO implement */ + return NULL; +- /* Case 3 : VBIOS gives us GPIO for sideband stereo */ ++ /* Case 3 : VBIOS gives us GPIO for sideband stereo */ + } else { + const struct graphics_object_id id = +- dal_graphics_object_id_init( +- GENERIC_ID_STEREO, +- ENUM_ID_1, +- OBJECT_TYPE_GENERIC); ++ dal_graphics_object_id_init(GENERIC_ID_STEREO, ++ ENUM_ID_1, OBJECT_TYPE_GENERIC); + + struct bp_gpio_cntl_info cntl_info; + struct gpio_pin_info pin_info; +@@ -1533,18 +1525,21 @@ struct gpio *dal_adapter_service_obtain_stereo_gpio( + /* Get GPIO record for this object. + * Stereo GPIO record should have exactly one entry + * where active state defines stereosync polarity */ +- if (1 != dal_bios_parser_get_gpio_record( +- as->bios_parser, id, &cntl_info, 1)) { ++ if (1 != as->dcb->funcs->get_gpio_record( ++ as->dcb, id, &cntl_info, ++ 1)) { + return NULL; +- } else if (BP_RESULT_OK != dal_bios_parser_get_gpio_pin_info( +- as->bios_parser, cntl_info.id, &pin_info)) { ++ } else if (BP_RESULT_OK ++ != as->dcb->funcs->get_gpio_pin_info( ++ as->dcb, cntl_info.id, ++ &pin_info)) { + /*ASSERT_CRITICAL(false);*/ + return NULL; +- } else +- return dal_gpio_service_create_gpio_ex( +- as->gpio_service, +- pin_info.offset, pin_info.mask, +- cntl_info.state); ++ } else { ++ return dal_gpio_service_create_gpio_ex(as->gpio_service, ++ pin_info.offset, pin_info.mask, ++ cntl_info.state); ++ } + } + } + +@@ -1569,7 +1564,7 @@ bool dal_adapter_service_get_firmware_info( + struct adapter_service *as, + struct firmware_info *info) + { +- return dal_bios_parser_get_firmware_info(as->bios_parser, info) == ++ return as->dcb->funcs->get_firmware_info(as->dcb, info) == + BP_RESULT_OK; + } + +@@ -1666,13 +1661,10 @@ uint32_t dal_adapter_service_get_memory_type_multiplier( + * + * Get BIOS parser handler + */ +-/* TODO: change return type to 'dc_bios'. */ +-struct bios_parser *dal_adapter_service_get_bios_parser( ++struct dc_bios *dal_adapter_service_get_bios_parser( + struct adapter_service *as) + { +- /* TODO: conditionally return 'override' or 'real'. +- * Works for now because 'base' is first member of 'bios parser' */ +- return as->bios_parser; ++ return as->dcb; + } + + /* +@@ -1764,8 +1756,7 @@ bool dal_adapter_service_get_embedded_panel_info( + /*TODO: add DALASSERT_MSG here*/ + return false; + +- result = dal_bios_parser_get_embedded_panel_info( +- as->bios_parser, info); ++ result = as->dcb->funcs->get_embedded_panel_info(as->dcb, info); + + return result == BP_RESULT_OK; + } +@@ -1781,8 +1772,8 @@ bool dal_adapter_service_enum_embedded_panel_patch_mode( + /*TODO: add DALASSERT_MSG here*/ + return false; + +- result = dal_bios_parser_enum_embedded_panel_patch_mode( +- as->bios_parser, index, mode); ++ result = as->dcb->funcs->enum_embedded_panel_patch_mode( ++ as->dcb, index, mode); + + return result == BP_RESULT_OK; + } +@@ -1793,9 +1784,8 @@ bool dal_adapter_service_get_faked_edid_len( + { + enum bp_result result; + +- result = dal_bios_parser_get_faked_edid_len( +- as->bios_parser, +- len); ++ result = as->dcb->funcs->get_faked_edid_len(as->dcb, len); ++ + return result == BP_RESULT_OK; + } + +@@ -1806,8 +1796,8 @@ bool dal_adapter_service_get_faked_edid_buf( + { + enum bp_result result; + +- result = dal_bios_parser_get_faked_edid_buf( +- as->bios_parser, ++ result = as->dcb->funcs->get_faked_edid_buf( ++ as->dcb, + buf, + len); + return result == BP_RESULT_OK; +@@ -1896,7 +1886,7 @@ bool dal_adapter_service_should_optimize( + */ + bool dal_adapter_service_is_in_accelerated_mode(struct adapter_service *as) + { +- return dal_bios_parser_is_accelerated_mode(as->bios_parser); ++ return as->dcb->funcs->is_accelerated_mode(as->dcb); + } + + struct ddc *dal_adapter_service_obtain_ddc_from_i2c_info( +@@ -1946,7 +1936,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 dal_bios_parser_is_lid_open(as->bios_parser); ++ return as->dcb->funcs->is_lid_open(as->dcb); + #else + return false; + #endif +@@ -2033,8 +2023,8 @@ bool dal_adapter_service_get_encoder_cap_info( + * - dpHbr2Cap: indicates supported/not supported by HW Encoder + * - dpHbr2En : indicates DP spec compliant/not compliant + */ +- result = dal_bios_parser_get_encoder_cap_info( +- as->bios_parser, ++ result = as->dcb->funcs->get_encoder_cap_info( ++ as->dcb, + id, + &bp_cap_info); + +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 dd5bb00..5bb4446 100644 +--- a/drivers/gpu/drm/amd/dal/dc/adapter/adapter_service.h ++++ b/drivers/gpu/drm/amd/dal/dc/adapter/adapter_service.h +@@ -27,6 +27,7 @@ + #define __DAL_ADAPTER_SERVICE_H__ + + /* Include */ ++#include "dc_bios_types.h" + #include "include/adapter_service_interface.h" + #include "wireless_data_source.h" + +@@ -35,13 +36,13 @@ + */ + struct gpio_service; + struct asic_cap; +-struct dc_bios; ++ + + /* Adapter service */ + struct adapter_service { + struct dc_context *ctx; + struct asic_capability *asic_cap; +- struct bios_parser *bios_parser;/* TODO: remove it. replace by struct dc_bios *dcb; */ ++ struct dc_bios *dcb; + struct gpio_service *gpio_service; + struct i2caux *i2caux; + struct wireless_data wireless_data; +diff --git a/drivers/gpu/drm/amd/dal/dc/adapter/wireless_data_source.c b/drivers/gpu/drm/amd/dal/dc/adapter/wireless_data_source.c +index dcb885d..0249829 100644 +--- a/drivers/gpu/drm/amd/dal/dc/adapter/wireless_data_source.c ++++ b/drivers/gpu/drm/amd/dal/dc/adapter/wireless_data_source.c +@@ -32,12 +32,12 @@ + + /*construct wireless data*/ + bool wireless_data_init(struct wireless_data *data, +- struct bios_parser *bp, ++ struct dc_bios *dcb, + struct wireless_init_data *init_data) + { + struct firmware_info info; + +- if (data == NULL || bp == NULL || init_data == NULL) { ++ if (data == NULL || dcb == NULL || init_data == NULL) { + ASSERT_CRITICAL(false); + return false; + } +@@ -66,10 +66,9 @@ bool wireless_data_init(struct wireless_data *data, + * Check if SBIOS sets remote display enable, exposed + * through VBIOS. This is only valid for APU, not dGPU + */ +- dal_bios_parser_get_firmware_info(bp, &info); ++ dcb->funcs->get_firmware_info(dcb, &info); + +- if ((REMOTE_DISPLAY_ENABLE == +- info.remote_display_config) && ++ if ((REMOTE_DISPLAY_ENABLE == info.remote_display_config) && + init_data->fusion) { + data->wireless_enable = true; + data->wireless_disp_path_enable = true; +diff --git a/drivers/gpu/drm/amd/dal/dc/adapter/wireless_data_source.h b/drivers/gpu/drm/amd/dal/dc/adapter/wireless_data_source.h +index 54b140a..b64089e 100644 +--- a/drivers/gpu/drm/amd/dal/dc/adapter/wireless_data_source.h ++++ b/drivers/gpu/drm/amd/dal/dc/adapter/wireless_data_source.h +@@ -33,7 +33,7 @@ + * Forward declaration + */ + struct adapter_service; +-struct bios_parser; ++struct dc_bios; + + /* Wireless data init structure */ + struct wireless_init_data { +@@ -55,7 +55,7 @@ struct wireless_data { + /*construct wireless data*/ + bool wireless_data_init( + struct wireless_data *data, +- struct bios_parser *bp, ++ struct dc_bios *dcb, + struct wireless_init_data *init_data); + + uint8_t wireless_get_clocks_num( +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 3329322..3ca165b 100644 +--- a/drivers/gpu/drm/amd/dal/dc/bios/bios_parser.c ++++ b/drivers/gpu/drm/amd/dal/dc/bios/bios_parser.c +@@ -40,6 +40,7 @@ + #endif + #include "command_table_helper.h" + #include "bios_parser.h" ++#include "bios_parser_interface.h" + + #define THREE_PERCENT_OF_10000 300 + +@@ -100,101 +101,21 @@ static void process_ext_display_connection_info(struct bios_parser *bp); + #define BIOS_IMAGE_SIZE_UNIT 512 + + /*****************************************************************************/ +-static uint8_t bios_parser_get_connectors_number(struct dc_bios *dcb); +- +-const struct dc_vbios_funcs vbios_funcs = { +- .get_connectors_number = bios_parser_get_connectors_number +-}; +- + static bool bios_parser_construct( + struct bios_parser *bp, + struct bp_init_data *init, +- struct adapter_service *as) +-{ +- uint16_t *rom_header_offset = NULL; +- ATOM_ROM_HEADER *rom_header = NULL; +- ATOM_OBJECT_HEADER *object_info_tbl; +- enum dce_version dce_version; +- +- if (!as) +- return false; ++ struct adapter_service *as); + +- if (!init) +- return false; ++static uint8_t bios_parser_get_connectors_number( ++ struct dc_bios *dcb); + +- if (!init->bios) +- return false; +- +- bp->base.funcs = &vbios_funcs; +- +- dce_version = dal_adapter_service_get_dce_version(as); +- bp->ctx = init->ctx; +- bp->as = as; +- bp->bios = init->bios; +- bp->bios_size = bp->bios[BIOS_IMAGE_SIZE_OFFSET] * BIOS_IMAGE_SIZE_UNIT; +- bp->bios_local_image = NULL; +- bp->lcd_scale = LCD_SCALE_UNKNOWN; +- +- rom_header_offset = +- GET_IMAGE(uint16_t, OFFSET_TO_POINTER_TO_ATOM_ROM_HEADER); +- +- if (!rom_header_offset) +- return false; +- +- rom_header = GET_IMAGE(ATOM_ROM_HEADER, *rom_header_offset); +- +- if (!rom_header) +- return false; +- +- bp->master_data_tbl = +- GET_IMAGE(ATOM_MASTER_DATA_TABLE, +- rom_header->usMasterDataTableOffset); +- +- if (!bp->master_data_tbl) +- return false; +- +- bp->object_info_tbl_offset = DATA_TABLES(Object_Header); +- +- if (!bp->object_info_tbl_offset) +- return false; +- +- object_info_tbl = +- GET_IMAGE(ATOM_OBJECT_HEADER, bp->object_info_tbl_offset); +- +- if (!object_info_tbl) +- return false; +- +- get_atom_data_table_revision(&object_info_tbl->sHeader, +- &bp->object_info_tbl.revision); +- +- if (bp->object_info_tbl.revision.major == 1 +- && bp->object_info_tbl.revision.minor >= 3) { +- ATOM_OBJECT_HEADER_V3 *tbl_v3; +- +- tbl_v3 = GET_IMAGE(ATOM_OBJECT_HEADER_V3, +- bp->object_info_tbl_offset); +- if (!tbl_v3) +- return false; +- +- bp->object_info_tbl.v1_3 = tbl_v3; +- } else if (bp->object_info_tbl.revision.major == 1 +- && bp->object_info_tbl.revision.minor >= 1) +- bp->object_info_tbl.v1_1 = object_info_tbl; +- else +- return false; +- +-#if defined(CONFIG_DRM_AMD_DAL_VBIOS_PRESENT) +- bp->vbios_helper_data.active = 0; +- bp->vbios_helper_data.requested = 0; +- dal_bios_parser_init_bios_helper(bp, dce_version); +-#endif +- dal_bios_parser_init_cmd_tbl(bp); +- dal_bios_parser_init_cmd_tbl_helper(&bp->cmd_helper, dce_version); ++static enum bp_result bios_parser_get_embedded_panel_info( ++ struct dc_bios *dcb, ++ struct embedded_panel_info *info); + +- return true; +-} ++/*****************************************************************************/ + +-struct bios_parser *dal_bios_parser_create( ++struct dc_bios *dal_bios_parser_create( + struct bp_init_data *init, struct adapter_service *as) + { + struct bios_parser *bp = NULL; +@@ -204,7 +125,7 @@ struct bios_parser *dal_bios_parser_create( + return NULL; + + if (bios_parser_construct(bp, init, as)) +- return bp; ++ return &bp->base; + + dc_service_free(init->ctx, bp); + BREAK_TO_DEBUGGER(); +@@ -217,29 +138,35 @@ static void destruct(struct bios_parser *bp) + dc_service_free(bp->ctx, bp->bios_local_image); + } + +-void dal_bios_parser_destroy(struct bios_parser **bp) ++void dal_bios_parser_destroy(struct dc_bios **dcb) + { +- if (!bp || !*bp) { ++ struct bios_parser *bp = BP_FROM_DCB(*dcb); ++ ++ if (!bp) { + BREAK_TO_DEBUGGER(); + return; + } + +- destruct(*bp); ++ destruct(bp); + +- dc_service_free((*bp)->ctx, *bp); +- *bp = NULL; ++ dc_service_free((bp)->ctx, bp); ++ *dcb = NULL; + } + +-void dal_bios_parser_power_down(struct bios_parser *bp) ++static void bios_parser_power_down(struct dc_bios *dcb) + { + #if defined(CONFIG_DRM_AMD_DAL_VBIOS_PRESENT) ++ struct bios_parser *bp = BP_FROM_DCB(dcb); ++ + dal_bios_parser_set_scratch_lcd_scale(bp, bp->lcd_scale); + #endif + } + +-void dal_bios_parser_power_up(struct bios_parser *bp) ++static void bios_parser_power_up(struct dc_bios *dcb) + { + #if defined(CONFIG_DRM_AMD_DAL_VBIOS_PRESENT) ++ struct bios_parser *bp = BP_FROM_DCB(dcb); ++ + if (bp->lcd_scale == LCD_SCALE_UNKNOWN) + bp->lcd_scale = dal_bios_parser_get_scratch_lcd_scale(bp); + #endif +@@ -259,8 +186,10 @@ static uint8_t get_number_of_objects(struct bios_parser *bp, uint32_t offset) + return table->ucNumberOfObjects; + } + +-uint8_t dal_bios_parser_get_encoders_number(struct bios_parser *bp) ++static uint8_t bios_parser_get_encoders_number(struct dc_bios *dcb) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); ++ + return get_number_of_objects(bp, + le16_to_cpu(bp->object_info_tbl.v1_1->usEncoderObjectTableOffset)); + } +@@ -273,9 +202,10 @@ static uint8_t bios_parser_get_connectors_number(struct dc_bios *dcb) + le16_to_cpu(bp->object_info_tbl.v1_1->usConnectorObjectTableOffset)); + } + +-uint32_t dal_bios_parser_get_oem_ddc_lines_number(struct bios_parser *bp) ++static uint32_t bios_parser_get_oem_ddc_lines_number(struct dc_bios *dcb) + { + uint32_t number = 0; ++ struct bios_parser *bp = BP_FROM_DCB(dcb); + + if (DATA_TABLES(OemInfo) != 0) { + ATOM_OEM_INFO *info; +@@ -296,9 +226,11 @@ uint32_t dal_bios_parser_get_oem_ddc_lines_number(struct bios_parser *bp) + return number; + } + +-struct graphics_object_id dal_bios_parser_get_encoder_id(struct bios_parser *bp, ++static struct graphics_object_id bios_parser_get_encoder_id( ++ struct dc_bios *dcb, + uint32_t i) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); + struct graphics_object_id object_id = dal_graphics_object_id_init( + 0, ENUM_ID_UNKNOWN, OBJECT_TYPE_UNKNOWN); + +@@ -317,10 +249,11 @@ struct graphics_object_id dal_bios_parser_get_encoder_id(struct bios_parser *bp, + return object_id; + } + +-struct graphics_object_id dal_bios_parser_get_connector_id( +- struct bios_parser *bp, ++static struct graphics_object_id bios_parser_get_connector_id( ++ struct dc_bios *dcb, + uint8_t i) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); + struct graphics_object_id object_id = dal_graphics_object_id_init( + 0, ENUM_ID_UNKNOWN, OBJECT_TYPE_UNKNOWN); + +@@ -339,12 +272,13 @@ struct graphics_object_id dal_bios_parser_get_connector_id( + return object_id; + } + +-uint32_t dal_bios_parser_get_src_number(struct bios_parser *bp, ++static uint32_t bios_parser_get_src_number(struct dc_bios *dcb, + struct graphics_object_id id) + { + uint32_t offset; + uint8_t *number; + ATOM_OBJECT *object; ++ struct bios_parser *bp = BP_FROM_DCB(dcb); + + object = get_bios_object(bp, id); + +@@ -363,21 +297,23 @@ uint32_t dal_bios_parser_get_src_number(struct bios_parser *bp, + return *number; + } + +-uint32_t dal_bios_parser_get_dst_number(struct bios_parser *bp, ++static uint32_t bios_parser_get_dst_number(struct dc_bios *dcb, + struct graphics_object_id id) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); + ATOM_OBJECT *object = get_bios_object(bp, id); + + return get_dst_number_from_object(bp, object); + } + +-enum bp_result dal_bios_parser_get_src_obj(struct bios_parser *bp, ++static enum bp_result bios_parser_get_src_obj(struct dc_bios *dcb, + struct graphics_object_id object_id, uint32_t index, + struct graphics_object_id *src_object_id) + { + uint32_t number; + uint16_t *id; + ATOM_OBJECT *object; ++ struct bios_parser *bp = BP_FROM_DCB(dcb); + + if (!src_object_id) + return BP_RESULT_BADINPUT; +@@ -399,13 +335,14 @@ enum bp_result dal_bios_parser_get_src_obj(struct bios_parser *bp, + return BP_RESULT_OK; + } + +-enum bp_result dal_bios_parser_get_dst_obj(struct bios_parser *bp, ++static enum bp_result bios_parser_get_dst_obj(struct dc_bios *dcb, + struct graphics_object_id object_id, uint32_t index, + struct graphics_object_id *dest_object_id) + { + uint32_t number; + uint16_t *id; + ATOM_OBJECT *object; ++ struct bios_parser *bp = BP_FROM_DCB(dcb); + + if (!dest_object_id) + return BP_RESULT_BADINPUT; +@@ -422,10 +359,11 @@ enum bp_result dal_bios_parser_get_dst_obj(struct bios_parser *bp, + return BP_RESULT_OK; + } + +-enum bp_result dal_bios_parser_get_oem_ddc_info(struct bios_parser *bp, ++static enum bp_result bios_parser_get_oem_ddc_info(struct dc_bios *dcb, + uint32_t index, + struct graphics_object_i2c_info *info) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); + + if (!info) + return BP_RESULT_BADINPUT; +@@ -458,7 +396,7 @@ enum bp_result dal_bios_parser_get_oem_ddc_info(struct bios_parser *bp, + return BP_RESULT_NORECORD; + } + +-enum bp_result dal_bios_parser_get_i2c_info(struct bios_parser *bp, ++static enum bp_result bios_parser_get_i2c_info(struct dc_bios *dcb, + struct graphics_object_id id, + struct graphics_object_i2c_info *info) + { +@@ -466,6 +404,7 @@ enum bp_result dal_bios_parser_get_i2c_info(struct bios_parser *bp, + ATOM_OBJECT *object; + ATOM_COMMON_RECORD_HEADER *header; + ATOM_I2C_RECORD *record; ++ struct bios_parser *bp = BP_FROM_DCB(dcb); + + if (!info) + return BP_RESULT_BADINPUT; +@@ -563,7 +502,28 @@ static enum bp_result get_voltage_ddc_info_v3(uint8_t *i2c_line, + return result; + } + +-enum bp_result dal_bios_parser_get_voltage_ddc_info(struct bios_parser *bp, ++static enum bp_result bios_parser_get_thermal_ddc_info( ++ struct dc_bios *dcb, ++ uint32_t i2c_channel_id, ++ struct graphics_object_i2c_info *info) ++{ ++ struct bios_parser *bp = BP_FROM_DCB(dcb); ++ ATOM_I2C_ID_CONFIG_ACCESS *config; ++ ATOM_I2C_RECORD record; ++ ++ if (!info) ++ return BP_RESULT_BADINPUT; ++ ++ config = (ATOM_I2C_ID_CONFIG_ACCESS *) &i2c_channel_id; ++ ++ record.sucI2cId.bfHW_Capable = config->sbfAccess.bfHW_Capable; ++ record.sucI2cId.bfI2C_LineMux = config->sbfAccess.bfI2C_LineMux; ++ record.sucI2cId.bfHW_EngineID = config->sbfAccess.bfHW_EngineID; ++ ++ return get_gpio_i2c_info(bp, &record, info); ++} ++ ++static enum bp_result bios_parser_get_voltage_ddc_info(struct dc_bios *dcb, + uint32_t index, + struct graphics_object_i2c_info *info) + { +@@ -572,6 +532,7 @@ enum bp_result dal_bios_parser_get_voltage_ddc_info(struct bios_parser *bp, + uint8_t *voltage_info_address; + ATOM_COMMON_TABLE_HEADER *header; + struct atom_data_revision revision = {0}; ++ struct bios_parser *bp = BP_FROM_DCB(dcb); + + if (!DATA_TABLES(VoltageObjectInfo)) + return result; +@@ -599,34 +560,14 @@ enum bp_result dal_bios_parser_get_voltage_ddc_info(struct bios_parser *bp, + } + + if (result == BP_RESULT_OK) +- result = dal_bios_parser_get_thermal_ddc_info(bp, ++ result = bios_parser_get_thermal_ddc_info(dcb, + i2c_line, info); + + + return result; + } + +-enum bp_result dal_bios_parser_get_thermal_ddc_info( +- struct bios_parser *bp, +- uint32_t i2c_channel_id, +- struct graphics_object_i2c_info *info) +-{ +- ATOM_I2C_ID_CONFIG_ACCESS *config; +- ATOM_I2C_RECORD record; +- +- if (!info) +- return BP_RESULT_BADINPUT; +- +- config = (ATOM_I2C_ID_CONFIG_ACCESS *) &i2c_channel_id; +- +- record.sucI2cId.bfHW_Capable = config->sbfAccess.bfHW_Capable; +- record.sucI2cId.bfI2C_LineMux = config->sbfAccess.bfI2C_LineMux; +- record.sucI2cId.bfHW_EngineID = config->sbfAccess.bfHW_EngineID; +- +- return get_gpio_i2c_info(bp, &record, info); +-} +- +-enum bp_result dal_bios_parser_get_ddc_info_for_i2c_line(struct bios_parser *bp, ++enum bp_result bios_parser_get_ddc_info_for_i2c_line(struct bios_parser *bp, + uint8_t i2c_line, struct graphics_object_i2c_info *info) + { + uint32_t offset; +@@ -690,10 +631,11 @@ enum bp_result dal_bios_parser_get_ddc_info_for_i2c_line(struct bios_parser *bp, + return BP_RESULT_NORECORD; + } + +-enum bp_result dal_bios_parser_get_hpd_info(struct bios_parser *bp, ++static enum bp_result bios_parser_get_hpd_info(struct dc_bios *dcb, + struct graphics_object_id id, + struct graphics_object_hpd_info *info) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); + ATOM_OBJECT *object; + ATOM_HPD_INT_RECORD *record = NULL; + +@@ -716,12 +658,13 @@ enum bp_result dal_bios_parser_get_hpd_info(struct bios_parser *bp, + return BP_RESULT_NORECORD; + } + +-uint32_t dal_bios_parser_get_gpio_record( +- struct bios_parser *bp, ++static uint32_t bios_parser_get_gpio_record( ++ struct dc_bios *dcb, + struct graphics_object_id id, + struct bp_gpio_cntl_info *gpio_record, + uint32_t record_size) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); + ATOM_COMMON_RECORD_HEADER *header = NULL; + ATOM_OBJECT_GPIO_CNTL_RECORD *record = NULL; + ATOM_OBJECT *object = get_bios_object(bp, id); +@@ -789,7 +732,7 @@ uint32_t dal_bios_parser_get_gpio_record( + return pins_number; + } + +-enum bp_result dal_bios_parser_get_device_tag_record( ++enum bp_result bios_parser_get_device_tag_record( + struct bios_parser *bp, + ATOM_OBJECT *object, + ATOM_CONNECTOR_DEVICE_TAG_RECORD **record) +@@ -826,12 +769,13 @@ enum bp_result dal_bios_parser_get_device_tag_record( + return BP_RESULT_NORECORD; + } + +-enum bp_result dal_bios_parser_get_device_tag( +- struct bios_parser *bp, ++static enum bp_result bios_parser_get_device_tag( ++ struct dc_bios *dcb, + struct graphics_object_id connector_object_id, + uint32_t device_tag_index, + struct connector_device_tag_info *info) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); + ATOM_OBJECT *object; + ATOM_CONNECTOR_DEVICE_TAG_RECORD *record = NULL; + ATOM_CONNECTOR_DEVICE_TAG *device_tag; +@@ -847,7 +791,7 @@ enum bp_result dal_bios_parser_get_device_tag( + return BP_RESULT_BADINPUT; + } + +- if (dal_bios_parser_get_device_tag_record(bp, object, &record) ++ if (bios_parser_get_device_tag_record(bp, object, &record) + != BP_RESULT_OK) + return BP_RESULT_NORECORD; + +@@ -873,10 +817,11 @@ static enum bp_result get_firmware_info_v2_2( + struct bios_parser *bp, + struct firmware_info *info); + +-enum bp_result dal_bios_parser_get_firmware_info( +- struct bios_parser *bp, ++static enum bp_result bios_parser_get_firmware_info( ++ struct dc_bios *dcb, + struct firmware_info *info) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); + enum bp_result result = BP_RESULT_BADBIOSTABLE; + ATOM_COMMON_TABLE_HEADER *header; + struct atom_data_revision revision; +@@ -1223,61 +1168,73 @@ static enum bp_result get_ss_info_v3_1( + return BP_RESULT_NORECORD; + } + +-enum bp_result dal_bios_parser_transmitter_control( +- struct bios_parser *bp, ++static enum bp_result bios_parser_transmitter_control( ++ struct dc_bios *dcb, + struct bp_transmitter_control *cntl) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); ++ + if (!bp->cmd_tbl.transmitter_control) + return BP_RESULT_FAILURE; + + return bp->cmd_tbl.transmitter_control(bp, cntl); + } + +-enum bp_result dal_bios_parser_encoder_control( +- struct bios_parser *bp, ++static enum bp_result bios_parser_encoder_control( ++ struct dc_bios *dcb, + struct bp_encoder_control *cntl) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); ++ + if (!bp->cmd_tbl.dig_encoder_control) + return BP_RESULT_FAILURE; + + return bp->cmd_tbl.dig_encoder_control(bp, cntl); + } + +-enum bp_result dal_bios_parser_adjust_pixel_clock( +- struct bios_parser *bp, ++static enum bp_result bios_parser_adjust_pixel_clock( ++ struct dc_bios *dcb, + struct bp_adjust_pixel_clock_parameters *bp_params) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); ++ + if (!bp->cmd_tbl.adjust_display_pll) + return BP_RESULT_FAILURE; + + return bp->cmd_tbl.adjust_display_pll(bp, bp_params); + } + +-enum bp_result dal_bios_parser_set_pixel_clock( +- struct bios_parser *bp, ++static enum bp_result bios_parser_set_pixel_clock( ++ struct dc_bios *dcb, + struct bp_pixel_clock_parameters *bp_params) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); ++ + if (!bp->cmd_tbl.set_pixel_clock) + return BP_RESULT_FAILURE; + + return bp->cmd_tbl.set_pixel_clock(bp, bp_params); + } + +-enum bp_result dal_bios_parser_set_dce_clock( +- struct bios_parser *bp, ++static enum bp_result bios_parser_set_dce_clock( ++ struct dc_bios *dcb, + struct bp_set_dce_clock_parameters *bp_params) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); ++ + if (!bp->cmd_tbl.set_dce_clock) + return BP_RESULT_FAILURE; + + return bp->cmd_tbl.set_dce_clock(bp, bp_params); + } + +-enum bp_result dal_bios_parser_enable_spread_spectrum_on_ppll( +- struct bios_parser *bp, ++static enum bp_result bios_parser_enable_spread_spectrum_on_ppll( ++ struct dc_bios *dcb, + struct bp_spread_spectrum_parameters *bp_params, + bool enable) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); ++ + if (!bp->cmd_tbl.enable_spread_spectrum_on_ppll) + return BP_RESULT_FAILURE; + +@@ -1286,20 +1243,23 @@ enum bp_result dal_bios_parser_enable_spread_spectrum_on_ppll( + + } + +-enum bp_result dal_bios_parser_program_crtc_timing( +- struct bios_parser *bp, ++static enum bp_result bios_parser_program_crtc_timing( ++ struct dc_bios *dcb, + struct bp_hw_crtc_timing_parameters *bp_params) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); ++ + if (!bp->cmd_tbl.set_crtc_timing) + return BP_RESULT_FAILURE; + + return bp->cmd_tbl.set_crtc_timing(bp, bp_params); + } + +-enum bp_result dal_bios_parser_program_display_engine_pll( +- struct bios_parser *bp, ++static enum bp_result bios_parser_program_display_engine_pll( ++ struct dc_bios *dcb, + struct bp_pixel_clock_parameters *bp_params) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); + + if (!bp->cmd_tbl.program_clock) + return BP_RESULT_FAILURE; +@@ -1308,12 +1268,14 @@ enum bp_result dal_bios_parser_program_display_engine_pll( + + } + +-enum signal_type dal_bios_parser_dac_load_detect( +- struct bios_parser *bp, ++static enum signal_type bios_parser_dac_load_detect( ++ struct dc_bios *dcb, + struct graphics_object_id encoder, + struct graphics_object_id connector, + enum signal_type display_signal) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); ++ + if (!bp->cmd_tbl.dac_load_detection) + return SIGNAL_TYPE_NONE; + +@@ -1321,62 +1283,73 @@ enum signal_type dal_bios_parser_dac_load_detect( + display_signal); + } + +-enum bp_result dal_bios_parser_get_divider_for_target_display_clock( +- struct bios_parser *bp, ++static enum bp_result bios_parser_get_divider_for_target_display_clock( ++ struct dc_bios *dcb, + struct bp_display_clock_parameters *bp_params) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); ++ + if (!bp->cmd_tbl.compute_memore_engine_pll) + return BP_RESULT_FAILURE; + + return bp->cmd_tbl.compute_memore_engine_pll(bp, bp_params); + } + +-enum bp_result dal_bios_parser_dvo_encoder_control( +- struct bios_parser *bp, ++static enum bp_result bios_parser_dvo_encoder_control( ++ struct dc_bios *dcb, + struct bp_dvo_encoder_control *cntl) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); ++ + if (!bp->cmd_tbl.dvo_encoder_control) + return BP_RESULT_FAILURE; + + return bp->cmd_tbl.dvo_encoder_control(bp, cntl); + } + +-enum bp_result dal_bios_parser_enable_crtc( +- struct bios_parser *bp, ++static enum bp_result bios_parser_enable_crtc( ++ struct dc_bios *dcb, + enum controller_id id, + bool enable) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); ++ + if (!bp->cmd_tbl.enable_crtc) + return BP_RESULT_FAILURE; + + return bp->cmd_tbl.enable_crtc(bp, id, enable); + } + +-enum bp_result dal_bios_parser_blank_crtc( +- struct bios_parser *bp, ++static enum bp_result bios_parser_blank_crtc( ++ struct dc_bios *dcb, + struct bp_blank_crtc_parameters *bp_params, + bool blank) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); ++ + if (!bp->cmd_tbl.blank_crtc) + return BP_RESULT_FAILURE; + + return bp->cmd_tbl.blank_crtc(bp, bp_params, blank); + } + +-enum bp_result dal_bios_parser_crtc_source_select( +- struct bios_parser *bp, ++static enum bp_result bios_parser_crtc_source_select( ++ struct dc_bios *dcb, + struct bp_crtc_source_select *bp_params) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); ++ + if (!bp->cmd_tbl.select_crtc_source) + return BP_RESULT_FAILURE; + + return bp->cmd_tbl.select_crtc_source(bp, bp_params); + } + +-enum bp_result dal_bios_parser_set_overscan( +- struct bios_parser *bp, ++static enum bp_result bios_parser_set_overscan( ++ struct dc_bios *dcb, + struct bp_hw_crtc_overscan_parameters *bp_params) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); + + if (!bp->cmd_tbl.set_crtc_overscan) + return BP_RESULT_FAILURE; +@@ -1384,32 +1357,38 @@ enum bp_result dal_bios_parser_set_overscan( + return bp->cmd_tbl.set_crtc_overscan(bp, bp_params); + } + +-enum bp_result dal_bios_parser_enable_memory_requests( +- struct bios_parser *bp, ++static enum bp_result bios_parser_enable_memory_requests( ++ struct dc_bios *dcb, + enum controller_id controller_id, + bool enable) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); ++ + if (!bp->cmd_tbl.enable_crtc_mem_req) + return BP_RESULT_FAILURE; + + return bp->cmd_tbl.enable_crtc_mem_req(bp, controller_id, enable); + } + +-enum bp_result dal_bios_parser_external_encoder_control( +- struct bios_parser *bp, ++static enum bp_result bios_parser_external_encoder_control( ++ struct dc_bios *dcb, + struct bp_external_encoder_control *cntl) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); ++ + if (!bp->cmd_tbl.external_encoder_control) + return BP_RESULT_FAILURE; + + return bp->cmd_tbl.external_encoder_control(bp, cntl); + } + +-enum bp_result dal_bios_parser_enable_disp_power_gating( +- struct bios_parser *bp, ++static enum bp_result bios_parser_enable_disp_power_gating( ++ struct dc_bios *dcb, + enum controller_id controller_id, + enum bp_pipe_control_action action) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); ++ + if (!bp->cmd_tbl.enable_disp_power_gating) + return BP_RESULT_FAILURE; + +@@ -1417,21 +1396,24 @@ enum bp_result dal_bios_parser_enable_disp_power_gating( + action); + } + +-bool dal_bios_parser_is_device_id_supported( +- struct bios_parser *bp, ++static bool bios_parser_is_device_id_supported( ++ struct dc_bios *dcb, + struct device_id id) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); ++ + uint32_t mask = get_support_mask_for_device_id(id); + + return (le16_to_cpu(bp->object_info_tbl.v1_1->usDeviceSupport) & mask) != 0; + } + +-enum bp_result dal_bios_parser_crt_control( +- struct bios_parser *bp, ++static enum bp_result bios_parser_crt_control( ++ struct dc_bios *dcb, + enum engine_id engine_id, + bool enable, + uint32_t pixel_clock) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); + uint8_t standard; + + if (!bp->cmd_tbl.dac1_encoder_control && +@@ -1568,7 +1550,7 @@ static enum bp_result get_ss_info_from_tbl( + uint32_t id, + struct spread_spectrum_info *ss_info); + /** +- * dal_bios_parser_get_spread_spectrum_info ++ * bios_parser_get_spread_spectrum_info + * Get spread spectrum information from the ASIC_InternalSS_Info(ver 2.1 or + * ver 3.1) or SS_Info table from the VBIOS. Currently ASIC_InternalSS_Info + * ver 2.1 can co-exist with SS_Info table. Expect ASIC_InternalSS_Info ver 3.1, +@@ -1580,12 +1562,13 @@ static enum bp_result get_ss_info_from_tbl( + * @param [out] ss_info, sprectrum information structure, + * @return Bios parser result code + */ +-enum bp_result dal_bios_parser_get_spread_spectrum_info( +- struct bios_parser *bp, ++static enum bp_result bios_parser_get_spread_spectrum_info( ++ struct dc_bios *dcb, + enum as_signal_type signal, + uint32_t index, + struct spread_spectrum_info *ss_info) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); + enum bp_result result = BP_RESULT_UNSUPPORTED; + uint32_t clk_id_ss = 0; + ATOM_COMMON_TABLE_HEADER *header; +@@ -1777,7 +1760,7 @@ static enum bp_result get_ss_info_from_ss_info_table( + { + struct embedded_panel_info panel_info; + +- if (dal_bios_parser_get_embedded_panel_info(bp, &panel_info) ++ if (bios_parser_get_embedded_panel_info(&bp->base, &panel_info) + == BP_RESULT_OK) + id_local = panel_info.ss_id; + break; +@@ -1833,10 +1816,11 @@ static enum bp_result get_embedded_panel_info_v1_3( + struct bios_parser *bp, + struct embedded_panel_info *info); + +-enum bp_result dal_bios_parser_get_embedded_panel_info( +- struct bios_parser *bp, ++static enum bp_result bios_parser_get_embedded_panel_info( ++ struct dc_bios *dcb, + struct embedded_panel_info *info) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); + ATOM_COMMON_TABLE_HEADER *hdr; + + if (!DATA_TABLES(LCD_Info)) +@@ -2111,7 +2095,7 @@ static enum bp_result get_embedded_panel_info_v1_3( + } + + /** +- * dal_bios_parser_get_encoder_cap_info ++ * bios_parser_get_encoder_cap_info + * + * @brief + * Get encoder capability information of input object id +@@ -2122,11 +2106,12 @@ static enum bp_result get_embedded_panel_info_v1_3( + * @return Bios parser result code + * + */ +-enum bp_result dal_bios_parser_get_encoder_cap_info( +- struct bios_parser *bp, ++static enum bp_result bios_parser_get_encoder_cap_info( ++ struct dc_bios *dcb, + struct graphics_object_id object_id, + struct bp_encoder_cap_info *info) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); + ATOM_OBJECT *object; + ATOM_ENCODER_CAP_RECORD *record = NULL; + +@@ -2198,7 +2183,7 @@ static ATOM_ENCODER_CAP_RECORD *get_encoder_cap_record( + } + + /** +- * dal_bios_parser_get_din_connector_info ++ * bios_parser_get_din_connector_info + * @brief + * Get GPIO record for the DIN connector, this GPIO tells whether there is a + * CV dumb dongle +@@ -2209,11 +2194,12 @@ static ATOM_ENCODER_CAP_RECORD *get_encoder_cap_record( + * @param info - GPIO record infor + * @return Bios parser result code + */ +-enum bp_result dal_bios_parser_get_din_connector_info( +- struct bios_parser *bp, ++static enum bp_result bios_parser_get_din_connector_info( ++ struct dc_bios *dcb, + struct graphics_object_id id, + struct din_connector_info *info) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); + ATOM_COMMON_RECORD_HEADER *header; + ATOM_CONNECTOR_CVTV_SHARE_DIN_RECORD *record = NULL; + ATOM_OBJECT *object; +@@ -2294,10 +2280,11 @@ static uint32_t get_ss_entry_number_from_ss_info_tbl( + * @param[in] signal, ASSignalType to be converted to SSid + * @return number of SS Entry that match the signal + */ +-uint32_t dal_bios_parser_get_ss_entry_number( +- struct bios_parser *bp, ++static uint32_t bios_parser_get_ss_entry_number( ++ struct dc_bios *dcb, + enum as_signal_type signal) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); + uint32_t ss_id = 0; + ATOM_COMMON_TABLE_HEADER *header; + struct atom_data_revision revision; +@@ -2381,7 +2368,7 @@ static uint32_t get_ss_entry_number_from_ss_info_tbl( + case ASIC_INTERNAL_SS_ON_LVDS: { + struct embedded_panel_info panel_info; + +- if (dal_bios_parser_get_embedded_panel_info(bp, &panel_info) ++ if (bios_parser_get_embedded_panel_info(&bp->base, &panel_info) + == BP_RESULT_OK) + id_local = panel_info.ss_id; + break; +@@ -2544,10 +2531,11 @@ static ATOM_FAKE_EDID_PATCH_RECORD *get_faked_edid_record( + return (ATOM_FAKE_EDID_PATCH_RECORD *)record; + } + +-enum bp_result dal_bios_parser_get_faked_edid_len( +- struct bios_parser *bp, ++static enum bp_result bios_parser_get_faked_edid_len( ++ struct dc_bios *dcb, + uint32_t *len) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); + ATOM_FAKE_EDID_PATCH_RECORD *edid_record = get_faked_edid_record(bp); + + if (!edid_record) +@@ -2558,11 +2546,12 @@ enum bp_result dal_bios_parser_get_faked_edid_len( + return BP_RESULT_OK; + } + +-enum bp_result dal_bios_parser_get_faked_edid_buf( +- struct bios_parser *bp, ++static enum bp_result bios_parser_get_faked_edid_buf( ++ struct dc_bios *dcb, + uint8_t *buff, + uint32_t len) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); + ATOM_FAKE_EDID_PATCH_RECORD *edid_record = get_faked_edid_record(bp); + uint32_t edid_size; + +@@ -2580,7 +2569,7 @@ enum bp_result dal_bios_parser_get_faked_edid_buf( + } + + /** +- * dal_bios_parser_get_gpio_pin_info ++ * bios_parser_get_gpio_pin_info + * Get GpioPin information of input gpio id + * + * @param gpio_id, GPIO ID +@@ -2592,11 +2581,12 @@ enum bp_result dal_bios_parser_get_faked_edid_buf( + * 2. in DATA_TABLE.GPIO_Pin_LUT, search all records, to get the registerA + * offset/mask + */ +-enum bp_result dal_bios_parser_get_gpio_pin_info( +- struct bios_parser *bp, ++static enum bp_result bios_parser_get_gpio_pin_info( ++ struct dc_bios *dcb, + uint32_t gpio_id, + struct gpio_pin_info *info) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); + ATOM_GPIO_PIN_LUT *header; + uint32_t count = 0; + uint32_t i = 0; +@@ -2648,11 +2638,12 @@ enum bp_result dal_bios_parser_get_gpio_pin_info( + * @param info, embedded panel patch mode structure + * @return Bios parser result code + */ +-enum bp_result dal_bios_parser_enum_embedded_panel_patch_mode( +- struct bios_parser *bp, ++static enum bp_result bios_parser_enum_embedded_panel_patch_mode( ++ struct dc_bios *dcb, + uint32_t index, + struct embedded_panel_patch_mode *mode) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); + uint32_t record_size; + uint32_t record_index; + uint8_t *record; +@@ -3711,7 +3702,7 @@ static void add_device_tag_from_ext_display_path( + ATOM_CONNECTOR_DEVICE_TAG *device_tag = NULL; + ATOM_CONNECTOR_DEVICE_TAG_RECORD *device_tag_record = NULL; + enum bp_result result = +- dal_bios_parser_get_device_tag_record( ++ bios_parser_get_device_tag_record( + bp, object, &device_tag_record); + + if ((le16_to_cpu(ext_display_path->usDeviceTag) != CONNECTOR_OBJECT_ID_NONE) +@@ -3958,7 +3949,7 @@ static enum bp_result patch_bios_image_from_ext_display_connection_info( + continue; + + /* Remove support for all device tags. */ +- if (dal_bios_parser_get_device_tag_record( ++ if (bios_parser_get_device_tag_record( + bp, object, &dev_tag_record) != BP_RESULT_OK) + continue; + +@@ -4212,14 +4203,18 @@ static void process_ext_display_connection_info(struct bios_parser *bp) + } + } + +-void dal_bios_parser_post_init(struct bios_parser *bp) ++static void bios_parser_post_init(struct dc_bios *dcb) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); ++ + process_ext_display_connection_info(bp); + } + +-bool dal_bios_parser_is_accelerated_mode( +- struct bios_parser *bp) ++static bool bios_parser_is_accelerated_mode( ++ struct dc_bios *dcb) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); ++ + #ifdef CONFIG_DRM_AMD_DAL_VBIOS_PRESENT + return bp->bios_helper->is_accelerated_mode( + bp->ctx); +@@ -4233,7 +4228,7 @@ bool dal_bios_parser_is_accelerated_mode( + } + + /** +- * dal_bios_parser_set_scratch_connected ++ * bios_parser_set_scratch_connected + * + * @brief + * update VBIOS scratch register about connected displays +@@ -4243,12 +4238,14 @@ bool dal_bios_parser_is_accelerated_mode( + * bool - connection state + * const ConnectorDeviceTagInfo* - pointer to device type and enum ID + */ +-void dal_bios_parser_set_scratch_connected( +- struct bios_parser *bp, ++static void bios_parser_set_scratch_connected( ++ struct dc_bios *dcb, + struct graphics_object_id connector_id, + bool connected, + const struct connector_device_tag_info *device_tag) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); ++ + #ifdef CONFIG_DRM_AMD_DAL_VBIOS_PRESENT + bp->bios_helper->set_scratch_connected( + bp->ctx, +@@ -4262,7 +4259,7 @@ void dal_bios_parser_set_scratch_connected( + } + + /** +- * dal_bios_parser_set_scratch_critical_state ++ * bios_parser_set_scratch_critical_state + * + * @brief + * update critical state bit in VBIOS scratch register +@@ -4270,10 +4267,12 @@ void dal_bios_parser_set_scratch_connected( + * @param + * bool - to set or reset state + */ +-void dal_bios_parser_set_scratch_critical_state( +- struct bios_parser *bp, ++static void bios_parser_set_scratch_critical_state( ++ struct dc_bios *dcb, + bool state) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); ++ + #ifdef CONFIG_DRM_AMD_DAL_VBIOS_PRESENT + bp->bios_helper->set_scratch_critical_state( + bp->ctx, state); +@@ -4285,9 +4284,11 @@ void dal_bios_parser_set_scratch_critical_state( + #endif + } + +-void dal_bios_parser_set_scratch_acc_mode_change( +- struct bios_parser *bp) ++static void bios_parser_set_scratch_acc_mode_change( ++ struct dc_bios *dcb) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); ++ + #ifdef CONFIG_DRM_AMD_DAL_VBIOS_PRESENT + bp->bios_helper->set_scratch_acc_mode_change( + bp->ctx); +@@ -4300,7 +4301,7 @@ void dal_bios_parser_set_scratch_acc_mode_change( + } + + /** +- * dal_bios_parser_prepare_scratch_active_and_requested ++ * bios_parser_prepare_scratch_active_and_requested + * + * @brief + * update VBIOS scratch registers about active and requested displays +@@ -4311,12 +4312,14 @@ void dal_bios_parser_set_scratch_acc_mode_change( + * const struct connector_device_tag_info * - pointer to display type and + * enum Id + */ +-void dal_bios_parser_prepare_scratch_active_and_requested( +- struct bios_parser *bp, ++static void bios_parser_prepare_scratch_active_and_requested( ++ struct dc_bios *dcb, + enum controller_id controller_id, + enum signal_type signal, + const struct connector_device_tag_info *device_tag) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); ++ + #ifdef CONFIG_DRM_AMD_DAL_VBIOS_PRESENT + bp->bios_helper->prepare_scratch_active_and_requested( + bp->ctx, +@@ -4332,9 +4335,11 @@ void dal_bios_parser_prepare_scratch_active_and_requested( + #endif + } + +-void dal_bios_parser_set_scratch_active_and_requested( +- struct bios_parser *bp) ++static void bios_parser_set_scratch_active_and_requested( ++ struct dc_bios *dcb) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); ++ + #ifdef CONFIG_DRM_AMD_DAL_VBIOS_PRESENT + bp->bios_helper->set_scratch_active_and_requested( + bp->ctx, +@@ -4726,21 +4731,11 @@ static enum bp_result construct_integrated_info( + return result; + } + +-/* +- * dal_bios_parser_create_integrated_info +- * +- * @brief +- * Create integrated info +- * +- * @param +- * bios_parser *bp - [in] BIOS parser handler +- * +- * @return +- * struct integrated_info * - pointer to the newly created integrated info +- */ +-struct integrated_info *dal_bios_parser_create_integrated_info( +- struct bios_parser *bp) ++ ++static struct integrated_info *bios_parser_create_integrated_info( ++ struct dc_bios *dcb) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); + struct integrated_info *info = NULL; + + info = dc_service_alloc(bp->ctx, sizeof(struct integrated_info)); +@@ -4758,24 +4753,344 @@ struct integrated_info *dal_bios_parser_create_integrated_info( + return NULL; + } + +-/* +- * dal_bios_parser_destroy_integrated_info +- * +- * @brief +- * Destroy provided integrated info +- * +- * @param +- * struct integrated_info **info - [in] info to be destroied +- */ +-void dal_bios_parser_destroy_integrated_info(struct dc_context *ctx, struct integrated_info **info) ++static void bios_parser_destroy_integrated_info( ++ struct dc_bios *dcb, ++ struct integrated_info **info) + { ++ struct bios_parser *bp = BP_FROM_DCB(dcb); ++ + if (info == NULL) { + ASSERT_CRITICAL(0); + return; + } + + if (*info != NULL) { +- dc_service_free(ctx, *info); ++ dc_service_free(bp->ctx, *info); + *info = NULL; + } + } ++ ++/****************************************************************************** ++ * Stub-functions */ ++static bool is_lid_open( ++ struct dc_bios *bios) ++{ ++ BREAK_TO_DEBUGGER(); ++ return false; ++} ++ ++static bool is_lid_status_changed( ++ struct dc_bios *bios) ++{ ++ BREAK_TO_DEBUGGER(); ++ return false; ++} ++ ++static bool is_display_config_changed( ++ struct dc_bios *bios) ++{ ++ BREAK_TO_DEBUGGER(); ++ return false; ++} ++ ++static void set_scratch_lcd_scale( ++ struct dc_bios *bios, ++ enum lcd_scale scale) ++{ ++ BREAK_TO_DEBUGGER(); ++} ++ ++static enum lcd_scale get_scratch_lcd_scale( ++ struct dc_bios *bios) ++{ ++ BREAK_TO_DEBUGGER(); ++ return LCD_SCALE_NONE; ++} ++ ++static void get_bios_event_info( ++ struct dc_bios *bios, ++ struct bios_event_info *info) ++{ ++ BREAK_TO_DEBUGGER(); ++} ++ ++static void update_requested_backlight_level( ++ struct dc_bios *bios, ++ uint32_t backlight_8bit) ++{ ++ BREAK_TO_DEBUGGER(); ++} ++ ++static uint32_t get_requested_backlight_level( ++ struct dc_bios *bios) ++{ ++ BREAK_TO_DEBUGGER(); ++ return 0; ++} ++ ++static void take_backlight_control( ++ struct dc_bios *bios, ++ bool cntl) ++{ ++ BREAK_TO_DEBUGGER(); ++} ++ ++static bool is_active_display( ++ struct dc_bios *bios, ++ enum signal_type signal, ++ const struct connector_device_tag_info *device_tag) ++{ ++ BREAK_TO_DEBUGGER(); ++ return false; ++} ++ ++static enum controller_id get_embedded_display_controller_id( ++ struct dc_bios *bios) ++{ ++ BREAK_TO_DEBUGGER(); ++ return CONTROLLER_ID_UNDEFINED; ++} ++ ++static uint32_t get_embedded_display_refresh_rate( ++ struct dc_bios *bios) ++{ ++ BREAK_TO_DEBUGGER(); ++ return 0; ++} ++ ++/******************************************************************************/ ++ ++static const struct dc_vbios_funcs vbios_funcs = { ++ .get_connectors_number = bios_parser_get_connectors_number, ++ ++ .power_down = bios_parser_power_down, ++ ++ .power_up = bios_parser_power_up, ++ ++ .get_encoders_number = bios_parser_get_encoders_number, ++ ++ .get_oem_ddc_lines_number = bios_parser_get_oem_ddc_lines_number, ++ ++ .get_encoder_id = bios_parser_get_encoder_id, ++ ++ .get_connector_id = bios_parser_get_connector_id, ++ ++ .get_src_number = bios_parser_get_src_number, ++ ++ .get_dst_number = bios_parser_get_dst_number, ++ ++ .get_gpio_record = bios_parser_get_gpio_record, ++ ++ .get_src_obj = bios_parser_get_src_obj, ++ ++ .get_dst_obj = bios_parser_get_dst_obj, ++ ++ .get_i2c_info = bios_parser_get_i2c_info, ++ ++ .get_oem_ddc_info = bios_parser_get_oem_ddc_info, ++ ++ .get_voltage_ddc_info = bios_parser_get_voltage_ddc_info, ++ ++ .get_thermal_ddc_info = bios_parser_get_thermal_ddc_info, ++ ++ .get_hpd_info = bios_parser_get_hpd_info, ++ ++ .get_device_tag = bios_parser_get_device_tag, ++ ++ .get_firmware_info = bios_parser_get_firmware_info, ++ ++ .get_spread_spectrum_info = bios_parser_get_spread_spectrum_info, ++ ++ .get_ss_entry_number = bios_parser_get_ss_entry_number, ++ ++ .get_embedded_panel_info = bios_parser_get_embedded_panel_info, ++ ++ .enum_embedded_panel_patch_mode = bios_parser_enum_embedded_panel_patch_mode, ++ ++ .get_gpio_pin_info = bios_parser_get_gpio_pin_info, ++ ++ .get_embedded_panel_info = bios_parser_get_embedded_panel_info, ++ ++ .get_gpio_pin_info = bios_parser_get_gpio_pin_info, ++ ++ .get_faked_edid_len = bios_parser_get_faked_edid_len, ++ ++ .get_faked_edid_buf = bios_parser_get_faked_edid_buf, ++ ++ .get_encoder_cap_info = bios_parser_get_encoder_cap_info, ++ ++ .get_din_connector_info = bios_parser_get_din_connector_info, ++ ++ .is_lid_open = is_lid_open, ++ ++ .is_lid_status_changed = is_lid_status_changed, ++ ++ .is_display_config_changed = is_display_config_changed, ++ ++ .is_accelerated_mode = bios_parser_is_accelerated_mode, ++ ++ .set_scratch_lcd_scale = set_scratch_lcd_scale, ++ ++ .get_scratch_lcd_scale = get_scratch_lcd_scale, ++ ++ .get_bios_event_info = get_bios_event_info, ++ ++ .update_requested_backlight_level = update_requested_backlight_level, ++ ++ .get_requested_backlight_level = get_requested_backlight_level, ++ ++ .take_backlight_control = take_backlight_control, ++ ++ .is_active_display = is_active_display, ++ ++ .get_embedded_display_controller_id = get_embedded_display_controller_id, ++ ++ .get_embedded_display_refresh_rate = get_embedded_display_refresh_rate, ++ ++ .set_scratch_connected = bios_parser_set_scratch_connected, ++ ++ .prepare_scratch_active_and_requested = bios_parser_prepare_scratch_active_and_requested, ++ ++ .set_scratch_active_and_requested = bios_parser_set_scratch_active_and_requested, ++ ++ .set_scratch_critical_state = bios_parser_set_scratch_critical_state, ++ ++ .set_scratch_acc_mode_change = bios_parser_set_scratch_acc_mode_change, ++ ++ .is_device_id_supported = bios_parser_is_device_id_supported, ++ ++ /* COMMANDS */ ++ .encoder_control = bios_parser_encoder_control, ++ ++ .transmitter_control = bios_parser_transmitter_control, ++ ++ .crt_control = bios_parser_crt_control, ++ ++ .dvo_encoder_control = bios_parser_dvo_encoder_control, ++ ++ .enable_crtc = bios_parser_enable_crtc, ++ ++ .adjust_pixel_clock = bios_parser_adjust_pixel_clock, ++ ++ .set_pixel_clock = bios_parser_set_pixel_clock, ++ ++ .set_dce_clock = bios_parser_set_dce_clock, ++ ++ .enable_spread_spectrum_on_ppll = bios_parser_enable_spread_spectrum_on_ppll, ++ ++ .program_crtc_timing = bios_parser_program_crtc_timing, ++ ++ .blank_crtc = bios_parser_blank_crtc, ++ ++ .set_overscan = bios_parser_set_overscan, ++ ++ .crtc_source_select = bios_parser_crtc_source_select, ++ ++ .program_display_engine_pll = bios_parser_program_display_engine_pll, ++ ++ .get_divider_for_target_display_clock = bios_parser_get_divider_for_target_display_clock, ++ ++ .dac_load_detect = bios_parser_dac_load_detect, ++ ++ .enable_memory_requests = bios_parser_enable_memory_requests, ++ ++ .external_encoder_control = bios_parser_external_encoder_control, ++ ++ .enable_disp_power_gating = bios_parser_enable_disp_power_gating, ++ ++ .post_init = bios_parser_post_init, ++ ++ .create_integrated_info = bios_parser_create_integrated_info, ++ ++ .destroy_integrated_info = bios_parser_destroy_integrated_info, ++}; ++ ++static bool bios_parser_construct( ++ struct bios_parser *bp, ++ struct bp_init_data *init, ++ struct adapter_service *as) ++{ ++ uint16_t *rom_header_offset = NULL; ++ ATOM_ROM_HEADER *rom_header = NULL; ++ ATOM_OBJECT_HEADER *object_info_tbl; ++ enum dce_version dce_version; ++ ++ if (!as) ++ return false; ++ ++ if (!init) ++ return false; ++ ++ if (!init->bios) ++ return false; ++ ++ bp->base.funcs = &vbios_funcs; ++ ++ dce_version = dal_adapter_service_get_dce_version(as); ++ bp->ctx = init->ctx; ++ bp->as = as; ++ bp->bios = init->bios; ++ bp->bios_size = bp->bios[BIOS_IMAGE_SIZE_OFFSET] * BIOS_IMAGE_SIZE_UNIT; ++ bp->bios_local_image = NULL; ++ bp->lcd_scale = LCD_SCALE_UNKNOWN; ++ ++ rom_header_offset = ++ GET_IMAGE(uint16_t, OFFSET_TO_POINTER_TO_ATOM_ROM_HEADER); ++ ++ if (!rom_header_offset) ++ return false; ++ ++ rom_header = GET_IMAGE(ATOM_ROM_HEADER, *rom_header_offset); ++ ++ if (!rom_header) ++ return false; ++ ++ bp->master_data_tbl = ++ GET_IMAGE(ATOM_MASTER_DATA_TABLE, ++ rom_header->usMasterDataTableOffset); ++ ++ if (!bp->master_data_tbl) ++ return false; ++ ++ bp->object_info_tbl_offset = DATA_TABLES(Object_Header); ++ ++ if (!bp->object_info_tbl_offset) ++ return false; ++ ++ object_info_tbl = ++ GET_IMAGE(ATOM_OBJECT_HEADER, bp->object_info_tbl_offset); ++ ++ if (!object_info_tbl) ++ return false; ++ ++ get_atom_data_table_revision(&object_info_tbl->sHeader, ++ &bp->object_info_tbl.revision); ++ ++ if (bp->object_info_tbl.revision.major == 1 ++ && bp->object_info_tbl.revision.minor >= 3) { ++ ATOM_OBJECT_HEADER_V3 *tbl_v3; ++ ++ tbl_v3 = GET_IMAGE(ATOM_OBJECT_HEADER_V3, ++ bp->object_info_tbl_offset); ++ if (!tbl_v3) ++ return false; ++ ++ bp->object_info_tbl.v1_3 = tbl_v3; ++ } else if (bp->object_info_tbl.revision.major == 1 ++ && bp->object_info_tbl.revision.minor >= 1) ++ bp->object_info_tbl.v1_1 = object_info_tbl; ++ else ++ return false; ++ ++#if defined(CONFIG_DRM_AMD_DAL_VBIOS_PRESENT) ++ bp->vbios_helper_data.active = 0; ++ bp->vbios_helper_data.requested = 0; ++ dal_bios_parser_init_bios_helper(bp, dce_version); ++#endif ++ dal_bios_parser_init_cmd_tbl(bp); ++ dal_bios_parser_init_cmd_tbl_helper(&bp->cmd_helper, dce_version); ++ ++ return true; ++} ++ ++/******************************************************************************/ +diff --git a/drivers/gpu/drm/amd/dal/dc/bios/bios_parser_helper.c b/drivers/gpu/drm/amd/dal/dc/bios/bios_parser_helper.c +index 0089800..a0927cf 100644 +--- a/drivers/gpu/drm/amd/dal/dc/bios/bios_parser_helper.c ++++ b/drivers/gpu/drm/amd/dal/dc/bios/bios_parser_helper.c +@@ -28,7 +28,6 @@ + #include "atom.h" + + #include "include/bios_parser_types.h" +-#include "include/adapter_service_types.h" + #include "bios_parser_helper.h" + #include "command_table_helper.h" + #include "command_table.h" +diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc.c b/drivers/gpu/drm/amd/dal/dc/core/dc.c +index 00a2453..841e02e 100644 +--- a/drivers/gpu/drm/amd/dal/dc/core/dc.c ++++ b/drivers/gpu/drm/amd/dal/dc/core/dc.c +@@ -143,7 +143,7 @@ failed_alloc: + static void init_hw(struct dc *dc) + { + int i; +- struct bios_parser *bp; ++ struct dc_bios *bp; + struct transform *xfm; + + bp = dal_adapter_service_get_bios_parser(dc->res_pool.adapter_srv); +@@ -164,7 +164,7 @@ static void init_hw(struct dc *dc) + } + + dc->hwss.clock_gating_power_up(dc->ctx, false); +- dal_bios_parser_power_up(bp); ++ bp->funcs->power_up(bp); + /***************************************/ + + for (i = 0; i < dc->link_count; i++) { +diff --git a/drivers/gpu/drm/amd/dal/dc/dc.h b/drivers/gpu/drm/amd/dal/dc/dc.h +index f86ddb0..341c968 100644 +--- a/drivers/gpu/drm/amd/dal/dc/dc.h ++++ b/drivers/gpu/drm/amd/dal/dc/dc.h +@@ -27,9 +27,8 @@ + #define DC_INTERFACE_H_ + + #include "dc_types.h" +-/* TODO: We should not include audio_interface.h here. Maybe just define +- * struct audio_info here */ +-#include "audio_interface.h" ++#include "dal_types.h" ++#include "audio_types.h" + #include "logger_types.h" + + #define MAX_SINKS_PER_LINK 4 +diff --git a/drivers/gpu/drm/amd/dal/dc/dc_bios_types.h b/drivers/gpu/drm/amd/dal/dc/dc_bios_types.h +index a82cbee..0f85f63 100644 +--- a/drivers/gpu/drm/amd/dal/dc/dc_bios_types.h ++++ b/drivers/gpu/drm/amd/dal/dc/dc_bios_types.h +@@ -26,15 +26,255 @@ + #ifndef DC_BIOS_TYPES_H + #define DC_BIOS_TYPES_H + +-struct dc_vbios_funcs; ++/****************************************************************************** ++ * Interface file for VBIOS implementations. ++ * ++ * The default implementation is inside DC. ++ * Display Manager (which instantiates DC) has the option to supply it's own ++ * (external to DC) implementation of VBIOS, which will be called by DC, using ++ * this interface. ++ * (The intended use is Diagnostics, but other uses may appear.) ++ *****************************************************************************/ ++ ++#include "include/bios_parser_types.h" + +-struct dc_bios { +- const struct dc_vbios_funcs *funcs; +-}; + + struct dc_vbios_funcs { + uint8_t (*get_connectors_number)(struct dc_bios *bios); ++ ++ void (*power_down)(struct dc_bios *bios); ++ void (*power_up)(struct dc_bios *bios); ++ ++ uint8_t (*get_encoders_number)(struct dc_bios *bios); ++ uint32_t (*get_oem_ddc_lines_number)(struct dc_bios *bios); ++ ++ struct graphics_object_id (*get_encoder_id)( ++ struct dc_bios *bios, ++ uint32_t i); ++ struct graphics_object_id (*get_connector_id)( ++ struct dc_bios *bios, ++ uint8_t connector_index); ++ uint32_t (*get_src_number)( ++ struct dc_bios *bios, ++ struct graphics_object_id id); ++ uint32_t (*get_dst_number)( ++ struct dc_bios *bios, ++ struct graphics_object_id id); ++ ++ uint32_t (*get_gpio_record)( ++ struct dc_bios *dcb, ++ struct graphics_object_id id, ++ struct bp_gpio_cntl_info *gpio_record, ++ uint32_t record_size); ++ ++ enum bp_result (*get_src_obj)( ++ struct dc_bios *bios, ++ struct graphics_object_id object_id, uint32_t index, ++ struct graphics_object_id *src_object_id); ++ enum bp_result (*get_dst_obj)( ++ struct dc_bios *bios, ++ struct graphics_object_id object_id, uint32_t index, ++ struct graphics_object_id *dest_object_id); ++ enum bp_result (*get_oem_ddc_info)( ++ struct dc_bios *bios, ++ uint32_t index, ++ struct graphics_object_i2c_info *info); ++ ++ enum bp_result (*get_i2c_info)( ++ struct dc_bios *dcb, ++ struct graphics_object_id id, ++ struct graphics_object_i2c_info *info); ++ ++ enum bp_result (*get_voltage_ddc_info)( ++ struct dc_bios *bios, ++ uint32_t index, ++ struct graphics_object_i2c_info *info); ++ enum bp_result (*get_thermal_ddc_info)( ++ struct dc_bios *bios, ++ uint32_t i2c_channel_id, ++ struct graphics_object_i2c_info *info); ++ enum bp_result (*get_hpd_info)( ++ struct dc_bios *bios, ++ struct graphics_object_id id, ++ struct graphics_object_hpd_info *info); ++ enum bp_result (*get_device_tag)( ++ struct dc_bios *bios, ++ struct graphics_object_id connector_object_id, ++ uint32_t device_tag_index, ++ struct connector_device_tag_info *info); ++ enum bp_result (*get_firmware_info)( ++ struct dc_bios *bios, ++ struct firmware_info *info); ++ enum bp_result (*get_spread_spectrum_info)( ++ struct dc_bios *bios, ++ enum as_signal_type signal, ++ uint32_t index, ++ struct spread_spectrum_info *ss_info); ++ uint32_t (*get_ss_entry_number)( ++ struct dc_bios *bios, ++ enum as_signal_type signal); ++ enum bp_result (*get_embedded_panel_info)( ++ struct dc_bios *bios, ++ struct embedded_panel_info *info); ++ enum bp_result (*enum_embedded_panel_patch_mode)( ++ struct dc_bios *bios, ++ uint32_t index, ++ struct embedded_panel_patch_mode *mode); ++ enum bp_result (*get_gpio_pin_info)( ++ struct dc_bios *bios, ++ uint32_t gpio_id, ++ struct gpio_pin_info *info); ++ enum bp_result (*get_faked_edid_len)( ++ struct dc_bios *bios, ++ uint32_t *len); ++ enum bp_result (*get_faked_edid_buf)( ++ struct dc_bios *bios, ++ uint8_t *buff, ++ uint32_t len); ++ enum bp_result (*get_encoder_cap_info)( ++ struct dc_bios *bios, ++ struct graphics_object_id object_id, ++ struct bp_encoder_cap_info *info); ++ enum bp_result (*get_din_connector_info)( ++ struct dc_bios *bios, ++ struct graphics_object_id id, ++ struct din_connector_info *info); ++ ++ bool (*is_lid_open)( ++ struct dc_bios *bios); ++ bool (*is_lid_status_changed)( ++ struct dc_bios *bios); ++ bool (*is_display_config_changed)( ++ struct dc_bios *bios); ++ bool (*is_accelerated_mode)( ++ struct dc_bios *bios); ++ void (*set_scratch_lcd_scale)( ++ struct dc_bios *bios, ++ enum lcd_scale scale); ++ enum lcd_scale (*get_scratch_lcd_scale)( ++ struct dc_bios *bios); ++ void (*get_bios_event_info)( ++ struct dc_bios *bios, ++ struct bios_event_info *info); ++ void (*update_requested_backlight_level)( ++ struct dc_bios *bios, ++ uint32_t backlight_8bit); ++ uint32_t (*get_requested_backlight_level)( ++ struct dc_bios *bios); ++ void (*take_backlight_control)( ++ struct dc_bios *bios, ++ bool cntl); ++ bool (*is_active_display)( ++ struct dc_bios *bios, ++ enum signal_type signal, ++ const struct connector_device_tag_info *device_tag); ++ enum controller_id (*get_embedded_display_controller_id)( ++ struct dc_bios *bios); ++ uint32_t (*get_embedded_display_refresh_rate)( ++ struct dc_bios *bios); ++ void (*set_scratch_connected)( ++ struct dc_bios *bios, ++ struct graphics_object_id connector_id, ++ bool connected, ++ const struct connector_device_tag_info *device_tag); ++ void (*prepare_scratch_active_and_requested)( ++ struct dc_bios *bios, ++ enum controller_id controller_id, ++ enum signal_type signal, ++ const struct connector_device_tag_info *device_tag); ++ void (*set_scratch_active_and_requested)( ++ struct dc_bios *bios); ++ void (*set_scratch_critical_state)( ++ struct dc_bios *bios, ++ bool state); ++ void (*set_scratch_acc_mode_change)( ++ struct dc_bios *bios); ++ ++ bool (*is_device_id_supported)( ++ struct dc_bios *bios, ++ struct device_id id); ++ ++ /* COMMANDS */ ++ ++ enum bp_result (*encoder_control)( ++ struct dc_bios *bios, ++ struct bp_encoder_control *cntl); ++ enum bp_result (*transmitter_control)( ++ struct dc_bios *bios, ++ struct bp_transmitter_control *cntl); ++ enum bp_result (*crt_control)( ++ struct dc_bios *bios, ++ enum engine_id engine_id, ++ bool enable, ++ uint32_t pixel_clock); ++ enum bp_result (*dvo_encoder_control)( ++ struct dc_bios *bios, ++ struct bp_dvo_encoder_control *cntl); ++ enum bp_result (*enable_crtc)( ++ struct dc_bios *bios, ++ enum controller_id id, ++ bool enable); ++ enum bp_result (*adjust_pixel_clock)( ++ struct dc_bios *bios, ++ struct bp_adjust_pixel_clock_parameters *bp_params); ++ enum bp_result (*set_pixel_clock)( ++ struct dc_bios *bios, ++ struct bp_pixel_clock_parameters *bp_params); ++ enum bp_result (*set_dce_clock)( ++ struct dc_bios *bios, ++ struct bp_set_dce_clock_parameters *bp_params); ++ enum bp_result (*enable_spread_spectrum_on_ppll)( ++ struct dc_bios *bios, ++ struct bp_spread_spectrum_parameters *bp_params, ++ bool enable); ++ enum bp_result (*program_crtc_timing)( ++ struct dc_bios *bios, ++ struct bp_hw_crtc_timing_parameters *bp_params); ++ enum bp_result (*blank_crtc)( ++ struct dc_bios *bios, ++ struct bp_blank_crtc_parameters *bp_params, ++ bool blank); ++ enum bp_result (*set_overscan)( ++ struct dc_bios *bios, ++ struct bp_hw_crtc_overscan_parameters *bp_params); ++ enum bp_result (*crtc_source_select)( ++ struct dc_bios *bios, ++ struct bp_crtc_source_select *bp_params); ++ enum bp_result (*program_display_engine_pll)( ++ struct dc_bios *bios, ++ struct bp_pixel_clock_parameters *bp_params); ++ enum bp_result (*get_divider_for_target_display_clock)( ++ struct dc_bios *bios, ++ struct bp_display_clock_parameters *bp_params); ++ enum signal_type (*dac_load_detect)( ++ struct dc_bios *bios, ++ struct graphics_object_id encoder, ++ struct graphics_object_id connector, ++ enum signal_type display_signal); ++ enum bp_result (*enable_memory_requests)( ++ struct dc_bios *bios, ++ enum controller_id controller_id, ++ bool enable); ++ enum bp_result (*external_encoder_control)( ++ struct dc_bios *bios, ++ struct bp_external_encoder_control *cntl); ++ enum bp_result (*enable_disp_power_gating)( ++ struct dc_bios *bios, ++ enum controller_id controller_id, ++ enum bp_pipe_control_action action); ++ ++ void (*post_init)(struct dc_bios *bios); ++ ++ struct integrated_info *(*create_integrated_info)( ++ struct dc_bios *bios); ++ ++ void (*destroy_integrated_info)( ++ struct dc_bios *dcb, ++ struct integrated_info **info); + }; + ++struct dc_bios { ++ const struct dc_vbios_funcs *funcs; ++}; + + #endif /* DC_BIOS_TYPES_H */ +diff --git a/drivers/gpu/drm/amd/dal/dc/dc_helpers.h b/drivers/gpu/drm/amd/dal/dc/dc_helpers.h +index 7a14300..bd082d8 100644 +--- a/drivers/gpu/drm/amd/dal/dc/dc_helpers.h ++++ b/drivers/gpu/drm/amd/dal/dc/dc_helpers.h +@@ -33,6 +33,8 @@ + #include "dc_types.h" + #include "dc.h" + ++struct dp_mst_stream_allocation_table; ++ + enum dc_edid_status dc_helpers_parse_edid_caps( + struct dc_context *ctx, + const struct dc_edid *edid, +diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c +index 4f37282..fbcd799 100644 +--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c ++++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c +@@ -24,6 +24,7 @@ + */ + #include "dc_services.h" + #include "dc.h" ++#include "dc_bios_types.h" + #include "core_types.h" + #include "core_status.h" + #include "resource.h" +@@ -146,7 +147,7 @@ static void dce110_enable_display_pipe_clock_gating( + static bool dce110_enable_display_power_gating( + struct dc_context *ctx, + uint8_t controller_id, +- struct bios_parser *bp, ++ struct dc_bios *dcb, + enum pipe_gating_control power_gating) + { + enum bp_result bp_result = BP_RESULT_OK; +@@ -161,8 +162,8 @@ static bool dce110_enable_display_power_gating( + + if (!(power_gating == PIPE_GATING_CONTROL_INIT && + (controller_id + 1) != CONTROLLER_ID_D0)) +- bp_result = dal_bios_parser_enable_disp_power_gating( +- bp, controller_id + 1, cntl); ++ bp_result = dcb->funcs->enable_disp_power_gating( ++ dcb, controller_id + 1, cntl); + + if (power_gating != PIPE_GATING_CONTROL_ENABLE) + init_pte(ctx); +@@ -235,12 +236,13 @@ static bool set_gamma_ramp( + static enum dc_status bios_parser_crtc_source_select( + struct core_stream *stream) + { ++ struct dc_bios *dcb; + /* call VBIOS table to set CRTC source for the HW + * encoder block + * note: video bios clears all FMT setting here. */ +- + struct bp_crtc_source_select crtc_source_select = {0}; + const struct core_sink *sink = stream->sink; ++ + crtc_source_select.engine_id = stream->stream_enc->id; + crtc_source_select.controller_id = stream->controller_idx + 1; + /*TODO: Need to un-hardcode color depth, dp_audio and account for +@@ -249,14 +251,16 @@ static enum dc_status bios_parser_crtc_source_select( + crtc_source_select.signal = sink->public.sink_signal; + crtc_source_select.enable_dp_audio = false; + crtc_source_select.sink_signal = sink->public.sink_signal; +- crtc_source_select.display_output_bit_depth +- = PANEL_8BIT_COLOR; ++ crtc_source_select.display_output_bit_depth = PANEL_8BIT_COLOR; ++ ++ dcb = dal_adapter_service_get_bios_parser(sink->link->adapter_srv); + +- if (BP_RESULT_OK != dal_bios_parser_crtc_source_select( +- dal_adapter_service_get_bios_parser(sink->link->adapter_srv), ++ if (BP_RESULT_OK != dcb->funcs->crtc_source_select( ++ dcb, + &crtc_source_select)) { + return DC_ERROR_UNEXPECTED; + } ++ + return DC_OK; + } + +@@ -625,9 +629,9 @@ static void set_blender_mode( + static void update_bios_scratch_critical_state(struct adapter_service *as, + bool state) + { +- dal_bios_parser_set_scratch_critical_state( +- dal_adapter_service_get_bios_parser(as), +- state); ++ struct dc_bios *dcb = dal_adapter_service_get_bios_parser(as); ++ ++ dcb->funcs->set_scratch_critical_state(dcb, state); + } + + static void update_info_frame(struct core_stream *stream) +@@ -787,14 +791,14 @@ static enum dc_status apply_single_controller_ctx_to_hw(uint8_t controller_idx, + bool timing_changed = context->res_ctx.controller_ctx[controller_idx] + .flags.timing_changed; + enum color_space color_space; +- struct bios_parser *bp; ++ struct dc_bios *dcb; + +- bp = dal_adapter_service_get_bios_parser( ++ dcb = dal_adapter_service_get_bios_parser( + context->res_ctx.pool.adapter_srv); + + if (timing_changed) { + dce110_enable_display_power_gating( +- stream->ctx, controller_idx, bp, ++ stream->ctx, controller_idx, dcb, + PIPE_GATING_CONTROL_DISABLE); + + /* Must blank CRTC after disabling power gating and before any +@@ -961,10 +965,10 @@ static void disable_vga_and_power_gate_all_controllers( + { + int i; + struct timing_generator *tg; +- struct bios_parser *bp; ++ struct dc_bios *dcb; + struct dc_context *ctx; + +- bp = dal_adapter_service_get_bios_parser( ++ dcb = dal_adapter_service_get_bios_parser( + dc->res_pool.adapter_srv); + + for (i = 0; i < dc->res_pool.controller_count; i++) { +@@ -977,7 +981,7 @@ static void disable_vga_and_power_gate_all_controllers( + * powergating. */ + dce110_enable_display_pipe_clock_gating(ctx, + true); +- dce110_enable_display_power_gating(ctx, i+1, bp, ++ dce110_enable_display_power_gating(ctx, i+1, dcb, + PIPE_GATING_CONTROL_ENABLE); + } + } +@@ -991,16 +995,15 @@ static void disable_vga_and_power_gate_all_controllers( + */ + static void enable_accelerated_mode(struct dc *dc) + { +- struct bios_parser *bp; ++ struct dc_bios *dcb; + +- bp = dal_adapter_service_get_bios_parser( +- dc->res_pool.adapter_srv); ++ dcb = dal_adapter_service_get_bios_parser(dc->res_pool.adapter_srv); + + power_down_all_hw_blocks(dc); + + disable_vga_and_power_gate_all_controllers(dc); + +- dal_bios_parser_set_scratch_acc_mode_change(bp); ++ dcb->funcs->set_scratch_acc_mode_change(dcb); + } + + #if 0 +@@ -1559,9 +1562,9 @@ static bool update_plane_address( + static void reset_single_stream_hw_ctx(struct core_stream *stream, + struct validate_context *context) + { +- struct bios_parser *bp; ++ struct dc_bios *dcb; + +- bp = dal_adapter_service_get_bios_parser( ++ dcb = dal_adapter_service_get_bios_parser( + context->res_ctx.pool.adapter_srv); + if (stream->audio) { + dal_audio_disable_output(stream->audio, +@@ -1580,7 +1583,7 @@ static void reset_single_stream_hw_ctx(struct core_stream *stream, + disable_stereo_mixer(stream->ctx); + unreference_clock_source(&context->res_ctx, stream->clock_source); + dce110_enable_display_power_gating( +- stream->ctx, stream->controller_idx, bp, ++ stream->ctx, stream->controller_idx, dcb, + PIPE_GATING_CONTROL_ENABLE); + } + +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 deaf94d..73ba7b8 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 +@@ -29,6 +29,8 @@ + #include "stream_encoder.h" + #include "dce110_link_encoder.h" + #include "i2caux_interface.h" ++#include "dc_bios_types.h" ++ + #include "dce/dce_11_0_d.h" + #include "dce/dce_11_0_sh_mask.h" + #include "dce/dce_11_0_enum.h" +@@ -168,6 +170,19 @@ static enum transmitter translate_encoder_to_transmitter( + } + } + ++static enum bp_result link_transmitter_control( ++ struct dce110_link_encoder *enc110, ++ struct bp_transmitter_control *cntl) ++{ ++ enum bp_result result; ++ struct dc_bios *bp = dal_adapter_service_get_bios_parser( ++ enc110->base.adapter_service); ++ ++ result = bp->funcs->transmitter_control(bp, cntl); ++ ++ return result; ++} ++ + static void enable_phy_bypass_mode( + struct dce110_link_encoder *enc110, + bool enable) +@@ -672,9 +687,7 @@ static void link_encoder_edp_power_control( + cntl.lanes_number = LANE_COUNT_FOUR; + cntl.hpd_sel = enc110->base.hpd_source; + +- bp_result = dal_bios_parser_transmitter_control( +- dal_adapter_service_get_bios_parser( +- enc110->base.adapter_service), &cntl); ++ bp_result = link_transmitter_control(enc110, &cntl); + + if (BP_RESULT_OK != bp_result) { + +@@ -866,10 +879,7 @@ static void link_encoder_edp_backlight_control( + * Enable it in the future if necessary. + */ + /* dc_service_sleep_in_milliseconds(50); */ +- +- dal_bios_parser_transmitter_control( +- dal_adapter_service_get_bios_parser( +- enc110->base.adapter_service), &cntl); ++ link_transmitter_control(enc110, &cntl); + } + + static bool is_dig_enabled(const struct dce110_link_encoder *enc110) +@@ -1299,10 +1309,7 @@ void dce110_link_encoder_hw_init( + cntl.coherent = false; + cntl.hpd_sel = enc110->base.hpd_source; + +- result = dal_bios_parser_transmitter_control( +- dal_adapter_service_get_bios_parser( +- enc110->base.adapter_service), +- &cntl); ++ result = link_transmitter_control(enc110, &cntl); + + if (result != BP_RESULT_OK) { + dal_logger_write(ctx->logger, +@@ -1317,10 +1324,8 @@ void dce110_link_encoder_hw_init( + if (enc110->base.connector.id == CONNECTOR_ID_LVDS) { + cntl.action = TRANSMITTER_CONTROL_BACKLIGHT_BRIGHTNESS; + +- result = dal_bios_parser_transmitter_control( +- dal_adapter_service_get_bios_parser( +- enc110->base.adapter_service), +- &cntl); ++ result = link_transmitter_control(enc110, &cntl); ++ + ASSERT(result == BP_RESULT_OK); + + } else if (enc110->base.connector.id == CONNECTOR_ID_EDP) { +@@ -1416,10 +1421,7 @@ void dce110_link_encoder_enable_tmds_output( + cntl.pixel_clock = pixel_clock; + cntl.color_depth = color_depth; + +- result = dal_bios_parser_transmitter_control( +- dal_adapter_service_get_bios_parser( +- enc110->base.adapter_service), +- &cntl); ++ result = link_transmitter_control(enc110, &cntl); + + if (result != BP_RESULT_OK) { + dal_logger_write(ctx->logger, +@@ -1475,10 +1477,7 @@ void dce110_link_encoder_enable_dp_output( + /* TODO: check if undefined works */ + cntl.color_depth = COLOR_DEPTH_UNDEFINED; + +- result = dal_bios_parser_transmitter_control( +- dal_adapter_service_get_bios_parser( +- enc110->base.adapter_service), +- &cntl); ++ result = link_transmitter_control(enc110, &cntl); + + if (result != BP_RESULT_OK) { + dal_logger_write(ctx->logger, +@@ -1521,10 +1520,7 @@ void dce110_link_encoder_enable_dp_mst_output( + /* TODO: check if undefined works */ + cntl.color_depth = COLOR_DEPTH_UNDEFINED; + +- result = dal_bios_parser_transmitter_control( +- dal_adapter_service_get_bios_parser( +- enc110->base.adapter_service), +- &cntl); ++ result = link_transmitter_control(enc110, &cntl); + + if (result != BP_RESULT_OK) { + dal_logger_write(ctx->logger, +@@ -1578,9 +1574,7 @@ void dce110_link_encoder_disable_output( + cntl.signal = signal; + cntl.connector_obj_id = enc110->base.connector; + +- result = dal_bios_parser_transmitter_control( +- dal_adapter_service_get_bios_parser( +- enc110->base.adapter_service), &cntl); ++ result = link_transmitter_control(enc110, &cntl); + + if (result != BP_RESULT_OK) { + dal_logger_write(ctx->logger, +@@ -1654,10 +1648,7 @@ void dce110_link_encoder_dp_set_lane_settings( + cntl.lane_settings = training_lane_set.raw; + + /* call VBIOS table to set voltage swing and pre-emphasis */ +- +- dal_bios_parser_transmitter_control( +- dal_adapter_service_get_bios_parser( +- enc110->base.adapter_service), &cntl); ++ link_transmitter_control(enc110, &cntl); + } + } + +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 80d3f8a..565f9cb 100644 +--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c ++++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c +@@ -104,7 +104,7 @@ static struct timing_generator *dce110_timing_generator_create( + static struct stream_encoder *dce110_stream_encoder_create( + enum engine_id eng_id, + struct dc_context *ctx, +- struct bios_parser *bp, ++ struct dc_bios *bp, + const struct dce110_stream_enc_offsets *offsets) + { + struct dce110_stream_encoder *enc110 = +diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_stream_encoder.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_stream_encoder.c +index 81996f7..87f59ee 100644 +--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_stream_encoder.c ++++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_stream_encoder.c +@@ -24,6 +24,7 @@ + */ + + #include "dal_services.h" ++#include "dc_bios_types.h" + #include "dce110_stream_encoder.h" + #include "dce/dce_11_0_d.h" + #include "dce/dce_11_0_sh_mask.h" +@@ -282,7 +283,7 @@ static void dce110_update_hdmi_info_packet( + bool dce110_stream_encoder_construct( + struct dce110_stream_encoder *enc110, + struct dc_context *ctx, +- struct bios_parser *bp, ++ struct dc_bios *bp, + enum engine_id eng_id, + const struct dce110_stream_enc_offsets *offsets) + { +@@ -411,7 +412,7 @@ void dce110_stream_encoder_hdmi_set_stream_attribute( + cntl.lanes_number = LANE_COUNT_FOUR; + cntl.color_depth = crtc_timing->display_color_depth; + +- if (dal_bios_parser_encoder_control( ++ if (enc110->base.bp->funcs->encoder_control( + enc110->base.bp, &cntl) != BP_RESULT_OK) + return; + +@@ -592,7 +593,7 @@ void dce110_stream_encoder_dvi_set_stream_attribute( + LANE_COUNT_EIGHT : LANE_COUNT_FOUR; + cntl.color_depth = crtc_timing->display_color_depth; + +- if (dal_bios_parser_encoder_control( ++ if (enc110->base.bp->funcs->encoder_control( + enc110->base.bp, &cntl) != BP_RESULT_OK) + return; + +diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_stream_encoder.h b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_stream_encoder.h +index 200308c..ddc16cd 100644 +--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_stream_encoder.h ++++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_stream_encoder.h +@@ -44,7 +44,7 @@ struct dce110_stream_encoder { + bool dce110_stream_encoder_construct( + struct dce110_stream_encoder *enc110, + struct dc_context *ctx, +- struct bios_parser *bp, ++ struct dc_bios *bp, + enum engine_id eng_id, + const struct dce110_stream_enc_offsets *offsets); + +diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_timing_generator.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_timing_generator.c +index 2c7c27f..5dc3605 100644 +--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_timing_generator.c ++++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_timing_generator.c +@@ -30,6 +30,7 @@ + #include "dce/dce_11_0_sh_mask.h" + + #include "dc_types.h" ++#include "dc_bios_types.h" + + #include "include/grph_object_id.h" + #include "include/adapter_service_interface.h" +@@ -288,7 +289,7 @@ bool dce110_timing_generator_enable_crtc(struct timing_generator *tg) + dal_write_reg(tg->ctx, + CRTC_REG(mmCRTC_MASTER_UPDATE_MODE), value); + +- result = dal_bios_parser_enable_crtc(tg->bp, tg110->controller_id, true); ++ result = tg->bp->funcs->enable_crtc(tg->bp, tg110->controller_id, true); + + return result == BP_RESULT_OK; + } +@@ -467,7 +468,7 @@ bool dce110_timing_generator_disable_crtc(struct timing_generator *tg) + + struct dce110_timing_generator *tg110 = DCE110TG_FROM_TG(tg); + +- result = dal_bios_parser_enable_crtc(tg->bp, tg110->controller_id, false); ++ result = tg->bp->funcs->enable_crtc(tg->bp, tg110->controller_id, false); + + /* Need to make sure stereo is disabled according to the DCE5.0 spec */ + +@@ -572,7 +573,7 @@ bool dce110_timing_generator_program_timing_generator( + if (patched_crtc_timing.flags.HORZ_COUNT_BY_TWO == 1) + bp_params.flags.HORZ_COUNT_BY_TWO = 1; + +- result = dal_bios_parser_program_crtc_timing(tg->bp, &bp_params); ++ result = tg->bp->funcs->program_crtc_timing(tg->bp, &bp_params); + + program_horz_count_by_2(tg, &patched_crtc_timing); + +diff --git a/drivers/gpu/drm/amd/dal/dc/gpu/calc_pll_clock_source.c b/drivers/gpu/drm/amd/dal/dc/gpu/calc_pll_clock_source.c +index 7c94733..acc8838 100644 +--- a/drivers/gpu/drm/amd/dal/dc/gpu/calc_pll_clock_source.c ++++ b/drivers/gpu/drm/amd/dal/dc/gpu/calc_pll_clock_source.c +@@ -326,7 +326,7 @@ static bool calc_pll_clock_source_max_vco_construct( + init_data->bp == NULL) + return false; + +- if (dal_bios_parser_get_firmware_info( ++ if (init_data->bp->funcs->get_firmware_info( + init_data->bp, + &fw_info) != BP_RESULT_OK) + return false; +diff --git a/drivers/gpu/drm/amd/dal/dc/gpu/calc_pll_clock_source.h b/drivers/gpu/drm/amd/dal/dc/gpu/calc_pll_clock_source.h +index be44d06..48db3d6 100644 +--- a/drivers/gpu/drm/amd/dal/dc/gpu/calc_pll_clock_source.h ++++ b/drivers/gpu/drm/amd/dal/dc/gpu/calc_pll_clock_source.h +@@ -24,10 +24,12 @@ + #ifndef __DAL_CALC_PLL_CLOCK_SOURCE_H__ + #define __DAL_CALC_PLL_CLOCK_SOURCE_H__ + ++#include "dc_bios_types.h" ++ + #include "include/clock_source_types.h" + + struct calc_pll_clock_source_init_data { +- struct bios_parser *bp; ++ struct dc_bios *bp; + uint32_t min_pix_clk_pll_post_divider; + uint32_t max_pix_clk_pll_post_divider; + uint32_t min_pll_ref_divider; +diff --git a/drivers/gpu/drm/amd/dal/dc/gpu/clock_source.c b/drivers/gpu/drm/amd/dal/dc/gpu/clock_source.c +index 11f16b7..cd4a91e 100644 +--- a/drivers/gpu/drm/amd/dal/dc/gpu/clock_source.c ++++ b/drivers/gpu/drm/amd/dal/dc/gpu/clock_source.c +@@ -265,9 +265,10 @@ void dal_clock_source_get_ss_info_from_atombios( + spread_spectrum_data[0] = NULL; + *ss_entries_num = 0; + +- *ss_entries_num = dal_bios_parser_get_ss_entry_number( ++ *ss_entries_num = clk_src->bios_parser->funcs->get_ss_entry_number( + clk_src->bios_parser, + as_signal); ++ + if (*ss_entries_num == 0) + return; + +@@ -285,11 +286,13 @@ void dal_clock_source_get_ss_info_from_atombios( + for (i = 0, ss_info_cur = ss_info; + i < (*ss_entries_num); + ++i, ++ss_info_cur) { +- bp_result = dal_bios_parser_get_spread_spectrum_info( ++ ++ bp_result = clk_src->bios_parser->funcs->get_spread_spectrum_info( + clk_src->bios_parser, + as_signal, + i, + ss_info_cur); ++ + if (bp_result != BP_RESULT_OK) + goto out_free_data; + } +diff --git a/drivers/gpu/drm/amd/dal/dc/gpu/clock_source.h b/drivers/gpu/drm/amd/dal/dc/gpu/clock_source.h +index 67ececd..a7863cd 100644 +--- a/drivers/gpu/drm/amd/dal/dc/gpu/clock_source.h ++++ b/drivers/gpu/drm/amd/dal/dc/gpu/clock_source.h +@@ -100,7 +100,7 @@ struct clock_source { + struct graphics_object_id id; + enum clock_source_id clk_src_id; + struct adapter_service *adapter_service; +- struct bios_parser *bios_parser; ++ struct dc_bios *bios_parser; + + struct spread_spectrum_data *ep_ss_params; + uint32_t ep_ss_params_cnt; +diff --git a/drivers/gpu/drm/amd/dal/dc/gpu/dce110/display_clock_dce110.c b/drivers/gpu/drm/amd/dal/dc/gpu/dce110/display_clock_dce110.c +index e582ba0..a2a615a 100644 +--- a/drivers/gpu/drm/amd/dal/dc/gpu/dce110/display_clock_dce110.c ++++ b/drivers/gpu/drm/amd/dal/dc/gpu/dce110/display_clock_dce110.c +@@ -774,7 +774,7 @@ static void set_clock( + { + struct bp_pixel_clock_parameters pxl_clk_params; + struct display_clock_dce110 *dc = DCLCK110_FROM_BASE(base); +- struct bios_parser *bp = dal_adapter_service_get_bios_parser(base->as); ++ struct dc_bios *bp = dal_adapter_service_get_bios_parser(base->as); + + /* Prepare to program display clock*/ + dc_service_memset(&pxl_clk_params, 0, sizeof(pxl_clk_params)); +@@ -782,7 +782,7 @@ static void set_clock( + pxl_clk_params.target_pixel_clock = requested_clk_khz; + pxl_clk_params.pll_id = base->id; + +- dal_bios_parser_program_display_engine_pll(bp, &pxl_clk_params); ++ bp->funcs->program_display_engine_pll(bp, &pxl_clk_params); + + if (dc->dfs_bypass_enabled) { + +diff --git a/drivers/gpu/drm/amd/dal/dc/gpu/dce110/pll_clock_source_dce110.c b/drivers/gpu/drm/amd/dal/dc/gpu/dce110/pll_clock_source_dce110.c +index d83eea3..cce9b0b 100644 +--- a/drivers/gpu/drm/amd/dal/dc/gpu/dce110/pll_clock_source_dce110.c ++++ b/drivers/gpu/drm/amd/dal/dc/gpu/dce110/pll_clock_source_dce110.c +@@ -127,7 +127,7 @@ static bool disable_spread_spectrum(struct pll_clock_source_dce110 *clk_src) + bp_ss_params.pll_id = clock_source->clk_src_id; + + /*Call ASICControl to process ATOMBIOS Exec table*/ +- result = dal_bios_parser_enable_spread_spectrum_on_ppll( ++ result = clock_source->bios_parser->funcs->enable_spread_spectrum_on_ppll( + clock_source->bios_parser, + &bp_ss_params, + false); +@@ -171,7 +171,7 @@ static bool enable_spread_spectrum( + bp_params.flags.EXTERNAL_SS = 1; + + if (BP_RESULT_OK != +- dal_bios_parser_enable_spread_spectrum_on_ppll( ++ clock_source->bios_parser->funcs->enable_spread_spectrum_on_ppll( + clock_source->bios_parser, + &bp_params, + true)) +@@ -283,7 +283,7 @@ static bool program_pix_clk( + bp_pc_params.flags.SET_EXTERNAL_REF_DIV_SRC = + pll_settings->use_external_clk; + +- if (dal_bios_parser_set_pixel_clock(clk_src->bios_parser, ++ if (clk_src->bios_parser->funcs->set_pixel_clock(clk_src->bios_parser, + &bp_pc_params) != BP_RESULT_OK) + return false; + +diff --git a/drivers/gpu/drm/amd/dal/dc/gpu/dce110/vce_clock_source_dce110.c b/drivers/gpu/drm/amd/dal/dc/gpu/dce110/vce_clock_source_dce110.c +index ce59228..0a0b516 100644 +--- a/drivers/gpu/drm/amd/dal/dc/gpu/dce110/vce_clock_source_dce110.c ++++ b/drivers/gpu/drm/amd/dal/dc/gpu/dce110/vce_clock_source_dce110.c +@@ -79,7 +79,7 @@ static bool program_pix_clk(struct clock_source *clk_src, + bp_pix_clk_params.encoder_object_id = pix_clk_params->encoder_object_id; + bp_pix_clk_params.signal_type = pix_clk_params->signal_type; + +- if (dal_bios_parser_set_pixel_clock(clk_src->bios_parser, ++ if (clk_src->bios_parser->funcs->set_pixel_clock(clk_src->bios_parser, + &bp_pix_clk_params) == BP_RESULT_OK) + return true; + +@@ -162,7 +162,7 @@ static bool construct( + /*Get Reference frequency, Input frequency range into PLL + * and Output frequency range of the PLL + * from ATOMBIOS Data table */ +- if (dal_bios_parser_get_firmware_info( ++ if (vce_clk_src->base.bios_parser->funcs->get_firmware_info( + vce_clk_src->base.bios_parser, + &fw_info) != BP_RESULT_OK) + return false; +diff --git a/drivers/gpu/drm/amd/dal/dc/gpu/ext_clock_source.c b/drivers/gpu/drm/amd/dal/dc/gpu/ext_clock_source.c +index ac27cd7..3a26312 100644 +--- a/drivers/gpu/drm/amd/dal/dc/gpu/ext_clock_source.c ++++ b/drivers/gpu/drm/amd/dal/dc/gpu/ext_clock_source.c +@@ -23,8 +23,9 @@ + */ + + #include "dal_services.h" +-#include "include/clock_source_types.h" ++ + #include "include/bios_parser_interface.h" ++#include "include/clock_source_types.h" + #include "include/logger_interface.h" + #include "ext_clock_source.h" + +@@ -71,11 +72,11 @@ bool dal_ext_clock_source_program_pix_clk( + bp_pix_clk_params.signal_type = pix_clk_params->signal_type; + bp_pix_clk_params.dvo_config = pix_clk_params->dvo_cfg; + +- +- if (dal_bios_parser_set_pixel_clock( ++ if (clk_src->bios_parser->funcs->set_pixel_clock( + clk_src->bios_parser, + &bp_pix_clk_params) == BP_RESULT_OK) + return true; ++ + return false; + + } +@@ -108,11 +109,13 @@ bool dal_ext_clock_source_construct( + SIGNAL_TYPE_DISPLAY_PORT_MST | + SIGNAL_TYPE_EDP; + ++ + /*Get External clock frequency from ATOMBIOS Data table */ +- if (dal_bios_parser_get_firmware_info( ++ if (ext_clk_src->base.bios_parser->funcs->get_firmware_info( + ext_clk_src->base.bios_parser, + &fw_info) != BP_RESULT_OK) + return false; ++ + ext_clk_src->ext_clk_freq_khz = fw_info. + external_clock_source_frequency_for_dp; + return true; +diff --git a/drivers/gpu/drm/amd/dal/dc/gpu/pll_clock_source.c b/drivers/gpu/drm/amd/dal/dc/gpu/pll_clock_source.c +index 8bb0304..3049842 100644 +--- a/drivers/gpu/drm/amd/dal/dc/gpu/pll_clock_source.c ++++ b/drivers/gpu/drm/amd/dal/dc/gpu/pll_clock_source.c +@@ -40,7 +40,7 @@ bool dal_pll_clock_source_power_down_pll( + bp_pixel_clock_params.flags.FORCE_PROGRAMMING_OF_PLL = 1; + + /*Call ASICControl to process ATOMBIOS Exec table*/ +- bp_result = dal_bios_parser_set_pixel_clock( ++ bp_result = clk_src->bios_parser->funcs->set_pixel_clock( + clk_src->bios_parser, + &bp_pixel_clock_params); + +@@ -102,7 +102,7 @@ bool dal_pll_clock_source_adjust_pix_clk( + display_pll_config = pix_clk_params->disp_pll_cfg; + bp_adjust_pixel_clock_params. + ss_enable = pix_clk_params->flags.ENABLE_SS; +- bp_result = dal_bios_parser_adjust_pixel_clock( ++ bp_result = pll_clk_src->base.bios_parser->funcs->adjust_pixel_clock( + pll_clk_src->base.bios_parser, + &bp_adjust_pixel_clock_params); + if (bp_result == BP_RESULT_OK) { +@@ -131,10 +131,11 @@ bool dal_pll_clock_source_construct( + clk_src_init_data)) + return false; + +- if (dal_bios_parser_get_firmware_info( ++ if (pll_clk_src->base.bios_parser->funcs->get_firmware_info( + pll_clk_src->base.bios_parser, + &fw_info) != BP_RESULT_OK) + return false; ++ + pll_clk_src->ref_freq_khz = fw_info.pll_info.crystal_frequency; + + return true; +diff --git a/drivers/gpu/drm/amd/dal/dc/inc/hw_sequencer.h b/drivers/gpu/drm/amd/dal/dc/inc/hw_sequencer.h +index 317110e..a5ccb5e 100644 +--- a/drivers/gpu/drm/amd/dal/dc/inc/hw_sequencer.h ++++ b/drivers/gpu/drm/amd/dal/dc/inc/hw_sequencer.h +@@ -141,7 +141,7 @@ struct hw_sequencer_funcs { + bool (*enable_display_power_gating)( + struct dc_context *ctx, + uint8_t controller_id, +- struct bios_parser *bp, ++ struct dc_bios *dcb, + enum pipe_gating_control power_gating); + + /* resource management and validation*/ +diff --git a/drivers/gpu/drm/amd/dal/dc/inc/stream_encoder.h b/drivers/gpu/drm/amd/dal/dc/inc/stream_encoder.h +index 25028b7..9665356 100644 +--- a/drivers/gpu/drm/amd/dal/dc/inc/stream_encoder.h ++++ b/drivers/gpu/drm/amd/dal/dc/inc/stream_encoder.h +@@ -9,10 +9,12 @@ + #include "include/encoder_types.h" + #include "include/bios_parser_interface.h" + ++struct dc_bios; ++ + struct stream_encoder { + struct stream_encoder_funcs *funcs; + struct dc_context *ctx; +- struct bios_parser *bp; ++ struct dc_bios *bp; + enum engine_id id; + }; + +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 e449db6..2851266 100644 +--- a/drivers/gpu/drm/amd/dal/include/adapter_service_interface.h ++++ b/drivers/gpu/drm/amd/dal/include/adapter_service_interface.h +@@ -36,7 +36,6 @@ + #include "asic_capability_types.h" + + /* forward declaration */ +-struct bios_parser; + struct i2caux; + struct adapter_service; + +@@ -481,7 +480,7 @@ bool dal_adapter_service_get_i2c_info( + struct graphics_object_i2c_info *i2c_info); + + /* Get bios parser handler */ +-struct bios_parser *dal_adapter_service_get_bios_parser( ++struct dc_bios *dal_adapter_service_get_bios_parser( + struct adapter_service *as); + + /* Get i2c aux handler */ +diff --git a/drivers/gpu/drm/amd/dal/include/adapter_service_types.h b/drivers/gpu/drm/amd/dal/include/adapter_service_types.h +index fb47ef3..4cb4b4b 100644 +--- a/drivers/gpu/drm/amd/dal/include/adapter_service_types.h ++++ b/drivers/gpu/drm/amd/dal/include/adapter_service_types.h +@@ -26,6 +26,7 @@ + #ifndef __DAL_ADAPTER_SERVICE_TYPES_H__ + #define __DAL_ADAPTER_SERVICE_TYPES_H__ + ++/* TODO: include signal_types.h and remove this enum */ + enum as_signal_type { + AS_SIGNAL_TYPE_NONE = 0L, /* no signal */ + AS_SIGNAL_TYPE_DVI, +diff --git a/drivers/gpu/drm/amd/dal/include/bios_parser_interface.h b/drivers/gpu/drm/amd/dal/include/bios_parser_interface.h +index 77999fc..e4291b9 100644 +--- a/drivers/gpu/drm/amd/dal/include/bios_parser_interface.h ++++ b/drivers/gpu/drm/amd/dal/include/bios_parser_interface.h +@@ -26,143 +26,25 @@ + #ifndef __DAL_BIOS_PARSER_INTERFACE_H__ + #define __DAL_BIOS_PARSER_INTERFACE_H__ + +-#include "bios_parser_types.h" +-#include "adapter_service_types.h" +-#include "gpio_types.h" ++#include "dc_bios_types.h" + + struct adapter_service; + struct bios_parser; + +-struct bp_gpio_cntl_info { +- uint32_t id; +- enum gpio_pin_output_state state; +-}; +- +-enum bp_result { +- BP_RESULT_OK = 0, /* There was no error */ +- BP_RESULT_BADINPUT, /*Bad input parameter */ +- BP_RESULT_BADBIOSTABLE, /* Bad BIOS table */ +- BP_RESULT_UNSUPPORTED, /* BIOS Table is not supported */ +- BP_RESULT_NORECORD, /* Record can't be found */ +- BP_RESULT_FAILURE +-}; +- + struct bp_init_data { + struct dc_context *ctx; + uint8_t *bios; + }; + +-struct bios_parser *dal_bios_parser_create( ++struct dc_bios *dal_bios_parser_create( + struct bp_init_data *init, + struct adapter_service *as); +-void dal_bios_parser_destroy( +- struct bios_parser **bp); +- +- +-void dal_bios_parser_power_down( +- struct bios_parser *bp); +-void dal_bios_parser_power_up( +- struct bios_parser *bp); + +-uint8_t dal_bios_parser_get_encoders_number( +- struct bios_parser *bp); +-uint32_t dal_bios_parser_get_oem_ddc_lines_number( +- struct bios_parser *bp); +-struct graphics_object_id dal_bios_parser_get_encoder_id( +- struct bios_parser *bp, +- uint32_t i); +-struct graphics_object_id dal_bios_parser_get_connector_id( +- struct bios_parser *bp, +- uint8_t connector_index); +-uint32_t dal_bios_parser_get_src_number( +- struct bios_parser *bp, +- struct graphics_object_id id); +-uint32_t dal_bios_parser_get_dst_number( +- struct bios_parser *bp, +- struct graphics_object_id id); +-uint32_t dal_bios_parser_get_gpio_record( +- struct bios_parser *bp, +- struct graphics_object_id id, +- struct bp_gpio_cntl_info *gpio_record, +- uint32_t record_size); +-enum bp_result dal_bios_parser_get_src_obj( +- struct bios_parser *bp, +- struct graphics_object_id object_id, uint32_t index, +- struct graphics_object_id *src_object_id); +-enum bp_result dal_bios_parser_get_dst_obj( +- struct bios_parser *bp, +- struct graphics_object_id object_id, uint32_t index, +- struct graphics_object_id *dest_object_id); +-enum bp_result dal_bios_parser_get_i2c_info( +- struct bios_parser *bp, +- struct graphics_object_id id, +- struct graphics_object_i2c_info *info); +-enum bp_result dal_bios_parser_get_oem_ddc_info( +- struct bios_parser *bp, +- uint32_t index, +- struct graphics_object_i2c_info *info); +-enum bp_result dal_bios_parser_get_voltage_ddc_info( +- struct bios_parser *bp, +- uint32_t index, +- struct graphics_object_i2c_info *info); +-enum bp_result dal_bios_parser_get_thermal_ddc_info( +- struct bios_parser *bp, +- uint32_t i2c_channel_id, +- struct graphics_object_i2c_info *info); +-enum bp_result dal_bios_parser_get_hpd_info( +- struct bios_parser *bp, +- struct graphics_object_id id, +- struct graphics_object_hpd_info *info); +-enum bp_result dal_bios_parser_get_device_tag( +- struct bios_parser *bp, +- struct graphics_object_id connector_object_id, +- uint32_t device_tag_index, +- struct connector_device_tag_info *info); +-enum bp_result dal_bios_parser_get_firmware_info( +- struct bios_parser *bp, +- struct firmware_info *info); +-enum bp_result dal_bios_parser_get_spread_spectrum_info( +- struct bios_parser *bp, +- enum as_signal_type signal, +- uint32_t index, +- struct spread_spectrum_info *ss_info); +-uint32_t dal_bios_parser_get_ss_entry_number( +- struct bios_parser *bp, +- enum as_signal_type signal); +-enum bp_result dal_bios_parser_get_embedded_panel_info( +- struct bios_parser *bp, +- struct embedded_panel_info *info); +-enum bp_result dal_bios_parser_enum_embedded_panel_patch_mode( +- struct bios_parser *bp, +- uint32_t index, +- struct embedded_panel_patch_mode *mode); +-enum bp_result dal_bios_parser_get_gpio_pin_info( +- struct bios_parser *bp, +- uint32_t gpio_id, +- struct gpio_pin_info *info); +-enum bp_result dal_bios_parser_get_embedded_panel_info( +- struct bios_parser *bp, +- struct embedded_panel_info *info); +-enum bp_result dal_bios_parser_get_gpio_pin_info( +- struct bios_parser *bp, +- uint32_t gpio_id, +- struct gpio_pin_info *info); +-enum bp_result dal_bios_parser_get_faked_edid_len( +- struct bios_parser *bp, +- uint32_t *len); +-enum bp_result dal_bios_parser_get_faked_edid_buf( +- struct bios_parser *bp, +- uint8_t *buff, +- uint32_t len); +-enum bp_result dal_bios_parser_get_encoder_cap_info( +- struct bios_parser *bp, +- struct graphics_object_id object_id, +- struct bp_encoder_cap_info *info); +-enum bp_result dal_bios_parser_get_din_connector_info( +- struct bios_parser *bp, +- struct graphics_object_id id, +- struct din_connector_info *info); ++void dal_bios_parser_destroy( ++ struct dc_bios **dcb); + ++/*****************************************************************************/ ++/* Interfaces of BIOS Parser Helper */ + bool dal_bios_parser_is_lid_open( + struct bios_parser *bp); + bool dal_bios_parser_is_lid_status_changed( +@@ -213,88 +95,4 @@ void dal_bios_parser_set_scratch_critical_state( + void dal_bios_parser_set_scratch_acc_mode_change( + struct bios_parser *bp); + +-bool dal_bios_parser_is_device_id_supported( +- struct bios_parser *bp, +- struct device_id id); +- +-/* COMMANDS */ +- +-enum bp_result dal_bios_parser_encoder_control( +- struct bios_parser *bp, +- struct bp_encoder_control *cntl); +-enum bp_result dal_bios_parser_transmitter_control( +- struct bios_parser *bp, +- struct bp_transmitter_control *cntl); +-enum bp_result dal_bios_parser_crt_control( +- struct bios_parser *bp, +- enum engine_id engine_id, +- bool enable, +- uint32_t pixel_clock); +-enum bp_result dal_bios_parser_dvo_encoder_control( +- struct bios_parser *bp, +- struct bp_dvo_encoder_control *cntl); +-enum bp_result dal_bios_parser_enable_crtc( +- struct bios_parser *bp, +- enum controller_id id, +- bool enable); +-enum bp_result dal_bios_parser_adjust_pixel_clock( +- struct bios_parser *bp, +- struct bp_adjust_pixel_clock_parameters *bp_params); +-enum bp_result dal_bios_parser_set_pixel_clock( +- struct bios_parser *bp, +- struct bp_pixel_clock_parameters *bp_params); +-enum bp_result dal_bios_parser_set_dce_clock( +- struct bios_parser *bp, +- struct bp_set_dce_clock_parameters *bp_params); +-enum bp_result dal_bios_parser_enable_spread_spectrum_on_ppll( +- struct bios_parser *bp, +- struct bp_spread_spectrum_parameters *bp_params, +- bool enable); +-enum bp_result dal_bios_parser_program_crtc_timing( +- struct bios_parser *bp, +- struct bp_hw_crtc_timing_parameters *bp_params); +-enum bp_result dal_bios_parser_blank_crtc( +- struct bios_parser *bp, +- struct bp_blank_crtc_parameters *bp_params, +- bool blank); +-enum bp_result dal_bios_parser_set_overscan( +- struct bios_parser *bp, +- struct bp_hw_crtc_overscan_parameters *bp_params); +-enum bp_result dal_bios_parser_crtc_source_select( +- struct bios_parser *bp, +- struct bp_crtc_source_select *bp_params); +-enum bp_result dal_bios_parser_program_display_engine_pll( +- struct bios_parser *bp, +- struct bp_pixel_clock_parameters *bp_params); +-enum bp_result dal_bios_parser_get_divider_for_target_display_clock( +- struct bios_parser *bp, +- struct bp_display_clock_parameters *bp_params); +-enum signal_type dal_bios_parser_dac_load_detect( +- struct bios_parser *bp, +- struct graphics_object_id encoder, +- struct graphics_object_id connector, +- enum signal_type display_signal); +-enum bp_result dal_bios_parser_enable_memory_requests( +- struct bios_parser *bp, +- enum controller_id controller_id, +- bool enable); +-enum bp_result dal_bios_parser_external_encoder_control( +- struct bios_parser *bp, +- struct bp_external_encoder_control *cntl); +-enum bp_result dal_bios_parser_enable_disp_power_gating( +- struct bios_parser *bp, +- enum controller_id controller_id, +- enum bp_pipe_control_action action); +- +-void dal_bios_parser_post_init(struct bios_parser *bp); +- +-/* Parse integrated BIOS info */ +-struct integrated_info *dal_bios_parser_create_integrated_info( +- struct bios_parser *bp); +- +-/* Destroy provided integrated info */ +-void dal_bios_parser_destroy_integrated_info(struct dc_context *ctx, struct integrated_info **info); +- +- +- +-#endif ++#endif /* __DAL_BIOS_PARSER_INTERFACE_H__ */ +diff --git a/drivers/gpu/drm/amd/dal/include/bios_parser_types.h b/drivers/gpu/drm/amd/dal/include/bios_parser_types.h +index 4176f28..7b93997 100644 +--- a/drivers/gpu/drm/amd/dal/include/bios_parser_types.h ++++ b/drivers/gpu/drm/amd/dal/include/bios_parser_types.h +@@ -28,7 +28,17 @@ + + #include "include/signal_types.h" + #include "include/grph_object_ctrl_defs.h" +-#include "link_service_types.h" ++#include "include/gpio_types.h" ++#include "include/adapter_service_types.h" /* for as_signal_type */ ++ ++enum bp_result { ++ BP_RESULT_OK = 0, /* There was no error */ ++ BP_RESULT_BADINPUT, /*Bad input parameter */ ++ BP_RESULT_BADBIOSTABLE, /* Bad BIOS table */ ++ BP_RESULT_UNSUPPORTED, /* BIOS Table is not supported */ ++ BP_RESULT_NORECORD, /* Record can't be found */ ++ BP_RESULT_FAILURE ++}; + + enum bp_encoder_control_action { + /* direct VBIOS translation! Just to simplify the translation */ +@@ -337,4 +347,9 @@ struct bp_encoder_cap_info { + uint32_t RESERVED:30; + }; + +-#endif ++struct bp_gpio_cntl_info { ++ uint32_t id; ++ enum gpio_pin_output_state state; ++}; ++ ++#endif /*__DAL_BIOS_PARSER_TYPES_H__ */ +diff --git a/drivers/gpu/drm/amd/dal/include/timing_generator_types.h b/drivers/gpu/drm/amd/dal/include/timing_generator_types.h +index 3f5f1ec..75dfbab 100644 +--- a/drivers/gpu/drm/amd/dal/include/timing_generator_types.h ++++ b/drivers/gpu/drm/amd/dal/include/timing_generator_types.h +@@ -28,6 +28,7 @@ + + #include "include/grph_csc_types.h" + ++struct dc_bios; + + /** + * These parameters are required as input when doing blanking/Unblanking +@@ -142,7 +143,7 @@ enum crtc_state { + + struct timing_generator { + struct timing_generator_funcs *funcs; +- struct bios_parser *bp; ++ struct dc_bios *bp; + struct dc_context *ctx; + }; + +-- +2.7.4 + |