From 0bbf8cfd004910d6cdb502c3147d3a4acac0bf52 Mon Sep 17 00:00:00 2001 From: Eric Yang Date: Mon, 1 Feb 2016 16:32:21 -0500 Subject: [PATCH 0755/1110] drm/amd/dal: add kernel version control for mst resolve 4.2 dependencies when using dkms Signed-off-by: Eric Yang Reviewed-by: Harry Wentland --- drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c | 2 +- .../gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_helpers.c | 29 +++++++++++++++++++++- .../drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c | 11 ++++++-- 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c index 47de461..c758fc6 100644 --- a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm.c @@ -608,7 +608,7 @@ static void detect_link_for_all_connectors(struct drm_device *dev) drm_modeset_lock(&dev->mode_config.connection_mutex, NULL); - drm_for_each_connector(connector, dev) { + list_for_each_entry(connector, &dev->mode_config.connector_list, head) { aconnector = to_amdgpu_connector(connector); if (aconnector->dc_link->type == dc_connection_mst_branch) { DRM_INFO("DM_MST: starting TM on aconnector: %p [id: %d]\n", diff --git a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_helpers.c b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_helpers.c index e2c68fd..bbc60a6 100644 --- a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_helpers.c +++ b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_helpers.c @@ -25,6 +25,7 @@ #include #include +#include #include #include @@ -126,7 +127,7 @@ enum dc_edid_status dm_helpers_parse_edid_caps( return result; } - +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0) static struct amdgpu_connector *get_connector_for_sink( struct drm_device *dev, const struct dc_sink *sink) @@ -142,6 +143,7 @@ static struct amdgpu_connector *get_connector_for_sink( return aconnector; } +#endif static struct amdgpu_connector *get_connector_for_link( struct drm_device *dev, @@ -159,6 +161,8 @@ static struct amdgpu_connector *get_connector_for_link( return aconnector; } + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0) static void get_payload_table( struct amdgpu_connector *aconnector, struct dp_mst_stream_allocation_table *proposed_table) @@ -195,6 +199,7 @@ static void get_payload_table( mutex_unlock(&mst_mgr->payload_lock); } +#endif /* * Writes payload allocation table in immediate downstream device. @@ -205,6 +210,7 @@ bool dm_helpers_dp_mst_write_payload_allocation_table( struct dp_mst_stream_allocation_table *proposed_table, bool enable) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0) struct amdgpu_device *adev = ctx->driver_context; struct drm_device *dev = adev->ddev; struct amdgpu_connector *aconnector; @@ -284,6 +290,9 @@ bool dm_helpers_dp_mst_write_payload_allocation_table( return false; return true; +#else + return false; +#endif } /* @@ -294,6 +303,7 @@ bool dm_helpers_dp_mst_poll_for_allocation_change_trigger( struct dc_context *ctx, const struct dc_stream *stream) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0) struct amdgpu_device *adev = ctx->driver_context; struct drm_device *dev = adev->ddev; struct amdgpu_connector *aconnector; @@ -316,6 +326,9 @@ bool dm_helpers_dp_mst_poll_for_allocation_change_trigger( return false; return true; +#else + return false; +#endif } bool dm_helpers_dp_mst_send_payload_allocation( @@ -323,6 +336,7 @@ bool dm_helpers_dp_mst_send_payload_allocation( const struct dc_stream *stream, bool enable) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0) struct amdgpu_device *adev = ctx->driver_context; struct drm_device *dev = adev->ddev; struct amdgpu_connector *aconnector; @@ -351,10 +365,14 @@ bool dm_helpers_dp_mst_send_payload_allocation( drm_dp_mst_deallocate_vcpi(mst_mgr, mst_port); return true; +#else + return false; +#endif } void dm_helpers_dp_mst_handle_mst_hpd_rx_irq(void *param) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0) uint8_t esi[8] = { 0 }; uint8_t dret; bool new_irq_handled = true; @@ -393,6 +411,9 @@ void dm_helpers_dp_mst_handle_mst_hpd_rx_irq(void *param) DP_SINK_COUNT_ESI, esi, 8); } } +#else + return false; +#endif } bool dm_helpers_dp_mst_start_top_mgr( @@ -400,6 +421,7 @@ bool dm_helpers_dp_mst_start_top_mgr( const struct dc_link *link, bool boot) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0) struct amdgpu_device *adev = ctx->driver_context; struct drm_device *dev = adev->ddev; struct amdgpu_connector *aconnector = get_connector_for_link(dev, link); @@ -414,12 +436,16 @@ bool dm_helpers_dp_mst_start_top_mgr( aconnector, aconnector->base.base.id); return (drm_dp_mst_topology_mgr_set_mst(&aconnector->mst_mgr, true) == 0); +#else + return false; +#endif } void dm_helpers_dp_mst_stop_top_mgr( struct dc_context *ctx, const struct dc_link *link) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0) struct amdgpu_device *adev = ctx->driver_context; struct drm_device *dev = adev->ddev; struct amdgpu_connector *aconnector = get_connector_for_link(dev, link); @@ -429,6 +455,7 @@ void dm_helpers_dp_mst_stop_top_mgr( if (aconnector->mst_mgr.mst_state == true) drm_dp_mst_topology_mgr_set_mst(&aconnector->mst_mgr, false); +#endif } bool dm_helper_dp_read_dpcd( diff --git a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c index 3f1d545..2362003 100644 --- a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c +++ b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c @@ -23,6 +23,7 @@ * */ +#include #include #include "dm_services.h" #include "amdgpu.h" @@ -32,6 +33,7 @@ #include "dc.h" #include "dm_helpers.h" + /* #define TRACE_DPCD */ #ifdef TRACE_DPCD @@ -114,6 +116,7 @@ static ssize_t dm_dp_aux_transfer(struct drm_dp_aux *aux, struct drm_dp_aux_msg return msg->size; } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0) static enum drm_connector_status dm_dp_mst_detect(struct drm_connector *connector, bool force) { @@ -323,7 +326,7 @@ static struct drm_connector *dm_dp_add_mst_connector(struct drm_dp_mst_topology_ struct drm_connector *connector; drm_modeset_lock(&dev->mode_config.connection_mutex, NULL); - drm_for_each_connector(connector, dev) { + list_for_each_entry(connector, &dev->mode_config.connector_list, head) { aconnector = to_amdgpu_connector(connector); if (aconnector->mst_port == master && !aconnector->port) { @@ -454,6 +457,8 @@ struct drm_dp_mst_topology_cbs dm_mst_cbs = { .hotplug = dm_dp_mst_hotplug, .register_connector = dm_dp_mst_register_connector }; +#endif + void amdgpu_dm_initialize_mst_connector( struct amdgpu_display_manager *dm, @@ -465,7 +470,7 @@ void amdgpu_dm_initialize_mst_connector( aconnector->dm_dp_aux.link_index = aconnector->connector_id; drm_dp_aux_register(&aconnector->dm_dp_aux.aux); - +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0) aconnector->mst_mgr.cbs = &dm_mst_cbs; drm_dp_mst_topology_mgr_init( &aconnector->mst_mgr, @@ -474,4 +479,6 @@ void amdgpu_dm_initialize_mst_connector( 16, 4, aconnector->connector_id); +#endif } + -- 2.7.4