~funderscore blog cgit wiki get in touch
aboutsummaryrefslogtreecommitdiff
blob: 5d50bbcb0317d76faf729cce03245d8d7b50be7f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
/* SPDX-License-Identifier: GPL-2.0+ */
/*
 *  Copyright (C) 2018 Texas Instruments Incorporated - http://www.ti.com
 *
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 */

#ifndef K3_NAVSS_UDMA_HWDEF_H_
#define K3_NAVSS_UDMA_HWDEF_H_

#include <linux/bitops.h>
#define UDMA_PSIL_DST_THREAD_ID_OFFSET 0x8000

/* Global registers */
#define UDMA_REV_REG			0x0
#define UDMA_PERF_CTL_REG		0x4
#define UDMA_EMU_CTL_REG		0x8
#define UDMA_PSIL_TO_REG		0x10
#define UDMA_UTC_CTL_REG		0x1c
#define UDMA_CAP_REG(i)			(0x20 + (i * 4))
#define UDMA_RX_FLOW_ID_FW_OES_REG	0x80
#define UDMA_RX_FLOW_ID_FW_STATUS_REG	0x88

/* RX Flow regs */
#define UDMA_RFLOW_RFA_REG		0x0
#define UDMA_RFLOW_RFB_REG		0x4
#define UDMA_RFLOW_RFC_REG		0x8
#define UDMA_RFLOW_RFD_REG		0xc
#define UDMA_RFLOW_RFE_REG		0x10
#define UDMA_RFLOW_RFF_REG		0x14
#define UDMA_RFLOW_RFG_REG		0x18
#define UDMA_RFLOW_RFH_REG		0x1c

#define UDMA_RFLOW_REG(x) (UDMA_RFLOW_RF##x##_REG)

/* TX chan regs */
#define UDMA_TCHAN_TCFG_REG		0x0
#define UDMA_TCHAN_TCREDIT_REG		0x4
#define UDMA_TCHAN_TCQ_REG		0x14
#define UDMA_TCHAN_TOES_REG(i)		(0x20 + (i) * 4)
#define UDMA_TCHAN_TEOES_REG		0x60
#define UDMA_TCHAN_TPRI_CTRL_REG	0x64
#define UDMA_TCHAN_THREAD_ID_REG	0x68
#define UDMA_TCHAN_TFIFO_DEPTH_REG	0x70
#define UDMA_TCHAN_TST_SCHED_REG	0x80

/* RX chan regs */
#define UDMA_RCHAN_RCFG_REG		0x0
#define UDMA_RCHAN_RCQ_REG		0x14
#define UDMA_RCHAN_ROES_REG(i)		(0x20 + (i) * 4)
#define UDMA_RCHAN_REOES_REG		0x60
#define UDMA_RCHAN_RPRI_CTRL_REG	0x64
#define UDMA_RCHAN_THREAD_ID_REG	0x68
#define UDMA_RCHAN_RST_SCHED_REG	0x80
#define UDMA_RCHAN_RFLOW_RNG_REG	0xf0

/* TX chan RT regs */
#define UDMA_TCHAN_RT_CTL_REG		0x0
#define UDMA_TCHAN_RT_SWTRIG_REG	0x8
#define UDMA_TCHAN_RT_STDATA_REG	0x80

#define UDMA_TCHAN_RT_PEERn_REG(i)	(0x200 + (i * 0x4))
#define UDMA_TCHAN_RT_PEER_STATIC_TR_XY_REG	\
	UDMA_TCHAN_RT_PEERn_REG(0)	/* PSI-L: 0x400 */
#define UDMA_TCHAN_RT_PEER_STATIC_TR_Z_REG	\
	UDMA_TCHAN_RT_PEERn_REG(1)	/* PSI-L: 0x401 */
#define UDMA_TCHAN_RT_PEER_BCNT_REG		\
	UDMA_TCHAN_RT_PEERn_REG(4)	/* PSI-L: 0x404 */
#define UDMA_TCHAN_RT_PEER_RT_EN_REG		\
	UDMA_TCHAN_RT_PEERn_REG(8)	/* PSI-L: 0x408 */

#define UDMA_TCHAN_RT_PCNT_REG		0x400
#define UDMA_TCHAN_RT_BCNT_REG		0x408
#define UDMA_TCHAN_RT_SBCNT_REG		0x410

/* RX chan RT regs */
#define UDMA_RCHAN_RT_CTL_REG		0x0
#define UDMA_RCHAN_RT_SWTRIG_REG	0x8
#define UDMA_RCHAN_RT_STDATA_REG	0x80

#define UDMA_RCHAN_RT_PEERn_REG(i)	(0x200 + (i * 0x4))
#define UDMA_RCHAN_RT_PEER_STATIC_TR_XY_REG	\
	UDMA_RCHAN_RT_PEERn_REG(0)	/* PSI-L: 0x400 */
#define UDMA_RCHAN_RT_PEER_STATIC_TR_Z_REG	\
	UDMA_RCHAN_RT_PEERn_REG(1)	/* PSI-L: 0x401 */
#define UDMA_RCHAN_RT_PEER_BCNT_REG		\
	UDMA_RCHAN_RT_PEERn_REG(4)	/* PSI-L: 0x404 */
#define UDMA_RCHAN_RT_PEER_RT_EN_REG		\
	UDMA_RCHAN_RT_PEERn_REG(8)	/* PSI-L: 0x408 */

#define UDMA_RCHAN_RT_PCNT_REG		0x400
#define UDMA_RCHAN_RT_BCNT_REG		0x408
#define UDMA_RCHAN_RT_SBCNT_REG		0x410

/* UDMA_TCHAN_TCFG_REG/UDMA_RCHAN_RCFG_REG */
#define UDMA_CHAN_CFG_PAUSE_ON_ERR		BIT(31)
#define UDMA_TCHAN_CFG_FILT_EINFO		BIT(30)
#define UDMA_TCHAN_CFG_FILT_PSWORDS		BIT(29)
#define UDMA_CHAN_CFG_ATYPE_MASK		GENMASK(25, 24)
#define UDMA_CHAN_CFG_ATYPE_SHIFT		24
#define UDMA_CHAN_CFG_CHAN_TYPE_MASK		GENMASK(19, 16)
#define UDMA_CHAN_CFG_CHAN_TYPE_SHIFT		16
/*
 * PBVR - using pass by value rings
 * PBRR - using pass by reference rings
 * 3RDP - Third Party DMA
 * BC - Block Copy
 * SB - single buffer packet mode enabled
 */
#define UDMA_CHAN_CFG_CHAN_TYPE_PACKET_PBRR \
	(2 << UDMA_CHAN_CFG_CHAN_TYPE_SHIFT)
#define UDMA_CHAN_CFG_CHAN_TYPE_PACKET_SB_PBRR \
	(3 << UDMA_CHAN_CFG_CHAN_TYPE_SHIFT)
#define UDMA_CHAN_CFG_CHAN_TYPE_3RDP_PBRR \
	(10 << UDMA_CHAN_CFG_CHAN_TYPE_SHIFT)
#define UDMA_CHAN_CFG_CHAN_TYPE_3RDP_PBVR \
	(11 << UDMA_CHAN_CFG_CHAN_TYPE_SHIFT)
#define UDMA_CHAN_CFG_CHAN_TYPE_3RDP_BC_PBRR \
	(12 << UDMA_CHAN_CFG_CHAN_TYPE_SHIFT)
#define UDMA_RCHAN_CFG_IGNORE_SHORT		BIT(15)
#define UDMA_RCHAN_CFG_IGNORE_LONG		BIT(14)
#define UDMA_TCHAN_CFG_SUPR_TDPKT		BIT(8)
#define UDMA_CHAN_CFG_FETCH_SIZE_MASK		GENMASK(6, 0)
#define UDMA_CHAN_CFG_FETCH_SIZE_SHIFT		0

/* UDMA_TCHAN_RT_CTL_REG/UDMA_RCHAN_RT_CTL_REG */
#define UDMA_CHAN_RT_CTL_EN	BIT(31)
#define UDMA_CHAN_RT_CTL_TDOWN	BIT(30)
#define UDMA_CHAN_RT_CTL_PAUSE	BIT(29)
#define UDMA_CHAN_RT_CTL_FTDOWN	BIT(28)
#define UDMA_CHAN_RT_CTL_ERROR	BIT(0)

/* UDMA_TCHAN_RT_PEER_RT_EN_REG/UDMA_RCHAN_RT_PEER_RT_EN_REG (PSI-L: 0x408) */
#define UDMA_PEER_RT_EN_ENABLE		BIT(31)
#define UDMA_PEER_RT_EN_TEARDOWN	BIT(30)
#define UDMA_PEER_RT_EN_PAUSE		BIT(29)
#define UDMA_PEER_RT_EN_FLUSH		BIT(28)
#define UDMA_PEER_RT_EN_IDLE		BIT(1)

/* RX Flow reg RFA */
#define UDMA_RFLOW_RFA_EINFO			BIT(30)
#define UDMA_RFLOW_RFA_PSINFO			BIT(29)
#define UDMA_RFLOW_RFA_ERR_HANDLING		BIT(28)
#define UDMA_RFLOW_RFA_DESC_TYPE_MASK		GENMASK(27, 26)
#define UDMA_RFLOW_RFA_DESC_TYPE_SHIFT		26
#define UDMA_RFLOW_RFA_PS_LOC			BIT(25)
#define UDMA_RFLOW_RFA_SOP_OFF_MASK		GENMASK(24, 16)
#define UDMA_RFLOW_RFA_SOP_OFF_SHIFT		16
#define UDMA_RFLOW_RFA_DEST_QNUM_MASK		GENMASK(15, 0)
#define UDMA_RFLOW_RFA_DEST_QNUM_SHIFT		0

/* RX Flow reg RFC */
#define UDMA_RFLOW_RFC_SRC_TAG_HI_SEL_SHIFT	28
#define UDMA_RFLOW_RFC_SRC_TAG_LO_SEL_SHIFT	24
#define UDMA_RFLOW_RFC_DST_TAG_HI_SEL_SHIFT	20
#define UDMA_RFLOW_RFC_DST_TAG_LO_SE_SHIFT	16

/*
 * UDMA_TCHAN_RT_PEER_STATIC_TR_XY_REG /
 * UDMA_RCHAN_RT_PEER_STATIC_TR_XY_REG
 */
#define PDMA_STATIC_TR_X_MASK		GENMASK(26, 24)
#define PDMA_STATIC_TR_X_SHIFT		(24)
#define PDMA_STATIC_TR_Y_MASK		GENMASK(11, 0)
#define PDMA_STATIC_TR_Y_SHIFT		(0)

#define PDMA_STATIC_TR_Y(x)	\
	(((x) << PDMA_STATIC_TR_Y_SHIFT) & PDMA_STATIC_TR_Y_MASK)
#define PDMA_STATIC_TR_X(x)	\
	(((x) << PDMA_STATIC_TR_X_SHIFT) & PDMA_STATIC_TR_X_MASK)

/*
 * UDMA_TCHAN_RT_PEER_STATIC_TR_Z_REG /
 * UDMA_RCHAN_RT_PEER_STATIC_TR_Z_REG
 */
#define PDMA_STATIC_TR_Z_MASK		GENMASK(11, 0)
#define PDMA_STATIC_TR_Z_SHIFT		(0)
#define PDMA_STATIC_TR_Z(x)	\
	(((x) << PDMA_STATIC_TR_Z_SHIFT) & PDMA_STATIC_TR_Z_MASK)

#endif /* K3_NAVSS_UDMA_HWDEF_H_ */