No announcement yet.

Yet another: No screens found

  • Filter
  • Time
  • Show
Clear All
new posts

  • Yet another: No screens found

    Hi all,

    I have two video-cards in my computer:
    01:05.0 VGA compatible controller: ATI Technologies Inc Radeon HD 3300 Graphics
    02:00.0 VGA compatible controller: ATI Technologies Inc Mobility Radeon HD 3450
    I have the following monitors attached:
    HD3450 --> LG Studioworks 700S
    HD3300 ---> Samsung T200
            \---> BenQ FP547
    When I start Xorg with the following:
    Xorg -layout seat1
    I get an error:
    Fatal server error:
    no screens found
    You can find my Xorg.0.log here and my xorg.conf here.

    If I set the HD3450 as first device (by disabling the onboard HD3300 in my BIOS) it works perfectly fine. What's going on?

  • #2
    In your xorg log the 3300 was still the primary device, but the monitor it was trying to light up was on the 3450. I don't know the details, but IIRC the secondary card (3450) needs to be handled differently in order to access the BIOS etc...

    Looks like the 3300 was primary but the driver was trying to light up the 3450 as if *it* was primary and the driver couldn't find the BIOS image as a result.

    Not sure what to recommend right now but will investigate a bit.


    • #3
      Thank you. If I run Xorg like this..
      Xorg -layout seat1 -isolateDevice PCI:2:0:0
      .. my Xorg.0.log changes. In the log there isn't any sign of the HD3300, yet it refuses to light up the display.


      • #4
        Yeah... I think the problem there is that telling Xorg to ignore one GPU doesn't make the other GPU primary (since that decision is made at POST time IIRC).

        This is a bit of a specialized scenario; probably the best thing would be to subscribe and post to the radeonhd mailing list.
        Last edited by bridgman; 02-17-2009, 09:21 AM.


        • #5
          Hmm, I've never worked with mailinglists before. So I subscribed:
          Welcome! You have been subscribed to the

          And send an email explaining my problem to Is this the way it should be done?


          • #6
            My experience with this hardware is that OPTION "HPD" "swap" or OPTION "HPD" "off" was required in the driver section to control which output is used.

            You may have you monitor on the alternate output.

            This OPTION was added to resolve hardware output issues. I beleive it will be dropped once they get enough hardware data.


            • #7
              Thank you. I'm going to try that. Did you mean the device section, btw?

              Edit: It doesn't work . I even swapped the cable (to a DVI connector), but still it wouldn't come up..
              Last edited by MartjeB; 02-17-2009, 10:53 AM.


              • #8
                I don't think your issue is related to display detection. There are some issues reading BIOS from the secondary display adapter.

                If you send an email summarizing the situation, with links to pastebin'ed log and conf files, that should be fine. Offer to create a bugzilla ticket if the devs would prefer that.


                • #9
                  Just after I mailed mailed my problem I discovered this was reported just yesterday! Let's hope they fix this ASAP.


                  • #10
                    Martje has
                    (II) RADEONHD(0): Unknown card detected: 0x95C5:0x1043:0x01F4

                    I have a PowerColor AX3450 256MD2
                    (II) RADEONHD(0): Unknown card detected: 0x95C5:0x1787:0x2252.
                    This was a message I got prior to x-server 1.6.0 rc2. I sent the info to as per the Xorg.0.log and got an email back "what is this for".

                    We both are using x-server 1.5.902 (1.6.0 rc2) and radeonhd 1.2.4

                    I have stripped my /etc/X11/xorg.conf to the minimum.

                    When the first version of the above software came out in Jaunty Alpha 4 everything worked for me except for some quirky layout issues with xrandr on my two monitors. The bios was detected properly unlike Martje's case.

                    With the Jaunty Alpha 4 update of one week ago both VGA and DVI outputs became tied together (i.e. any xrandr --output changes both outputs at the same time).

                    Looking at Xorg.0.log now gives a warning that OPTION HPD is not used.

                    What I would like to know is what is the current roadmap for radeonhd versus radeon as I read that Xorg was thinking of merging them.

                    It is frustrating for me in the last week or so to have my second monitor unusable.
                    Last edited by Blue Beard; 02-18-2009, 11:01 AM.


                    • #11
                      Originally posted by Blue Beard View Post
                      The current version now detects my bios details;
                      Last version of Xserver or RadeonHD?


                      • #12
                        radeonhd has been released and a new ati driver.
                        I am waiting for these to be distributed by jaunty updates.
                        If they don't come within a week I will manually install them.

                        It appears the complete output system is being rewritten.


                        • #13
                          It still doesn't work for me, even with the latest version of radeohd. I compiled it and copied to /usr/lib/xorg/modules/drivers/.

                          I still get the same error..


                          • #14
                            Hmm, after searching some more I stumbled upon a blog of Chris Tyler. This is what he says about the AtomBIOS':
                            Originally posted by Chris Tyler
                            These setpci commands are required to make the card's AtomBIOS visible to the radeonhd driver (on this hardware):
                            setpci -s 0000:01:00.0 COMMAND=2
                            setpci -s 0000:02:00.0 COMMAND=2
                            I'm going to try it. I'll report back with the results.


                            • #15
                              Hmm, it does work but I had to apply the following patch too:
                              diff --git a/src/rhd.h b/src/rhd.h
                              index 708e4d6..8471f33 100644
                              --- a/src/rhd.h
                              +++ b/src/rhd.h
                              @@ -355,7 +355,7 @@ extern unsigned int RHDReadPCIBios(RHDPtr rhdPtr, unsigned char **prt);
                               extern Bool RHDScalePolicy(struct rhdMonitor *Monitor, struct rhdConnector *Connector);
                               extern void RHDPrepareMode(RHDPtr rhdPtr);
                               extern Bool RHDUseAtom(RHDPtr rhdPtr, enum RHD_CHIPSETS *BlackList, enum atomSubSystem subsys);
                              +extern CARD32   RHDGetVideoRamSize(RHDPtr rhdPtr);
                               extern CARD32 _RHDRegRead(int scrnIndex, CARD16 offset);
                               #define RHDRegRead(ptr, offset) _RHDRegRead((ptr)->scrnIndex, (offset))
                               extern void _RHDRegWrite(int scrnIndex, CARD16 offset, CARD32 value);
                              diff --git a/src/rhd_atombios.c b/src/rhd_atombios.c
                              index b515427..8b9d6c2 100644
                              --- a/src/rhd_atombios.c
                              +++ b/src/rhd_atombios.c
                              @@ -2762,7 +2762,8 @@ rhdAtomInit(atomBiosHandlePtr unused1, AtomBiosRequestID unused2,
                               		    AtomBiosArgPtr data)
                                   int scrnIndex = data->val;
                              -    RHDPtr rhdPtr = RHDPTR(xf86Screens[scrnIndex]);
                              +    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
                              +    RHDPtr rhdPtr = RHDPTR(pScrn);
                                   unsigned char *ptr;
                                   atomDataTablesPtr atomDataPtr;
                                   atomBiosHandlePtr handle = NULL;
                              @@ -2785,9 +2786,14 @@ rhdAtomInit(atomBiosHandlePtr unused1, AtomBiosRequestID unused2,
                               	    return ATOM_FAILED;
                                   } else {
                              -	if (xf86IsEntityPrimary(rhdPtr->entityIndex)) {
                              +	CARD32 videoRam = RHDGetVideoRamSize(rhdPtr);
                              +	if (videoRam > 0) {
                               	    int read_len;
                               	    unsigned char tmp[32];
                              +	    if (!pScrn->videoRam)
                              +		pScrn->videoRam = videoRam;
                               	    xf86DrvMsg(scrnIndex,X_INFO,"Getting BIOS copy from legacy VBIOS location\n");
                               	    if (xf86ReadBIOS(legacyBIOSLocation, 0, tmp, 32) < 0) {
                              diff --git a/src/rhd_driver.c b/src/rhd_driver.c
                              index 0ef3612..d64610d 100644
                              --- a/src/rhd_driver.c
                              +++ b/src/rhd_driver.c
                              @@ -164,7 +164,6 @@ static Bool     rhdMapMMIO(RHDPtr rhdPtr);
                               static void     rhdUnmapMMIO(RHDPtr rhdPtr);
                               static Bool     rhdMapFB(RHDPtr rhdPtr);
                               static void     rhdUnmapFB(RHDPtr rhdPtr);
                              -static CARD32   rhdGetVideoRamSize(RHDPtr rhdPtr);
                               static void     rhdFbOffscreenGrab(ScrnInfoPtr pScrn);
                               static void	rhdGetIGPNorthBridgeInfo(RHDPtr rhdPtr);
                               static enum rhdCardType rhdGetCardType(RHDPtr rhdPtr);
                              @@ -531,6 +530,7 @@ RHDPreInit(ScrnInfoPtr pScrn, int flags)
                               	goto error0;
                              +    /* do this before AtomBIOS init as it will be set there if not preset */
                                   pScrn->videoRam = rhdPtr->pEnt->device->videoRam;
                                   rhdPtr->entityIndex = rhdPtr->pEnt->index;
                              @@ -715,7 +715,7 @@ RHDPreInit(ScrnInfoPtr pScrn, int flags)
                                   /* We can use a register which is programmed by the BIOS to find out the
                                      size of our framebuffer */
                                   if (!pScrn->videoRam) {
                              -	pScrn->videoRam = rhdGetVideoRamSize(rhdPtr);
                              +	pScrn->videoRam = RHDGetVideoRamSize(rhdPtr);
                               	if (!pScrn->videoRam) {
                               	    xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "No Video RAM detected.\n");
                               	    goto error1;
                              @@ -1678,8 +1678,8 @@ rhdUnmapMMIO(RHDPtr rhdPtr)
                              -static CARD32
                              -rhdGetVideoRamSize(RHDPtr rhdPtr)
                              +RHDGetVideoRamSize(RHDPtr rhdPtr)
                                   CARD32 RamSize, BARSize;
                              Now everything is fine! The monitor gives an 'out of range' error, but that's fixable