2007-11-11 15:22:26

by Keith Chew

[permalink] [raw]
Subject: PCI card initialisation at boot

Hi

I am looking for someone to help explain my findings, which I have
searched the net but could not find any related infomation.

We have 40 linux PCs deployed in a mobile environment, so they are
subjected to pretty harsh conditions that can cause BIOS corruptions.

In one of the units, I noticed the kernel had difficulty initialising
the PCI card, with messages stating that the PCI resource/address is
invalid (I am very sorry that I did not manage to capture the exact
output). It continues to boot to userspace, but the machine hangs when
the user app tries to access the pci card.

Rebooting the PC several times gave the same message, so at least the
problem was consistent. Removing the PCI card from the slot, and
putting a spare card, solved the problem. Then, putting the first card
back worked again.

I am guessing that the ESCD has been corrupted, and putting a spare
device caused the BIOS to reset the ESCD. In the BIOS, it has been
setup as "Resource allocation by Auto(ESCD)".

There is another option in the BIOS to set "Resource allocation by
Manual". I have tried this setting and Linux has no problems booting
up and using the PCI card.

My question is: Will setting the BIOS to "Resource allocation by
Manual" prevent the crash from happening in the future? More
specifically, does Linux still depend on ESCD even if the resource
allocation is set to Manual?

Regards
Keith


2007-11-11 16:11:33

by Andi Kleen

[permalink] [raw]
Subject: Re: PCI card initialisation at boot

"Keith Chew" <[email protected]> writes:
>
> My question is: Will setting the BIOS to "Resource allocation by
> Manual" prevent the crash from happening in the future? More
> specifically, does Linux still depend on ESCD even if the resource
> allocation is set to Manual?

Linux does not directly use the ESCD, but it uses configuration coming
from the BIOS (like PCI bridge setup or ACPI resources) that might
depend on the ESCD depending on your BIOS implementation.

You would probably need to ask someone familiar with your BIOS what
the ESCD influences in your configuration and what Manual allocation
changes exactly.

Most likely the real fix would be to add a checksum to it, but
only the BIOS can do that.

-Andi

2007-11-11 16:47:19

by Alan

[permalink] [raw]
Subject: Re: PCI card initialisation at boot

> I am guessing that the ESCD has been corrupted, and putting a spare
> device caused the BIOS to reset the ESCD. In the BIOS, it has been
> setup as "Resource allocation by Auto(ESCD)".

Quite possibily. It may also be that the card had simply developed a bad
connection.

> There is another option in the BIOS to set "Resource allocation by
> Manual". I have tried this setting and Linux has no problems booting
> up and using the PCI card.
>
> My question is: Will setting the BIOS to "Resource allocation by
> Manual" prevent the crash from happening in the future? More
> specifically, does Linux still depend on ESCD even if the resource
> allocation is set to Manual?

Linux by default uses the BIOS resource assignments. It doesn't know
where those came from other than "the BIOS". Also as most vendors
checksum the ESCD I'd be suprised if an ESCD error caused the problem,
but I guess you can get unlucky.

Cards can simply lose connection especially if in a dirty, damp or
particularly in a vibration high environment. In the shipping industry,
for example, it is not uncommon to dismantle all the cards from a PC and
refit them then tighten all the screws as a routine maintenance activity.

Alan

2007-11-11 23:43:29

by Matt Domsch

[permalink] [raw]
Subject: Re: PCI card initialisation at boot

On Sun, Nov 11, 2007 at 04:46:44PM +0000, Alan Cox wrote:
> Linux by default uses the BIOS resource assignments. It doesn't know
> where those came from other than "the BIOS".

Slightly tangential, but I'm starting to hear requests to have the OS
re-assign resources when it might make better sense. For example, if
you have a graphics card with a 1GB memory allocation, the BIOS may
assign it into address ranges below 4GB because it doesn't know
if the OS will be 32-bit or 64-bit capable. But, it would be
beneficial to have it located above 4GB, and to fill in the (new) hole
below 4GB with RAM. Linux right now doesn't have a way to do this.
It will assign resources for cards that the BIOS left unassigned, but
won't intentionally move resources.


--
Matt Domsch
Linux Technology Strategist, Dell Office of the CTO
linux.dell.com & http://www.dell.com/linux

2007-11-12 00:22:37

by H. Peter Anvin

[permalink] [raw]
Subject: Re: PCI card initialisation at boot

Matt Domsch wrote:
> On Sun, Nov 11, 2007 at 04:46:44PM +0000, Alan Cox wrote:
>> Linux by default uses the BIOS resource assignments. It doesn't know
>> where those came from other than "the BIOS".
>
> Slightly tangential, but I'm starting to hear requests to have the OS
> re-assign resources when it might make better sense. For example, if
> you have a graphics card with a 1GB memory allocation, the BIOS may
> assign it into address ranges below 4GB because it doesn't know
> if the OS will be 32-bit or 64-bit capable. But, it would be
> beneficial to have it located above 4GB, and to fill in the (new) hole
> below 4GB with RAM. Linux right now doesn't have a way to do this.
> It will assign resources for cards that the BIOS left unassigned, but
> won't intentionally move resources.
>

Not really. If the OS is 64-bit capable, it can just use the RAM above
4 GB.

-hpa