Commit c84dec2f authored by Harry Wentland's avatar Harry Wentland Committed by Alex Deucher

drm/amd/display: Break out amdgpu_dm_connector

Stop using amdgpu_connector and roll our own. There is no overlap
with amdgpu.
Signed-off-by: default avatarHarry Wentland <harry.wentland@amd.com>
Reviewed-by: default avatarAndrey Grodzovsky <Andrey.Grodzovsky@amd.com>
Acked-by: default avatarHarry Wentland <Harry.Wentland@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent e9475143
...@@ -465,14 +465,14 @@ static int dm_sw_fini(void *handle) ...@@ -465,14 +465,14 @@ static int dm_sw_fini(void *handle)
static int detect_mst_link_for_all_connectors(struct drm_device *dev) 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; struct drm_connector *connector;
int ret = 0; int ret = 0;
drm_modeset_lock(&dev->mode_config.connection_mutex, NULL); drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
list_for_each_entry(connector, &dev->mode_config.connector_list, head) { 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) { if (aconnector->dc_link->type == dc_connection_mst_branch) {
DRM_INFO("DM_MST: starting TM on aconnector: %p [id: %d]\n", DRM_INFO("DM_MST: starting TM on aconnector: %p [id: %d]\n",
aconnector, aconnector->base.base.id); aconnector, aconnector->base.base.id);
...@@ -500,13 +500,13 @@ static int dm_late_init(void *handle) ...@@ -500,13 +500,13 @@ static int dm_late_init(void *handle)
static void s3_handle_mst(struct drm_device *dev, bool suspend) static void s3_handle_mst(struct drm_device *dev, bool suspend)
{ {
struct amdgpu_connector *aconnector; struct amdgpu_dm_connector *aconnector;
struct drm_connector *connector; struct drm_connector *connector;
drm_modeset_lock(&dev->mode_config.connection_mutex, NULL); drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
list_for_each_entry(connector, &dev->mode_config.connector_list, head) { 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 && if (aconnector->dc_link->type == dc_connection_mst_branch &&
!aconnector->mst_port) { !aconnector->mst_port) {
...@@ -562,7 +562,7 @@ static int dm_suspend(void *handle) ...@@ -562,7 +562,7 @@ static int dm_suspend(void *handle)
return ret; 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_atomic_state *state,
struct drm_crtc *crtc, struct drm_crtc *crtc,
bool from_state_var) bool from_state_var)
...@@ -583,7 +583,7 @@ struct amdgpu_connector *amdgpu_dm_find_first_crct_matching_connector( ...@@ -583,7 +583,7 @@ struct amdgpu_connector *amdgpu_dm_find_first_crct_matching_connector(
connector->state->crtc; connector->state->crtc;
if (crtc_from_state == crtc) if (crtc_from_state == crtc)
return to_amdgpu_connector(connector); return to_amdgpu_dm_connector(connector);
} }
return NULL; return NULL;
...@@ -607,7 +607,7 @@ int amdgpu_dm_display_resume(struct amdgpu_device *adev ) ...@@ -607,7 +607,7 @@ int amdgpu_dm_display_resume(struct amdgpu_device *adev )
{ {
struct drm_device *ddev = adev->ddev; struct drm_device *ddev = adev->ddev;
struct amdgpu_display_manager *dm = &adev->dm; struct amdgpu_display_manager *dm = &adev->dm;
struct amdgpu_connector *aconnector; struct amdgpu_dm_connector *aconnector;
struct drm_connector *connector; struct drm_connector *connector;
struct drm_crtc *crtc; struct drm_crtc *crtc;
struct drm_crtc_state *crtc_state; struct drm_crtc_state *crtc_state;
...@@ -629,7 +629,7 @@ int amdgpu_dm_display_resume(struct amdgpu_device *adev ) ...@@ -629,7 +629,7 @@ int amdgpu_dm_display_resume(struct amdgpu_device *adev )
/* Do detection*/ /* Do detection*/
list_for_each_entry(connector, list_for_each_entry(connector,
&ddev->mode_config.connector_list, head) { &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 * this is the case when traversing through already created
...@@ -741,7 +741,7 @@ static struct drm_mode_config_helper_funcs amdgpu_dm_mode_config_helperfuncs = { ...@@ -741,7 +741,7 @@ static struct drm_mode_config_helper_funcs amdgpu_dm_mode_config_helperfuncs = {
}; };
void amdgpu_dm_update_connector_after_detect( void amdgpu_dm_update_connector_after_detect(
struct amdgpu_connector *aconnector) struct amdgpu_dm_connector *aconnector)
{ {
struct drm_connector *connector = &aconnector->base; struct drm_connector *connector = &aconnector->base;
struct drm_device *dev = connector->dev; struct drm_device *dev = connector->dev;
...@@ -847,7 +847,7 @@ void amdgpu_dm_update_connector_after_detect( ...@@ -847,7 +847,7 @@ void amdgpu_dm_update_connector_after_detect(
static void handle_hpd_irq(void *param) 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_connector *connector = &aconnector->base;
struct drm_device *dev = connector->dev; struct drm_device *dev = connector->dev;
...@@ -870,7 +870,7 @@ static void handle_hpd_irq(void *param) ...@@ -870,7 +870,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 esi[DP_PSR_ERROR_STATUS - DP_SINK_COUNT_ESI] = { 0 };
uint8_t dret; uint8_t dret;
...@@ -949,7 +949,7 @@ static void dm_handle_hpd_rx_irq(struct amdgpu_connector *aconnector) ...@@ -949,7 +949,7 @@ static void dm_handle_hpd_rx_irq(struct amdgpu_connector *aconnector)
static void handle_hpd_rx_irq(void *param) 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_connector *connector = &aconnector->base;
struct drm_device *dev = connector->dev; struct drm_device *dev = connector->dev;
const struct dc_link *dc_link = aconnector->dc_link; const struct dc_link *dc_link = aconnector->dc_link;
...@@ -988,7 +988,7 @@ static void register_hpd_handlers(struct amdgpu_device *adev) ...@@ -988,7 +988,7 @@ static void register_hpd_handlers(struct amdgpu_device *adev)
{ {
struct drm_device *dev = adev->ddev; struct drm_device *dev = adev->ddev;
struct drm_connector *connector; struct drm_connector *connector;
struct amdgpu_connector *aconnector; struct amdgpu_dm_connector *aconnector;
const struct dc_link *dc_link; const struct dc_link *dc_link;
struct dc_interrupt_params int_params = {0}; struct dc_interrupt_params int_params = {0};
...@@ -998,7 +998,7 @@ static void register_hpd_handlers(struct amdgpu_device *adev) ...@@ -998,7 +998,7 @@ static void register_hpd_handlers(struct amdgpu_device *adev)
list_for_each_entry(connector, list_for_each_entry(connector,
&dev->mode_config.connector_list, head) { &dev->mode_config.connector_list, head) {
aconnector = to_amdgpu_connector(connector); aconnector = to_amdgpu_dm_connector(connector);
dc_link = aconnector->dc_link; dc_link = aconnector->dc_link;
if (DC_IRQ_SOURCE_INVALID != dc_link->irq_source_hpd) { if (DC_IRQ_SOURCE_INVALID != dc_link->irq_source_hpd) {
...@@ -1279,7 +1279,7 @@ int amdgpu_dm_initialize_drm_device(struct amdgpu_device *adev) ...@@ -1279,7 +1279,7 @@ int amdgpu_dm_initialize_drm_device(struct amdgpu_device *adev)
{ {
struct amdgpu_display_manager *dm = &adev->dm; struct amdgpu_display_manager *dm = &adev->dm;
uint32_t i; uint32_t i;
struct amdgpu_connector *aconnector = NULL; struct amdgpu_dm_connector *aconnector = NULL;
struct amdgpu_encoder *aencoder = NULL; struct amdgpu_encoder *aencoder = NULL;
struct amdgpu_mode_info *mode_info = &adev->mode_info; struct amdgpu_mode_info *mode_info = &adev->mode_info;
uint32_t link_cnt; uint32_t link_cnt;
...@@ -1966,18 +1966,18 @@ static int fill_plane_attributes( ...@@ -1966,18 +1966,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) const struct drm_crtc *crtc)
{ {
struct drm_device *dev = crtc->dev; struct drm_device *dev = crtc->dev;
struct drm_connector *connector; struct drm_connector *connector;
struct amdgpu_crtc *acrtc = to_amdgpu_crtc(crtc); struct amdgpu_crtc *acrtc = to_amdgpu_crtc(crtc);
struct amdgpu_connector *aconnector; struct amdgpu_dm_connector *aconnector;
list_for_each_entry(connector, list_for_each_entry(connector,
&dev->mode_config.connector_list, head) { &dev->mode_config.connector_list, head) {
aconnector = to_amdgpu_connector(connector); aconnector = to_amdgpu_dm_connector(connector);
if (aconnector->base.state->crtc != &acrtc->base) if (aconnector->base.state->crtc != &acrtc->base)
continue; continue;
...@@ -2279,7 +2279,7 @@ static void decide_crtc_timing_for_drm_display_mode( ...@@ -2279,7 +2279,7 @@ static void decide_crtc_timing_for_drm_display_mode(
} }
static struct dc_stream_state *create_stream_for_sink( 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 drm_display_mode *drm_mode,
const struct dm_connector_state *dm_state) const struct dm_connector_state *dm_state)
{ {
...@@ -2425,7 +2425,7 @@ static enum drm_connector_status ...@@ -2425,7 +2425,7 @@ static enum drm_connector_status
amdgpu_dm_connector_detect(struct drm_connector *connector, bool force) amdgpu_dm_connector_detect(struct drm_connector *connector, bool force)
{ {
bool connected; bool connected;
struct amdgpu_connector *aconnector = to_amdgpu_connector(connector); struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
/* Notes: /* Notes:
* 1. This interface is NOT called in context of HPD irq. * 1. This interface is NOT called in context of HPD irq.
...@@ -2538,7 +2538,7 @@ int amdgpu_dm_connector_atomic_get_property( ...@@ -2538,7 +2538,7 @@ int amdgpu_dm_connector_atomic_get_property(
void amdgpu_dm_connector_destroy(struct drm_connector *connector) 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; const struct dc_link *link = aconnector->dc_link;
struct amdgpu_device *adev = connector->dev->dev_private; struct amdgpu_device *adev = connector->dev->dev_private;
struct amdgpu_display_manager *dm = &adev->dm; struct amdgpu_display_manager *dm = &adev->dm;
...@@ -2636,7 +2636,7 @@ static int get_modes(struct drm_connector *connector) ...@@ -2636,7 +2636,7 @@ static int get_modes(struct drm_connector *connector)
return amdgpu_dm_connector_get_modes(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 = { struct dc_sink_init_data init_params = {
.link = aconnector->dc_link, .link = aconnector->dc_link,
...@@ -2669,7 +2669,7 @@ static void create_eml_sink(struct amdgpu_connector *aconnector) ...@@ -2669,7 +2669,7 @@ static void create_eml_sink(struct amdgpu_connector *aconnector)
aconnector->dc_em_sink; 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; struct dc_link *link = (struct dc_link *)aconnector->dc_link;
...@@ -2695,7 +2695,7 @@ int amdgpu_dm_connector_mode_valid( ...@@ -2695,7 +2695,7 @@ int amdgpu_dm_connector_mode_valid(
struct amdgpu_device *adev = connector->dev->dev_private; struct amdgpu_device *adev = connector->dev->dev_private;
/* TODO: Unhardcode stream count */ /* TODO: Unhardcode stream count */
struct dc_stream_state *stream; 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) || if ((mode->flags & DRM_MODE_FLAG_INTERLACE) ||
(mode->flags & DRM_MODE_FLAG_DBLSCAN)) (mode->flags & DRM_MODE_FLAG_DBLSCAN))
...@@ -2708,7 +2708,7 @@ int amdgpu_dm_connector_mode_valid( ...@@ -2708,7 +2708,7 @@ int amdgpu_dm_connector_mode_valid(
!aconnector->dc_em_sink) !aconnector->dc_em_sink)
handle_edid_mgmt(aconnector); 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) { if (dc_sink == NULL) {
DRM_ERROR("dc_sink is NULL!\n"); DRM_ERROR("dc_sink is NULL!\n");
...@@ -2968,7 +2968,7 @@ int dm_create_validation_set_for_connector(struct drm_connector *connector, ...@@ -2968,7 +2968,7 @@ int dm_create_validation_set_for_connector(struct drm_connector *connector,
{ {
int result = MODE_ERROR; int result = MODE_ERROR;
struct dc_sink *dc_sink = struct dc_sink *dc_sink =
to_amdgpu_connector(connector)->dc_sink; to_amdgpu_dm_connector(connector)->dc_sink;
/* TODO: Unhardcode stream count */ /* TODO: Unhardcode stream count */
struct dc_stream_state *stream; struct dc_stream_state *stream;
...@@ -3229,8 +3229,8 @@ static void amdgpu_dm_connector_add_common_modes(struct drm_encoder *encoder, ...@@ -3229,8 +3229,8 @@ static void amdgpu_dm_connector_add_common_modes(struct drm_encoder *encoder,
struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder); struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder);
struct drm_display_mode *mode = NULL; struct drm_display_mode *mode = NULL;
struct drm_display_mode *native_mode = &amdgpu_encoder->native_mode; struct drm_display_mode *native_mode = &amdgpu_encoder->native_mode;
struct amdgpu_connector *amdgpu_connector = struct amdgpu_dm_connector *amdgpu_dm_connector =
to_amdgpu_connector(connector); to_amdgpu_dm_connector(connector);
int i; int i;
int n; int n;
struct mode_size { struct mode_size {
...@@ -3278,7 +3278,7 @@ static void amdgpu_dm_connector_add_common_modes(struct drm_encoder *encoder, ...@@ -3278,7 +3278,7 @@ static void amdgpu_dm_connector_add_common_modes(struct drm_encoder *encoder,
common_modes[i].name, common_modes[i].w, common_modes[i].name, common_modes[i].w,
common_modes[i].h); common_modes[i].h);
drm_mode_probed_add(connector, mode); drm_mode_probed_add(connector, mode);
amdgpu_connector->num_modes++; amdgpu_dm_connector->num_modes++;
} }
} }
...@@ -3286,41 +3286,41 @@ static void amdgpu_dm_connector_ddc_get_modes( ...@@ -3286,41 +3286,41 @@ static void amdgpu_dm_connector_ddc_get_modes(
struct drm_connector *connector, struct drm_connector *connector,
struct edid *edid) struct edid *edid)
{ {
struct amdgpu_connector *amdgpu_connector = struct amdgpu_dm_connector *amdgpu_dm_connector =
to_amdgpu_connector(connector); to_amdgpu_dm_connector(connector);
if (edid) { if (edid) {
/* empty probed_modes */ /* empty probed_modes */
INIT_LIST_HEAD(&connector->probed_modes); INIT_LIST_HEAD(&connector->probed_modes);
amdgpu_connector->num_modes = amdgpu_dm_connector->num_modes =
drm_add_edid_modes(connector, edid); drm_add_edid_modes(connector, edid);
drm_edid_to_eld(connector, edid); drm_edid_to_eld(connector, edid);
amdgpu_dm_get_native_mode(connector); amdgpu_dm_get_native_mode(connector);
} else } else
amdgpu_connector->num_modes = 0; amdgpu_dm_connector->num_modes = 0;
} }
int amdgpu_dm_connector_get_modes(struct drm_connector *connector) int amdgpu_dm_connector_get_modes(struct drm_connector *connector)
{ {
const struct drm_connector_helper_funcs *helper = const struct drm_connector_helper_funcs *helper =
connector->helper_private; connector->helper_private;
struct amdgpu_connector *amdgpu_connector = struct amdgpu_dm_connector *amdgpu_dm_connector =
to_amdgpu_connector(connector); to_amdgpu_dm_connector(connector);
struct drm_encoder *encoder; struct drm_encoder *encoder;
struct edid *edid = amdgpu_connector->edid; struct edid *edid = amdgpu_dm_connector->edid;
encoder = helper->best_encoder(connector); encoder = helper->best_encoder(connector);
amdgpu_dm_connector_ddc_get_modes(connector, edid); amdgpu_dm_connector_ddc_get_modes(connector, edid);
amdgpu_dm_connector_add_common_modes(encoder, connector); 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( void amdgpu_dm_connector_init_helper(
struct amdgpu_display_manager *dm, struct amdgpu_display_manager *dm,
struct amdgpu_connector *aconnector, struct amdgpu_dm_connector *aconnector,
int connector_type, int connector_type,
struct dc_link *link, struct dc_link *link,
int link_index) int link_index)
...@@ -3440,7 +3440,7 @@ static struct amdgpu_i2c_adapter *create_i2c( ...@@ -3440,7 +3440,7 @@ static struct amdgpu_i2c_adapter *create_i2c(
*/ */
int amdgpu_dm_connector_init( int amdgpu_dm_connector_init(
struct amdgpu_display_manager *dm, struct amdgpu_display_manager *dm,
struct amdgpu_connector *aconnector, struct amdgpu_dm_connector *aconnector,
uint32_t link_index, uint32_t link_index,
struct amdgpu_encoder *aencoder) struct amdgpu_encoder *aencoder)
{ {
...@@ -4076,7 +4076,7 @@ void amdgpu_dm_atomic_commit_tail( ...@@ -4076,7 +4076,7 @@ void amdgpu_dm_atomic_commit_tail(
*/ */
if (adev->dm.freesync_module) { if (adev->dm.freesync_module) {
for (i = 0; i < new_crtcs_count; i++) { 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); new_acrtc_state = to_dm_crtc_state(new_crtcs[i]->base.state);
...@@ -4120,7 +4120,7 @@ void amdgpu_dm_atomic_commit_tail( ...@@ -4120,7 +4120,7 @@ void amdgpu_dm_atomic_commit_tail(
/* Handle scaling and undersacn changes*/ /* Handle scaling and undersacn changes*/
for_each_connector_in_state(state, connector, old_conn_state, i) { 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 = struct dm_connector_state *con_new_state =
to_dm_connector_state(aconnector->base.state); to_dm_connector_state(aconnector->base.state);
struct dm_connector_state *con_old_state = struct dm_connector_state *con_old_state =
...@@ -4270,7 +4270,7 @@ static int dm_force_atomic_commit(struct drm_connector *connector) ...@@ -4270,7 +4270,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) 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 amdgpu_crtc *disconnected_acrtc;
struct dm_crtc_state *acrtc_state; struct dm_crtc_state *acrtc_state;
...@@ -4360,7 +4360,7 @@ static int dm_update_crtcs_state( ...@@ -4360,7 +4360,7 @@ static int dm_update_crtcs_state(
/* update changed items */ /* update changed items */
for_each_crtc_in_state(state, crtc, crtc_state, i) { for_each_crtc_in_state(state, crtc, crtc_state, i) {
struct amdgpu_crtc *acrtc = NULL; struct amdgpu_crtc *acrtc = NULL;
struct amdgpu_connector *aconnector = NULL; struct amdgpu_dm_connector *aconnector = NULL;
struct drm_connector_state *conn_state = NULL; struct drm_connector_state *conn_state = NULL;
struct dm_connector_state *dm_conn_state = NULL; struct dm_connector_state *dm_conn_state = NULL;
...@@ -4689,7 +4689,7 @@ int amdgpu_dm_atomic_check(struct drm_device *dev, ...@@ -4689,7 +4689,7 @@ int amdgpu_dm_atomic_check(struct drm_device *dev,
* decide how to handle. * decide how to handle.
*/ */
for_each_connector_in_state(state, connector, conn_state, i) { 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 = struct dm_connector_state *con_old_state =
to_dm_connector_state(aconnector->base.state); to_dm_connector_state(aconnector->base.state);
struct dm_connector_state *con_new_state = struct dm_connector_state *con_new_state =
...@@ -4746,15 +4746,15 @@ int amdgpu_dm_atomic_check(struct drm_device *dev, ...@@ -4746,15 +4746,15 @@ int amdgpu_dm_atomic_check(struct drm_device *dev,
static bool is_dp_capable_without_timing_msa( static bool is_dp_capable_without_timing_msa(
struct dc *dc, struct dc *dc,
struct amdgpu_connector *amdgpu_connector) struct amdgpu_dm_connector *amdgpu_dm_connector)
{ {
uint8_t dpcd_data; uint8_t dpcd_data;
bool capable = false; bool capable = false;
if (amdgpu_connector->dc_link && if (amdgpu_dm_connector->dc_link &&
dm_helpers_dp_read_dpcd( dm_helpers_dp_read_dpcd(
NULL, NULL,
amdgpu_connector->dc_link, amdgpu_dm_connector->dc_link,
DP_DOWN_STREAM_PORT_COUNT, DP_DOWN_STREAM_PORT_COUNT,
&dpcd_data, &dpcd_data,
sizeof(dpcd_data))) { sizeof(dpcd_data))) {
...@@ -4773,14 +4773,14 @@ void amdgpu_dm_add_sink_to_freesync_module( ...@@ -4773,14 +4773,14 @@ void amdgpu_dm_add_sink_to_freesync_module(
struct detailed_timing *timing; struct detailed_timing *timing;
struct detailed_non_pixel *data; struct detailed_non_pixel *data;
struct detailed_data_monitor_range *range; struct detailed_data_monitor_range *range;
struct amdgpu_connector *amdgpu_connector = struct amdgpu_dm_connector *amdgpu_dm_connector =
to_amdgpu_connector(connector); to_amdgpu_dm_connector(connector);
struct drm_device *dev = connector->dev; struct drm_device *dev = connector->dev;
struct amdgpu_device *adev = dev->dev_private; struct amdgpu_device *adev = dev->dev_private;
edid_check_required = false; 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"); DRM_ERROR("dc_sink NULL, could not add free_sync module.\n");
return; return;
} }
...@@ -4790,11 +4790,11 @@ void amdgpu_dm_add_sink_to_freesync_module( ...@@ -4790,11 +4790,11 @@ void amdgpu_dm_add_sink_to_freesync_module(
* if edid non zero restrict freesync only for dp and edp * if edid non zero restrict freesync only for dp and edp
*/ */
if (edid) { if (edid) {
if (amdgpu_connector->dc_sink->sink_signal == SIGNAL_TYPE_DISPLAY_PORT if (amdgpu_dm_connector->dc_sink->sink_signal == SIGNAL_TYPE_DISPLAY_PORT
|| amdgpu_connector->dc_sink->sink_signal == SIGNAL_TYPE_EDP) { || amdgpu_dm_connector->dc_sink->sink_signal == SIGNAL_TYPE_EDP) {
edid_check_required = is_dp_capable_without_timing_msa( edid_check_required = is_dp_capable_without_timing_msa(
adev->dm.dc, adev->dm.dc,
amdgpu_connector); amdgpu_dm_connector);
} }
} }
val_capable = 0; val_capable = 0;
...@@ -4819,20 +4819,20 @@ void amdgpu_dm_add_sink_to_freesync_module( ...@@ -4819,20 +4819,20 @@ void amdgpu_dm_add_sink_to_freesync_module(
if (range->flags != 1) if (range->flags != 1)
continue; continue;
amdgpu_connector->min_vfreq = range->min_vfreq; amdgpu_dm_connector->min_vfreq = range->min_vfreq;
amdgpu_connector->max_vfreq = range->max_vfreq; amdgpu_dm_connector->max_vfreq = range->max_vfreq;
amdgpu_connector->pixel_clock_mhz = amdgpu_dm_connector->pixel_clock_mhz =
range->pixel_clock_mhz * 10; range->pixel_clock_mhz * 10;
break; break;
} }
if (amdgpu_connector->max_vfreq - if (amdgpu_dm_connector->max_vfreq -
amdgpu_connector->min_vfreq > 10) { amdgpu_dm_connector->min_vfreq > 10) {
amdgpu_connector->caps.supported = true; amdgpu_dm_connector->caps.supported = true;
amdgpu_connector->caps.min_refresh_in_micro_hz = amdgpu_dm_connector->caps.min_refresh_in_micro_hz =
amdgpu_connector->min_vfreq * 1000000; amdgpu_dm_connector->min_vfreq * 1000000;
amdgpu_connector->caps.max_refresh_in_micro_hz = amdgpu_dm_connector->caps.max_refresh_in_micro_hz =
amdgpu_connector->max_vfreq * 1000000; amdgpu_dm_connector->max_vfreq * 1000000;
val_capable = 1; val_capable = 1;
} }
} }
......
...@@ -147,6 +147,50 @@ struct amdgpu_display_manager { ...@@ -147,6 +147,50 @@ struct amdgpu_display_manager {
#endif #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 */ /* basic init/fini API */
int amdgpu_dm_init(struct amdgpu_device *adev); int amdgpu_dm_init(struct amdgpu_device *adev);
...@@ -178,9 +222,9 @@ void amdgpu_dm_register_backlight_device(struct amdgpu_display_manager *dm); ...@@ -178,9 +222,9 @@ void amdgpu_dm_register_backlight_device(struct amdgpu_display_manager *dm);
extern const struct amdgpu_ip_block_version dm_ip_block; extern const struct amdgpu_ip_block_version dm_ip_block;
void amdgpu_dm_update_connector_after_detect( 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_atomic_state *state,
struct drm_crtc *crtc, struct drm_crtc *crtc,
bool from_state_var); bool from_state_var);
...@@ -193,7 +237,6 @@ struct dc_plane_state; ...@@ -193,7 +237,6 @@ struct dc_plane_state;
/* TODO rename to dc_stream_state */ /* TODO rename to dc_stream_state */
struct dc_stream; struct dc_stream;
struct dm_plane_state { struct dm_plane_state {
struct drm_plane_state base; struct drm_plane_state base;
struct dc_plane_state *dc_state; struct dc_plane_state *dc_state;
...@@ -223,7 +266,7 @@ int amdgpu_dm_crtc_init(struct amdgpu_display_manager *dm, ...@@ -223,7 +266,7 @@ int amdgpu_dm_crtc_init(struct amdgpu_display_manager *dm,
struct drm_plane *plane, struct drm_plane *plane,
uint32_t link_index); uint32_t link_index);
int amdgpu_dm_connector_init(struct amdgpu_display_manager *dm, 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, uint32_t link_index,
struct amdgpu_encoder *amdgpu_encoder); struct amdgpu_encoder *amdgpu_encoder);
int amdgpu_dm_encoder_init( int amdgpu_dm_encoder_init(
...@@ -267,7 +310,7 @@ int amdgpu_dm_get_encoder_crtc_mask(struct amdgpu_device *adev); ...@@ -267,7 +310,7 @@ int amdgpu_dm_get_encoder_crtc_mask(struct amdgpu_device *adev);
void amdgpu_dm_connector_init_helper( void amdgpu_dm_connector_init_helper(
struct amdgpu_display_manager *dm, struct amdgpu_display_manager *dm,
struct amdgpu_connector *aconnector, struct amdgpu_dm_connector *aconnector,
int connector_type, int connector_type,
struct dc_link *link, struct dc_link *link,
int link_index); int link_index);
......
...@@ -133,7 +133,7 @@ enum dc_edid_status dm_helpers_parse_edid_caps( ...@@ -133,7 +133,7 @@ enum dc_edid_status dm_helpers_parse_edid_caps(
} }
static void get_payload_table( static void get_payload_table(
struct amdgpu_connector *aconnector, struct amdgpu_dm_connector *aconnector,
struct dp_mst_stream_allocation_table *proposed_table) struct dp_mst_stream_allocation_table *proposed_table)
{ {
int i; int i;
...@@ -178,7 +178,7 @@ bool dm_helpers_dp_mst_write_payload_allocation_table( ...@@ -178,7 +178,7 @@ bool dm_helpers_dp_mst_write_payload_allocation_table(
struct dp_mst_stream_allocation_table *proposed_table, struct dp_mst_stream_allocation_table *proposed_table,
bool enable) bool enable)
{ {
struct amdgpu_connector *aconnector; struct amdgpu_dm_connector *aconnector;
struct drm_dp_mst_topology_mgr *mst_mgr; struct drm_dp_mst_topology_mgr *mst_mgr;
struct drm_dp_mst_port *mst_port; struct drm_dp_mst_port *mst_port;
int slots = 0; int slots = 0;
...@@ -266,7 +266,7 @@ bool dm_helpers_dp_mst_poll_for_allocation_change_trigger( ...@@ -266,7 +266,7 @@ bool dm_helpers_dp_mst_poll_for_allocation_change_trigger(
struct dc_context *ctx, struct dc_context *ctx,
const struct dc_stream_state *stream) const struct dc_stream_state *stream)
{ {
struct amdgpu_connector *aconnector; struct amdgpu_dm_connector *aconnector;
struct drm_dp_mst_topology_mgr *mst_mgr; struct drm_dp_mst_topology_mgr *mst_mgr;
int ret; int ret;
...@@ -293,7 +293,7 @@ bool dm_helpers_dp_mst_send_payload_allocation( ...@@ -293,7 +293,7 @@ bool dm_helpers_dp_mst_send_payload_allocation(
const struct dc_stream_state *stream, const struct dc_stream_state *stream,
bool enable) bool enable)
{ {
struct amdgpu_connector *aconnector; struct amdgpu_dm_connector *aconnector;
struct drm_dp_mst_topology_mgr *mst_mgr; struct drm_dp_mst_topology_mgr *mst_mgr;
struct drm_dp_mst_port *mst_port; struct drm_dp_mst_port *mst_port;
int ret; int ret;
...@@ -341,7 +341,7 @@ bool dm_helpers_dp_mst_start_top_mgr( ...@@ -341,7 +341,7 @@ bool dm_helpers_dp_mst_start_top_mgr(
const struct dc_link *link, const struct dc_link *link,
bool boot) bool boot)
{ {
struct amdgpu_connector *aconnector = link->priv; struct amdgpu_dm_connector *aconnector = link->priv;
if (!aconnector) { if (!aconnector) {
DRM_ERROR("Failed to found connector for link!"); DRM_ERROR("Failed to found connector for link!");
...@@ -364,7 +364,7 @@ void dm_helpers_dp_mst_stop_top_mgr( ...@@ -364,7 +364,7 @@ void dm_helpers_dp_mst_stop_top_mgr(
struct dc_context *ctx, struct dc_context *ctx,
const struct dc_link *link) const struct dc_link *link)
{ {
struct amdgpu_connector *aconnector = link->priv; struct amdgpu_dm_connector *aconnector = link->priv;
if (!aconnector) { if (!aconnector) {
DRM_ERROR("Failed to found connector for link!"); DRM_ERROR("Failed to found connector for link!");
...@@ -386,7 +386,7 @@ bool dm_helpers_dp_read_dpcd( ...@@ -386,7 +386,7 @@ bool dm_helpers_dp_read_dpcd(
uint32_t size) uint32_t size)
{ {
struct amdgpu_connector *aconnector = link->priv; struct amdgpu_dm_connector *aconnector = link->priv;
if (!aconnector) { if (!aconnector) {
DRM_ERROR("Failed to found connector for link!"); DRM_ERROR("Failed to found connector for link!");
...@@ -404,7 +404,7 @@ bool dm_helpers_dp_write_dpcd( ...@@ -404,7 +404,7 @@ bool dm_helpers_dp_write_dpcd(
const uint8_t *data, const uint8_t *data,
uint32_t size) uint32_t size)
{ {
struct amdgpu_connector *aconnector = link->priv; struct amdgpu_dm_connector *aconnector = link->priv;
if (!aconnector) { if (!aconnector) {
DRM_ERROR("Failed to found connector for link!"); DRM_ERROR("Failed to found connector for link!");
...@@ -420,7 +420,7 @@ bool dm_helpers_submit_i2c( ...@@ -420,7 +420,7 @@ bool dm_helpers_submit_i2c(
const struct dc_link *link, const struct dc_link *link,
struct i2c_command *cmd) struct i2c_command *cmd)
{ {
struct amdgpu_connector *aconnector = link->priv; struct amdgpu_dm_connector *aconnector = link->priv;
struct i2c_msg *msgs; struct i2c_msg *msgs;
int i = 0; int i = 0;
int num = cmd->number_of_payloads; int num = cmd->number_of_payloads;
...@@ -455,7 +455,7 @@ enum dc_edid_status dm_helpers_read_local_edid( ...@@ -455,7 +455,7 @@ enum dc_edid_status dm_helpers_read_local_edid(
struct dc_link *link, struct dc_link *link,
struct dc_sink *sink) struct dc_sink *sink)
{ {
struct amdgpu_connector *aconnector = link->priv; struct amdgpu_dm_connector *aconnector = link->priv;
struct i2c_adapter *ddc; struct i2c_adapter *ddc;
int retry = 3; int retry = 3;
enum dc_edid_status edid_status; enum dc_edid_status edid_status;
......
...@@ -787,10 +787,10 @@ void amdgpu_dm_hpd_init(struct amdgpu_device *adev) ...@@ -787,10 +787,10 @@ void amdgpu_dm_hpd_init(struct amdgpu_device *adev)
struct drm_connector *connector; struct drm_connector *connector;
list_for_each_entry(connector, &dev->mode_config.connector_list, head) { list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
struct amdgpu_connector *amdgpu_connector = struct amdgpu_dm_connector *amdgpu_dm_connector =
to_amdgpu_connector(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) { if (DC_IRQ_SOURCE_INVALID != dc_link->irq_source_hpd) {
dc_interrupt_set(adev->dm.dc, dc_interrupt_set(adev->dm.dc,
...@@ -820,9 +820,9 @@ void amdgpu_dm_hpd_fini(struct amdgpu_device *adev) ...@@ -820,9 +820,9 @@ void amdgpu_dm_hpd_fini(struct amdgpu_device *adev)
struct drm_connector *connector; struct drm_connector *connector;
list_for_each_entry(connector, &dev->mode_config.connector_list, head) { list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
struct amdgpu_connector *amdgpu_connector = struct amdgpu_dm_connector *amdgpu_dm_connector =
to_amdgpu_connector(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;
dc_interrupt_set(adev->dm.dc, dc_link->irq_source_hpd, false); dc_interrupt_set(adev->dm.dc, dc_link->irq_source_hpd, false);
......
...@@ -137,8 +137,8 @@ static ssize_t dm_dp_aux_transfer(struct drm_dp_aux *aux, struct drm_dp_aux_msg ...@@ -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 static enum drm_connector_status
dm_dp_mst_detect(struct drm_connector *connector, bool force) dm_dp_mst_detect(struct drm_connector *connector, bool force)
{ {
struct amdgpu_connector *aconnector = to_amdgpu_connector(connector); struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
struct amdgpu_connector *master = aconnector->mst_port; struct amdgpu_dm_connector *master = aconnector->mst_port;
enum drm_connector_status status = enum drm_connector_status status =
drm_dp_mst_detect_port( drm_dp_mst_detect_port(
...@@ -152,13 +152,13 @@ dm_dp_mst_detect(struct drm_connector *connector, bool force) ...@@ -152,13 +152,13 @@ dm_dp_mst_detect(struct drm_connector *connector, bool force)
static void static void
dm_dp_mst_connector_destroy(struct drm_connector *connector) dm_dp_mst_connector_destroy(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 amdgpu_encoder *amdgpu_encoder = amdgpu_connector->mst_encoder; struct amdgpu_encoder *amdgpu_encoder = amdgpu_dm_connector->mst_encoder;
drm_encoder_cleanup(&amdgpu_encoder->base); drm_encoder_cleanup(&amdgpu_encoder->base);
kfree(amdgpu_encoder); kfree(amdgpu_encoder);
drm_connector_cleanup(connector); drm_connector_cleanup(connector);
kfree(amdgpu_connector); kfree(amdgpu_dm_connector);
} }
static const struct drm_connector_funcs dm_dp_mst_connector_funcs = { static const struct drm_connector_funcs dm_dp_mst_connector_funcs = {
...@@ -174,7 +174,7 @@ static const struct drm_connector_funcs dm_dp_mst_connector_funcs = { ...@@ -174,7 +174,7 @@ static const struct drm_connector_funcs dm_dp_mst_connector_funcs = {
static int dm_dp_mst_get_modes(struct drm_connector *connector) 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; int ret = 0;
ret = drm_add_edid_modes(&aconnector->base, aconnector->edid); ret = drm_add_edid_modes(&aconnector->base, aconnector->edid);
...@@ -186,9 +186,9 @@ static int dm_dp_mst_get_modes(struct drm_connector *connector) ...@@ -186,9 +186,9 @@ static int dm_dp_mst_get_modes(struct drm_connector *connector)
static struct drm_encoder *dm_mst_best_encoder(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 = { static const struct drm_connector_helper_funcs dm_dp_mst_connector_helper_funcs = {
...@@ -198,7 +198,7 @@ static const struct drm_connector_helper_funcs dm_dp_mst_connector_helper_funcs ...@@ -198,7 +198,7 @@ static const struct drm_connector_helper_funcs dm_dp_mst_connector_helper_funcs
}; };
static struct amdgpu_encoder * 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 drm_device *dev = connector->base.dev;
struct amdgpu_device *adev = dev->dev_private; struct amdgpu_device *adev = dev->dev_private;
...@@ -233,15 +233,15 @@ static struct drm_connector *dm_dp_add_mst_connector(struct drm_dp_mst_topology_ ...@@ -233,15 +233,15 @@ static struct drm_connector *dm_dp_add_mst_connector(struct drm_dp_mst_topology_
struct drm_dp_mst_port *port, struct drm_dp_mst_port *port,
const char *pathprop) 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 drm_device *dev = master->base.dev;
struct amdgpu_device *adev = dev->dev_private; struct amdgpu_device *adev = dev->dev_private;
struct amdgpu_connector *aconnector; struct amdgpu_dm_connector *aconnector;
struct drm_connector *connector; struct drm_connector *connector;
drm_modeset_lock(&dev->mode_config.connection_mutex, NULL); drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
list_for_each_entry(connector, &dev->mode_config.connector_list, head) { 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 if (aconnector->mst_port == master
&& !aconnector->port) { && !aconnector->port) {
DRM_INFO("DM_MST: reusing connector: %p [id: %d] [master: %p]\n", DRM_INFO("DM_MST: reusing connector: %p [id: %d] [master: %p]\n",
...@@ -315,7 +315,7 @@ static void dm_dp_destroy_mst_connector( ...@@ -315,7 +315,7 @@ static void dm_dp_destroy_mst_connector(
struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_topology_mgr *mgr,
struct drm_connector *connector) 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", DRM_INFO("DM_MST: Disabling connector: %p [id: %d] [master: %p]\n",
aconnector, connector->base.id, aconnector->mst_port); aconnector, connector->base.id, aconnector->mst_port);
...@@ -339,17 +339,17 @@ static void dm_dp_destroy_mst_connector( ...@@ -339,17 +339,17 @@ static void dm_dp_destroy_mst_connector(
static void dm_dp_mst_hotplug(struct drm_dp_mst_topology_mgr *mgr) 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 drm_device *dev = master->base.dev;
struct amdgpu_device *adev = dev->dev_private; struct amdgpu_device *adev = dev->dev_private;
struct drm_connector *connector; struct drm_connector *connector;
struct amdgpu_connector *aconnector; struct amdgpu_dm_connector *aconnector;
struct edid *edid; struct edid *edid;
struct dc_sink *dc_sink; struct dc_sink *dc_sink;
drm_modeset_lock_all(dev); drm_modeset_lock_all(dev);
list_for_each_entry(connector, &dev->mode_config.connector_list, head) { 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 && if (aconnector->port &&
aconnector->port->pdt != DP_PEER_DEVICE_NONE && aconnector->port->pdt != DP_PEER_DEVICE_NONE &&
aconnector->port->pdt != DP_PEER_DEVICE_MST_BRANCHING && aconnector->port->pdt != DP_PEER_DEVICE_MST_BRANCHING &&
...@@ -440,7 +440,7 @@ static const struct drm_dp_mst_topology_cbs dm_mst_cbs = { ...@@ -440,7 +440,7 @@ static const struct drm_dp_mst_topology_cbs dm_mst_cbs = {
void amdgpu_dm_initialize_dp_connector( void amdgpu_dm_initialize_dp_connector(
struct amdgpu_display_manager *dm, 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.name = "dmdc";
aconnector->dm_dp_aux.aux.dev = dm->adev->dev; aconnector->dm_dp_aux.aux.dev = dm->adev->dev;
......
...@@ -27,10 +27,10 @@ ...@@ -27,10 +27,10 @@
#define __DAL_AMDGPU_DM_MST_TYPES_H__ #define __DAL_AMDGPU_DM_MST_TYPES_H__
struct amdgpu_display_manager; struct amdgpu_display_manager;
struct amdgpu_connector; struct amdgpu_dm_connector;
void amdgpu_dm_initialize_dp_connector( void amdgpu_dm_initialize_dp_connector(
struct amdgpu_display_manager *dm, struct amdgpu_display_manager *dm,
struct amdgpu_connector *aconnector); struct amdgpu_dm_connector *aconnector);
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment