This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Keystone 2 K2EVM SPI DMA Issue

Greetings. I have a Rev 1.1 EVM running the Linux kernel (3.10 from MCSDK 3_00_03_15) and I have already proved out the default INTR based SPI interface. I was able to get the spi clock up to about 44MHz and used 16 bit data words but there is a 4usec gap between words that I am trying to reduce by enabling DMA. I reflashed my image with the following SPI dts:

 spi2:spi@21000800 {
        #address-cells                  = <1>;
        #size-cells                     = <0>;
        compatible                      = "ti,davinci-spi-v1";
        reg                             = <0x21000800 0x200="">;
        ti,davinci-spi-num-cs           = <4>;
        ti,davinci-spi-intr-line        = <0>;
        interrupts                      = <0 300="" 0xf01="">;
        clocks                          = <&clkspi>;

        spidev20:spi@0 {
                #address-cells = <1>;
                #size-cells = <1>;
                compatible = "rohm,dh2228fv";
                spi-max-frequency = <66000000>;
                ti,davinci-spi-io-type = <2>;
                reg = <0>;
        };
        spidev21:spi@1 {
                #address-cells = <1>;
                #size-cells = <1>;
                compatible = "rohm,dh2228fv";
                spi-max-frequency = <66000000>;
                ti,davinci-spi-io-type = <2>;
                reg = <1>;
        };
        spidev22:spi@2 {
                #address-cells = <1>;
                #size-cells = <1>;
                compatible = "rohm,dh2228fv";
                spi-max-frequency = <66000000>;
                ti,davinci-spi-io-type = <2>;
                reg = <2>;
        };
        spidev23:spi@3 {
                #address-cells = <1>;
                #size-cells = <1>;
                compatible = "rohm,dh2228fv";
                spi-max-frequency = <66000000>;
                ti,davinci-spi-io-type = <2>;
                reg = <3>;
        };
};

I try to send spi data the same way I had before I enabled DMA:

sudo python
>> import spidev
>> spi = spidev.SpiDev()
>> spi.open(32764,0)
>> spi.max_speed_hz = 66000000
>> spi.xfer([0xaa,0xaa,0x00,0xaa])

I get the following kernel trace:

[  263.014639] Unable to handle kernel NULL pointer dereference at virtual address 00000004
[  263.022157] pgd = c0003000
[  263.024687] [00000004] *pgd=80000800004003, *pmd=00000000
[  263.029718] Internal error: Oops: 207 [#1] SMP ARM
[  263.034166] Modules linked in:
[  263.037013] CPU: 0 PID: 6 Comm: kworker/u8:0 Not tainted 3.10.10 #2
[  263.042842] Workqueue: 21000800.spi bitbang_work
[  263.047135] task: de8b5180 ti: de8ca000 task.ti: de8ca000
[  263.052153] PC is at davinci_spi_bufs+0x27c/0x750
[  263.056521] LR is at 0x0
[  263.058875] pc : []    lr : [<00000000>]    psr: a0000013
[  263.058875] sp : de8cbe00  ip : 00000000  fp : 10170000
[  263.069534] r10: dd407d40  r9 : ddac9480  r8 : deb57000
[  263.074385] r7 : dd407c40  r6 : de3b3dd8  r5 : 00000001  r4 : 00000002
[  263.080446] r3 : c07a3c58  r2 : 00000000  r1 : 00000000  r0 : 00000000
[  263.086508] Flags: NzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
[  263.093295] Control: 30c5387d  Table: 1d856140  DAC: fffffffd
[  263.098630] Process kworker/u8:0 (pid: 6, stack limit = 0xde8ca238)
[  263.104448] Stack: (0xde8cbe00 to 0xde8cc000)
[  263.108495] be00: 00000000 00000002 00000000 c0bee828 00000000 00000000 00000020 00000000
[  263.116091] be20: be69e344 de8aeb00 ffffd6d3 00000000 00000001 c0bf0880 c07620c0 de8cbe54
[  263.123686] be40: 00000002 21000840 00000000 00000002 00000000 00000001 00000000 00000000
[  263.131280] be60: 00000000 00000001 00000000 2100083c 00000000 00000002 00000000 00000001
[  263.138874] be80: 00000000 00000000 de3b3ddb dd4f3ec4 00000001 dd4f3ec4 c077ef60 dd407c40
[  263.146470] bea0: de3b3ddc deb57000 00000001 c030f818 00000000 00000001 de3b3dd0 de3b3dec
[  263.154066] bec0: deb57000 de3b3df0 00100100 00200200 c00f70f8 de3b3ddc de8a8d80 c07a36e0
[  263.161661] bee0: de804e00 ddb52700 00000000 de8ca038 00000000 c003b114 00000000 c003bc8c
[  263.169256] bf00: de968780 00000000 dea7c600 de8a8d80 de804e14 de8a8d98 de8ca000 de8ca030
[  263.176850] bf20: 00000001 de8ca000 de804e00 c003be58 c003bd20 00000000 00000000 c07a33a6
[  263.184444] bf40: de8cbf64 de8b9dd0 00000000 de8a8d80 c003bd20 00000000 00000000 00000000
[  263.192040] bf60: 00000000 c0040e94 ffffffff 00000000 7fffffff de8a8d80 00000000 00000000
[  263.199636] bf80: de8cbf80 de8cbf80 00000000 00000000 de8cbf90 de8cbf90 de8cbfac de8b9dd0
[  263.207231] bfa0: c0040de0 00000000 00000000 c000d7b8 00000000 00000000 00000000 00000000
[  263.214826] bfc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[  263.222421] bfe0: 00000000 00000000 00000000 00000000 00000013 00000000 fffbffff ffbafbff
[  263.230026] [] (davinci_spi_bufs+0x27c/0x750) from [] (bitbang_work+0x15c)
[  263.238519] [] (bitbang_work+0x15c/0x34c) from [] (process_one_work+0x148)
[  263.247010] [] (process_one_work+0x148/0x3e4) from [] (worker_thread+0x13)
[  263.255582] [] (worker_thread+0x138/0x3fc) from [] (kthread+0xb4/0xb8)
[  263.263267] [] (kthread+0xb4/0xb8) from [] (ret_from_fork+0x14/0x3c)
[  263.270784] Code: e250a000 03e0000b 0a00003f e5960080 (e5903004) 
[  263.276525] ---[ end trace 521f23d32eba3f1b ]---
[  263.280846] Unable to handle kernel paging request at virtual address ffffffec
[  263.287552] pgd = c0003000
[  263.290064] [ffffffec] *pgd=80000800007003, *pmd=81eff6003, *pte=00000000
[  263.296388] Internal error: Oops: 207 [#2] SMP ARM
[  263.300834] Modules linked in:
[  263.303676] CPU: 0 PID: 6 Comm: kworker/u8:0 Tainted: G      D      3.10.10 #2
[  263.310392] task: de8b5180 ti: de8ca000 task.ti: de8ca000
[  263.315409] PC is at kthread_data+0x4/0xc
[  263.319135] LR is at wq_worker_sleeping+0xc/0xbc
[  263.323423] pc : []    lr : []    psr: 20000193
[  263.323423] sp : de8cbb40  ip : 00000c00  fp : de8cbbf4
[  263.334082] r10: 00492000  r9 : de8b5308  r8 : de8ca008
[  263.338932] r7 : c075e880  r6 : 00000000  r5 : c0bf0880  r4 : 00000000
[  263.344992] r3 : 00000000  r2 : 00000000  r1 : 00000000  r0 : de8b5180
[  263.351054] Flags: nzCv  IRQs off  FIQs on  Mode SVC_32  ISA ARM  Segment user
[  263.357760] Control: 30c5387d  Table: 1d856140  DAC: fffffffd
[  263.363093] Process kworker/u8:0 (pid: 6, stack limit = 0xde8ca238)
[  263.368911] Stack: (0xde8cbb40 to 0xde8cc000)
[  263.372959] bb40: de8b5180 c05140e0 00000004 60000193 00000001 c07875e0 de8cbb8c 80180017
[  263.380555] bb60: c075c400 c02c374c c0025120 c075e880 c075e880 c07a33d4 c051f91c c0768440
[  263.388150] bb80: c0768470 c07688f8 c002493c de805000 c075c400 c00cbc7c c07a5400 de8c1500
[  263.395745] bba0: c07a5418 00000000 de8b5180 c07a5418 00000001 c00249b4 00000001 00200200
[  263.403341] bbc0: 00000001 00000000 00000000 c0516ff0 de8cbbd0 c0762040 00000001 de8b528c
[  263.410936] bbe0: de8b5178 de8b528c de8b4000 de8ca000 de8b5180 c0025120 c06474b0 de8cbc10
[  263.418532] bc00: 00000001 de8ca038 de8b52d4 09b409b4 09b409b4 de8cbc10 00000207 c076e7f0
[  263.426128] bc20: de8ca000 0000000b c06474b0 00000207 de8b5180 de8ca000 c07a5184 c0011760
[  263.433723] bc40: de8ca238 0000000b 00000000 60000113 c0685ee8 00000004 00000207 00000000
[  263.441318] bc60: de8cbdb8 00000000 de8b5180 00000028 00000000 c050ec58 00000004 c0516ca4
[  263.448914] bc80: 00000001 de8cbcf0 de8cbdb0 de58d094 ffffffff 00000000 00000000 c00a30dc
[  263.456509] bca0: de8cbcf0 c00a404c 1dcd6500 00000000 8b918500 00000030 0001b938 ffffffff
[  263.464104] bcc0: 00000000 ffffffff 00000000 00000004 00000000 00000000 00000000 c00525ac
[  263.471700] bce0: 00000400 00000000 00000000 00000000 00000000 00000207 c0516ad0 c076f218
[  263.479296] bd00: 00000004 de8cbdb8 ddac9480 dd407d40 10170000 c0008420 de8cbe54 00000000
[  263.486890] bd20: de8cbd20 00000000 00000000 00000000 00000000 00000001 00000001 00000001
[  263.494486] bd40: 00000000 00000001 00000000 de8adac0 00000000 00001000 00000000 00000000
[  263.502080] bd60: 00000000 00000000 00000001 00000000 00000000 00000000 00000000 00000000
[  263.509676] bd80: 00000000 00000000 00000000 00000000 de8cbe84 c07688f8 ffffd6d3 00000000
[  263.517271] bda0: c0310c78 a0000013 ffffffff de8cbdec deb57000 c0515598 00000000 00000000
[  263.524866] bdc0: 00000000 c07a3c58 00000002 00000001 de3b3dd8 dd407c40 deb57000 ddac9480
[  263.532461] bde0: dd407d40 10170000 00000000 de8cbe00 00000000 c0310c78 a0000013 ffffffff
[  263.540056] be00: 00000000 00000002 00000000 c0bee828 00000000 00000000 00000020 00000000
[  263.547652] be20: be69e344 de8aeb00 ffffd6d3 00000000 00000001 c0bf0880 c07620c0 de8cbe54
[  263.555247] be40: 00000002 21000840 00000000 00000002 00000000 00000001 00000000 00000000
[  263.562842] be60: 00000000 00000001 00000000 2100083c 00000000 00000002 00000000 00000001
[  263.570437] be80: 00000000 00000000 de3b3ddb dd4f3ec4 00000001 dd4f3ec4 c077ef60 dd407c40
[  263.578032] bea0: de3b3ddc deb57000 00000001 c030f818 00000000 00000001 de3b3dd0 de3b3dec
[  263.585628] bec0: deb57000 de3b3df0 00100100 00200200 c00f70f8 de3b3ddc de8a8d80 c07a36e0
[  263.593223] bee0: de804e00 ddb52700 00000000 de8ca038 00000000 c003b114 00000000 c003bc8c
[  263.600819] bf00: de968780 00000000 dea7c600 de8a8d80 de804e14 de8a8d98 de8ca000 de8ca030
[  263.608414] bf20: 00000001 de8ca000 de804e00 c003be58 c003bd20 00000000 00000000 c07a33a6
[  263.616009] bf40: de8cbf64 de8b9dd0 00000000 de8a8d80 c003bd20 00000000 00000000 00000000
[  263.623604] bf60: 00000000 c0040e94 ffffffff 00000000 7fffffff de8a8d80 00000000 00000000
[  263.631200] bf80: de8cbf80 de8cbf80 00000001 00010001 de8cbf90 de8cbf90 de8cbfac de8b9dd0
[  263.638795] bfa0: c0040de0 00000000 00000000 c000d7b8 00000000 00000000 00000000 00000000
[  263.646390] bfc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[  263.653985] bfe0: 00000000 00000000 00000000 00000000 00000013 00000000 fffbffff ffbafbff
[  263.661589] [] (kthread_data+0x4/0xc) from [] (wq_worker_sleeping+0xc/0xb)
[  263.669678] [] (wq_worker_sleeping+0xc/0xbc) from [] (__schedule+0x3b0/0x)
[  263.677926] [] (__schedule+0x3b0/0x644) from [] (do_exit+0x65c/0x8f0)
[  263.685530] [] (do_exit+0x65c/0x8f0) from [] (die+0x218/0x2cc)
[  263.692572] [] (die+0x218/0x2cc) from [] (__do_kernel_fault.part.8+0x64/0)
[  263.700821] [] (__do_kernel_fault.part.8+0x64/0x74) from [] (do_page_faul)
[  263.709874] [] (do_page_fault+0x1d4/0x3d4) from [] (do_DataAbort+0x30/0x9)
[  263.717957] [] (do_DataAbort+0x30/0x94) from [] (__dabt_svc+0x38/0x60)
[  263.725630] Exception stack(0xde8cbdb8 to 0xde8cbe00)
[  263.730320] bda0:                                                       00000000 00000000
[  263.737916] bdc0: 00000000 c07a3c58 00000002 00000001 de3b3dd8 dd407c40 deb57000 ddac9480
[  263.745511] bde0: dd407d40 10170000 00000000 de8cbe00 00000000 c0310c78 a0000013 ffffffff
[  263.753114] [] (__dabt_svc+0x38/0x60) from [] (davinci_spi_bufs+0x27c/0x7)
[  263.761278] [] (davinci_spi_bufs+0x27c/0x750) from [] (bitbang_work+0x15c)
[  263.769767] [] (bitbang_work+0x15c/0x34c) from [] (process_one_work+0x148)
[  263.778256] [] (process_one_work+0x148/0x3e4) from [] (worker_thread+0x13)
[  263.786823] [] (worker_thread+0x138/0x3fc) from [] (kthread+0xb4/0xb8)
[  263.794504] [] (kthread+0xb4/0xb8) from [] (ret_from_fork+0x14/0x3c)
[  263.802020] Code: e513001c e7e00150 e12fff1e e590315c (e5130014) 
[  263.807680] ---[ end trace 521f23d32eba3f1c ]---
[  263.811965] Fixing recursive fault but reboot is needed!

Edit: added Linux kernel version