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