Haavard Skinnemoen | 3bfb1d2 | 2008-07-08 11:59:42 -0700 | [diff] [blame] | 1 | /* |
Andy Shevchenko | dd5720b | 2014-02-12 11:16:17 +0200 | [diff] [blame] | 2 | * Driver for the Synopsys DesignWare DMA Controller |
Haavard Skinnemoen | 3bfb1d2 | 2008-07-08 11:59:42 -0700 | [diff] [blame] | 3 | * |
| 4 | * Copyright (C) 2007 Atmel Corporation |
Viresh Kumar | aecb7b6 | 2011-05-24 14:04:09 +0530 | [diff] [blame] | 5 | * Copyright (C) 2010-2011 ST Microelectronics |
Haavard Skinnemoen | 3bfb1d2 | 2008-07-08 11:59:42 -0700 | [diff] [blame] | 6 | * |
| 7 | * This program is free software; you can redistribute it and/or modify |
| 8 | * it under the terms of the GNU General Public License version 2 as |
| 9 | * published by the Free Software Foundation. |
| 10 | */ |
Andy Shevchenko | 3d588f8 | 2014-09-23 17:18:11 +0300 | [diff] [blame] | 11 | #ifndef _PLATFORM_DATA_DMA_DW_H |
| 12 | #define _PLATFORM_DATA_DMA_DW_H |
Haavard Skinnemoen | 3bfb1d2 | 2008-07-08 11:59:42 -0700 | [diff] [blame] | 13 | |
Andy Shevchenko | 3d588f8 | 2014-09-23 17:18:11 +0300 | [diff] [blame] | 14 | #include <linux/device.h> |
Haavard Skinnemoen | 3bfb1d2 | 2008-07-08 11:59:42 -0700 | [diff] [blame] | 15 | |
Andy Shevchenko | d8ded50 | 2015-01-13 19:08:14 +0200 | [diff] [blame] | 16 | #define DW_DMA_MAX_NR_MASTERS 4 |
Eugeniy Paltsev | bd2c663 | 2016-11-25 17:59:07 +0300 | [diff] [blame] | 17 | #define DW_DMA_MAX_NR_CHANNELS 8 |
Andy Shevchenko | d8ded50 | 2015-01-13 19:08:14 +0200 | [diff] [blame] | 18 | |
Haavard Skinnemoen | 3bfb1d2 | 2008-07-08 11:59:42 -0700 | [diff] [blame] | 19 | /** |
Viresh Kumar | a9ddb57 | 2012-10-16 09:49:17 +0530 | [diff] [blame] | 20 | * struct dw_dma_slave - Controller-specific information about a slave |
| 21 | * |
Andy Shevchenko | cfd8fef | 2015-01-13 19:08:13 +0200 | [diff] [blame] | 22 | * @dma_dev: required DMA master device |
Andy Shevchenko | 7e1e2f2 | 2014-08-19 20:29:14 +0300 | [diff] [blame] | 23 | * @src_id: src request line |
| 24 | * @dst_id: dst request line |
Andy Shevchenko | c422025 | 2016-03-18 16:24:41 +0200 | [diff] [blame] | 25 | * @m_master: memory master for transfers on allocated channel |
| 26 | * @p_master: peripheral master for transfers on allocated channel |
Andy Shevchenko | c072e11 | 2016-08-17 19:20:21 +0300 | [diff] [blame] | 27 | * @hs_polarity:set active low polarity of handshake interface |
Viresh Kumar | a9ddb57 | 2012-10-16 09:49:17 +0530 | [diff] [blame] | 28 | */ |
| 29 | struct dw_dma_slave { |
| 30 | struct device *dma_dev; |
Andy Shevchenko | 7e1e2f2 | 2014-08-19 20:29:14 +0300 | [diff] [blame] | 31 | u8 src_id; |
| 32 | u8 dst_id; |
Andy Shevchenko | c422025 | 2016-03-18 16:24:41 +0200 | [diff] [blame] | 33 | u8 m_master; |
| 34 | u8 p_master; |
Andy Shevchenko | c072e11 | 2016-08-17 19:20:21 +0300 | [diff] [blame] | 35 | bool hs_polarity; |
Viresh Kumar | a9ddb57 | 2012-10-16 09:49:17 +0530 | [diff] [blame] | 36 | }; |
| 37 | |
| 38 | /** |
Haavard Skinnemoen | 3bfb1d2 | 2008-07-08 11:59:42 -0700 | [diff] [blame] | 39 | * struct dw_dma_platform_data - Controller configuration parameters |
| 40 | * @nr_channels: Number of channels supported by hardware (max 8) |
Jamie Iles | 95ea759 | 2011-01-21 14:11:54 +0000 | [diff] [blame] | 41 | * @is_private: The device channels should be marked as private and not for |
| 42 | * by the general purpose DMA channel allocator. |
Andy Shevchenko | df5c738 | 2015-10-13 20:09:19 +0300 | [diff] [blame] | 43 | * @is_memcpy: The device channels do support memory-to-memory transfers. |
Andy Shevchenko | 199244d | 2017-01-17 13:57:31 +0200 | [diff] [blame] | 44 | * @is_idma32: The type of the DMA controller is iDMA32 |
Viresh Kumar | 177d2bf | 2012-10-16 09:49:16 +0530 | [diff] [blame] | 45 | * @chan_allocation_order: Allocate channels starting from 0 or 7 |
| 46 | * @chan_priority: Set channel priority increasing from 0 to 7 or 7 to 0. |
Andy Shevchenko | 4a63a8b | 2012-09-21 15:05:47 +0300 | [diff] [blame] | 47 | * @block_size: Maximum block size supported by the controller |
Andy Shevchenko | a098200 | 2012-09-21 15:05:48 +0300 | [diff] [blame] | 48 | * @nr_masters: Number of AHB masters supported by the controller |
| 49 | * @data_width: Maximum data width supported by hardware per AHB master |
Andy Shevchenko | 2e65060 | 2016-04-27 14:15:38 +0300 | [diff] [blame] | 50 | * (in bytes, power of 2) |
Eugeniy Paltsev | bd2c663 | 2016-11-25 17:59:07 +0300 | [diff] [blame] | 51 | * @multi_block: Multi block transfers supported by hardware per channel. |
Haavard Skinnemoen | 3bfb1d2 | 2008-07-08 11:59:42 -0700 | [diff] [blame] | 52 | */ |
| 53 | struct dw_dma_platform_data { |
| 54 | unsigned int nr_channels; |
Jamie Iles | 95ea759 | 2011-01-21 14:11:54 +0000 | [diff] [blame] | 55 | bool is_private; |
Andy Shevchenko | df5c738 | 2015-10-13 20:09:19 +0300 | [diff] [blame] | 56 | bool is_memcpy; |
Andy Shevchenko | 199244d | 2017-01-17 13:57:31 +0200 | [diff] [blame] | 57 | bool is_idma32; |
Viresh Kumar | b0c3130 | 2011-03-03 15:47:21 +0530 | [diff] [blame] | 58 | #define CHAN_ALLOCATION_ASCENDING 0 /* zero to seven */ |
| 59 | #define CHAN_ALLOCATION_DESCENDING 1 /* seven to zero */ |
| 60 | unsigned char chan_allocation_order; |
Viresh Kumar | 93317e8 | 2011-03-03 15:47:22 +0530 | [diff] [blame] | 61 | #define CHAN_PRIORITY_ASCENDING 0 /* chan0 highest */ |
| 62 | #define CHAN_PRIORITY_DESCENDING 1 /* chan7 highest */ |
| 63 | unsigned char chan_priority; |
Andy Shevchenko | 161c3d0 | 2016-04-27 14:15:39 +0300 | [diff] [blame] | 64 | unsigned int block_size; |
Andy Shevchenko | a098200 | 2012-09-21 15:05:48 +0300 | [diff] [blame] | 65 | unsigned char nr_masters; |
Andy Shevchenko | d8ded50 | 2015-01-13 19:08:14 +0200 | [diff] [blame] | 66 | unsigned char data_width[DW_DMA_MAX_NR_MASTERS]; |
Eugeniy Paltsev | bd2c663 | 2016-11-25 17:59:07 +0300 | [diff] [blame] | 67 | unsigned char multi_block[DW_DMA_MAX_NR_CHANNELS]; |
Haavard Skinnemoen | 3bfb1d2 | 2008-07-08 11:59:42 -0700 | [diff] [blame] | 68 | }; |
| 69 | |
Andy Shevchenko | 3d588f8 | 2014-09-23 17:18:11 +0300 | [diff] [blame] | 70 | #endif /* _PLATFORM_DATA_DMA_DW_H */ |