Re: Fixing PCI BIOS enumeration problems in a device driver. (Long)

I’ve run into very similar problems with Dell computers. One Dell system in
particular wouldn’t even boot when we put more than 2 cards into the system.
Different Dell systems would produce different results. It depended on the
BIOS version, the type of bridge, etc. Using a PCI bus analyzer and other
tools we determined that the BIOS didn’t program the hardware’s
configuration space correctly. On some systems we found that the hardware
was programmed correctly but when we used NT’s HalAssignSlotResources, the
first card found would be programmed at the same address as the cards on the
other side of the bridge which results in a system lockup. Using the
/PCILOCK flag in the boot.ini resolved this problem. The other solution is
to avoid using HalAssignSlotResources and program the config registers

The good news for us is that these problems (except for one where the PC
won’t boot) don’t occur at all with Win2K/XP when we use the WDM drivers for
our hardware. Win2K/XP don’t rely of the BIOS programming of the PCI bus,
bridges or cards and appears to program everything correctly.

  • Steve -

-----Original Message-----
From: Joel Corley []
Sent: Friday, August 02, 2002 1:44 PM
To: NT Developers Interest List
Subject: [ntdev] Re: Fixing PCI BIOS enumeration problems in a device
driver. (Long)


I’ve tried both. It makes no difference.

The root failure occurs when the BIOS initially goes through
its discovery,
enumeration and assignment process of the PCI bus. I’ve observed the
behavior after-the-fact using a DOS boot disk and a PCI
configuration space
dump utility. I’ve also probed the bus with a logic analyzer
during POST and
found that the BIOS explicitly writes zeros to the
aforementioned registers
in the configuration space – explicitly disabling our
devices. Ironically,
it allocates plenty of space for these disabled devices in the parent

Something I may not have mentioned is that some of these
systems become
somewhat unstable when we have “too many” of our cards in the box.
Specifically, the Intel 845 motherboards have this nasty
tendency to get
into a state where it reports simply “Boot Failure”, even
though there’s one
or more boot device attached.

Once the Intel board enters this mode, you have to strip all
the cards from
the system for it to recover. Once it recovers, it seems to
work normally
again. The problem only shows up when we put a forth or fifth
card in the
system and only occasionally. Once we get one of these
motherboards to boot
with four (4) or five (5) cards, it operates normally –
except that it
fails to properly initialize the last few devices during POST.

FWIW: Our boards have as many as 10 PCI devices per slot –
adding as many
as 60 PCI devices in a single Intel D845EBT motherboard. (In
practice you
can’t use more than 5 cards because you’ll need a
high-performance storage
system to support so many devices.) I suspect that the AMI
BIOS is using a
fixed size table for its enumeration and is simply
overflowing that table.
Past products used a separate coprocessor and a
non-transparent bridge; this
is our first generation of product to use so many devices behind a
transparent bridge.

  • Joel Corley

“Maxim S. Shatskih” wrote in message
> news:xxxxx@ntdev…
> >
> > > And before you tell me to tell our customers to get a
> BIOS fix, let
> > me point
> > > out that these BIOSes are very common (Intel uses them) and there
> > isn’t
> >
> > Have you switched “PnP OS” to “No” in BIOS setup?
> >
> > Max
> >
> >
> >
> >
> >
> —
> You are currently subscribed to ntdev as:
> To unsubscribe send a blank email to %%email.unsub%%