/* 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 0 x1000
#define DMA1_FIFO_SIZE 0 x1000
#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 (0 xF)
#define DMA_CDB_64B_ADDR (1 <<2 )
#define DMA_CDB_NO_INT (1 <<3 )
#define DMA_CDB_STATUS_MSK (0 x3)
#define DMA_CDB_ADDR_MSK (0 xFFFFFFF0)
/* DMA CDB OpCodes */
#define DMA_CDB_OPC_NO_OP (0 x00)
#define DMA_CDB_OPC_MV_SG1_SG2 (0 x01)
#define DMA_CDB_OPC_MULTICAST (0 x05)
#define DMA_CDB_OPC_DFILL128 (0 x24)
#define DMA_CDB_OPC_DCHECK128 (0 x23)
#define DMA_CUED_XOR_BASE (0 x10000000)
#define DMA_CUED_XOR_HB (0 x00000008)
#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 (0 xFC000000)
#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 (0 xF0000000)
#endif
#define DMA_CUED_REGION_MSK 0 x3
#define DMA_RXOR123 0 x0
#define DMA_RXOR124 0 x1
#define DMA_RXOR125 0 x2
#define DMA_RXOR12 0 x3
/* 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[0 x8];
u16 cpfhp;
u16 cpftp;
u16 csfhp;
u16 csftp;
u8 pad1[0 x8];
u32 acpl;
u32 acph;
u32 s1bpl;
u32 s1bph;
u32 s2bpl;
u32 s2bph;
u32 s3bpl;
u32 s3bph;
u8 pad2[0 x10];
u32 earl;
u32 earh;
u8 pad3[0 x8];
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[0 x14];
u32 idbel;
u8 pad1[0 xc];
u32 ihis;
u32 ihim;
u8 pad2[0 x8];
u32 ihiq;
u32 ihoq;
u8 pad3[0 x8];
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[0 x4];
u16 mfac0;
u16 mfac1;
u16 mfac2;
u16 mfac3;
u16 mfac4;
u16 mfac5;
u16 mfac6;
u16 mfac7;
u16 ifcfh;
u16 ifcht;
u8 pad6[0 x4];
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[0 x8];
u32 iopt;
};
#endif /* _PPC440SPE_DMA_H */
Messung V0.5 in Prozent C=95 H=92 G=93
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-06-07)
¤
*© Formatika GbR, Deutschland