All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Zhang, Yanmin" <yanmin_zhang@linux.intel.com>
To: linux-ia64@vger.kernel.org
Subject: RE: [Fedora-ia64-list] [PATCH] ide controller quirk to correct
Date: Wed, 14 Feb 2007 03:15:48 +0000	[thread overview]
Message-ID: <1171422948.2978.35.camel@ymzhang> (raw)
In-Reply-To: <45D1DE90.9080709@redhat.com>

On Tue, 2007-02-13 at 10:37 -0800, Luck, Tony wrote:
> > +	pci_read_config_byte(dev, PCI_CLASS_PROG, &tmp8);
> > +	mask = (1 << 2) | (1 << 0);
> > +	if ((tmp8 & mask) = mask)
> 
> Are there no symbolic defines for these bits?
No.

>   If there are, then
> use them.  If not, then does it really help readability to assemble
> the bits by hand?  Why not just use:
> 
> 	if ((tmp8 & 5) = 5)
Ok, I will change it.

> 
> -Tony
> 
> P.S.   The BIOS per se isn't to blame here.  If you dump pci space
> from the EFI prompt (use "pci 0 1f 1") you'll see that the BIOS really
> hasn't initialized the BARs at all.Perhaps some stuff in ACPI sets
> them up (wrongly)?
I checked the BARs under EFI prompt. BAR 5 is 0 which looks like not
initialized by BIOS. But my opinion is BIOS really initiates BAR 5 as
0, or it should change it to non-zero but it doesn't.
Function pci_read_bases reads all 6 bars from the device configuraton
space and initiates dev->resource[]. When a BAR=0, if the sz (size) is not zero,
the resource[].start will be set to 0 and resource[].end will be set to
sz. resource[].flag is IORESOURCE_MEM. Such data is realy the same thing
we could see under /sys/devices/_bus_/_deviceid_/resource after kernel boot.

That behavior is also consistent with what Alan replied on linux-ide maillist.

Below is the new patch. Thank Tony.

---

If ide controllers are at legacy mode, only the 4th BAR
is needed, so some BIOS initiate other BAR with incorrect
value. ata/ata_piix calls pci_enable_device on the ide
controller, which will check BAR resources. If the BAR
resource values are incorrect, pci_enable_device will fail,
and ata/ata_piix couldn't attach the ide controller.

Below patch against 2.6.20 creates a quirk to correct the
bad BAR resources for a special ide controller which is
popular on tiger-4.

Signed-off-by: Zhang Yanmin <yanmin.zhang@intel.com>

---

--- linux-2.6.20/arch/ia64/kernel/quirks.c	1969-12-31 19:00:00.000000000 -0500
+++ linux-2.6.20_fix/arch/ia64/kernel/quirks.c	2007-02-13 13:56:34.000000000 -0500
@@ -0,0 +1,45 @@
+/*
+ * This file contains work-arounds for ia64 platform bugs.
+ */
+#include <linux/pci.h>
+
+/*
+ * quirk_intel_ide_controller: If an ide/ata controller is
+ * at legacy mode, BIOS might initiates BAR(bar 0~3 and 5)
+ * with incorrect value. This quirk will reset the incorrect
+ * value to 0.
+ */
+static void __devinit quirk_intel_ide_controller(struct pci_dev *dev)
+{
+	unsigned int pos;
+	struct resource *res;
+	int fixed = 0;
+	u8 tmp8;
+
+	if ((dev->class >> 8) != PCI_CLASS_STORAGE_IDE)
+		return;
+
+	/* TODO: What if one channel is in native mode ... */
+	pci_read_config_byte(dev, PCI_CLASS_PROG, &tmp8);
+	if ((tmp8 & 5) = 5)
+		return;
+
+	for( pos = 0; pos < 6; pos ++ ) {
+		res = &dev->resource[pos];
+		if (!(res->flags & (IORESOURCE_IO | IORESOURCE_MEM)))
+			continue;
+
+		if (!res->start && res->end) {
+			res->start = res->end = 0;
+			res->flags = 0;
+			fixed = 1;
+		}
+	}
+	if (fixed)
+		printk(KERN_WARNING
+			"PCI device %s: BIOS resource configuration fixed.\n",
+			pci_name(dev));
+}
+
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_11, quirk_intel_ide_controller);
+
--- linux-2.6.20/arch/ia64/kernel/Makefile	2007-02-08 02:13:41.000000000 -0500
+++ linux-2.6.20_fix/arch/ia64/kernel/Makefile	2007-02-12 09:49:39.000000000 -0500
@@ -33,6 +33,7 @@ obj-$(CONFIG_CRASH_DUMP)	+= crash_dump.o
 obj-$(CONFIG_IA64_UNCACHED_ALLOCATOR)	+= uncached.o
 obj-$(CONFIG_AUDIT)		+= audit.o
 obj-$(CONFIG_PCI_MSI)		+= msi_ia64.o
+obj-$(CONFIG_PCI)		+= quirks.o
 mca_recovery-y			+= mca_drv.o mca_drv_asm.o
 
 obj-$(CONFIG_IA64_ESI)		+= esi.o

  reply	other threads:[~2007-02-14  3:15 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-02-13 15:51 [Fedora-ia64-list] [PATCH] ide controller quirk to correct bad Prarit Bhargava
2007-02-14  3:15 ` Zhang, Yanmin [this message]
2007-02-14  3:26 ` Zhang, Yanmin
2007-02-15 13:46 ` [Fedora-ia64-list] [PATCH] ide controller quirk to correct badBAR Prarit Bhargava

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1171422948.2978.35.camel@ymzhang \
    --to=yanmin_zhang@linux.intel.com \
    --cc=linux-ia64@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.