diff options
author | Muli Ben-Yehuda <muli@il.ibm.com> | 2007-07-21 15:10:49 (GMT) |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-22 01:37:11 (GMT) |
commit | b8d2ea1b87b02fc94ffcab58b29c83fbbb6a1e4e (patch) | |
tree | 0b3a5c7a8b408279696f981bf4d48c50dbb39742 /arch/x86_64 | |
parent | 9882234bf2e54ebf4866245d46e2c704a1214ad9 (diff) | |
download | linux-b8d2ea1b87b02fc94ffcab58b29c83fbbb6a1e4e.tar.xz |
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/x86_64')
-rw-r--r-- | arch/x86_64/kernel/pci-calgary.c | 25 |
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 b1ab0d5..9f6dd44 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; |