blob: 05c034c76c0f1df4ab7fcfebd669b74b4d5f10c5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
|
/*
* Copyright (C) 2012 Spreadtrum Communications Inc.
*
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
* may be copied, distributed, and modified under those terms.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef __ASM_ARCH_SPRD_DMA_REG_H
#define __ASM_ARCH_SPRD_DMA_REG_H
#include <linux/interrupt.h>
#include <asm/io.h>
#include <soc/sprd/dma.h>
/**----------------------------------------------------------------------------*
** Micro Define **
**----------------------------------------------------------------------------*/
/*dma r1p0 register offset define start*/
#ifdef DMA_VER_R1P0
#define DMA_REG_BASE SPRD_DMA0_BASE
/* 0X00 */
#define DMA_BLK_WAIT (DMA_REG_BASE + 0x0000)
#define DMA_CHN_EN_STATUS (DMA_REG_BASE + 0x0004)
#define DMA_LINKLIST_EN (DMA_REG_BASE + 0x0008)
#define DMA_SOFTLINK_EN (DMA_REG_BASE + 0x000C)
/* 0X10 */
#define DMA_SOFTLIST_SIZE (DMA_REG_BASE + 0x0010)
#define DMA_SOFTLIST_CMD (DMA_REG_BASE + 0x0014)
#define DMA_SOFTLIST_STS (DMA_REG_BASE + 0x0018)
#define DMA_SOFTLIST_BASEADDR (DMA_REG_BASE + 0x001C)
/* 0X20 */
#define DMA_PRI_REG0 (DMA_REG_BASE + 0x0020)
#define DMA_PRI_REG1 (DMA_REG_BASE + 0x0024)
/* 0X30 */
#define DMA_INT_STS (DMA_REG_BASE + 0x0030)
#define DMA_INT_RAW (DMA_REG_BASE + 0x0034)
/* 0X40 */
#define DMA_LISTDONE_INT_EN (DMA_REG_BASE + 0x0040)
#define DMA_BLOCK_INT_EN (DMA_REG_BASE + 0x0044)
#define DMA_TRANSF_INT_EN (DMA_REG_BASE + 0x0048)
/* 0X50 */
#define DMA_LISTDONE_INT_STS (DMA_REG_BASE + 0x0050)
#define DMA_BURST_INT_STS (DMA_REG_BASE + 0x0054)
#define DMA_TRANSF_INT_STS (DMA_REG_BASE + 0x0058)
/* 0X60 */
#define DMA_LISTDONE_INT_RAW (DMA_REG_BASE + 0x0060)
#define DMA_BURST_INT_RAW (DMA_REG_BASE + 0x0064)
#define DMA_TRANSF_INT_RAW (DMA_REG_BASE + 0x0068)
/* 0X70 */
#define DMA_LISTDONE_INT_CLR (DMA_REG_BASE + 0x0070)
#define DMA_BURST_INT_CLR (DMA_REG_BASE + 0x0074)
#define DMA_TRANSF_INT_CLR (DMA_REG_BASE + 0x0078)
/* 0X80 */
#define DMA_SOFT_REQ (DMA_REG_BASE + 0x0080)
#define DMA_TRANS_STS (DMA_REG_BASE + 0x0084)
#define DMA_REQ_PEND (DMA_REG_BASE + 0x0088)
/* 0X90 */
#define DMA_WRAP_START (DMA_REG_BASE + 0x0090)
#define DMA_WRAP_END (DMA_REG_BASE + 0x0094)
#define DMA_CHN_UID_BASE (DMA_REG_BASE + 0x0098)
#define DMA_CHN_UID0 (DMA_REG_BASE + 0x0098)
#define DMA_CHN_UID1 (DMA_REG_BASE + 0x009C)
#define DMA_CHN_UID2 (DMA_REG_BASE + 0x00A0)
#define DMA_CHN_UID3 (DMA_REG_BASE + 0x00A4)
#define DMA_CHN_UID4 (DMA_REG_BASE + 0x00A8)
#define DMA_CHN_UID5 (DMA_REG_BASE + 0x00AC)
#define DMA_CHN_UID6 (DMA_REG_BASE + 0x00B0)
#define DMA_CHN_UID7 (DMA_REG_BASE + 0x00B4)
#define DMA_CHx_EN (DMA_REG_BASE + 0x00C0)
#define DMA_CHx_DIS (DMA_REG_BASE + 0x00C4)
/* Chanel x dma contral regisers address offset*/
#define DMA_CH_CFG (0x0000)
#define DMA_CH_TOTAL_LEN (0x0004)
#define DMA_CH_SRC_ADDR (0x0008)
#define DMA_CH_DEST_ADDR (0x000c)
#define DMA_CH_LLPTR (0x0010)
#define DMA_CH_SDEP (0x0014)
#define DMA_CH_SBP (0x0018)
#define DMA_CH_DBP (0x001c)
/* Channel x dma contral regisers address */
#define DMA_CHx_CTL_BASE (DMA_REG_BASE + 0x0400)
#define DMA_CHx_OFFSET (0x20)
#define DMA_CHx_BASE(x) (DMA_CHx_CTL_BASE + DMA_CHx_OFFSET * x )
#define DMA_CHx_CFG(x) (DMA_CHx_BASE(x) + DMA_CH_CFG)
#define DMA_CHx_TOTAL_LEN(x) (DMA_CHx_BASE(x) + DMA_CH_TOTAL_LEN)
#define DMA_CHx_SRC_ADDR(x) (DMA_CHx_BASE(x) + DMA_CH_SRC_ADDR)
#define DMA_CHx_DEST_ADDR(x) (DMA_CHx_BASE(x) + DMA_CH_DEST_ADDR)
#define DMA_CHx_LLPTR(x) (DMA_CHx_BASE(x) + DMA_CH_LLPTR)
#define DMA_CHx_SDEP(x) (DMA_CHx_BASE(x) + DMA_CH_SDEP)
#define DMA_CHx_SBP(x) (DMA_CHx_BASE(x) + DMA_CH_SBP)
#define DMA_CHx_DBP(x) (DMA_CHx_BASE(x) + DMA_CH_DBP)
/*there is no different between full and std chn is DMA r1p0*/
struct sci_dma_reg {
u32 cfg;
u32 total_len;
u32 src_addr;
u32 des_addr;
u32 llist_ptr;
u32 elem_postm;
u32 src_blk_postm;
u32 des_blk_postm;
};
#endif
/*dma r1p0 register offset define end*/
/*dma r3p0 and r4p0 register offset define start*/
#ifdef DMA_VER_R4P0
#define DMA_CHx_OFFSET (0x40)
#define DMA_CHx_BASE(reg_base, chn) \
(reg_base + 0x1000 + DMA_CHx_OFFSET * (chn))
#define DMA_REQ_CID(reg_base, uid) (reg_base + 0x2000 + 0x4 * ((uid) -1))
/*FRAG_LEN*/
#define CHN_PRIORITY_OFFSET 12
#define CHN_PRIORITY_MASK 0x3
#define LLIST_EN_OFFSET 4;
#define SRC_DATAWIDTH_OFFSET 30
#define DES_DATAWIDTH_OFFSET 28
#define SWT_MODE_OFFSET 26
#define REQ_MODE_OFFSET 24
#define ADDR_WRAP_SEL_OFFSET 23
#define ADDR_WRAP_EN_OFFSET 22
#define ADDR_FIX_SEL_OFFSET 21
#define ADDR_FIX_SEL_EN 20
#define LLIST_END_OFFSET 19
#define BLK_LEN_REC_H_OFFSET 17
#define FRG_LEN_OFFSET 0
#define DEST_TRSF_STEP_OFFSET 16
#define SRC_TRSF_STEP_OFFSET 0
#define DEST_FRAG_STEP_OFFSET 16
#define SRC_FRAG_STEP_OFFSET 0
#define TRSF_STEP_MASK 0xffff
#define FRAG_STEP_MASK 0xffff
#define DATAWIDTH_MASK 0x3
#define SWT_MODE_MASK 0x3
#define REQ_MODE_MASK 0x3
#define ADDR_WRAP_SEL_MASK 0x1
#define ADDR_WRAP_EN_MASK 0x1
#define ADDR_FIX_SEL_MASK 0x1
#define ADDR_FIX_SEL_MASK 0x1
#define LLIST_END_MASK 0x1
#define BLK_LEN_REC_H_MASKT 0x3
#define FRG_LEN_MASK 0x1ffff
#define BLK_LEN_MASK 0x1ffff
#define TRSC_LEN_MASK 0xfffffff
struct sci_dma_glb_reg {
u32 pause;
u32 frag_wait;
u32 pend0_en;
u32 pend1_en;
u32 int_raw_sts;
u32 int_msk_sts;
u32 req_sts;
u32 en_sts;
u32 debug_sts;
u32 arb_sel_sts;
};
struct sci_dma_chn_reg {
u32 pause;
u32 req;
u32 cfg;
u32 intc;
u32 src_addr;
u32 des_addr;
u32 frg_len;
u32 blk_len;
/* only full chn have following regs */
u32 trsc_len;
u32 trsf_step;
u32 wrap_ptr;
u32 wrap_to;
u32 llist_ptr;
u32 frg_step;
u32 src_blk_step;
u32 des_blk_step;
};
#endif
#endif
|