[PATCH v3 6/7] drm/amdgpu: utilize subconnector property for DP through atombios
Ville Syrjälä
ville.syrjala at linux.intel.com
Fri Aug 30 12:47:43 UTC 2019
On Thu, Aug 29, 2019 at 08:52:31AM -0400, Alex Deucher wrote:
> On Mon, Aug 26, 2019 at 9:22 AM Oleg Vasilev <oleg.vasilev at intel.com> wrote:
> >
> > Since DP-specific information is stored in driver's structures, every
> > driver needs to implement subconnector property by itself.
> >
> > Reviewed-by: Emil Velikov <emil.velikov at collabora.com>
> > Signed-off-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
>
> Similar to Ilia's sentiments, do these make sense for amd drivers? We
> expose the physical connectors only. So physical DP ports show up as
> DP drm connectors and if you connect a passive DP to HDMI/DVI dingle,
> the driver just does the right thing. We don't expose multiple drm
> connectors for the same physical connector.
After a bit more though I guess you could just
if (detected DP)
set_subconnector_prop(DFP type);
else if (detected HDMI)
set_subconnector_prop(HDMI)
>
> Alex
>
> > ---
> > drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c | 10 ++++++++++
> > drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h | 1 +
> > drivers/gpu/drm/amd/amdgpu/atombios_dp.c | 18 +++++++++++++++++-
> > 3 files changed, 28 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
> > index ece55c8fa673..348ed9e46bae 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
> > @@ -26,6 +26,7 @@
> >
> > #include <drm/drm_edid.h>
> > #include <drm/drm_fb_helper.h>
> > +#include <drm/drm_dp_helper.h>
> > #include <drm/drm_probe_helper.h>
> > #include <drm/amdgpu_drm.h>
> > #include "amdgpu.h"
> > @@ -1407,6 +1408,10 @@ amdgpu_connector_dp_detect(struct drm_connector *connector, bool force)
> > pm_runtime_put_autosuspend(connector->dev->dev);
> > }
> >
> > + drm_dp_set_subconnector_property(&amdgpu_connector->base,
> > + ret,
> > + amdgpu_dig_connector->dpcd,
> > + amdgpu_dig_connector->downstream_ports);
> > return ret;
> > }
> >
> > @@ -1934,6 +1939,11 @@ amdgpu_connector_add(struct amdgpu_device *adev,
> > if (has_aux)
> > amdgpu_atombios_dp_aux_init(amdgpu_connector);
> >
> > + if (connector_type == DRM_MODE_CONNECTOR_DisplayPort ||
> > + connector_type == DRM_MODE_CONNECTOR_eDP) {
> > + drm_mode_add_dp_subconnector_property(&amdgpu_connector->base);
> > + }
> > +
> > return;
> >
> > failed:
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
> > index eb9975f4decb..cb360b44371c 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
> > @@ -469,6 +469,7 @@ struct amdgpu_encoder {
> > struct amdgpu_connector_atom_dig {
> > /* displayport */
> > u8 dpcd[DP_RECEIVER_CAP_SIZE];
> > + u8 downstream_ports[DP_MAX_DOWNSTREAM_PORTS];
> > u8 dp_sink_type;
> > int dp_clock;
> > int dp_lane_count;
> > diff --git a/drivers/gpu/drm/amd/amdgpu/atombios_dp.c b/drivers/gpu/drm/amd/amdgpu/atombios_dp.c
> > index 6858cde9fc5d..b0d414553e71 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/atombios_dp.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/atombios_dp.c
> > @@ -334,6 +334,22 @@ static void amdgpu_atombios_dp_probe_oui(struct amdgpu_connector *amdgpu_connect
> > buf[0], buf[1], buf[2]);
> > }
> >
> > +static void amdgpu_atombios_dp_ds_ports(struct amdgpu_connector *amdgpu_connector)
> > +{
> > + struct amdgpu_connector_atom_dig *dig_connector = amdgpu_connector->con_priv;
> > + int ret;
> > +
> > + if (dig_connector->dpcd[DP_DPCD_REV] > 0x10) {
> > + ret = drm_dp_dpcd_read(&amdgpu_connector->ddc_bus->aux,
> > + DP_DOWNSTREAM_PORT_0,
> > + dig_connector->downstream_ports,
> > + DP_MAX_DOWNSTREAM_PORTS);
> > + if (ret)
> > + memset(dig_connector->downstream_ports, 0,
> > + DP_MAX_DOWNSTREAM_PORTS);
> > + }
> > +}
> > +
> > int amdgpu_atombios_dp_get_dpcd(struct amdgpu_connector *amdgpu_connector)
> > {
> > struct amdgpu_connector_atom_dig *dig_connector = amdgpu_connector->con_priv;
> > @@ -349,7 +365,7 @@ int amdgpu_atombios_dp_get_dpcd(struct amdgpu_connector *amdgpu_connector)
> > dig_connector->dpcd);
> >
> > amdgpu_atombios_dp_probe_oui(amdgpu_connector);
> > -
> > + amdgpu_atombios_dp_ds_ports(amdgpu_connector);
> > return 0;
> > }
> >
> > --
> > 2.23.0
> >
> > _______________________________________________
> > amd-gfx mailing list
> > amd-gfx at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/amd-gfx
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
--
Ville Syrjälä
Intel
More information about the amd-gfx
mailing list