[RFC PATCH] Re: KMS:RV635:Radeon 3650HD graphics driver broken on a laptop when connected to a docking station and external display

Pasi Kärkkäinen pasik at iki.fi
Thu Jul 1 07:47:14 PDT 2010


On Thu, Jul 01, 2010 at 10:35:34AM -0400, Alex Deucher wrote:
> On Thu, Jul 1, 2010 at 10:07 AM, Pasi Kärkkäinen <pasik at iki.fi> wrote:
> > On Mon, Jun 21, 2010 at 09:18:01PM +0300, Pasi Kärkkäinen wrote:
> >> > >>
> >> > >> I am not sure your patch is right, my guess is that devices field of
> >> > >> radeon connector structure btw the HDMI & DVI connector are different
> >> > >> and thus that drm_detect_hdmi_monitor is not call. I expect it's normal
> >> > >> for the device field to be different (my understanding being that HDMI
> >> > >> will have one more bit set than the DVI connector). Bottom line is
> >> > >> i think we want to discard non hdmi connector just in case we face
> >> > >> shared connector.
> >> > >>
> >> > >> Alex would have to comment on the device field test, maybe your atombios
> >> > >> is broken. Does it works if instead of removing
> >> > >> if (connector == list_connector)
> >> > >>        continue;
> >> > >> You remove :
> >> > >> if (radeon_connector->devices == list_radeon_connector->devices)
> >> > >>
> >> > >> Also can you print the radeon_connector->devices of all your connector
> >> > >> so we can compare them.
> >> > >
> >> > > The code was for systems with shared ddc lines and shared encoders,
> >> > > but it looks like your system may have a shared ddc line and (sort of)
> >> > > non-shared encoders.  I suspect the DVI port is using UNIPHY A or A+B
> >> > > (for dual link) and HDMI is using UNIPHY link B.  It's probably
> >> > > actually using router objects (gpio toggle to switch gpio routing
> >> > > between physical ports), however support for that is not implemented
> >> > > yet which is why we have the current code.  Can you send me a copy of
> >> > > your vbios so I can verify?
> >> > >
> >> > > To access your vbios (as root):
> >> > > cd /sys/bus/pci/device/<pci bus id>
> >> > > echo 1 > rom
> >> > > cat rom > /tmp/vbios.rom
> >> > > echo 0 > rom
> >> >
> >> > Does the attached patch fix the issue?
> >> >
> >>
> >> Thanks for the patch. I'll try it when I'm back where the dock is.. will take a couple of days.
> >>
> >
> > Sorry it took a while.. I tried your patch now.
> > It seems to fix the problem!
> >
> > When you send it upstream please also CC it for 2.6.33/2.6.34 stable branches?
> > Just hoping to get the fix into Fedora 13..
> >
> 
> I've sent the patch to Dave and cc'ed stable.
> 

Great, thanks!

-- Pasi

> Alex
> 
> > -- Pasi
> >
> >>
> >>
> >> > From 557b452536c9390105539a264d342d963d71b087 Mon Sep 17 00:00:00 2001
> >> > From: Alex Deucher <alexdeucher at gmail.com>
> >> > Date: Mon, 21 Jun 2010 12:07:52 -0400
> >> > Subject: [PATCH] drm/radeon/kms: fix shared ddc handling
> >> > MIME-Version: 1.0
> >> > Content-Type: text/plain; charset=UTF-8
> >> > Content-Transfer-Encoding: 8bit
> >> >
> >> > Connectors with a shared ddc line can be connected to different
> >> > encoders.
> >> >
> >> > Reported by Pasi Kärkkäinen <pasik at iki.fi> on dri-devel
> >> >
> >> > Signed-off-by: Alex Deucher <alexdeucher at gmail.com>
> >> > ---
> >> >  drivers/gpu/drm/radeon/radeon_connectors.c |    4 +++-
> >> >  1 files changed, 3 insertions(+), 1 deletions(-)
> >> >
> >> > diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
> >> > index 0c7ccc6..f58f8bd 100644
> >> > --- a/drivers/gpu/drm/radeon/radeon_connectors.c
> >> > +++ b/drivers/gpu/drm/radeon/radeon_connectors.c
> >> > @@ -785,7 +785,9 @@ static enum drm_connector_status radeon_dvi_detect(struct drm_connector *connect
> >> >                                     if (connector == list_connector)
> >> >                                             continue;
> >> >                                     list_radeon_connector = to_radeon_connector(list_connector);
> >> > -                                   if (radeon_connector->devices == list_radeon_connector->devices) {
> >> > +                                   if (list_radeon_connector->shared_ddc &&
> >> > +                                       (list_radeon_connector->ddc_bus->rec.i2c_id ==
> >> > +                                        radeon_connector->ddc_bus->rec.i2c_id)) {
> >> >                                             if (drm_detect_hdmi_monitor(radeon_connector->edid)) {
> >> >                                                     if (connector->connector_type == DRM_MODE_CONNECTOR_DVID) {
> >> >                                                             kfree(radeon_connector->edid);
> >> > --
> >> > 1.7.0.1
> >> >
> >>
> >


More information about the dri-devel mailing list