Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
dma.h
Go to the documentation of this file.
1 /*
2  * 440SPe's DMA engines support header file
3  *
4  * 2006-2009 (C) DENX Software Engineering.
5  *
6  * Author: Yuri Tikhonov <[email protected]>
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 {
131  u8 pad0[0x8];
136  u8 pad1[0x8];
145  u8 pad2[0x10];
148  u8 pad3[0x8];
153 };
154 
155 /*
156  * I2O hardware registers (p.528 in 440SPe UM 1.22)
157  */
158 struct i2o_regs {
162  u8 pad0[0x14];
164  u8 pad1[0xc];
167  u8 pad2[0x8];
170  u8 pad3[0x8];
175  u8 pad4[3];
187  u8 pad5[0x4];
198  u8 pad6[0x4];
219  u8 pad7[0x8];
221 };
222 
223 #endif /* _PPC440SPE_DMA_H */