linux/drivers/dma/ppc4xx/dma.h
<<
>>
Prefs
   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 */
 105struct 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 */
 124struct 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 */
 158struct 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 */
 224