diff options
-rw-r--r-- | kernel/wct4xxp/base.c | 12 |
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"); |