| /* SPDX-License-Identifier: GPL-2.0-only */ | |
| /* | |
| * 440SPe's DMA engines support header file | |
| * | |
| * 2006-2009 (C) DENX Software Engineering. | |
| * | |
| * Author: Yuri Tikhonov <yur@emcraft.com> | |
| */ | |
| #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 controller */ | |
| #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 */ |