diff options
-rw-r--r-- | drivers/dma/coh901318.c | 208 | ||||
-rw-r--r-- | drivers/dma/coh901318.h | 212 | ||||
-rw-r--r-- | drivers/dma/coh901318_lli.c | 1 |
3 files changed, 209 insertions, 212 deletions
diff --git a/drivers/dma/coh901318.c b/drivers/dma/coh901318.c index 1be69b87a913..f7100dc6b8e2 100644 --- a/drivers/dma/coh901318.c +++ b/drivers/dma/coh901318.c | |||
@@ -27,6 +27,214 @@ | |||
27 | #include "coh901318_lli.h" | 27 | #include "coh901318_lli.h" |
28 | #include "dmaengine.h" | 28 | #include "dmaengine.h" |
29 | 29 | ||
30 | #define COH901318_MOD32_MASK (0x1F) | ||
31 | #define COH901318_WORD_MASK (0xFFFFFFFF) | ||
32 | /* INT_STATUS - Interrupt Status Registers 32bit (R/-) */ | ||
33 | #define COH901318_INT_STATUS1 (0x0000) | ||
34 | #define COH901318_INT_STATUS2 (0x0004) | ||
35 | /* TC_INT_STATUS - Terminal Count Interrupt Status Registers 32bit (R/-) */ | ||
36 | #define COH901318_TC_INT_STATUS1 (0x0008) | ||
37 | #define COH901318_TC_INT_STATUS2 (0x000C) | ||
38 | /* TC_INT_CLEAR - Terminal Count Interrupt Clear Registers 32bit (-/W) */ | ||
39 | #define COH901318_TC_INT_CLEAR1 (0x0010) | ||
40 | #define COH901318_TC_INT_CLEAR2 (0x0014) | ||
41 | /* RAW_TC_INT_STATUS - Raw Term Count Interrupt Status Registers 32bit (R/-) */ | ||
42 | #define COH901318_RAW_TC_INT_STATUS1 (0x0018) | ||
43 | #define COH901318_RAW_TC_INT_STATUS2 (0x001C) | ||
44 | /* BE_INT_STATUS - Bus Error Interrupt Status Registers 32bit (R/-) */ | ||
45 | #define COH901318_BE_INT_STATUS1 (0x0020) | ||
46 | #define COH901318_BE_INT_STATUS2 (0x0024) | ||
47 | /* BE_INT_CLEAR - Bus Error Interrupt Clear Registers 32bit (-/W) */ | ||
48 | #define COH901318_BE_INT_CLEAR1 (0x0028) | ||
49 | #define COH901318_BE_INT_CLEAR2 (0x002C) | ||
50 | /* RAW_BE_INT_STATUS - Raw Term Count Interrupt Status Registers 32bit (R/-) */ | ||
51 | #define COH901318_RAW_BE_INT_STATUS1 (0x0030) | ||
52 | #define COH901318_RAW_BE_INT_STATUS2 (0x0034) | ||
53 | |||
54 | /* | ||
55 | * CX_CFG - Channel Configuration Registers 32bit (R/W) | ||
56 | */ | ||
57 | #define COH901318_CX_CFG (0x0100) | ||
58 | #define COH901318_CX_CFG_SPACING (0x04) | ||
59 | /* Channel enable activates tha dma job */ | ||
60 | #define COH901318_CX_CFG_CH_ENABLE (0x00000001) | ||
61 | #define COH901318_CX_CFG_CH_DISABLE (0x00000000) | ||
62 | /* Request Mode */ | ||
63 | #define COH901318_CX_CFG_RM_MASK (0x00000006) | ||
64 | #define COH901318_CX_CFG_RM_MEMORY_TO_MEMORY (0x0 << 1) | ||
65 | #define COH901318_CX_CFG_RM_PRIMARY_TO_MEMORY (0x1 << 1) | ||
66 | #define COH901318_CX_CFG_RM_MEMORY_TO_PRIMARY (0x1 << 1) | ||
67 | #define COH901318_CX_CFG_RM_PRIMARY_TO_SECONDARY (0x3 << 1) | ||
68 | #define COH901318_CX_CFG_RM_SECONDARY_TO_PRIMARY (0x3 << 1) | ||
69 | /* Linked channel request field. RM must == 11 */ | ||
70 | #define COH901318_CX_CFG_LCRF_SHIFT 3 | ||
71 | #define COH901318_CX_CFG_LCRF_MASK (0x000001F8) | ||
72 | #define COH901318_CX_CFG_LCR_DISABLE (0x00000000) | ||
73 | /* Terminal Counter Interrupt Request Mask */ | ||
74 | #define COH901318_CX_CFG_TC_IRQ_ENABLE (0x00000200) | ||
75 | #define COH901318_CX_CFG_TC_IRQ_DISABLE (0x00000000) | ||
76 | /* Bus Error interrupt Mask */ | ||
77 | #define COH901318_CX_CFG_BE_IRQ_ENABLE (0x00000400) | ||
78 | #define COH901318_CX_CFG_BE_IRQ_DISABLE (0x00000000) | ||
79 | |||
80 | /* | ||
81 | * CX_STAT - Channel Status Registers 32bit (R/-) | ||
82 | */ | ||
83 | #define COH901318_CX_STAT (0x0200) | ||
84 | #define COH901318_CX_STAT_SPACING (0x04) | ||
85 | #define COH901318_CX_STAT_RBE_IRQ_IND (0x00000008) | ||
86 | #define COH901318_CX_STAT_RTC_IRQ_IND (0x00000004) | ||
87 | #define COH901318_CX_STAT_ACTIVE (0x00000002) | ||
88 | #define COH901318_CX_STAT_ENABLED (0x00000001) | ||
89 | |||
90 | /* | ||
91 | * CX_CTRL - Channel Control Registers 32bit (R/W) | ||
92 | */ | ||
93 | #define COH901318_CX_CTRL (0x0400) | ||
94 | #define COH901318_CX_CTRL_SPACING (0x10) | ||
95 | /* Transfer Count Enable */ | ||
96 | #define COH901318_CX_CTRL_TC_ENABLE (0x00001000) | ||
97 | #define COH901318_CX_CTRL_TC_DISABLE (0x00000000) | ||
98 | /* Transfer Count Value 0 - 4095 */ | ||
99 | #define COH901318_CX_CTRL_TC_VALUE_MASK (0x00000FFF) | ||
100 | /* Burst count */ | ||
101 | #define COH901318_CX_CTRL_BURST_COUNT_MASK (0x0000E000) | ||
102 | #define COH901318_CX_CTRL_BURST_COUNT_64_BYTES (0x7 << 13) | ||
103 | #define COH901318_CX_CTRL_BURST_COUNT_48_BYTES (0x6 << 13) | ||
104 | #define COH901318_CX_CTRL_BURST_COUNT_32_BYTES (0x5 << 13) | ||
105 | #define COH901318_CX_CTRL_BURST_COUNT_16_BYTES (0x4 << 13) | ||
106 | #define COH901318_CX_CTRL_BURST_COUNT_8_BYTES (0x3 << 13) | ||
107 | #define COH901318_CX_CTRL_BURST_COUNT_4_BYTES (0x2 << 13) | ||
108 | #define COH901318_CX_CTRL_BURST_COUNT_2_BYTES (0x1 << 13) | ||
109 | #define COH901318_CX_CTRL_BURST_COUNT_1_BYTE (0x0 << 13) | ||
110 | /* Source bus size */ | ||
111 | #define COH901318_CX_CTRL_SRC_BUS_SIZE_MASK (0x00030000) | ||
112 | #define COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS (0x2 << 16) | ||
113 | #define COH901318_CX_CTRL_SRC_BUS_SIZE_16_BITS (0x1 << 16) | ||
114 | #define COH901318_CX_CTRL_SRC_BUS_SIZE_8_BITS (0x0 << 16) | ||
115 | /* Source address increment */ | ||
116 | #define COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE (0x00040000) | ||
117 | #define COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE (0x00000000) | ||
118 | /* Destination Bus Size */ | ||
119 | #define COH901318_CX_CTRL_DST_BUS_SIZE_MASK (0x00180000) | ||
120 | #define COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS (0x2 << 19) | ||
121 | #define COH901318_CX_CTRL_DST_BUS_SIZE_16_BITS (0x1 << 19) | ||
122 | #define COH901318_CX_CTRL_DST_BUS_SIZE_8_BITS (0x0 << 19) | ||
123 | /* Destination address increment */ | ||
124 | #define COH901318_CX_CTRL_DST_ADDR_INC_ENABLE (0x00200000) | ||
125 | #define COH901318_CX_CTRL_DST_ADDR_INC_DISABLE (0x00000000) | ||
126 | /* Master Mode (Master2 is only connected to MSL) */ | ||
127 | #define COH901318_CX_CTRL_MASTER_MODE_MASK (0x00C00000) | ||
128 | #define COH901318_CX_CTRL_MASTER_MODE_M2R_M1W (0x3 << 22) | ||
129 | #define COH901318_CX_CTRL_MASTER_MODE_M1R_M2W (0x2 << 22) | ||
130 | #define COH901318_CX_CTRL_MASTER_MODE_M2RW (0x1 << 22) | ||
131 | #define COH901318_CX_CTRL_MASTER_MODE_M1RW (0x0 << 22) | ||
132 | /* Terminal Count flag to PER enable */ | ||
133 | #define COH901318_CX_CTRL_TCP_ENABLE (0x01000000) | ||
134 | #define COH901318_CX_CTRL_TCP_DISABLE (0x00000000) | ||
135 | /* Terminal Count flags to CPU enable */ | ||
136 | #define COH901318_CX_CTRL_TC_IRQ_ENABLE (0x02000000) | ||
137 | #define COH901318_CX_CTRL_TC_IRQ_DISABLE (0x00000000) | ||
138 | /* Hand shake to peripheral */ | ||
139 | #define COH901318_CX_CTRL_HSP_ENABLE (0x04000000) | ||
140 | #define COH901318_CX_CTRL_HSP_DISABLE (0x00000000) | ||
141 | #define COH901318_CX_CTRL_HSS_ENABLE (0x08000000) | ||
142 | #define COH901318_CX_CTRL_HSS_DISABLE (0x00000000) | ||
143 | /* DMA mode */ | ||
144 | #define COH901318_CX_CTRL_DDMA_MASK (0x30000000) | ||
145 | #define COH901318_CX_CTRL_DDMA_LEGACY (0x0 << 28) | ||
146 | #define COH901318_CX_CTRL_DDMA_DEMAND_DMA1 (0x1 << 28) | ||
147 | #define COH901318_CX_CTRL_DDMA_DEMAND_DMA2 (0x2 << 28) | ||
148 | /* Primary Request Data Destination */ | ||
149 | #define COH901318_CX_CTRL_PRDD_MASK (0x40000000) | ||
150 | #define COH901318_CX_CTRL_PRDD_DEST (0x1 << 30) | ||
151 | #define COH901318_CX_CTRL_PRDD_SOURCE (0x0 << 30) | ||
152 | |||
153 | /* | ||
154 | * CX_SRC_ADDR - Channel Source Address Registers 32bit (R/W) | ||
155 | */ | ||
156 | #define COH901318_CX_SRC_ADDR (0x0404) | ||
157 | #define COH901318_CX_SRC_ADDR_SPACING (0x10) | ||
158 | |||
159 | /* | ||
160 | * CX_DST_ADDR - Channel Destination Address Registers 32bit R/W | ||
161 | */ | ||
162 | #define COH901318_CX_DST_ADDR (0x0408) | ||
163 | #define COH901318_CX_DST_ADDR_SPACING (0x10) | ||
164 | |||
165 | /* | ||
166 | * CX_LNK_ADDR - Channel Link Address Registers 32bit (R/W) | ||
167 | */ | ||
168 | #define COH901318_CX_LNK_ADDR (0x040C) | ||
169 | #define COH901318_CX_LNK_ADDR_SPACING (0x10) | ||
170 | #define COH901318_CX_LNK_LINK_IMMEDIATE (0x00000001) | ||
171 | |||
172 | /** | ||
173 | * struct coh901318_params - parameters for DMAC configuration | ||
174 | * @config: DMA config register | ||
175 | * @ctrl_lli_last: DMA control register for the last lli in the list | ||
176 | * @ctrl_lli: DMA control register for an lli | ||
177 | * @ctrl_lli_chained: DMA control register for a chained lli | ||
178 | */ | ||
179 | struct coh901318_params { | ||
180 | u32 config; | ||
181 | u32 ctrl_lli_last; | ||
182 | u32 ctrl_lli; | ||
183 | u32 ctrl_lli_chained; | ||
184 | }; | ||
185 | |||
186 | /** | ||
187 | * struct coh_dma_channel - dma channel base | ||
188 | * @name: ascii name of dma channel | ||
189 | * @number: channel id number | ||
190 | * @desc_nbr_max: number of preallocated descriptors | ||
191 | * @priority_high: prio of channel, 0 low otherwise high. | ||
192 | * @param: configuration parameters | ||
193 | */ | ||
194 | struct coh_dma_channel { | ||
195 | const char name[32]; | ||
196 | const int number; | ||
197 | const int desc_nbr_max; | ||
198 | const int priority_high; | ||
199 | const struct coh901318_params param; | ||
200 | }; | ||
201 | |||
202 | /** | ||
203 | * dma_access_memory_state_t - register dma for memory access | ||
204 | * | ||
205 | * @dev: The dma device | ||
206 | * @active: 1 means dma intends to access memory | ||
207 | * 0 means dma wont access memory | ||
208 | */ | ||
209 | typedef void (*dma_access_memory_state_t)(struct device *dev, | ||
210 | bool active); | ||
211 | |||
212 | /** | ||
213 | * struct powersave - DMA power save structure | ||
214 | * @lock: lock protecting data in this struct | ||
215 | * @started_channels: bit mask indicating active dma channels | ||
216 | */ | ||
217 | struct powersave { | ||
218 | spinlock_t lock; | ||
219 | u64 started_channels; | ||
220 | }; | ||
221 | |||
222 | /** | ||
223 | * struct coh901318_platform - platform arch structure | ||
224 | * @chans_slave: specifying dma slave channels | ||
225 | * @chans_memcpy: specifying dma memcpy channels | ||
226 | * @access_memory_state: requesting DMA memory access (on / off) | ||
227 | * @chan_conf: dma channel configurations | ||
228 | * @max_channels: max number of dma chanenls | ||
229 | */ | ||
230 | struct coh901318_platform { | ||
231 | const int *chans_slave; | ||
232 | const int *chans_memcpy; | ||
233 | const dma_access_memory_state_t access_memory_state; | ||
234 | const struct coh_dma_channel *chan_conf; | ||
235 | const int max_channels; | ||
236 | }; | ||
237 | |||
30 | /* points out all dma slave channels. | 238 | /* points out all dma slave channels. |
31 | * Syntax is [A1, B1, A2, B2, .... ,-1,-1] | 239 | * Syntax is [A1, B1, A2, B2, .... ,-1,-1] |
32 | * Select all channels from A to B, end of list is marked with -1,-1 | 240 | * Select all channels from A to B, end of list is marked with -1,-1 |
diff --git a/drivers/dma/coh901318.h b/drivers/dma/coh901318.h index 9353c40b152a..275a36e1afc3 100644 --- a/drivers/dma/coh901318.h +++ b/drivers/dma/coh901318.h | |||
@@ -8,9 +8,6 @@ | |||
8 | #ifndef COH901318_H | 8 | #ifndef COH901318_H |
9 | #define COH901318_H | 9 | #define COH901318_H |
10 | 10 | ||
11 | #include <linux/device.h> | ||
12 | #include <linux/dmaengine.h> | ||
13 | |||
14 | #define MAX_DMA_PACKET_SIZE_SHIFT 11 | 11 | #define MAX_DMA_PACKET_SIZE_SHIFT 11 |
15 | #define MAX_DMA_PACKET_SIZE (1 << MAX_DMA_PACKET_SIZE_SHIFT) | 12 | #define MAX_DMA_PACKET_SIZE (1 << MAX_DMA_PACKET_SIZE_SHIFT) |
16 | 13 | ||
@@ -32,214 +29,5 @@ struct coh901318_lli { | |||
32 | void *virt_link_addr; | 29 | void *virt_link_addr; |
33 | dma_addr_t phy_this; | 30 | dma_addr_t phy_this; |
34 | }; | 31 | }; |
35 | /** | ||
36 | * struct coh901318_params - parameters for DMAC configuration | ||
37 | * @config: DMA config register | ||
38 | * @ctrl_lli_last: DMA control register for the last lli in the list | ||
39 | * @ctrl_lli: DMA control register for an lli | ||
40 | * @ctrl_lli_chained: DMA control register for a chained lli | ||
41 | */ | ||
42 | struct coh901318_params { | ||
43 | u32 config; | ||
44 | u32 ctrl_lli_last; | ||
45 | u32 ctrl_lli; | ||
46 | u32 ctrl_lli_chained; | ||
47 | }; | ||
48 | /** | ||
49 | * struct coh_dma_channel - dma channel base | ||
50 | * @name: ascii name of dma channel | ||
51 | * @number: channel id number | ||
52 | * @desc_nbr_max: number of preallocated descriptors | ||
53 | * @priority_high: prio of channel, 0 low otherwise high. | ||
54 | * @param: configuration parameters | ||
55 | */ | ||
56 | struct coh_dma_channel { | ||
57 | const char name[32]; | ||
58 | const int number; | ||
59 | const int desc_nbr_max; | ||
60 | const int priority_high; | ||
61 | const struct coh901318_params param; | ||
62 | }; | ||
63 | |||
64 | /** | ||
65 | * dma_access_memory_state_t - register dma for memory access | ||
66 | * | ||
67 | * @dev: The dma device | ||
68 | * @active: 1 means dma intends to access memory | ||
69 | * 0 means dma wont access memory | ||
70 | */ | ||
71 | typedef void (*dma_access_memory_state_t)(struct device *dev, | ||
72 | bool active); | ||
73 | |||
74 | /** | ||
75 | * struct powersave - DMA power save structure | ||
76 | * @lock: lock protecting data in this struct | ||
77 | * @started_channels: bit mask indicating active dma channels | ||
78 | */ | ||
79 | struct powersave { | ||
80 | spinlock_t lock; | ||
81 | u64 started_channels; | ||
82 | }; | ||
83 | /** | ||
84 | * struct coh901318_platform - platform arch structure | ||
85 | * @chans_slave: specifying dma slave channels | ||
86 | * @chans_memcpy: specifying dma memcpy channels | ||
87 | * @access_memory_state: requesting DMA memory access (on / off) | ||
88 | * @chan_conf: dma channel configurations | ||
89 | * @max_channels: max number of dma chanenls | ||
90 | */ | ||
91 | struct coh901318_platform { | ||
92 | const int *chans_slave; | ||
93 | const int *chans_memcpy; | ||
94 | const dma_access_memory_state_t access_memory_state; | ||
95 | const struct coh_dma_channel *chan_conf; | ||
96 | const int max_channels; | ||
97 | }; | ||
98 | |||
99 | /* | ||
100 | * DMA Controller - this access the static mappings of the coh901318 dma. | ||
101 | * | ||
102 | */ | ||
103 | |||
104 | #define COH901318_MOD32_MASK (0x1F) | ||
105 | #define COH901318_WORD_MASK (0xFFFFFFFF) | ||
106 | /* INT_STATUS - Interrupt Status Registers 32bit (R/-) */ | ||
107 | #define COH901318_INT_STATUS1 (0x0000) | ||
108 | #define COH901318_INT_STATUS2 (0x0004) | ||
109 | /* TC_INT_STATUS - Terminal Count Interrupt Status Registers 32bit (R/-) */ | ||
110 | #define COH901318_TC_INT_STATUS1 (0x0008) | ||
111 | #define COH901318_TC_INT_STATUS2 (0x000C) | ||
112 | /* TC_INT_CLEAR - Terminal Count Interrupt Clear Registers 32bit (-/W) */ | ||
113 | #define COH901318_TC_INT_CLEAR1 (0x0010) | ||
114 | #define COH901318_TC_INT_CLEAR2 (0x0014) | ||
115 | /* RAW_TC_INT_STATUS - Raw Term Count Interrupt Status Registers 32bit (R/-) */ | ||
116 | #define COH901318_RAW_TC_INT_STATUS1 (0x0018) | ||
117 | #define COH901318_RAW_TC_INT_STATUS2 (0x001C) | ||
118 | /* BE_INT_STATUS - Bus Error Interrupt Status Registers 32bit (R/-) */ | ||
119 | #define COH901318_BE_INT_STATUS1 (0x0020) | ||
120 | #define COH901318_BE_INT_STATUS2 (0x0024) | ||
121 | /* BE_INT_CLEAR - Bus Error Interrupt Clear Registers 32bit (-/W) */ | ||
122 | #define COH901318_BE_INT_CLEAR1 (0x0028) | ||
123 | #define COH901318_BE_INT_CLEAR2 (0x002C) | ||
124 | /* RAW_BE_INT_STATUS - Raw Term Count Interrupt Status Registers 32bit (R/-) */ | ||
125 | #define COH901318_RAW_BE_INT_STATUS1 (0x0030) | ||
126 | #define COH901318_RAW_BE_INT_STATUS2 (0x0034) | ||
127 | |||
128 | /* | ||
129 | * CX_CFG - Channel Configuration Registers 32bit (R/W) | ||
130 | */ | ||
131 | #define COH901318_CX_CFG (0x0100) | ||
132 | #define COH901318_CX_CFG_SPACING (0x04) | ||
133 | /* Channel enable activates tha dma job */ | ||
134 | #define COH901318_CX_CFG_CH_ENABLE (0x00000001) | ||
135 | #define COH901318_CX_CFG_CH_DISABLE (0x00000000) | ||
136 | /* Request Mode */ | ||
137 | #define COH901318_CX_CFG_RM_MASK (0x00000006) | ||
138 | #define COH901318_CX_CFG_RM_MEMORY_TO_MEMORY (0x0 << 1) | ||
139 | #define COH901318_CX_CFG_RM_PRIMARY_TO_MEMORY (0x1 << 1) | ||
140 | #define COH901318_CX_CFG_RM_MEMORY_TO_PRIMARY (0x1 << 1) | ||
141 | #define COH901318_CX_CFG_RM_PRIMARY_TO_SECONDARY (0x3 << 1) | ||
142 | #define COH901318_CX_CFG_RM_SECONDARY_TO_PRIMARY (0x3 << 1) | ||
143 | /* Linked channel request field. RM must == 11 */ | ||
144 | #define COH901318_CX_CFG_LCRF_SHIFT 3 | ||
145 | #define COH901318_CX_CFG_LCRF_MASK (0x000001F8) | ||
146 | #define COH901318_CX_CFG_LCR_DISABLE (0x00000000) | ||
147 | /* Terminal Counter Interrupt Request Mask */ | ||
148 | #define COH901318_CX_CFG_TC_IRQ_ENABLE (0x00000200) | ||
149 | #define COH901318_CX_CFG_TC_IRQ_DISABLE (0x00000000) | ||
150 | /* Bus Error interrupt Mask */ | ||
151 | #define COH901318_CX_CFG_BE_IRQ_ENABLE (0x00000400) | ||
152 | #define COH901318_CX_CFG_BE_IRQ_DISABLE (0x00000000) | ||
153 | 32 | ||
154 | /* | ||
155 | * CX_STAT - Channel Status Registers 32bit (R/-) | ||
156 | */ | ||
157 | #define COH901318_CX_STAT (0x0200) | ||
158 | #define COH901318_CX_STAT_SPACING (0x04) | ||
159 | #define COH901318_CX_STAT_RBE_IRQ_IND (0x00000008) | ||
160 | #define COH901318_CX_STAT_RTC_IRQ_IND (0x00000004) | ||
161 | #define COH901318_CX_STAT_ACTIVE (0x00000002) | ||
162 | #define COH901318_CX_STAT_ENABLED (0x00000001) | ||
163 | |||
164 | /* | ||
165 | * CX_CTRL - Channel Control Registers 32bit (R/W) | ||
166 | */ | ||
167 | #define COH901318_CX_CTRL (0x0400) | ||
168 | #define COH901318_CX_CTRL_SPACING (0x10) | ||
169 | /* Transfer Count Enable */ | ||
170 | #define COH901318_CX_CTRL_TC_ENABLE (0x00001000) | ||
171 | #define COH901318_CX_CTRL_TC_DISABLE (0x00000000) | ||
172 | /* Transfer Count Value 0 - 4095 */ | ||
173 | #define COH901318_CX_CTRL_TC_VALUE_MASK (0x00000FFF) | ||
174 | /* Burst count */ | ||
175 | #define COH901318_CX_CTRL_BURST_COUNT_MASK (0x0000E000) | ||
176 | #define COH901318_CX_CTRL_BURST_COUNT_64_BYTES (0x7 << 13) | ||
177 | #define COH901318_CX_CTRL_BURST_COUNT_48_BYTES (0x6 << 13) | ||
178 | #define COH901318_CX_CTRL_BURST_COUNT_32_BYTES (0x5 << 13) | ||
179 | #define COH901318_CX_CTRL_BURST_COUNT_16_BYTES (0x4 << 13) | ||
180 | #define COH901318_CX_CTRL_BURST_COUNT_8_BYTES (0x3 << 13) | ||
181 | #define COH901318_CX_CTRL_BURST_COUNT_4_BYTES (0x2 << 13) | ||
182 | #define COH901318_CX_CTRL_BURST_COUNT_2_BYTES (0x1 << 13) | ||
183 | #define COH901318_CX_CTRL_BURST_COUNT_1_BYTE (0x0 << 13) | ||
184 | /* Source bus size */ | ||
185 | #define COH901318_CX_CTRL_SRC_BUS_SIZE_MASK (0x00030000) | ||
186 | #define COH901318_CX_CTRL_SRC_BUS_SIZE_32_BITS (0x2 << 16) | ||
187 | #define COH901318_CX_CTRL_SRC_BUS_SIZE_16_BITS (0x1 << 16) | ||
188 | #define COH901318_CX_CTRL_SRC_BUS_SIZE_8_BITS (0x0 << 16) | ||
189 | /* Source address increment */ | ||
190 | #define COH901318_CX_CTRL_SRC_ADDR_INC_ENABLE (0x00040000) | ||
191 | #define COH901318_CX_CTRL_SRC_ADDR_INC_DISABLE (0x00000000) | ||
192 | /* Destination Bus Size */ | ||
193 | #define COH901318_CX_CTRL_DST_BUS_SIZE_MASK (0x00180000) | ||
194 | #define COH901318_CX_CTRL_DST_BUS_SIZE_32_BITS (0x2 << 19) | ||
195 | #define COH901318_CX_CTRL_DST_BUS_SIZE_16_BITS (0x1 << 19) | ||
196 | #define COH901318_CX_CTRL_DST_BUS_SIZE_8_BITS (0x0 << 19) | ||
197 | /* Destination address increment */ | ||
198 | #define COH901318_CX_CTRL_DST_ADDR_INC_ENABLE (0x00200000) | ||
199 | #define COH901318_CX_CTRL_DST_ADDR_INC_DISABLE (0x00000000) | ||
200 | /* Master Mode (Master2 is only connected to MSL) */ | ||
201 | #define COH901318_CX_CTRL_MASTER_MODE_MASK (0x00C00000) | ||
202 | #define COH901318_CX_CTRL_MASTER_MODE_M2R_M1W (0x3 << 22) | ||
203 | #define COH901318_CX_CTRL_MASTER_MODE_M1R_M2W (0x2 << 22) | ||
204 | #define COH901318_CX_CTRL_MASTER_MODE_M2RW (0x1 << 22) | ||
205 | #define COH901318_CX_CTRL_MASTER_MODE_M1RW (0x0 << 22) | ||
206 | /* Terminal Count flag to PER enable */ | ||
207 | #define COH901318_CX_CTRL_TCP_ENABLE (0x01000000) | ||
208 | #define COH901318_CX_CTRL_TCP_DISABLE (0x00000000) | ||
209 | /* Terminal Count flags to CPU enable */ | ||
210 | #define COH901318_CX_CTRL_TC_IRQ_ENABLE (0x02000000) | ||
211 | #define COH901318_CX_CTRL_TC_IRQ_DISABLE (0x00000000) | ||
212 | /* Hand shake to peripheral */ | ||
213 | #define COH901318_CX_CTRL_HSP_ENABLE (0x04000000) | ||
214 | #define COH901318_CX_CTRL_HSP_DISABLE (0x00000000) | ||
215 | #define COH901318_CX_CTRL_HSS_ENABLE (0x08000000) | ||
216 | #define COH901318_CX_CTRL_HSS_DISABLE (0x00000000) | ||
217 | /* DMA mode */ | ||
218 | #define COH901318_CX_CTRL_DDMA_MASK (0x30000000) | ||
219 | #define COH901318_CX_CTRL_DDMA_LEGACY (0x0 << 28) | ||
220 | #define COH901318_CX_CTRL_DDMA_DEMAND_DMA1 (0x1 << 28) | ||
221 | #define COH901318_CX_CTRL_DDMA_DEMAND_DMA2 (0x2 << 28) | ||
222 | /* Primary Request Data Destination */ | ||
223 | #define COH901318_CX_CTRL_PRDD_MASK (0x40000000) | ||
224 | #define COH901318_CX_CTRL_PRDD_DEST (0x1 << 30) | ||
225 | #define COH901318_CX_CTRL_PRDD_SOURCE (0x0 << 30) | ||
226 | |||
227 | /* | ||
228 | * CX_SRC_ADDR - Channel Source Address Registers 32bit (R/W) | ||
229 | */ | ||
230 | #define COH901318_CX_SRC_ADDR (0x0404) | ||
231 | #define COH901318_CX_SRC_ADDR_SPACING (0x10) | ||
232 | |||
233 | /* | ||
234 | * CX_DST_ADDR - Channel Destination Address Registers 32bit R/W | ||
235 | */ | ||
236 | #define COH901318_CX_DST_ADDR (0x0408) | ||
237 | #define COH901318_CX_DST_ADDR_SPACING (0x10) | ||
238 | |||
239 | /* | ||
240 | * CX_LNK_ADDR - Channel Link Address Registers 32bit (R/W) | ||
241 | */ | ||
242 | #define COH901318_CX_LNK_ADDR (0x040C) | ||
243 | #define COH901318_CX_LNK_ADDR_SPACING (0x10) | ||
244 | #define COH901318_CX_LNK_LINK_IMMEDIATE (0x00000001) | ||
245 | #endif /* COH901318_H */ | 33 | #endif /* COH901318_H */ |
diff --git a/drivers/dma/coh901318_lli.c b/drivers/dma/coh901318_lli.c index e25cac0af3f6..b2e284f78c73 100644 --- a/drivers/dma/coh901318_lli.c +++ b/drivers/dma/coh901318_lli.c | |||
@@ -11,6 +11,7 @@ | |||
11 | #include <linux/memory.h> | 11 | #include <linux/memory.h> |
12 | #include <linux/gfp.h> | 12 | #include <linux/gfp.h> |
13 | #include <linux/dmapool.h> | 13 | #include <linux/dmapool.h> |
14 | #include <linux/dmaengine.h> | ||
14 | 15 | ||
15 | #include "coh901318.h" | 16 | #include "coh901318.h" |
16 | #include "coh901318_lli.h" | 17 | #include "coh901318_lli.h" |