0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035 #ifndef _AU1000_DBDMA_H_
0036 #define _AU1000_DBDMA_H_
0037
0038 #ifndef _LANGUAGE_ASSEMBLY
0039
0040 typedef volatile struct dbdma_global {
0041 u32 ddma_config;
0042 u32 ddma_intstat;
0043 u32 ddma_throttle;
0044 u32 ddma_inten;
0045 } dbdma_global_t;
0046
0047
0048 #define DDMA_CONFIG_AF (1 << 2)
0049 #define DDMA_CONFIG_AH (1 << 1)
0050 #define DDMA_CONFIG_AL (1 << 0)
0051
0052 #define DDMA_THROTTLE_EN (1 << 31)
0053
0054
0055 typedef volatile struct au1xxx_dma_channel {
0056 u32 ddma_cfg;
0057 u32 ddma_desptr;
0058 u32 ddma_statptr;
0059 u32 ddma_dbell;
0060 u32 ddma_irq;
0061 u32 ddma_stat;
0062 u32 ddma_bytecnt;
0063
0064 } au1x_dma_chan_t;
0065
0066 #define DDMA_CFG_SED (1 << 9)
0067 #define DDMA_CFG_SP (1 << 8)
0068 #define DDMA_CFG_DED (1 << 7)
0069 #define DDMA_CFG_DP (1 << 6)
0070 #define DDMA_CFG_SYNC (1 << 5)
0071 #define DDMA_CFG_PPR (1 << 4)
0072 #define DDMA_CFG_DFN (1 << 3)
0073 #define DDMA_CFG_SBE (1 << 2)
0074 #define DDMA_CFG_DBE (1 << 1)
0075 #define DDMA_CFG_EN (1 << 0)
0076
0077
0078
0079
0080
0081
0082 #define DDMA_IRQ_IN (1 << 0)
0083
0084 #define DDMA_STAT_DB (1 << 2)
0085 #define DDMA_STAT_V (1 << 1)
0086 #define DDMA_STAT_H (1 << 0)
0087
0088
0089
0090
0091
0092 typedef volatile struct au1xxx_ddma_desc {
0093 u32 dscr_cmd0;
0094 u32 dscr_cmd1;
0095 u32 dscr_source0;
0096 u32 dscr_source1;
0097 u32 dscr_dest0;
0098 u32 dscr_dest1;
0099 u32 dscr_stat;
0100 u32 dscr_nxtptr;
0101
0102
0103
0104
0105 u32 sw_status;
0106 u32 sw_context;
0107 u32 sw_reserved[6];
0108 } au1x_ddma_desc_t;
0109
0110 #define DSCR_CMD0_V (1 << 31)
0111 #define DSCR_CMD0_MEM (1 << 30)
0112 #define DSCR_CMD0_SID_MASK (0x1f << 25)
0113 #define DSCR_CMD0_DID_MASK (0x1f << 20)
0114 #define DSCR_CMD0_SW_MASK (0x3 << 18)
0115 #define DSCR_CMD0_DW_MASK (0x3 << 16)
0116 #define DSCR_CMD0_ARB (0x1 << 15)
0117 #define DSCR_CMD0_DT_MASK (0x3 << 13)
0118 #define DSCR_CMD0_SN (0x1 << 12)
0119 #define DSCR_CMD0_DN (0x1 << 11)
0120 #define DSCR_CMD0_SM (0x1 << 10)
0121 #define DSCR_CMD0_IE (0x1 << 8)
0122 #define DSCR_CMD0_SP (0x1 << 4)
0123 #define DSCR_CMD0_CV (0x1 << 2)
0124 #define DSCR_CMD0_ST_MASK (0x3 << 0)
0125
0126 #define SW_STATUS_INUSE (1 << 0)
0127
0128
0129 #define AU1550_DSCR_CMD0_UART0_TX 0
0130 #define AU1550_DSCR_CMD0_UART0_RX 1
0131 #define AU1550_DSCR_CMD0_UART3_TX 2
0132 #define AU1550_DSCR_CMD0_UART3_RX 3
0133 #define AU1550_DSCR_CMD0_DMA_REQ0 4
0134 #define AU1550_DSCR_CMD0_DMA_REQ1 5
0135 #define AU1550_DSCR_CMD0_DMA_REQ2 6
0136 #define AU1550_DSCR_CMD0_DMA_REQ3 7
0137 #define AU1550_DSCR_CMD0_USBDEV_RX0 8
0138 #define AU1550_DSCR_CMD0_USBDEV_TX0 9
0139 #define AU1550_DSCR_CMD0_USBDEV_TX1 10
0140 #define AU1550_DSCR_CMD0_USBDEV_TX2 11
0141 #define AU1550_DSCR_CMD0_USBDEV_RX3 12
0142 #define AU1550_DSCR_CMD0_USBDEV_RX4 13
0143 #define AU1550_DSCR_CMD0_PSC0_TX 14
0144 #define AU1550_DSCR_CMD0_PSC0_RX 15
0145 #define AU1550_DSCR_CMD0_PSC1_TX 16
0146 #define AU1550_DSCR_CMD0_PSC1_RX 17
0147 #define AU1550_DSCR_CMD0_PSC2_TX 18
0148 #define AU1550_DSCR_CMD0_PSC2_RX 19
0149 #define AU1550_DSCR_CMD0_PSC3_TX 20
0150 #define AU1550_DSCR_CMD0_PSC3_RX 21
0151 #define AU1550_DSCR_CMD0_PCI_WRITE 22
0152 #define AU1550_DSCR_CMD0_NAND_FLASH 23
0153 #define AU1550_DSCR_CMD0_MAC0_RX 24
0154 #define AU1550_DSCR_CMD0_MAC0_TX 25
0155 #define AU1550_DSCR_CMD0_MAC1_RX 26
0156 #define AU1550_DSCR_CMD0_MAC1_TX 27
0157
0158 #define AU1200_DSCR_CMD0_UART0_TX 0
0159 #define AU1200_DSCR_CMD0_UART0_RX 1
0160 #define AU1200_DSCR_CMD0_UART1_TX 2
0161 #define AU1200_DSCR_CMD0_UART1_RX 3
0162 #define AU1200_DSCR_CMD0_DMA_REQ0 4
0163 #define AU1200_DSCR_CMD0_DMA_REQ1 5
0164 #define AU1200_DSCR_CMD0_MAE_BE 6
0165 #define AU1200_DSCR_CMD0_MAE_FE 7
0166 #define AU1200_DSCR_CMD0_SDMS_TX0 8
0167 #define AU1200_DSCR_CMD0_SDMS_RX0 9
0168 #define AU1200_DSCR_CMD0_SDMS_TX1 10
0169 #define AU1200_DSCR_CMD0_SDMS_RX1 11
0170 #define AU1200_DSCR_CMD0_AES_TX 13
0171 #define AU1200_DSCR_CMD0_AES_RX 12
0172 #define AU1200_DSCR_CMD0_PSC0_TX 14
0173 #define AU1200_DSCR_CMD0_PSC0_RX 15
0174 #define AU1200_DSCR_CMD0_PSC1_TX 16
0175 #define AU1200_DSCR_CMD0_PSC1_RX 17
0176 #define AU1200_DSCR_CMD0_CIM_RXA 18
0177 #define AU1200_DSCR_CMD0_CIM_RXB 19
0178 #define AU1200_DSCR_CMD0_CIM_RXC 20
0179 #define AU1200_DSCR_CMD0_MAE_BOTH 21
0180 #define AU1200_DSCR_CMD0_LCD 22
0181 #define AU1200_DSCR_CMD0_NAND_FLASH 23
0182 #define AU1200_DSCR_CMD0_PSC0_SYNC 24
0183 #define AU1200_DSCR_CMD0_PSC1_SYNC 25
0184 #define AU1200_DSCR_CMD0_CIM_SYNC 26
0185
0186 #define AU1300_DSCR_CMD0_UART0_TX 0
0187 #define AU1300_DSCR_CMD0_UART0_RX 1
0188 #define AU1300_DSCR_CMD0_UART1_TX 2
0189 #define AU1300_DSCR_CMD0_UART1_RX 3
0190 #define AU1300_DSCR_CMD0_UART2_TX 4
0191 #define AU1300_DSCR_CMD0_UART2_RX 5
0192 #define AU1300_DSCR_CMD0_UART3_TX 6
0193 #define AU1300_DSCR_CMD0_UART3_RX 7
0194 #define AU1300_DSCR_CMD0_SDMS_TX0 8
0195 #define AU1300_DSCR_CMD0_SDMS_RX0 9
0196 #define AU1300_DSCR_CMD0_SDMS_TX1 10
0197 #define AU1300_DSCR_CMD0_SDMS_RX1 11
0198 #define AU1300_DSCR_CMD0_AES_TX 12
0199 #define AU1300_DSCR_CMD0_AES_RX 13
0200 #define AU1300_DSCR_CMD0_PSC0_TX 14
0201 #define AU1300_DSCR_CMD0_PSC0_RX 15
0202 #define AU1300_DSCR_CMD0_PSC1_TX 16
0203 #define AU1300_DSCR_CMD0_PSC1_RX 17
0204 #define AU1300_DSCR_CMD0_PSC2_TX 18
0205 #define AU1300_DSCR_CMD0_PSC2_RX 19
0206 #define AU1300_DSCR_CMD0_PSC3_TX 20
0207 #define AU1300_DSCR_CMD0_PSC3_RX 21
0208 #define AU1300_DSCR_CMD0_LCD 22
0209 #define AU1300_DSCR_CMD0_NAND_FLASH 23
0210 #define AU1300_DSCR_CMD0_SDMS_TX2 24
0211 #define AU1300_DSCR_CMD0_SDMS_RX2 25
0212 #define AU1300_DSCR_CMD0_CIM_SYNC 26
0213 #define AU1300_DSCR_CMD0_UDMA 27
0214 #define AU1300_DSCR_CMD0_DMA_REQ0 28
0215 #define AU1300_DSCR_CMD0_DMA_REQ1 29
0216
0217 #define DSCR_CMD0_THROTTLE 30
0218 #define DSCR_CMD0_ALWAYS 31
0219 #define DSCR_NDEV_IDS 32
0220
0221 #define DSCR_DEV2CUSTOM_ID(x, d) (((((x) & 0xFFFF) << 8) | 0x32000000) | \
0222 ((d) & 0xFF))
0223 #define DSCR_CUSTOM2DEV_ID(x) ((x) & 0xFF)
0224
0225 #define DSCR_CMD0_SID(x) (((x) & 0x1f) << 25)
0226 #define DSCR_CMD0_DID(x) (((x) & 0x1f) << 20)
0227
0228
0229 #define DSCR_CMD0_BYTE 0
0230 #define DSCR_CMD0_HALFWORD 1
0231 #define DSCR_CMD0_WORD 2
0232
0233 #define DSCR_CMD0_SW(x) (((x) & 0x3) << 18)
0234 #define DSCR_CMD0_DW(x) (((x) & 0x3) << 16)
0235
0236
0237 #define DSCR_CMD0_STANDARD 0
0238 #define DSCR_CMD0_LITERAL 1
0239 #define DSCR_CMD0_CMP_BRANCH 2
0240
0241 #define DSCR_CMD0_DT(x) (((x) & 0x3) << 13)
0242
0243
0244 #define DSCR_CMD0_ST_NOCHANGE 0
0245 #define DSCR_CMD0_ST_CURRENT 1
0246 #define DSCR_CMD0_ST_CMD0 2
0247 #define DSCR_CMD0_ST_BYTECNT 3
0248
0249 #define DSCR_CMD0_ST(x) (((x) & 0x3) << 0)
0250
0251
0252 #define DSCR_CMD1_SUPTR_MASK (0xf << 28)
0253 #define DSCR_CMD1_DUPTR_MASK (0xf << 24)
0254 #define DSCR_CMD1_FL_MASK (0x3 << 22)
0255 #define DSCR_CMD1_BC_MASK (0x3fffff)
0256
0257
0258 #define DSCR_CMD1_FL_MEM_STRIDE0 0
0259 #define DSCR_CMD1_FL_MEM_STRIDE1 1
0260 #define DSCR_CMD1_FL_MEM_STRIDE2 2
0261
0262 #define DSCR_CMD1_FL(x) (((x) & 0x3) << 22)
0263
0264
0265 #define DSCR_SRC1_STS_MASK (3 << 30)
0266 #define DSCR_SRC1_SAM_MASK (3 << 28)
0267 #define DSCR_SRC1_SB_MASK (0x3fff << 14)
0268 #define DSCR_SRC1_SB(x) (((x) & 0x3fff) << 14)
0269 #define DSCR_SRC1_SS_MASK (0x3fff << 0)
0270 #define DSCR_SRC1_SS(x) (((x) & 0x3fff) << 0)
0271
0272
0273 #define DSCR_DEST1_DTS_MASK (3 << 30)
0274 #define DSCR_DEST1_DAM_MASK (3 << 28)
0275 #define DSCR_DEST1_DB_MASK (0x3fff << 14)
0276 #define DSCR_DEST1_DB(x) (((x) & 0x3fff) << 14)
0277 #define DSCR_DEST1_DS_MASK (0x3fff << 0)
0278 #define DSCR_DEST1_DS(x) (((x) & 0x3fff) << 0)
0279
0280 #define DSCR_xTS_SIZE1 0
0281 #define DSCR_xTS_SIZE2 1
0282 #define DSCR_xTS_SIZE4 2
0283 #define DSCR_xTS_SIZE8 3
0284 #define DSCR_SRC1_STS(x) (((x) & 3) << 30)
0285 #define DSCR_DEST1_DTS(x) (((x) & 3) << 30)
0286
0287 #define DSCR_xAM_INCREMENT 0
0288 #define DSCR_xAM_DECREMENT 1
0289 #define DSCR_xAM_STATIC 2
0290 #define DSCR_xAM_BURST 3
0291 #define DSCR_SRC1_SAM(x) (((x) & 3) << 28)
0292 #define DSCR_DEST1_DAM(x) (((x) & 3) << 28)
0293
0294
0295 #define DSCR_NXTPTR_MASK (0x07ffffff)
0296 #define DSCR_NXTPTR(x) ((x) >> 5)
0297 #define DSCR_GET_NXTPTR(x) ((x) << 5)
0298 #define DSCR_NXTPTR_MS (1 << 27)
0299
0300
0301 #define NUM_DBDMA_CHANS 16
0302
0303
0304
0305
0306
0307 typedef struct dbdma_device_table {
0308 u32 dev_id;
0309 u32 dev_flags;
0310 u32 dev_tsize;
0311 u32 dev_devwidth;
0312 u32 dev_physaddr;
0313 u32 dev_intlevel;
0314 u32 dev_intpolarity;
0315 } dbdev_tab_t;
0316
0317
0318 typedef struct dbdma_chan_config {
0319 spinlock_t lock;
0320
0321 u32 chan_flags;
0322 u32 chan_index;
0323 dbdev_tab_t *chan_src;
0324 dbdev_tab_t *chan_dest;
0325 au1x_dma_chan_t *chan_ptr;
0326 au1x_ddma_desc_t *chan_desc_base;
0327 u32 cdb_membase;
0328 au1x_ddma_desc_t *get_ptr, *put_ptr, *cur_ptr;
0329 void *chan_callparam;
0330 void (*chan_callback)(int, void *);
0331 } chan_tab_t;
0332
0333 #define DEV_FLAGS_INUSE (1 << 0)
0334 #define DEV_FLAGS_ANYUSE (1 << 1)
0335 #define DEV_FLAGS_OUT (1 << 2)
0336 #define DEV_FLAGS_IN (1 << 3)
0337 #define DEV_FLAGS_BURSTABLE (1 << 4)
0338 #define DEV_FLAGS_SYNC (1 << 5)
0339
0340
0341
0342
0343
0344
0345
0346
0347
0348 extern u32 au1xxx_dbdma_chan_alloc(u32 srcid, u32 destid,
0349 void (*callback)(int, void *),
0350 void *callparam);
0351
0352 #define DBDMA_MEM_CHAN DSCR_CMD0_ALWAYS
0353
0354
0355 u32 au1xxx_dbdma_set_devwidth(u32 chanid, int bits);
0356
0357
0358 u32 au1xxx_dbdma_ring_alloc(u32 chanid, int entries);
0359
0360
0361 u32 au1xxx_dbdma_put_source(u32 chanid, dma_addr_t buf, int nbytes, u32 flags);
0362 u32 au1xxx_dbdma_put_dest(u32 chanid, dma_addr_t buf, int nbytes, u32 flags);
0363
0364
0365 u32 au1xxx_dbdma_get_dest(u32 chanid, void **buf, int *nbytes);
0366
0367 void au1xxx_dbdma_stop(u32 chanid);
0368 void au1xxx_dbdma_start(u32 chanid);
0369 void au1xxx_dbdma_reset(u32 chanid);
0370 u32 au1xxx_get_dma_residue(u32 chanid);
0371
0372 void au1xxx_dbdma_chan_free(u32 chanid);
0373 void au1xxx_dbdma_dump(u32 chanid);
0374
0375 u32 au1xxx_dbdma_put_dscr(u32 chanid, au1x_ddma_desc_t *dscr);
0376
0377 u32 au1xxx_ddma_add_device(dbdev_tab_t *dev);
0378 extern void au1xxx_ddma_del_device(u32 devid);
0379 void *au1xxx_ddma_get_nextptr_virt(au1x_ddma_desc_t *dp);
0380
0381
0382
0383
0384 #define DDMA_FLAGS_IE (1 << 0)
0385 #define DDMA_FLAGS_NOIE (1 << 1)
0386
0387 #endif
0388 #endif