Messages in this thread | | | Date | Mon, 25 Aug 2008 09:51:33 -0700 | From | Ira Snyder <> | Subject | Problems with Freescale DMA driver |
| |
Hello LKML,
I'm developing on a Freescale MPC8349EA MDS evaluation board. I'm currently testing the DMA controller. It uses the CONFIG_FSL_DMA driver.
All tests were done with a recent git pull.
I built the CONFIG_DMATEST DMA test client, and it runs perfectly in the absence of other DMA activity. Enabling CONFIG_NET_DMA and running the DMA test client while network traffic is running causes failures such as the following:
of-fsl-dma-channel e0008100.dma-channe: DMA halt timeout! dma0chan0-test0: dstbuf[0x9c0] mismatch! Expected c2, got df dma0chan0-test0: dstbuf[0x9c1] mismatch! Expected c1, got df dma0chan0-test0: dstbuf[0x9c2] mismatch! Expected c0, got df dma0chan0-test0: dstbuf[0x9c3] not copied! Expected df, got 3c dma0chan0-test0: dstbuf[0x9c4] not copied! Expected de, got 3b dma0chan0-test0: dstbuf[0x9c5] not copied! Expected dd, got 3a dma0chan0-test0: dstbuf[0x9c6] not copied! Expected dc, got 39 dma0chan0-test0: dstbuf[0x9c7] not copied! Expected db, got 38 dma0chan0-test0: dstbuf[0x9c8] not copied! Expected da, got 37 dma0chan0-test0: dstbuf[0x9c9] not copied! Expected d9, got 36 dma0chan0-test0: dstbuf[0x9ca] not copied! Expected d8, got 35 dma0chan0-test0: dstbuf[0x9d8] mismatch! Expected ca, got c2 dma0chan0-test0: dstbuf[0x9d9] mismatch! Expected c9, got c1 dma0chan0-test0: dstbuf[0x9da] mismatch! Expected c8, got c0 dma0chan0-test0: dstbuf[0x9db] mismatch! Expected c7, got df dma0chan0-test0: dstbuf[0x9dc] mismatch! Expected c6, got de dma0chan0-test0: dstbuf[0x9dd] mismatch! Expected c5, got dd dma0chan0-test0: dstbuf[0x9de] mismatch! Expected c4, got dc dma0chan0-test0: dstbuf[0x9df] mismatch! Expected c3, got db dma0chan0-test0: dstbuf[0x9e0] mismatch! Expected c2, got da dma0chan0-test0: dstbuf[0x9e1] mismatch! Expected c1, got d9 dma0chan0-test0: dstbuf[0x9e2] mismatch! Expected c0, got d8 dma0chan0-test0: dstbuf[0x9e3] mismatch! Expected df, got d7 dma0chan0-test0: dstbuf[0x9e4] mismatch! Expected de, got d6 dma0chan0-test0: dstbuf[0x9e5] mismatch! Expected dd, got d5 dma0chan0-test0: dstbuf[0x9e6] mismatch! Expected dc, got d4 dma0chan0-test0: dstbuf[0x9e7] mismatch! Expected db, got d3 dma0chan0-test0: dstbuf[0x9e8] mismatch! Expected da, got d2 dma0chan0-test0: dstbuf[0x9e9] mismatch! Expected d9, got d1 dma0chan0-test0: dstbuf[0x9ea] mismatch! Expected d8, got d0 dma0chan0-test0: dstbuf[0x9eb] mismatch! Expected d7, got cf dma0chan0-test0: dstbuf[0x9ec] mismatch! Expected d6, got ce dma0chan0-test0: 7011 errors suppressed dma0chan0-test0: #12268: 7043 errors with src_off=0x1b6b dst_off=0x96e len=0x1be2
Is this to be expected? I thought the whole point of the DMAEngine API was to enable sharing of DMA channels.
Another issue I noticed was running a network transfer from another computer to the board. I get the following in dmesg, varying numbers of times. This is with no other DMA activity running, dmatest is not loaded. NET_DMA should be the only thing using the controller:
of-fsl-dma-channel e0008100.dma-channe: DMA halt timeout! of-fsl-dma-channel e0008100.dma-channe: DMA halt timeout! of-fsl-dma-channel e0008100.dma-channe: DMA halt timeout! of-fsl-dma-channel e0008100.dma-channe: DMA halt timeout! of-fsl-dma-channel e0008100.dma-channe: DMA halt timeout! of-fsl-dma-channel e0008100.dma-channe: DMA halt timeout! of-fsl-dma-channel e0008100.dma-channe: DMA halt timeout! of-fsl-dma-channel e0008100.dma-channe: DMA halt timeout! of-fsl-dma-channel e0008100.dma-channe: DMA halt timeout!
On the run where the above errors were printed, /sys/class/dma/dma0chan0/memcpy_count increased by ~36000. Certainly the DMA halt error doesn't happen for every single dma transaction.
Is this normal behavior, or is something broken in the driver?
I've CC'd the maintainers responsible for the FSL DMA driver, as well as the generic DMA offload system.
Please CC me on any responses, I'm not subscribed to LKML.
I'm happy to help test any changes, or add information if it is needed, please just ask.
Thanks, Ira
| |