Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 1 Oct 2000 07:50:01 -0700 (PDT)
From:      Masayuki FUKUI <fukui@sonic.nm.fujitsu.co.jp>
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: i386/20379: unable to install, monitor goes black during boot (with serial is disabled) 
Message-ID:  <200010011450.HAA73438@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR i386/20379; it has been noted by GNATS.

From: Masayuki FUKUI <fukui@sonic.nm.fujitsu.co.jp>
To: Sheldon Hearn <sheldonh@uunet.co.za>
Cc: freebsd-gnats-submit@FreeBSD.org, gyula_matics@hp.com,
	msmith@FreeBSD.org
Subject: Re: i386/20379: unable to install, monitor goes black during boot (with serial is disabled) 
Date: Sun, 01 Oct 2000 23:43:16 +0900

 My machine cannot boot with 4.1.1-RELEASE as before.
 I'm inconvenienced.
 
 >On Tue, 08 Aug 2000 14:12:03 +0900, Masayuki FUKUI wrote:
 >
 >> It seems to me that FreeBSD 4 kernel's PCI bus probe fails on 450GX chipset
 >> and the machine hangs up.
 >> (maybe in src/i386/isa/pcibus.c)
 
 I tried to find the cause and probably found it.
 
 In src/sys/i386/isa/pcibus.c nexus_pcib_identify(),
 
 | retry:
 |        for (probe.slot = 0; probe.slot <= PCI_SLOTMAX; probe.slot++) {
 |                probe.func = 0;
 |                hdrtype = pci_cfgread(&probe, PCIR_HEADERTYPE, 1);
 
 On unavailable PCI slot, 'hdrtype' is always 0xff (-1).
 (Is this right with PCI standard?)
 
 |                if (hdrtype & PCIM_MFDEV)
 |                        pcifunchigh = 7;
 |                else
 |                        pcifunchigh = 0;
 
 and 'pcifunchigh' sets to 7.
 (Is this expected?)
 
 |                for (probe.func = 0;
 |                     probe.func <= pcifunchigh;
 |                     probe.func++) {
 |                        /*
 |                         * Read the IDs and class from the device.
 |                         */
 |                        u_int32_t id;
 |                        u_int8_t class, subclass, busnum;
 |                        device_t child;
 |                        const char *s;
 |
 |                        id = pci_cfgread(&probe, PCIR_DEVVENDOR, 4);
 
 When 'probe.slot' is PCI_SLOTMAX (== 31) and 'probe.func' is 7,
 call to 'pci_cfgread()' here and machine suddenly hangs up.
 I don't know why...  (or 450GX chipset's bug?)
 
 (When 'probe.slot' is 31 and 'probe.func' is 6,
  it returns from 'pci_cfgread()' and 'id' is 0xffffffff (-1).)
 
 
 I don't know how to fix rightly.
 But I rebuild 4-STABLE kernel with following patch,
 and it works fine.
 
 I hope for fixing the probrem as soon as possible.
 
 
 --- src/sys/i386/isa/pcibus.c.orig	Thu Feb 24 05:25:06 2000
 +++ src/sys/i386/isa/pcibus.c	Sun Oct  1 23:16:06 2000
 @@ -439,6 +439,7 @@
  	int found = 0;
  	int pcifunchigh;
  	int found824xx = 0;
 +	int found_orion = 0;
  
  	if (pci_cfgopen() == 0)
  		return;
 @@ -448,7 +449,7 @@
  	for (probe.slot = 0; probe.slot <= PCI_SLOTMAX; probe.slot++) {
  		probe.func = 0;
  		hdrtype = pci_cfgread(&probe, PCIR_HEADERTYPE, 1);
 -		if (hdrtype & PCIM_MFDEV)
 +		if (hdrtype & PCIM_MFDEV && (!found_orion || hdrtype != 0xff) )
  			pcifunchigh = 7;
  		else
  			pcifunchigh = 0;
 @@ -483,6 +484,8 @@
  				found = 1;
  				if (id == 0x12258086)
  					found824xx = 1;
 +				if (id == 0x84c48086)
 +					found_orion = 1;
  			}
  		}
  	}
 


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200010011450.HAA73438>