aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/dma/coh901318.h
diff options
context:
space:
mode:
authorLinus Walleij <linus.walleij@linaro.org>2013-01-04 07:56:16 -0500
committerLinus Walleij <linus.walleij@linaro.org>2013-01-07 11:36:28 -0500
commit2b9277ad77e2b14a6bb113cc6c0da5101abc5261 (patch)
tree92aa8ba39d7723a71457d3009f1ec7290eb48af5 /drivers/dma/coh901318.h
parent9aab4d6f087a042d702b6e16346378731eeaf48e (diff)
dma: coh901318: push header down into the DMA subsystem
The defines in U300's <mach/coh901318.h> are now only used by the DMA engine driver itself, so move the header down into the DMA subsystem. Acked-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/dma/coh901318.h')
-rw-r--r--drivers/dma/coh901318.h245
1 files changed, 245 insertions, 0 deletions
diff --git a/drivers/dma/coh901318.h b/drivers/dma/coh901318.h
new file mode 100644
index 000000000000..9353c40b152a
--- /dev/null
+++ b/drivers/dma/coh901318.h
@@ -0,0 +1,245 @@
1/*
2 * Copyright (C) 2007-2013 ST-Ericsson
3 * License terms: GNU General Public License (GPL) version 2
4 * DMA driver for COH 901 318
5 * Author: Per Friden <per.friden@stericsson.com>
6 */
7
8#ifndef COH901318_H
9#define COH901318_H
10
11#include <linux/device.h>
12#include <linux/dmaengine.h>
13
14#define MAX_DMA_PACKET_SIZE_SHIFT 11
15#define MAX_DMA_PACKET_SIZE (1 << MAX_DMA_PACKET_SIZE_SHIFT)
16
17/**
18 * struct coh901318_lli - linked list item for DMAC
19 * @control: control settings for DMAC
20 * @src_addr: transfer source address
21 * @dst_addr: transfer destination address
22 * @link_addr: physical address to next lli
23 * @virt_link_addr: virtual address of next lli (only used by pool_free)
24 * @phy_this: physical address of current lli (only used by pool_free)
25 */
26struct coh901318_lli {
27 u32 control;
28 dma_addr_t src_addr;
29 dma_addr_t dst_addr;
30 dma_addr_t link_addr;
31
32 void *virt_link_addr;
33 dma_addr_t phy_this;
34};
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 */
42struct 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 */
56struct 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 */
71typedef 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 */
79struct 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 */
91struct 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
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 */