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