162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (c) 2018-2019 Synopsys, Inc. and/or its affiliates. 462306a36Sopenharmony_ci * Synopsys DesignWare eDMA v0 core 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * Author: Gustavo Pimentel <gustavo.pimentel@synopsys.com> 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#ifndef _DW_EDMA_V0_REGS_H 1062306a36Sopenharmony_ci#define _DW_EDMA_V0_REGS_H 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include <linux/dmaengine.h> 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#define EDMA_V0_MAX_NR_CH 8 1562306a36Sopenharmony_ci#define EDMA_V0_VIEWPORT_MASK GENMASK(2, 0) 1662306a36Sopenharmony_ci#define EDMA_V0_DONE_INT_MASK GENMASK(7, 0) 1762306a36Sopenharmony_ci#define EDMA_V0_ABORT_INT_MASK GENMASK(23, 16) 1862306a36Sopenharmony_ci#define EDMA_V0_WRITE_CH_COUNT_MASK GENMASK(3, 0) 1962306a36Sopenharmony_ci#define EDMA_V0_READ_CH_COUNT_MASK GENMASK(19, 16) 2062306a36Sopenharmony_ci#define EDMA_V0_CH_STATUS_MASK GENMASK(6, 5) 2162306a36Sopenharmony_ci#define EDMA_V0_DOORBELL_CH_MASK GENMASK(2, 0) 2262306a36Sopenharmony_ci#define EDMA_V0_LINKED_LIST_ERR_MASK GENMASK(7, 0) 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci#define EDMA_V0_CH_ODD_MSI_DATA_MASK GENMASK(31, 16) 2562306a36Sopenharmony_ci#define EDMA_V0_CH_EVEN_MSI_DATA_MASK GENMASK(15, 0) 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_cistruct dw_edma_v0_ch_regs { 2862306a36Sopenharmony_ci u32 ch_control1; /* 0x0000 */ 2962306a36Sopenharmony_ci u32 ch_control2; /* 0x0004 */ 3062306a36Sopenharmony_ci u32 transfer_size; /* 0x0008 */ 3162306a36Sopenharmony_ci union { 3262306a36Sopenharmony_ci u64 reg; /* 0x000c..0x0010 */ 3362306a36Sopenharmony_ci struct { 3462306a36Sopenharmony_ci u32 lsb; /* 0x000c */ 3562306a36Sopenharmony_ci u32 msb; /* 0x0010 */ 3662306a36Sopenharmony_ci }; 3762306a36Sopenharmony_ci } sar; 3862306a36Sopenharmony_ci union { 3962306a36Sopenharmony_ci u64 reg; /* 0x0014..0x0018 */ 4062306a36Sopenharmony_ci struct { 4162306a36Sopenharmony_ci u32 lsb; /* 0x0014 */ 4262306a36Sopenharmony_ci u32 msb; /* 0x0018 */ 4362306a36Sopenharmony_ci }; 4462306a36Sopenharmony_ci } dar; 4562306a36Sopenharmony_ci union { 4662306a36Sopenharmony_ci u64 reg; /* 0x001c..0x0020 */ 4762306a36Sopenharmony_ci struct { 4862306a36Sopenharmony_ci u32 lsb; /* 0x001c */ 4962306a36Sopenharmony_ci u32 msb; /* 0x0020 */ 5062306a36Sopenharmony_ci }; 5162306a36Sopenharmony_ci } llp; 5262306a36Sopenharmony_ci} __packed; 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_cistruct dw_edma_v0_ch { 5562306a36Sopenharmony_ci struct dw_edma_v0_ch_regs wr; /* 0x0200 */ 5662306a36Sopenharmony_ci u32 padding_1[55]; /* 0x0224..0x02fc */ 5762306a36Sopenharmony_ci struct dw_edma_v0_ch_regs rd; /* 0x0300 */ 5862306a36Sopenharmony_ci u32 padding_2[55]; /* 0x0324..0x03fc */ 5962306a36Sopenharmony_ci} __packed; 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_cistruct dw_edma_v0_unroll { 6262306a36Sopenharmony_ci u32 padding_1; /* 0x00f8 */ 6362306a36Sopenharmony_ci u32 wr_engine_chgroup; /* 0x0100 */ 6462306a36Sopenharmony_ci u32 rd_engine_chgroup; /* 0x0104 */ 6562306a36Sopenharmony_ci union { 6662306a36Sopenharmony_ci u64 reg; /* 0x0108..0x010c */ 6762306a36Sopenharmony_ci struct { 6862306a36Sopenharmony_ci u32 lsb; /* 0x0108 */ 6962306a36Sopenharmony_ci u32 msb; /* 0x010c */ 7062306a36Sopenharmony_ci }; 7162306a36Sopenharmony_ci } wr_engine_hshake_cnt; 7262306a36Sopenharmony_ci u32 padding_2[2]; /* 0x0110..0x0114 */ 7362306a36Sopenharmony_ci union { 7462306a36Sopenharmony_ci u64 reg; /* 0x0120..0x0124 */ 7562306a36Sopenharmony_ci struct { 7662306a36Sopenharmony_ci u32 lsb; /* 0x0120 */ 7762306a36Sopenharmony_ci u32 msb; /* 0x0124 */ 7862306a36Sopenharmony_ci }; 7962306a36Sopenharmony_ci } rd_engine_hshake_cnt; 8062306a36Sopenharmony_ci u32 padding_3[2]; /* 0x0120..0x0124 */ 8162306a36Sopenharmony_ci u32 wr_ch0_pwr_en; /* 0x0128 */ 8262306a36Sopenharmony_ci u32 wr_ch1_pwr_en; /* 0x012c */ 8362306a36Sopenharmony_ci u32 wr_ch2_pwr_en; /* 0x0130 */ 8462306a36Sopenharmony_ci u32 wr_ch3_pwr_en; /* 0x0134 */ 8562306a36Sopenharmony_ci u32 wr_ch4_pwr_en; /* 0x0138 */ 8662306a36Sopenharmony_ci u32 wr_ch5_pwr_en; /* 0x013c */ 8762306a36Sopenharmony_ci u32 wr_ch6_pwr_en; /* 0x0140 */ 8862306a36Sopenharmony_ci u32 wr_ch7_pwr_en; /* 0x0144 */ 8962306a36Sopenharmony_ci u32 padding_4[8]; /* 0x0148..0x0164 */ 9062306a36Sopenharmony_ci u32 rd_ch0_pwr_en; /* 0x0168 */ 9162306a36Sopenharmony_ci u32 rd_ch1_pwr_en; /* 0x016c */ 9262306a36Sopenharmony_ci u32 rd_ch2_pwr_en; /* 0x0170 */ 9362306a36Sopenharmony_ci u32 rd_ch3_pwr_en; /* 0x0174 */ 9462306a36Sopenharmony_ci u32 rd_ch4_pwr_en; /* 0x0178 */ 9562306a36Sopenharmony_ci u32 rd_ch5_pwr_en; /* 0x018c */ 9662306a36Sopenharmony_ci u32 rd_ch6_pwr_en; /* 0x0180 */ 9762306a36Sopenharmony_ci u32 rd_ch7_pwr_en; /* 0x0184 */ 9862306a36Sopenharmony_ci u32 padding_5[30]; /* 0x0188..0x01fc */ 9962306a36Sopenharmony_ci struct dw_edma_v0_ch ch[EDMA_V0_MAX_NR_CH]; /* 0x0200..0x1120 */ 10062306a36Sopenharmony_ci} __packed; 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_cistruct dw_edma_v0_legacy { 10362306a36Sopenharmony_ci u32 viewport_sel; /* 0x00f8 */ 10462306a36Sopenharmony_ci struct dw_edma_v0_ch_regs ch; /* 0x0100..0x0120 */ 10562306a36Sopenharmony_ci} __packed; 10662306a36Sopenharmony_ci 10762306a36Sopenharmony_cistruct dw_edma_v0_regs { 10862306a36Sopenharmony_ci /* eDMA global registers */ 10962306a36Sopenharmony_ci u32 ctrl_data_arb_prior; /* 0x0000 */ 11062306a36Sopenharmony_ci u32 padding_1; /* 0x0004 */ 11162306a36Sopenharmony_ci u32 ctrl; /* 0x0008 */ 11262306a36Sopenharmony_ci u32 wr_engine_en; /* 0x000c */ 11362306a36Sopenharmony_ci u32 wr_doorbell; /* 0x0010 */ 11462306a36Sopenharmony_ci u32 padding_2; /* 0x0014 */ 11562306a36Sopenharmony_ci union { 11662306a36Sopenharmony_ci u64 reg; /* 0x0018..0x001c */ 11762306a36Sopenharmony_ci struct { 11862306a36Sopenharmony_ci u32 lsb; /* 0x0018 */ 11962306a36Sopenharmony_ci u32 msb; /* 0x001c */ 12062306a36Sopenharmony_ci }; 12162306a36Sopenharmony_ci } wr_ch_arb_weight; 12262306a36Sopenharmony_ci u32 padding_3[3]; /* 0x0020..0x0028 */ 12362306a36Sopenharmony_ci u32 rd_engine_en; /* 0x002c */ 12462306a36Sopenharmony_ci u32 rd_doorbell; /* 0x0030 */ 12562306a36Sopenharmony_ci u32 padding_4; /* 0x0034 */ 12662306a36Sopenharmony_ci union { 12762306a36Sopenharmony_ci u64 reg; /* 0x0038..0x003c */ 12862306a36Sopenharmony_ci struct { 12962306a36Sopenharmony_ci u32 lsb; /* 0x0038 */ 13062306a36Sopenharmony_ci u32 msb; /* 0x003c */ 13162306a36Sopenharmony_ci }; 13262306a36Sopenharmony_ci } rd_ch_arb_weight; 13362306a36Sopenharmony_ci u32 padding_5[3]; /* 0x0040..0x0048 */ 13462306a36Sopenharmony_ci /* eDMA interrupts registers */ 13562306a36Sopenharmony_ci u32 wr_int_status; /* 0x004c */ 13662306a36Sopenharmony_ci u32 padding_6; /* 0x0050 */ 13762306a36Sopenharmony_ci u32 wr_int_mask; /* 0x0054 */ 13862306a36Sopenharmony_ci u32 wr_int_clear; /* 0x0058 */ 13962306a36Sopenharmony_ci u32 wr_err_status; /* 0x005c */ 14062306a36Sopenharmony_ci union { 14162306a36Sopenharmony_ci u64 reg; /* 0x0060..0x0064 */ 14262306a36Sopenharmony_ci struct { 14362306a36Sopenharmony_ci u32 lsb; /* 0x0060 */ 14462306a36Sopenharmony_ci u32 msb; /* 0x0064 */ 14562306a36Sopenharmony_ci }; 14662306a36Sopenharmony_ci } wr_done_imwr; 14762306a36Sopenharmony_ci union { 14862306a36Sopenharmony_ci u64 reg; /* 0x0068..0x006c */ 14962306a36Sopenharmony_ci struct { 15062306a36Sopenharmony_ci u32 lsb; /* 0x0068 */ 15162306a36Sopenharmony_ci u32 msb; /* 0x006c */ 15262306a36Sopenharmony_ci }; 15362306a36Sopenharmony_ci } wr_abort_imwr; 15462306a36Sopenharmony_ci u32 wr_ch01_imwr_data; /* 0x0070 */ 15562306a36Sopenharmony_ci u32 wr_ch23_imwr_data; /* 0x0074 */ 15662306a36Sopenharmony_ci u32 wr_ch45_imwr_data; /* 0x0078 */ 15762306a36Sopenharmony_ci u32 wr_ch67_imwr_data; /* 0x007c */ 15862306a36Sopenharmony_ci u32 padding_7[4]; /* 0x0080..0x008c */ 15962306a36Sopenharmony_ci u32 wr_linked_list_err_en; /* 0x0090 */ 16062306a36Sopenharmony_ci u32 padding_8[3]; /* 0x0094..0x009c */ 16162306a36Sopenharmony_ci u32 rd_int_status; /* 0x00a0 */ 16262306a36Sopenharmony_ci u32 padding_9; /* 0x00a4 */ 16362306a36Sopenharmony_ci u32 rd_int_mask; /* 0x00a8 */ 16462306a36Sopenharmony_ci u32 rd_int_clear; /* 0x00ac */ 16562306a36Sopenharmony_ci u32 padding_10; /* 0x00b0 */ 16662306a36Sopenharmony_ci union { 16762306a36Sopenharmony_ci u64 reg; /* 0x00b4..0x00b8 */ 16862306a36Sopenharmony_ci struct { 16962306a36Sopenharmony_ci u32 lsb; /* 0x00b4 */ 17062306a36Sopenharmony_ci u32 msb; /* 0x00b8 */ 17162306a36Sopenharmony_ci }; 17262306a36Sopenharmony_ci } rd_err_status; 17362306a36Sopenharmony_ci u32 padding_11[2]; /* 0x00bc..0x00c0 */ 17462306a36Sopenharmony_ci u32 rd_linked_list_err_en; /* 0x00c4 */ 17562306a36Sopenharmony_ci u32 padding_12; /* 0x00c8 */ 17662306a36Sopenharmony_ci union { 17762306a36Sopenharmony_ci u64 reg; /* 0x00cc..0x00d0 */ 17862306a36Sopenharmony_ci struct { 17962306a36Sopenharmony_ci u32 lsb; /* 0x00cc */ 18062306a36Sopenharmony_ci u32 msb; /* 0x00d0 */ 18162306a36Sopenharmony_ci }; 18262306a36Sopenharmony_ci } rd_done_imwr; 18362306a36Sopenharmony_ci union { 18462306a36Sopenharmony_ci u64 reg; /* 0x00d4..0x00d8 */ 18562306a36Sopenharmony_ci struct { 18662306a36Sopenharmony_ci u32 lsb; /* 0x00d4 */ 18762306a36Sopenharmony_ci u32 msb; /* 0x00d8 */ 18862306a36Sopenharmony_ci }; 18962306a36Sopenharmony_ci } rd_abort_imwr; 19062306a36Sopenharmony_ci u32 rd_ch01_imwr_data; /* 0x00dc */ 19162306a36Sopenharmony_ci u32 rd_ch23_imwr_data; /* 0x00e0 */ 19262306a36Sopenharmony_ci u32 rd_ch45_imwr_data; /* 0x00e4 */ 19362306a36Sopenharmony_ci u32 rd_ch67_imwr_data; /* 0x00e8 */ 19462306a36Sopenharmony_ci u32 padding_13[4]; /* 0x00ec..0x00f8 */ 19562306a36Sopenharmony_ci /* eDMA channel context grouping */ 19662306a36Sopenharmony_ci union dw_edma_v0_type { 19762306a36Sopenharmony_ci struct dw_edma_v0_legacy legacy; /* 0x00f8..0x0120 */ 19862306a36Sopenharmony_ci struct dw_edma_v0_unroll unroll; /* 0x00f8..0x1120 */ 19962306a36Sopenharmony_ci } type; 20062306a36Sopenharmony_ci} __packed; 20162306a36Sopenharmony_ci 20262306a36Sopenharmony_cistruct dw_edma_v0_lli { 20362306a36Sopenharmony_ci u32 control; 20462306a36Sopenharmony_ci u32 transfer_size; 20562306a36Sopenharmony_ci union { 20662306a36Sopenharmony_ci u64 reg; 20762306a36Sopenharmony_ci struct { 20862306a36Sopenharmony_ci u32 lsb; 20962306a36Sopenharmony_ci u32 msb; 21062306a36Sopenharmony_ci }; 21162306a36Sopenharmony_ci } sar; 21262306a36Sopenharmony_ci union { 21362306a36Sopenharmony_ci u64 reg; 21462306a36Sopenharmony_ci struct { 21562306a36Sopenharmony_ci u32 lsb; 21662306a36Sopenharmony_ci u32 msb; 21762306a36Sopenharmony_ci }; 21862306a36Sopenharmony_ci } dar; 21962306a36Sopenharmony_ci} __packed; 22062306a36Sopenharmony_ci 22162306a36Sopenharmony_cistruct dw_edma_v0_llp { 22262306a36Sopenharmony_ci u32 control; 22362306a36Sopenharmony_ci u32 reserved; 22462306a36Sopenharmony_ci union { 22562306a36Sopenharmony_ci u64 reg; 22662306a36Sopenharmony_ci struct { 22762306a36Sopenharmony_ci u32 lsb; 22862306a36Sopenharmony_ci u32 msb; 22962306a36Sopenharmony_ci }; 23062306a36Sopenharmony_ci } llp; 23162306a36Sopenharmony_ci} __packed; 23262306a36Sopenharmony_ci 23362306a36Sopenharmony_ci#endif /* _DW_EDMA_V0_REGS_H */ 234