[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