[Top] [All Lists]

Re: boot problem

Subject: Re: boot problem
From: "William J. Earl" <>
Date: Wed, 14 Jan 1998 16:56:38 -0800
Cc: William Ellis <>, Linux porting team <>
In-reply-to: <>
References: <> <>
Sender: writes:
 > No, the FDDI card is just being ignored by Linux.  The problem is
 > indeed the fact that the newport GFX card isn't installed.  I'll
 > take a look at it when I have time for more than one breath
 > per minute ...
 > Thinking about it, the kernel should only try to touch the gfx hardware
 > at all, if the ARC environment variable ``console'' is unset.  If you
 > want to run from a serial console, then the variable's value should be
 > either ``d1'' or ``d2'' for the first rsp. second serial interface.
 > I suppose IRIX just defaults to serial console because it knows that
 > a Challenge S is headless or after a failed probe for gfx hardware.

     IRIX probes for the graphics card.  If the probe fails, it
assumes this is not one.  If there is no graphics, or if console != g,
it sets the system console to the serial port.  Note, however, that
IRIX normally puts up an X login on the graphics head even if
console=d and thus the console is on the serial port.  This seems
like a reasonable approach for linux as well.

 > William, what is the recommended way to recognice whethere a machine
 > is a Indy or Challenge S?  Probing for a GFX card or checking via
 > ARC firmware?

       I would probe for the graphics card.  If you try to fetch
from the configuration register and get a bus error, or if the
returned value is wrong, assume no graphics. 

       You can check that you can read from the first register
location (0x1f0f0000); if there is a bus error, there is no graphics.
Then check that the GFXBUSY bit (0x8) in the status register at 
0x1f0f1338 turns off within about 300 ms.  The IRIX driver also
does this to check that the card is alive:

         * Write an int into the 16-bit xstarti register.
         * Read it back from the fixed-point xstartf register.
         * The format is 16 bits of integer, 4 bits of fraction,
         * all << 7.  In this case, the fraction is 0, so we expect
         * to read (0x12348765 & 0xffff) << 11.

        rex3->set.xstarti = 0x12348765;
        if ( rex3->set._xstart.word == ((0x12348765 & 0xffff) << 11) ) {
                ng1_probed[index] = NG1_FOUND;
                return 1;

set.xstarti is 0x1f0f0148 and set._xstart.word is 0x1f0f0100.

<Prev in Thread] Current Thread [Next in Thread>