summaryrefslogtreecommitdiff
path: root/include/soc/sprd/dma_reg.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/soc/sprd/dma_reg.h')
-rw-r--r--include/soc/sprd/dma_reg.h211
1 files changed, 211 insertions, 0 deletions
diff --git a/include/soc/sprd/dma_reg.h b/include/soc/sprd/dma_reg.h
new file mode 100644
index 00000000..05c034c7
--- /dev/null
+++ b/include/soc/sprd/dma_reg.h
@@ -0,0 +1,211 @@
+/*
+ * Copyright (C) 2012 Spreadtrum Communications Inc.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef __ASM_ARCH_SPRD_DMA_REG_H
+#define __ASM_ARCH_SPRD_DMA_REG_H
+
+#include <linux/interrupt.h>
+#include <asm/io.h>
+#include <soc/sprd/dma.h>
+
+/**----------------------------------------------------------------------------*
+** Micro Define **
+**----------------------------------------------------------------------------*/
+
+/*dma r1p0 register offset define start*/
+#ifdef DMA_VER_R1P0
+#define DMA_REG_BASE SPRD_DMA0_BASE
+
+/* 0X00 */
+#define DMA_BLK_WAIT (DMA_REG_BASE + 0x0000)
+#define DMA_CHN_EN_STATUS (DMA_REG_BASE + 0x0004)
+#define DMA_LINKLIST_EN (DMA_REG_BASE + 0x0008)
+#define DMA_SOFTLINK_EN (DMA_REG_BASE + 0x000C)
+
+/* 0X10 */
+#define DMA_SOFTLIST_SIZE (DMA_REG_BASE + 0x0010)
+#define DMA_SOFTLIST_CMD (DMA_REG_BASE + 0x0014)
+#define DMA_SOFTLIST_STS (DMA_REG_BASE + 0x0018)
+#define DMA_SOFTLIST_BASEADDR (DMA_REG_BASE + 0x001C)
+
+/* 0X20 */
+#define DMA_PRI_REG0 (DMA_REG_BASE + 0x0020)
+#define DMA_PRI_REG1 (DMA_REG_BASE + 0x0024)
+
+/* 0X30 */
+#define DMA_INT_STS (DMA_REG_BASE + 0x0030)
+#define DMA_INT_RAW (DMA_REG_BASE + 0x0034)
+
+/* 0X40 */
+#define DMA_LISTDONE_INT_EN (DMA_REG_BASE + 0x0040)
+#define DMA_BLOCK_INT_EN (DMA_REG_BASE + 0x0044)
+#define DMA_TRANSF_INT_EN (DMA_REG_BASE + 0x0048)
+
+/* 0X50 */
+#define DMA_LISTDONE_INT_STS (DMA_REG_BASE + 0x0050)
+#define DMA_BURST_INT_STS (DMA_REG_BASE + 0x0054)
+#define DMA_TRANSF_INT_STS (DMA_REG_BASE + 0x0058)
+
+/* 0X60 */
+#define DMA_LISTDONE_INT_RAW (DMA_REG_BASE + 0x0060)
+#define DMA_BURST_INT_RAW (DMA_REG_BASE + 0x0064)
+#define DMA_TRANSF_INT_RAW (DMA_REG_BASE + 0x0068)
+
+/* 0X70 */
+#define DMA_LISTDONE_INT_CLR (DMA_REG_BASE + 0x0070)
+#define DMA_BURST_INT_CLR (DMA_REG_BASE + 0x0074)
+#define DMA_TRANSF_INT_CLR (DMA_REG_BASE + 0x0078)
+
+/* 0X80 */
+#define DMA_SOFT_REQ (DMA_REG_BASE + 0x0080)
+#define DMA_TRANS_STS (DMA_REG_BASE + 0x0084)
+#define DMA_REQ_PEND (DMA_REG_BASE + 0x0088)
+
+/* 0X90 */
+#define DMA_WRAP_START (DMA_REG_BASE + 0x0090)
+#define DMA_WRAP_END (DMA_REG_BASE + 0x0094)
+
+#define DMA_CHN_UID_BASE (DMA_REG_BASE + 0x0098)
+#define DMA_CHN_UID0 (DMA_REG_BASE + 0x0098)
+#define DMA_CHN_UID1 (DMA_REG_BASE + 0x009C)
+#define DMA_CHN_UID2 (DMA_REG_BASE + 0x00A0)
+#define DMA_CHN_UID3 (DMA_REG_BASE + 0x00A4)
+#define DMA_CHN_UID4 (DMA_REG_BASE + 0x00A8)
+#define DMA_CHN_UID5 (DMA_REG_BASE + 0x00AC)
+#define DMA_CHN_UID6 (DMA_REG_BASE + 0x00B0)
+#define DMA_CHN_UID7 (DMA_REG_BASE + 0x00B4)
+
+#define DMA_CHx_EN (DMA_REG_BASE + 0x00C0)
+#define DMA_CHx_DIS (DMA_REG_BASE + 0x00C4)
+
+/* Chanel x dma contral regisers address offset*/
+#define DMA_CH_CFG (0x0000)
+#define DMA_CH_TOTAL_LEN (0x0004)
+#define DMA_CH_SRC_ADDR (0x0008)
+#define DMA_CH_DEST_ADDR (0x000c)
+#define DMA_CH_LLPTR (0x0010)
+#define DMA_CH_SDEP (0x0014)
+#define DMA_CH_SBP (0x0018)
+#define DMA_CH_DBP (0x001c)
+
+/* Channel x dma contral regisers address */
+#define DMA_CHx_CTL_BASE (DMA_REG_BASE + 0x0400)
+#define DMA_CHx_OFFSET (0x20)
+#define DMA_CHx_BASE(x) (DMA_CHx_CTL_BASE + DMA_CHx_OFFSET * x )
+#define DMA_CHx_CFG(x) (DMA_CHx_BASE(x) + DMA_CH_CFG)
+#define DMA_CHx_TOTAL_LEN(x) (DMA_CHx_BASE(x) + DMA_CH_TOTAL_LEN)
+#define DMA_CHx_SRC_ADDR(x) (DMA_CHx_BASE(x) + DMA_CH_SRC_ADDR)
+#define DMA_CHx_DEST_ADDR(x) (DMA_CHx_BASE(x) + DMA_CH_DEST_ADDR)
+#define DMA_CHx_LLPTR(x) (DMA_CHx_BASE(x) + DMA_CH_LLPTR)
+#define DMA_CHx_SDEP(x) (DMA_CHx_BASE(x) + DMA_CH_SDEP)
+#define DMA_CHx_SBP(x) (DMA_CHx_BASE(x) + DMA_CH_SBP)
+#define DMA_CHx_DBP(x) (DMA_CHx_BASE(x) + DMA_CH_DBP)
+
+/*there is no different between full and std chn is DMA r1p0*/
+struct sci_dma_reg {
+ u32 cfg;
+ u32 total_len;
+ u32 src_addr;
+ u32 des_addr;
+ u32 llist_ptr;
+ u32 elem_postm;
+ u32 src_blk_postm;
+ u32 des_blk_postm;
+};
+
+#endif
+/*dma r1p0 register offset define end*/
+
+/*dma r3p0 and r4p0 register offset define start*/
+#ifdef DMA_VER_R4P0
+
+#define DMA_CHx_OFFSET (0x40)
+#define DMA_CHx_BASE(reg_base, chn) \
+ (reg_base + 0x1000 + DMA_CHx_OFFSET * (chn))
+
+#define DMA_REQ_CID(reg_base, uid) (reg_base + 0x2000 + 0x4 * ((uid) -1))
+
+
+/*FRAG_LEN*/
+#define CHN_PRIORITY_OFFSET 12
+#define CHN_PRIORITY_MASK 0x3
+#define LLIST_EN_OFFSET 4;
+
+#define SRC_DATAWIDTH_OFFSET 30
+#define DES_DATAWIDTH_OFFSET 28
+#define SWT_MODE_OFFSET 26
+#define REQ_MODE_OFFSET 24
+#define ADDR_WRAP_SEL_OFFSET 23
+#define ADDR_WRAP_EN_OFFSET 22
+#define ADDR_FIX_SEL_OFFSET 21
+#define ADDR_FIX_SEL_EN 20
+#define LLIST_END_OFFSET 19
+#define BLK_LEN_REC_H_OFFSET 17
+#define FRG_LEN_OFFSET 0
+
+#define DEST_TRSF_STEP_OFFSET 16
+#define SRC_TRSF_STEP_OFFSET 0
+#define DEST_FRAG_STEP_OFFSET 16
+#define SRC_FRAG_STEP_OFFSET 0
+
+#define TRSF_STEP_MASK 0xffff
+#define FRAG_STEP_MASK 0xffff
+
+#define DATAWIDTH_MASK 0x3
+#define SWT_MODE_MASK 0x3
+#define REQ_MODE_MASK 0x3
+#define ADDR_WRAP_SEL_MASK 0x1
+#define ADDR_WRAP_EN_MASK 0x1
+#define ADDR_FIX_SEL_MASK 0x1
+#define ADDR_FIX_SEL_MASK 0x1
+#define LLIST_END_MASK 0x1
+#define BLK_LEN_REC_H_MASKT 0x3
+#define FRG_LEN_MASK 0x1ffff
+
+#define BLK_LEN_MASK 0x1ffff
+#define TRSC_LEN_MASK 0xfffffff
+
+struct sci_dma_glb_reg {
+ u32 pause;
+ u32 frag_wait;
+ u32 pend0_en;
+ u32 pend1_en;
+ u32 int_raw_sts;
+ u32 int_msk_sts;
+ u32 req_sts;
+ u32 en_sts;
+ u32 debug_sts;
+ u32 arb_sel_sts;
+};
+
+struct sci_dma_chn_reg {
+ u32 pause;
+ u32 req;
+ u32 cfg;
+ u32 intc;
+ u32 src_addr;
+ u32 des_addr;
+ u32 frg_len;
+ u32 blk_len;
+ /* only full chn have following regs */
+ u32 trsc_len;
+ u32 trsf_step;
+ u32 wrap_ptr;
+ u32 wrap_to;
+ u32 llist_ptr;
+ u32 frg_step;
+ u32 src_blk_step;
+ u32 des_blk_step;
+};
+#endif
+#endif