Thread (5 messages) 5 messages, 3 authors, 2004-05-06

Re: Multiple (ICH3) IDE-controllers in a system

From: Bartlomiej Zolnierkiewicz <hidden>
Date: 2004-05-05 18:22:59
Also in: lkml

Hi Vojtech,

Do I correctly assume that these fixups for Intel chipsets are from you?

http://linus.bkbits.net:8080/linux-2.5/cset@3cfbacdfzHvfqp0Sa45QXt9pNn3LNg?nav=index.html|src/|src/arch|src/arch/i386|src/arch/i386/pci|related/arch/i386/pci/fixup.c
http://linus.bkbits.net:8080/linux-2.5/cset@3cfcec0fOJreGFyCWkPeT7EWiydYFw?nav=index.html|src/|src/arch|src/arch/i386|src/arch/i386/pci|related/arch/i386/pci/fixup.c

Care to explain why 'trash' fixup is needed in 2.6 but not in 2.4?

Cheers,
Bartlomiej

On Wednesday 05 of May 2004 00:13, Shai Fultheim wrote:
Hi,

I am working on an IO-robust custom-made PC server, which runs the Linux
kernel.  The machine is working very nicely with 2.4 kernels, but we
recently found out that in 2.6 it couldn't see all IDE controllers.

In Linux 2.6.x pcibios_fixups table (in arch/i386/pci/fixup.c), use the
pci_fixup_ide_trash() quirk for Intel's ICH3 (my case specifically
8086:248b).  That quirk wasn't in use for ICH3 by the 2.4.x kernels.  The
result of the change is that the system, which has multiple ICH3's can't
use any of the IDE controllers beside the one on the first ICH3 (again,
that worked in 2.4 kernels).

Is there a real reason to call that quirk?  If there is not, why are you
calling that quirk?  If there is, can I suggest that the quirk will handle
only the first ICH3 (i.e. add check in the quirk that it is called for the
first time only).  This is better than "loosing" all these IDE controllers
in the case their BARs set right.


Blow references for bare 2.6.5 kernel:

Code walkup starts with pci_scan_single_device() at
http://lxr.linux.no/source/drivers/pci/probe.c?v=2.6.5#L590 which calls to
pci_fixup_device() (line 601) which in turn use the quirks table at
http://lxr.linux.no/source/arch/i386/pci/fixup.c?v=2.6.5#L190 (my chipset
is in line 248).  The quirks table for ICH3 use pci_fixup_ide_trash()at
http://lxr.linux.no/source/arch/i386/pci/fixup.c?v=2.6.5#L90 - this reset
the BARs for the device.  Resetting the all (4) BARs of (ICH3) IDE
controllers will cause them to use the defaults BARs (0x170, 0x1f0) in
ide_hwif_configure() at
http://lxr.linux.no/source/drivers/ide/setup-pci.c?v=2.6.5#L420.  This will
fail with any subsequent (ICH3) IDE controllers (two devices can't use the
same ports). 

I'm not sure if ICH3 needs to reset its BARs at all, but if it is, I
suggest making sure pci_fixup_ide_trash() reset BARs only for first time
being called.  In that way subsequent IDE controllers will use the BIOS
BARs (which we set fine, and worked GREAT at 2.4.x), as said above, this is
better than "loosing" all the other IDE controllers in the case their BARs
set right.

Thanks in advance,
Shai.
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help