[PATCH 5/5] drm/amdgpu: utilize subconnector property for DP through DisplayManager

Alex Deucher alexdeucher at gmail.com
Wed Apr 1 15:21:06 UTC 2020


On Wed, Apr 1, 2020 at 8:17 AM Jeevan B <jeevan.b at intel.com> wrote:
>
> Since DP-specific information is stored in driver's structures, every
> driver needs to implement subconnector property by itself. Display
> Core already has the subconnector information, we only need to
> expose it through DRM property.
>
> Signed-off-by: Oleg Vasilev <oleg.vasilev at intel.com>
> Tested-by: Oleg Vasilev <oleg.vasilev at intel.com>
> Cc: Alex Deucher <alexander.deucher at amd.com>
> Cc: Christian König <christian.koenig at amd.com>
> Cc: David (ChunMing) Zhou <David1.Zhou at amd.com>
> Cc: amd-gfx at lists.freedesktop.org
> Signed-off-by: Jeevan B <jeevan.b at intel.com>
> Link: https://patchwork.freedesktop.org/patch/msgid/20190829114854.1539-7-oleg.vasilev@intel.com

Is this just a resend or a new version?  If it's new can you send out
the entire series to the mailing list instead of individual
developers?

Also, what are the subconnectors used for?  Just informational?

Alex

> ---
>  drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c  | 41 +++++++++++++++++++++-
>  .../amd/display/amdgpu_dm/amdgpu_dm_mst_types.c    |  3 ++
>  2 files changed, 43 insertions(+), 1 deletion(-)
>
> 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 d3674d8..91c0ef2 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -121,6 +121,42 @@ MODULE_FIRMWARE(FIRMWARE_NAVI12_DMCU);
>  static int amdgpu_dm_init(struct amdgpu_device *adev);
>  static void amdgpu_dm_fini(struct amdgpu_device *adev);
>
> +static enum drm_mode_subconnector get_subconnector_type(struct dc_link *link)
> +{
> +       switch (link->dpcd_caps.dongle_type) {
> +       case DISPLAY_DONGLE_NONE:
> +               return DRM_MODE_SUBCONNECTOR_Native;
> +       case DISPLAY_DONGLE_DP_VGA_CONVERTER:
> +               return DRM_MODE_SUBCONNECTOR_VGA;
> +       case DISPLAY_DONGLE_DP_DVI_CONVERTER:
> +       case DISPLAY_DONGLE_DP_DVI_DONGLE:
> +               return DRM_MODE_SUBCONNECTOR_DVID;
> +       case DISPLAY_DONGLE_DP_HDMI_CONVERTER:
> +       case DISPLAY_DONGLE_DP_HDMI_DONGLE:
> +               return DRM_MODE_SUBCONNECTOR_HDMIA;
> +       case DISPLAY_DONGLE_DP_HDMI_MISMATCHED_DONGLE:
> +       default:
> +               return DRM_MODE_SUBCONNECTOR_Unknown;
> +       }
> +}
> +
> +static void update_subconnector_property(struct amdgpu_dm_connector *aconnector)
> +{
> +       struct dc_link *link = aconnector->dc_link;
> +       struct drm_connector *connector = &aconnector->base;
> +       enum drm_mode_subconnector subconnector = DRM_MODE_SUBCONNECTOR_Unknown;
> +
> +       if (connector->connector_type != DRM_MODE_CONNECTOR_DisplayPort)
> +               return;
> +
> +       if (aconnector->dc_sink)
> +               subconnector = get_subconnector_type(link);
> +
> +       drm_object_property_set_value(&connector->base,
> +                       connector->dev->mode_config.dp_subconnector_property,
> +                       subconnector);
> +}
> +
>  /*
>   * initializes drm_device display related structures, based on the information
>   * provided by DAL. The drm strcutures are: drm_crtc, drm_connector,
> @@ -1917,7 +1953,6 @@ void amdgpu_dm_update_connector_after_detect(
>         if (aconnector->mst_mgr.mst_state == true)
>                 return;
>
> -
>         sink = aconnector->dc_link->local_sink;
>         if (sink)
>                 dc_sink_retain(sink);
> @@ -2038,6 +2073,8 @@ void amdgpu_dm_update_connector_after_detect(
>
>         mutex_unlock(&dev->mode_config.mutex);
>
> +       update_subconnector_property(aconnector);
> +
>         if (sink)
>                 dc_sink_release(sink);
>  }
> @@ -4518,6 +4555,8 @@ amdgpu_dm_connector_detect(struct drm_connector *connector, bool force)
>         else
>                 connected = (aconnector->base.force == DRM_FORCE_ON);
>
> +       update_subconnector_property(aconnector);
> +
>         return (connected ? connector_status_connected :
>                         connector_status_disconnected);
>  }
> 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 e8208df..dab81a6 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
> @@ -26,6 +26,7 @@
>  #include <linux/version.h>
>  #include <drm/drm_atomic_helper.h>
>  #include <drm/drm_dp_mst_helper.h>
> +#include <drm/drm_dp_helper.h>
>  #include "dm_services.h"
>  #include "amdgpu.h"
>  #include "amdgpu_dm.h"
> @@ -485,6 +486,8 @@ void amdgpu_dm_initialize_dp_connector(struct amdgpu_display_manager *dm,
>                 16,
>                 4,
>                 aconnector->connector_id);
> +
> +       drm_mode_add_dp_subconnector_property(&aconnector->base);
>  }
>
>  int dm_mst_get_pbn_divider(struct dc_link *link)
> --
> 2.7.4
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


More information about the amd-gfx mailing list