aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/plat-nomadik
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2010-10-27 22:04:36 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2010-10-27 22:04:36 -0400
commite3e1288e86a07cdeb0aee5860a2dff111c6eff79 (patch)
treecd22f8051a456c9d2b95698b6fe402776a67469b /arch/arm/plat-nomadik
parent9ae6d039224def926656206725ae6e89d1331417 (diff)
parent964dc256bb91e990277010a3f6dc66daa130be8b (diff)
Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx
* 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx: (48 commits) DMAENGINE: move COH901318 to arch_initcall dma: imx-dma: fix signedness bug dma/timberdale: simplify conditional ste_dma40: remove channel_type ste_dma40: remove enum for endianess ste_dma40: remove TIM_FOR_LINK option ste_dma40: move mode_opt to separate config ste_dma40: move channel mode to a separate field ste_dma40: move priority to separate field ste_dma40: add variable to indicate valid dma_cfg async_tx: make async_tx channel switching opt-in move async raid6 test to lib/Kconfig.debug dmaengine: Add Freescale i.MX1/21/27 DMA driver intel_mid_dma: change the slave interface intel_mid_dma: fix the WARN_ONs intel_mid_dma: Add sg list support to DMA driver intel_mid_dma: Allow DMAC2 to share interrupt intel_mid_dma: Allow IRQ sharing intel_mid_dma: Add runtime PM support DMAENGINE: define a dummy filter function for ste_dma40 ...
Diffstat (limited to 'arch/arm/plat-nomadik')
-rw-r--r--arch/arm/plat-nomadik/include/plat/ste_dma40.h134
1 files changed, 60 insertions, 74 deletions
diff --git a/arch/arm/plat-nomadik/include/plat/ste_dma40.h b/arch/arm/plat-nomadik/include/plat/ste_dma40.h
index 93a812672d9a..74b62f10d07f 100644
--- a/arch/arm/plat-nomadik/include/plat/ste_dma40.h
+++ b/arch/arm/plat-nomadik/include/plat/ste_dma40.h
@@ -1,10 +1,8 @@
1/* 1/*
2 * arch/arm/plat-nomadik/include/plat/ste_dma40.h 2 * Copyright (C) ST-Ericsson SA 2007-2010
3 * 3 * Author: Per Forlin <per.forlin@stericsson.com> for ST-Ericsson
4 * Copyright (C) ST-Ericsson 2007-2010 4 * Author: Jonas Aaberg <jonas.aberg@stericsson.com> for ST-Ericsson
5 * License terms: GNU General Public License (GPL) version 2 5 * License terms: GNU General Public License (GPL) version 2
6 * Author: Per Friden <per.friden@stericsson.com>
7 * Author: Jonas Aaberg <jonas.aberg@stericsson.com>
8 */ 6 */
9 7
10 8
@@ -19,37 +17,20 @@
19#define STEDMA40_DEV_DST_MEMORY (-1) 17#define STEDMA40_DEV_DST_MEMORY (-1)
20#define STEDMA40_DEV_SRC_MEMORY (-1) 18#define STEDMA40_DEV_SRC_MEMORY (-1)
21 19
22/* 20enum stedma40_mode {
23 * Description of bitfields of channel_type variable is available in 21 STEDMA40_MODE_LOGICAL = 0,
24 * the info structure. 22 STEDMA40_MODE_PHYSICAL,
25 */ 23 STEDMA40_MODE_OPERATION,
24};
26 25
27/* Priority */ 26enum stedma40_mode_opt {
28#define STEDMA40_INFO_PRIO_TYPE_POS 2 27 STEDMA40_PCHAN_BASIC_MODE = 0,
29#define STEDMA40_HIGH_PRIORITY_CHANNEL (0x1 << STEDMA40_INFO_PRIO_TYPE_POS) 28 STEDMA40_LCHAN_SRC_LOG_DST_LOG = 0,
30#define STEDMA40_LOW_PRIORITY_CHANNEL (0x2 << STEDMA40_INFO_PRIO_TYPE_POS) 29 STEDMA40_PCHAN_MODULO_MODE,
31 30 STEDMA40_PCHAN_DOUBLE_DST_MODE,
32/* Mode */ 31 STEDMA40_LCHAN_SRC_PHY_DST_LOG,
33#define STEDMA40_INFO_CH_MODE_TYPE_POS 6 32 STEDMA40_LCHAN_SRC_LOG_DST_PHY,
34#define STEDMA40_CHANNEL_IN_PHY_MODE (0x1 << STEDMA40_INFO_CH_MODE_TYPE_POS) 33};
35#define STEDMA40_CHANNEL_IN_LOG_MODE (0x2 << STEDMA40_INFO_CH_MODE_TYPE_POS)
36#define STEDMA40_CHANNEL_IN_OPER_MODE (0x3 << STEDMA40_INFO_CH_MODE_TYPE_POS)
37
38/* Mode options */
39#define STEDMA40_INFO_CH_MODE_OPT_POS 8
40#define STEDMA40_PCHAN_BASIC_MODE (0x1 << STEDMA40_INFO_CH_MODE_OPT_POS)
41#define STEDMA40_PCHAN_MODULO_MODE (0x2 << STEDMA40_INFO_CH_MODE_OPT_POS)
42#define STEDMA40_PCHAN_DOUBLE_DST_MODE (0x3 << STEDMA40_INFO_CH_MODE_OPT_POS)
43#define STEDMA40_LCHAN_SRC_PHY_DST_LOG (0x1 << STEDMA40_INFO_CH_MODE_OPT_POS)
44#define STEDMA40_LCHAN_SRC_LOG_DST_PHS (0x2 << STEDMA40_INFO_CH_MODE_OPT_POS)
45#define STEDMA40_LCHAN_SRC_LOG_DST_LOG (0x3 << STEDMA40_INFO_CH_MODE_OPT_POS)
46
47/* Interrupt */
48#define STEDMA40_INFO_TIM_POS 10
49#define STEDMA40_NO_TIM_FOR_LINK (0x0 << STEDMA40_INFO_TIM_POS)
50#define STEDMA40_TIM_FOR_LINK (0x1 << STEDMA40_INFO_TIM_POS)
51
52/* End of channel_type configuration */
53 34
54#define STEDMA40_ESIZE_8_BIT 0x0 35#define STEDMA40_ESIZE_8_BIT 0x0
55#define STEDMA40_ESIZE_16_BIT 0x1 36#define STEDMA40_ESIZE_16_BIT 0x1
@@ -72,16 +53,14 @@
72#define STEDMA40_PSIZE_LOG_8 STEDMA40_PSIZE_PHY_8 53#define STEDMA40_PSIZE_LOG_8 STEDMA40_PSIZE_PHY_8
73#define STEDMA40_PSIZE_LOG_16 STEDMA40_PSIZE_PHY_16 54#define STEDMA40_PSIZE_LOG_16 STEDMA40_PSIZE_PHY_16
74 55
56/* Maximum number of possible physical channels */
57#define STEDMA40_MAX_PHYS 32
58
75enum stedma40_flow_ctrl { 59enum stedma40_flow_ctrl {
76 STEDMA40_NO_FLOW_CTRL, 60 STEDMA40_NO_FLOW_CTRL,
77 STEDMA40_FLOW_CTRL, 61 STEDMA40_FLOW_CTRL,
78}; 62};
79 63
80enum stedma40_endianess {
81 STEDMA40_LITTLE_ENDIAN,
82 STEDMA40_BIG_ENDIAN
83};
84
85enum stedma40_periph_data_width { 64enum stedma40_periph_data_width {
86 STEDMA40_BYTE_WIDTH = STEDMA40_ESIZE_8_BIT, 65 STEDMA40_BYTE_WIDTH = STEDMA40_ESIZE_8_BIT,
87 STEDMA40_HALFWORD_WIDTH = STEDMA40_ESIZE_16_BIT, 66 STEDMA40_HALFWORD_WIDTH = STEDMA40_ESIZE_16_BIT,
@@ -89,15 +68,8 @@ enum stedma40_periph_data_width {
89 STEDMA40_DOUBLEWORD_WIDTH = STEDMA40_ESIZE_64_BIT 68 STEDMA40_DOUBLEWORD_WIDTH = STEDMA40_ESIZE_64_BIT
90}; 69};
91 70
92struct stedma40_half_channel_info {
93 enum stedma40_endianess endianess;
94 enum stedma40_periph_data_width data_width;
95 int psize;
96 enum stedma40_flow_ctrl flow_ctrl;
97};
98
99enum stedma40_xfer_dir { 71enum stedma40_xfer_dir {
100 STEDMA40_MEM_TO_MEM, 72 STEDMA40_MEM_TO_MEM = 1,
101 STEDMA40_MEM_TO_PERIPH, 73 STEDMA40_MEM_TO_PERIPH,
102 STEDMA40_PERIPH_TO_MEM, 74 STEDMA40_PERIPH_TO_MEM,
103 STEDMA40_PERIPH_TO_PERIPH 75 STEDMA40_PERIPH_TO_PERIPH
@@ -105,18 +77,31 @@ enum stedma40_xfer_dir {
105 77
106 78
107/** 79/**
80 * struct stedma40_chan_cfg - dst/src channel configuration
81 *
82 * @big_endian: true if the src/dst should be read as big endian
83 * @data_width: Data width of the src/dst hardware
84 * @p_size: Burst size
85 * @flow_ctrl: Flow control on/off.
86 */
87struct stedma40_half_channel_info {
88 bool big_endian;
89 enum stedma40_periph_data_width data_width;
90 int psize;
91 enum stedma40_flow_ctrl flow_ctrl;
92};
93
94/**
108 * struct stedma40_chan_cfg - Structure to be filled by client drivers. 95 * struct stedma40_chan_cfg - Structure to be filled by client drivers.
109 * 96 *
110 * @dir: MEM 2 MEM, PERIPH 2 MEM , MEM 2 PERIPH, PERIPH 2 PERIPH 97 * @dir: MEM 2 MEM, PERIPH 2 MEM , MEM 2 PERIPH, PERIPH 2 PERIPH
111 * @channel_type: priority, mode, mode options and interrupt configuration. 98 * @high_priority: true if high-priority
99 * @mode: channel mode: physical, logical, or operation
100 * @mode_opt: options for the chosen channel mode
112 * @src_dev_type: Src device type 101 * @src_dev_type: Src device type
113 * @dst_dev_type: Dst device type 102 * @dst_dev_type: Dst device type
114 * @src_info: Parameters for dst half channel 103 * @src_info: Parameters for dst half channel
115 * @dst_info: Parameters for dst half channel 104 * @dst_info: Parameters for dst half channel
116 * @pre_transfer_data: Data to be passed on to the pre_transfer() function.
117 * @pre_transfer: Callback used if needed before preparation of transfer.
118 * Only called if device is set. size of bytes to transfer
119 * (in case of multiple element transfer size is size of the first element).
120 * 105 *
121 * 106 *
122 * This structure has to be filled by the client drivers. 107 * This structure has to be filled by the client drivers.
@@ -125,15 +110,13 @@ enum stedma40_xfer_dir {
125 */ 110 */
126struct stedma40_chan_cfg { 111struct stedma40_chan_cfg {
127 enum stedma40_xfer_dir dir; 112 enum stedma40_xfer_dir dir;
128 unsigned int channel_type; 113 bool high_priority;
114 enum stedma40_mode mode;
115 enum stedma40_mode_opt mode_opt;
129 int src_dev_type; 116 int src_dev_type;
130 int dst_dev_type; 117 int dst_dev_type;
131 struct stedma40_half_channel_info src_info; 118 struct stedma40_half_channel_info src_info;
132 struct stedma40_half_channel_info dst_info; 119 struct stedma40_half_channel_info dst_info;
133 void *pre_transfer_data;
134 int (*pre_transfer) (struct dma_chan *chan,
135 void *data,
136 int size);
137}; 120};
138 121
139/** 122/**
@@ -146,7 +129,6 @@ struct stedma40_chan_cfg {
146 * @memcpy_len: length of memcpy 129 * @memcpy_len: length of memcpy
147 * @memcpy_conf_phy: default configuration of physical channel memcpy 130 * @memcpy_conf_phy: default configuration of physical channel memcpy
148 * @memcpy_conf_log: default configuration of logical channel memcpy 131 * @memcpy_conf_log: default configuration of logical channel memcpy
149 * @llis_per_log: number of max linked list items per logical channel
150 * @disabled_channels: A vector, ending with -1, that marks physical channels 132 * @disabled_channels: A vector, ending with -1, that marks physical channels
151 * that are for different reasons not available for the driver. 133 * that are for different reasons not available for the driver.
152 */ 134 */
@@ -158,23 +140,10 @@ struct stedma40_platform_data {
158 u32 memcpy_len; 140 u32 memcpy_len;
159 struct stedma40_chan_cfg *memcpy_conf_phy; 141 struct stedma40_chan_cfg *memcpy_conf_phy;
160 struct stedma40_chan_cfg *memcpy_conf_log; 142 struct stedma40_chan_cfg *memcpy_conf_log;
161 unsigned int llis_per_log; 143 int disabled_channels[STEDMA40_MAX_PHYS];
162 int disabled_channels[8];
163}; 144};
164 145
165/** 146#ifdef CONFIG_STE_DMA40
166 * setdma40_set_psize() - Used for changing the package size of an
167 * already configured dma channel.
168 *
169 * @chan: dmaengine handle
170 * @src_psize: new package side for src. (STEDMA40_PSIZE*)
171 * @src_psize: new package side for dst. (STEDMA40_PSIZE*)
172 *
173 * returns 0 on ok, otherwise negative error number.
174 */
175int stedma40_set_psize(struct dma_chan *chan,
176 int src_psize,
177 int dst_psize);
178 147
179/** 148/**
180 * stedma40_filter() - Provides stedma40_chan_cfg to the 149 * stedma40_filter() - Provides stedma40_chan_cfg to the
@@ -237,4 +206,21 @@ dma_async_tx_descriptor *stedma40_slave_mem(struct dma_chan *chan,
237 direction, flags); 206 direction, flags);
238} 207}
239 208
209#else
210static inline bool stedma40_filter(struct dma_chan *chan, void *data)
211{
212 return false;
213}
214
215static inline struct
216dma_async_tx_descriptor *stedma40_slave_mem(struct dma_chan *chan,
217 dma_addr_t addr,
218 unsigned int size,
219 enum dma_data_direction direction,
220 unsigned long flags)
221{
222 return NULL;
223}
224#endif
225
240#endif 226#endif