"DVI-0 Disconnceted" with DVI-to-VGA on analog CRT [Fixed]

Alex Deucher alexdeucher at gmail.com
Mon Jul 27 10:58:17 PDT 2009


On Sat, Jul 25, 2009 at 9:48 PM, Coadey<coadey at gmail.com> wrote:
> Coadey wrote:
>>
>> Alex Deucher wrote:
>>>
>>> On Sat, Jul 25, 2009 at 3:05 PM, Coadey<coadey at gmail.com> wrote:
>>>
>>>>
>>>> A Radeon X1550 (RV505) with one DVI port works great with a VGA
>>>> multisync CRT and DVI-to-VGA adapter. Custom modelines, vsync and direct
>>>> render are perfect, with xrandr reporting "DVI-0 connected".
>>>>
>>>> However with a different monitor (an analog arcade CRT), xrandr reports
>>>> "DVI-0 disconnected" and lists only a single defined mode, which does
>>>> display properly. I've tried several different cables and DVI-to-VGA
>>>> adapters.
>>>>
>>>> I'm confident the problem is software, as it worked under the last
>>>> radeon driver I used (most likely current git in early March).  I'm now
>>>> on Debian Sid, 2.6.30-1-686-bigmem, and up-to yesterdays git of
>>>> xf86-video-ati (2009-07-24).
>>>>
>>>> xrandr --verbose:   http://pastebin.com/f2d18e989
>>>> xorg.conf:   http://pastebin.com/f1ed6090a
>>>> Xorg.0.log:   http://pastebin.com/f180397bd
>>>> lspci -v:   http://pastebin.com/f77fe0021
>>>> dmesg:   http://pastebin.com/f53a7facf
>>>> dpkg -l:   http://pastebin.com/m7b7f4fca
>>>>
>>>> Besides xorg.conf changes, I've tried "nomodeset" under the kernel, and
>>>>
>>>> xrandr --output DVI-0 --set load_detection 0
>>>> xrandr --output DVI-0 --set dvi_monitor_type analog
>>>>
>>>> (Both produce: X Error of failed request: BadMatch (invalid parameter
>>>> attributes)).
>>>>
>>>> It seems similar to the following problem, yet I am using the latest
>>>> ati/radeon git:
>>>>
>>>> http://lists.freedesktop.org/archives/xorg/2009-March/044571.html
>>>>
>>>> Whenever "xrandr -q" is called in this scenario, this is printed to
>>>> Xorg.0.log:
>>>>
>>>> (II) RADEON(0): Output: DVI-0, Detected Monitor Type: 0
>>>> Dac detection success
>>>> Unhandled monitor type 0
>>>> (II) RADEON(0): EDID for output DVI-0
>>>>
>>>> I can manually add modes with "xrandr --newmode " and then "xrandr
>>>> --addmode", however the modes can't actually be used (the video signal
>>>> has no sync, and this error is displayed):
>>>>
>>>> (EE) RADEON(0): No encoder assigned to output!
>>>>
>>>> Can anyone please tell me how the xserver can correctly report (e.g. to
>>>> xrandr) that a display is connected (and therefore use the rest of the
>>>> xorg.conf modelines)?  Is this a bug in xorg?
>>>>
>>>
>>> Load detection is enabled by default on the avivo cards so there's no
>>> need to force it on.
>>> If the driver is not able to detect anything attached (either via edid
>>> or load detection) it falls back to enabling a default output.
>>> Nothing is reported as connected because nothing is actually detected
>>> as attached.  You can force it to be enabled via your xorg.conf.  Add:
>>> Option "Enable" "true"
>>> to your monitor section.  see this page for more info:
>>> http://wiki.debian.org/XStrikeForce/HowToRandR12
>>>
>>>
>>>>
>>>> Again this all works simply by physically changing to a different CRT
>>>> monitor on the same DVI-to-VGA adapter, or by reverting to an older (3
>>>> months or so) radeon driver.
>>>>
>>>
>>> Can you use git bisect to find out what commit broke it?
>>>
>>> Alex
>>>
>>
>> OK the bug was introduced by the following commit.  However on revisions
>> prior to this, a different bug existed;  "xrandr -q" would toggle between
>> showing "DVI-0 connected" and "DVI-0 disconnected" every time it was called.
>>  Guess it's time for me to file a bug report?:
>>
>> 6ae54d3ea023968887bf0cb0ec1be2115621d554 is first bad commit
>> commit 6ae54d3ea023968887bf0cb0ec1be2115621d554
>> Author: Alex Deucher <alexdeucher at gmail.com>
>> Date:   Wed Mar 18 11:50:22 2009 -0400
>>
>>   AVIVO: Fix dac load detection
>>
>> :040000 040000 562616a69c3bddb67e77d9e8484857e1833b06fa
>> 48df781751de5a6288f28cd7afce952403f358cd M    src
>>
> I cloned the latest git and fixed the issue by changing line 1621 of
> atombios_output.c from:
>
>       if (info->ChipFamily >= CHIP_FAMILY_R600)
>           bios_0_scratch = INREG(R600_BIOS_0_SCRATCH);
>
> To:
>
>       if (info->ChipFamily >= CHIP_FAMILY_RV515)
>           bios_0_scratch = INREG(R600_BIOS_0_SCRATCH);
>
> The monitor is now always seen as connected properly every time "xrandr -q"
> is called, and all custom modelines are loaded and switchable.

It's not really fixed so much as it's reading another register that
happens to have the relevant bit set.  I don't think load detection
has ever been able to detect this particular monitor, it just happened
to work previously since there was a bug in the driver which caused
the wrong dac to be used for load detection.  Since your board only
uses the primary dac, the results from secondary dac will probably
depend on how the unused dac2 pads are wired.

Alex


More information about the xorg-driver-ati mailing list