I followed this thread to test the DMA driver. It worked OK with 32bit Fedora 11. When we moved the card to CentOS 4.3 64bit linux, the dma_test failed. I can't figure out why, please help!
Here is the dmesg:
altpciechdma init(), built at Oct 13 2009 13:54:17
probe(dev = 0xffff81015fb33800, pciid = 0xffffffff88661b80)
probe() ape = 0xffff81015c9ac7c0
sizeof(struct ape_chdma_table) = 4096.
table_virt = 0xffff810140e35000, table_bus = 0x 140e35000.
PCI: Enabling device 0000:06:00.0 (0000 -> 0002)
PCI: Setting latency timer of device 0000:06:00.0 to 64
Enabled MSI interrupting.
Using a 64-bit DMA mask.
IRQ pin# 0 (0=none, 1=INTA#...4=INTD#).
IRQ line# 0.
Succesfully requested IRQ# 194 with dev_id 0xffff81015c9ac7c0
BAR0 0xc0000000-0xcfffffff flags 0x00000200
BAR1 0xdcf80000-0xdcfbffff flags 0x00000200
BAR2 0xdcfc0000-0xdcffffff flags 0x00000200
BAR[0] mapped at 0xffffc20010370000 with length 32768(/268435456).
BAR[2] mapped at 0xffffc2000002a000 with length 256(/262144).
bar_tests(), PAGE_SIZE = 0x1000
write_header = 0xffffc2000002a000.
read_header = 0xffffc2000002a010.
&write_header->w3 = 0xffffc2000002a00c
&read_header->w3 = 0xffffc2000002a01c
ape->table_virt = 0xffff810140e35000.
Allocated cache-coherent DMA buffer (virtual address = 0xffff810140784000, bus address = 0x0000000140784000).
writing 0x000400ff to 0xffffc2000002a010
writing 0x00000001 to 0xffffc2000002a014
writing 0x40e35000 to 0xffffc2000002a018
Flush posted writes
Start DMA read
writing 0x000000fe to 0xffffc2000002a01c
EPLAST = 64222
POLL FOR READ:
EPLAST = 64222, n = 254
EPLAST = 64222, n = 254
EPLAST = 64222, n = 254
EPLAST = 64222, n = 254
EPLAST = 64222, n = 254
EPLAST = 64222, n = 254
EPLAST = 64222, n = 254
EPLAST = 64222, n = 254
..............
Start DMA write
POLL FOR WRITE:
EPLAST = 64222, n = 254
EPLAST = 64222, n = 254
EPLAST = 64222, n = 254
EPLAST = 64222, n = 254
EPLAST = 64222, n = 254
................
[ffff810140784000] = 0x40784000 != [ffff810140786000] = 0x40786000 ?!
[ffff810140784004] = 0x40784004 != [ffff810140786004] = 0x40786004 ?!
[ffff810140784008] = 0x40784008 != [ffff810140786008] = 0x40786008 ?!
[ffff81014078400c] = 0x4078400c != [ffff81014078600c] = 0x4078600c ?!
[ffff810140784010] = 0x40784010 != [ffff810140786010] = 0x40786010 ?!
[ffff810140784014] = 0x40784014 != [ffff810140786014] = 0x40786014 ?!
[ffff810140784018] = 0x40784018 != [ffff810140786018] = 0x40786018 ?!
[ffff81014078401c] = 0x4078401c != [ffff81014078601c] = 0x4078601c ?!
[ffff810140784020] = 0x40784020 != [ffff810140786020] = 0x40786020 ?!
---more errors follow! not printed---
DMA loop back test FAILED.
bar_tests() end, result -1
probe() successful.