Subject: PCI: master abort

From: Nicolas Pitre <[email-masked]>
Date: Tue, 4 Jan 2000 17:03:33 -0500 (EST)

I'm trying to make a Sangoma PCI card work over an EBSA285 PCI bus with
Linux-2.2.13-rmk2. The driver works fine under i386 and only ioremap()'ed
memory is used to communicate with the card.  The card is probed correctly
and initialized, but at some point I get this each time the driver is
launched:

PCI: master abort pc=[<C00DD224>]

The reportd PC is always the same and is located in memset:

...
c00dd20c:       e35c0002        cmp     ip, #2
c00dd210:       b4c31001        strltb  r1, [r3], #1
c00dd214:       d4c31001        strleb  r1, [r3], #1
c00dd218:       e4c31001        strb    r1, [r3], #1
c00dd21c:       e26cc004        rsb     ip, ip, #4
c00dd220:       e042200c        sub     r2, r2, ip
c00dd224:       e1811401        orr     r1, r1, r1, lsl #8
c00dd228:       e1811801        orr     r1, r1, r1, lsl #16
c00dd22c:       e3520c01        cmp     r2, #256
c00dd230:       ba00001d        blt     c00dd2ac <memset+0xb4>
...

After the "master abort" message, the driver times out and fail.

On the same setup, I can play with a 3C905 and a Promise/IDE PCI card
with no problem.

Any idea on what can be wrong?

Nicolas

unsubscribe: body of `unsubscribe linux-arm-kernel' to [email-masked]

---

From: Philip Blundell <[email-masked]>
Date: Wed, 05 Jan 2000 00:07:27 +0000

>The reportd PC is always the same and is located in memset:

Sounds like you might be calling memset() directly on ioremap'd memory, rather 
than using memset_io.  Try setting IO_FUDGE_FACTOR to zero and see if that 
helps any.

p.