diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0660-drm-amd-dal-Remove-connector.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0660-drm-amd-dal-Remove-connector.patch | 1170 |
1 files changed, 1170 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0660-drm-amd-dal-Remove-connector.patch b/common/recipes-kernel/linux/files/0660-drm-amd-dal-Remove-connector.patch new file mode 100644 index 00000000..4255fbfe --- /dev/null +++ b/common/recipes-kernel/linux/files/0660-drm-amd-dal-Remove-connector.patch @@ -0,0 +1,1170 @@ +From 4a73a01e394537a888a0842062d3c5f0eef5ddd6 Mon Sep 17 00:00:00 2001 +From: Harry Wentland <harry.wentland@amd.com> +Date: Thu, 17 Dec 2015 22:14:58 -0500 +Subject: [PATCH 0660/1110] drm/amd/dal: Remove connector + +We're programming hpd filter but no hpd polling. + +Signed-off-by: Harry Wentland <harry.wentland@amd.com> +Acked-by: Harry Wentland <Harry.Wentland@amd.com> +--- + drivers/gpu/drm/amd/dal/dc/Makefile | 2 +- + drivers/gpu/drm/amd/dal/dc/connector/Makefile | 10 - + drivers/gpu/drm/amd/dal/dc/connector/connector.h | 39 -- + .../gpu/drm/amd/dal/dc/connector/connector_base.c | 421 --------------------- + .../drm/amd/dal/dc/connector/connector_signals.c | 238 ------------ + drivers/gpu/drm/amd/dal/dc/core/dc_link.c | 188 +++++++-- + drivers/gpu/drm/amd/dal/dc/core/dc_link_dp.c | 1 - + drivers/gpu/drm/amd/dal/dc/core/dc_link_hwss.c | 1 - + drivers/gpu/drm/amd/dal/dc/inc/core_types.h | 1 - + .../gpu/drm/amd/dal/include/connector_interface.h | 82 ---- + 10 files changed, 161 insertions(+), 822 deletions(-) + delete mode 100644 drivers/gpu/drm/amd/dal/dc/connector/Makefile + delete mode 100644 drivers/gpu/drm/amd/dal/dc/connector/connector.h + delete mode 100644 drivers/gpu/drm/amd/dal/dc/connector/connector_base.c + delete mode 100644 drivers/gpu/drm/amd/dal/dc/connector/connector_signals.c + delete mode 100644 drivers/gpu/drm/amd/dal/include/connector_interface.h + +diff --git a/drivers/gpu/drm/amd/dal/dc/Makefile b/drivers/gpu/drm/amd/dal/dc/Makefile +index 285e30d..0ab2c18 100644 +--- a/drivers/gpu/drm/amd/dal/dc/Makefile ++++ b/drivers/gpu/drm/amd/dal/dc/Makefile +@@ -2,7 +2,7 @@ + # Makefile for Display Core (dc) component. + # + +-DC_LIBS = adapter asic_capability audio basics bios calcs connector \ ++DC_LIBS = adapter asic_capability audio basics bios calcs \ + dcs gpio gpu i2caux irq dce_base + + ifdef CONFIG_DRM_AMD_DAL_DCE11_0 +diff --git a/drivers/gpu/drm/amd/dal/dc/connector/Makefile b/drivers/gpu/drm/amd/dal/dc/connector/Makefile +deleted file mode 100644 +index ebd4115..0000000 +--- a/drivers/gpu/drm/amd/dal/dc/connector/Makefile ++++ /dev/null +@@ -1,10 +0,0 @@ +-# +-# Makefile for the 'connector' sub-component of DAL. +-# It provides the control and status of HW connectors blocks. +- +- +-CONNECTOR = connector_base.o connector_signals.o +- +-AMD_DAL_CONNECTOR = $(addprefix $(AMDDALPATH)/dc/connector/,$(CONNECTOR)) +- +-AMD_DAL_FILES += $(AMD_DAL_CONNECTOR) +diff --git a/drivers/gpu/drm/amd/dal/dc/connector/connector.h b/drivers/gpu/drm/amd/dal/dc/connector/connector.h +deleted file mode 100644 +index 7d6057b..0000000 +--- a/drivers/gpu/drm/amd/dal/dc/connector/connector.h ++++ /dev/null +@@ -1,39 +0,0 @@ +-/* +- * Copyright 2012-15 Advanced Micro Devices, Inc. +- * +- * Permission is hereby granted, free of charge, to any person obtaining a +- * copy of this software and associated documentation files (the "Software"), +- * to deal in the Software without restriction, including without limitation +- * the rights to use, copy, modify, merge, publish, distribute, sublicense, +- * and/or sell copies of the Software, and to permit persons to whom the +- * Software is furnished to do so, subject to the following conditions: +- * +- * The above copyright notice and this permission notice shall be included in +- * all copies or substantial portions of the Software. +- * +- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +- * OTHER DEALINGS IN THE SOFTWARE. +- * +- * Authors: AMD +- * +- */ +- +-#ifndef __DAL_CONNECTOR_H__ +-#define __DAL_CONNECTOR_H__ +- +-#include "include/connector_interface.h" +- +-extern const uint32_t number_of_default_signals; +-extern const uint32_t number_of_signals; +- +-/* Indexed by enum connector_id */ +-extern const struct connector_signals default_signals[]; +-/* Indexed by enum connector_id */ +-extern const struct connector_signals supported_signals[]; +- +-#endif +diff --git a/drivers/gpu/drm/amd/dal/dc/connector/connector_base.c b/drivers/gpu/drm/amd/dal/dc/connector/connector_base.c +deleted file mode 100644 +index 34005fd..0000000 +--- a/drivers/gpu/drm/amd/dal/dc/connector/connector_base.c ++++ /dev/null +@@ -1,421 +0,0 @@ +-/* +- * Copyright 2012-15 Advanced Micro Devices, Inc. +- * +- * Permission is hereby granted, free of charge, to any person obtaining a +- * copy of this software and associated documentation files (the "Software"), +- * to deal in the Software without restriction, including without limitation +- * the rights to use, copy, modify, merge, publish, distribute, sublicense, +- * and/or sell copies of the Software, and to permit persons to whom the +- * Software is furnished to do so, subject to the following conditions: +- * +- * The above copyright notice and this permission notice shall be included in +- * all copies or substantial portions of the Software. +- * +- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +- * OTHER DEALINGS IN THE SOFTWARE. +- * +- * Authors: AMD +- * +- */ +- +-#include "dal_services.h" +- +-#include "connector.h" +-#include "include/irq_interface.h" +-#include "include/ddc_interface.h" +-#include "include/connector_interface.h" +- +-struct connector { +- struct graphics_object_id id; +- uint32_t input_signals; +- uint32_t output_signals; +- struct adapter_service *as; +- struct connector_feature_support features; +- struct connector_signals default_signals; +- struct dc_context *ctx; +-}; +- +-static bool connector_construct( +- struct connector *connector, +- struct dc_context *ctx, +- struct adapter_service *as, +- struct graphics_object_id go_id) +-{ +- bool hw_ddc_polling = false; +- struct ddc *ddc; +- struct irq *hpd; +- enum connector_id connector_id; +- uint32_t signals_vector = 0; +- uint32_t signals_num = 0; +- uint32_t i; +- +- if (!as) { +- BREAK_TO_DEBUGGER(); +- return false; +- } +- +- connector->as = as; +- connector->id = go_id; +- connector->features.ddc_line = CHANNEL_ID_UNKNOWN; +- connector->features.hpd_line = HPD_SOURCEID_UNKNOWN; +- connector->ctx = ctx; +- +- ddc = dal_adapter_service_obtain_ddc(as, connector->id); +- hpd = dal_adapter_service_obtain_hpd_irq(as, connector->id); +- +- connector_id = dal_graphics_object_id_get_connector_id(go_id); +- +- /* Initialize DDC line */ +- if (ddc) { +- switch (dal_ddc_get_line(ddc)) { +- case GPIO_DDC_LINE_DDC1: +- connector->features.ddc_line = CHANNEL_ID_DDC1; +- break; +- case GPIO_DDC_LINE_DDC2: +- connector->features.ddc_line = CHANNEL_ID_DDC2; +- break; +- case GPIO_DDC_LINE_DDC3: +- connector->features.ddc_line = CHANNEL_ID_DDC3; +- break; +- case GPIO_DDC_LINE_DDC4: +- connector->features.ddc_line = CHANNEL_ID_DDC4; +- break; +- case GPIO_DDC_LINE_DDC5: +- connector->features.ddc_line = CHANNEL_ID_DDC5; +- break; +- case GPIO_DDC_LINE_DDC6: +- connector->features.ddc_line = CHANNEL_ID_DDC6; +- break; +- case GPIO_DDC_LINE_DDC_VGA: +- connector->features.ddc_line = CHANNEL_ID_DDC_VGA; +- break; +- case GPIO_DDC_LINE_I2C_PAD: +- connector->features.ddc_line = CHANNEL_ID_I2C_PAD; +- break; +- default: +- BREAK_TO_DEBUGGER(); +- break; +- } +- +- /* Initialize HW DDC polling support +- * On DCE6.0 only DDC lines support HW polling (I2cPad does not) +- */ +- +- if (dal_adapter_service_is_feature_supported( +- FEATURE_ENABLE_HW_EDID_POLLING)) { +- switch (dal_ddc_get_line(ddc)) { +- case GPIO_DDC_LINE_DDC1: +- case GPIO_DDC_LINE_DDC2: +- case GPIO_DDC_LINE_DDC3: +- case GPIO_DDC_LINE_DDC4: +- case GPIO_DDC_LINE_DDC5: +- case GPIO_DDC_LINE_DDC6: +- case GPIO_DDC_LINE_DDC_VGA: +- hw_ddc_polling = true; +- break; +- default: +- break; +- } +- } +- +- dal_adapter_service_release_ddc(as, ddc); +- } +- +- /* Initialize HPD line */ +- if (hpd) { +- switch (dal_irq_get_source(hpd)) { +- case DC_IRQ_SOURCE_HPD1: +- connector->features.hpd_line = HPD_SOURCEID1; +- break; +- case DC_IRQ_SOURCE_HPD2: +- connector->features.hpd_line = HPD_SOURCEID2; +- break; +- case DC_IRQ_SOURCE_HPD3: +- connector->features.hpd_line = HPD_SOURCEID3; +- break; +- case DC_IRQ_SOURCE_HPD4: +- connector->features.hpd_line = HPD_SOURCEID4; +- break; +- case DC_IRQ_SOURCE_HPD5: +- connector->features.hpd_line = HPD_SOURCEID5; +- break; +- case DC_IRQ_SOURCE_HPD6: +- connector->features.hpd_line = HPD_SOURCEID6; +- break; +- default: +- BREAK_TO_DEBUGGER(); +- break; +- } +- +- dal_adapter_service_release_irq(as, hpd); +- } +- +- if ((uint32_t)connector_id >= number_of_default_signals && +- (uint32_t)connector_id >= number_of_signals) +- return false; +- +- /* Initialize default signals */ +- connector->default_signals = default_signals[connector_id]; +- +- /* Fill supported signals */ +- signals_num = supported_signals[connector_id].number_of_signals; +- for (i = 0; i < signals_num; i++) +- signals_vector |= supported_signals[connector_id].signal[i]; +- +- /* Connector supports same set for input and output signals */ +- connector->input_signals = signals_vector; +- connector->output_signals = signals_vector; +- +- switch (connector_id) { +- case CONNECTOR_ID_VGA: +- if (hw_ddc_polling +- && connector->features.ddc_line != CHANNEL_ID_UNKNOWN) +- connector->features.HW_DDC_POLLING = true; +- break; +- case CONNECTOR_ID_SINGLE_LINK_DVII: +- case CONNECTOR_ID_DUAL_LINK_DVII: +- if (connector->features.hpd_line != HPD_SOURCEID_UNKNOWN) +- connector->features.HPD_FILTERING = true; +- if (hw_ddc_polling +- && connector->features.ddc_line != CHANNEL_ID_UNKNOWN) +- connector->features.HW_DDC_POLLING = true; +- break; +- case CONNECTOR_ID_SINGLE_LINK_DVID: +- case CONNECTOR_ID_DUAL_LINK_DVID: +- case CONNECTOR_ID_HDMI_TYPE_A: +- case CONNECTOR_ID_LVDS: +- case CONNECTOR_ID_DISPLAY_PORT: +- case CONNECTOR_ID_EDP: +- if (connector->features.hpd_line != HPD_SOURCEID_UNKNOWN) +- connector->features.HPD_FILTERING = true; +- break; +- default: +- connector->features.HPD_FILTERING = false; +- connector->features.HW_DDC_POLLING = false; +- break; +- } +- +- return true; +-} +- +-struct connector *dal_connector_create( +- struct dc_context *ctx, +- struct adapter_service *as, +- struct graphics_object_id go_id) +-{ +- struct connector *connector = NULL; +- +- connector = dc_service_alloc(ctx, sizeof(struct connector)); +- +- if (!connector) { +- BREAK_TO_DEBUGGER(); +- return NULL; +- } +- +- if (connector_construct(connector, ctx, as, go_id)) +- return connector; +- +- BREAK_TO_DEBUGGER(); +- +- dc_service_free(ctx, connector); +- +- return NULL; +-} +- +-void dal_connector_destroy(struct connector **connector) +-{ +- if (!connector || !*connector) { +- BREAK_TO_DEBUGGER(); +- return; +- } +- +- dc_service_free((*connector)->ctx, *connector); +- +- *connector = NULL; +-} +- +-uint32_t dal_connector_enumerate_output_signals( +- const struct connector *connector) +-{ +- return connector->output_signals; +-} +- +-uint32_t dal_connector_enumerate_input_signals( +- const struct connector *connector) +-{ +- return connector->input_signals; +-} +- +-struct connector_signals dal_connector_get_default_signals( +- const struct connector *connector) +-{ +- return connector->default_signals; +-} +- +-const struct graphics_object_id dal_connector_get_graphics_object_id( +- const struct connector *connector) +-{ +- return connector->id; +-} +- +-/* +- * Function: program_hpd_filter +- * +- * @brief +- * Programs HPD filter on associated HPD line +- * +- * @param [in] delay_on_connect_in_ms: Connect filter timeout +- * @param [in] delay_on_disconnect_in_ms: Disconnect filter timeout +- * +- * @return +- * true on success, false otherwise +- */ +-bool dal_connector_program_hpd_filter( +- const struct connector *connector, +- const uint32_t delay_on_connect_in_ms, +- const uint32_t delay_on_disconnect_in_ms) +-{ +- bool result = false; +- +- struct irq *hpd; +- +- /* Verify feature is supported */ +- +- if (!connector->features.HPD_FILTERING) +- return result; +- +- /* Obtain HPD handle */ +- +- hpd = dal_adapter_service_obtain_hpd_irq( +- connector->as, connector->id); +- +- if (!hpd) +- return result; +- +- /* Setup HPD filtering */ +- +- if (GPIO_RESULT_OK == dal_irq_open(hpd)) { +- struct gpio_hpd_config config; +- +- config.delay_on_connect = delay_on_connect_in_ms; +- config.delay_on_disconnect = delay_on_disconnect_in_ms; +- +- dal_irq_setup_hpd_filter(hpd, &config); +- +- dal_irq_close(hpd); +- +- result = true; +- } else { +- ASSERT_CRITICAL(false); +- } +- +- /* Release HPD handle */ +- +- dal_adapter_service_release_irq(connector->as, hpd); +- +- return result; +-} +- +-/* +- * Function: setup_ddc_polling +- * +- * @brief +- * Enables/Disables HW polling on associated DDC line +- * +- * @param [in] ddc_config: Specifies polling mode +- * +- * @return +- * true on success, false otherwise +- */ +-static bool setup_ddc_polling( +- const struct connector *connector, +- enum gpio_ddc_config_type ddc_config) +-{ +- bool result = false; +- +- struct ddc *ddc; +- +- /* Verify feature is supported */ +- +- if (!connector->features.HW_DDC_POLLING) +- return result; +- +- /* Obtain DDC handle */ +- +- ddc = dal_adapter_service_obtain_ddc( +- connector->as, connector->id); +- +- if (!ddc) { +- BREAK_TO_DEBUGGER(); +- return result; +- } +- +- /* Setup DDC polling */ +- +- if (GPIO_RESULT_OK == dal_ddc_open(ddc, GPIO_MODE_HARDWARE, +- GPIO_DDC_CONFIG_TYPE_MODE_I2C)) { +- dal_ddc_set_config(ddc, ddc_config); +- +- dal_ddc_close(ddc); +- +- result = true; +- } else { +- BREAK_TO_DEBUGGER(); +- } +- +- /* Release DDC handle */ +- +- dal_adapter_service_release_ddc(connector->as, ddc); +- +- return result; +-} +- +-/* +- * Function: enable_ddc_polling +- * +- * @brief +- * Enables HW polling on associated DDC line +- * +- * @param [in] is_poll_for_connect: Specifies polling mode +- * +- * @return +- * true on success, false otherwise +- */ +-bool dal_connector_enable_ddc_polling( +- const struct connector *connector, +- const bool is_poll_for_connect) +-{ +- enum gpio_ddc_config_type ddc_config = is_poll_for_connect ? +- GPIO_DDC_CONFIG_TYPE_POLL_FOR_CONNECT : +- GPIO_DDC_CONFIG_TYPE_POLL_FOR_DISCONNECT; +- +- return setup_ddc_polling(connector, ddc_config); +-} +- +-/* +- * Function: disable_ddc_polling +- * +- * @brief +- * Disables HW polling on associated DDC line +- * +- * @return +- * true on success, false otherwise +- */ +-bool dal_connector_disable_ddc_polling(const struct connector *connector) +-{ +- return setup_ddc_polling(connector, +- GPIO_DDC_CONFIG_TYPE_DISABLE_POLLING); +-} +- +-void dal_connector_get_features( +- const struct connector *con, +- struct connector_feature_support *cfs) +-{ +- dc_service_memmove(cfs, &con->features, +- sizeof(struct connector_feature_support)); +-} +diff --git a/drivers/gpu/drm/amd/dal/dc/connector/connector_signals.c b/drivers/gpu/drm/amd/dal/dc/connector/connector_signals.c +deleted file mode 100644 +index 3a5d75b..0000000 +--- a/drivers/gpu/drm/amd/dal/dc/connector/connector_signals.c ++++ /dev/null +@@ -1,238 +0,0 @@ +-/* +- * Copyright 2012-15 Advanced Micro Devices, Inc. +- * +- * Permission is hereby granted, free of charge, to any person obtaining a +- * copy of this software and associated documentation files (the "Software"), +- * to deal in the Software without restriction, including without limitation +- * the rights to use, copy, modify, merge, publish, distribute, sublicense, +- * and/or sell copies of the Software, and to permit persons to whom the +- * Software is furnished to do so, subject to the following conditions: +- * +- * The above copyright notice and this permission notice shall be included in +- * all copies or substantial portions of the Software. +- * +- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +- * OTHER DEALINGS IN THE SOFTWARE. +- * +- * Authors: AMD +- * +- */ +- +-#include "dal_services.h" +- +-#include "connector.h" +- +-static const enum signal_type signals_none[] = { +- SIGNAL_TYPE_NONE +-}; +- +-static const enum signal_type signals_single_link_dvii[] = { +- SIGNAL_TYPE_DVI_SINGLE_LINK, +- SIGNAL_TYPE_RGB +-}; +- +-static const enum signal_type signals_dual_link_dvii[] = { +- SIGNAL_TYPE_DVI_DUAL_LINK, +- SIGNAL_TYPE_DVI_SINGLE_LINK, +- SIGNAL_TYPE_RGB +-}; +- +-static const enum signal_type signals_single_link_dvid[] = { +- SIGNAL_TYPE_DVI_SINGLE_LINK +-}; +- +-static const enum signal_type signals_dual_link_dvid[] = { +- SIGNAL_TYPE_DVI_DUAL_LINK, +- SIGNAL_TYPE_DVI_SINGLE_LINK, +-}; +- +-static const enum signal_type signals_vga[] = { +- SIGNAL_TYPE_RGB +-}; +- +-static const enum signal_type signals_hdmi_type_a[] = { +- SIGNAL_TYPE_DVI_SINGLE_LINK, +- SIGNAL_TYPE_HDMI_TYPE_A +-}; +- +-static const enum signal_type signals_lvds[] = { +- SIGNAL_TYPE_LVDS +-}; +- +-static const enum signal_type signals_pcie[] = { +- SIGNAL_TYPE_DVI_SINGLE_LINK, +- SIGNAL_TYPE_HDMI_TYPE_A, +- SIGNAL_TYPE_DISPLAY_PORT +-}; +- +-static const enum signal_type signals_hardcode_dvi[] = { +- SIGNAL_TYPE_NONE +-}; +- +-static const enum signal_type signals_displayport[] = { +- SIGNAL_TYPE_DVI_SINGLE_LINK, +- SIGNAL_TYPE_HDMI_TYPE_A, +- SIGNAL_TYPE_DISPLAY_PORT, +- SIGNAL_TYPE_DISPLAY_PORT_MST +-}; +- +-static const enum signal_type signals_edp[] = { +- SIGNAL_TYPE_EDP +-}; +- +-static const enum signal_type signals_wireless[] = { +- SIGNAL_TYPE_WIRELESS +-}; +- +-static const enum signal_type signals_miracast[] = { +- SIGNAL_TYPE_WIRELESS +-}; +- +-static const enum signal_type default_signals_none[] = { +- SIGNAL_TYPE_NONE +-}; +- +-static const enum signal_type default_signals_single_link_dvii[] = { +- SIGNAL_TYPE_DVI_SINGLE_LINK, +- SIGNAL_TYPE_RGB +-}; +- +-static const enum signal_type default_signals_dual_link_dvii[] = { +- SIGNAL_TYPE_DVI_DUAL_LINK, +- SIGNAL_TYPE_RGB +-}; +- +-static const enum signal_type default_signals_single_link_dvid[] = { +- SIGNAL_TYPE_DVI_SINGLE_LINK +-}; +- +-static const enum signal_type default_signals_dual_link_dvid[] = { +- SIGNAL_TYPE_DVI_DUAL_LINK, +-}; +- +-static const enum signal_type default_signals_vga[] = { +- SIGNAL_TYPE_RGB +-}; +- +-static const enum signal_type default_signals_hdmi_type_a[] = { +- SIGNAL_TYPE_HDMI_TYPE_A +-}; +- +-static const enum signal_type default_signals_lvds[] = { +- SIGNAL_TYPE_LVDS +-}; +- +-static const enum signal_type default_signals_pcie[] = { +- SIGNAL_TYPE_DISPLAY_PORT +-}; +- +-static const enum signal_type default_signals_hardcode_dvi[] = { +- SIGNAL_TYPE_NONE +-}; +- +-static const enum signal_type default_signals_displayport[] = { +- SIGNAL_TYPE_DISPLAY_PORT +-}; +- +-static const enum signal_type default_signals_edp[] = { +- SIGNAL_TYPE_EDP +-}; +- +-static const enum signal_type default_signals_wireless[] = { +- SIGNAL_TYPE_WIRELESS +-}; +- +-static const enum signal_type default_signals_miracast[] = { +- SIGNAL_TYPE_WIRELESS +-}; +- +-/* +- * Signal arrays +- */ +- +-#define SIGNALS_ARRAY_ELEM(a) {a, ARRAY_SIZE(a)} +- +-/* Indexed by enum connector_id */ +-const struct connector_signals default_signals[] = { +- SIGNALS_ARRAY_ELEM(default_signals_none), +- SIGNALS_ARRAY_ELEM(default_signals_single_link_dvii), +- SIGNALS_ARRAY_ELEM(default_signals_dual_link_dvii), +- SIGNALS_ARRAY_ELEM(default_signals_single_link_dvid), +- SIGNALS_ARRAY_ELEM(default_signals_dual_link_dvid), +- SIGNALS_ARRAY_ELEM(default_signals_vga), +- /* Composite */ +- SIGNALS_ARRAY_ELEM(default_signals_none), +- /* S Video */ +- SIGNALS_ARRAY_ELEM(default_signals_none), +- /* YPbPr */ +- SIGNALS_ARRAY_ELEM(default_signals_none), +- /* DConnector */ +- SIGNALS_ARRAY_ELEM(default_signals_none), +- /* 9pinDIN */ +- SIGNALS_ARRAY_ELEM(default_signals_none), +- /* SCART */ +- SIGNALS_ARRAY_ELEM(default_signals_none), +- SIGNALS_ARRAY_ELEM(default_signals_hdmi_type_a), +- /* Not Used */ +- SIGNALS_ARRAY_ELEM(default_signals_none), +- SIGNALS_ARRAY_ELEM(default_signals_lvds), +- /* 7pin DIN*/ +- SIGNALS_ARRAY_ELEM(default_signals_none), +- SIGNALS_ARRAY_ELEM(default_signals_pcie), +- /* CrossFire */ +- SIGNALS_ARRAY_ELEM(default_signals_none), +- SIGNALS_ARRAY_ELEM(default_signals_hardcode_dvi), +- SIGNALS_ARRAY_ELEM(default_signals_displayport), +- SIGNALS_ARRAY_ELEM(default_signals_edp), +- /* MXM*/ +- SIGNALS_ARRAY_ELEM(default_signals_none), +- SIGNALS_ARRAY_ELEM(default_signals_wireless), +- SIGNALS_ARRAY_ELEM(default_signals_miracast) +-}; +- +-const uint32_t number_of_default_signals = ARRAY_SIZE(default_signals); +- +-/* Indexed by enum connector_id */ +-const struct connector_signals supported_signals[] = { +- SIGNALS_ARRAY_ELEM(signals_none), +- SIGNALS_ARRAY_ELEM(signals_single_link_dvii), +- SIGNALS_ARRAY_ELEM(signals_dual_link_dvii), +- SIGNALS_ARRAY_ELEM(signals_single_link_dvid), +- SIGNALS_ARRAY_ELEM(signals_dual_link_dvid), +- SIGNALS_ARRAY_ELEM(signals_vga), +- /* Composite */ +- SIGNALS_ARRAY_ELEM(signals_none), +- /* S Video */ +- SIGNALS_ARRAY_ELEM(signals_none), +- /* YPbPr */ +- SIGNALS_ARRAY_ELEM(signals_none), +- /* DConnector */ +- SIGNALS_ARRAY_ELEM(signals_none), +- /* 9pinDIN */ +- SIGNALS_ARRAY_ELEM(signals_none), +- /* SCART */ +- SIGNALS_ARRAY_ELEM(signals_none), +- SIGNALS_ARRAY_ELEM(signals_hdmi_type_a), +- /* Note Used */ +- SIGNALS_ARRAY_ELEM(signals_none), +- SIGNALS_ARRAY_ELEM(signals_lvds), +- /* 7pin DIN*/ +- SIGNALS_ARRAY_ELEM(signals_none), +- SIGNALS_ARRAY_ELEM(signals_pcie), +- /* CrossFire */ +- SIGNALS_ARRAY_ELEM(signals_none), +- SIGNALS_ARRAY_ELEM(signals_hardcode_dvi), +- SIGNALS_ARRAY_ELEM(signals_displayport), +- SIGNALS_ARRAY_ELEM(signals_edp), +- /* MXM */ +- SIGNALS_ARRAY_ELEM(signals_none), +- SIGNALS_ARRAY_ELEM(signals_wireless), +- SIGNALS_ARRAY_ELEM(signals_miracast) +-}; +- +-const uint32_t number_of_signals = ARRAY_SIZE(supported_signals); +diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc_link.c b/drivers/gpu/drm/amd/dal/dc/core/dc_link.c +index 2211f38..3347174 100644 +--- a/drivers/gpu/drm/amd/dal/dc/core/dc_link.c ++++ b/drivers/gpu/drm/amd/dal/dc/core/dc_link.c +@@ -29,7 +29,6 @@ + #include "core_dc.h" + #include "adapter_service_interface.h" + #include "grph_object_id.h" +-#include "connector_interface.h" + #include "gpio_service_interface.h" + #include "ddc_service_interface.h" + #include "core_status.h" +@@ -45,6 +44,10 @@ + LOG_MAJOR_HW_TRACE, LOG_MINOR_HW_TRACE_HOTPLUG, \ + __VA_ARGS__) + ++#define DELAY_ON_CONNECT_IN_MS 500 ++#define DELAY_ON_DISCONNECT_IN_MS 500 ++ ++ + /******************************************************************************* + * Private structures + ******************************************************************************/ +@@ -55,9 +58,6 @@ + ******************************************************************************/ + static void destruct(struct core_link *link) + { +- if (link->connector) +- dal_connector_destroy(&link->connector); +- + if (link->ddc) + dal_ddc_service_destroy(&link->ddc); + +@@ -65,6 +65,73 @@ static void destruct(struct core_link *link) + link->ctx->dc->hwss.encoder_destroy(&link->link_enc); + } + ++/* ++ * Function: program_hpd_filter ++ * ++ * @brief ++ * Programs HPD filter on associated HPD line ++ * ++ * @param [in] delay_on_connect_in_ms: Connect filter timeout ++ * @param [in] delay_on_disconnect_in_ms: Disconnect filter timeout ++ * ++ * @return ++ * true on success, false otherwise ++ */ ++static bool program_hpd_filter( ++ const struct core_link *link) ++{ ++ bool result = false; ++ ++ struct irq *hpd; ++ ++ /* Verify feature is supported */ ++ ++ switch (link->public.connector_signal) { ++ case SIGNAL_TYPE_DVI_SINGLE_LINK: ++ case SIGNAL_TYPE_DVI_DUAL_LINK: ++ case SIGNAL_TYPE_HDMI_TYPE_A: ++ case SIGNAL_TYPE_LVDS: ++ case SIGNAL_TYPE_DISPLAY_PORT: ++ case SIGNAL_TYPE_DISPLAY_PORT_MST: ++ case SIGNAL_TYPE_EDP: ++ /* program hpd filter */ ++ break; ++ default: ++ /* don't program hpd filter */ ++ return false; ++ } ++ ++ /* Obtain HPD handle */ ++ hpd = dal_adapter_service_obtain_hpd_irq( ++ link->adapter_srv, link->link_id); ++ ++ if (!hpd) ++ return result; ++ ++ /* Setup HPD filtering */ ++ ++ if (dal_irq_open(hpd) == GPIO_RESULT_OK) { ++ struct gpio_hpd_config config; ++ ++ config.delay_on_connect = DELAY_ON_CONNECT_IN_MS; ++ config.delay_on_disconnect = DELAY_ON_DISCONNECT_IN_MS; ++ ++ dal_irq_setup_hpd_filter(hpd, &config); ++ ++ dal_irq_close(hpd); ++ ++ result = true; ++ } else { ++ ASSERT_CRITICAL(false); ++ } ++ ++ /* Release HPD handle */ ++ ++ dal_adapter_service_release_irq(link->adapter_srv, hpd); ++ ++ return result; ++} ++ + static bool detect_sink(struct core_link *link) + { + uint32_t is_hpd_high = 0; +@@ -651,6 +718,91 @@ void dc_link_detect(const struct dc_link *dc_link) + return; + } + ++static enum hpd_source_id get_hpd_line( ++ struct core_link *link, ++ struct adapter_service *as) ++{ ++ struct irq *hpd; ++ enum hpd_source_id hpd_id = HPD_SOURCEID_UNKNOWN; ++ ++ hpd = dal_adapter_service_obtain_hpd_irq(as, link->link_id); ++ ++ if (hpd) { ++ switch (dal_irq_get_source(hpd)) { ++ case DC_IRQ_SOURCE_HPD1: ++ hpd_id = HPD_SOURCEID1; ++ break; ++ case DC_IRQ_SOURCE_HPD2: ++ hpd_id = HPD_SOURCEID2; ++ break; ++ case DC_IRQ_SOURCE_HPD3: ++ hpd_id = HPD_SOURCEID3; ++ break; ++ case DC_IRQ_SOURCE_HPD4: ++ hpd_id = HPD_SOURCEID4; ++ break; ++ case DC_IRQ_SOURCE_HPD5: ++ hpd_id = HPD_SOURCEID5; ++ break; ++ case DC_IRQ_SOURCE_HPD6: ++ hpd_id = HPD_SOURCEID6; ++ break; ++ default: ++ BREAK_TO_DEBUGGER(); ++ break; ++ } ++ ++ dal_adapter_service_release_irq(as, hpd); ++ } ++ ++ return hpd_id; ++} ++ ++static enum channel_id get_ddc_line(struct core_link *link, struct adapter_service *as) ++{ ++ struct ddc *ddc; ++ enum channel_id channel = CHANNEL_ID_UNKNOWN; ++ ++ ddc = dal_adapter_service_obtain_ddc(as, link->link_id); ++ ++ if (ddc) { ++ switch (dal_ddc_get_line(ddc)) { ++ case GPIO_DDC_LINE_DDC1: ++ channel = CHANNEL_ID_DDC1; ++ break; ++ case GPIO_DDC_LINE_DDC2: ++ channel = CHANNEL_ID_DDC2; ++ break; ++ case GPIO_DDC_LINE_DDC3: ++ channel = CHANNEL_ID_DDC3; ++ break; ++ case GPIO_DDC_LINE_DDC4: ++ channel = CHANNEL_ID_DDC4; ++ break; ++ case GPIO_DDC_LINE_DDC5: ++ channel = CHANNEL_ID_DDC5; ++ break; ++ case GPIO_DDC_LINE_DDC6: ++ channel = CHANNEL_ID_DDC6; ++ break; ++ case GPIO_DDC_LINE_DDC_VGA: ++ channel = CHANNEL_ID_DDC_VGA; ++ break; ++ case GPIO_DDC_LINE_I2C_PAD: ++ channel = CHANNEL_ID_I2C_PAD; ++ break; ++ default: ++ BREAK_TO_DEBUGGER(); ++ break; ++ } ++ ++ dal_adapter_service_release_ddc(as, ddc); ++ } ++ ++ return channel; ++} ++ ++ + static bool construct( + struct core_link *link, + const struct link_init_data *init_params) +@@ -661,7 +813,6 @@ static bool construct( + struct ddc_service_init_data ddc_service_init_data = { 0 }; + struct dc_context *dc_ctx = init_params->ctx; + struct encoder_init_data enc_init_data = { 0 }; +- struct connector_feature_support cfs = { 0 }; + struct integrated_info info = {{{ 0 }}}; + + link->dc = init_params->dc; +@@ -732,13 +883,6 @@ static bool construct( + init_params->connector_index, + link->public.connector_signal); + +- link->connector = dal_connector_create(dc_ctx, as, link->link_id); +- if (NULL == link->connector) { +- DC_ERROR("Failed to create connector object!\n"); +- goto create_fail; +- } +- +- + hpd_gpio = dal_adapter_service_obtain_hpd_irq(as, link->link_id); + + if (hpd_gpio != NULL) { +@@ -756,15 +900,13 @@ static bool construct( + goto create_fail; + } + +- dal_connector_get_features(link->connector, &cfs); +- + enc_init_data.adapter_service = as; + enc_init_data.ctx = dc_ctx; + enc_init_data.encoder = dal_adapter_service_get_src_obj( + as, link->link_id, 0); + enc_init_data.connector = link->link_id; +- enc_init_data.channel = cfs.ddc_line; +- enc_init_data.hpd_source = cfs.hpd_line; ++ enc_init_data.channel = get_ddc_line(link, as); ++ enc_init_data.hpd_source = get_hpd_line(link, as); + link->link_enc = dc_ctx->dc->hwss.encoder_create(&enc_init_data); + + if( link->link_enc == NULL) { +@@ -819,13 +961,7 @@ static bool construct( + * If GPIO isn't programmed correctly HPD might not rise or drain + * fast enough, leading to bounces. + */ +-#define DELAY_ON_CONNECT_IN_MS 500 +-#define DELAY_ON_DISCONNECT_IN_MS 500 +- +- dal_connector_program_hpd_filter( +- link->connector, +- DELAY_ON_CONNECT_IN_MS, +- DELAY_ON_DISCONNECT_IN_MS); ++ program_hpd_filter(link); + + return true; + +@@ -1126,10 +1262,7 @@ bool dc_link_set_backlight_level(const struct dc_link *public, uint32_t level) + + void core_link_resume(struct core_link *link) + { +- dal_connector_program_hpd_filter( +- link->connector, +- DELAY_ON_CONNECT_IN_MS, +- DELAY_ON_DISCONNECT_IN_MS); ++ program_hpd_filter(link); + } + + +@@ -1279,4 +1412,3 @@ void core_link_disable_stream( + disable_link(stream); + + } +- +diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc_link_dp.c b/drivers/gpu/drm/amd/dal/dc/core/dc_link_dp.c +index c0390e1..787091f 100644 +--- a/drivers/gpu/drm/amd/dal/dc/core/dc_link_dp.c ++++ b/drivers/gpu/drm/amd/dal/dc/core/dc_link_dp.c +@@ -5,7 +5,6 @@ + #include "inc/core_types.h" + #include "link_hwss.h" + #include "ddc_service_interface.h" +-#include "connector_interface.h" + #include "core_status.h" + #include "dpcd_defs.h" + +diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc_link_hwss.c b/drivers/gpu/drm/amd/dal/dc/core/dc_link_hwss.c +index 5ed0380..715aa9f 100644 +--- a/drivers/gpu/drm/amd/dal/dc/core/dc_link_hwss.c ++++ b/drivers/gpu/drm/amd/dal/dc/core/dc_link_hwss.c +@@ -6,7 +6,6 @@ + #include "include/ddc_service_types.h" + #include "include/i2caux_interface.h" + #include "link_hwss.h" +-#include "include/connector_interface.h" + #include "hw_sequencer.h" + #include "include/ddc_service_interface.h" + #include "dc_helpers.h" +diff --git a/drivers/gpu/drm/amd/dal/dc/inc/core_types.h b/drivers/gpu/drm/amd/dal/dc/inc/core_types.h +index dc871ad..26f5002 100644 +--- a/drivers/gpu/drm/amd/dal/dc/inc/core_types.h ++++ b/drivers/gpu/drm/amd/dal/dc/inc/core_types.h +@@ -205,7 +205,6 @@ struct core_link { + uint8_t connector_index; /* this will be mapped to the HPD pins */ + + struct adapter_service *adapter_srv; +- struct connector *connector; + struct link_encoder *link_enc; + struct ddc_service *ddc; + struct graphics_object_id link_id; +diff --git a/drivers/gpu/drm/amd/dal/include/connector_interface.h b/drivers/gpu/drm/amd/dal/include/connector_interface.h +deleted file mode 100644 +index e09af7e..0000000 +--- a/drivers/gpu/drm/amd/dal/include/connector_interface.h ++++ /dev/null +@@ -1,82 +0,0 @@ +-/* +- * Copyright 2012-15 Advanced Micro Devices, Inc. +- * +- * Permission is hereby granted, free of charge, to any person obtaining a +- * copy of this software and associated documentation files (the "Software"), +- * to deal in the Software without restriction, including without limitation +- * the rights to use, copy, modify, merge, publish, distribute, sublicense, +- * and/or sell copies of the Software, and to permit persons to whom the +- * Software is furnished to do so, subject to the following conditions: +- * +- * The above copyright notice and this permission notice shall be included in +- * all copies or substantial portions of the Software. +- * +- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +- * OTHER DEALINGS IN THE SOFTWARE. +- * +- * Authors: AMD +- * +- */ +- +-#ifndef __DAL_CONNECTOR_INTERFACE_H__ +-#define __DAL_CONNECTOR_INTERFACE_H__ +- +-#include "adapter_service_interface.h" +-#include "signal_types.h" +- +-/* forward declaration */ +-struct connector; +- +-struct connector_signals { +- const enum signal_type *signal; +- uint32_t number_of_signals; +-}; +- +-struct connector_feature_support { +- bool HPD_FILTERING:1; +- bool HW_DDC_POLLING:1; +- enum hpd_source_id hpd_line; +- enum channel_id ddc_line; +-}; +- +-void dal_connector_get_features( +- const struct connector *con, +- struct connector_feature_support *cfs); +- +-struct connector *dal_connector_create( +- struct dc_context *ctx, +- struct adapter_service *as, +- struct graphics_object_id go_id); +- +-void dal_connector_destroy(struct connector **connector); +- +-void dal_connector_destroy(struct connector **connector); +- +-const struct graphics_object_id dal_connector_get_graphics_object_id( +- const struct connector *connector); +- +-uint32_t dal_connector_enumerate_output_signals( +- const struct connector *connector); +-uint32_t dal_connector_enumerate_input_signals( +- const struct connector *connector); +- +-struct connector_signals dal_connector_get_default_signals( +- const struct connector *connector); +- +-bool dal_connector_program_hpd_filter( +- const struct connector *connector, +- const uint32_t delay_on_connect_in_ms, +- const uint32_t delay_on_disconnect_in_ms); +- +-bool dal_connector_enable_ddc_polling( +- const struct connector *connector, +- const bool is_poll_for_connect); +- +-bool dal_connector_disable_ddc_polling(const struct connector *connector); +- +-#endif +-- +2.7.4 + |