123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- /*
- * 440SPe's DMA engines support header file
- *
- * 2006-2009 (C) DENX Software Engineering.
- *
- * Author: Yuri Tikhonov <yur@emcraft.com>
- *
- * This file is licensed under the term of the GNU General Public License
- * version 2. The program licensed "as is" without any warranty of any
- * kind, whether express or implied.
- */
- #ifndef _PPC440SPE_DMA_H
- #define _PPC440SPE_DMA_H
- #include <linux/types.h>
- /* Number of elements in the array with statical CDBs */
- #define MAX_STAT_DMA_CDBS 16
- /* Number of DMA engines available on the contoller */
- #define DMA_ENGINES_NUM 2
- /* Maximum h/w supported number of destinations */
- #define DMA_DEST_MAX_NUM 2
- /* FIFO's params */
- #define DMA0_FIFO_SIZE 0x1000
- #define DMA1_FIFO_SIZE 0x1000
- #define DMA_FIFO_ENABLE (1<<12)
- /* DMA Configuration Register. Data Transfer Engine PLB Priority: */
- #define DMA_CFG_DXEPR_LP (0<<26)
- #define DMA_CFG_DXEPR_HP (3<<26)
- #define DMA_CFG_DXEPR_HHP (2<<26)
- #define DMA_CFG_DXEPR_HHHP (1<<26)
- /* DMA Configuration Register. DMA FIFO Manager PLB Priority: */
- #define DMA_CFG_DFMPP_LP (0<<23)
- #define DMA_CFG_DFMPP_HP (3<<23)
- #define DMA_CFG_DFMPP_HHP (2<<23)
- #define DMA_CFG_DFMPP_HHHP (1<<23)
- /* DMA Configuration Register. Force 64-byte Alignment */
- #define DMA_CFG_FALGN (1 << 19)
- /*UIC0:*/
- #define D0CPF_INT (1<<12)
- #define D0CSF_INT (1<<11)
- #define D1CPF_INT (1<<10)
- #define D1CSF_INT (1<<9)
- /*UIC1:*/
- #define DMAE_INT (1<<9)
- /* I2O IOP Interrupt Mask Register */
- #define I2O_IOPIM_P0SNE (1<<3)
- #define I2O_IOPIM_P0EM (1<<5)
- #define I2O_IOPIM_P1SNE (1<<6)
- #define I2O_IOPIM_P1EM (1<<8)
- /* DMA CDB fields */
- #define DMA_CDB_MSK (0xF)
- #define DMA_CDB_64B_ADDR (1<<2)
- #define DMA_CDB_NO_INT (1<<3)
- #define DMA_CDB_STATUS_MSK (0x3)
- #define DMA_CDB_ADDR_MSK (0xFFFFFFF0)
- /* DMA CDB OpCodes */
- #define DMA_CDB_OPC_NO_OP (0x00)
- #define DMA_CDB_OPC_MV_SG1_SG2 (0x01)
- #define DMA_CDB_OPC_MULTICAST (0x05)
- #define DMA_CDB_OPC_DFILL128 (0x24)
- #define DMA_CDB_OPC_DCHECK128 (0x23)
- #define DMA_CUED_XOR_BASE (0x10000000)
- #define DMA_CUED_XOR_HB (0x00000008)
- #ifdef CONFIG_440SP
- #define DMA_CUED_MULT1_OFF 0
- #define DMA_CUED_MULT2_OFF 8
- #define DMA_CUED_MULT3_OFF 16
- #define DMA_CUED_REGION_OFF 24
- #define DMA_CUED_XOR_WIN_MSK (0xFC000000)
- #else
- #define DMA_CUED_MULT1_OFF 2
- #define DMA_CUED_MULT2_OFF 10
- #define DMA_CUED_MULT3_OFF 18
- #define DMA_CUED_REGION_OFF 26
- #define DMA_CUED_XOR_WIN_MSK (0xF0000000)
- #endif
- #define DMA_CUED_REGION_MSK 0x3
- #define DMA_RXOR123 0x0
- #define DMA_RXOR124 0x1
- #define DMA_RXOR125 0x2
- #define DMA_RXOR12 0x3
- /* S/G addresses */
- #define DMA_CDB_SG_SRC 1
- #define DMA_CDB_SG_DST1 2
- #define DMA_CDB_SG_DST2 3
- /*
- * DMAx engines Command Descriptor Block Type
- */
- struct dma_cdb {
- /*
- * Basic CDB structure (Table 20-17, p.499, 440spe_um_1_22.pdf)
- */
- u8 pad0[2]; /* reserved */
- u8 attr; /* attributes */
- u8 opc; /* opcode */
- u32 sg1u; /* upper SG1 address */
- u32 sg1l; /* lower SG1 address */
- u32 cnt; /* SG count, 3B used */
- u32 sg2u; /* upper SG2 address */
- u32 sg2l; /* lower SG2 address */
- u32 sg3u; /* upper SG3 address */
- u32 sg3l; /* lower SG3 address */
- };
- /*
- * DMAx hardware registers (p.515 in 440SPe UM 1.22)
- */
- struct dma_regs {
- u32 cpfpl;
- u32 cpfph;
- u32 csfpl;
- u32 csfph;
- u32 dsts;
- u32 cfg;
- u8 pad0[0x8];
- u16 cpfhp;
- u16 cpftp;
- u16 csfhp;
- u16 csftp;
- u8 pad1[0x8];
- u32 acpl;
- u32 acph;
- u32 s1bpl;
- u32 s1bph;
- u32 s2bpl;
- u32 s2bph;
- u32 s3bpl;
- u32 s3bph;
- u8 pad2[0x10];
- u32 earl;
- u32 earh;
- u8 pad3[0x8];
- u32 seat;
- u32 sead;
- u32 op;
- u32 fsiz;
- };
- /*
- * I2O hardware registers (p.528 in 440SPe UM 1.22)
- */
- struct i2o_regs {
- u32 ists;
- u32 iseat;
- u32 isead;
- u8 pad0[0x14];
- u32 idbel;
- u8 pad1[0xc];
- u32 ihis;
- u32 ihim;
- u8 pad2[0x8];
- u32 ihiq;
- u32 ihoq;
- u8 pad3[0x8];
- u32 iopis;
- u32 iopim;
- u32 iopiq;
- u8 iopoq;
- u8 pad4[3];
- u16 iiflh;
- u16 iiflt;
- u16 iiplh;
- u16 iiplt;
- u16 ioflh;
- u16 ioflt;
- u16 ioplh;
- u16 ioplt;
- u32 iidc;
- u32 ictl;
- u32 ifcpp;
- u8 pad5[0x4];
- u16 mfac0;
- u16 mfac1;
- u16 mfac2;
- u16 mfac3;
- u16 mfac4;
- u16 mfac5;
- u16 mfac6;
- u16 mfac7;
- u16 ifcfh;
- u16 ifcht;
- u8 pad6[0x4];
- u32 iifmc;
- u32 iodb;
- u32 iodbc;
- u32 ifbal;
- u32 ifbah;
- u32 ifsiz;
- u32 ispd0;
- u32 ispd1;
- u32 ispd2;
- u32 ispd3;
- u32 ihipl;
- u32 ihiph;
- u32 ihopl;
- u32 ihoph;
- u32 iiipl;
- u32 iiiph;
- u32 iiopl;
- u32 iioph;
- u32 ifcpl;
- u32 ifcph;
- u8 pad7[0x8];
- u32 iopt;
- };
- #endif /* _PPC440SPE_DMA_H */
|