aboutsummaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorMuli Ben-Yehuda <muli@il.ibm.com>2007-07-21 17:10:49 +0200
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-07-21 18:37:11 -0700
commitb8d2ea1b87b02fc94ffcab58b29c83fbbb6a1e4e (patch)
tree0b3a5c7a8b408279696f981bf4d48c50dbb39742 /arch
parent9882234bf2e54ebf4866245d46e2c704a1214ad9 (diff)
x86_64: introduce handle_quirks() for various chipset quirks
Move the aic94xx split completion timeout handling there. Signed-off-by: Muli Ben-Yehuda <muli@il.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Andi Kleen <ak@suse.de> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch')
-rw-r--r--arch/x86_64/kernel/pci-calgary.c25
1 files changed, 17 insertions, 8 deletions
diff --git a/arch/x86_64/kernel/pci-calgary.c b/arch/x86_64/kernel/pci-calgary.c
index b1ab0d50052..9f6dd445370 100644
--- a/arch/x86_64/kernel/pci-calgary.c
+++ b/arch/x86_64/kernel/pci-calgary.c
@@ -807,6 +807,20 @@ static void __init calgary_set_split_completion_timeout(void __iomem *bbar,
readq(target); /* flush */
}
+static void __init calgary_handle_quirks(struct pci_dev* dev)
+{
+ unsigned char busnum = dev->bus->number;
+ struct iommu_table *tbl = dev->sysdata;
+
+ /*
+ * Give split completion a longer timeout on bus 1 for aic94xx
+ * http://bugzilla.kernel.org/show_bug.cgi?id=7180
+ */
+ if (busnum == 1)
+ calgary_set_split_completion_timeout(tbl->bbar, busnum,
+ CCR_2SEC_TIMEOUT);
+}
+
static void __init calgary_enable_translation(struct pci_dev *dev)
{
u32 val32;
@@ -831,14 +845,6 @@ static void __init calgary_enable_translation(struct pci_dev *dev)
writel(cpu_to_be32(val32), target);
readl(target); /* flush */
- /*
- * Give split completion a longer timeout on bus 1 for aic94xx
- * http://bugzilla.kernel.org/show_bug.cgi?id=7180
- */
- if (busnum == 1)
- calgary_set_split_completion_timeout(bbar, busnum,
- CCR_2SEC_TIMEOUT);
-
init_timer(&tbl->watchdog_timer);
tbl->watchdog_timer.function = &calgary_watchdog;
tbl->watchdog_timer.data = (unsigned long)dev;
@@ -890,6 +896,9 @@ static int __init calgary_init_one(struct pci_dev *dev)
pci_dev_get(dev);
dev->bus->self = dev;
+
+ calgary_handle_quirks(dev);
+
calgary_enable_translation(dev);
return 0;