Home | History | Annotate | Line # | Download | only in ti
      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