neg at brooktrout.com
Sat Mar 26 09:50:14 EST 2005
It was suggested that I send a message to this mailing list to attempt
to get help with a problem I'm seeing.
I'm using ppc64 (p630), kernel 2.4.x (RH 3.0 patch x).
I'm working on a proprietary driver for a proprietary device.
The device needs to access some host memory in order to perform
a DMA transfer. It can only access 32-bits.
I'm allocating memory using pci_alloc_consistent. I'm passing
the "dma handle" to the device in the place where the bus address
would usually go (I formerly used virt_to_bus for x86).
It seems that after the device performs the DMA, any further
access to MMIO board registers results in a system crash (such accesses
work fine prior to the device DMA). Here is the panic message on the
RTAS: 2 --------- RTAS event begin
RTAS 0: 00000000 00000000
RTAS: 2 --------- RTAS event end
Kernel panic: EEH: MMIO failure (2) on device:pci12e4,1000 /pci at 400000000111/pci at 2,6/pci12e4,1000 at 1
It was suggested to me that the DMA was to a bad address, and that this
caused the device to be isolated. I didn't know the system could do that,
but it makes sense to me.
The amount allocated is PAGE_SIZE. The DMA size is normally 1K. The transfer
start address can be at any multiple of 1K within the PAGE_SIZE-sized
I did this 4 times, and got these addresses.
dma handle: 40000000
dma handle: 40001000
dma handle: 40002000
dma handle: 40003000
Assuming you trust that these dma handle values are properly being sent to the
device, does anyone have any suggestions for what I'm doing wrong? Is there
some further translation I need to do of the dma handle before passing it to
the device? Other drivers I looked at didn't seem to.
More information about the Linuxppc64-dev