aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/1075-drm-amd-display-Break-out-amdgpu_dm_connector.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/1075-drm-amd-display-Break-out-amdgpu_dm_connector.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/1075-drm-amd-display-Break-out-amdgpu_dm_connector.patch845
1 files changed, 845 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/1075-drm-amd-display-Break-out-amdgpu_dm_connector.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/1075-drm-amd-display-Break-out-amdgpu_dm_connector.patch
new file mode 100644
index 00000000..9429d978
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/1075-drm-amd-display-Break-out-amdgpu_dm_connector.patch
@@ -0,0 +1,845 @@
+From d05cdf839d183c22aa150ad071a5f12c973b65ef Mon Sep 17 00:00:00 2001
+From: Harry Wentland <harry.wentland@amd.com>
+Date: Tue, 5 Sep 2017 14:16:09 -0400
+Subject: [PATCH 1075/4131] drm/amd/display: Break out amdgpu_dm_connector
+
+Stop using amdgpu_connector and roll our own. There is no overlap
+with amdgpu.
+
+Change-Id: I72274724eba31935270fa1a4e3484a78481486fa
+Signed-off-by: Harry Wentland <harry.wentland@amd.com>
+---
+ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 140 ++++++++++-----------
+ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 53 +++++++-
+ .../drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 20 +--
+ .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_irq.c | 12 +-
+ .../amd/display/amdgpu_dm/amdgpu_dm_mst_types.c | 34 ++---
+ .../amd/display/amdgpu_dm/amdgpu_dm_mst_types.h | 4 +-
+ 6 files changed, 153 insertions(+), 110 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+index 3d14dda..de19d11 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+@@ -464,14 +464,14 @@ static int dm_sw_fini(void *handle)
+
+ static int detect_mst_link_for_all_connectors(struct drm_device *dev)
+ {
+- struct amdgpu_connector *aconnector;
++ struct amdgpu_dm_connector *aconnector;
+ struct drm_connector *connector;
+ int ret = 0;
+
+ drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
+
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+- aconnector = to_amdgpu_connector(connector);
++ aconnector = to_amdgpu_dm_connector(connector);
+ if (aconnector->dc_link->type == dc_connection_mst_branch) {
+ DRM_INFO("DM_MST: starting TM on aconnector: %p [id: %d]\n",
+ aconnector, aconnector->base.base.id);
+@@ -499,13 +499,13 @@ static int dm_late_init(void *handle)
+
+ static void s3_handle_mst(struct drm_device *dev, bool suspend)
+ {
+- struct amdgpu_connector *aconnector;
++ struct amdgpu_dm_connector *aconnector;
+ struct drm_connector *connector;
+
+ drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
+
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+- aconnector = to_amdgpu_connector(connector);
++ aconnector = to_amdgpu_dm_connector(connector);
+ if (aconnector->dc_link->type == dc_connection_mst_branch &&
+ !aconnector->mst_port) {
+
+@@ -571,7 +571,7 @@ static int dm_suspend(void *handle)
+ return ret;
+ }
+
+-struct amdgpu_connector *amdgpu_dm_find_first_crct_matching_connector(
++struct amdgpu_dm_connector *amdgpu_dm_find_first_crct_matching_connector(
+ struct drm_atomic_state *state,
+ struct drm_crtc *crtc,
+ bool from_state_var)
+@@ -592,7 +592,7 @@ struct amdgpu_connector *amdgpu_dm_find_first_crct_matching_connector(
+ connector->state->crtc;
+
+ if (crtc_from_state == crtc)
+- return to_amdgpu_connector(connector);
++ return to_amdgpu_dm_connector(connector);
+ }
+
+ return NULL;
+@@ -734,7 +734,7 @@ int amdgpu_dm_display_resume(struct amdgpu_device *adev )
+ {
+ struct drm_device *ddev = adev->ddev;
+ struct amdgpu_display_manager *dm = &adev->dm;
+- struct amdgpu_connector *aconnector;
++ struct amdgpu_dm_connector *aconnector;
+ struct drm_connector *connector;
+ int ret = 0;
+ struct drm_crtc *crtc;
+@@ -762,7 +762,7 @@ int amdgpu_dm_display_resume(struct amdgpu_device *adev )
+ /* Do detection*/
+ list_for_each_entry(connector,
+ &ddev->mode_config.connector_list, head) {
+- aconnector = to_amdgpu_connector(connector);
++ aconnector = to_amdgpu_dm_connector(connector);
+
+ /*
+ * this is the case when traversing through already created
+@@ -864,7 +864,7 @@ static struct drm_mode_config_helper_funcs amdgpu_dm_mode_config_helperfuncs = {
+ };
+
+ void amdgpu_dm_update_connector_after_detect(
+- struct amdgpu_connector *aconnector)
++ struct amdgpu_dm_connector *aconnector)
+ {
+ struct drm_connector *connector = &aconnector->base;
+ struct drm_device *dev = connector->dev;
+@@ -970,7 +970,7 @@ void amdgpu_dm_update_connector_after_detect(
+
+ static void handle_hpd_irq(void *param)
+ {
+- struct amdgpu_connector *aconnector = (struct amdgpu_connector *)param;
++ struct amdgpu_dm_connector *aconnector = (struct amdgpu_dm_connector *)param;
+ struct drm_connector *connector = &aconnector->base;
+ struct drm_device *dev = connector->dev;
+
+@@ -993,7 +993,7 @@ static void handle_hpd_irq(void *param)
+
+ }
+
+-static void dm_handle_hpd_rx_irq(struct amdgpu_connector *aconnector)
++static void dm_handle_hpd_rx_irq(struct amdgpu_dm_connector *aconnector)
+ {
+ uint8_t esi[DP_PSR_ERROR_STATUS - DP_SINK_COUNT_ESI] = { 0 };
+ uint8_t dret;
+@@ -1072,7 +1072,7 @@ static void dm_handle_hpd_rx_irq(struct amdgpu_connector *aconnector)
+
+ static void handle_hpd_rx_irq(void *param)
+ {
+- struct amdgpu_connector *aconnector = (struct amdgpu_connector *)param;
++ struct amdgpu_dm_connector *aconnector = (struct amdgpu_dm_connector *)param;
+ struct drm_connector *connector = &aconnector->base;
+ struct drm_device *dev = connector->dev;
+ const struct dc_link *dc_link = aconnector->dc_link;
+@@ -1111,7 +1111,7 @@ static void register_hpd_handlers(struct amdgpu_device *adev)
+ {
+ struct drm_device *dev = adev->ddev;
+ struct drm_connector *connector;
+- struct amdgpu_connector *aconnector;
++ struct amdgpu_dm_connector *aconnector;
+ const struct dc_link *dc_link;
+ struct dc_interrupt_params int_params = {0};
+
+@@ -1121,7 +1121,7 @@ static void register_hpd_handlers(struct amdgpu_device *adev)
+ list_for_each_entry(connector,
+ &dev->mode_config.connector_list, head) {
+
+- aconnector = to_amdgpu_connector(connector);
++ aconnector = to_amdgpu_dm_connector(connector);
+ dc_link = aconnector->dc_link;
+
+ if (DC_IRQ_SOURCE_INVALID != dc_link->irq_source_hpd) {
+@@ -1402,7 +1402,7 @@ int amdgpu_dm_initialize_drm_device(struct amdgpu_device *adev)
+ {
+ struct amdgpu_display_manager *dm = &adev->dm;
+ uint32_t i;
+- struct amdgpu_connector *aconnector = NULL;
++ struct amdgpu_dm_connector *aconnector = NULL;
+ struct amdgpu_encoder *aencoder = NULL;
+ struct amdgpu_mode_info *mode_info = &adev->mode_info;
+ uint32_t link_cnt;
+@@ -2099,18 +2099,18 @@ static int fill_plane_attributes(
+
+ /*****************************************************************************/
+
+-struct amdgpu_connector *aconnector_from_drm_crtc_id(
++struct amdgpu_dm_connector *aconnector_from_drm_crtc_id(
+ const struct drm_crtc *crtc)
+ {
+ struct drm_device *dev = crtc->dev;
+ struct drm_connector *connector;
+ struct amdgpu_crtc *acrtc = to_amdgpu_crtc(crtc);
+- struct amdgpu_connector *aconnector;
++ struct amdgpu_dm_connector *aconnector;
+
+ list_for_each_entry(connector,
+ &dev->mode_config.connector_list, head) {
+
+- aconnector = to_amdgpu_connector(connector);
++ aconnector = to_amdgpu_dm_connector(connector);
+
+ if (aconnector->base.state->crtc != &acrtc->base)
+ continue;
+@@ -2412,7 +2412,7 @@ static void decide_crtc_timing_for_drm_display_mode(
+ }
+
+ static struct dc_stream_state *create_stream_for_sink(
+- struct amdgpu_connector *aconnector,
++ struct amdgpu_dm_connector *aconnector,
+ const struct drm_display_mode *drm_mode,
+ const struct dm_connector_state *dm_state)
+ {
+@@ -2559,7 +2559,7 @@ static enum drm_connector_status
+ amdgpu_dm_connector_detect(struct drm_connector *connector, bool force)
+ {
+ bool connected;
+- struct amdgpu_connector *aconnector = to_amdgpu_connector(connector);
++ struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
+
+ /* Notes:
+ * 1. This interface is NOT called in context of HPD irq.
+@@ -2755,7 +2755,7 @@ int amdgpu_dm_connector_atomic_get_property(
+
+ void amdgpu_dm_connector_destroy(struct drm_connector *connector)
+ {
+- struct amdgpu_connector *aconnector = to_amdgpu_connector(connector);
++ struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
+ const struct dc_link *link = aconnector->dc_link;
+ struct amdgpu_device *adev = connector->dev->dev_private;
+ struct amdgpu_display_manager *dm = &adev->dm;
+@@ -2855,7 +2855,7 @@ static int get_modes(struct drm_connector *connector)
+ return amdgpu_dm_connector_get_modes(connector);
+ }
+
+-static void create_eml_sink(struct amdgpu_connector *aconnector)
++static void create_eml_sink(struct amdgpu_dm_connector *aconnector)
+ {
+ struct dc_sink_init_data init_params = {
+ .link = aconnector->dc_link,
+@@ -2888,7 +2888,7 @@ static void create_eml_sink(struct amdgpu_connector *aconnector)
+ aconnector->dc_em_sink;
+ }
+
+-static void handle_edid_mgmt(struct amdgpu_connector *aconnector)
++static void handle_edid_mgmt(struct amdgpu_dm_connector *aconnector)
+ {
+ struct dc_link *link = (struct dc_link *)aconnector->dc_link;
+
+@@ -2914,7 +2914,7 @@ int amdgpu_dm_connector_mode_valid(
+ struct amdgpu_device *adev = connector->dev->dev_private;
+ /* TODO: Unhardcode stream count */
+ struct dc_stream_state *stream;
+- struct amdgpu_connector *aconnector = to_amdgpu_connector(connector);
++ struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
+
+ if ((mode->flags & DRM_MODE_FLAG_INTERLACE) ||
+ (mode->flags & DRM_MODE_FLAG_DBLSCAN))
+@@ -2927,7 +2927,7 @@ int amdgpu_dm_connector_mode_valid(
+ !aconnector->dc_em_sink)
+ handle_edid_mgmt(aconnector);
+
+- dc_sink = to_amdgpu_connector(connector)->dc_sink;
++ dc_sink = to_amdgpu_dm_connector(connector)->dc_sink;
+
+ if (dc_sink == NULL) {
+ DRM_ERROR("dc_sink is NULL!\n");
+@@ -3188,7 +3188,7 @@ int dm_create_validation_set_for_connector(struct drm_connector *connector,
+ {
+ int result = MODE_ERROR;
+ struct dc_sink *dc_sink =
+- to_amdgpu_connector(connector)->dc_sink;
++ to_amdgpu_dm_connector(connector)->dc_sink;
+ /* TODO: Unhardcode stream count */
+ struct dc_stream_state *stream;
+
+@@ -3449,8 +3449,8 @@ static void amdgpu_dm_connector_add_common_modes(struct drm_encoder *encoder,
+ struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder);
+ struct drm_display_mode *mode = NULL;
+ struct drm_display_mode *native_mode = &amdgpu_encoder->native_mode;
+- struct amdgpu_connector *amdgpu_connector =
+- to_amdgpu_connector(connector);
++ struct amdgpu_dm_connector *amdgpu_dm_connector =
++ to_amdgpu_dm_connector(connector);
+ int i;
+ int n;
+ struct mode_size {
+@@ -3498,7 +3498,7 @@ static void amdgpu_dm_connector_add_common_modes(struct drm_encoder *encoder,
+ common_modes[i].name, common_modes[i].w,
+ common_modes[i].h);
+ drm_mode_probed_add(connector, mode);
+- amdgpu_connector->num_modes++;
++ amdgpu_dm_connector->num_modes++;
+ }
+ }
+
+@@ -3506,41 +3506,41 @@ static void amdgpu_dm_connector_ddc_get_modes(
+ struct drm_connector *connector,
+ struct edid *edid)
+ {
+- struct amdgpu_connector *amdgpu_connector =
+- to_amdgpu_connector(connector);
++ struct amdgpu_dm_connector *amdgpu_dm_connector =
++ to_amdgpu_dm_connector(connector);
+
+ if (edid) {
+ /* empty probed_modes */
+ INIT_LIST_HEAD(&connector->probed_modes);
+- amdgpu_connector->num_modes =
++ amdgpu_dm_connector->num_modes =
+ drm_add_edid_modes(connector, edid);
+
+ drm_edid_to_eld(connector, edid);
+
+ amdgpu_dm_get_native_mode(connector);
+ } else
+- amdgpu_connector->num_modes = 0;
++ amdgpu_dm_connector->num_modes = 0;
+ }
+
+ int amdgpu_dm_connector_get_modes(struct drm_connector *connector)
+ {
+ const struct drm_connector_helper_funcs *helper =
+ connector->helper_private;
+- struct amdgpu_connector *amdgpu_connector =
+- to_amdgpu_connector(connector);
++ struct amdgpu_dm_connector *amdgpu_dm_connector =
++ to_amdgpu_dm_connector(connector);
+ struct drm_encoder *encoder;
+- struct edid *edid = amdgpu_connector->edid;
++ struct edid *edid = amdgpu_dm_connector->edid;
+
+ encoder = helper->best_encoder(connector);
+
+ amdgpu_dm_connector_ddc_get_modes(connector, edid);
+ amdgpu_dm_connector_add_common_modes(encoder, connector);
+- return amdgpu_connector->num_modes;
++ return amdgpu_dm_connector->num_modes;
+ }
+
+ void amdgpu_dm_connector_init_helper(
+ struct amdgpu_display_manager *dm,
+- struct amdgpu_connector *aconnector,
++ struct amdgpu_dm_connector *aconnector,
+ int connector_type,
+ struct dc_link *link,
+ int link_index)
+@@ -3668,7 +3668,7 @@ static struct amdgpu_i2c_adapter *create_i2c(
+ */
+ int amdgpu_dm_connector_init(
+ struct amdgpu_display_manager *dm,
+- struct amdgpu_connector *aconnector,
++ struct amdgpu_dm_connector *aconnector,
+ uint32_t link_index,
+ struct amdgpu_encoder *aencoder)
+ {
+@@ -4306,7 +4306,7 @@ void amdgpu_dm_atomic_commit_tail(
+ */
+ if (adev->dm.freesync_module) {
+ for (i = 0; i < new_crtcs_count; i++) {
+- struct amdgpu_connector *aconnector = NULL;
++ struct amdgpu_dm_connector *aconnector = NULL;
+
+ new_acrtc_state = to_dm_crtc_state(new_crtcs[i]->base.state);
+
+@@ -4350,7 +4350,7 @@ void amdgpu_dm_atomic_commit_tail(
+
+ /* Handle scaling and undersacn changes*/
+ for_each_connector_in_state(state, connector, old_conn_state, i) {
+- struct amdgpu_connector *aconnector = to_amdgpu_connector(connector);
++ struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
+ struct dm_connector_state *con_new_state =
+ to_dm_connector_state(aconnector->base.state);
+ struct dm_connector_state *con_old_state =
+@@ -4500,7 +4500,7 @@ static int dm_force_atomic_commit(struct drm_connector *connector)
+ */
+ void dm_restore_drm_connector_state(struct drm_device *dev, struct drm_connector *connector)
+ {
+- struct amdgpu_connector *aconnector = to_amdgpu_connector(connector);
++ struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
+ struct amdgpu_crtc *disconnected_acrtc;
+ struct dm_crtc_state *acrtc_state;
+
+@@ -4693,7 +4693,7 @@ int amdgpu_dm_atomic_check(struct drm_device *dev,
+ /* update changed items */
+ for_each_crtc_in_state(state, crtc, crtc_state, i) {
+ struct amdgpu_crtc *acrtc = NULL;
+- struct amdgpu_connector *aconnector = NULL;
++ struct amdgpu_dm_connector *aconnector = NULL;
+ struct dc_stream_state *new_stream = NULL;
+ struct drm_connector_state *conn_state = NULL;
+ struct dm_connector_state *dm_conn_state = NULL;
+@@ -4810,7 +4810,7 @@ int amdgpu_dm_atomic_check(struct drm_device *dev,
+ * decide how to handle.
+ */
+ for_each_connector_in_state(state, connector, conn_state, i) {
+- struct amdgpu_connector *aconnector = to_amdgpu_connector(connector);
++ struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
+ struct dm_connector_state *con_old_state =
+ to_dm_connector_state(aconnector->base.state);
+ struct dm_connector_state *con_new_state =
+@@ -4921,15 +4921,15 @@ int amdgpu_dm_atomic_check(struct drm_device *dev,
+
+ static bool is_dp_capable_without_timing_msa(
+ struct dc *dc,
+- struct amdgpu_connector *amdgpu_connector)
++ struct amdgpu_dm_connector *amdgpu_dm_connector)
+ {
+ uint8_t dpcd_data;
+ bool capable = false;
+
+- if (amdgpu_connector->dc_link &&
++ if (amdgpu_dm_connector->dc_link &&
+ dm_helpers_dp_read_dpcd(
+ NULL,
+- amdgpu_connector->dc_link,
++ amdgpu_dm_connector->dc_link,
+ DP_DOWN_STREAM_PORT_COUNT,
+ &dpcd_data,
+ sizeof(dpcd_data))) {
+@@ -4948,14 +4948,14 @@ void amdgpu_dm_add_sink_to_freesync_module(
+ struct detailed_timing *timing;
+ struct detailed_non_pixel *data;
+ struct detailed_data_monitor_range *range;
+- struct amdgpu_connector *amdgpu_connector =
+- to_amdgpu_connector(connector);
++ struct amdgpu_dm_connector *amdgpu_dm_connector =
++ to_amdgpu_dm_connector(connector);
+
+ struct drm_device *dev = connector->dev;
+ struct amdgpu_device *adev = dev->dev_private;
+
+ edid_check_required = false;
+- if (!amdgpu_connector->dc_sink) {
++ if (!amdgpu_dm_connector->dc_sink) {
+ DRM_ERROR("dc_sink NULL, could not add free_sync module.\n");
+ return;
+ }
+@@ -4965,11 +4965,11 @@ void amdgpu_dm_add_sink_to_freesync_module(
+ * if edid non zero restrict freesync only for dp and edp
+ */
+ if (edid) {
+- if (amdgpu_connector->dc_sink->sink_signal == SIGNAL_TYPE_DISPLAY_PORT
+- || amdgpu_connector->dc_sink->sink_signal == SIGNAL_TYPE_EDP) {
++ if (amdgpu_dm_connector->dc_sink->sink_signal == SIGNAL_TYPE_DISPLAY_PORT
++ || amdgpu_dm_connector->dc_sink->sink_signal == SIGNAL_TYPE_EDP) {
+ edid_check_required = is_dp_capable_without_timing_msa(
+ adev->dm.dc,
+- amdgpu_connector);
++ amdgpu_dm_connector);
+ }
+ }
+ val_capable = 0;
+@@ -4994,20 +4994,20 @@ void amdgpu_dm_add_sink_to_freesync_module(
+ if (range->flags != 1)
+ continue;
+
+- amdgpu_connector->min_vfreq = range->min_vfreq;
+- amdgpu_connector->max_vfreq = range->max_vfreq;
+- amdgpu_connector->pixel_clock_mhz =
++ amdgpu_dm_connector->min_vfreq = range->min_vfreq;
++ amdgpu_dm_connector->max_vfreq = range->max_vfreq;
++ amdgpu_dm_connector->pixel_clock_mhz =
+ range->pixel_clock_mhz * 10;
+ break;
+ }
+
+- if (amdgpu_connector->max_vfreq -
+- amdgpu_connector->min_vfreq > 10) {
+- amdgpu_connector->caps.supported = true;
+- amdgpu_connector->caps.min_refresh_in_micro_hz =
+- amdgpu_connector->min_vfreq * 1000000;
+- amdgpu_connector->caps.max_refresh_in_micro_hz =
+- amdgpu_connector->max_vfreq * 1000000;
++ if (amdgpu_dm_connector->max_vfreq -
++ amdgpu_dm_connector->min_vfreq > 10) {
++ amdgpu_dm_connector->caps.supported = true;
++ amdgpu_dm_connector->caps.min_refresh_in_micro_hz =
++ amdgpu_dm_connector->min_vfreq * 1000000;
++ amdgpu_dm_connector->caps.max_refresh_in_micro_hz =
++ amdgpu_dm_connector->max_vfreq * 1000000;
+ val_capable = 1;
+ }
+ }
+@@ -5021,22 +5021,22 @@ void amdgpu_dm_add_sink_to_freesync_module(
+ void amdgpu_dm_remove_sink_from_freesync_module(
+ struct drm_connector *connector)
+ {
+- struct amdgpu_connector *amdgpu_connector =
+- to_amdgpu_connector(connector);
++ struct amdgpu_dm_connector *amdgpu_dm_connector =
++ to_amdgpu_dm_connector(connector);
+
+ struct drm_device *dev = connector->dev;
+ struct amdgpu_device *adev = dev->dev_private;
+
+- if (!amdgpu_connector->dc_sink || !adev->dm.freesync_module) {
++ if (!amdgpu_dm_connector->dc_sink || !adev->dm.freesync_module) {
+ DRM_ERROR("dc_sink NULL or no free_sync module.\n");
+ return;
+ }
+
+- amdgpu_connector->min_vfreq = 0;
+- amdgpu_connector->max_vfreq = 0;
+- amdgpu_connector->pixel_clock_mhz = 0;
++ amdgpu_dm_connector->min_vfreq = 0;
++ amdgpu_dm_connector->max_vfreq = 0;
++ amdgpu_dm_connector->pixel_clock_mhz = 0;
+
+- memset(&amdgpu_connector->caps, 0, sizeof(amdgpu_connector->caps));
++ memset(&amdgpu_dm_connector->caps, 0, sizeof(amdgpu_dm_connector->caps));
+
+ drm_object_property_set_value(&connector->base,
+ adev->mode_info.freesync_capable_property,
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
+index 54acbb5..158e6b2e 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
+@@ -143,6 +143,50 @@ struct amdgpu_display_manager {
+ #endif
+ };
+
++struct amdgpu_dm_connector {
++
++ struct drm_connector base;
++ uint32_t connector_id;
++
++ /* we need to mind the EDID between detect
++ and get modes due to analog/digital/tvencoder */
++ struct edid *edid;
++
++ /* shared with amdgpu */
++ struct amdgpu_hpd hpd;
++
++ /* number of modes generated from EDID at 'dc_sink' */
++ int num_modes;
++
++ /* The 'old' sink - before an HPD.
++ * The 'current' sink is in dc_link->sink. */
++ struct dc_sink *dc_sink;
++ struct dc_link *dc_link;
++ struct dc_sink *dc_em_sink;
++
++ /* DM only */
++ struct drm_dp_mst_topology_mgr mst_mgr;
++ struct amdgpu_dm_dp_aux dm_dp_aux;
++ struct drm_dp_mst_port *port;
++ struct amdgpu_dm_connector *mst_port;
++ struct amdgpu_encoder *mst_encoder;
++
++ /* TODO see if we can merge with ddc_bus or make a dm_connector */
++ struct amdgpu_i2c_adapter *i2c;
++
++ /* Monitor range limits */
++ int min_vfreq ;
++ int max_vfreq ;
++ int pixel_clock_mhz;
++
++ /*freesync caps*/
++ struct mod_freesync_caps caps;
++
++ struct mutex hpd_lock;
++};
++
++#define to_amdgpu_dm_connector(x) container_of(x, struct amdgpu_dm_connector, base)
++
+ /* basic init/fini API */
+ int amdgpu_dm_init(struct amdgpu_device *adev);
+
+@@ -174,9 +218,9 @@ void amdgpu_dm_register_backlight_device(struct amdgpu_display_manager *dm);
+ extern const struct amdgpu_ip_block_version dm_ip_block;
+
+ void amdgpu_dm_update_connector_after_detect(
+- struct amdgpu_connector *aconnector);
++ struct amdgpu_dm_connector *aconnector);
+
+-struct amdgpu_connector *amdgpu_dm_find_first_crct_matching_connector(
++struct amdgpu_dm_connector *amdgpu_dm_find_first_crct_matching_connector(
+ struct drm_atomic_state *state,
+ struct drm_crtc *crtc,
+ bool from_state_var);
+@@ -189,7 +233,6 @@ struct dc_plane_state;
+ /* TODO rename to dc_stream_state */
+ struct dc_stream;
+
+-
+ struct dm_plane_state {
+ struct drm_plane_state base;
+ struct dc_plane_state *dc_state;
+@@ -219,7 +262,7 @@ int amdgpu_dm_crtc_init(struct amdgpu_display_manager *dm,
+ struct drm_plane *plane,
+ uint32_t link_index);
+ int amdgpu_dm_connector_init(struct amdgpu_display_manager *dm,
+- struct amdgpu_connector *amdgpu_connector,
++ struct amdgpu_dm_connector *amdgpu_dm_connector,
+ uint32_t link_index,
+ struct amdgpu_encoder *amdgpu_encoder);
+ int amdgpu_dm_encoder_init(
+@@ -263,7 +306,7 @@ int amdgpu_dm_get_encoder_crtc_mask(struct amdgpu_device *adev);
+
+ void amdgpu_dm_connector_init_helper(
+ struct amdgpu_display_manager *dm,
+- struct amdgpu_connector *aconnector,
++ struct amdgpu_dm_connector *aconnector,
+ int connector_type,
+ struct dc_link *link,
+ int link_index);
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
+index 4a12453..9bd142f 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
+@@ -133,7 +133,7 @@ enum dc_edid_status dm_helpers_parse_edid_caps(
+ }
+
+ static void get_payload_table(
+- struct amdgpu_connector *aconnector,
++ struct amdgpu_dm_connector *aconnector,
+ struct dp_mst_stream_allocation_table *proposed_table)
+ {
+ int i;
+@@ -178,7 +178,7 @@ bool dm_helpers_dp_mst_write_payload_allocation_table(
+ struct dp_mst_stream_allocation_table *proposed_table,
+ bool enable)
+ {
+- struct amdgpu_connector *aconnector;
++ struct amdgpu_dm_connector *aconnector;
+ struct drm_dp_mst_topology_mgr *mst_mgr;
+ struct drm_dp_mst_port *mst_port;
+ int slots = 0;
+@@ -266,7 +266,7 @@ bool dm_helpers_dp_mst_poll_for_allocation_change_trigger(
+ struct dc_context *ctx,
+ const struct dc_stream_state *stream)
+ {
+- struct amdgpu_connector *aconnector;
++ struct amdgpu_dm_connector *aconnector;
+ struct drm_dp_mst_topology_mgr *mst_mgr;
+ int ret;
+
+@@ -293,7 +293,7 @@ bool dm_helpers_dp_mst_send_payload_allocation(
+ const struct dc_stream_state *stream,
+ bool enable)
+ {
+- struct amdgpu_connector *aconnector;
++ struct amdgpu_dm_connector *aconnector;
+ struct drm_dp_mst_topology_mgr *mst_mgr;
+ struct drm_dp_mst_port *mst_port;
+ int ret;
+@@ -341,7 +341,7 @@ bool dm_helpers_dp_mst_start_top_mgr(
+ const struct dc_link *link,
+ bool boot)
+ {
+- struct amdgpu_connector *aconnector = link->priv;
++ struct amdgpu_dm_connector *aconnector = link->priv;
+
+ if (!aconnector) {
+ DRM_ERROR("Failed to found connector for link!");
+@@ -364,7 +364,7 @@ void dm_helpers_dp_mst_stop_top_mgr(
+ struct dc_context *ctx,
+ const struct dc_link *link)
+ {
+- struct amdgpu_connector *aconnector = link->priv;
++ struct amdgpu_dm_connector *aconnector = link->priv;
+
+ if (!aconnector) {
+ DRM_ERROR("Failed to found connector for link!");
+@@ -386,7 +386,7 @@ bool dm_helpers_dp_read_dpcd(
+ uint32_t size)
+ {
+
+- struct amdgpu_connector *aconnector = link->priv;
++ struct amdgpu_dm_connector *aconnector = link->priv;
+
+ if (!aconnector) {
+ DRM_ERROR("Failed to found connector for link!");
+@@ -404,7 +404,7 @@ bool dm_helpers_dp_write_dpcd(
+ const uint8_t *data,
+ uint32_t size)
+ {
+- struct amdgpu_connector *aconnector = link->priv;
++ struct amdgpu_dm_connector *aconnector = link->priv;
+
+ if (!aconnector) {
+ DRM_ERROR("Failed to found connector for link!");
+@@ -420,7 +420,7 @@ bool dm_helpers_submit_i2c(
+ const struct dc_link *link,
+ struct i2c_command *cmd)
+ {
+- struct amdgpu_connector *aconnector = link->priv;
++ struct amdgpu_dm_connector *aconnector = link->priv;
+ struct i2c_msg *msgs;
+ int i = 0;
+ int num = cmd->number_of_payloads;
+@@ -455,7 +455,7 @@ enum dc_edid_status dm_helpers_read_local_edid(
+ struct dc_link *link,
+ struct dc_sink *sink)
+ {
+- struct amdgpu_connector *aconnector = link->priv;
++ struct amdgpu_dm_connector *aconnector = link->priv;
+ struct i2c_adapter *ddc;
+ int retry = 3;
+ enum dc_edid_status edid_status;
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_irq.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_irq.c
+index 4aee146..276adf9 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_irq.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_irq.c
+@@ -787,10 +787,10 @@ void amdgpu_dm_hpd_init(struct amdgpu_device *adev)
+ struct drm_connector *connector;
+
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+- struct amdgpu_connector *amdgpu_connector =
+- to_amdgpu_connector(connector);
++ struct amdgpu_dm_connector *amdgpu_dm_connector =
++ to_amdgpu_dm_connector(connector);
+
+- const struct dc_link *dc_link = amdgpu_connector->dc_link;
++ const struct dc_link *dc_link = amdgpu_dm_connector->dc_link;
+
+ if (DC_IRQ_SOURCE_INVALID != dc_link->irq_source_hpd) {
+ dc_interrupt_set(adev->dm.dc,
+@@ -820,9 +820,9 @@ void amdgpu_dm_hpd_fini(struct amdgpu_device *adev)
+ struct drm_connector *connector;
+
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+- struct amdgpu_connector *amdgpu_connector =
+- to_amdgpu_connector(connector);
+- const struct dc_link *dc_link = amdgpu_connector->dc_link;
++ struct amdgpu_dm_connector *amdgpu_dm_connector =
++ to_amdgpu_dm_connector(connector);
++ const struct dc_link *dc_link = amdgpu_dm_connector->dc_link;
+
+ dc_interrupt_set(adev->dm.dc, dc_link->irq_source_hpd, false);
+
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
+index 3ce087f..d798a52 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
+@@ -137,8 +137,8 @@ static ssize_t dm_dp_aux_transfer(struct drm_dp_aux *aux, struct drm_dp_aux_msg
+ static enum drm_connector_status
+ dm_dp_mst_detect(struct drm_connector *connector, bool force)
+ {
+- struct amdgpu_connector *aconnector = to_amdgpu_connector(connector);
+- struct amdgpu_connector *master = aconnector->mst_port;
++ struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
++ struct amdgpu_dm_connector *master = aconnector->mst_port;
+
+ enum drm_connector_status status =
+ drm_dp_mst_detect_port(
+@@ -152,13 +152,13 @@ dm_dp_mst_detect(struct drm_connector *connector, bool force)
+ static void
+ dm_dp_mst_connector_destroy(struct drm_connector *connector)
+ {
+- struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector);
+- struct amdgpu_encoder *amdgpu_encoder = amdgpu_connector->mst_encoder;
++ struct amdgpu_dm_connector *amdgpu_dm_connector = to_amdgpu_dm_connector(connector);
++ struct amdgpu_encoder *amdgpu_encoder = amdgpu_dm_connector->mst_encoder;
+
+ drm_encoder_cleanup(&amdgpu_encoder->base);
+ kfree(amdgpu_encoder);
+ drm_connector_cleanup(connector);
+- kfree(amdgpu_connector);
++ kfree(amdgpu_dm_connector);
+ }
+
+ static const struct drm_connector_funcs dm_dp_mst_connector_funcs = {
+@@ -176,7 +176,7 @@ static const struct drm_connector_funcs dm_dp_mst_connector_funcs = {
+
+ static int dm_dp_mst_get_modes(struct drm_connector *connector)
+ {
+- struct amdgpu_connector *aconnector = to_amdgpu_connector(connector);
++ struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
+ int ret = 0;
+
+ ret = drm_add_edid_modes(&aconnector->base, aconnector->edid);
+@@ -188,9 +188,9 @@ static int dm_dp_mst_get_modes(struct drm_connector *connector)
+
+ static struct drm_encoder *dm_mst_best_encoder(struct drm_connector *connector)
+ {
+- struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector);
++ struct amdgpu_dm_connector *amdgpu_dm_connector = to_amdgpu_dm_connector(connector);
+
+- return &amdgpu_connector->mst_encoder->base;
++ return &amdgpu_dm_connector->mst_encoder->base;
+ }
+
+ static const struct drm_connector_helper_funcs dm_dp_mst_connector_helper_funcs = {
+@@ -200,7 +200,7 @@ static const struct drm_connector_helper_funcs dm_dp_mst_connector_helper_funcs
+ };
+
+ static struct amdgpu_encoder *
+-dm_dp_create_fake_mst_encoder(struct amdgpu_connector *connector)
++dm_dp_create_fake_mst_encoder(struct amdgpu_dm_connector *connector)
+ {
+ struct drm_device *dev = connector->base.dev;
+ struct amdgpu_device *adev = dev->dev_private;
+@@ -235,15 +235,15 @@ static struct drm_connector *dm_dp_add_mst_connector(struct drm_dp_mst_topology_
+ struct drm_dp_mst_port *port,
+ const char *pathprop)
+ {
+- struct amdgpu_connector *master = container_of(mgr, struct amdgpu_connector, mst_mgr);
++ struct amdgpu_dm_connector *master = container_of(mgr, struct amdgpu_dm_connector, mst_mgr);
+ struct drm_device *dev = master->base.dev;
+ struct amdgpu_device *adev = dev->dev_private;
+- struct amdgpu_connector *aconnector;
++ struct amdgpu_dm_connector *aconnector;
+ struct drm_connector *connector;
+
+ drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+- aconnector = to_amdgpu_connector(connector);
++ aconnector = to_amdgpu_dm_connector(connector);
+ if (aconnector->mst_port == master
+ && !aconnector->port) {
+ DRM_INFO("DM_MST: reusing connector: %p [id: %d] [master: %p]\n",
+@@ -317,7 +317,7 @@ static void dm_dp_destroy_mst_connector(
+ struct drm_dp_mst_topology_mgr *mgr,
+ struct drm_connector *connector)
+ {
+- struct amdgpu_connector *aconnector = to_amdgpu_connector(connector);
++ struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
+
+ DRM_INFO("DM_MST: Disabling connector: %p [id: %d] [master: %p]\n",
+ aconnector, connector->base.id, aconnector->mst_port);
+@@ -341,17 +341,17 @@ static void dm_dp_destroy_mst_connector(
+
+ static void dm_dp_mst_hotplug(struct drm_dp_mst_topology_mgr *mgr)
+ {
+- struct amdgpu_connector *master = container_of(mgr, struct amdgpu_connector, mst_mgr);
++ struct amdgpu_dm_connector *master = container_of(mgr, struct amdgpu_dm_connector, mst_mgr);
+ struct drm_device *dev = master->base.dev;
+ struct amdgpu_device *adev = dev->dev_private;
+ struct drm_connector *connector;
+- struct amdgpu_connector *aconnector;
++ struct amdgpu_dm_connector *aconnector;
+ struct edid *edid;
+ struct dc_sink *dc_sink;
+
+ drm_modeset_lock_all(dev);
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+- aconnector = to_amdgpu_connector(connector);
++ aconnector = to_amdgpu_dm_connector(connector);
+ if (aconnector->port &&
+ aconnector->port->pdt != DP_PEER_DEVICE_NONE &&
+ aconnector->port->pdt != DP_PEER_DEVICE_MST_BRANCHING &&
+@@ -442,7 +442,7 @@ static const struct drm_dp_mst_topology_cbs dm_mst_cbs = {
+
+ void amdgpu_dm_initialize_dp_connector(
+ struct amdgpu_display_manager *dm,
+- struct amdgpu_connector *aconnector)
++ struct amdgpu_dm_connector *aconnector)
+ {
+ aconnector->dm_dp_aux.aux.name = "dmdc";
+ aconnector->dm_dp_aux.aux.dev = dm->adev->dev;
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.h b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.h
+index 418061f..ba64a40 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.h
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.h
+@@ -27,10 +27,10 @@
+ #define __DAL_AMDGPU_DM_MST_TYPES_H__
+
+ struct amdgpu_display_manager;
+-struct amdgpu_connector;
++struct amdgpu_dm_connector;
+
+ void amdgpu_dm_initialize_dp_connector(
+ struct amdgpu_display_manager *dm,
+- struct amdgpu_connector *aconnector);
++ struct amdgpu_dm_connector *aconnector);
+
+ #endif
+--
+2.7.4
+