From patchwork Thu Jul 19 21:34:52 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alex Deucher X-Patchwork-Id: 1218791 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by patchwork1.kernel.org (Postfix) with ESMTP id 33D6A3FD48 for ; Thu, 19 Jul 2012 21:35:14 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 0F3369EF9E for ; Thu, 19 Jul 2012 14:35:14 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wi0-f177.google.com (mail-wi0-f177.google.com [209.85.212.177]) by gabe.freedesktop.org (Postfix) with ESMTP id B17A39E951 for ; Thu, 19 Jul 2012 14:34:53 -0700 (PDT) Received: by wibhm11 with SMTP id hm11so2296164wib.12 for ; Thu, 19 Jul 2012 14:34:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=o4o7CGWu5Bsxum+VQFk206O8zsXUI5/Powm80hiW5j4=; b=ZsZt9H2MXlZ201NB7cbbSlcpzlJnDLSXh70kP/kbcBdh3ht7X2cLHRtoSc6bW0nlNJ 37hFO6vG1Sn2vrebQ81Rxvz8IrwMIqIrLvb+umaQd91AQIFFwiiX20MNqKZk8y1mcceL 834NkipgRSZSOdGQ/Cy4vc7842ydkTkXxBU1kwBbns5q4F4Gzc2QEcLVYZFlt+fPTNo/ RRNN5Aw4At+zIQV0q27/xB3yFt8dpgr1qZRJI04LWc/G1oT7AP2k3bEfwTJPLb5RDjuU GJBN918ecBzpS3RzVm3LZVHVIxPZBy9wPbBCkEcfATia4Nf7XABCIh92Zbut9YeSY4PX Re3g== MIME-Version: 1.0 Received: by 10.180.83.106 with SMTP id p10mr19542537wiy.21.1342733692638; Thu, 19 Jul 2012 14:34:52 -0700 (PDT) Received: by 10.227.202.80 with HTTP; Thu, 19 Jul 2012 14:34:52 -0700 (PDT) In-Reply-To: <1342732342-3896-1-git-send-email-j.glisse@gmail.com> References: <1342732342-3896-1-git-send-email-j.glisse@gmail.com> Date: Thu, 19 Jul 2012 17:34:52 -0400 Message-ID: Subject: Re: [PATCH] drm/radeon: hotplug of passive dp to dvi|hdmi|vga adaptor From: Alex Deucher To: j.glisse@gmail.com Cc: Jerome Glisse , stable@vger.kernel.org, dri-devel@lists.freedesktop.org X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org Errors-To: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org On Thu, Jul 19, 2012 at 5:12 PM, wrote: > From: Jerome Glisse > > We should not turn off the connector neither try to retrain DP link > if a passive DP adaptor is connected to a DP port. > > Cc: > Signed-off-by: Jerome Glisse Looks good although we should probably wait to assign radeon_connector_atom_dig until we know we have a digital connector. How about the attached patches (also a follow up on your patch from yesterday)? Alex > --- > drivers/gpu/drm/radeon/radeon_connectors.c | 22 ++++++++++++++++++++-- > 1 file changed, 20 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c > index 2914c57..890cf1d 100644 > --- a/drivers/gpu/drm/radeon/radeon_connectors.c > +++ b/drivers/gpu/drm/radeon/radeon_connectors.c > @@ -49,6 +49,7 @@ void radeon_connector_hotplug(struct drm_connector *connector) > struct drm_device *dev = connector->dev; > struct radeon_device *rdev = dev->dev_private; > struct radeon_connector *radeon_connector = to_radeon_connector(connector); > + struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv; > > /* bail if the connector does not have hpd pin, e.g., > * VGA, TV, etc. > @@ -62,15 +63,32 @@ void radeon_connector_hotplug(struct drm_connector *connector) > if (connector->dpms != DRM_MODE_DPMS_ON) > return; > > + /* don't do anything is sink is not display port > + * (passive dp->(dvi|hdmi|vga) adaptor > + */ > + if (radeon_dig_connector->dp_sink_type != CONNECTOR_OBJECT_ID_DISPLAYPORT) { > + return; > + } > + > /* just deal with DP (not eDP) here. */ > if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) { > int saved_dpms = connector->dpms; > > /* Only turn off the display it it's physically disconnected */ > - if (!radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) > + if (!radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) { > drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF); > - else if (radeon_dp_needs_link_train(radeon_connector)) > + } else if (radeon_dp_needs_link_train(radeon_connector)) { > + > + /* first get sink type as it's reset after unplug */ > + radeon_dig_connector->dp_sink_type = radeon_dp_getsinktype(radeon_connector); > + /* don't do anything is sink is not display port > + * (passive dp->(dvi|hdmi|vga) adaptor > + */ > + if (radeon_dig_connector->dp_sink_type != CONNECTOR_OBJECT_ID_DISPLAYPORT) { > + return; > + } > drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON); > + } > connector->dpms = saved_dpms; > } > } > -- > 1.7.10.4 > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/dri-devel From 9de839f3907cf04febdeed0e92528c729f4e735c Mon Sep 17 00:00:00 2001 From: Jerome Glisse Date: Thu, 19 Jul 2012 17:25:55 -0400 Subject: [PATCH 2/2] drm/radeon: on hotplug force link training to happen (v2) To have DP behave like VGA/DVI we need to retrain the link on hotplug. For this to happen we need to force link training to happen by setting connector dpms to off before asking it turning it on again. v2: agd5f - drop the dp_get_link_status() change in atombios_dp.c for now. We still need the dpms OFF change. Signed-off-by: Jerome Glisse Cc: stable@vger.kernel.org Signed-off-by: Alex Deucher --- drivers/gpu/drm/radeon/radeon_connectors.c | 10 ++++++++-- 1 files changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c index 3524f17..895e628 100644 --- a/drivers/gpu/drm/radeon/radeon_connectors.c +++ b/drivers/gpu/drm/radeon/radeon_connectors.c @@ -79,10 +79,16 @@ void radeon_connector_hotplug(struct drm_connector *connector) if (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) { int saved_dpms = connector->dpms; /* Only turn off the display if it's physically disconnected */ - if (!radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) + if (!radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) { drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF); - else if (radeon_dp_needs_link_train(radeon_connector)) + } else if (radeon_dp_needs_link_train(radeon_connector)) { + /* set it to OFF so that drm_helper_connector_dpms() + * won't return immediately since the current state + * is ON at this point. + */ + connector->dpms = DRM_MODE_DPMS_OFF; drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON); + } connector->dpms = saved_dpms; } } -- 1.7.7.5