ti_edma.h revision 1.1 1 1.1 jmcneill /* $NetBSD: ti_edma.h,v 1.1 2019/10/27 12:14:51 jmcneill Exp $ */
2 1.1 jmcneill
3 1.1 jmcneill /*-
4 1.1 jmcneill * Copyright (c) 2014 Jared D. McNeill <jmcneill (at) invisible.ca>
5 1.1 jmcneill * All rights reserved.
6 1.1 jmcneill *
7 1.1 jmcneill * Redistribution and use in source and binary forms, with or without
8 1.1 jmcneill * modification, are permitted provided that the following conditions
9 1.1 jmcneill * are met:
10 1.1 jmcneill * 1. Redistributions of source code must retain the above copyright
11 1.1 jmcneill * notice, this list of conditions and the following disclaimer.
12 1.1 jmcneill * 2. The name of the author may not be used to endorse or promote products
13 1.1 jmcneill * derived from this software without specific prior written permission.
14 1.1 jmcneill *
15 1.1 jmcneill * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16 1.1 jmcneill * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17 1.1 jmcneill * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18 1.1 jmcneill * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19 1.1 jmcneill * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
20 1.1 jmcneill * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21 1.1 jmcneill * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
22 1.1 jmcneill * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
23 1.1 jmcneill * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24 1.1 jmcneill * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25 1.1 jmcneill * SUCH DAMAGE.
26 1.1 jmcneill */
27 1.1 jmcneill
28 1.1 jmcneill #ifndef _TI_EDMA_H
29 1.1 jmcneill #define _TI_EDMA_H
30 1.1 jmcneill
31 1.1 jmcneill #define EDMA_PID_REG 0x0000
32 1.1 jmcneill #define EDMA_CCCFG_REG 0x0004
33 1.1 jmcneill #define EDMA_CCCFG_MP_EXIST __BIT(25)
34 1.1 jmcneill #define EDMA_CCCFG_CHMAP_EXIST __BIT(24)
35 1.1 jmcneill #define EDMA_CCCFG_NUM_REGN __BITS(21,20)
36 1.1 jmcneill #define EDMA_CCCFG_NUM_EVQUEUE __BITS(18,16)
37 1.1 jmcneill #define EDMA_CCCFG_NUM_PAENTRY __BITS(14,12)
38 1.1 jmcneill #define EDMA_CCCFG_NUM_INTCH __BITS(10,8)
39 1.1 jmcneill #define EDMA_CCCFG_NUM_QDMACH __BITS(6,4)
40 1.1 jmcneill #define EDMA_CCCFG_NUM_DMACH __BITS(2,0)
41 1.1 jmcneill #define EDMA_SYSCONFIG_REG 0x0010
42 1.1 jmcneill #define EDMA_DCHMAP_REG(n) (0x0100 + 4 * (n))
43 1.1 jmcneill #define EDMA_DCHMAP_PAENTRY __BITS(13,5)
44 1.1 jmcneill #define EDMA_QCHMAP_REG(n) (0x0200 + 4 * (n))
45 1.1 jmcneill #define EDMA_DMAQNUM_REG(n) (0x0240 + 4 * (n))
46 1.1 jmcneill #define EDMA_QDMAQNUM_REG 0x0260
47 1.1 jmcneill #define EDMA_QUEPRI_REG 0x0284
48 1.1 jmcneill #define EDMA_EMR_REG 0x0300
49 1.1 jmcneill #define EDMA_EMRH_REG 0x0304
50 1.1 jmcneill #define EDMA_EMCR_REG 0x0308
51 1.1 jmcneill #define EDMA_EMCRH_REG 0x030c
52 1.1 jmcneill #define EDMA_QEMR_REG 0x0310
53 1.1 jmcneill #define EDMA_QEMRC_REG 0x0314
54 1.1 jmcneill #define EDMA_CCERR_REG 0x0318
55 1.1 jmcneill #define EDMA_CCERRCLR_REG 0x031c
56 1.1 jmcneill #define EDMA_EEVAL_REG 0x0320
57 1.1 jmcneill #define EDMA_DRAE_REG(n) (0x0340 + 8 * (n))
58 1.1 jmcneill #define EDMA_DRAEH_REG(n) (0x0340 + 8 * (n) + 4)
59 1.1 jmcneill #define EDMA_QRAE_REG(n) (0x0380 + 4 * (n))
60 1.1 jmcneill #define EDMA_QE_REG(q, e) (0x0400 + 0x40 * (q) + 4 * (e))
61 1.1 jmcneill #define EDMA_QSTAT_REG(n) (0x0600 + 4 * (n))
62 1.1 jmcneill #define EDMA_QWMTHRA_REG 0x0620
63 1.1 jmcneill #define EDMA_CCSTAT_REG 0x0640
64 1.1 jmcneill #define EDMA_MPFAR_REG 0x0800
65 1.1 jmcneill #define EDMA_MPFSR_REG 0x0804
66 1.1 jmcneill #define EDMA_MPFCR_REG 0x0808
67 1.1 jmcneill #define EDMA_MPPAG_REG 0x080c
68 1.1 jmcneill #define EDMA_MPPA_REG(n) (0x0810 + 4 * (n))
69 1.1 jmcneill #define EDMA_ER_REG 0x1000
70 1.1 jmcneill #define EDMA_ERH_REG 0x1004
71 1.1 jmcneill #define EDMA_ECR_REG 0x1008
72 1.1 jmcneill #define EDMA_ECRH_REG 0x100c
73 1.1 jmcneill #define EDMA_ESR_REG 0x1010
74 1.1 jmcneill #define EDMA_ESRH_REG 0x1014
75 1.1 jmcneill #define EDMA_CER_REG 0x1018
76 1.1 jmcneill #define EDMA_CERH_REG 0x101c
77 1.1 jmcneill #define EDMA_EER_REG 0x1020
78 1.1 jmcneill #define EDMA_EERH_REG 0x1024
79 1.1 jmcneill #define EDMA_EECR_REG 0x1028
80 1.1 jmcneill #define EDMA_EECRH_REG 0x102c
81 1.1 jmcneill #define EDMA_EESR_REG 0x1030
82 1.1 jmcneill #define EDMA_EESRH_REG 0x1034
83 1.1 jmcneill #define EDMA_SER_REG 0x1038
84 1.1 jmcneill #define EDMA_SERH_REG 0x103c
85 1.1 jmcneill #define EDMA_SECR_REG 0x1040
86 1.1 jmcneill #define EDMA_SECRH_REG 0x1044
87 1.1 jmcneill #define EDMA_IER_REG 0x1050
88 1.1 jmcneill #define EDMA_IERH_REG 0x1054
89 1.1 jmcneill #define EDMA_IECR_REG 0x1058
90 1.1 jmcneill #define EDMA_IECRH_REG 0x105c
91 1.1 jmcneill #define EDMA_IESR_REG 0x1060
92 1.1 jmcneill #define EDMA_IESRH_REG 0x1064
93 1.1 jmcneill #define EDMA_IPR_REG 0x1068
94 1.1 jmcneill #define EDMA_IPRH_REG 0x106c
95 1.1 jmcneill #define EDMA_ICR_REG 0x1070
96 1.1 jmcneill #define EDMA_ICRH_REG 0x1074
97 1.1 jmcneill #define EDMA_IEVAL_REG 0x1078
98 1.1 jmcneill #define EDMA_IEVAL_EVAL __BIT(0)
99 1.1 jmcneill #define EDMA_QER_REG 0x1080
100 1.1 jmcneill #define EDMA_QEER_REG 0x1084
101 1.1 jmcneill #define EDMA_QEECR_REG 0x1088
102 1.1 jmcneill #define EDMA_QEESR_REG 0x108c
103 1.1 jmcneill #define EDMA_QSER_REG 0x1090
104 1.1 jmcneill #define EDMA_QSECR_REG 0x1094
105 1.1 jmcneill
106 1.1 jmcneill #define EDMA_PARAM_BASE(n) (0x4000 + 0x20 * (n))
107 1.1 jmcneill #define EDMA_PARAM_OPT_REG(n) (EDMA_PARAM_BASE(n) + 0x00)
108 1.1 jmcneill #define EDMA_PARAM_OPT_PRIV __BIT(31)
109 1.1 jmcneill #define EDMA_PARAM_OPT_PRIVID __BITS(27,24)
110 1.1 jmcneill #define EDMA_PARAM_OPT_ITCCHEN __BIT(23)
111 1.1 jmcneill #define EDMA_PARAM_OPT_TCCHEN __BIT(22)
112 1.1 jmcneill #define EDMA_PARAM_OPT_ITCINTEN __BIT(21)
113 1.1 jmcneill #define EDMA_PARAM_OPT_TCINTEN __BIT(20)
114 1.1 jmcneill #define EDMA_PARAM_OPT_TCC __BITS(17,12)
115 1.1 jmcneill #define EDMA_PARAM_OPT_TCCMODE __BIT(11)
116 1.1 jmcneill #define EDMA_PARAM_OPT_FWID __BITS(10,8)
117 1.1 jmcneill #define EDMA_PARAM_OPT_STATIC __BIT(3)
118 1.1 jmcneill #define EDMA_PARAM_OPT_SYNCDIM __BIT(2)
119 1.1 jmcneill #define EDMA_PARAM_OPT_DAM __BIT(1)
120 1.1 jmcneill #define EDMA_PARAM_OPT_SAM __BIT(0)
121 1.1 jmcneill #define EDMA_PARAM_SRC_REG(n) (EDMA_PARAM_BASE(n) + 0x04)
122 1.1 jmcneill #define EDMA_PARAM_CNT_REG(n) (EDMA_PARAM_BASE(n) + 0x08)
123 1.1 jmcneill #define EDMA_PARAM_CNT_BCNT __BITS(31,16)
124 1.1 jmcneill #define EDMA_PARAM_CNT_ACNT __BITS(15,0)
125 1.1 jmcneill #define EDMA_PARAM_DST_REG(n) (EDMA_PARAM_BASE(n) + 0x0c)
126 1.1 jmcneill #define EDMA_PARAM_BIDX_REG(n) (EDMA_PARAM_BASE(n) + 0x10)
127 1.1 jmcneill #define EDMA_PARAM_BIDX_DSTBIDX __BITS(31,16)
128 1.1 jmcneill #define EDMA_PARAM_BIDX_SRCBIDX __BITS(15,0)
129 1.1 jmcneill #define EDMA_PARAM_LNK_REG(n) (EDMA_PARAM_BASE(n) + 0x14)
130 1.1 jmcneill #define EDMA_PARAM_LNK_BCNTRLD __BITS(31,16)
131 1.1 jmcneill #define EDMA_PARAM_LNK_LINK __BITS(15,0)
132 1.1 jmcneill #define EDMA_PARAM_CIDX_REG(n) (EDMA_PARAM_BASE(n) + 0x18)
133 1.1 jmcneill #define EDMA_PARAM_CIDX_DSTCIDX __BITS(31,16)
134 1.1 jmcneill #define EDMA_PARAM_CIDX_SRCCIDX __BITS(15,0)
135 1.1 jmcneill #define EDMA_PARAM_CCNT_REG(n) (EDMA_PARAM_BASE(n) + 0x1c)
136 1.1 jmcneill #define EDMA_PARAM_CCNT_CCNT __BITS(15,0)
137 1.1 jmcneill
138 1.1 jmcneill enum edma_type {
139 1.1 jmcneill EDMA_TYPE_DMA,
140 1.1 jmcneill EDMA_TYPE_QDMA
141 1.1 jmcneill };
142 1.1 jmcneill
143 1.1 jmcneill struct edma_param {
144 1.1 jmcneill uint32_t ep_opt;
145 1.1 jmcneill uint32_t ep_src;
146 1.1 jmcneill uint32_t ep_dst;
147 1.1 jmcneill uint16_t ep_bcnt;
148 1.1 jmcneill uint16_t ep_acnt;
149 1.1 jmcneill uint16_t ep_dstbidx;
150 1.1 jmcneill uint16_t ep_srcbidx;
151 1.1 jmcneill uint16_t ep_bcntrld;
152 1.1 jmcneill uint16_t ep_link;
153 1.1 jmcneill uint16_t ep_dstcidx;
154 1.1 jmcneill uint16_t ep_srccidx;
155 1.1 jmcneill uint16_t ep_ccnt;
156 1.1 jmcneill };
157 1.1 jmcneill
158 1.1 jmcneill struct edma_channel;
159 1.1 jmcneill
160 1.1 jmcneill struct edma_channel *edma_channel_alloc(enum edma_type, unsigned int,
161 1.1 jmcneill void (*)(void *), void *);
162 1.1 jmcneill void edma_channel_free(struct edma_channel *);
163 1.1 jmcneill uint16_t edma_param_alloc(struct edma_channel *);
164 1.1 jmcneill void edma_param_free(struct edma_channel *, uint16_t);
165 1.1 jmcneill void edma_set_param(struct edma_channel *, uint16_t, struct edma_param *);
166 1.1 jmcneill int edma_transfer_enable(struct edma_channel *, uint16_t);
167 1.1 jmcneill int edma_transfer_start(struct edma_channel *);
168 1.1 jmcneill void edma_halt(struct edma_channel *);
169 1.1 jmcneill uint8_t edma_channel_index(struct edma_channel *);
170 1.1 jmcneill void edma_dump(struct edma_channel *);
171 1.1 jmcneill void edma_dump_param(struct edma_channel *, uint16_t);
172 1.1 jmcneill
173 1.1 jmcneill #endif /* !_TI_EDMA_H */
174