Bug 15105 - Unable to get modes from device connected via HDMI
Summary: Unable to get modes from device connected via HDMI
Status: RESOLVED FIXED
Alias: None
Product: xorg
Classification: Unclassified
Component: Driver/radeonhd (show other bugs)
Version: git
Hardware: x86-64 (AMD64) Linux (All)
: medium normal
Assignee: Luc Verhaegen
QA Contact: Xorg Project Team
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2008-03-18 05:55 UTC by Patrick Voigt
Modified: 2008-07-31 11:10 UTC (History)
0 users

See Also:
i915 platform:
i915 features:


Attachments
Xorg.log (30.98 KB, text/plain)
2008-03-18 05:55 UTC, Patrick Voigt
no flags Details
dual monitor setup (1.14 KB, text/plain)
2008-03-20 03:41 UTC, Patrick Voigt
no flags Details
Xorg.log for dual monitor setup (54.69 KB, application/octet-stream)
2008-03-20 03:44 UTC, Patrick Voigt
no flags Details
Patched driver version log output (43.43 KB, text/plain)
2008-03-25 13:51 UTC, Patrick Voigt
no flags Details
Projector is working via HDMI (57.78 KB, text/plain)
2008-04-03 06:37 UTC, Patrick Voigt
no flags Details
Projector switched off at boot time (57.78 KB, text/plain)
2008-04-03 15:32 UTC, Patrick Voigt
no flags Details
projector off during boot, connected via DVI2HDMI adaptor (50.90 KB, text/plain)
2008-04-07 14:17 UTC, Patrick Voigt
no flags Details
projector off; -logverbose 7 (85.52 KB, text/plain)
2008-07-28 15:41 UTC, Patrick Voigt
no flags Details

Description Patrick Voigt 2008-03-18 05:55:04 UTC
Created attachment 15250 [details]
Xorg.log

The driver is unable to get the modes from the projector (Panasonic PT-AX200E) connected to the HDMI port.The projector was the only device connected to the graphics card.

I already posted this on the mailing list, but it might have been overlooked.

Patrick
Comment 1 Patrick Voigt 2008-03-18 06:05:33 UTC
I forgot to tell that I'm using a Asus M2A-VM HDMI mainboard. It has a ATI Radeon Xpress 1250 GPU.
Comment 2 Matthias Hopf 2008-03-18 08:00:27 UTC
Hm, this is weired:

(II) RADEONHD(0): EDID data for AX-200
(II) RADEONHD(0): Manufacturer: MEI  Model: d076  Serial#: 340131857
(II) RADEONHD(0): Year: 2007  Week: 0
(II) RADEONHD(0): EDID Version: 1.3

The EDID data was clearly read from the projector correctly, however, the resolution look strange:

(II) RADEONHD(0): Supported additional Video Mode:
(II) RADEONHD(0): clock: 74.2 MHz   Image Size:  708 x 398 mm
(II) RADEONHD(0): h_active: 1920  h_sync: 2448  h_sync_end 2492 h_blank_end 2640 h_border: 0
(II) RADEONHD(0): v_active: 540  v_sync: 542  v_sync_end 547 v_blanking: 562 v_border: 0
(II) RADEONHD(0): Monitor name: AX-200


Ah, the projector is only announcing a single(!) mode, 1920x540 which looks very much like it is in fact 1080i.
AFAIK we don't have interlace support in radeonhd yet, so the mode is discarded, and no modes are left.

Does the projector work with different resolutions, if you specify a monitor section for it?
Comment 3 Patrick Voigt 2008-03-20 03:40:20 UTC
Sorry that it took so long to answer. I was fiddeling around with the projector all the time yesterday. I never got a picture when using radeonhd. Using fglrx it works (it displays a picture...). Fglrx reads the same EDID data than radeonhd. No difference here.

The best I could do with radeonhd is that I prepared a dual monitor configuration, the first monitor works (DVI) and the second output device (projector via HDMI) has a mode assigned. But I cannot switch on the projector output. Here is what xrandr says:

Screen 0: minimum 320 x 200, current 1280 x 1024, maximum 1280 x 1280
VGA_1 disconnected
TV_SVIDEO disconnected
DVI-D_1 connected 1280x720+0+0 708mm x 398mm
   1280x720_60.00   60.0*
DVI-D_2 connected 1280x1024+0+0 376mm x 301mm
   1280x1024      60.0*+   59.9
   1024x768       75.1     70.1     60.0
   800x600        75.0     60.3
   640x480        75.0     60.0
   720x400        70.1

xrandr --auto doesn't show a picture on the projector.

Comment 4 Patrick Voigt 2008-03-20 03:41:55 UTC
Created attachment 15330 [details]
dual monitor setup
Comment 5 Patrick Voigt 2008-03-20 03:44:04 UTC
Created attachment 15331 [details]
Xorg.log for dual monitor setup
Comment 6 Patrick Voigt 2008-03-25 13:45:49 UTC
I just tried the latest git version but still no luck. But I stumbled across another issue. My projector only advertises a single mode which get's rejected by radeonhd. OK, so let's provide a modeline via config file. I tried various modes and it never worked, but I figured out that radeonhd doesn't even use the modes provided via xorg.conf! This happens when the monitor does not have at least a single usable mode. So I commented out lines 1289-1292 in rhd_modes.c.

1281 DisplayModePtr
1282 RHDModesPoolCreate(ScrnInfoPtr pScrn, Bool Silent)
1283 {
1284     DisplayModePtr Pool = NULL, List, TempList, Temp;
1285     char **ModeNames = pScrn->display->modes;
1286     int i;
1287
1288     List = rhdCreateModesListAndValidate(pScrn, Silent);
1289     /*
1290     if (!List)
1291         return List;
1292         */
1293
1294     /* Reduce our list */
1295     if (ModeNames && ModeNames[0]) { /* Find the best matching mode for each name */

Now my specified modes are processed but I still get no picture from my projector. I run X with logverbose 7, maybe someone has an idea.  
Comment 7 Patrick Voigt 2008-03-25 13:51:02 UTC
Created attachment 15457 [details]
Patched driver version log output

The projector was the only device connected to the graphics card (via HDMI).
Comment 8 Matthias Hopf 2008-03-26 10:17:35 UTC
(In reply to comment #6)
> modes and it never worked, but I figured out that radeonhd doesn't even use the
> modes provided via xorg.conf! This happens when the monitor does not have at
> least a single usable mode. So I commented out lines 1289-1292 in rhd_modes.c.

Hm. Sounds reasonable, I have to think a little about this.

> Now my specified modes are processed but I still get no picture from my
> projector. I run X with logverbose 7, maybe someone has an idea.

You have the NoRandr option still defined, and the only mode known is still the bogous 1920x540 mode. Is the 1024x768_60 mode coming from your configuration? Then it's certainly a different one than the one above.

(II) RADEONHD(0): Rejected mode "1920x540" (1920x540:74.2Mhz): interlace mode not supported
(II) RADEONHD(0): Modeline "1024x768_60.00"x59.8   64.00  1024 1077 1183 1342  768 771 775 798 -hsync +vsync (47.7 kHz)

Does the project support 1024x768? I heard there are strange models that *only* support video modes. In that case you should try to set something like a real 1920x540 mode, maybe that tricks the projector into doublescan mode:

# 1920x540 59.81 Hz (CVT) hsync: 33.61 kHz; pclk: 81.75 MHz
Modeline "1920x540_60.00"   81.75  1920 1984 2176 2432  540 543 553 562 -hsync +vsync
Comment 9 Egbert Eich 2008-03-26 14:15:57 UTC
The mode listed is an interlaced mode. I'm not sure how to deal with interlaced modes over a digital interface.
I've been looking for specs for HDMI but so far wasn't able to turn up anything on public sites.
Comment 10 Patrick Voigt 2008-03-28 07:38:50 UTC
Yes, the 1024x768 mode has been supplied by me. According to the manual it is not supported, but the "supported" modes don't work either. I tested various different ones.

FGLRX is able to drive the projector. I seems that it uses the interlace mode that the devices advertises.
Comment 11 Patrick Voigt 2008-04-03 04:47:02 UTC
OK, now it works. Using the latest version, radeonhd now drives my projector via HDMI! The latest changes three days ago made the difference. I still have to specify the modes for my projector explicitly, but that's Panasonics fault.

Now my onboard graphics card can drive two digital outputs simultaneously. Great.

Really good work. I'm impressed.

Best wishes,
Patrick
Comment 12 Matthias Hopf 2008-04-03 04:59:02 UTC
Ah, so you actually stumbled over something subtly different ;)

In order to verify modeline handling, can you post the logfile of a now working driver, with the Xserver run with -logverbose 7?
Comment 13 Patrick Voigt 2008-04-03 06:36:48 UTC
OK, I just found out that the projector has to be switched on when I boot my computer. Otherwise radeonhd doesn't work with it. This is not necessary when using fglrx.

I will try an older version of the driver later in the evening just to make sure that it doesn't work when the projector is switched on at boot time.

So the attached Xorg.log has been produced when one monitor (DVI) and one projector where connected to the board. 

 

Comment 14 Patrick Voigt 2008-04-03 06:37:50 UTC
Created attachment 15648 [details]
Projector is working via HDMI
Comment 15 Matthias Hopf 2008-04-03 07:48:51 UTC
Ok, can you - for direct comparison - add a logfile (with -logverbose 7 again) when the projector had been switched off during boot time?

Reopening for further investigation.
Comment 16 Patrick Voigt 2008-04-03 15:32:20 UTC
Created attachment 15669 [details]
Projector switched off at boot time
Comment 17 Matthias Hopf 2008-04-04 03:21:20 UTC
Gee, there is absolutely no difference between the two logfiles :-(

Apparently, the BIOS set up some registers we're not handling correctly yet for DDIA on RS690. Maybe Egbert has an idea.


One other thing: can you swap the two monitors, so that the projector is connected to DVI-D_2? Of course you have to swap entries in xorg.conf as well. Then test what happens if you boot with switched of projector / switched of monitor.

I assume that then a switched of monitor will not light up, and that this is something DDIA specific.
Comment 18 Egbert Eich 2008-04-05 14:41:54 UTC
I've tried this with my Asus M2A-VM HDMI board and two DVI monitors. I can get both to light up even when the output wasn't active at boot time and thus not initialized during boot.
I was using an HDMI2DVI adaptor to drive the DVI monitor on the HDMI output. 
Do you have a DVI capable monitor available to you so that you can try this with another display device? 
Comment 19 Patrick Voigt 2008-04-07 02:05:38 UTC
My projector has only HDMI inputs (besides anlog ones). My monitor has only a DVI input (besides VGA). So I need to get a DVI to HDMI adaptor for testing. I'll check today if I can get such a device.

My monitor (DVI) also lights up even if the device was switched off at boot time. Only the projector doesn't.

Comment 20 Patrick Voigt 2008-04-07 14:08:23 UTC
Just tested the connection to the projector using a DVI2HDMI adapter. That means I used the DVI output of the GPU and the HDMI input of the projector. The surprising result was that the projector lights up even it was not activated (switched off) during boot time. I attach a log file for this case.

So the projector shows a different behaviour using different output plugs of the GPU.
Comment 21 Patrick Voigt 2008-04-07 14:17:18 UTC
Created attachment 15744 [details]
projector off during boot, connected via DVI2HDMI adaptor
Comment 22 Egbert Eich 2008-04-07 14:31:37 UTC
Patrick, thank you for testing!
This is kind of what I expected.
Should you be able to get an HDMI2DVI connector I would be curious if it works the other way around, too.
I can drive my 1280x1024 as well as my 1920x1200 DVI on the HDMI connector of exactly this board.
Comment 23 Matthias Hopf 2008-04-08 02:22:54 UTC
Thanks, Patrick. This is what I expected as well, this apparently is DDIA related, which drives only one of the two outputs.

Not that this is enough information to actually fix this issue, but we now have a strong indication where to look at.

Patrick, I assume you don't need your little patch in comment #6 any more?
Comment 24 Egbert Eich 2008-04-08 05:07:29 UTC
This problem is not confined to DDIA. We have other reports where this also happens on the LVTMA. On this and on other chips.
Comment 25 Alex Deucher 2008-04-08 06:49:34 UTC
Perhaps it's an issue with the hw assisted i2c?  It might be interesting to see how SW i2c compares (radeon driver) in this case.
Comment 26 Patrick Voigt 2008-04-08 06:57:08 UTC
That's right Matthias, my little patch is not needed anymore. I also tested the
newest version today, but the situation remains the same. 
Comment 27 Matthias Hopf 2008-04-08 06:59:24 UTC
Thanks, Patrick.

Alex, we do get EDID data, just interlaced wasn't implemented (until yesterday), and the projector only announces its 1080i mode.
The main issue is that the BIOS somehow initializes some registers (this time regarding DDIA) only if something is connected at boot time.
Comment 28 Alex Deucher 2008-04-08 07:37:32 UTC
(In reply to comment #27)

> Alex, we do get EDID data, just interlaced wasn't implemented (until
> yesterday), and the projector only announces its 1080i mode.
> The main issue is that the BIOS somehow initializes some registers (this time
> regarding DDIA) only if something is connected at boot time.
> 

Sorry, I misunderstood the problem.  A patch to dump the DDIA registers in each case may be helpful.  The DDIA block is 0x7200 - 0x7290.

 for (i = 0x7200; i <= 0x7290; i += 4) {
	ErrorF("0x%x: 0x%x\n", i, RHDRegRead(Output, i));
 }
Comment 29 Patrick Voigt 2008-04-08 08:22:59 UTC
I might be able to figure out where to put the little patch from Alex, but how about a hint just to speed up the process? Thanks.
Comment 30 Egbert Eich 2008-04-08 08:25:28 UTC
(In reply to comment #27)
> Thanks, Patrick.
> 
> Alex, we do get EDID data, just interlaced wasn't implemented (until
> yesterday), and the projector only announces its 1080i mode.

Interlaced is still disabled for digital outputs as i would like to test it first.
I don't have such a fancy TV available for testing. I'm still using an old fashioned tube (sufficient for my tv consumption).

> The main issue is that the BIOS somehow initializes some registers (this time
> regarding DDIA) only if something is connected at boot time.
> 

I will probably do a simple minded reg dumper that can be run stand alone.
Comment 31 Egbert Eich 2008-04-08 08:30:17 UTC
(In reply to comment #29)
> I might be able to figure out where to put the little patch from Alex, but how
> about a hint just to speed up the process? Thanks.
> 

It would be best to compare registers after X is supposed to have set up the mode.
So I'd put it into rhdRROutputCommit(), somewhere after rout->Output->Power(...).
Comment 32 Patrick Voigt 2008-04-08 13:45:22 UTC
OK, here are the register values for the two alternatives at boot time.
At least some are different. Enjoy looking at the magic numbers ;-)


projector_off           projector_on

0x7200: 0x1000          0x7200: 0x1000
0x7204: 0x0             0x7204: 0x1
0x7208: 0x0             0x7208: 0x0
0x720c: 0x0             0x720c: 0x0
0x7210: 0x0             0x7210: 0x0
0x7214: 0x0             0x7214: 0x0
0x7218: 0x0             0x7218: 0x0
0x721c: 0x0             0x721c: 0x0
0x7220: 0x0             0x7220: 0x0
0x7224: 0x0             0x7224: 0x0
0x7228: 0x0             0x7228: 0x0
0x722c: 0x0             0x722c: 0x0
0x7230: 0x1000000       0x7230: 0x1000000
0x7234: 0x7ffffff       0x7234: 0x7ffffff
0x7238: 0x7ffffff       0x7238: 0x7ffffff
0x723c: 0x0             0x723c: 0x0
0x7240: 0x60            0x7240: 0x60
0x7244: 0x222222        0x7244: 0x222222
0x7248: 0x0             0x7248: 0x0
0x724c: 0x0             0x724c: 0x0
0x7250: 0x71            0x7250: 0x1
0x7254: 0x0             0x7254: 0x0
0x7258: 0xaa0355        0x7258: 0xaa0355
0x725c: 0x0             0x725c: 0x0
0x7260: 0x0             0x7260: 0x0
0x7264: 0x0             0x7264: 0x2
0x7268: 0x0             0x7268: 0x0
0x726c: 0x0             0x726c: 0x0
0x7270: 0x0             0x7270: 0x0
0x7274: 0x0             0x7274: 0x0
0x7278: 0x0             0x7278: 0x0
0x727c: 0x0             0x727c: 0x0
0x7280: 0x0             0x7280: 0x0
0x7284: 0x0             0x7284: 0x0
0x7288: 0x0             0x7288: 0x0
0x728c: 0x0             0x728c: 0x64f13f0
0x7290: 0x0             0x7290: 0x1f2
Comment 33 Egbert Eich 2008-07-21 03:02:22 UTC
Patrick, thanks for the log data! I've looked at it (again) and I think I may have found the issue. I've just pushed a patch.
If you find the time please try and see if your projector comes up even when it's not connected at boot time (on or off doesn't matter as a turned off monitor still does DDC).
Comment 34 Patrick Voigt 2008-07-24 08:23:06 UTC
Hello Egbert, I tried the latest version from head but it didn't help. Should I try another branch or provide some other debug information?
Comment 35 Egbert Eich 2008-07-28 02:27:08 UTC
(In reply to comment #34)
> Hello Egbert, I tried the latest version from head but it didn't help. Should I
> try another branch or provide some other debug information?
> 

No, this is the very last idea i've had.
The dumps in comment #34 were made from the text console, right? What you can do is to create those dumps while X is running. Then I can compare the register sets set by X directly.
 
Comment 36 Patrick Voigt 2008-07-28 05:39:30 UTC
OK, I used the rhd_dump utility this time. Here are the result running it from an xterm. In one case the projector was switched off and in the other case it was switched on at boot time.

rhd_dump: v1.2.1, git branch master, commit 0780b69e

projector on        off

0x7200: 0x00001001  0x00001000
0x7204: 0x00000001  0x00000000
0x7208: 0x00000000  0x00000000
0x720C: 0x00000000  0x00000000
0x7210: 0x00000000  0x00000000
0x7214: 0x00000000  0x00000000
0x7218: 0x00000000  0x00000000
0x721C: 0x00000000  0x00000000
0x7220: 0x00000000  0x00000000
0x7224: 0x00000000  0x00000000
0x7228: 0x00000000  0x00000000
0x722C: 0x00000000  0x00000000
0x7230: 0x01000000  0x01000000
0x7234: 0x07FFFFFF  0x07FFFFFF
0x7238: 0x07FFFFFF  0x07FFFFFF
0x723C: 0x00000000  0x00000000
0x7240: 0x00000060  0x00000060
0x7244: 0x00222222  0x00222222
0x7248: 0x00000000  0x00000000
0x724C: 0x00000000  0x00000000
0x7250: 0x00000001  0x00000071
0x7254: 0x00000000  0x00000000
0x7258: 0x00AA0355  0x00AA0355
0x725C: 0x00000000  0x00000000
0x7260: 0x00000000  0x00000000
0x7264: 0x00000002  0x00000000
0x7268: 0x00000000  0x00000000
0x726C: 0x00000000  0x00000000
0x7270: 0x00000000  0x00000000
0x7274: 0x00000000  0x00000000
0x7278: 0x00000000  0x00000000
0x727C: 0x00000000  0x00000000
0x7280: 0x00000000  0x00000000
0x7284: 0x00000000  0x00000000
0x7288: 0x00000000  0x00000000
0x728C: 0x056F09F0  0x00000000
0x7290: 0x000001F2  0x00000000
0x7294: 0x00000000  0x00000000
0x7298: 0x00000000  0x00000000
0x729C: 0x00000000  0x00000000
Comment 37 Egbert Eich 2008-07-28 12:18:26 UTC
Patrick: thanks for the listings. I'm sorry to pester you so much!
The funny thing here is that the case where the projector was off at boot time the dump looks (almost) identical to the uninitialized case in comment #34.
It looks as if this output was not initialized almost as if the driver wasn't active at the time the dump was made.
Could I ask you to try and generate the log for the off case again and could you please check if the (-logverbose 7) log file of the running Xserver contains the lines:

(II) RADEONHD(0): FUNCTION: DDIAMode
(II) RADEONHD(0): FUNCTION: rhdRRCrtcCommit
(II) RADEONHD(0): FUNCTION: D2Power

before you run rhd_dump?
If not please attach the verbose log file. Then there's something else that went wrong :(
Comment 38 Patrick Voigt 2008-07-28 15:41:33 UTC
Created attachment 17939 [details]
projector off; -logverbose 7
Comment 39 Patrick Voigt 2008-07-28 15:48:34 UTC
I couldn't find "DDIAMode" in the log file so I added the full log as an attachment. Egbert, please don't hesitate to ask for more help, I really want to help to get it to work.
Comment 40 Egbert Eich 2008-07-29 06:17:52 UTC
Patrick, was the projector turned on when you started the Xserver?
The log file contains:

(II) RADEONHD(0): rhdRS69I2CSetupStatus: DDC Line: 2 val: 0 port: 0x1f90
(II) RADEONHD(0): FUNCTION: rhdRS69I2CStatus
(II) RADEONHD(0): DDC Probing for Output DDIA returned disconnected
(II) RADEONHD(0): Output DVI-D_2 enabled by config file

So DDC probing for an attached display device didn't return any results.
Usually it should not matter if a device is turned on or not as DDC gets its power from the graphics card. But this might be different here.

On the other hand I discovered a bug in the fix i made, so you may want to wait with further tests until i've got the patch committed.
Comment 41 Patrick Voigt 2008-07-29 08:49:45 UTC
The projector was turned off when I made the test. You asked me to test this case in #37.
Comment 42 Egbert Eich 2008-07-29 14:00:18 UTC
Patrick, I've just pushed a fix. Please leave the projector off while the system is booting and turn it on before X starts up.
You can turn it on as soon as the kernel comes up because then the BIOS is already done POSTing the card.
The main difference between POSTing with the projector off and the projector on is that the BIOS will not set a mode on an output where nothing seems to be connected.
For the Xserver driver to detect the projector on your RS690 board it needs to be able to read DDC from it. If it doesn't see DDC it will consider it undetected.
Apparently the projector doesn't send DDC data when it's off. (Most display devices do this even in the powered off state as the voltage for the DDC circuits are supplied by the grahics card).
Comment 43 Patrick Voigt 2008-07-30 02:16:52 UTC
It works now. As you said the projector needs to be switched on before X starts. So when I need my projector I switch it on and restart X and that's it. I don't need to reboot my machine anymore. Thank you! 
Comment 44 Egbert Eich 2008-07-30 21:33:49 UTC
Patrick, quick note:
You should be able to use 'xrandr -q' to force the Xserver to rescan for devices and discover newly attached ones. So even when you start without the projector turned on it should be able to light it up then.
Comment 45 Patrick Voigt 2008-07-31 07:00:59 UTC
Egbert, xrandr -q would be cool, but doesn't work for me. Projoctor doesn't light up. Here is the output:

pvo@bart:~$ xrandr -q
Screen 0: minimum 320 x 200, current 1280 x 1024, maximum 1280 x 1280
DVI-D_2 connected 1280x1024+0+0 376mm x 301mm
   1280x1024      60.0*+   59.9  
   1024x768       75.1     70.1     60.0  
   800x600        75.0     60.3  
   640x480        75.0     60.0  
   720x400        70.1  
VGA_1 disconnected
TV_SVIDEO disconnected
DVI-D_1 connected
   1280x720_60.00   60.0  
pvo@bart:~$ 
Comment 46 Egbert Eich 2008-07-31 11:10:17 UTC
(In reply to comment #45)
> Egbert, xrandr -q would be cool, but doesn't work for me. Projoctor doesn't
> light up. Here is the output:
> 
> pvo@bart:~$ xrandr -q
> Screen 0: minimum 320 x 200, current 1280 x 1024, maximum 1280 x 1280
> DVI-D_2 connected 1280x1024+0+0 376mm x 301mm
>    1280x1024      60.0*+   59.9  
>    1024x768       75.1     70.1     60.0  
>    800x600        75.0     60.3  
>    640x480        75.0     60.0  
>    720x400        70.1  
> VGA_1 disconnected
> TV_SVIDEO disconnected
> DVI-D_1 connected
>    1280x720_60.00   60.0  
> pvo@bart:~$ 
> 
The projector is in DVI-D_2, isn't it?
You'd have to do:
xrandr --output DVI-D_2 --mode 1280x720 --crtc 1
(I assume).


Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.