diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1075-drm-amd-display-Break-out-amdgpu_dm_connector.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1075-drm-amd-display-Break-out-amdgpu_dm_connector.patch | 845 |
1 files changed, 845 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1075-drm-amd-display-Break-out-amdgpu_dm_connector.patch b/meta-amd-bsp/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/meta-amd-bsp/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 + |