[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

PCI funnnies...




I've got a strange case of the PCI funnies...

I've got a system that has an industrial backplane (2.1).
On this backplane, it looks like the SBC PCI bridge drives
3 slots and one more P2P. This second P2P drives 7
more PCI slots(secondary bus). The OS is Win2K SP2 and I'm not sure about
the
BIOS but it is certainly recent.

Some particular plug in peripherals are not getting resources when plugged
into the secondary PCI bus. When I run sniff utilities, I see these cards
have 0 assigned to BADDR in the requested regions. I understand that this is

effectively disabling the device.

Depending on how many of these devices I populate, sometimes one or more
of the devices gets 0 BADDR. It is not following any obvious pattern.
Sometimes
I can populate many devices and they are all ok, other times I can populate
just 
a few and one will be ok and the other not. The problems are repeatable on a
power
to power cycle basis but seem to follow no pattern as to which slots and how
many devices.
Except for the fact that these problems only show up in the secondary bus.
The devices
all require I/O space only. I know that is discouraged (older devices). But
even with two
devices (plenty of I/O resource available) I can see these problems that
change on a
per slot basis. Sometimes I see the command capabilities of the devices
report back no I/O
access but the device has what looks to be valid BADDR assigned in I/O
space.

So with this, I was suspecting that electrical bus loading may be causing
something
nasty during the configuration cycles causing the BIOS in turn to disable
the device
that was corrupt.

With these strange configuration space results occuring, it was no surprise
to me that the
device driver would sometimes load and other times it would not.

Now here is the really strange part, I have seen a repeatable case where
there are two of the same devices populated, one of their
config spaces looks perfect and the other device config space looked fine
with the exception of having 0 assigned to the
BADDR. I was expecting the device driver to load and the former device to be
ok and the latter to not. In reality, BOTH devices
actually functioned properly. I was able to perform I/O accesses to both
devices no problem.

Somehow the device driver discovered the distinct BADDR's for both devices
and attached to it properly. Yet the BIOS sniffer utility
reported that one had zero BADDR (disabled).

So now, I can't trust the sniffer utility and now I'm not sure that it is a
non-compliance electrical bus problem either because as far as I know, no
matter what the bios sniffer reports, apparently these devices are getting
resources. In the single device case, with a 0 BADDR, the device driver
won't load
so I can't discover if the device actually got resources or not. Until now,
I have never seen a case where the PCI bios reports that it assigned a
0 BADDR but actually allocated resources that the devices driver evidently
discovered.

We have third party company do the device driver for these hardware devices
so I could not debug at the driver level.

Do any of you experts have any initial ideas on what the problem could
actually be here? I am a hardware guy so before I go ahead and
start checking into PCI compliant bus cycles and timing, I can't help but
wonder if there is something crazy going on that is simply
related to the BIOS, OS and/or device driver. Ok, maybe not _simply_ ! but I
am unfamiliar with Win2k and WDM driver design.

I'm a little leary about my observation that it seems like the backplane's
intel 21150 is driving 7 slots and there could be a loading problem. But
at the same time, I havn't been able to prove that any device was _really_
disabled even though a bios sniffer showed 0 BADDR.

I would be grateful for any ideas, opinions, or suggestions on this problem.

Thanks!



winmail.dat