RE: [PATCH] Multiple (ICH3) IDE-controllers in a system
From: Shai Fultheim
Date: Sat May 15 2004 - 23:24:29 EST
Here is what I see: 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
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
Agree or not?
My patch (not sure there is nicer way to handle this), will not allow reset
of BARs if you hit any ICH3 which is not the first one. This will rely on
BIOS setting for all other controllers.
From: Jeff Garzik [mailto:jgarzik@xxxxxxxxx]
Sent: Saturday, May 15, 2004 11:57
To: Linux Kernel Mailing List
Cc: shai@xxxxxxxxx; Bartlomiej Zolnierkiewicz; Andrew Morton
Subject: Re: [PATCH] Multiple (ICH3) IDE-controllers in a system
Linux Kernel Mailing List wrote:
> ChangeSet 1.1627, 2004/05/15 09:42:40-07:00, shai@xxxxxxxxx
> [PATCH] Multiple (ICH3) IDE-controllers in a system
> This fixes a problem with multiple IDE controllers in a system.
> The problem is that pcibios_fixups table (in arch/i386/pci/fixup.c)
> the pci_fixup_ide_trash() quirk for Intel's ICH3 (my case
> 8086:248b). This clears any bogus BAR information set up by the
> In a system which has multiple ICH3's can't use any of the IDE
> controllers beside the one on the first ICH3.
> Anyhow, the fix is to make sure pci_fixup_ide_trash resets the BARs
> for first time being called, so the subsequent IDE controllers will
> the BIOS BARs. This is better than "loosing" all these IDE
> in the case their BARs set right.
I do not think this is correct.
The programming interface register tells us if we're in legacy or native
mode, which is what this fixup is concerned with, AFAICS.
So, the code should base its actions on whether or not the controller is
in legacy mode, _not_ ordering.
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/