libopencm3
A free/libre/open-source firmware library for various ARM Cortex-M3 microcontrollers.
dma_common.h
Go to the documentation of this file.
1/** @addtogroup dma_defines
2 */
3/*
4 * This file is part of the libopencm3 project.
5 *
6 * Copyright (C) 2015 Kuldeep Singh Dhaka <kuldeepdhaka9@gmail.com>
7 *
8 * This library is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU Lesser General Public License as published by
10 * the Free Software Foundation, either version 3 of the License, or
11 * (at your option) any later version.
12 *
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public License
19 * along with this library. If not, see <http://www.gnu.org/licenses/>.
20 */
21
22#pragma once
23
26
27/**@{*/
28
29/*
30 * As per the datasheet, it is an PL230 (licenced from ARM)
31 * note: but only implement 12 channel (PL230 can have upto 32 channels)
32 *
33 * in-future: we can move this to a common peripherial directory
34 * that is idependent of core and as well as uC.
35 * something like device tree in Linux kernel
36 *
37 * note: DMA_STATUS contain the number of PL230 channel are implemented
38 */
39
40#define DMA DMA_BASE
41
42#define DMA_STATUS MMIO32(DMA_BASE + 0x000)
43#define DMA_CONFIG MMIO32(DMA_BASE + 0x004)
44#define DMA_CTRLBASE MMIO32(DMA_BASE + 0x008)
45#define DMA_ALTCTRLBASE MMIO32(DMA_BASE + 0x00C)
46
47#define DMA_CHWAITSTATUS MMIO32(DMA_BASE + 0x010)
48#define DMA_CHSWREQ MMIO32(DMA_BASE + 0x014)
49#define DMA_CHUSEBURSTS MMIO32(DMA_BASE + 0x018)
50#define DMA_CHUSEBURSTC MMIO32(DMA_BASE + 0x01C)
51#define DMA_CHREQMASKS MMIO32(DMA_BASE + 0x020)
52#define DMA_CHREQMASKC MMIO32(DMA_BASE + 0x024)
53#define DMA_CHENS MMIO32(DMA_BASE + 0x028)
54#define DMA_CHENC MMIO32(DMA_BASE + 0x02C)
55#define DMA_CHALTS MMIO32(DMA_BASE + 0x030)
56#define DMA_CHALTC MMIO32(DMA_BASE + 0x034)
57#define DMA_CHPRIS MMIO32(DMA_BASE + 0x038)
58#define DMA_CHPRIC MMIO32(DMA_BASE + 0x03C)
59#define DMA_ERRORC MMIO32(DMA_BASE + 0x04C)
60#define DMA_CHREQSTATUS MMIO32(DMA_BASE + 0xE10)
61#define DMA_CHSREQSTATUS MMIO32(DMA_BASE + 0xE18)
62#define DMA_IF MMIO32(DMA_BASE + 0x1000)
63#define DMA_IFS MMIO32(DMA_BASE + 0x1004)
64#define DMA_IFC MMIO32(DMA_BASE + 0x1008)
65#define DMA_IEN MMIO32(DMA_BASE + 0x100C)
66#define DMA_CTRL MMIO32(DMA_BASE + 0x1010)
67#define DMA_RDS MMIO32(DMA_BASE + 0x1014)
68
69#define DMA_LOOPx(i) MMIO32(DMA_BASE + 0x1020 + ((i) * 0x4))
70#define DMA_LOOP0 DMA_LOOPx(0)
71#define DMA_LOOP1 DMA_LOOPx(1)
72
73#define DMA_RECTx(i) MMIO32(DMA_BASE + 0x1060 + ((i) * 0x4))
74#define DMA_RECT0 DMA_RECT(0)
75
76#define DMA_CHx_CTRL(i) MMIO32(DMA_BASE + 0x1100 + ((i) * 0x4))
77#define DMA_CH0_CTRL DMA_CHx_CTRL(0)
78#define DMA_CH1_CTRL DMA_CHx_CTRL(1)
79#define DMA_CH2_CTRL DMA_CHx_CTRL(2)
80#define DMA_CH3_CTRL DMA_CHx_CTRL(3)
81#define DMA_CH4_CTRL DMA_CHx_CTRL(4)
82#define DMA_CH5_CTRL DMA_CHx_CTRL(5)
83#define DMA_CH6_CTRL DMA_CHx_CTRL(6)
84#define DMA_CH7_CTRL DMA_CHx_CTRL(7)
85#define DMA_CH8_CTRL DMA_CHx_CTRL(8)
86#define DMA_CH9_CTRL DMA_CHx_CTRL(9)
87#define DMA_CH10_CTRL DMA_CHx_CTRL(10)
88#define DMA_CH11_CTRL DMA_CHx_CTRL(11)
89
90/* DMA_STATUS */
91#define DMA_STATUS_CHNUM_SHIFT (16)
92#define DMA_STATUS_CHNUM_MASK (0x1F << DMA_STATUS_CHNUM_SHIFT)
93
94#define DMA_STATUS_STATE_SHIFT (4)
95#define DMA_STATUS_STATE_MASK (0xF << DMA_STATUS_STATE_SHIFT)
96#define DMA_STATUS_STATE(v) \
97 (((v) << DMA_STATUS_STATE_SHIFT) & DMA_STATUS_STATE_MASK)
98#define DMA_STATUS_STATE_IDLE 0
99#define DMA_STATUS_STATE_RDCHCTRLDATA 1
100#define DMA_STATUS_STATE_RDSRCENDPTR 2
101#define DMA_STATUS_STATE_RDDSTENDPTR 3
102#define DMA_STATUS_STATE_RDSRCDATA 4
103#define DMA_STATUS_STATE_WRDSTDATA 5
104#define DMA_STATUS_STATE_WAITREQCLR 6
105#define DMA_STATUS_STATE_WRCHCTRLDATA 7
106#define DMA_STATUS_STATE_STALLED 8
107#define DMA_STATUS_STATE_DONE 9
108#define DMA_STATUS_STATE_PERSCATTRANS 10
109
110#define DMA_STATUS_EN (1 << 0)
111
112/* DMA_CONFIG */
113#define DMA_CONFIG_CHPROT (1 << 5)
114#define DMA_CONFIG_EN (1 << 0)
115
116/* DMA_CHWAITSTATUS */
117#define DMA_CHWAITSTATUS_CHxWAITSTATUS(i) (1 << (i))
118#define DMA_CHWAITSTATUS_CH11WAITSTATUS DMA_CHWAITSTATUS_CHxWAITSTATUS(11)
119#define DMA_CHWAITSTATUS_CH10WAITSTATUS DMA_CHWAITSTATUS_CHxWAITSTATUS(10)
120#define DMA_CHWAITSTATUS_CH9WAITSTATUS DMA_CHWAITSTATUS_CHxWAITSTATUS(9)
121#define DMA_CHWAITSTATUS_CH8WAITSTATUS DMA_CHWAITSTATUS_CHxWAITSTATUS(8)
122#define DMA_CHWAITSTATUS_CH7WAITSTATUS DMA_CHWAITSTATUS_CHxWAITSTATUS(7)
123#define DMA_CHWAITSTATUS_CH6WAITSTATUS DMA_CHWAITSTATUS_CHxWAITSTATUS(6)
124#define DMA_CHWAITSTATUS_CH5WAITSTATUS DMA_CHWAITSTATUS_CHxWAITSTATUS(5)
125#define DMA_CHWAITSTATUS_CH4WAITSTATUS DMA_CHWAITSTATUS_CHxWAITSTATUS(4)
126#define DMA_CHWAITSTATUS_CH3WAITSTATUS DMA_CHWAITSTATUS_CHxWAITSTATUS(3)
127#define DMA_CHWAITSTATUS_CH2WAITSTATUS DMA_CHWAITSTATUS_CHxWAITSTATUS(2)
128#define DMA_CHWAITSTATUS_CH1WAITSTATUS DMA_CHWAITSTATUS_CHxWAITSTATUS(1)
129#define DMA_CHWAITSTATUS_CH0WAITSTATUS DMA_CHWAITSTATUS_CHxWAITSTATUS(0)
130
131/* DMA_CHSWREQ */
132#define DMA_CHSWREQ_CHxSWREQ(i) (1 << (i))
133#define DMA_CHSWREQ_CH11SWREQ DMA_CHSWREQ_CHxSWREQ(11)
134#define DMA_CHSWREQ_CH10SWREQ DMA_CHSWREQ_CHxSWREQ(10)
135#define DMA_CHSWREQ_CH9SWREQ DMA_CHSWREQ_CHxSWREQ(9)
136#define DMA_CHSWREQ_CH8SWREQ DMA_CHSWREQ_CHxSWREQ(8)
137#define DMA_CHSWREQ_CH7SWREQ DMA_CHSWREQ_CHxSWREQ(7)
138#define DMA_CHSWREQ_CH6SWREQ DMA_CHSWREQ_CHxSWREQ(6)
139#define DMA_CHSWREQ_CH5SWREQ DMA_CHSWREQ_CHxSWREQ(5)
140#define DMA_CHSWREQ_CH4SWREQ DMA_CHSWREQ_CHxSWREQ(4)
141#define DMA_CHSWREQ_CH3SWREQ DMA_CHSWREQ_CHxSWREQ(3)
142#define DMA_CHSWREQ_CH2SWREQ DMA_CHSWREQ_CHxSWREQ(2)
143#define DMA_CHSWREQ_CH1SWREQ DMA_CHSWREQ_CHxSWREQ(1)
144#define DMA_CHSWREQ_CH0SWREQ DMA_CHSWREQ_CHxSWREQ(0)
145
146/* DMA_CHUSEBURSTS */
147#define DMA_CHUSEBURSTS_CHxSUSEBURSTS(i) (1 << (i))
148#define DMA_CHUSEBURSTS_CH11SUSEBURSTS DMA_CHUSEBURSTS_CHxSUSEBURSTS(11)
149#define DMA_CHUSEBURSTS_CH10SUSEBURSTS DMA_CHUSEBURSTS_CHxSUSEBURSTS(10)
150#define DMA_CHUSEBURSTS_CH9SUSEBURSTS DMA_CHUSEBURSTS_CHxSUSEBURSTS(9)
151#define DMA_CHUSEBURSTS_CH8SUSEBURSTS DMA_CHUSEBURSTS_CHxSUSEBURSTS(8)
152#define DMA_CHUSEBURSTS_CH7SUSEBURSTS DMA_CHUSEBURSTS_CHxSUSEBURSTS(7)
153#define DMA_CHUSEBURSTS_CH6SUSEBURSTS DMA_CHUSEBURSTS_CHxSUSEBURSTS(6)
154#define DMA_CHUSEBURSTS_CH5SUSEBURSTS DMA_CHUSEBURSTS_CHxSUSEBURSTS(5)
155#define DMA_CHUSEBURSTS_CH4SUSEBURSTS DMA_CHUSEBURSTS_CHxSUSEBURSTS(4)
156#define DMA_CHUSEBURSTS_CH3SUSEBURSTS DMA_CHUSEBURSTS_CHxSUSEBURSTS(3)
157#define DMA_CHUSEBURSTS_CH2SUSEBURSTS DMA_CHUSEBURSTS_CHxSUSEBURSTS(2)
158#define DMA_CHUSEBURSTS_CH1SUSEBURSTS DMA_CHUSEBURSTS_CHxSUSEBURSTS(1)
159#define DMA_CHUSEBURSTS_CH0SUSEBURSTS DMA_CHUSEBURSTS_CHxSUSEBURSTS(0)
160
161/* DMA_CHUSEBURSTC */
162#define DMA_CHUSEBURSTC_CHxSUSEBURSTC(i) (1 << (i))
163#define DMA_CHUSEBURSTC_CH11SUSEBURSTC DMA_CHUSEBURSTC_CHxSUSEBURSTC(11)
164#define DMA_CHUSEBURSTC_CH10SUSEBURSTC DMA_CHUSEBURSTC_CHxSUSEBURSTC(10)
165#define DMA_CHUSEBURSTC_CH9SUSEBURSTC DMA_CHUSEBURSTC_CHxSUSEBURSTC(9)
166#define DMA_CHUSEBURSTC_CH8SUSEBURSTC DMA_CHUSEBURSTC_CHxSUSEBURSTC(8)
167#define DMA_CHUSEBURSTC_CH7SUSEBURSTC DMA_CHUSEBURSTC_CHxSUSEBURSTC(7)
168#define DMA_CHUSEBURSTC_CH6SUSEBURSTC DMA_CHUSEBURSTC_CHxSUSEBURSTC(6)
169#define DMA_CHUSEBURSTC_CH5SUSEBURSTC DMA_CHUSEBURSTC_CHxSUSEBURSTC(5)
170#define DMA_CHUSEBURSTC_CH4SUSEBURSTC DMA_CHUSEBURSTC_CHxSUSEBURSTC(4)
171#define DMA_CHUSEBURSTC_CH3SUSEBURSTC DMA_CHUSEBURSTC_CHxSUSEBURSTC(3)
172#define DMA_CHUSEBURSTC_CH2SUSEBURSTC DMA_CHUSEBURSTC_CHxSUSEBURSTC(2)
173#define DMA_CHUSEBURSTC_CH1SUSEBURSTC DMA_CHUSEBURSTC_CHxSUSEBURSTC(1)
174#define DMA_CHUSEBURSTC_CH0SUSEBURSTC DMA_CHUSEBURSTC_CHxSUSEBURSTC(0)
175
176/* DMA_CHREQMASKS */
177#define DMA_CHREQMASKS_CHxSREQMASKS(i) (1 << (i))
178#define DMA_CHREQMASKS_CH11SREQMASKS DMA_CHREQMASKS_CHxSREQMASKS(11)
179#define DMA_CHREQMASKS_CH10SREQMASKS DMA_CHREQMASKS_CHxSREQMASKS(10)
180#define DMA_CHREQMASKS_CH9SREQMASKS DMA_CHREQMASKS_CHxSREQMASKS(9)
181#define DMA_CHREQMASKS_CH8SREQMASKS DMA_CHREQMASKS_CHxSREQMASKS(8)
182#define DMA_CHREQMASKS_CH7SREQMASKS DMA_CHREQMASKS_CHxSREQMASKS(7)
183#define DMA_CHREQMASKS_CH6SREQMASKS DMA_CHREQMASKS_CHxSREQMASKS(6)
184#define DMA_CHREQMASKS_CH5SREQMASKS DMA_CHREQMASKS_CHxSREQMASKS(5)
185#define DMA_CHREQMASKS_CH4SREQMASKS DMA_CHREQMASKS_CHxSREQMASKS(4)
186#define DMA_CHREQMASKS_CH3SREQMASKS DMA_CHREQMASKS_CHxSREQMASKS(3)
187#define DMA_CHREQMASKS_CH2SREQMASKS DMA_CHREQMASKS_CHxSREQMASKS(2)
188#define DMA_CHREQMASKS_CH1SREQMASKS DMA_CHREQMASKS_CHxSREQMASKS(1)
189#define DMA_CHREQMASKS_CH0SREQMASKS DMA_CHREQMASKS_CHxSREQMASKS(0)
190
191/* DMA_CHREQMASKC */
192#define DMA_CHREQMASKC_CHxSREQMASKC(i) (1 << (i))
193#define DMA_CHREQMASKC_CH11SREQMASKC DMA_CHREQMASKC_CHxSREQMASKC(11)
194#define DMA_CHREQMASKC_CH10SREQMASKC DMA_CHREQMASKC_CHxSREQMASKC(10)
195#define DMA_CHREQMASKC_CH9SREQMASKC DMA_CHREQMASKC_CHxSREQMASKC(9)
196#define DMA_CHREQMASKC_CH8SREQMASKC DMA_CHREQMASKC_CHxSREQMASKC(8)
197#define DMA_CHREQMASKC_CH7SREQMASKC DMA_CHREQMASKC_CHxSREQMASKC(7)
198#define DMA_CHREQMASKC_CH6SREQMASKC DMA_CHREQMASKC_CHxSREQMASKC(6)
199#define DMA_CHREQMASKC_CH5SREQMASKC DMA_CHREQMASKC_CHxSREQMASKC(5)
200#define DMA_CHREQMASKC_CH4SREQMASKC DMA_CHREQMASKC_CHxSREQMASKC(4)
201#define DMA_CHREQMASKC_CH3SREQMASKC DMA_CHREQMASKC_CHxSREQMASKC(3)
202#define DMA_CHREQMASKC_CH2SREQMASKC DMA_CHREQMASKC_CHxSREQMASKC(2)
203#define DMA_CHREQMASKC_CH1SREQMASKC DMA_CHREQMASKC_CHxSREQMASKC(1)
204#define DMA_CHREQMASKC_CH0SREQMASKC DMA_CHREQMASKC_CHxSREQMASKC(0)
205
206/* DMA_CHENS */
207#define DMA_CHENS_CHxSENS(i) (1 << (i))
208#define DMA_CHENS_CH11SENS DMA_CHENS_CHxSENS(11)
209#define DMA_CHENS_CH10SENS DMA_CHENS_CHxSENS(10)
210#define DMA_CHENS_CH9SENS DMA_CHENS_CHxSENS(9)
211#define DMA_CHENS_CH8SENS DMA_CHENS_CHxSENS(8)
212#define DMA_CHENS_CH7SENS DMA_CHENS_CHxSENS(7)
213#define DMA_CHENS_CH6SENS DMA_CHENS_CHxSENS(6)
214#define DMA_CHENS_CH5SENS DMA_CHENS_CHxSENS(5)
215#define DMA_CHENS_CH4SENS DMA_CHENS_CHxSENS(4)
216#define DMA_CHENS_CH3SENS DMA_CHENS_CHxSENS(3)
217#define DMA_CHENS_CH2SENS DMA_CHENS_CHxSENS(2)
218#define DMA_CHENS_CH1SENS DMA_CHENS_CHxSENS(1)
219#define DMA_CHENS_CH0SENS DMA_CHENS_CHxSENS(0)
220
221/* DMA_CHENC */
222#define DMA_CHENC_CHxSENC(i) (1 << (i))
223#define DMA_CHENC_CH11SENC DMA_CHENC_CHxSENC(11)
224#define DMA_CHENC_CH10SENC DMA_CHENC_CHxSENC(10)
225#define DMA_CHENC_CH9SENC DMA_CHENC_CHxSENC(9)
226#define DMA_CHENC_CH8SENC DMA_CHENC_CHxSENC(8)
227#define DMA_CHENC_CH7SENC DMA_CHENC_CHxSENC(7)
228#define DMA_CHENC_CH6SENC DMA_CHENC_CHxSENC(6)
229#define DMA_CHENC_CH5SENC DMA_CHENC_CHxSENC(5)
230#define DMA_CHENC_CH4SENC DMA_CHENC_CHxSENC(4)
231#define DMA_CHENC_CH3SENC DMA_CHENC_CHxSENC(3)
232#define DMA_CHENC_CH2SENC DMA_CHENC_CHxSENC(2)
233#define DMA_CHENC_CH1SENC DMA_CHENC_CHxSENC(1)
234#define DMA_CHENC_CH0SENC DMA_CHENC_CHxSENC(0)
235
236/* DMA_CHALTS */
237#define DMA_CHALTS_CHxSALTS(i) (1 << (i))
238#define DMA_CHALTS_CH11SALTS DMA_CHALTS_CHxSALTS(11)
239#define DMA_CHALTS_CH10SALTS DMA_CHALTS_CHxSALTS(10)
240#define DMA_CHALTS_CH9SALTS DMA_CHALTS_CHxSALTS(9)
241#define DMA_CHALTS_CH8SALTS DMA_CHALTS_CHxSALTS(8)
242#define DMA_CHALTS_CH7SALTS DMA_CHALTS_CHxSALTS(7)
243#define DMA_CHALTS_CH6SALTS DMA_CHALTS_CHxSALTS(6)
244#define DMA_CHALTS_CH5SALTS DMA_CHALTS_CHxSALTS(5)
245#define DMA_CHALTS_CH4SALTS DMA_CHALTS_CHxSALTS(4)
246#define DMA_CHALTS_CH3SALTS DMA_CHALTS_CHxSALTS(3)
247#define DMA_CHALTS_CH2SALTS DMA_CHALTS_CHxSALTS(2)
248#define DMA_CHALTS_CH1SALTS DMA_CHALTS_CHxSALTS(1)
249#define DMA_CHALTS_CH0SALTS DMA_CHALTS_CHxSALTS(0)
250
251/* DMA_CHALTC */
252#define DMA_CHALTC_CHxSALTC(i) (1 << (i))
253#define DMA_CHALTC_CH11SALTC DMA_CHALTC_CHxSALTC(11)
254#define DMA_CHALTC_CH10SALTC DMA_CHALTC_CHxSALTC(10)
255#define DMA_CHALTC_CH9SALTC DMA_CHALTC_CHxSALTC(9)
256#define DMA_CHALTC_CH8SALTC DMA_CHALTC_CHxSALTC(8)
257#define DMA_CHALTC_CH7SALTC DMA_CHALTC_CHxSALTC(7)
258#define DMA_CHALTC_CH6SALTC DMA_CHALTC_CHxSALTC(6)
259#define DMA_CHALTC_CH5SALTC DMA_CHALTC_CHxSALTC(5)
260#define DMA_CHALTC_CH4SALTC DMA_CHALTC_CHxSALTC(4)
261#define DMA_CHALTC_CH3SALTC DMA_CHALTC_CHxSALTC(3)
262#define DMA_CHALTC_CH2SALTC DMA_CHALTC_CHxSALTC(2)
263#define DMA_CHALTC_CH1SALTC DMA_CHALTC_CHxSALTC(1)
264#define DMA_CHALTC_CH0SALTC DMA_CHALTC_CHxSALTC(0)
265
266/* DMA_CHPRIS */
267#define DMA_CHPRIS_CHxSPRIC(i) (1 << (i))
268#define DMA_CHPRIS_CH11SPRIC DMA_CHPRIS_CHxSPRIC(11)
269#define DMA_CHPRIS_CH10SPRIC DMA_CHPRIS_CHxSPRIC(10)
270#define DMA_CHPRIS_CH9SPRIC DMA_CHPRIS_CHxSPRIC(9)
271#define DMA_CHPRIS_CH8SPRIC DMA_CHPRIS_CHxSPRIC(8)
272#define DMA_CHPRIS_CH7SPRIC DMA_CHPRIS_CHxSPRIC(7)
273#define DMA_CHPRIS_CH6SPRIC DMA_CHPRIS_CHxSPRIC(6)
274#define DMA_CHPRIS_CH5SPRIC DMA_CHPRIS_CHxSPRIC(5)
275#define DMA_CHPRIS_CH4SPRIC DMA_CHPRIS_CHxSPRIC(4)
276#define DMA_CHPRIS_CH3SPRIC DMA_CHPRIS_CHxSPRIC(3)
277#define DMA_CHPRIS_CH2SPRIC DMA_CHPRIS_CHxSPRIC(2)
278#define DMA_CHPRIS_CH1SPRIC DMA_CHPRIS_CHxSPRIC(1)
279#define DMA_CHPRIS_CH0SPRIC DMA_CHPRIS_CHxSPRIC(0)
280
281/* DMA_CHPRIC */
282#define DMA_CHPRIC_CHxSPRIC(i) (1 << (i))
283#define DMA_CHPRIC_CH11SPRIC DMA_CHPRIC_CHxSPRIC(11)
284#define DMA_CHPRIC_CH10SPRIC DMA_CHPRIC_CHxSPRIC(10)
285#define DMA_CHPRIC_CH9SPRIC DMA_CHPRIC_CHxSPRIC(9)
286#define DMA_CHPRIC_CH8SPRIC DMA_CHPRIC_CHxSPRIC(8)
287#define DMA_CHPRIC_CH7SPRIC DMA_CHPRIC_CHxSPRIC(7)
288#define DMA_CHPRIC_CH6SPRIC DMA_CHPRIC_CHxSPRIC(6)
289#define DMA_CHPRIC_CH5SPRIC DMA_CHPRIC_CHxSPRIC(5)
290#define DMA_CHPRIC_CH4SPRIC DMA_CHPRIC_CHxSPRIC(4)
291#define DMA_CHPRIC_CH3SPRIC DMA_CHPRIC_CHxSPRIC(3)
292#define DMA_CHPRIC_CH2SPRIC DMA_CHPRIC_CHxSPRIC(2)
293#define DMA_CHPRIC_CH1SPRIC DMA_CHPRIC_CHxSPRIC(1)
294#define DMA_CHPRIC_CH0SPRIC DMA_CHPRIC_CHxSPRIC(0)
295
296/* DMA_ERRORC */
297#define DMA_ERRORC_ERRORC (1 << 0)
298
299/* DMA_CHREQSTATUS */
300#define DMA_CHREQSTATUS_CHxSREQSTATUS(i) (1 << (i))
301#define DMA_CHREQSTATUS_CH11SREQSTATUS DMA_CHREQSTATUS_CHxSREQSTATUS(11)
302#define DMA_CHREQSTATUS_CH10SREQSTATUS DMA_CHREQSTATUS_CHxSREQSTATUS(10)
303#define DMA_CHREQSTATUS_CH9SREQSTATUS DMA_CHREQSTATUS_CHxSREQSTATUS(9)
304#define DMA_CHREQSTATUS_CH8SREQSTATUS DMA_CHREQSTATUS_CHxSREQSTATUS(8)
305#define DMA_CHREQSTATUS_CH7SREQSTATUS DMA_CHREQSTATUS_CHxSREQSTATUS(7)
306#define DMA_CHREQSTATUS_CH6SREQSTATUS DMA_CHREQSTATUS_CHxSREQSTATUS(6)
307#define DMA_CHREQSTATUS_CH5SREQSTATUS DMA_CHREQSTATUS_CHxSREQSTATUS(5)
308#define DMA_CHREQSTATUS_CH4SREQSTATUS DMA_CHREQSTATUS_CHxSREQSTATUS(4)
309#define DMA_CHREQSTATUS_CH3SREQSTATUS DMA_CHREQSTATUS_CHxSREQSTATUS(3)
310#define DMA_CHREQSTATUS_CH2SREQSTATUS DMA_CHREQSTATUS_CHxSREQSTATUS(2)
311#define DMA_CHREQSTATUS_CH1SREQSTATUS DMA_CHREQSTATUS_CHxSREQSTATUS(1)
312#define DMA_CHREQSTATUS_CH0SREQSTATUS DMA_CHREQSTATUS_CHxSREQSTATUS(0)
313
314/* DMA_CHSREQSTATUS */
315#define DMA_CHSREQSTATUS_CHxSREQSTATUS(i) (1 << (i))
316#define DMA_CHSREQSTATUS_CH11SREQSTATUS DMA_CHSREQSTATUS_CHxSREQSTATUS(11)
317#define DMA_CHSREQSTATUS_CH10SREQSTATUS DMA_CHSREQSTATUS_CHxSREQSTATUS(10)
318#define DMA_CHSREQSTATUS_CH9SREQSTATUS DMA_CHSREQSTATUS_CHxSREQSTATUS(9)
319#define DMA_CHSREQSTATUS_CH8SREQSTATUS DMA_CHSREQSTATUS_CHxSREQSTATUS(8)
320#define DMA_CHSREQSTATUS_CH7SREQSTATUS DMA_CHSREQSTATUS_CHxSREQSTATUS(7)
321#define DMA_CHSREQSTATUS_CH6SREQSTATUS DMA_CHSREQSTATUS_CHxSREQSTATUS(6)
322#define DMA_CHSREQSTATUS_CH5SREQSTATUS DMA_CHSREQSTATUS_CHxSREQSTATUS(5)
323#define DMA_CHSREQSTATUS_CH4SREQSTATUS DMA_CHSREQSTATUS_CHxSREQSTATUS(4)
324#define DMA_CHSREQSTATUS_CH3SREQSTATUS DMA_CHSREQSTATUS_CHxSREQSTATUS(3)
325#define DMA_CHSREQSTATUS_CH2SREQSTATUS DMA_CHSREQSTATUS_CHxSREQSTATUS(2)
326#define DMA_CHSREQSTATUS_CH1SREQSTATUS DMA_CHSREQSTATUS_CHxSREQSTATUS(1)
327#define DMA_CHSREQSTATUS_CH0SREQSTATUS DMA_CHSREQSTATUS_CHxSREQSTATUS(0)
328
329/* DMA_IF */
330#define DMA_IF_ERR (1UL << 31)
331#define DMA_IF_CHxDONE(x) (1 << (x))
332#define DMA_IF_CH11DONE DMA_IF_CHxDONE(11)
333#define DMA_IF_CH10DONE DMA_IF_CHxDONE(10)
334#define DMA_IF_CH9DONE DMA_IF_CHxDONE(9)
335#define DMA_IF_CH8DONE DMA_IF_CHxDONE(8)
336#define DMA_IF_CH7DONE DMA_IF_CHxDONE(7)
337#define DMA_IF_CH6DONE DMA_IF_CHxDONE(6)
338#define DMA_IF_CH5DONE DMA_IF_CHxDONE(5)
339#define DMA_IF_CH4DONE DMA_IF_CHxDONE(4)
340#define DMA_IF_CH3DONE DMA_IF_CHxDONE(3)
341#define DMA_IF_CH2DONE DMA_IF_CHxDONE(2)
342#define DMA_IF_CH1DONE DMA_IF_CHxDONE(1)
343#define DMA_IF_CH0DONE DMA_IF_CHxDONE(0)
344
345
346/* DMA_IFS */
347#define DMA_IFS_ERR (1 << 31)
348#define DMA_IFS_CHxDONE(x) (1 << (x))
349#define DMA_IFS_CH11DONE DMA_IFS_CHxDONE(11)
350#define DMA_IFS_CH10DONE DMA_IFS_CHxDONE(10)
351#define DMA_IFS_CH9DONE DMA_IFS_CHxDONE(9)
352#define DMA_IFS_CH8DONE DMA_IFS_CHxDONE(8)
353#define DMA_IFS_CH7DONE DMA_IFS_CHxDONE(7)
354#define DMA_IFS_CH6DONE DMA_IFS_CHxDONE(6)
355#define DMA_IFS_CH5DONE DMA_IFS_CHxDONE(5)
356#define DMA_IFS_CH4DONE DMA_IFS_CHxDONE(4)
357#define DMA_IFS_CH3DONE DMA_IFS_CHxDONE(3)
358#define DMA_IFS_CH2DONE DMA_IFS_CHxDONE(2)
359#define DMA_IFS_CH1DONE DMA_IFS_CHxDONE(1)
360#define DMA_IFS_CH0DONE DMA_IFS_CHxDONE(0)
361
362/* DMA_IFC */
363#define DMA_IFC_ERR (1 << 31)
364#define DMA_IFC_CHxDONE(x) (1 << (x))
365#define DMA_IFC_CH11DONE DMA_IFC_CHxDONE(11)
366#define DMA_IFC_CH10DONE DMA_IFC_CHxDONE(10)
367#define DMA_IFC_CH9DONE DMA_IFC_CHxDONE(9)
368#define DMA_IFC_CH8DONE DMA_IFC_CHxDONE(8)
369#define DMA_IFC_CH7DONE DMA_IFC_CHxDONE(7)
370#define DMA_IFC_CH6DONE DMA_IFC_CHxDONE(6)
371#define DMA_IFC_CH5DONE DMA_IFC_CHxDONE(5)
372#define DMA_IFC_CH4DONE DMA_IFC_CHxDONE(4)
373#define DMA_IFC_CH3DONE DMA_IFC_CHxDONE(3)
374#define DMA_IFC_CH2DONE DMA_IFC_CHxDONE(2)
375#define DMA_IFC_CH1DONE DMA_IFC_CHxDONE(1)
376#define DMA_IFC_CH0DONE DMA_IFC_CHxDONE(0)
377
378/* DMA_IEN */
379#define DMA_IEN_ERR (1 << 31)
380#define DMA_IEN_CHxDONE(x) (1 << (x))
381#define DMA_IEN_CH11DONE DMA_IEN_CHxDONE(11)
382#define DMA_IEN_CH10DONE DMA_IEN_CHxDONE(10)
383#define DMA_IEN_CH9DONE DMA_IEN_CHxDONE(9)
384#define DMA_IEN_CH8DONE DMA_IEN_CHxDONE(8)
385#define DMA_IEN_CH7DONE DMA_IEN_CHxDONE(7)
386#define DMA_IEN_CH6DONE DMA_IEN_CHxDONE(6)
387#define DMA_IEN_CH5DONE DMA_IEN_CHxDONE(5)
388#define DMA_IEN_CH4DONE DMA_IEN_CHxDONE(4)
389#define DMA_IEN_CH3DONE DMA_IEN_CHxDONE(3)
390#define DMA_IEN_CH2DONE DMA_IEN_CHxDONE(2)
391#define DMA_IEN_CH1DONE DMA_IEN_CHxDONE(1)
392#define DMA_IEN_CH0DONE DMA_IEN_CHxDONE(0)
393
394/* DMA_CTRL */
395#define DMA_CTRL_PRDU (1 << 1)
396#define DMA_CTRL_DESCRECT (1 << 0)
397
398/* DMA_RDS */
399#define DMA_RDS_RDSCHx(i) (1 << (i))
400#define DMA_RDS_RDSCH11 DMA_RDS_RDSCHx(11)
401#define DMA_RDS_RDSCH10 DMA_RDS_RDSCHx(10)
402#define DMA_RDS_RDSCH9 DMA_RDS_RDSCHx(9)
403#define DMA_RDS_RDSCH8 DMA_RDS_RDSCHx(8)
404#define DMA_RDS_RDSCH7 DMA_RDS_RDSCHx(7)
405#define DMA_RDS_RDSCH6 DMA_RDS_RDSCHx(6)
406#define DMA_RDS_RDSCH5 DMA_RDS_RDSCHx(5)
407#define DMA_RDS_RDSCH4 DMA_RDS_RDSCHx(4)
408#define DMA_RDS_RDSCH3 DMA_RDS_RDSCHx(3)
409#define DMA_RDS_RDSCH2 DMA_RDS_RDSCHx(2)
410#define DMA_RDS_RDSCH1 DMA_RDS_RDSCHx(1)
411#define DMA_RDS_RDSCH0 DMA_RDS_RDSCHx(0)
412
413/* DMA_LOOP */
414#define DMA_LOOP_EN (1 << 16)
415#define DMA_LOOP_WIDTH_SHIFT (0)
416#define DMA_LOOP_WIDTH_MASK (0x3FF << DMA_LOOP_WIDTH_SHIFT)
417#define DMA_LOOP_WIDTH(v) \
418 (((v) << DMA_LOOP_WIDTH_SHIFT) & DMA_LOOP_WIDTH_MASK)
419
420/* DMA_RECT */
421#define DMA_RECT_DSTSTRIDE_SHIFT (21)
422#define DMA_RECT_DSTSTRIDE_MASK (0x7FF << DMA_RECT_DSTSTRIDE_SHIFT)
423#define DMA_RECT_DSTSTRIDE(v) \
424 (((v) << DMA_RECT_DSTSTRIDE_SHIFT) & DMA_RECT_DSTSTRIDE_MASK)
425
426#define DMA_RECT_SRCSTRIDE_SHIFT (10)
427#define DMA_RECT_SRCSTRIDE_MASK (0x7FF << DMA_RECT_SRCSTRIDE_SHIFT)
428#define DMA_RECT_SRCSTRIDE(v) \
429 (((v) << DMA_RECT_SRCSTRIDE_SHIFT) & DMA_RECT_SRCSTRIDE_MASK)
430
431#define DMA_RECT_HEIGHT_SHIFT (0)
432#define DMA_RECT_HEIGHT_MASK (0x3FF << DMA_RECT_HEIGHT_SHIFT)
433#define DMA_RECT_HEIGHT(v) \
434 (((v) << DMA_RECT_HEIGHT_SHIFT) & DMA_RECT_HEIGHT_MASK)
435
436/* DMA_CH_CTRL */
437#define DMA_CH_CTRL_SOURCESEL_SHIFT (16)
438#define DMA_CH_CTRL_SOURCESEL_MASK (0x3F << DMA_CH_CTRL_SOURCESEL_SHIFT)
439#define DMA_CH_CTRL_SOURCESEL(v) \
440 (((v) << DMA_CH_CTRL_SOURCESEL_SHIFT) & DMA_CH_CTRL_SOURCESEL_MASK)
441#define DMA_CH_CTRL_SOURCESEL_NONE 0b000000
442#define DMA_CH_CTRL_SOURCESEL_ADC0 0b001000
443#define DMA_CH_CTRL_SOURCESEL_DAC0 0b001010
444#define DMA_CH_CTRL_SOURCESEL_USART0 0b001100
445#define DMA_CH_CTRL_SOURCESEL_USART1 0b001101
446#define DMA_CH_CTRL_SOURCESEL_USART2 0b001110
447#define DMA_CH_CTRL_SOURCESEL_LEUART0 0b010000
448#define DMA_CH_CTRL_SOURCESEL_LEUART1 0b010001
449#define DMA_CH_CTRL_SOURCESEL_I2C0 0b010100
450#define DMA_CH_CTRL_SOURCESEL_I2C1 0b010101
451#define DMA_CH_CTRL_SOURCESEL_TIMER0 0b011000
452#define DMA_CH_CTRL_SOURCESEL_TIMER1 0b011001
453#define DMA_CH_CTRL_SOURCESEL_TIMER2 0b011010
454#define DMA_CH_CTRL_SOURCESEL_TIMER3 0b011011
455#define DMA_CH_CTRL_SOURCESEL_UART0 0b101100
456#define DMA_CH_CTRL_SOURCESEL_UART1 0b101101
457#define DMA_CH_CTRL_SOURCESEL_MSC 0b110000
458#define DMA_CH_CTRL_SOURCESEL_AES 0b110001
459#define DMA_CH_CTRL_SOURCESEL_LESENSE 0b110010
460#define DMA_CH_CTRL_SOURCESEL_EBI 0b110011
461
462#define DMA_CH_CTRL_SIGSEL_SHIFT (0)
463#define DMA_CH_CTRL_SIGSEL_MASK (0xF << DMA_CH_CTRL_SIGSEL_SHIFT)
464#define DMA_CH_CTRL_SIGSEL(v) \
465 (((v) << DMA_CH_CTRL_SIGSEL_SHIFT) & DMA_CH_CTRL_SIGSEL_MASK)
466
467#define DMA_CH_CTRL_SIGSEL_OFF 0
468#define DMA_CH_CTRL_SIGSEL_ADC0SINGLE 0
469#define DMA_CH_CTRL_SIGSEL_ADC0SCAN 1
470#define DMA_CH_CTRL_SIGSEL_DAC0CH0 0
471#define DMA_CH_CTRL_SIGSEL_DAC0CH1 1
472#define DMA_CH_CTRL_SIGSEL_USART0RXDATAV 0
473#define DMA_CH_CTRL_SIGSEL_USART0TXBL 1
474#define DMA_CH_CTRL_SIGSEL_USART0TXEMPTY 2
475#define DMA_CH_CTRL_SIGSEL_USART1RXDATAV 0
476#define DMA_CH_CTRL_SIGSEL_USART1TXBL 1
477#define DMA_CH_CTRL_SIGSEL_USART1TXEMPTY 2
478#define DMA_CH_CTRL_SIGSEL_USART1RXDATAVRIGHT 3
479#define DMA_CH_CTRL_SIGSEL_USART1TXBLRIGHT 4
480#define DMA_CH_CTRL_SIGSEL_USART2RXDATAV 0
481#define DMA_CH_CTRL_SIGSEL_USART2TXBL 1
482#define DMA_CH_CTRL_SIGSEL_USART2TXEMPTY 2
483#define DMA_CH_CTRL_SIGSEL_USART2RXDATAVRIGHT 3
484#define DMA_CH_CTRL_SIGSEL_USART2TXBLRIGHT 4
485#define DMA_CH_CTRL_SIGSEL_LEUART0RXDATAV 0
486#define DMA_CH_CTRL_SIGSEL_LEUART0TXBL 1
487#define DMA_CH_CTRL_SIGSEL_LEUART0TXEMPTY 2
488#define DMA_CH_CTRL_SIGSEL_LEUART1RXDATAV 0
489#define DMA_CH_CTRL_SIGSEL_LEUART1TXBL 1
490#define DMA_CH_CTRL_SIGSEL_LEUART1TXEMPTY 2
491#define DMA_CH_CTRL_SIGSEL_I2C0RXDATAV 0
492#define DMA_CH_CTRL_SIGSEL_I2C0TXBL 1
493#define DMA_CH_CTRL_SIGSEL_I2C1RXDATAV 0
494#define DMA_CH_CTRL_SIGSEL_I2C1TXBL 1
495#define DMA_CH_CTRL_SIGSEL_TIMER0UFOF 0
496#define DMA_CH_CTRL_SIGSEL_TIMER0CC0 1
497#define DMA_CH_CTRL_SIGSEL_TIMER0CC1 2
498#define DMA_CH_CTRL_SIGSEL_TIMER0CC2 3
499#define DMA_CH_CTRL_SIGSEL_TIMER1UFOF 0
500#define DMA_CH_CTRL_SIGSEL_TIMER1CC0 1
501#define DMA_CH_CTRL_SIGSEL_TIMER1CC1 2
502#define DMA_CH_CTRL_SIGSEL_TIMER1CC2 3
503#define DMA_CH_CTRL_SIGSEL_TIMER2UFOF 0
504#define DMA_CH_CTRL_SIGSEL_TIMER2CC0 1
505#define DMA_CH_CTRL_SIGSEL_TIMER2CC1 2
506#define DMA_CH_CTRL_SIGSEL_TIMER2CC2 3
507#define DMA_CH_CTRL_SIGSEL_TIMER3UFOF 0
508#define DMA_CH_CTRL_SIGSEL_TIMER3CC0 1
509#define DMA_CH_CTRL_SIGSEL_TIMER3CC1 2
510#define DMA_CH_CTRL_SIGSEL_TIMER3CC2 3
511#define DMA_CH_CTRL_SIGSEL_UART0RXDATAV 0
512#define DMA_CH_CTRL_SIGSEL_UART0TXBL 1
513#define DMA_CH_CTRL_SIGSEL_UART0TXEMPTY 2
514#define DMA_CH_CTRL_SIGSEL_UART1RXDATAV 0
515#define DMA_CH_CTRL_SIGSEL_UART1TXBL 1
516#define DMA_CH_CTRL_SIGSEL_UART1TXEMPTY 2
517#define DMA_CH_CTRL_SIGSEL_MSCWDATA 0
518#define DMA_CH_CTRL_SIGSEL_AESDATAWR 0
519#define DMA_CH_CTRL_SIGSEL_AESXORDATAWR 1
520#define DMA_CH_CTRL_SIGSEL_AESDATARD 2
521#define DMA_CH_CTRL_SIGSEL_AESKEYWR 3
522#define DMA_CH_CTRL_SIGSEL_LESENSEBUFDATAV 0
523#define DMA_CH_CTRL_SIGSEL_EBIPXL0EMPTY 0
524#define DMA_CH_CTRL_SIGSEL_EBIPXL1EMPTY 1
525#define DMA_CH_CTRL_SIGSEL_EBIPXLFULL 2
526#define DMA_CH_CTRL_SIGSEL_EBIDDEMPTY 3
527
528/* generic of above */
529#define DMA_CH_CTRL_SIGSEL_ADC_SINGLE 0
530#define DMA_CH_CTRL_SIGSEL_ADC_SCAN 1
531#define DMA_CH_CTRL_SIGSEL_DAC_CHx(x) DMA_CH_CTRL_SIGSEL(x)
532#define DMA_CH_CTRL_SIGSEL_DAC_CH0 0
533#define DMA_CH_CTRL_SIGSEL_DAC_CH1 1
534#define DMA_CH_CTRL_SIGSEL_USART_RXDATAV 0
535#define DMA_CH_CTRL_SIGSEL_USART_TXBL 1
536#define DMA_CH_CTRL_SIGSEL_USART_TXEMPTY 2
537#define DMA_CH_CTRL_SIGSEL_USART_RXDATAVRIGHT 3
538#define DMA_CH_CTRL_SIGSEL_USART_TXBLRIGHT 4
539#define DMA_CH_CTRL_SIGSEL_LEUART_RXDATAV 0
540#define DMA_CH_CTRL_SIGSEL_LEUART_TXBL 1
541#define DMA_CH_CTRL_SIGSEL_LEUART_TXEMPTY 2
542#define DMA_CH_CTRL_SIGSEL_I2C_RXDATAV 0
543#define DMA_CH_CTRL_SIGSEL_I2C_TXBL 1
544#define DMA_CH_CTRL_SIGSEL_I2C_RXDATAV 0
545#define DMA_CH_CTRL_SIGSEL_I2C_TXBL 1
546#define DMA_CH_CTRL_SIGSEL_TIMER_UFOF 0
547#define DMA_CH_CTRL_SIGSEL_TIMER_CCx(x) DMA_CH_CTRL_SIGSEL((x) + 1)
548#define DMA_CH_CTRL_SIGSEL_TIMER_CC0 DMA_CH_CTRL_SIGSEL_TIMER_CCx(0)
549#define DMA_CH_CTRL_SIGSEL_TIMER_CC1 DMA_CH_CTRL_SIGSEL_TIMER_CCx(1)
550#define DMA_CH_CTRL_SIGSEL_TIMER_CC2 DMA_CH_CTRL_SIGSEL_TIMER_CCx(3)
551#define DMA_CH_CTRL_SIGSEL_UART_RXDATAV 0
552#define DMA_CH_CTRL_SIGSEL_UART_TXBL 1
553#define DMA_CH_CTRL_SIGSEL_UART_TXEMPTY 2
554#define DMA_CH_CTRL_SIGSEL_MSC_WDATA 0
555#define DMA_CH_CTRL_SIGSEL_AES_DATA_WR 0
556#define DMA_CH_CTRL_SIGSEL_AES_XOR_DATA_WR 1
557#define DMA_CH_CTRL_SIGSEL_AES_DATA_RD 2
558#define DMA_CH_CTRL_SIGSEL_AES_KEY_WR 3
559#define DMA_CH_CTRL_SIGSEL_LESENSE_BUF_DATAV 0
560#define DMA_CH_CTRL_SIGSEL_EBI_PXLx_EMPTY(x) DMA_CH_CTRL_SIGSEL(x)
561#define DMA_CH_CTRL_SIGSEL_EBI_PXL0_EMPTY \
562 0
563#define DMA_CH_CTRL_SIGSEL_EBI_PXL1_EMPTY \
564 1
565#define DMA_CH_CTRL_SIGSEL_EBI_PXL_FULL 2
566#define DMA_CH_CTRL_SIGSEL_EBI_DD_EMPTY 3
567
568/**
569 * Application needs to allocate (DMA_DESC_CH_SIZE * N) byte
570 * where N is the number of first N channels to use.
571 * and this allocated memory needs to be assigned to DMA using
572 * dma_set_desc_address().
573 *
574 * if the application code needs alternate descriptor facility also.
575 * it needs to allocate the required memory (usually equal to the one above)
576 * and assign the memory using dma_set_alternate_desc_address()
577 *
578 * rest of the work will be transparently managed by convience functions.
579 *
580 * all the memory above should be aligned to 256bit
581 * (ie LSB 8bits of array address should be 0)
582 * use gcc's __attribute__((aligned(256)))
583 */
584#define DMA_DESC_CH_SIZE (0x4 * 0x4)
585#define DMA_DESC_CHx_BASE(base, x) \
586 ((base) + ((x) * DMA_DESC_CH_SIZE))
587#define DMA_DESC_CHx_SRC_DATA_END_PTR(base, x) \
588 MMIO32(DMA_DESC_CHx_BASE(base, x) + 0x00)
589#define DMA_DESC_CHx_DEST_DATA_END_PTR(base, x) \
590 MMIO32(DMA_DESC_CHx_BASE(base, x) + 0x04)
591#define DMA_DESC_CHx_CFG(base, x) \
592 MMIO32(DMA_DESC_CHx_BASE(base, x) + 0x08)
593#define DMA_DESC_CHx_USER_DATA(base, x) \
594 MMIO32(DMA_DESC_CHx_BASE(base, x) + 0x0C)
595
596/* DMA_DESC_CH_CFG */
597#define DMA_DESC_CH_CFG_DEST_INC_SHIFT (30)
598#define DMA_DESC_CH_CFG_DEST_INC_MASK \
599 (0x3 << DMA_DESC_CH_CFG_DEST_INC_SHIFT)
600#define DMA_DESC_CH_CFG_DEST_INC(v) \
601 (((v) << DMA_DESC_CH_CFG_DEST_INC_SHIFT) & \
602 DMA_DESC_CH_CFG_DEST_INC_MASK)
603#define DMA_DESC_CH_CFG_DEST_INC_BYTE DMA_DESC_CH_CFG_DEST_INC(0)
604#define DMA_DESC_CH_CFG_DEST_INC_HALFWORD DMA_DESC_CH_CFG_DEST_INC(1)
605#define DMA_DESC_CH_CFG_DEST_INC_WORD DMA_DESC_CH_CFG_DEST_INC(2)
606#define DMA_DESC_CH_CFG_DEST_INC_NOINC DMA_DESC_CH_CFG_DEST_INC(3)
607
608#define DMA_DESC_CH_CFG_DEST_SIZE_SHIFT (28)
609#define DMA_DESC_CH_CFG_DEST_SIZE_MASK \
610 (0x3 << DMA_DESC_CH_CFG_DEST_SIZE_SHIFT)
611#define DMA_DESC_CH_CFG_DEST_SIZE(v) \
612 (((v) << DMA_DESC_CH_CFG_DEST_SIZE_SHIFT) & \
613 DMA_DESC_CH_CFG_DEST_SIZE_MASK)
614#define DMA_DESC_CH_CFG_DEST_SIZE_BYTE DMA_DESC_CH_CFG_DEST_SIZE(0)
615#define DMA_DESC_CH_CFG_DEST_SIZE_HALFWORD DMA_DESC_CH_CFG_DEST_SIZE(1)
616#define DMA_DESC_CH_CFG_DEST_SIZE_WORD DMA_DESC_CH_CFG_DEST_SIZE(2)
617#define DMA_DESC_CH_CFG_DEST_SIZE_NOINC DMA_DESC_CH_CFG_DEST_SIZE(3)
618
619#define DMA_DESC_CH_CFG_SRC_INC_SHIFT (26)
620#define DMA_DESC_CH_CFG_SRC_INC_MASK \
621 (0x3 << DMA_DESC_CH_CFG_SRC_INC_SHIFT)
622#define DMA_DESC_CH_CFG_SRC_INC(v) \
623 (((v) << DMA_DESC_CH_CFG_SRC_INC_SHIFT) & \
624 DMA_DESC_CH_CFG_SRC_INC_MASK)
625#define DMA_DESC_CH_CFG_SRC_INC_BYTE DMA_DESC_CH_CFG_SRC_INC(0)
626#define DMA_DESC_CH_CFG_SRC_INC_HALFWORD DMA_DESC_CH_CFG_SRC_INC(1)
627#define DMA_DESC_CH_CFG_SRC_INC_WORD DMA_DESC_CH_CFG_SRC_INC(2)
628#define DMA_DESC_CH_CFG_SRC_INC_NOINC DMA_DESC_CH_CFG_SRC_INC(3)
629
630#define DMA_DESC_CH_CFG_SRC_SIZE_SHIFT (24)
631#define DMA_DESC_CH_CFG_SRC_SIZE_MASK \
632 (0x3 << DMA_DESC_CH_CFG_SRC_SIZE_SHIFT)
633#define DMA_DESC_CH_CFG_SRC_SIZE(v) \
634 (((v) << DMA_DESC_CH_CFG_SRC_SIZE_SHIFT) & \
635 DMA_DESC_CH_CFG_SRC_SIZE_MASK)
636#define DMA_DESC_CH_CFG_SRC_SIZE_BYTE DMA_DESC_CH_CFG_SRC_SIZE(0)
637#define DMA_DESC_CH_CFG_SRC_SIZE_HALFWORD DMA_DESC_CH_CFG_SRC_SIZE(1)
638#define DMA_DESC_CH_CFG_SRC_SIZE_WORD DMA_DESC_CH_CFG_SRC_SIZE(2)
639#define DMA_DESC_CH_CFG_SRC_SIZE_NOINC DMA_DESC_CH_CFG_SRC_SIZE(3)
640
641#define DMA_DESC_CH_CFG_R_POWER_SHIFT (14)
642#define DMA_DESC_CH_CFG_R_POWER_MASK \
643 (0xF << DMA_DESC_CH_CFG_R_POWER_SHIFT)
644#define DMA_DESC_CH_CFG_R_POWER(v) \
645 (((v) << DMA_DESC_CH_CFG_R_POWER_SHIFT) & \
646 DMA_DESC_CH_CFG_R_POWER_MASK)
647
648#define DMA_DESC_CH_CFG_CYCLE_CTRL_SHIFT (0)
649#define DMA_DESC_CH_CFG_CYCLE_CTRL_MASK \
650 (0x7 << DMA_DESC_CH_CFG_CYCLE_CTRL_SHIFT)
651#define DMA_DESC_CH_CFG_CYCLE_CTRL(v) \
652 (((v) << DMA_DESC_CH_CFG_CYCLE_CTRL_SHIFT) & \
653 DMA_DESC_CH_CFG_CYCLE_CTRL_MASK)
654#define DMA_DESC_CH_CFG_CYCLE_CTRL_INVALD \
655 DMA_DESC_CH_CFG_CYCLE_CTRL(0)
656#define DMA_DESC_CH_CFG_CYCLE_CTRL_BASIC \
657 DMA_DESC_CH_CFG_CYCLE_CTRL(1)
658#define DMA_DESC_CH_CFG_CYCLE_CTRL_AUTOREQUEST \
659 DMA_DESC_CH_CFG_CYCLE_CTRL(2)
660#define DMA_DESC_CH_CFG_CYCLE_CTRL_PINGPONG \
661 DMA_DESC_CH_CFG_CYCLE_CTRL(3)
662#define DMA_DESC_CH_CFG_CYCLE_CTRL_MEM_SCAT_GATH_PRIM \
663 DMA_DESC_CH_CFG_CYCLE_CTRL(4)
664#define DMA_DESC_CH_CFG_CYCLE_CTRL_MEM_SCAT_GATH_ALT \
665 DMA_DESC_CH_CFG_CYCLE_CTRL(5)
666#define DMA_DESC_CH_CFG_CYCLE_CTRL_PERIPH_SCAT_GATH_PRIM \
667 DMA_DESC_CH_CFG_CYCLE_CTRL(6)
668#define DMA_DESC_CH_CFG_CYCLE_CTRL_PERIPH_SCAT_GATH_ALT \
669 DMA_DESC_CH_CFG_CYCLE_CTRL(7)
670
671#define DMA_DESC_CH_CFG_DEST_PROT_CTRL_SHIFT (21)
672#define DMA_DESC_CH_CFG_DEST_PROT_CTRL_MASK \
673 (0x7 << DMA_DESC_CH_CFG_DEST_PROT_CTRL_SHIFT)
674#define DMA_DESC_CH_CFG_DEST_PROT_CTRL(v) \
675 (((v) << DMA_DESC_CH_CFG_DEST_PROT_CTRL_SHIFT) & \
676 DMA_DESC_CH_CFG_DEST_PROT_CTRL_MASK)
677
678#define DMA_DESC_CH_CFG_SRC_PROT_CTRL_SHIFT (18)
679#define DMA_DESC_CH_CFG_SRC_PROT_CTRL_MASK \
680 (0x7 << DMA_DESC_CH_CFG_SRC_PROT_CTRL_SHIFT)
681#define DMA_DESC_CH_CFG_SRC_PROT_CTRL(v) \
682 (((v) << DMA_DESC_CH_CFG_SRC_PROT_CTRL_SHIFT) & \
683 DMA_DESC_CH_CFG_SRC_PROT_CTRL_SHIFT)
684
685#define DMA_DESC_CH_CFG_N_MINUS_1_SHIFT (4)
686#define DMA_DESC_CH_CFG_N_MINUS_1_MASK \
687 (0x3FF << DMA_DESC_CH_CFG_N_MINUS_1_SHIFT)
688#define DMA_DESC_CH_CFG_N_MINUS_1(v) \
689 (((v) << DMA_DESC_CH_CFG_N_MINUS_1_SHIFT) & \
690 DMA_DESC_CH_CFG_N_MINUS_1_MASK)
691
692#define DMA_DESC_CH_CFG_NEXT_USEBURST (1 << 3)
693
694/* DMA Channel Descriptor in structure style */
698 uint32_t cfg;
699 uint32_t user_data;
700} __attribute__((packed));
701
702/** @defgroup dma_ch DMA Channel Number
703@ingroup dma_defines
704
705@{*/
706enum dma_ch {
720/**@}*/
721
722/* API version for {src, dest} * {size, inc} */
729
730/* API version of DMA_DESC_CH_CFG_CYCLE_CTRL_* */
740};
741
742/* API version of DMA_DESC_CH_CFG_R_POWER() */
756
758
759void dma_enable(void);
760void dma_disable(void);
761
763
764/*bool dma_get_wait_flag(enum dma_ch ch);*/
765
768
769void dma_set_desc_address(uint32_t desc_base);
770
772
773void dma_enable_burst_only(enum dma_ch ch);
775
778
779void dma_enable_channel(enum dma_ch ch);
780void dma_disable_channel(enum dma_ch ch);
781
784
785void dma_enable_priority(enum dma_ch ch);
786void dma_disable_priority(enum dma_ch ch);
787
788bool dma_get_bus_error_flag(void);
789void dma_clear_bus_error_flag(void);
790
791bool dma_get_request_flag(enum dma_ch ch);
792
793/*bool dma_get_single_request_flag(enum dma_ch ch);*/
794
797
800
803
808
809/* TODO: DMA_CTRL, DMA_RDS, DMA_LOOP0, DMA_LOOP1, DMA_RECT0 */
810
811void dma_set_source(enum dma_ch ch, uint32_t source);
812void dma_set_signal(enum dma_ch ch, uint32_t signal);
813
814void dma_channel_reset(enum dma_ch ch);
815
816void dma_set_loop_count(enum dma_ch ch, uint16_t count);
817void dma_enable_loop(enum dma_ch ch);
818void dma_disable_loop(enum dma_ch ch);
819
820/* descriptor convient function. (prefix "dma_desc_") */
821void dma_desc_set_dest_size(uint32_t desc_base, enum dma_ch ch,
822 enum dma_mem size);
823void dma_desc_set_dest_inc(uint32_t desc_base, enum dma_ch ch,
824 enum dma_mem inc);
825void dma_desc_set_src_size(uint32_t desc_base, enum dma_ch ch,
826 enum dma_mem size);
827void dma_desc_set_src_inc(uint32_t desc_base, enum dma_ch ch,
828 enum dma_mem inc);
829
830void dma_desc_set_r_power(uint32_t desc_base, enum dma_ch ch,
831 enum dma_r_power r_power);
832
833void dma_desc_enable_next_useburst(uint32_t desc_base, enum dma_ch ch);
834void dma_desc_disable_next_useburst(uint32_t desc_base, enum dma_ch ch);
835
836void dma_desc_set_count(uint32_t desc_base, enum dma_ch ch, uint16_t count);
837
838void dma_desc_set_user_data(uint32_t desc_base, enum dma_ch ch,
839 uint32_t user_data);
840uint32_t dma_desc_get_user_data(uint32_t desc_base, enum dma_ch ch);
841
842void dma_desc_set_src_address(uint32_t desc_base, enum dma_ch ch,
843 uint32_t src);
844void dma_desc_set_dest_address(uint32_t desc_base, enum dma_ch ch,
845 uint32_t dest);
846
847void dma_desc_set_mode(uint32_t desc_base, enum dma_ch ch, enum dma_mode mode);
848
849/* based on descriptor convient, macro are passing
850 * {DMA_CTRLBASE, CTRL_ALTCTRLBASE} as per naming */
851#define dma_set_dest_size(ch, size) \
852 dma_desc_set_dest_size(DMA_CTRLBASE, ch, size)
853#define dma_set_dest_inc(ch, inc) \
854 dma_desc_set_dest_inc(DMA_CTRLBASE, ch, inc)
855#define dma_set_src_size(ch, size) \
856 dma_desc_set_src_size(DMA_CTRLBASE, ch, size)
857#define dma_set_src_inc(ch, inc) \
858 dma_desc_set_src_inc(DMA_CTRLBASE, ch, inc)
859
860#define dma_set_alt_dest_size(ch, size) \
861 dma_desc_set_dest_size(DMA_ALTCTRLBASE, ch, size)
862#define dma_set_alt_dest_inc(ch, inc) \
863 dma_desc_set_dest_inc(DMA_ALTCTRLBASE, ch, inc)
864#define dma_set_alt_src_size(ch, size) \
865 dma_desc_set_src_size(DMA_ALTCTRLBASE, ch, size)
866#define dma_set_alt_src_inc(ch, inc) \
867 dma_desc_set_src_inc(DMA_ALTCTRLBASE, ch, inc)
868
869#define dma_set_r_power(ch, r_power) \
870 dma_desc_set_r_power(DMA_CTRLBASE, ch, r_power)
871#define dma_set_alt_r_power(ch, r_power) \
872 dma_desc_set_r_power(DMA_ALTCTRLBASE, ch, r_power)
873
874#define dma_enable_next_useburst(ch) \
875 dma_desc_enable_next_useburst(DMA_CTRLBASE, ch)
876#define dma_disable_next_useburst(ch) \
877 dma_desc_disable_next_useburst(DMA_CTRLBASE, ch)
878#define dma_enable_alt_next_useburst(ch) \
879 dma_desc_enable_alt_next_useburst(DMA_CTRLBASE, ch)
880#define dma_disable_alt_next_useburst(ch) \
881 dma_desc_disable_alt_next_useburst(DMA_CTRLBASE, ch)
882
883#define dma_set_count(ch, count) \
884 dma_desc_set_count(DMA_CTRLBASE, ch, count)
885#define dma_set_alt_count(ch, count) \
886 dma_desc_set_count(DMA_ALTCTRLBASE, ch, count)
887
888#define dma_set_user_data(ch, user_data) \
889 dma_desc_set_user_data(DMA_CTRLBASE, ch, user_data)
890#define dma_set_alt_user_data(ch, user_data) \
891 dma_desc_set_user_data(DMA_ALTCTRLBASE, ch, user_data)
892
893#define dma_get_user_data(ch) \
894 dma_desc_get_user_data(DMA_CTRLBASE, ch)
895#define dma_get_alt_user_data(ch) \
896 dma_desc_get_user_data(DMA_ALTCTRLBASE, ch)
897
898#define dma_set_src_address(ch, src) \
899 dma_desc_set_src_address(DMA_CTRLBASE, ch, src)
900#define dma_set_alt_src_address(ch, src) \
901 dma_desc_set_src_address(DMA_ALTCTRLBASE, ch, src)
902#define dma_set_dest_address(ch, dest) \
903 dma_desc_set_dest_address(DMA_CTRLBASE, ch, dest)
904#define dma_set_alt_dest_address(ch, dest) \
905 dma_desc_set_dest_address(DMA_ALTCTRLBASE, ch, dest)
906
907#define dma_set_mode(ch, mode) \
908 dma_desc_set_mode(DMA_CTRLBASE, ch, mode)
909#define dma_set_alt_mode(ch, mode) \
910 dma_desc_set_mode(DMA_ALTCTRLBASE, ch, mode)
911
913
914/**@}*/
#define END_DECLS
Definition: common.h:34
#define BEGIN_DECLS
Definition: common.h:33
Dispatcher for the base address definitions, depending on the particular Gecko family.
dma_ch
Definition: dma_common.h:706
@ DMA_CH11
Definition: dma_common.h:718
@ DMA_CH5
Definition: dma_common.h:712
@ DMA_CH1
Definition: dma_common.h:708
@ DMA_CH3
Definition: dma_common.h:710
@ DMA_CH4
Definition: dma_common.h:711
@ DMA_CH7
Definition: dma_common.h:714
@ DMA_CH2
Definition: dma_common.h:709
@ DMA_CH8
Definition: dma_common.h:715
@ DMA_CH0
Definition: dma_common.h:707
@ DMA_CH6
Definition: dma_common.h:713
@ DMA_CH9
Definition: dma_common.h:716
@ DMA_CH10
Definition: dma_common.h:717
void dma_enable_alternate_structure(enum dma_ch ch)
Enable channel alternate structure.
Definition: dma_common.c:165
dma_mode
Definition: dma_common.h:731
void dma_set_signal(enum dma_ch ch, uint32_t signal)
Set channel source signal.
Definition: dma_common.c:324
void dma_desc_set_dest_inc(uint32_t desc_base, enum dma_ch ch, enum dma_mem inc)
Set destination increment.
Definition: dma_common.c:417
bool dma_get_request_flag(enum dma_ch ch)
Get channel request flag.
Definition: dma_common.c:212
dma_r_power
Definition: dma_common.h:743
dma_mem
Definition: dma_common.h:723
void dma_desc_set_r_power(uint32_t desc_base, enum dma_ch ch, enum dma_r_power r_power)
Set R Power.
Definition: dma_common.c:465
void dma_enable_priority(enum dma_ch ch)
Enable channel high priority.
Definition: dma_common.c:174
void dma_set_bus_error_interrupt_flag(void)
Set bus error interrupt flag.
Definition: dma_common.c:243
void dma_enable_channel(enum dma_ch ch)
Enable channel.
Definition: dma_common.c:138
void dma_set_loop_count(enum dma_ch ch, uint16_t count)
Set channel loop width to ( count + 1)
Definition: dma_common.c:358
void dma_disable(void)
Disable DMA.
Definition: dma_common.c:59
void dma_disable_loop(enum dma_ch ch)
Disable channel loop.
Definition: dma_common.c:385
void dma_enable_with_privileged_access(void)
Enable DMA with privileged access.
Definition: dma_common.c:33
void dma_disable_priority(enum dma_ch ch)
Disable channel high priority.
Definition: dma_common.c:183
uint32_t dma_desc_get_user_data(uint32_t desc_base, enum dma_ch ch)
Extract user data field from channel descriptor.
Definition: dma_common.c:531
void dma_desc_set_src_inc(uint32_t desc_base, enum dma_ch ch, enum dma_mem inc)
Set source increment.
Definition: dma_common.c:449
void dma_desc_set_mode(uint32_t desc_base, enum dma_ch ch, enum dma_mode mode)
Set the channel mode ("Cycle control")
Definition: dma_common.c:619
void dma_enable_single_and_burst(enum dma_ch ch)
Enable channel single and burst.
Definition: dma_common.c:111
void dma_desc_set_src_size(uint32_t desc_base, enum dma_ch ch, enum dma_mem size)
Set source size.
Definition: dma_common.c:433
void dma_desc_set_dest_size(uint32_t desc_base, enum dma_ch ch, enum dma_mem size)
Set desination size.
Definition: dma_common.c:401
bool dma_get_done_interrupt_flag(enum dma_ch ch)
Get channel done interrupt flag.
Definition: dma_common.c:235
bool dma_get_bus_error_flag(void)
Get bus error flag.
Definition: dma_common.c:193
void dma_desc_set_src_address(uint32_t desc_base, enum dma_ch ch, uint32_t src)
Assign Source address to DMA Channel.
Definition: dma_common.c:576
void dma_enable_burst_only(enum dma_ch ch)
Enable channel burst only.
Definition: dma_common.c:102
void dma_enable_with_unprivileged_access(void)
Enable DMA with un-privileged access.
Definition: dma_common.c:42
void dma_disable_bus_error_interrupt(void)
Disable bus error interrupt.
Definition: dma_common.c:285
void dma_desc_set_dest_address(uint32_t desc_base, enum dma_ch ch, uint32_t dest)
Assign Destination address to DMA Channel.
Definition: dma_common.c:599
void dma_disable_done_interrupt(enum dma_ch ch)
Disable channel done interrupt.
Definition: dma_common.c:303
void dma_enable_bus_error_interrupt(void)
Enable bus error interrupt.
Definition: dma_common.c:277
void dma_disable_channel(enum dma_ch ch)
Disable channel.
Definition: dma_common.c:147
void dma_set_source(enum dma_ch ch, uint32_t source)
Set channel source.
Definition: dma_common.c:313
void dma_clear_done_interrupt_flag(enum dma_ch ch)
Clear channel done interrupt flag.
Definition: dma_common.c:269
void dma_enable_done_interrupt(enum dma_ch ch)
Enable channel done interrupt.
Definition: dma_common.c:294
void dma_disable_periph_request(enum dma_ch ch)
Disable channel peripherial request.
Definition: dma_common.c:129
void dma_channel_reset(enum dma_ch ch)
Reset channel.
Definition: dma_common.c:334
void dma_disable_alternate_structure(enum dma_ch ch)
Disable channel alternate structure.
Definition: dma_common.c:156
void dma_enable_loop(enum dma_ch ch)
Enable channel loop.
Definition: dma_common.c:372
void dma_desc_set_count(uint32_t desc_base, enum dma_ch ch, uint16_t count)
Set number (count) of transfer to be performed.
Definition: dma_common.c:503
void dma_desc_set_user_data(uint32_t desc_base, enum dma_ch ch, uint32_t user_data)
Store user data field in channel descriptor.
Definition: dma_common.c:518
void dma_set_desc_address(uint32_t desc_base)
Set channel's descriptor address.
Definition: dma_common.c:69
void dma_set_done_interrupt_flag(enum dma_ch ch)
Set channel done interrupt flag.
Definition: dma_common.c:252
bool dma_get_wait_on_request_flag(enum dma_ch ch)
Get channel wait on request status flag.
Definition: dma_common.c:83
void dma_clear_bus_error_interrupt_flag(void)
Clear bus error interrupt flag.
Definition: dma_common.c:260
void dma_enable(void)
same as dma_enable_with_unprivileged_access()
Definition: dma_common.c:51
void dma_clear_bus_error_flag(void)
Clear bus error flag.
Definition: dma_common.c:201
void dma_desc_disable_next_useburst(uint32_t desc_base, enum dma_ch ch)
Disable next useburst.
Definition: dma_common.c:491
void dma_desc_enable_next_useburst(uint32_t desc_base, enum dma_ch ch)
Enable next useburst.
Definition: dma_common.c:480
bool dma_get_bus_error_interrupt_flag(void)
Get bus error interrupt flag.
Definition: dma_common.c:223
void dma_enable_periph_request(enum dma_ch ch)
Enable channel peripherial request.
Definition: dma_common.c:120
void dma_generate_software_request(enum dma_ch ch)
Generate a software request on channel.
Definition: dma_common.c:93
@ DMA_MODE_INVALID
Definition: dma_common.h:732
@ DMA_MODE_MEM_SCAT_GATH_ALT
Definition: dma_common.h:737
@ DMA_MODE_PING_PONG
Definition: dma_common.h:735
@ DMA_MODE_PERIPH_SCAT_GATH_ALT
Definition: dma_common.h:739
@ DMA_MODE_AUTO_REQUEST
Definition: dma_common.h:734
@ DMA_MODE_BASIC
Definition: dma_common.h:733
@ DMA_MODE_PERIPH_SCAT_GATH_PRIM
Definition: dma_common.h:738
@ DMA_MODE_MEM_SCAT_GATH_PRIM
Definition: dma_common.h:736
@ DMA_R_POWER_4
Definition: dma_common.h:746
@ DMA_R_POWER_1024
Definition: dma_common.h:754
@ DMA_R_POWER_1
Definition: dma_common.h:744
@ DMA_R_POWER_512
Definition: dma_common.h:753
@ DMA_R_POWER_2
Definition: dma_common.h:745
@ DMA_R_POWER_64
Definition: dma_common.h:750
@ DMA_R_POWER_32
Definition: dma_common.h:749
@ DMA_R_POWER_16
Definition: dma_common.h:748
@ DMA_R_POWER_128
Definition: dma_common.h:751
@ DMA_R_POWER_256
Definition: dma_common.h:752
@ DMA_R_POWER_8
Definition: dma_common.h:747
@ DMA_MEM_NONE
Definition: dma_common.h:727
@ DMA_MEM_HALF_WORD
Definition: dma_common.h:725
@ DMA_MEM_BYTE
Definition: dma_common.h:724
@ DMA_MEM_WORD
Definition: dma_common.h:726
uint32_t src_data_end_ptr
Definition: dma_common.h:696
uint32_t cfg
Definition: dma_common.h:698
uint32_t user_data
Definition: dma_common.h:699
uint32_t dst_data_end_ptr
Definition: dma_common.h:697