162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (c) 2023 Cai Huoqing
462306a36Sopenharmony_ci * Synopsys DesignWare HDMA v0 reg
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * Author: Cai Huoqing <cai.huoqing@linux.dev>
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#ifndef _DW_HDMA_V0_REGS_H
1062306a36Sopenharmony_ci#define _DW_HDMA_V0_REGS_H
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#include <linux/dmaengine.h>
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci#define HDMA_V0_MAX_NR_CH			8
1562306a36Sopenharmony_ci#define HDMA_V0_LOCAL_ABORT_INT_EN		BIT(6)
1662306a36Sopenharmony_ci#define HDMA_V0_REMOTE_ABORT_INT_EN		BIT(5)
1762306a36Sopenharmony_ci#define HDMA_V0_LOCAL_STOP_INT_EN		BIT(4)
1862306a36Sopenharmony_ci#define HDMA_V0_REMOTE_STOP_INT_EN		BIT(3)
1962306a36Sopenharmony_ci#define HDMA_V0_ABORT_INT_MASK			BIT(2)
2062306a36Sopenharmony_ci#define HDMA_V0_STOP_INT_MASK			BIT(0)
2162306a36Sopenharmony_ci#define HDMA_V0_LINKLIST_EN			BIT(0)
2262306a36Sopenharmony_ci#define HDMA_V0_CONSUMER_CYCLE_STAT		BIT(1)
2362306a36Sopenharmony_ci#define HDMA_V0_CONSUMER_CYCLE_BIT		BIT(0)
2462306a36Sopenharmony_ci#define HDMA_V0_DOORBELL_START			BIT(0)
2562306a36Sopenharmony_ci#define HDMA_V0_CH_STATUS_MASK			GENMASK(1, 0)
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_cistruct dw_hdma_v0_ch_regs {
2862306a36Sopenharmony_ci	u32 ch_en;				/* 0x0000 */
2962306a36Sopenharmony_ci	u32 doorbell;				/* 0x0004 */
3062306a36Sopenharmony_ci	u32 prefetch;				/* 0x0008 */
3162306a36Sopenharmony_ci	u32 handshake;				/* 0x000c */
3262306a36Sopenharmony_ci	union {
3362306a36Sopenharmony_ci		u64 reg;			/* 0x0010..0x0014 */
3462306a36Sopenharmony_ci		struct {
3562306a36Sopenharmony_ci			u32 lsb;		/* 0x0010 */
3662306a36Sopenharmony_ci			u32 msb;		/* 0x0014 */
3762306a36Sopenharmony_ci		};
3862306a36Sopenharmony_ci	} llp;
3962306a36Sopenharmony_ci	u32 cycle_sync;				/* 0x0018 */
4062306a36Sopenharmony_ci	u32 transfer_size;			/* 0x001c */
4162306a36Sopenharmony_ci	union {
4262306a36Sopenharmony_ci		u64 reg;			/* 0x0020..0x0024 */
4362306a36Sopenharmony_ci		struct {
4462306a36Sopenharmony_ci			u32 lsb;		/* 0x0020 */
4562306a36Sopenharmony_ci			u32 msb;		/* 0x0024 */
4662306a36Sopenharmony_ci		};
4762306a36Sopenharmony_ci	} sar;
4862306a36Sopenharmony_ci	union {
4962306a36Sopenharmony_ci		u64 reg;			/* 0x0028..0x002c */
5062306a36Sopenharmony_ci		struct {
5162306a36Sopenharmony_ci			u32 lsb;		/* 0x0028 */
5262306a36Sopenharmony_ci			u32 msb;		/* 0x002c */
5362306a36Sopenharmony_ci		};
5462306a36Sopenharmony_ci	} dar;
5562306a36Sopenharmony_ci	u32 watermark_en;			/* 0x0030 */
5662306a36Sopenharmony_ci	u32 control1;				/* 0x0034 */
5762306a36Sopenharmony_ci	u32 func_num;				/* 0x0038 */
5862306a36Sopenharmony_ci	u32 qos;				/* 0x003c */
5962306a36Sopenharmony_ci	u32 padding_1[16];			/* 0x0040..0x007c */
6062306a36Sopenharmony_ci	u32 ch_stat;				/* 0x0080 */
6162306a36Sopenharmony_ci	u32 int_stat;				/* 0x0084 */
6262306a36Sopenharmony_ci	u32 int_setup;				/* 0x0088 */
6362306a36Sopenharmony_ci	u32 int_clear;				/* 0x008c */
6462306a36Sopenharmony_ci	union {
6562306a36Sopenharmony_ci		u64 reg;			/* 0x0090..0x0094 */
6662306a36Sopenharmony_ci		struct {
6762306a36Sopenharmony_ci			u32 lsb;		/* 0x0090 */
6862306a36Sopenharmony_ci			u32 msb;		/* 0x0094 */
6962306a36Sopenharmony_ci		};
7062306a36Sopenharmony_ci	} msi_stop;
7162306a36Sopenharmony_ci	union {
7262306a36Sopenharmony_ci		u64 reg;			/* 0x0098..0x009c */
7362306a36Sopenharmony_ci		struct {
7462306a36Sopenharmony_ci			u32 lsb;		/* 0x0098 */
7562306a36Sopenharmony_ci			u32 msb;		/* 0x009c */
7662306a36Sopenharmony_ci		};
7762306a36Sopenharmony_ci	} msi_watermark;
7862306a36Sopenharmony_ci	union {
7962306a36Sopenharmony_ci		u64 reg;			/* 0x00a0..0x00a4 */
8062306a36Sopenharmony_ci		struct {
8162306a36Sopenharmony_ci			u32 lsb;		/* 0x00a0 */
8262306a36Sopenharmony_ci			u32 msb;		/* 0x00a4 */
8362306a36Sopenharmony_ci		};
8462306a36Sopenharmony_ci	} msi_abort;
8562306a36Sopenharmony_ci	u32 msi_msgdata;			/* 0x00a8 */
8662306a36Sopenharmony_ci	u32 padding_2[21];			/* 0x00ac..0x00fc */
8762306a36Sopenharmony_ci} __packed;
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_cistruct dw_hdma_v0_ch {
9062306a36Sopenharmony_ci	struct dw_hdma_v0_ch_regs wr;		/* 0x0000 */
9162306a36Sopenharmony_ci	struct dw_hdma_v0_ch_regs rd;		/* 0x0100 */
9262306a36Sopenharmony_ci} __packed;
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_cistruct dw_hdma_v0_regs {
9562306a36Sopenharmony_ci	struct dw_hdma_v0_ch ch[HDMA_V0_MAX_NR_CH];	/* 0x0000..0x0fa8 */
9662306a36Sopenharmony_ci} __packed;
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_cistruct dw_hdma_v0_lli {
9962306a36Sopenharmony_ci	u32 control;
10062306a36Sopenharmony_ci	u32 transfer_size;
10162306a36Sopenharmony_ci	union {
10262306a36Sopenharmony_ci		u64 reg;
10362306a36Sopenharmony_ci		struct {
10462306a36Sopenharmony_ci			u32 lsb;
10562306a36Sopenharmony_ci			u32 msb;
10662306a36Sopenharmony_ci		};
10762306a36Sopenharmony_ci	} sar;
10862306a36Sopenharmony_ci	union {
10962306a36Sopenharmony_ci		u64 reg;
11062306a36Sopenharmony_ci		struct {
11162306a36Sopenharmony_ci			u32 lsb;
11262306a36Sopenharmony_ci			u32 msb;
11362306a36Sopenharmony_ci		};
11462306a36Sopenharmony_ci	} dar;
11562306a36Sopenharmony_ci} __packed;
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_cistruct dw_hdma_v0_llp {
11862306a36Sopenharmony_ci	u32 control;
11962306a36Sopenharmony_ci	u32 reserved;
12062306a36Sopenharmony_ci	union {
12162306a36Sopenharmony_ci		u64 reg;
12262306a36Sopenharmony_ci		struct {
12362306a36Sopenharmony_ci			u32 lsb;
12462306a36Sopenharmony_ci			u32 msb;
12562306a36Sopenharmony_ci		};
12662306a36Sopenharmony_ci	} llp;
12762306a36Sopenharmony_ci} __packed;
12862306a36Sopenharmony_ci
12962306a36Sopenharmony_ci#endif /* _DW_HDMA_V0_REGS_H */
130