Two questions on radeon driver

Alex Deucher alexdeucher at gmail.com
Fri May 26 22:55:28 PDT 2006


On 5/26/06, Henry Zhao <Henry.Zhao at 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
>



More information about the xorg mailing list