xref: /OK3568_Linux_fs/kernel/drivers/dma/ppc4xx/dma.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * 440SPe's DMA engines support header file
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * 2006-2009 (C) DENX Software Engineering.
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  * Author: Yuri Tikhonov <yur@emcraft.com>
7*4882a593Smuzhiyun  *
8*4882a593Smuzhiyun  * This file is licensed under the term of  the GNU General Public License
9*4882a593Smuzhiyun  * version 2. The program licensed "as is" without any warranty of any
10*4882a593Smuzhiyun  * kind, whether express or implied.
11*4882a593Smuzhiyun  */
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #ifndef	_PPC440SPE_DMA_H
14*4882a593Smuzhiyun #define _PPC440SPE_DMA_H
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun #include <linux/types.h>
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun /* Number of elements in the array with statical CDBs */
19*4882a593Smuzhiyun #define	MAX_STAT_DMA_CDBS	16
20*4882a593Smuzhiyun /* Number of DMA engines available on the contoller */
21*4882a593Smuzhiyun #define DMA_ENGINES_NUM		2
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun /* Maximum h/w supported number of destinations */
24*4882a593Smuzhiyun #define DMA_DEST_MAX_NUM	2
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun /* FIFO's params */
27*4882a593Smuzhiyun #define DMA0_FIFO_SIZE		0x1000
28*4882a593Smuzhiyun #define DMA1_FIFO_SIZE		0x1000
29*4882a593Smuzhiyun #define DMA_FIFO_ENABLE		(1<<12)
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun /* DMA Configuration Register. Data Transfer Engine PLB Priority: */
32*4882a593Smuzhiyun #define DMA_CFG_DXEPR_LP	(0<<26)
33*4882a593Smuzhiyun #define DMA_CFG_DXEPR_HP	(3<<26)
34*4882a593Smuzhiyun #define DMA_CFG_DXEPR_HHP	(2<<26)
35*4882a593Smuzhiyun #define DMA_CFG_DXEPR_HHHP	(1<<26)
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun /* DMA Configuration Register. DMA FIFO Manager PLB Priority: */
38*4882a593Smuzhiyun #define DMA_CFG_DFMPP_LP	(0<<23)
39*4882a593Smuzhiyun #define DMA_CFG_DFMPP_HP	(3<<23)
40*4882a593Smuzhiyun #define DMA_CFG_DFMPP_HHP	(2<<23)
41*4882a593Smuzhiyun #define DMA_CFG_DFMPP_HHHP	(1<<23)
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun /* DMA Configuration Register. Force 64-byte Alignment */
44*4882a593Smuzhiyun #define DMA_CFG_FALGN		(1 << 19)
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun /*UIC0:*/
47*4882a593Smuzhiyun #define D0CPF_INT		(1<<12)
48*4882a593Smuzhiyun #define D0CSF_INT		(1<<11)
49*4882a593Smuzhiyun #define D1CPF_INT		(1<<10)
50*4882a593Smuzhiyun #define D1CSF_INT		(1<<9)
51*4882a593Smuzhiyun /*UIC1:*/
52*4882a593Smuzhiyun #define DMAE_INT		(1<<9)
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun /* I2O IOP Interrupt Mask Register */
55*4882a593Smuzhiyun #define I2O_IOPIM_P0SNE		(1<<3)
56*4882a593Smuzhiyun #define I2O_IOPIM_P0EM		(1<<5)
57*4882a593Smuzhiyun #define I2O_IOPIM_P1SNE		(1<<6)
58*4882a593Smuzhiyun #define I2O_IOPIM_P1EM		(1<<8)
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun /* DMA CDB fields */
61*4882a593Smuzhiyun #define DMA_CDB_MSK		(0xF)
62*4882a593Smuzhiyun #define DMA_CDB_64B_ADDR	(1<<2)
63*4882a593Smuzhiyun #define DMA_CDB_NO_INT		(1<<3)
64*4882a593Smuzhiyun #define DMA_CDB_STATUS_MSK	(0x3)
65*4882a593Smuzhiyun #define DMA_CDB_ADDR_MSK	(0xFFFFFFF0)
66*4882a593Smuzhiyun 
67*4882a593Smuzhiyun /* DMA CDB OpCodes */
68*4882a593Smuzhiyun #define DMA_CDB_OPC_NO_OP	(0x00)
69*4882a593Smuzhiyun #define DMA_CDB_OPC_MV_SG1_SG2	(0x01)
70*4882a593Smuzhiyun #define DMA_CDB_OPC_MULTICAST	(0x05)
71*4882a593Smuzhiyun #define DMA_CDB_OPC_DFILL128	(0x24)
72*4882a593Smuzhiyun #define DMA_CDB_OPC_DCHECK128	(0x23)
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun #define DMA_CUED_XOR_BASE	(0x10000000)
75*4882a593Smuzhiyun #define DMA_CUED_XOR_HB		(0x00000008)
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun #ifdef CONFIG_440SP
78*4882a593Smuzhiyun #define DMA_CUED_MULT1_OFF	0
79*4882a593Smuzhiyun #define DMA_CUED_MULT2_OFF	8
80*4882a593Smuzhiyun #define DMA_CUED_MULT3_OFF	16
81*4882a593Smuzhiyun #define DMA_CUED_REGION_OFF	24
82*4882a593Smuzhiyun #define DMA_CUED_XOR_WIN_MSK	(0xFC000000)
83*4882a593Smuzhiyun #else
84*4882a593Smuzhiyun #define DMA_CUED_MULT1_OFF	2
85*4882a593Smuzhiyun #define DMA_CUED_MULT2_OFF	10
86*4882a593Smuzhiyun #define DMA_CUED_MULT3_OFF	18
87*4882a593Smuzhiyun #define DMA_CUED_REGION_OFF	26
88*4882a593Smuzhiyun #define DMA_CUED_XOR_WIN_MSK	(0xF0000000)
89*4882a593Smuzhiyun #endif
90*4882a593Smuzhiyun 
91*4882a593Smuzhiyun #define DMA_CUED_REGION_MSK	0x3
92*4882a593Smuzhiyun #define DMA_RXOR123		0x0
93*4882a593Smuzhiyun #define DMA_RXOR124		0x1
94*4882a593Smuzhiyun #define DMA_RXOR125		0x2
95*4882a593Smuzhiyun #define DMA_RXOR12		0x3
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun /* S/G addresses */
98*4882a593Smuzhiyun #define DMA_CDB_SG_SRC		1
99*4882a593Smuzhiyun #define DMA_CDB_SG_DST1		2
100*4882a593Smuzhiyun #define DMA_CDB_SG_DST2		3
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun /*
103*4882a593Smuzhiyun  * DMAx engines Command Descriptor Block Type
104*4882a593Smuzhiyun  */
105*4882a593Smuzhiyun struct dma_cdb {
106*4882a593Smuzhiyun 	/*
107*4882a593Smuzhiyun 	 * Basic CDB structure (Table 20-17, p.499, 440spe_um_1_22.pdf)
108*4882a593Smuzhiyun 	 */
109*4882a593Smuzhiyun 	u8	pad0[2];        /* reserved */
110*4882a593Smuzhiyun 	u8	attr;		/* attributes */
111*4882a593Smuzhiyun 	u8	opc;		/* opcode */
112*4882a593Smuzhiyun 	u32	sg1u;		/* upper SG1 address */
113*4882a593Smuzhiyun 	u32	sg1l;		/* lower SG1 address */
114*4882a593Smuzhiyun 	u32	cnt;		/* SG count, 3B used */
115*4882a593Smuzhiyun 	u32	sg2u;		/* upper SG2 address */
116*4882a593Smuzhiyun 	u32	sg2l;		/* lower SG2 address */
117*4882a593Smuzhiyun 	u32	sg3u;		/* upper SG3 address */
118*4882a593Smuzhiyun 	u32	sg3l;		/* lower SG3 address */
119*4882a593Smuzhiyun };
120*4882a593Smuzhiyun 
121*4882a593Smuzhiyun /*
122*4882a593Smuzhiyun  * DMAx hardware registers (p.515 in 440SPe UM 1.22)
123*4882a593Smuzhiyun  */
124*4882a593Smuzhiyun struct dma_regs {
125*4882a593Smuzhiyun 	u32	cpfpl;
126*4882a593Smuzhiyun 	u32	cpfph;
127*4882a593Smuzhiyun 	u32	csfpl;
128*4882a593Smuzhiyun 	u32	csfph;
129*4882a593Smuzhiyun 	u32	dsts;
130*4882a593Smuzhiyun 	u32	cfg;
131*4882a593Smuzhiyun 	u8	pad0[0x8];
132*4882a593Smuzhiyun 	u16	cpfhp;
133*4882a593Smuzhiyun 	u16	cpftp;
134*4882a593Smuzhiyun 	u16	csfhp;
135*4882a593Smuzhiyun 	u16	csftp;
136*4882a593Smuzhiyun 	u8	pad1[0x8];
137*4882a593Smuzhiyun 	u32	acpl;
138*4882a593Smuzhiyun 	u32	acph;
139*4882a593Smuzhiyun 	u32	s1bpl;
140*4882a593Smuzhiyun 	u32	s1bph;
141*4882a593Smuzhiyun 	u32	s2bpl;
142*4882a593Smuzhiyun 	u32	s2bph;
143*4882a593Smuzhiyun 	u32	s3bpl;
144*4882a593Smuzhiyun 	u32	s3bph;
145*4882a593Smuzhiyun 	u8	pad2[0x10];
146*4882a593Smuzhiyun 	u32	earl;
147*4882a593Smuzhiyun 	u32	earh;
148*4882a593Smuzhiyun 	u8	pad3[0x8];
149*4882a593Smuzhiyun 	u32	seat;
150*4882a593Smuzhiyun 	u32	sead;
151*4882a593Smuzhiyun 	u32	op;
152*4882a593Smuzhiyun 	u32	fsiz;
153*4882a593Smuzhiyun };
154*4882a593Smuzhiyun 
155*4882a593Smuzhiyun /*
156*4882a593Smuzhiyun  * I2O hardware registers (p.528 in 440SPe UM 1.22)
157*4882a593Smuzhiyun  */
158*4882a593Smuzhiyun struct i2o_regs {
159*4882a593Smuzhiyun 	u32	ists;
160*4882a593Smuzhiyun 	u32	iseat;
161*4882a593Smuzhiyun 	u32	isead;
162*4882a593Smuzhiyun 	u8	pad0[0x14];
163*4882a593Smuzhiyun 	u32	idbel;
164*4882a593Smuzhiyun 	u8	pad1[0xc];
165*4882a593Smuzhiyun 	u32	ihis;
166*4882a593Smuzhiyun 	u32	ihim;
167*4882a593Smuzhiyun 	u8	pad2[0x8];
168*4882a593Smuzhiyun 	u32	ihiq;
169*4882a593Smuzhiyun 	u32	ihoq;
170*4882a593Smuzhiyun 	u8	pad3[0x8];
171*4882a593Smuzhiyun 	u32	iopis;
172*4882a593Smuzhiyun 	u32	iopim;
173*4882a593Smuzhiyun 	u32	iopiq;
174*4882a593Smuzhiyun 	u8	iopoq;
175*4882a593Smuzhiyun 	u8	pad4[3];
176*4882a593Smuzhiyun 	u16	iiflh;
177*4882a593Smuzhiyun 	u16	iiflt;
178*4882a593Smuzhiyun 	u16	iiplh;
179*4882a593Smuzhiyun 	u16	iiplt;
180*4882a593Smuzhiyun 	u16	ioflh;
181*4882a593Smuzhiyun 	u16	ioflt;
182*4882a593Smuzhiyun 	u16	ioplh;
183*4882a593Smuzhiyun 	u16	ioplt;
184*4882a593Smuzhiyun 	u32	iidc;
185*4882a593Smuzhiyun 	u32	ictl;
186*4882a593Smuzhiyun 	u32	ifcpp;
187*4882a593Smuzhiyun 	u8	pad5[0x4];
188*4882a593Smuzhiyun 	u16	mfac0;
189*4882a593Smuzhiyun 	u16	mfac1;
190*4882a593Smuzhiyun 	u16	mfac2;
191*4882a593Smuzhiyun 	u16	mfac3;
192*4882a593Smuzhiyun 	u16	mfac4;
193*4882a593Smuzhiyun 	u16	mfac5;
194*4882a593Smuzhiyun 	u16	mfac6;
195*4882a593Smuzhiyun 	u16	mfac7;
196*4882a593Smuzhiyun 	u16	ifcfh;
197*4882a593Smuzhiyun 	u16	ifcht;
198*4882a593Smuzhiyun 	u8	pad6[0x4];
199*4882a593Smuzhiyun 	u32	iifmc;
200*4882a593Smuzhiyun 	u32	iodb;
201*4882a593Smuzhiyun 	u32	iodbc;
202*4882a593Smuzhiyun 	u32	ifbal;
203*4882a593Smuzhiyun 	u32	ifbah;
204*4882a593Smuzhiyun 	u32	ifsiz;
205*4882a593Smuzhiyun 	u32	ispd0;
206*4882a593Smuzhiyun 	u32	ispd1;
207*4882a593Smuzhiyun 	u32	ispd2;
208*4882a593Smuzhiyun 	u32	ispd3;
209*4882a593Smuzhiyun 	u32	ihipl;
210*4882a593Smuzhiyun 	u32	ihiph;
211*4882a593Smuzhiyun 	u32	ihopl;
212*4882a593Smuzhiyun 	u32	ihoph;
213*4882a593Smuzhiyun 	u32	iiipl;
214*4882a593Smuzhiyun 	u32	iiiph;
215*4882a593Smuzhiyun 	u32	iiopl;
216*4882a593Smuzhiyun 	u32	iioph;
217*4882a593Smuzhiyun 	u32	ifcpl;
218*4882a593Smuzhiyun 	u32	ifcph;
219*4882a593Smuzhiyun 	u8	pad7[0x8];
220*4882a593Smuzhiyun 	u32	iopt;
221*4882a593Smuzhiyun };
222*4882a593Smuzhiyun 
223*4882a593Smuzhiyun #endif /* _PPC440SPE_DMA_H */
224