Anatolij Gustschin | 12458ea | 2009-12-11 21:24:44 -0700 | [diff] [blame] | 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 */ |