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