1b466a37fSAndy Shevchenko /* SPDX-License-Identifier: GPL-2.0 */
23d598f47SAndy Shevchenko /*
33d598f47SAndy Shevchenko  * Driver for the Synopsys DesignWare DMA Controller
43d598f47SAndy Shevchenko  *
53d598f47SAndy Shevchenko  * Copyright (C) 2007 Atmel Corporation
63d598f47SAndy Shevchenko  * Copyright (C) 2010-2011 ST Microelectronics
73d598f47SAndy Shevchenko  */
83d588f83SAndy Shevchenko #ifndef _PLATFORM_DATA_DMA_DW_H
93d588f83SAndy Shevchenko #define _PLATFORM_DATA_DMA_DW_H
103d598f47SAndy Shevchenko 
116bd0dffaSAndy Shevchenko #include <linux/bits.h>
126bd0dffaSAndy Shevchenko #include <linux/types.h>
133d598f47SAndy Shevchenko 
14d8ded50fSAndy Shevchenko #define DW_DMA_MAX_NR_MASTERS	4
15bd2c6636SEugeniy Paltsev #define DW_DMA_MAX_NR_CHANNELS	8
16585d3545SSerge Semin #define DW_DMA_MIN_BURST	1
17585d3545SSerge Semin #define DW_DMA_MAX_BURST	256
18d8ded50fSAndy Shevchenko 
196bd0dffaSAndy Shevchenko struct device;
206bd0dffaSAndy Shevchenko 
213d598f47SAndy Shevchenko /**
223d598f47SAndy Shevchenko  * struct dw_dma_slave - Controller-specific information about a slave
233d598f47SAndy Shevchenko  *
24cfd8fef3SAndy Shevchenko  * @dma_dev:	required DMA master device
257e1e2f27SAndy Shevchenko  * @src_id:	src request line
267e1e2f27SAndy Shevchenko  * @dst_id:	dst request line
27c422025cSAndy Shevchenko  * @m_master:	memory master for transfers on allocated channel
28c422025cSAndy Shevchenko  * @p_master:	peripheral master for transfers on allocated channel
29e8ee6c8cSSerge Semin  * @channels:	mask of the channels permitted for allocation (zero value means any)
30c072e113SAndy Shevchenko  * @hs_polarity:set active low polarity of handshake interface
313d598f47SAndy Shevchenko  */
323d598f47SAndy Shevchenko struct dw_dma_slave {
333d598f47SAndy Shevchenko 	struct device		*dma_dev;
347e1e2f27SAndy Shevchenko 	u8			src_id;
357e1e2f27SAndy Shevchenko 	u8			dst_id;
36c422025cSAndy Shevchenko 	u8			m_master;
37c422025cSAndy Shevchenko 	u8			p_master;
38e8ee6c8cSSerge Semin 	u8			channels;
39c072e113SAndy Shevchenko 	bool			hs_polarity;
403d598f47SAndy Shevchenko };
413d598f47SAndy Shevchenko 
423d598f47SAndy Shevchenko /**
433d598f47SAndy Shevchenko  * struct dw_dma_platform_data - Controller configuration parameters
44*08bf54fcSAndy Shevchenko  * @nr_masters: Number of AHB masters supported by the controller
453d598f47SAndy Shevchenko  * @nr_channels: Number of channels supported by hardware (max 8)
463d598f47SAndy Shevchenko  * @chan_allocation_order: Allocate channels starting from 0 or 7
473d598f47SAndy Shevchenko  * @chan_priority: Set channel priority increasing from 0 to 7 or 7 to 0.
483d598f47SAndy Shevchenko  * @block_size: Maximum block size supported by the controller
493d598f47SAndy Shevchenko  * @data_width: Maximum data width supported by hardware per AHB master
502e65060eSAndy Shevchenko  *		(in bytes, power of 2)
51bd2c6636SEugeniy Paltsev  * @multi_block: Multi block transfers supported by hardware per channel.
52ca7f2851SSerge Semin  * @max_burst: Maximum value of burst transaction size supported by hardware
53ca7f2851SSerge Semin  *	       per channel (in units of CTL.SRC_TR_WIDTH/CTL.DST_TR_WIDTH).
547b0c03ecSChristian Lamparter  * @protctl: Protection control signals setting per channel.
55fe364a7dSAndy Shevchenko  * @quirks: Optional platform quirks.
563d598f47SAndy Shevchenko  */
573d598f47SAndy Shevchenko struct dw_dma_platform_data {
58*08bf54fcSAndy Shevchenko 	u32		nr_masters;
59*08bf54fcSAndy Shevchenko 	u32		nr_channels;
603d598f47SAndy Shevchenko #define CHAN_ALLOCATION_ASCENDING	0	/* zero to seven */
613d598f47SAndy Shevchenko #define CHAN_ALLOCATION_DESCENDING	1	/* seven to zero */
62*08bf54fcSAndy Shevchenko 	u32		chan_allocation_order;
633d598f47SAndy Shevchenko #define CHAN_PRIORITY_ASCENDING		0	/* chan0 highest */
643d598f47SAndy Shevchenko #define CHAN_PRIORITY_DESCENDING	1	/* chan7 highest */
65*08bf54fcSAndy Shevchenko 	u32		chan_priority;
66*08bf54fcSAndy Shevchenko 	u32		block_size;
67*08bf54fcSAndy Shevchenko 	u32		data_width[DW_DMA_MAX_NR_MASTERS];
68*08bf54fcSAndy Shevchenko 	u32		multi_block[DW_DMA_MAX_NR_CHANNELS];
69ca7f2851SSerge Semin 	u32		max_burst[DW_DMA_MAX_NR_CHANNELS];
707b0c03ecSChristian Lamparter #define CHAN_PROTCTL_PRIVILEGED		BIT(0)
717b0c03ecSChristian Lamparter #define CHAN_PROTCTL_BUFFERABLE		BIT(1)
727b0c03ecSChristian Lamparter #define CHAN_PROTCTL_CACHEABLE		BIT(2)
737b0c03ecSChristian Lamparter #define CHAN_PROTCTL_MASK		GENMASK(2, 0)
74*08bf54fcSAndy Shevchenko 	u32		protctl;
75fe364a7dSAndy Shevchenko #define DW_DMA_QUIRK_XBAR_PRESENT	BIT(0)
76*08bf54fcSAndy Shevchenko 	u32		quirks;
773d598f47SAndy Shevchenko };
783d598f47SAndy Shevchenko 
793d588f83SAndy Shevchenko #endif /* _PLATFORM_DATA_DMA_DW_H */
80