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>