[prev in list] [next in list] [prev in thread] [next in thread] 

List:       freedesktop-xorg
Subject:    Re: Two questions on radeon driver
From:       "Alex Deucher" <alexdeucher () gmail ! com>
Date:       2006-05-27 5:55:28
Message-ID: a728f9f90605262255qcacd26ftb33dd5512bee9436 () mail ! gmail ! com
[Download RAW message or body]

On 5/26/06, Henry Zhao <Henry.Zhao@sun.com> wrote:
> (1) In Merged FB mode, merged modes have negative refresh rates, see
>      [bug 6966].
>
>      When using GNOME/JDS, where, if MergedFB is used, you
>      will find negative refresh rates in desktop resolution selection
>      screen, resulting in not being able to select resolutions.
>
>      The cause of the problem seems to be inappropriate setting of clock
>      for the merged mode, as seen in this portion of code
>
>      mode->Clock = (((i->Clock >> 3) + i->HTotal) << 16) |
>                    ((j->Clock >> 2) + j->HTotal);
>      mode->Clock ^= ((i->VTotal << 19) | (j->VTotal << 3));
>
>      in RADEONCopyModeNLink() of radeon_mergedfb.c, where i and j
>      represent two modes to be merged, and the clock generated is a bogus
>      negative number. Can anyone tell me what this calculation means, and
>      where it comes from, this code starts showing up in version 1.5.
>      The clock is set to 0 prior to that.

This was so that you could have identical metamodes with differing
refresh rates.  Bogus clock values tricked the mode validator into
keeping the modes, otherwise they would get discarded.  There are
probably better ways to do it.

Alex

>
>      For a testing (in clone mode), using
>
>      mode->Clock = i->Clock
>
>      seems to fix the problem.
>
> (2) In RADEONQueryConnectedMonitors() of radeon_driver.c, when
>      monitor layout is found in config file, if the second head is
>      defined as CRT, then port info for both heads have to be
>      re-initialized as seen in:
>
>
>      if (pRADEONEnt->PortInfo[1].MonType == MT_CRT) {
>              pRADEONEnt->PortInfo[1].DACType = DAC_PRIMARY;
>              pRADEONEnt->PortInfo[1].TMDSType = TMDS_UNKNOWN;
>              pRADEONEnt->PortInfo[1].DDCType = DDC_VGA;
>              pRADEONEnt->PortInfo[1].ConnectorType = CONNECTOR_CRT;
>              pRADEONEnt->PortInfo[0].DACType = DAC_TVDAC;
>              pRADEONEnt->PortInfo[0].TMDSType = TMDS_UNKNOWN;
>              pRADEONEnt->PortInfo[0].DDCType = DDC_NONE_DETECTED;
>              pRADEONEnt->PortInfo[0].ConnectorType =
>              pRADEONEnt->PortInfo[0].MonType+1;
>              pRADEONEnt->PortInfo[0].MonInfo = NULL;
>      }
>
>      Why this should affect the primary head ?
>
>
>
> -Henry
>

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic