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