Path: blob/master/drivers/dma/dw-edma/dw-edma-v0-regs.h
26282 views
/* SPDX-License-Identifier: GPL-2.0 */1/*2* Copyright (c) 2018-2019 Synopsys, Inc. and/or its affiliates.3* Synopsys DesignWare eDMA v0 core4*5* Author: Gustavo Pimentel <[email protected]>6*/78#ifndef _DW_EDMA_V0_REGS_H9#define _DW_EDMA_V0_REGS_H1011#include <linux/dmaengine.h>1213#define EDMA_V0_MAX_NR_CH 814#define EDMA_V0_VIEWPORT_MASK GENMASK(2, 0)15#define EDMA_V0_DONE_INT_MASK GENMASK(7, 0)16#define EDMA_V0_ABORT_INT_MASK GENMASK(23, 16)17#define EDMA_V0_WRITE_CH_COUNT_MASK GENMASK(3, 0)18#define EDMA_V0_READ_CH_COUNT_MASK GENMASK(19, 16)19#define EDMA_V0_CH_STATUS_MASK GENMASK(6, 5)20#define EDMA_V0_DOORBELL_CH_MASK GENMASK(2, 0)21#define EDMA_V0_LINKED_LIST_ERR_MASK GENMASK(7, 0)2223#define EDMA_V0_CH_ODD_MSI_DATA_MASK GENMASK(31, 16)24#define EDMA_V0_CH_EVEN_MSI_DATA_MASK GENMASK(15, 0)2526struct dw_edma_v0_ch_regs {27u32 ch_control1; /* 0x0000 */28u32 ch_control2; /* 0x0004 */29u32 transfer_size; /* 0x0008 */30union {31u64 reg; /* 0x000c..0x0010 */32struct {33u32 lsb; /* 0x000c */34u32 msb; /* 0x0010 */35};36} sar;37union {38u64 reg; /* 0x0014..0x0018 */39struct {40u32 lsb; /* 0x0014 */41u32 msb; /* 0x0018 */42};43} dar;44union {45u64 reg; /* 0x001c..0x0020 */46struct {47u32 lsb; /* 0x001c */48u32 msb; /* 0x0020 */49};50} llp;51} __packed;5253struct dw_edma_v0_ch {54struct dw_edma_v0_ch_regs wr; /* 0x0200 */55u32 padding_1[55]; /* 0x0224..0x02fc */56struct dw_edma_v0_ch_regs rd; /* 0x0300 */57u32 padding_2[55]; /* 0x0324..0x03fc */58} __packed;5960struct dw_edma_v0_unroll {61u32 padding_1; /* 0x00f8 */62u32 wr_engine_chgroup; /* 0x0100 */63u32 rd_engine_chgroup; /* 0x0104 */64union {65u64 reg; /* 0x0108..0x010c */66struct {67u32 lsb; /* 0x0108 */68u32 msb; /* 0x010c */69};70} wr_engine_hshake_cnt;71u32 padding_2[2]; /* 0x0110..0x0114 */72union {73u64 reg; /* 0x0120..0x0124 */74struct {75u32 lsb; /* 0x0120 */76u32 msb; /* 0x0124 */77};78} rd_engine_hshake_cnt;79u32 padding_3[2]; /* 0x0120..0x0124 */80u32 wr_ch0_pwr_en; /* 0x0128 */81u32 wr_ch1_pwr_en; /* 0x012c */82u32 wr_ch2_pwr_en; /* 0x0130 */83u32 wr_ch3_pwr_en; /* 0x0134 */84u32 wr_ch4_pwr_en; /* 0x0138 */85u32 wr_ch5_pwr_en; /* 0x013c */86u32 wr_ch6_pwr_en; /* 0x0140 */87u32 wr_ch7_pwr_en; /* 0x0144 */88u32 padding_4[8]; /* 0x0148..0x0164 */89u32 rd_ch0_pwr_en; /* 0x0168 */90u32 rd_ch1_pwr_en; /* 0x016c */91u32 rd_ch2_pwr_en; /* 0x0170 */92u32 rd_ch3_pwr_en; /* 0x0174 */93u32 rd_ch4_pwr_en; /* 0x0178 */94u32 rd_ch5_pwr_en; /* 0x018c */95u32 rd_ch6_pwr_en; /* 0x0180 */96u32 rd_ch7_pwr_en; /* 0x0184 */97u32 padding_5[30]; /* 0x0188..0x01fc */98struct dw_edma_v0_ch ch[EDMA_V0_MAX_NR_CH]; /* 0x0200..0x1120 */99} __packed;100101struct dw_edma_v0_legacy {102u32 viewport_sel; /* 0x00f8 */103struct dw_edma_v0_ch_regs ch; /* 0x0100..0x0120 */104} __packed;105106struct dw_edma_v0_regs {107/* eDMA global registers */108u32 ctrl_data_arb_prior; /* 0x0000 */109u32 padding_1; /* 0x0004 */110u32 ctrl; /* 0x0008 */111u32 wr_engine_en; /* 0x000c */112u32 wr_doorbell; /* 0x0010 */113u32 padding_2; /* 0x0014 */114union {115u64 reg; /* 0x0018..0x001c */116struct {117u32 lsb; /* 0x0018 */118u32 msb; /* 0x001c */119};120} wr_ch_arb_weight;121u32 padding_3[3]; /* 0x0020..0x0028 */122u32 rd_engine_en; /* 0x002c */123u32 rd_doorbell; /* 0x0030 */124u32 padding_4; /* 0x0034 */125union {126u64 reg; /* 0x0038..0x003c */127struct {128u32 lsb; /* 0x0038 */129u32 msb; /* 0x003c */130};131} rd_ch_arb_weight;132u32 padding_5[3]; /* 0x0040..0x0048 */133/* eDMA interrupts registers */134u32 wr_int_status; /* 0x004c */135u32 padding_6; /* 0x0050 */136u32 wr_int_mask; /* 0x0054 */137u32 wr_int_clear; /* 0x0058 */138u32 wr_err_status; /* 0x005c */139union {140u64 reg; /* 0x0060..0x0064 */141struct {142u32 lsb; /* 0x0060 */143u32 msb; /* 0x0064 */144};145} wr_done_imwr;146union {147u64 reg; /* 0x0068..0x006c */148struct {149u32 lsb; /* 0x0068 */150u32 msb; /* 0x006c */151};152} wr_abort_imwr;153u32 wr_ch01_imwr_data; /* 0x0070 */154u32 wr_ch23_imwr_data; /* 0x0074 */155u32 wr_ch45_imwr_data; /* 0x0078 */156u32 wr_ch67_imwr_data; /* 0x007c */157u32 padding_7[4]; /* 0x0080..0x008c */158u32 wr_linked_list_err_en; /* 0x0090 */159u32 padding_8[3]; /* 0x0094..0x009c */160u32 rd_int_status; /* 0x00a0 */161u32 padding_9; /* 0x00a4 */162u32 rd_int_mask; /* 0x00a8 */163u32 rd_int_clear; /* 0x00ac */164u32 padding_10; /* 0x00b0 */165union {166u64 reg; /* 0x00b4..0x00b8 */167struct {168u32 lsb; /* 0x00b4 */169u32 msb; /* 0x00b8 */170};171} rd_err_status;172u32 padding_11[2]; /* 0x00bc..0x00c0 */173u32 rd_linked_list_err_en; /* 0x00c4 */174u32 padding_12; /* 0x00c8 */175union {176u64 reg; /* 0x00cc..0x00d0 */177struct {178u32 lsb; /* 0x00cc */179u32 msb; /* 0x00d0 */180};181} rd_done_imwr;182union {183u64 reg; /* 0x00d4..0x00d8 */184struct {185u32 lsb; /* 0x00d4 */186u32 msb; /* 0x00d8 */187};188} rd_abort_imwr;189u32 rd_ch01_imwr_data; /* 0x00dc */190u32 rd_ch23_imwr_data; /* 0x00e0 */191u32 rd_ch45_imwr_data; /* 0x00e4 */192u32 rd_ch67_imwr_data; /* 0x00e8 */193u32 padding_13[4]; /* 0x00ec..0x00f8 */194/* eDMA channel context grouping */195union dw_edma_v0_type {196struct dw_edma_v0_legacy legacy; /* 0x00f8..0x0120 */197struct dw_edma_v0_unroll unroll; /* 0x00f8..0x1120 */198} type;199} __packed;200201struct dw_edma_v0_lli {202u32 control;203u32 transfer_size;204union {205u64 reg;206struct {207u32 lsb;208u32 msb;209};210} sar;211union {212u64 reg;213struct {214u32 lsb;215u32 msb;216};217} dar;218} __packed;219220struct dw_edma_v0_llp {221u32 control;222u32 reserved;223union {224u64 reg;225struct {226u32 lsb;227u32 msb;228};229} llp;230} __packed;231232#endif /* _DW_EDMA_V0_REGS_H */233234235