summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsruffell <sruffell@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2008-04-01 16:39:05 +0000
committersruffell <sruffell@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2008-04-01 16:39:05 +0000
commit042dc3d6c91d7a5d1a35e71954aace1937684fe3 (patch)
tree4d9bf500fb2c1efed9d96198e0cffe5c1407bcde
parentc402e3f8f9b9809adb9a71d11f7ca482d5da7ea1 (diff)
Work around for host bridges that generate fast back to back transactions
which the current version of the quad span cards do not advertise support for. git-svn-id: http://svn.digium.com/svn/zaptel/branches/1.4@4122 5390a7c7-147a-4af0-8ec9-7488f05a26cb
-rw-r--r--kernel/wct4xxp/base.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/kernel/wct4xxp/base.c b/kernel/wct4xxp/base.c
index 0877371..45e030c 100644
--- a/kernel/wct4xxp/base.c
+++ b/kernel/wct4xxp/base.c
@@ -411,6 +411,13 @@ static struct t4 *cards[MAX_T4_CARDS];
static inline unsigned int __t4_pci_in(struct t4 *wc, const unsigned int addr)
{
unsigned int res = readl(&wc->membase[addr]);
+ if (pedanticpci) {
+ /* Even though we do not support fast back-to-back
+ * transactions, some host bridges appear to generate them.
+ * This delay prevents this.
+ */
+ udelay(3);
+ }
return res;
}
@@ -419,6 +426,11 @@ static inline void __t4_pci_out(struct t4 *wc, const unsigned int addr, const un
unsigned int tmp;
writel(value, &wc->membase[addr]);
if (pedanticpci) {
+ /* Even though we do not support fast back-to-back
+ * transactions, some host bridges appear to generate them.
+ * This delay prevents this.
+ */
+ udelay(3);
tmp = __t4_pci_in(wc, WC_VERSION);
if ((tmp & 0xffff0000) != 0xc01a0000)
printk("TE4XXP: Version Synchronization Error!\n");