1*2874c5fdSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */ 23ad7a42dSMatt Porter /* 33ad7a42dSMatt Porter * TI EDMA definitions 43ad7a42dSMatt Porter * 53ad7a42dSMatt Porter * Copyright (C) 2006-2013 Texas Instruments. 63ad7a42dSMatt Porter */ 73ad7a42dSMatt Porter 83ad7a42dSMatt Porter /* 93ad7a42dSMatt Porter * This EDMA3 programming framework exposes two basic kinds of resource: 103ad7a42dSMatt Porter * 113ad7a42dSMatt Porter * Channel Triggers transfers, usually from a hardware event but 123ad7a42dSMatt Porter * also manually or by "chaining" from DMA completions. 133ad7a42dSMatt Porter * Each channel is coupled to a Parameter RAM (PaRAM) slot. 143ad7a42dSMatt Porter * 153ad7a42dSMatt Porter * Slot Each PaRAM slot holds a DMA transfer descriptor (PaRAM 163ad7a42dSMatt Porter * "set"), source and destination addresses, a link to a 173ad7a42dSMatt Porter * next PaRAM slot (if any), options for the transfer, and 183ad7a42dSMatt Porter * instructions for updating those addresses. There are 193ad7a42dSMatt Porter * more than twice as many slots as event channels. 203ad7a42dSMatt Porter * 213ad7a42dSMatt Porter * Each PaRAM set describes a sequence of transfers, either for one large 223ad7a42dSMatt Porter * buffer or for several discontiguous smaller buffers. An EDMA transfer 233ad7a42dSMatt Porter * is driven only from a channel, which performs the transfers specified 243ad7a42dSMatt Porter * in its PaRAM slot until there are no more transfers. When that last 253ad7a42dSMatt Porter * transfer completes, the "link" field may be used to reload the channel's 263ad7a42dSMatt Porter * PaRAM slot with a new transfer descriptor. 273ad7a42dSMatt Porter * 283ad7a42dSMatt Porter * The EDMA Channel Controller (CC) maps requests from channels into physical 293ad7a42dSMatt Porter * Transfer Controller (TC) requests when the channel triggers (by hardware 303ad7a42dSMatt Porter * or software events, or by chaining). The two physical DMA channels provided 313ad7a42dSMatt Porter * by the TCs are thus shared by many logical channels. 323ad7a42dSMatt Porter * 333ad7a42dSMatt Porter * DaVinci hardware also has a "QDMA" mechanism which is not currently 343ad7a42dSMatt Porter * supported through this interface. (DSP firmware uses it though.) 353ad7a42dSMatt Porter */ 363ad7a42dSMatt Porter 373ad7a42dSMatt Porter #ifndef EDMA_H_ 383ad7a42dSMatt Porter #define EDMA_H_ 393ad7a42dSMatt Porter 403ad7a42dSMatt Porter enum dma_event_q { 413ad7a42dSMatt Porter EVENTQ_0 = 0, 423ad7a42dSMatt Porter EVENTQ_1 = 1, 433ad7a42dSMatt Porter EVENTQ_2 = 2, 443ad7a42dSMatt Porter EVENTQ_3 = 3, 453ad7a42dSMatt Porter EVENTQ_DEFAULT = -1 463ad7a42dSMatt Porter }; 473ad7a42dSMatt Porter 483ad7a42dSMatt Porter #define EDMA_CTLR_CHAN(ctlr, chan) (((ctlr) << 16) | (chan)) 493ad7a42dSMatt Porter #define EDMA_CTLR(i) ((i) >> 16) 503ad7a42dSMatt Porter #define EDMA_CHAN_SLOT(i) ((i) & 0xffff) 513ad7a42dSMatt Porter 5223e6723cSPeter Ujfalusi #define EDMA_FILTER_PARAM(ctlr, chan) ((int[]) { EDMA_CTLR_CHAN(ctlr, chan) }) 5323e6723cSPeter Ujfalusi 543ad7a42dSMatt Porter struct edma_rsv_info { 553ad7a42dSMatt Porter 563ad7a42dSMatt Porter const s16 (*rsv_chans)[2]; 573ad7a42dSMatt Porter const s16 (*rsv_slots)[2]; 583ad7a42dSMatt Porter }; 593ad7a42dSMatt Porter 6023e6723cSPeter Ujfalusi struct dma_slave_map; 6123e6723cSPeter Ujfalusi 623ad7a42dSMatt Porter /* platform_data for EDMA driver */ 633ad7a42dSMatt Porter struct edma_soc_info { 643ad7a42dSMatt Porter /* 653ad7a42dSMatt Porter * Default queue is expected to be a low-priority queue. 663ad7a42dSMatt Porter * This way, long transfers on the default queue started 673ad7a42dSMatt Porter * by the codec engine will not cause audio defects. 683ad7a42dSMatt Porter */ 693ad7a42dSMatt Porter enum dma_event_q default_queue; 703ad7a42dSMatt Porter 713ad7a42dSMatt Porter /* Resource reservation for other cores */ 723ad7a42dSMatt Porter struct edma_rsv_info *rsv; 733ad7a42dSMatt Porter 741be5336bSPeter Ujfalusi /* List of channels allocated for memcpy, terminated with -1 */ 75ecb7deceSPeter Ujfalusi s32 *memcpy_channels; 761be5336bSPeter Ujfalusi 776cba4355SMatt Porter s8 (*queue_priority_mapping)[2]; 782646a0e5SMatt Porter const s16 (*xbar_chans)[2]; 7923e6723cSPeter Ujfalusi 8023e6723cSPeter Ujfalusi const struct dma_slave_map *slave_map; 8123e6723cSPeter Ujfalusi int slavecnt; 823ad7a42dSMatt Porter }; 833ad7a42dSMatt Porter 843ad7a42dSMatt Porter #endif 85