2001-03-02 18:35:50

by Petr Vandrovec

[permalink] [raw]
Subject: [PATCH] 2.4.2-acX does not recognize any bus on Intel Serverworks based motherboard

Hi Martin,
what's idea behind 'pcibios_last_bus >= 0xff' ? On friend's STL2 Intel
motherboard Serverworks bridge contains 0x01 in reg. 0x44 (first bus behind
bridge) and 0xFF in reg. 0x45 (last bus behind bridge).
This sets pcibios_last_bus to 0xFF in serverworks fixup code. After this
pcibios_fixup_peer_bridges() refuses to do anything, so devices connected
to secondary bus are not visible to system.
With patch below system sees all devices again - patch is for 2.4.2-ac9.
Thanks,
Petr Vandrovec
[email protected]


diff -urdN linux/arch/i386/kernel/pci-pc.c linux/arch/i386/kernel/pci-pc.c
--- linux/arch/i386/kernel/pci-pc.c Fri Mar 2 17:55:05 2001
+++ linux/arch/i386/kernel/pci-pc.c Fri Mar 2 17:56:50 2001
@@ -784,7 +784,7 @@
struct pci_dev dev;
u16 l;

- if (pcibios_last_bus <= 0 || pcibios_last_bus >= 0xff)
+ if (pcibios_last_bus <= 0 || pcibios_last_bus > 0xff)
return;
DBG("PCI: Peer bridge fixup\n");
for (n=0; n <= pcibios_last_bus; n++) {


2001-03-02 23:27:50

by Tim Wright

[permalink] [raw]
Subject: Re: [PATCH] 2.4.2-acX does not recognize any bus on Intel Serverworks based motherboard

This has come up before a few times. The concensus seems to be that the PCI
fixup code for Serverworks chipsets is currently broken (and it's less simple to
fix than it should be due to lack of documentation - there have been some
educated guesses but it would be nicer to know for sure). The suggestion was
to simply kill the fixup code and believe the BIOS (i.e. kill the relevant
lines in the pcibios_fixups[] array in arch/i386/kernel/pci-pc.c). That has
worked on the systems I'm using that use the Serverworks chipset.

Tim

On Fri, Mar 02, 2001 at 07:34:44PM +0100, Petr Vandrovec wrote:
> Hi Martin,
> what's idea behind 'pcibios_last_bus >= 0xff' ? On friend's STL2 Intel
> motherboard Serverworks bridge contains 0x01 in reg. 0x44 (first bus behind
> bridge) and 0xFF in reg. 0x45 (last bus behind bridge).
> This sets pcibios_last_bus to 0xFF in serverworks fixup code. After this
> pcibios_fixup_peer_bridges() refuses to do anything, so devices connected
> to secondary bus are not visible to system.
> With patch below system sees all devices again - patch is for 2.4.2-ac9.
> Thanks,
> Petr Vandrovec
> [email protected]
>
>
> diff -urdN linux/arch/i386/kernel/pci-pc.c linux/arch/i386/kernel/pci-pc.c
> --- linux/arch/i386/kernel/pci-pc.c Fri Mar 2 17:55:05 2001
> +++ linux/arch/i386/kernel/pci-pc.c Fri Mar 2 17:56:50 2001
> @@ -784,7 +784,7 @@
> struct pci_dev dev;
> u16 l;
>
> - if (pcibios_last_bus <= 0 || pcibios_last_bus >= 0xff)
> + if (pcibios_last_bus <= 0 || pcibios_last_bus > 0xff)
> return;
> DBG("PCI: Peer bridge fixup\n");
> for (n=0; n <= pcibios_last_bus; n++) {
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/

--
Tim Wright - [email protected] or [email protected] or [email protected]
IBM Linux Technology Center, Beaverton, Oregon
Interested in Linux scalability ? Look at http://lse.sourceforge.net/
"Nobody ever said I was charming, they said "Rimmer, you're a git!"" RD VI