xref: /freebsd/sys/contrib/alpine-hal/al_hal_udma_regs_m2s.h (revision 2414e86439f4c53aff73d1afe0453fb48145d9e5)
1*49b49cdaSZbigniew Bodek /*-
2*49b49cdaSZbigniew Bodek *******************************************************************************
3*49b49cdaSZbigniew Bodek Copyright (C) 2015 Annapurna Labs Ltd.
4*49b49cdaSZbigniew Bodek 
5*49b49cdaSZbigniew Bodek This file may be licensed under the terms of the Annapurna Labs Commercial
6*49b49cdaSZbigniew Bodek License Agreement.
7*49b49cdaSZbigniew Bodek 
8*49b49cdaSZbigniew Bodek Alternatively, this file can be distributed under the terms of the GNU General
9*49b49cdaSZbigniew Bodek Public License V2 as published by the Free Software Foundation and can be
10*49b49cdaSZbigniew Bodek found at http://www.gnu.org/licenses/gpl-2.0.html
11*49b49cdaSZbigniew Bodek 
12*49b49cdaSZbigniew Bodek Alternatively, redistribution and use in source and binary forms, with or
13*49b49cdaSZbigniew Bodek without modification, are permitted provided that the following conditions are
14*49b49cdaSZbigniew Bodek met:
15*49b49cdaSZbigniew Bodek 
16*49b49cdaSZbigniew Bodek     *     Redistributions of source code must retain the above copyright notice,
17*49b49cdaSZbigniew Bodek this list of conditions and the following disclaimer.
18*49b49cdaSZbigniew Bodek 
19*49b49cdaSZbigniew Bodek     *     Redistributions in binary form must reproduce the above copyright
20*49b49cdaSZbigniew Bodek notice, this list of conditions and the following disclaimer in
21*49b49cdaSZbigniew Bodek the documentation and/or other materials provided with the
22*49b49cdaSZbigniew Bodek distribution.
23*49b49cdaSZbigniew Bodek 
24*49b49cdaSZbigniew Bodek THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
25*49b49cdaSZbigniew Bodek ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
26*49b49cdaSZbigniew Bodek WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27*49b49cdaSZbigniew Bodek DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
28*49b49cdaSZbigniew Bodek ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
29*49b49cdaSZbigniew Bodek (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30*49b49cdaSZbigniew Bodek LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
31*49b49cdaSZbigniew Bodek ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32*49b49cdaSZbigniew Bodek (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33*49b49cdaSZbigniew Bodek SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34*49b49cdaSZbigniew Bodek 
35*49b49cdaSZbigniew Bodek *******************************************************************************/
36*49b49cdaSZbigniew Bodek 
37*49b49cdaSZbigniew Bodek /**
38*49b49cdaSZbigniew Bodek  * @file   al_hal_udma_regs_m2s.h
39*49b49cdaSZbigniew Bodek  *
40*49b49cdaSZbigniew Bodek  * @brief C Header file for the UDMA M2S registers
41*49b49cdaSZbigniew Bodek  *
42*49b49cdaSZbigniew Bodek  */
43*49b49cdaSZbigniew Bodek 
44*49b49cdaSZbigniew Bodek #ifndef __AL_HAL_UDMA_M2S_REG_H
45*49b49cdaSZbigniew Bodek #define __AL_HAL_UDMA_M2S_REG_H
46*49b49cdaSZbigniew Bodek 
47*49b49cdaSZbigniew Bodek #include "al_hal_plat_types.h"
48*49b49cdaSZbigniew Bodek 
49*49b49cdaSZbigniew Bodek #ifdef __cplusplus
50*49b49cdaSZbigniew Bodek extern "C" {
51*49b49cdaSZbigniew Bodek #endif
52*49b49cdaSZbigniew Bodek /*
53*49b49cdaSZbigniew Bodek * Unit Registers
54*49b49cdaSZbigniew Bodek */
55*49b49cdaSZbigniew Bodek 
56*49b49cdaSZbigniew Bodek 
57*49b49cdaSZbigniew Bodek 
58*49b49cdaSZbigniew Bodek struct udma_axi_m2s {
59*49b49cdaSZbigniew Bodek 	/* [0x0] Completion write master configuration */
60*49b49cdaSZbigniew Bodek 	uint32_t comp_wr_cfg_1;
61*49b49cdaSZbigniew Bodek 	/* [0x4] Completion write master configuration */
62*49b49cdaSZbigniew Bodek 	uint32_t comp_wr_cfg_2;
63*49b49cdaSZbigniew Bodek 	/* [0x8] Data read master configuration */
64*49b49cdaSZbigniew Bodek 	uint32_t data_rd_cfg_1;
65*49b49cdaSZbigniew Bodek 	/* [0xc] Data read master configuration */
66*49b49cdaSZbigniew Bodek 	uint32_t data_rd_cfg_2;
67*49b49cdaSZbigniew Bodek 	/* [0x10] Descriptor read master configuration */
68*49b49cdaSZbigniew Bodek 	uint32_t desc_rd_cfg_1;
69*49b49cdaSZbigniew Bodek 	/* [0x14] Descriptor read master configuration */
70*49b49cdaSZbigniew Bodek 	uint32_t desc_rd_cfg_2;
71*49b49cdaSZbigniew Bodek 	/* [0x18] Data read master configuration */
72*49b49cdaSZbigniew Bodek 	uint32_t data_rd_cfg;
73*49b49cdaSZbigniew Bodek 	/* [0x1c] Descriptors read master configuration */
74*49b49cdaSZbigniew Bodek 	uint32_t desc_rd_cfg_3;
75*49b49cdaSZbigniew Bodek 	/* [0x20] Descriptors write master configuration (completion) */
76*49b49cdaSZbigniew Bodek 	uint32_t desc_wr_cfg_1;
77*49b49cdaSZbigniew Bodek 	/* [0x24] AXI outstanding  configuration */
78*49b49cdaSZbigniew Bodek 	uint32_t ostand_cfg;
79*49b49cdaSZbigniew Bodek 	uint32_t rsrvd[54];
80*49b49cdaSZbigniew Bodek };
81*49b49cdaSZbigniew Bodek struct udma_m2s {
82*49b49cdaSZbigniew Bodek 	/*
83*49b49cdaSZbigniew Bodek 	 * [0x0] DMA state.
84*49b49cdaSZbigniew Bodek 	 * 00  - No pending tasks
85*49b49cdaSZbigniew Bodek 	 * 01 – Normal (active)
86*49b49cdaSZbigniew Bodek 	 * 10 – Abort (error condition)
87*49b49cdaSZbigniew Bodek 	 * 11 – Reserved
88*49b49cdaSZbigniew Bodek 	 */
89*49b49cdaSZbigniew Bodek 	uint32_t state;
90*49b49cdaSZbigniew Bodek 	/* [0x4] CPU request to change DMA state */
91*49b49cdaSZbigniew Bodek 	uint32_t change_state;
92*49b49cdaSZbigniew Bodek 	uint32_t rsrvd_0;
93*49b49cdaSZbigniew Bodek 	/*
94*49b49cdaSZbigniew Bodek 	 * [0xc] M2S DMA error log mask.
95*49b49cdaSZbigniew Bodek 	 * Each error has an interrupt controller cause bit.
96*49b49cdaSZbigniew Bodek 	 * This register determines if these errors cause the M2S DMA to log the
97*49b49cdaSZbigniew Bodek 	 * error condition.
98*49b49cdaSZbigniew Bodek 	 * 0 - Log is enabled.
99*49b49cdaSZbigniew Bodek 	 * 1 - Log is masked.
100*49b49cdaSZbigniew Bodek 	 */
101*49b49cdaSZbigniew Bodek 	uint32_t err_log_mask;
102*49b49cdaSZbigniew Bodek 	uint32_t rsrvd_1;
103*49b49cdaSZbigniew Bodek 	/*
104*49b49cdaSZbigniew Bodek 	 * [0x14] DMA header log.
105*49b49cdaSZbigniew Bodek 	 * Sample the packet header that caused the error.
106*49b49cdaSZbigniew Bodek 	 */
107*49b49cdaSZbigniew Bodek 	uint32_t log_0;
108*49b49cdaSZbigniew Bodek 	/*
109*49b49cdaSZbigniew Bodek 	 * [0x18] DMA header log.
110*49b49cdaSZbigniew Bodek 	 * Sample the packet header that caused the error.
111*49b49cdaSZbigniew Bodek 	 */
112*49b49cdaSZbigniew Bodek 	uint32_t log_1;
113*49b49cdaSZbigniew Bodek 	/*
114*49b49cdaSZbigniew Bodek 	 * [0x1c] DMA header log.
115*49b49cdaSZbigniew Bodek 	 * Sample the packet header that caused the error.
116*49b49cdaSZbigniew Bodek 	 */
117*49b49cdaSZbigniew Bodek 	uint32_t log_2;
118*49b49cdaSZbigniew Bodek 	/*
119*49b49cdaSZbigniew Bodek 	 * [0x20] DMA header log.
120*49b49cdaSZbigniew Bodek 	 * Sample the packet header that caused the error.
121*49b49cdaSZbigniew Bodek 	 */
122*49b49cdaSZbigniew Bodek 	uint32_t log_3;
123*49b49cdaSZbigniew Bodek 	/* [0x24] DMA clear error log */
124*49b49cdaSZbigniew Bodek 	uint32_t clear_err_log;
125*49b49cdaSZbigniew Bodek 	/* [0x28] M2S data FIFO status */
126*49b49cdaSZbigniew Bodek 	uint32_t data_fifo_status;
127*49b49cdaSZbigniew Bodek 	/* [0x2c] M2S header FIFO status */
128*49b49cdaSZbigniew Bodek 	uint32_t header_fifo_status;
129*49b49cdaSZbigniew Bodek 	/* [0x30] M2S unack FIFO status */
130*49b49cdaSZbigniew Bodek 	uint32_t unack_fifo_status;
131*49b49cdaSZbigniew Bodek 	/* [0x34] Select queue for debug */
132*49b49cdaSZbigniew Bodek 	uint32_t indirect_ctrl;
133*49b49cdaSZbigniew Bodek 	/*
134*49b49cdaSZbigniew Bodek 	 * [0x38] M2S prefetch FIFO status.
135*49b49cdaSZbigniew Bodek 	 * Status of the selected queue in M2S_indirect_ctrl
136*49b49cdaSZbigniew Bodek 	 */
137*49b49cdaSZbigniew Bodek 	uint32_t sel_pref_fifo_status;
138*49b49cdaSZbigniew Bodek 	/*
139*49b49cdaSZbigniew Bodek 	 * [0x3c] M2S completion FIFO status.
140*49b49cdaSZbigniew Bodek 	 * Status of the selected queue in M2S_indirect_ctrl
141*49b49cdaSZbigniew Bodek 	 */
142*49b49cdaSZbigniew Bodek 	uint32_t sel_comp_fifo_status;
143*49b49cdaSZbigniew Bodek 	/*
144*49b49cdaSZbigniew Bodek 	 * [0x40] M2S rate limit status.
145*49b49cdaSZbigniew Bodek 	 * Status of the selected queue in M2S_indirect_ctrl
146*49b49cdaSZbigniew Bodek 	 */
147*49b49cdaSZbigniew Bodek 	uint32_t sel_rate_limit_status;
148*49b49cdaSZbigniew Bodek 	/*
149*49b49cdaSZbigniew Bodek 	 * [0x44] M2S DWRR scheduler status.
150*49b49cdaSZbigniew Bodek 	 * Status of the selected queue in M2S_indirect_ctrl
151*49b49cdaSZbigniew Bodek 	 */
152*49b49cdaSZbigniew Bodek 	uint32_t sel_dwrr_status;
153*49b49cdaSZbigniew Bodek 	/* [0x48] M2S state machine and FIFO clear control */
154*49b49cdaSZbigniew Bodek 	uint32_t clear_ctrl;
155*49b49cdaSZbigniew Bodek 	/* [0x4c] Misc Check enable */
156*49b49cdaSZbigniew Bodek 	uint32_t check_en;
157*49b49cdaSZbigniew Bodek 	/* [0x50] M2S FIFO enable control, internal */
158*49b49cdaSZbigniew Bodek 	uint32_t fifo_en;
159*49b49cdaSZbigniew Bodek 	/* [0x54] M2S packet length configuration */
160*49b49cdaSZbigniew Bodek 	uint32_t cfg_len;
161*49b49cdaSZbigniew Bodek 	/* [0x58] Stream interface configuration */
162*49b49cdaSZbigniew Bodek 	uint32_t stream_cfg;
163*49b49cdaSZbigniew Bodek 	uint32_t rsrvd[41];
164*49b49cdaSZbigniew Bodek };
165*49b49cdaSZbigniew Bodek struct udma_m2s_rd {
166*49b49cdaSZbigniew Bodek 	/* [0x0] M2S descriptor prefetch configuration */
167*49b49cdaSZbigniew Bodek 	uint32_t desc_pref_cfg_1;
168*49b49cdaSZbigniew Bodek 	/* [0x4] M2S descriptor prefetch configuration */
169*49b49cdaSZbigniew Bodek 	uint32_t desc_pref_cfg_2;
170*49b49cdaSZbigniew Bodek 	/* [0x8] M2S descriptor prefetch configuration */
171*49b49cdaSZbigniew Bodek 	uint32_t desc_pref_cfg_3;
172*49b49cdaSZbigniew Bodek 	uint32_t rsrvd_0;
173*49b49cdaSZbigniew Bodek 	/* [0x10] Data burst read configuration */
174*49b49cdaSZbigniew Bodek 	uint32_t data_cfg;
175*49b49cdaSZbigniew Bodek 	uint32_t rsrvd[11];
176*49b49cdaSZbigniew Bodek };
177*49b49cdaSZbigniew Bodek struct udma_m2s_dwrr {
178*49b49cdaSZbigniew Bodek 	/* [0x0] Tx DMA DWRR scheduler configuration */
179*49b49cdaSZbigniew Bodek 	uint32_t cfg_sched;
180*49b49cdaSZbigniew Bodek 	/* [0x4] Token bucket rate limit control */
181*49b49cdaSZbigniew Bodek 	uint32_t ctrl_deficit_cnt;
182*49b49cdaSZbigniew Bodek 	uint32_t rsrvd[14];
183*49b49cdaSZbigniew Bodek };
184*49b49cdaSZbigniew Bodek struct udma_m2s_rate_limiter {
185*49b49cdaSZbigniew Bodek 	/* [0x0] Token bucket rate limit configuration */
186*49b49cdaSZbigniew Bodek 	uint32_t gen_cfg;
187*49b49cdaSZbigniew Bodek 	/*
188*49b49cdaSZbigniew Bodek 	 * [0x4] Token bucket rate limit control.
189*49b49cdaSZbigniew Bodek 	 * Controls the cycle counters.
190*49b49cdaSZbigniew Bodek 	 */
191*49b49cdaSZbigniew Bodek 	uint32_t ctrl_cycle_cnt;
192*49b49cdaSZbigniew Bodek 	/*
193*49b49cdaSZbigniew Bodek 	 * [0x8] Token bucket rate limit control.
194*49b49cdaSZbigniew Bodek 	 * Controls the token bucket counter.
195*49b49cdaSZbigniew Bodek 	 */
196*49b49cdaSZbigniew Bodek 	uint32_t ctrl_token;
197*49b49cdaSZbigniew Bodek 	uint32_t rsrvd[13];
198*49b49cdaSZbigniew Bodek };
199*49b49cdaSZbigniew Bodek 
200*49b49cdaSZbigniew Bodek struct udma_rlimit_common {
201*49b49cdaSZbigniew Bodek 	/* [0x0] Token bucket configuration */
202*49b49cdaSZbigniew Bodek 	uint32_t cfg_1s;
203*49b49cdaSZbigniew Bodek 	/* [0x4] Token bucket rate limit configuration */
204*49b49cdaSZbigniew Bodek 	uint32_t cfg_cycle;
205*49b49cdaSZbigniew Bodek 	/* [0x8] Token bucket rate limit configuration */
206*49b49cdaSZbigniew Bodek 	uint32_t cfg_token_size_1;
207*49b49cdaSZbigniew Bodek 	/* [0xc] Token bucket rate limit configuration */
208*49b49cdaSZbigniew Bodek 	uint32_t cfg_token_size_2;
209*49b49cdaSZbigniew Bodek 	/* [0x10] Token bucket rate limit configuration */
210*49b49cdaSZbigniew Bodek 	uint32_t sw_ctrl;
211*49b49cdaSZbigniew Bodek 	/*
212*49b49cdaSZbigniew Bodek 	 * [0x14] Mask the different types of rate limiter.
213*49b49cdaSZbigniew Bodek 	 * 0 - Rate limit is active.
214*49b49cdaSZbigniew Bodek 	 * 1 - Rate limit is masked.
215*49b49cdaSZbigniew Bodek 	 */
216*49b49cdaSZbigniew Bodek 	uint32_t mask;
217*49b49cdaSZbigniew Bodek };
218*49b49cdaSZbigniew Bodek 
219*49b49cdaSZbigniew Bodek struct udma_m2s_stream_rate_limiter {
220*49b49cdaSZbigniew Bodek 	struct udma_rlimit_common rlimit;
221*49b49cdaSZbigniew Bodek 	uint32_t rsrvd[10];
222*49b49cdaSZbigniew Bodek };
223*49b49cdaSZbigniew Bodek struct udma_m2s_comp {
224*49b49cdaSZbigniew Bodek 	/* [0x0] Completion controller configuration */
225*49b49cdaSZbigniew Bodek 	uint32_t cfg_1c;
226*49b49cdaSZbigniew Bodek 	/* [0x4] Completion controller coalescing configuration */
227*49b49cdaSZbigniew Bodek 	uint32_t cfg_coal;
228*49b49cdaSZbigniew Bodek 	/* [0x8] Completion controller application acknowledge configuration */
229*49b49cdaSZbigniew Bodek 	uint32_t cfg_application_ack;
230*49b49cdaSZbigniew Bodek 	uint32_t rsrvd[61];
231*49b49cdaSZbigniew Bodek };
232*49b49cdaSZbigniew Bodek struct udma_m2s_stat {
233*49b49cdaSZbigniew Bodek 	/* [0x0] Statistics counters configuration */
234*49b49cdaSZbigniew Bodek 	uint32_t cfg_st;
235*49b49cdaSZbigniew Bodek 	/* [0x4] Counting number of descriptors with First-bit set. */
236*49b49cdaSZbigniew Bodek 	uint32_t tx_pkt;
237*49b49cdaSZbigniew Bodek 	/*
238*49b49cdaSZbigniew Bodek 	 * [0x8] Counting the net length of the data buffers [64-bit]
239*49b49cdaSZbigniew Bodek 	 * Should be read before tx_bytes_high
240*49b49cdaSZbigniew Bodek 	 */
241*49b49cdaSZbigniew Bodek 	uint32_t tx_bytes_low;
242*49b49cdaSZbigniew Bodek 	/*
243*49b49cdaSZbigniew Bodek 	 * [0xc] Counting the net length of the data buffers [64-bit],
244*49b49cdaSZbigniew Bodek 	 * Should be read after tx_bytes_low (value is sampled when reading
245*49b49cdaSZbigniew Bodek 	 * Should be read before tx_bytes_low
246*49b49cdaSZbigniew Bodek 	 */
247*49b49cdaSZbigniew Bodek 	uint32_t tx_bytes_high;
248*49b49cdaSZbigniew Bodek 	/* [0x10] Total number of descriptors read from the host memory */
249*49b49cdaSZbigniew Bodek 	uint32_t prefed_desc;
250*49b49cdaSZbigniew Bodek 	/* [0x14] Number of packets read from the unack FIFO */
251*49b49cdaSZbigniew Bodek 	uint32_t comp_pkt;
252*49b49cdaSZbigniew Bodek 	/* [0x18] Number of descriptors written into the completion ring */
253*49b49cdaSZbigniew Bodek 	uint32_t comp_desc;
254*49b49cdaSZbigniew Bodek 	/*
255*49b49cdaSZbigniew Bodek 	 * [0x1c] Number of acknowledged packets.
256*49b49cdaSZbigniew Bodek 	 * (acknowledge received from the stream interface)
257*49b49cdaSZbigniew Bodek 	 */
258*49b49cdaSZbigniew Bodek 	uint32_t ack_pkts;
259*49b49cdaSZbigniew Bodek 	uint32_t rsrvd[56];
260*49b49cdaSZbigniew Bodek };
261*49b49cdaSZbigniew Bodek struct udma_m2s_feature {
262*49b49cdaSZbigniew Bodek 	/*
263*49b49cdaSZbigniew Bodek 	 * [0x0] M2S Feature register.
264*49b49cdaSZbigniew Bodek 	 * M2S instantiation parameters
265*49b49cdaSZbigniew Bodek 	 */
266*49b49cdaSZbigniew Bodek 	uint32_t reg_1;
267*49b49cdaSZbigniew Bodek 	/* [0x4] Reserved M2S feature register */
268*49b49cdaSZbigniew Bodek 	uint32_t reg_2;
269*49b49cdaSZbigniew Bodek 	/*
270*49b49cdaSZbigniew Bodek 	 * [0x8] M2S Feature register.
271*49b49cdaSZbigniew Bodek 	 * M2S instantiation parameters
272*49b49cdaSZbigniew Bodek 	 */
273*49b49cdaSZbigniew Bodek 	uint32_t reg_3;
274*49b49cdaSZbigniew Bodek 	/*
275*49b49cdaSZbigniew Bodek 	 * [0xc] M2S Feature register.
276*49b49cdaSZbigniew Bodek 	 * M2S instantiation parameters
277*49b49cdaSZbigniew Bodek 	 */
278*49b49cdaSZbigniew Bodek 	uint32_t reg_4;
279*49b49cdaSZbigniew Bodek 	/*
280*49b49cdaSZbigniew Bodek 	 * [0x10] M2S Feature register.
281*49b49cdaSZbigniew Bodek 	 * M2S instantiation parameters
282*49b49cdaSZbigniew Bodek 	 */
283*49b49cdaSZbigniew Bodek 	uint32_t reg_5;
284*49b49cdaSZbigniew Bodek 	uint32_t rsrvd[59];
285*49b49cdaSZbigniew Bodek };
286*49b49cdaSZbigniew Bodek struct udma_m2s_q {
287*49b49cdaSZbigniew Bodek 	uint32_t rsrvd_0[8];
288*49b49cdaSZbigniew Bodek 	/* [0x20] M2S descriptor ring configuration */
289*49b49cdaSZbigniew Bodek 	uint32_t cfg;
290*49b49cdaSZbigniew Bodek 	/* [0x24] M2S descriptor ring status and information */
291*49b49cdaSZbigniew Bodek 	uint32_t status;
292*49b49cdaSZbigniew Bodek 	/* [0x28] TX Descriptor Ring Base Pointer [31:4] */
293*49b49cdaSZbigniew Bodek 	uint32_t tdrbp_low;
294*49b49cdaSZbigniew Bodek 	/* [0x2c] TX Descriptor Ring Base Pointer [63:32] */
295*49b49cdaSZbigniew Bodek 	uint32_t tdrbp_high;
296*49b49cdaSZbigniew Bodek 	/*
297*49b49cdaSZbigniew Bodek 	 * [0x30] TX Descriptor Ring Length[23:2]
298*49b49cdaSZbigniew Bodek 	 */
299*49b49cdaSZbigniew Bodek 	uint32_t tdrl;
300*49b49cdaSZbigniew Bodek 	/* [0x34] TX Descriptor Ring Head Pointer */
301*49b49cdaSZbigniew Bodek 	uint32_t tdrhp;
302*49b49cdaSZbigniew Bodek 	/* [0x38] Tx Descriptor Tail Pointer increment */
303*49b49cdaSZbigniew Bodek 	uint32_t tdrtp_inc;
304*49b49cdaSZbigniew Bodek 	/* [0x3c] Tx Descriptor Tail Pointer */
305*49b49cdaSZbigniew Bodek 	uint32_t tdrtp;
306*49b49cdaSZbigniew Bodek 	/* [0x40] TX Descriptor Current Pointer */
307*49b49cdaSZbigniew Bodek 	uint32_t tdcp;
308*49b49cdaSZbigniew Bodek 	/* [0x44] Tx Completion Ring Base Pointer [31:4] */
309*49b49cdaSZbigniew Bodek 	uint32_t tcrbp_low;
310*49b49cdaSZbigniew Bodek 	/* [0x48] TX Completion Ring Base Pointer [63:32] */
311*49b49cdaSZbigniew Bodek 	uint32_t tcrbp_high;
312*49b49cdaSZbigniew Bodek 	/* [0x4c] TX Completion Ring Head Pointer */
313*49b49cdaSZbigniew Bodek 	uint32_t tcrhp;
314*49b49cdaSZbigniew Bodek 	/*
315*49b49cdaSZbigniew Bodek 	 * [0x50] Tx Completion Ring Head Pointer internal (Before the
316*49b49cdaSZbigniew Bodek 	 * coalescing FIFO)
317*49b49cdaSZbigniew Bodek 	 */
318*49b49cdaSZbigniew Bodek 	uint32_t tcrhp_internal;
319*49b49cdaSZbigniew Bodek 	uint32_t rsrvd_1[3];
320*49b49cdaSZbigniew Bodek 	/* [0x60] Rate limit configuration */
321*49b49cdaSZbigniew Bodek 	struct udma_rlimit_common rlimit;
322*49b49cdaSZbigniew Bodek 	uint32_t rsrvd_2[2];
323*49b49cdaSZbigniew Bodek 	/* [0x80] DWRR scheduler configuration */
324*49b49cdaSZbigniew Bodek 	uint32_t dwrr_cfg_1;
325*49b49cdaSZbigniew Bodek 	/* [0x84] DWRR scheduler configuration */
326*49b49cdaSZbigniew Bodek 	uint32_t dwrr_cfg_2;
327*49b49cdaSZbigniew Bodek 	/* [0x88] DWRR scheduler configuration */
328*49b49cdaSZbigniew Bodek 	uint32_t dwrr_cfg_3;
329*49b49cdaSZbigniew Bodek 	/* [0x8c] DWRR scheduler software control */
330*49b49cdaSZbigniew Bodek 	uint32_t dwrr_sw_ctrl;
331*49b49cdaSZbigniew Bodek 	uint32_t rsrvd_3[4];
332*49b49cdaSZbigniew Bodek 	/* [0xa0] Completion controller configuration */
333*49b49cdaSZbigniew Bodek 	uint32_t comp_cfg;
334*49b49cdaSZbigniew Bodek 	uint32_t rsrvd_4[3];
335*49b49cdaSZbigniew Bodek 	/* [0xb0] SW control  */
336*49b49cdaSZbigniew Bodek 	uint32_t q_sw_ctrl;
337*49b49cdaSZbigniew Bodek 	uint32_t rsrvd_5[3];
338*49b49cdaSZbigniew Bodek 	/* [0xc0] Number of M2S Tx packets after the scheduler */
339*49b49cdaSZbigniew Bodek 	uint32_t q_tx_pkt;
340*49b49cdaSZbigniew Bodek 	uint32_t rsrvd[975];
341*49b49cdaSZbigniew Bodek };
342*49b49cdaSZbigniew Bodek 
343*49b49cdaSZbigniew Bodek struct udma_m2s_regs {
344*49b49cdaSZbigniew Bodek 	uint32_t rsrvd_0[64];
345*49b49cdaSZbigniew Bodek 	struct udma_axi_m2s axi_m2s;                     /* [0x100] */
346*49b49cdaSZbigniew Bodek 	struct udma_m2s m2s;                             /* [0x200] */
347*49b49cdaSZbigniew Bodek 	struct udma_m2s_rd m2s_rd;                       /* [0x300] */
348*49b49cdaSZbigniew Bodek 	struct udma_m2s_dwrr m2s_dwrr;                   /* [0x340] */
349*49b49cdaSZbigniew Bodek 	struct udma_m2s_rate_limiter m2s_rate_limiter;   /* [0x380] */
350*49b49cdaSZbigniew Bodek 	struct udma_m2s_stream_rate_limiter m2s_stream_rate_limiter; /* [0x3c0] */
351*49b49cdaSZbigniew Bodek 	struct udma_m2s_comp m2s_comp;                   /* [0x400] */
352*49b49cdaSZbigniew Bodek 	struct udma_m2s_stat m2s_stat;                   /* [0x500] */
353*49b49cdaSZbigniew Bodek 	struct udma_m2s_feature m2s_feature;             /* [0x600] */
354*49b49cdaSZbigniew Bodek 	uint32_t rsrvd_1[576];
355*49b49cdaSZbigniew Bodek 	struct udma_m2s_q m2s_q[4];                      /* [0x1000] */
356*49b49cdaSZbigniew Bodek };
357*49b49cdaSZbigniew Bodek 
358*49b49cdaSZbigniew Bodek 
359*49b49cdaSZbigniew Bodek /*
360*49b49cdaSZbigniew Bodek * Registers Fields
361*49b49cdaSZbigniew Bodek */
362*49b49cdaSZbigniew Bodek 
363*49b49cdaSZbigniew Bodek 
364*49b49cdaSZbigniew Bodek /**** comp_wr_cfg_1 register ****/
365*49b49cdaSZbigniew Bodek /* AXI write  ID (AWID) */
366*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_COMP_WR_CFG_1_AWID_MASK 0x000000FF
367*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_COMP_WR_CFG_1_AWID_SHIFT 0
368*49b49cdaSZbigniew Bodek /* Cache Type */
369*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_COMP_WR_CFG_1_AWCACHE_MASK 0x000F0000
370*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_COMP_WR_CFG_1_AWCACHE_SHIFT 16
371*49b49cdaSZbigniew Bodek /* Burst type */
372*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_COMP_WR_CFG_1_AWBURST_MASK 0x03000000
373*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_COMP_WR_CFG_1_AWBURST_SHIFT 24
374*49b49cdaSZbigniew Bodek 
375*49b49cdaSZbigniew Bodek /**** comp_wr_cfg_2 register ****/
376*49b49cdaSZbigniew Bodek /* User extension */
377*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_COMP_WR_CFG_2_AWUSER_MASK 0x000FFFFF
378*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_COMP_WR_CFG_2_AWUSER_SHIFT 0
379*49b49cdaSZbigniew Bodek /* Bus size, 128-bit */
380*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_COMP_WR_CFG_2_AWSIZE_MASK 0x00700000
381*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_COMP_WR_CFG_2_AWSIZE_SHIFT 20
382*49b49cdaSZbigniew Bodek /*
383*49b49cdaSZbigniew Bodek  * AXI Master QoS.
384*49b49cdaSZbigniew Bodek  * Used for arbitration between AXI masters
385*49b49cdaSZbigniew Bodek  */
386*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_COMP_WR_CFG_2_AWQOS_MASK 0x07000000
387*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_COMP_WR_CFG_2_AWQOS_SHIFT 24
388*49b49cdaSZbigniew Bodek /* Protection Type */
389*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_COMP_WR_CFG_2_AWPROT_MASK 0x70000000
390*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_COMP_WR_CFG_2_AWPROT_SHIFT 28
391*49b49cdaSZbigniew Bodek 
392*49b49cdaSZbigniew Bodek /**** data_rd_cfg_1 register ****/
393*49b49cdaSZbigniew Bodek /* AXI read  ID (ARID) */
394*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_1_ARID_MASK 0x000000FF
395*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_1_ARID_SHIFT 0
396*49b49cdaSZbigniew Bodek /* Cache Type */
397*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_1_ARCACHE_MASK 0x000F0000
398*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_1_ARCACHE_SHIFT 16
399*49b49cdaSZbigniew Bodek /* Burst type */
400*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_1_ARBURST_MASK 0x03000000
401*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_1_ARBURST_SHIFT 24
402*49b49cdaSZbigniew Bodek 
403*49b49cdaSZbigniew Bodek /**** data_rd_cfg_2 register ****/
404*49b49cdaSZbigniew Bodek /* User extension */
405*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_2_ARUSER_MASK 0x000FFFFF
406*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_2_ARUSER_SHIFT 0
407*49b49cdaSZbigniew Bodek /* Bus size, 128-bit */
408*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_2_ARSIZE_MASK 0x00700000
409*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_2_ARSIZE_SHIFT 20
410*49b49cdaSZbigniew Bodek /*
411*49b49cdaSZbigniew Bodek  * AXI Master QoS.
412*49b49cdaSZbigniew Bodek  * Used for arbitration between AXI masters
413*49b49cdaSZbigniew Bodek  */
414*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_2_ARQOS_MASK 0x07000000
415*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_2_ARQOS_SHIFT 24
416*49b49cdaSZbigniew Bodek /* Protection Type */
417*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_2_ARPROT_MASK 0x70000000
418*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_2_ARPROT_SHIFT 28
419*49b49cdaSZbigniew Bodek 
420*49b49cdaSZbigniew Bodek /**** desc_rd_cfg_1 register ****/
421*49b49cdaSZbigniew Bodek /* AXI read  ID (ARID) */
422*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_1_ARID_MASK 0x000000FF
423*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_1_ARID_SHIFT 0
424*49b49cdaSZbigniew Bodek /* Cache Type */
425*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_1_ARCACHE_MASK 0x000F0000
426*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_1_ARCACHE_SHIFT 16
427*49b49cdaSZbigniew Bodek /* Burst type */
428*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_1_ARBURST_MASK 0x03000000
429*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_1_ARBURST_SHIFT 24
430*49b49cdaSZbigniew Bodek 
431*49b49cdaSZbigniew Bodek /**** desc_rd_cfg_2 register ****/
432*49b49cdaSZbigniew Bodek /* User extension */
433*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_2_ARUSER_MASK 0x000FFFFF
434*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_2_ARUSER_SHIFT 0
435*49b49cdaSZbigniew Bodek /* Bus size, 128-bit */
436*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_2_ARSIZE_MASK 0x00700000
437*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_2_ARSIZE_SHIFT 20
438*49b49cdaSZbigniew Bodek /*
439*49b49cdaSZbigniew Bodek  * AXI Master QoS
440*49b49cdaSZbigniew Bodek  * Used for arbitration between AXI masters
441*49b49cdaSZbigniew Bodek  */
442*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_2_ARQOS_MASK 0x07000000
443*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_2_ARQOS_SHIFT 24
444*49b49cdaSZbigniew Bodek /* Protection Type */
445*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_2_ARPROT_MASK 0x70000000
446*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_2_ARPROT_SHIFT 28
447*49b49cdaSZbigniew Bodek 
448*49b49cdaSZbigniew Bodek /**** data_rd_cfg register ****/
449*49b49cdaSZbigniew Bodek /*
450*49b49cdaSZbigniew Bodek  * Defines the maximum number of AXI beats for a single AXI burst.
451*49b49cdaSZbigniew Bodek  * This value is used for a burst split decision.
452*49b49cdaSZbigniew Bodek  */
453*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_MAX_AXI_BEATS_MASK 0x000000FF
454*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_MAX_AXI_BEATS_SHIFT 0
455*49b49cdaSZbigniew Bodek /*
456*49b49cdaSZbigniew Bodek  * Enable breaking data read request.
457*49b49cdaSZbigniew Bodek  * Aligned to max_AXI_beats when the total read size is less than max_AXI_beats
458*49b49cdaSZbigniew Bodek  */
459*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_ALWAYS_BREAK_ON_MAX_BOUDRY (1 << 16)
460*49b49cdaSZbigniew Bodek 
461*49b49cdaSZbigniew Bodek /**** desc_rd_cfg_3 register ****/
462*49b49cdaSZbigniew Bodek /*
463*49b49cdaSZbigniew Bodek  * Defines the maximum number of AXI beats for a single AXI burst.
464*49b49cdaSZbigniew Bodek  * This value is used for a burst split decision.
465*49b49cdaSZbigniew Bodek  * Maximum burst size for reading data( in AXI beats, 128-bits)
466*49b49cdaSZbigniew Bodek  * (default – 16 beats, 256 bytes)
467*49b49cdaSZbigniew Bodek  */
468*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_3_MAX_AXI_BEATS_MASK 0x000000FF
469*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_3_MAX_AXI_BEATS_SHIFT 0
470*49b49cdaSZbigniew Bodek /*
471*49b49cdaSZbigniew Bodek  * Enable breaking descriptor read request.
472*49b49cdaSZbigniew Bodek  * Aligned to max_AXI_beats when the total read size is less than max_AXI_beats.
473*49b49cdaSZbigniew Bodek  */
474*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_3_ALWAYS_BREAK_ON_MAX_BOUDRY (1 << 16)
475*49b49cdaSZbigniew Bodek 
476*49b49cdaSZbigniew Bodek /**** desc_wr_cfg_1 register ****/
477*49b49cdaSZbigniew Bodek /*
478*49b49cdaSZbigniew Bodek  * Defines the maximum number of AXI beats for a single AXI burst.
479*49b49cdaSZbigniew Bodek  * This value is used for a burst split decision.
480*49b49cdaSZbigniew Bodek  */
481*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_WR_CFG_1_MAX_AXI_BEATS_MASK 0x000000FF
482*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_WR_CFG_1_MAX_AXI_BEATS_SHIFT 0
483*49b49cdaSZbigniew Bodek /*
484*49b49cdaSZbigniew Bodek  * Minimum burst for writing completion descriptors.
485*49b49cdaSZbigniew Bodek  * Defined in AXI beats
486*49b49cdaSZbigniew Bodek  * 4 Descriptors per beat.
487*49b49cdaSZbigniew Bodek  * Value must be aligned to cache lines (64 bytes).
488*49b49cdaSZbigniew Bodek  * Default value is 2 cache lines, 32 descriptors, 8 beats.
489*49b49cdaSZbigniew Bodek  */
490*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_WR_CFG_1_MIN_AXI_BEATS_MASK 0x00FF0000
491*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_WR_CFG_1_MIN_AXI_BEATS_SHIFT 16
492*49b49cdaSZbigniew Bodek 
493*49b49cdaSZbigniew Bodek /**** ostand_cfg register ****/
494*49b49cdaSZbigniew Bodek /* Maximum number of outstanding data reads to the AXI (AXI transactions) */
495*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_OSTAND_CFG_MAX_DATA_RD_MASK 0x0000003F
496*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_OSTAND_CFG_MAX_DATA_RD_SHIFT 0
497*49b49cdaSZbigniew Bodek /*
498*49b49cdaSZbigniew Bodek  * Maximum number of outstanding descriptor reads to the AXI (AXI transactions)
499*49b49cdaSZbigniew Bodek  */
500*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_OSTAND_CFG_MAX_DESC_RD_MASK 0x00003F00
501*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_OSTAND_CFG_MAX_DESC_RD_SHIFT 8
502*49b49cdaSZbigniew Bodek /*
503*49b49cdaSZbigniew Bodek  * Maximum number of outstanding descriptor writes to the AXI (AXI transactions)
504*49b49cdaSZbigniew Bodek  */
505*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_OSTAND_CFG_MAX_COMP_REQ_MASK 0x003F0000
506*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_OSTAND_CFG_MAX_COMP_REQ_SHIFT 16
507*49b49cdaSZbigniew Bodek /*
508*49b49cdaSZbigniew Bodek  * Maximum number of outstanding data beats for descriptor write to AXI (AXI
509*49b49cdaSZbigniew Bodek  * beats)
510*49b49cdaSZbigniew Bodek  */
511*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_OSTAND_CFG_MAX_COMP_DATA_WR_MASK 0xFF000000
512*49b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_OSTAND_CFG_MAX_COMP_DATA_WR_SHIFT 24
513*49b49cdaSZbigniew Bodek 
514*49b49cdaSZbigniew Bodek /**** state register ****/
515*49b49cdaSZbigniew Bodek /* Completion control */
516*49b49cdaSZbigniew Bodek #define UDMA_M2S_STATE_COMP_CTRL_MASK 0x00000003
517*49b49cdaSZbigniew Bodek #define UDMA_M2S_STATE_COMP_CTRL_SHIFT 0
518*49b49cdaSZbigniew Bodek /* Stream interface */
519*49b49cdaSZbigniew Bodek #define UDMA_M2S_STATE_STREAM_IF_MASK 0x00000030
520*49b49cdaSZbigniew Bodek #define UDMA_M2S_STATE_STREAM_IF_SHIFT 4
521*49b49cdaSZbigniew Bodek /* Data read control */
522*49b49cdaSZbigniew Bodek #define UDMA_M2S_STATE_DATA_RD_CTRL_MASK 0x00000300
523*49b49cdaSZbigniew Bodek #define UDMA_M2S_STATE_DATA_RD_CTRL_SHIFT 8
524*49b49cdaSZbigniew Bodek /* Descriptor prefetch */
525*49b49cdaSZbigniew Bodek #define UDMA_M2S_STATE_DESC_PREF_MASK 0x00003000
526*49b49cdaSZbigniew Bodek #define UDMA_M2S_STATE_DESC_PREF_SHIFT 12
527*49b49cdaSZbigniew Bodek 
528*49b49cdaSZbigniew Bodek /**** change_state register ****/
529*49b49cdaSZbigniew Bodek /* Start normal operation */
530*49b49cdaSZbigniew Bodek #define UDMA_M2S_CHANGE_STATE_NORMAL (1 << 0)
531*49b49cdaSZbigniew Bodek /* Stop normal operation */
532*49b49cdaSZbigniew Bodek #define UDMA_M2S_CHANGE_STATE_DIS    (1 << 1)
533*49b49cdaSZbigniew Bodek /*
534*49b49cdaSZbigniew Bodek  * Stop all machines.
535*49b49cdaSZbigniew Bodek  * (Prefetch, scheduling, completion and stream interface)
536*49b49cdaSZbigniew Bodek  */
537*49b49cdaSZbigniew Bodek #define UDMA_M2S_CHANGE_STATE_ABORT  (1 << 2)
538*49b49cdaSZbigniew Bodek 
539*49b49cdaSZbigniew Bodek /**** err_log_mask register ****/
540*49b49cdaSZbigniew Bodek /*
541*49b49cdaSZbigniew Bodek  * Mismatch of packet serial number.
542*49b49cdaSZbigniew Bodek  * (between first packet in the unacknowledged FIFO and received ack from the
543*49b49cdaSZbigniew Bodek  * stream)
544*49b49cdaSZbigniew Bodek  */
545*49b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_COMP_PKT_MISMATCH (1 << 0)
546*49b49cdaSZbigniew Bodek /* Parity error */
547*49b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_STREAM_AXI_PARITY (1 << 1)
548*49b49cdaSZbigniew Bodek /* AXI response error */
549*49b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_STREAM_AXI_RESPONSE (1 << 2)
550*49b49cdaSZbigniew Bodek /* AXI timeout (ack not received) */
551*49b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_STREAM_AXI_TOUT (1 << 3)
552*49b49cdaSZbigniew Bodek /* Parity error */
553*49b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_COMP_AXI_PARITY (1 << 4)
554*49b49cdaSZbigniew Bodek /* AXI response error */
555*49b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_COMP_AXI_RESPONSE (1 << 5)
556*49b49cdaSZbigniew Bodek /* AXI timeout */
557*49b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_COMP_AXI_TOUT (1 << 6)
558*49b49cdaSZbigniew Bodek /* Parity error */
559*49b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_DATA_AXI_PARITY (1 << 7)
560*49b49cdaSZbigniew Bodek /* AXI response error */
561*49b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_DATA_AXI_RESPONSE (1 << 8)
562*49b49cdaSZbigniew Bodek /* AXI timeout */
563*49b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_DATA_AXI_TOUT (1 << 9)
564*49b49cdaSZbigniew Bodek /* Parity error */
565*49b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_PREF_AXI_PARITY (1 << 10)
566*49b49cdaSZbigniew Bodek /* AXI response error */
567*49b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_PREF_AXI_RESPONSE (1 << 11)
568*49b49cdaSZbigniew Bodek /* AXI timeout */
569*49b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_PREF_AXI_TOUT (1 << 12)
570*49b49cdaSZbigniew Bodek /* Packet length error */
571*49b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_PREF_PKT_LEN_OVERFLOW (1 << 13)
572*49b49cdaSZbigniew Bodek /* Maximum number of descriptors per packet error */
573*49b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_PREF_MAX_DESC_CNT (1 << 14)
574*49b49cdaSZbigniew Bodek /* Error in first bit indication of the descriptor */
575*49b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_PREF_FIRST (1 << 15)
576*49b49cdaSZbigniew Bodek /* Error in last bit indication of the descriptor */
577*49b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_PREF_LAST (1 << 16)
578*49b49cdaSZbigniew Bodek /* Ring_ID error */
579*49b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_PREF_RING_ID (1 << 17)
580*49b49cdaSZbigniew Bodek /* Data buffer parity error */
581*49b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_DATA_BUFF_PARITY (1 << 18)
582*49b49cdaSZbigniew Bodek /* Internal error */
583*49b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_INTERNAL_MASK 0xFFF80000
584*49b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_INTERNAL_SHIFT 19
585*49b49cdaSZbigniew Bodek 
586*49b49cdaSZbigniew Bodek /**** clear_err_log register ****/
587*49b49cdaSZbigniew Bodek /* Clear error log */
588*49b49cdaSZbigniew Bodek #define UDMA_M2S_CLEAR_ERR_LOG_CLEAR (1 << 0)
589*49b49cdaSZbigniew Bodek 
590*49b49cdaSZbigniew Bodek /**** data_fifo_status register ****/
591*49b49cdaSZbigniew Bodek /* FIFO used indication */
592*49b49cdaSZbigniew Bodek #define UDMA_M2S_DATA_FIFO_STATUS_USED_MASK 0x0000FFFF
593*49b49cdaSZbigniew Bodek #define UDMA_M2S_DATA_FIFO_STATUS_USED_SHIFT 0
594*49b49cdaSZbigniew Bodek /* FIFO empty indication */
595*49b49cdaSZbigniew Bodek #define UDMA_M2S_DATA_FIFO_STATUS_EMPTY (1 << 24)
596*49b49cdaSZbigniew Bodek /* FIFO full indication */
597*49b49cdaSZbigniew Bodek #define UDMA_M2S_DATA_FIFO_STATUS_FULL (1 << 28)
598*49b49cdaSZbigniew Bodek 
599*49b49cdaSZbigniew Bodek /**** header_fifo_status register ****/
600*49b49cdaSZbigniew Bodek /* FIFO used indication */
601*49b49cdaSZbigniew Bodek #define UDMA_M2S_HEADER_FIFO_STATUS_USED_MASK 0x0000FFFF
602*49b49cdaSZbigniew Bodek #define UDMA_M2S_HEADER_FIFO_STATUS_USED_SHIFT 0
603*49b49cdaSZbigniew Bodek /* FIFO empty indication */
604*49b49cdaSZbigniew Bodek #define UDMA_M2S_HEADER_FIFO_STATUS_EMPTY (1 << 24)
605*49b49cdaSZbigniew Bodek /* FIFO full indication */
606*49b49cdaSZbigniew Bodek #define UDMA_M2S_HEADER_FIFO_STATUS_FULL (1 << 28)
607*49b49cdaSZbigniew Bodek 
608*49b49cdaSZbigniew Bodek /**** unack_fifo_status register ****/
609*49b49cdaSZbigniew Bodek /* FIFO used indication */
610*49b49cdaSZbigniew Bodek #define UDMA_M2S_UNACK_FIFO_STATUS_USED_MASK 0x0000FFFF
611*49b49cdaSZbigniew Bodek #define UDMA_M2S_UNACK_FIFO_STATUS_USED_SHIFT 0
612*49b49cdaSZbigniew Bodek /* FIFO empty indication */
613*49b49cdaSZbigniew Bodek #define UDMA_M2S_UNACK_FIFO_STATUS_EMPTY (1 << 24)
614*49b49cdaSZbigniew Bodek /* FIFO full indication */
615*49b49cdaSZbigniew Bodek #define UDMA_M2S_UNACK_FIFO_STATUS_FULL (1 << 28)
616*49b49cdaSZbigniew Bodek 
617*49b49cdaSZbigniew Bodek /**** indirect_ctrl register ****/
618*49b49cdaSZbigniew Bodek /* Selected queue for status read */
619*49b49cdaSZbigniew Bodek #define UDMA_M2S_INDIRECT_CTRL_Q_NUM_MASK 0x00000FFF
620*49b49cdaSZbigniew Bodek #define UDMA_M2S_INDIRECT_CTRL_Q_NUM_SHIFT 0
621*49b49cdaSZbigniew Bodek 
622*49b49cdaSZbigniew Bodek /**** sel_pref_fifo_status register ****/
623*49b49cdaSZbigniew Bodek /* FIFO used indication */
624*49b49cdaSZbigniew Bodek #define UDMA_M2S_SEL_PREF_FIFO_STATUS_USED_MASK 0x0000FFFF
625*49b49cdaSZbigniew Bodek #define UDMA_M2S_SEL_PREF_FIFO_STATUS_USED_SHIFT 0
626*49b49cdaSZbigniew Bodek /* FIFO empty indication */
627*49b49cdaSZbigniew Bodek #define UDMA_M2S_SEL_PREF_FIFO_STATUS_EMPTY (1 << 24)
628*49b49cdaSZbigniew Bodek /* FIFO full indication */
629*49b49cdaSZbigniew Bodek #define UDMA_M2S_SEL_PREF_FIFO_STATUS_FULL (1 << 28)
630*49b49cdaSZbigniew Bodek 
631*49b49cdaSZbigniew Bodek /**** sel_comp_fifo_status register ****/
632*49b49cdaSZbigniew Bodek /* FIFO used indication */
633*49b49cdaSZbigniew Bodek #define UDMA_M2S_SEL_COMP_FIFO_STATUS_USED_MASK 0x0000FFFF
634*49b49cdaSZbigniew Bodek #define UDMA_M2S_SEL_COMP_FIFO_STATUS_USED_SHIFT 0
635*49b49cdaSZbigniew Bodek /* FIFO empty indication */
636*49b49cdaSZbigniew Bodek #define UDMA_M2S_SEL_COMP_FIFO_STATUS_EMPTY (1 << 24)
637*49b49cdaSZbigniew Bodek /* FIFO full indication */
638*49b49cdaSZbigniew Bodek #define UDMA_M2S_SEL_COMP_FIFO_STATUS_FULL (1 << 28)
639*49b49cdaSZbigniew Bodek 
640*49b49cdaSZbigniew Bodek /**** sel_rate_limit_status register ****/
641*49b49cdaSZbigniew Bodek /* Token counter */
642*49b49cdaSZbigniew Bodek #define UDMA_M2S_SEL_RATE_LIMIT_STATUS_TOKEN_CNT_MASK 0x00FFFFFF
643*49b49cdaSZbigniew Bodek #define UDMA_M2S_SEL_RATE_LIMIT_STATUS_TOKEN_CNT_SHIFT 0
644*49b49cdaSZbigniew Bodek 
645*49b49cdaSZbigniew Bodek /**** sel_dwrr_status register ****/
646*49b49cdaSZbigniew Bodek /* Deficit counter */
647*49b49cdaSZbigniew Bodek #define UDMA_M2S_SEL_DWRR_STATUS_DEFICIT_CNT_MASK 0x00FFFFFF
648*49b49cdaSZbigniew Bodek #define UDMA_M2S_SEL_DWRR_STATUS_DEFICIT_CNT_SHIFT 0
649*49b49cdaSZbigniew Bodek 
650*49b49cdaSZbigniew Bodek /**** cfg_len register ****/
651*49b49cdaSZbigniew Bodek /* Maximum packet size for the M2S */
652*49b49cdaSZbigniew Bodek #define UDMA_M2S_CFG_LEN_MAX_PKT_SIZE_MASK 0x000FFFFF
653*49b49cdaSZbigniew Bodek #define UDMA_M2S_CFG_LEN_MAX_PKT_SIZE_SHIFT 0
654*49b49cdaSZbigniew Bodek /*
655*49b49cdaSZbigniew Bodek  * Length encoding for 64K.
656*49b49cdaSZbigniew Bodek  * 0 - length 0x0000 = 0
657*49b49cdaSZbigniew Bodek  * 1 - length 0x0000 = 64k
658*49b49cdaSZbigniew Bodek  */
659*49b49cdaSZbigniew Bodek #define UDMA_M2S_CFG_LEN_ENCODE_64K  (1 << 24)
660*49b49cdaSZbigniew Bodek 
661*49b49cdaSZbigniew Bodek /**** stream_cfg register ****/
662*49b49cdaSZbigniew Bodek /*
663*49b49cdaSZbigniew Bodek  * Disables the stream interface operation.
664*49b49cdaSZbigniew Bodek  * Changing to 1 stops at the end of packet transmission.
665*49b49cdaSZbigniew Bodek  */
666*49b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_CFG_DISABLE  (1 << 0)
667*49b49cdaSZbigniew Bodek /*
668*49b49cdaSZbigniew Bodek  * Configuration of the stream FIFO read control.
669*49b49cdaSZbigniew Bodek  * 0 - Cut through
670*49b49cdaSZbigniew Bodek  * 1 - Threshold based
671*49b49cdaSZbigniew Bodek  */
672*49b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_CFG_RD_MODE  (1 << 1)
673*49b49cdaSZbigniew Bodek /* Minimum number of beats to start packet transmission. */
674*49b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_CFG_RD_TH_MASK 0x0003FF00
675*49b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_CFG_RD_TH_SHIFT 8
676*49b49cdaSZbigniew Bodek 
677*49b49cdaSZbigniew Bodek /**** desc_pref_cfg_1 register ****/
678*49b49cdaSZbigniew Bodek /* Size of the descriptor prefetch FIFO (in descriptors) */
679*49b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DESC_PREF_CFG_1_FIFO_DEPTH_MASK 0x000000FF
680*49b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DESC_PREF_CFG_1_FIFO_DEPTH_SHIFT 0
681*49b49cdaSZbigniew Bodek 
682*49b49cdaSZbigniew Bodek /**** desc_pref_cfg_2 register ****/
683*49b49cdaSZbigniew Bodek /* Maximum number of descriptors per packet */
684*49b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DESC_PREF_CFG_2_MAX_DESC_PER_PKT_MASK 0x0000001F
685*49b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DESC_PREF_CFG_2_MAX_DESC_PER_PKT_SHIFT 0
686*49b49cdaSZbigniew Bodek /*
687*49b49cdaSZbigniew Bodek  * Force RR arbitration in the prefetch arbiter.
688*49b49cdaSZbigniew Bodek  * 0 -Standard arbitration based on queue QoS
689*49b49cdaSZbigniew Bodek  * 1 - Force Round Robin arbitration
690*49b49cdaSZbigniew Bodek  */
691*49b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DESC_PREF_CFG_2_PREF_FORCE_RR (1 << 16)
692*49b49cdaSZbigniew Bodek 
693*49b49cdaSZbigniew Bodek /**** desc_pref_cfg_3 register ****/
694*49b49cdaSZbigniew Bodek /*
695*49b49cdaSZbigniew Bodek  * Minimum descriptor burst size when prefetch FIFO level is below the
696*49b49cdaSZbigniew Bodek  * descriptor prefetch threshold
697*49b49cdaSZbigniew Bodek  * (must be 1)
698*49b49cdaSZbigniew Bodek  */
699*49b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DESC_PREF_CFG_3_MIN_BURST_BELOW_THR_MASK 0x0000000F
700*49b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DESC_PREF_CFG_3_MIN_BURST_BELOW_THR_SHIFT 0
701*49b49cdaSZbigniew Bodek /*
702*49b49cdaSZbigniew Bodek  * Minimum descriptor burst size when prefetch FIFO level is above the
703*49b49cdaSZbigniew Bodek  * descriptor prefetch threshold
704*49b49cdaSZbigniew Bodek  */
705*49b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DESC_PREF_CFG_3_MIN_BURST_ABOVE_THR_MASK 0x000000F0
706*49b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DESC_PREF_CFG_3_MIN_BURST_ABOVE_THR_SHIFT 4
707*49b49cdaSZbigniew Bodek /*
708*49b49cdaSZbigniew Bodek  * Descriptor fetch threshold.
709*49b49cdaSZbigniew Bodek  * Used as a threshold to determine the allowed minimum descriptor burst size.
710*49b49cdaSZbigniew Bodek  * (Must be at least max_desc_per_pkt)
711*49b49cdaSZbigniew Bodek  */
712*49b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DESC_PREF_CFG_3_PREF_THR_MASK 0x0000FF00
713*49b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DESC_PREF_CFG_3_PREF_THR_SHIFT 8
714*49b49cdaSZbigniew Bodek 
715*49b49cdaSZbigniew Bodek /**** data_cfg register ****/
716*49b49cdaSZbigniew Bodek /*
717*49b49cdaSZbigniew Bodek  * Maximum number of data beats in the data read FIFO.
718*49b49cdaSZbigniew Bodek  * Defined based on data FIFO size
719*49b49cdaSZbigniew Bodek  * (default FIFO size 2KB → 128 beats)
720*49b49cdaSZbigniew Bodek  */
721*49b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DATA_CFG_DATA_FIFO_DEPTH_MASK 0x000003FF
722*49b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DATA_CFG_DATA_FIFO_DEPTH_SHIFT 0
723*49b49cdaSZbigniew Bodek /*
724*49b49cdaSZbigniew Bodek  * Maximum number of packets in the data read FIFO.
725*49b49cdaSZbigniew Bodek  * Defined based on header FIFO size
726*49b49cdaSZbigniew Bodek  */
727*49b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DATA_CFG_MAX_PKT_LIMIT_MASK 0x00FF0000
728*49b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DATA_CFG_MAX_PKT_LIMIT_SHIFT 16
729*49b49cdaSZbigniew Bodek 
730*49b49cdaSZbigniew Bodek /**** cfg_sched register ****/
731*49b49cdaSZbigniew Bodek /*
732*49b49cdaSZbigniew Bodek  * Enable the DWRR scheduler.
733*49b49cdaSZbigniew Bodek  * If this bit is 0, queues with same QoS will be served with RR scheduler.
734*49b49cdaSZbigniew Bodek  */
735*49b49cdaSZbigniew Bodek #define UDMA_M2S_DWRR_CFG_SCHED_EN_DWRR (1 << 0)
736*49b49cdaSZbigniew Bodek /*
737*49b49cdaSZbigniew Bodek  * Scheduler operation mode.
738*49b49cdaSZbigniew Bodek  * 0 - Byte mode
739*49b49cdaSZbigniew Bodek  * 1 - Packet mode
740*49b49cdaSZbigniew Bodek  */
741*49b49cdaSZbigniew Bodek #define UDMA_M2S_DWRR_CFG_SCHED_PKT_MODE_EN (1 << 4)
742*49b49cdaSZbigniew Bodek /*
743*49b49cdaSZbigniew Bodek  * Enable incrementing the weight factor between DWRR iterations.
744*49b49cdaSZbigniew Bodek  * 00 - Don't increase the increment factor.
745*49b49cdaSZbigniew Bodek  * 01 - Increment once
746*49b49cdaSZbigniew Bodek  * 10 - Increment exponential
747*49b49cdaSZbigniew Bodek  * 11 - Reserved
748*49b49cdaSZbigniew Bodek  */
749*49b49cdaSZbigniew Bodek #define UDMA_M2S_DWRR_CFG_SCHED_WEIGHT_INC_MASK 0x00000300
750*49b49cdaSZbigniew Bodek #define UDMA_M2S_DWRR_CFG_SCHED_WEIGHT_INC_SHIFT 8
751*49b49cdaSZbigniew Bodek /*
752*49b49cdaSZbigniew Bodek  * Increment factor power of 2.
753*49b49cdaSZbigniew Bodek  * 7 --> 128 bytes
754*49b49cdaSZbigniew Bodek  * This is the factor used to multiply the weight.
755*49b49cdaSZbigniew Bodek  */
756*49b49cdaSZbigniew Bodek #define UDMA_M2S_DWRR_CFG_SCHED_INC_FACTOR_MASK 0x000F0000
757*49b49cdaSZbigniew Bodek #define UDMA_M2S_DWRR_CFG_SCHED_INC_FACTOR_SHIFT 16
758*49b49cdaSZbigniew Bodek 
759*49b49cdaSZbigniew Bodek /**** ctrl_deficit_cnt register ****/
760*49b49cdaSZbigniew Bodek /*
761*49b49cdaSZbigniew Bodek  * Init value for the deficit counter.
762*49b49cdaSZbigniew Bodek  * Initializes the deficit counters of all queues to this value any time this
763*49b49cdaSZbigniew Bodek  * register is written.
764*49b49cdaSZbigniew Bodek  */
765*49b49cdaSZbigniew Bodek #define UDMA_M2S_DWRR_CTRL_DEFICIT_CNT_INIT_MASK 0x00FFFFFF
766*49b49cdaSZbigniew Bodek #define UDMA_M2S_DWRR_CTRL_DEFICIT_CNT_INIT_SHIFT 0
767*49b49cdaSZbigniew Bodek 
768*49b49cdaSZbigniew Bodek /**** gen_cfg register ****/
769*49b49cdaSZbigniew Bodek /* Size of the basic token fill cycle, system clock cycles */
770*49b49cdaSZbigniew Bodek #define UDMA_M2S_RATE_LIMITER_GEN_CFG_SHORT_CYCLE_SIZE_MASK 0x0000FFFF
771*49b49cdaSZbigniew Bodek #define UDMA_M2S_RATE_LIMITER_GEN_CFG_SHORT_CYCLE_SIZE_SHIFT 0
772*49b49cdaSZbigniew Bodek /*
773*49b49cdaSZbigniew Bodek  * Rate limiter operation mode.
774*49b49cdaSZbigniew Bodek  * 0 - Byte mode
775*49b49cdaSZbigniew Bodek  * 1 - Packet mode
776*49b49cdaSZbigniew Bodek  */
777*49b49cdaSZbigniew Bodek #define UDMA_M2S_RATE_LIMITER_GEN_CFG_PKT_MODE_EN (1 << 24)
778*49b49cdaSZbigniew Bodek 
779*49b49cdaSZbigniew Bodek /**** ctrl_cycle_cnt register ****/
780*49b49cdaSZbigniew Bodek /* Reset the short and long cycle counters. */
781*49b49cdaSZbigniew Bodek #define UDMA_M2S_RATE_LIMITER_CTRL_CYCLE_CNT_RST (1 << 0)
782*49b49cdaSZbigniew Bodek 
783*49b49cdaSZbigniew Bodek /**** ctrl_token register ****/
784*49b49cdaSZbigniew Bodek /*
785*49b49cdaSZbigniew Bodek  * Init value for the token counter.
786*49b49cdaSZbigniew Bodek  * Initializes the token counters of all queues to this value any time this
787*49b49cdaSZbigniew Bodek  * register is written.
788*49b49cdaSZbigniew Bodek  */
789*49b49cdaSZbigniew Bodek #define UDMA_M2S_RATE_LIMITER_CTRL_TOKEN_RST_MASK 0x00FFFFFF
790*49b49cdaSZbigniew Bodek #define UDMA_M2S_RATE_LIMITER_CTRL_TOKEN_RST_SHIFT 0
791*49b49cdaSZbigniew Bodek 
792*49b49cdaSZbigniew Bodek /**** cfg_1s register ****/
793*49b49cdaSZbigniew Bodek /* Maximum number of accumulated bytes in the token counter */
794*49b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_RATE_LIMITER_CFG_1S_MAX_BURST_SIZE_MASK 0x00FFFFFF
795*49b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_RATE_LIMITER_CFG_1S_MAX_BURST_SIZE_SHIFT 0
796*49b49cdaSZbigniew Bodek /* Enable the rate limiter. */
797*49b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_RATE_LIMITER_CFG_1S_EN (1 << 24)
798*49b49cdaSZbigniew Bodek /* Stop token fill. */
799*49b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_RATE_LIMITER_CFG_1S_PAUSE (1 << 25)
800*49b49cdaSZbigniew Bodek 
801*49b49cdaSZbigniew Bodek /**** cfg_cycle register ****/
802*49b49cdaSZbigniew Bodek /* Number of short cycles between token fills */
803*49b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_RATE_LIMITER_CFG_CYCLE_LONG_CYCLE_SIZE_MASK 0x0000FFFF
804*49b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_RATE_LIMITER_CFG_CYCLE_LONG_CYCLE_SIZE_SHIFT 0
805*49b49cdaSZbigniew Bodek 
806*49b49cdaSZbigniew Bodek /**** cfg_token_size_1 register ****/
807*49b49cdaSZbigniew Bodek /* Number of bits to add in each long cycle */
808*49b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_RATE_LIMITER_CFG_TOKEN_SIZE_1_LONG_CYCLE_MASK 0x0007FFFF
809*49b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_RATE_LIMITER_CFG_TOKEN_SIZE_1_LONG_CYCLE_SHIFT 0
810*49b49cdaSZbigniew Bodek 
811*49b49cdaSZbigniew Bodek /**** cfg_token_size_2 register ****/
812*49b49cdaSZbigniew Bodek /* Number of bits to add in each short cycle */
813*49b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_RATE_LIMITER_CFG_TOKEN_SIZE_2_SHORT_CYCLE_MASK 0x0007FFFF
814*49b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_RATE_LIMITER_CFG_TOKEN_SIZE_2_SHORT_CYCLE_SHIFT 0
815*49b49cdaSZbigniew Bodek 
816*49b49cdaSZbigniew Bodek /**** sw_ctrl register ****/
817*49b49cdaSZbigniew Bodek /* Reset the token bucket counter. */
818*49b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_RATE_LIMITER_SW_CTRL_RST_TOKEN_CNT (1 << 0)
819*49b49cdaSZbigniew Bodek 
820*49b49cdaSZbigniew Bodek /**** mask register ****/
821*49b49cdaSZbigniew Bodek /* Mask the external rate limiter. */
822*49b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_RATE_LIMITER_MASK_EXTERNAL_RATE_LIMITER (1 << 0)
823*49b49cdaSZbigniew Bodek /* Mask the internal rate limiter. */
824*49b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_RATE_LIMITER_MASK_INTERNAL_RATE_LIMITER (1 << 1)
825*49b49cdaSZbigniew Bodek /* Mask the external application pause interface. */
826*49b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_RATE_LIMITER_MASK_EXTERNAL_PAUSE (1 << 3)
827*49b49cdaSZbigniew Bodek 
828*49b49cdaSZbigniew Bodek /**** cfg_1c register ****/
829*49b49cdaSZbigniew Bodek /*
830*49b49cdaSZbigniew Bodek  * Completion FIFO size
831*49b49cdaSZbigniew Bodek  *  (descriptors per queue)
832*49b49cdaSZbigniew Bodek  */
833*49b49cdaSZbigniew Bodek #define UDMA_M2S_COMP_CFG_1C_COMP_FIFO_DEPTH_MASK 0x000000FF
834*49b49cdaSZbigniew Bodek #define UDMA_M2S_COMP_CFG_1C_COMP_FIFO_DEPTH_SHIFT 0
835*49b49cdaSZbigniew Bodek /*
836*49b49cdaSZbigniew Bodek  * Unacknowledged FIFO size.
837*49b49cdaSZbigniew Bodek  * (descriptors)
838*49b49cdaSZbigniew Bodek  */
839*49b49cdaSZbigniew Bodek #define UDMA_M2S_COMP_CFG_1C_UNACK_FIFO_DEPTH_MASK 0x0001FF00
840*49b49cdaSZbigniew Bodek #define UDMA_M2S_COMP_CFG_1C_UNACK_FIFO_DEPTH_SHIFT 8
841*49b49cdaSZbigniew Bodek /*
842*49b49cdaSZbigniew Bodek  * Enable promotion.
843*49b49cdaSZbigniew Bodek  * Enable the promotion of the current queue in progress for the completion
844*49b49cdaSZbigniew Bodek  * write scheduler.
845*49b49cdaSZbigniew Bodek  */
846*49b49cdaSZbigniew Bodek #define UDMA_M2S_COMP_CFG_1C_Q_PROMOTION (1 << 24)
847*49b49cdaSZbigniew Bodek /* Force RR arbitration in the completion arbiter */
848*49b49cdaSZbigniew Bodek #define UDMA_M2S_COMP_CFG_1C_FORCE_RR (1 << 25)
849*49b49cdaSZbigniew Bodek /* Minimum number of free completion entries to qualify for promotion */
850*49b49cdaSZbigniew Bodek #define UDMA_M2S_COMP_CFG_1C_Q_FREE_MIN_MASK 0xF0000000
851*49b49cdaSZbigniew Bodek #define UDMA_M2S_COMP_CFG_1C_Q_FREE_MIN_SHIFT 28
852*49b49cdaSZbigniew Bodek 
853*49b49cdaSZbigniew Bodek /**** cfg_application_ack register ****/
854*49b49cdaSZbigniew Bodek /*
855*49b49cdaSZbigniew Bodek  * Acknowledge timeout timer.
856*49b49cdaSZbigniew Bodek  * ACK from the application through the stream interface)
857*49b49cdaSZbigniew Bodek  */
858*49b49cdaSZbigniew Bodek #define UDMA_M2S_COMP_CFG_APPLICATION_ACK_TOUT_MASK 0x00FFFFFF
859*49b49cdaSZbigniew Bodek #define UDMA_M2S_COMP_CFG_APPLICATION_ACK_TOUT_SHIFT 0
860*49b49cdaSZbigniew Bodek 
861*49b49cdaSZbigniew Bodek /**** cfg_st register ****/
862*49b49cdaSZbigniew Bodek /* Use additional length value for all statistics counters. */
863*49b49cdaSZbigniew Bodek #define UDMA_M2S_STAT_CFG_ST_USE_EXTRA_LEN (1 << 0)
864*49b49cdaSZbigniew Bodek 
865*49b49cdaSZbigniew Bodek /**** reg_1 register ****/
866*49b49cdaSZbigniew Bodek /*
867*49b49cdaSZbigniew Bodek  * Read the size of the descriptor prefetch FIFO
868*49b49cdaSZbigniew Bodek  * (descriptors).
869*49b49cdaSZbigniew Bodek  */
870*49b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_1_DESC_PREFERCH_FIFO_DEPTH_MASK 0x000000FF
871*49b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_1_DESC_PREFERCH_FIFO_DEPTH_SHIFT 0
872*49b49cdaSZbigniew Bodek 
873*49b49cdaSZbigniew Bodek /**** reg_3 register ****/
874*49b49cdaSZbigniew Bodek /*
875*49b49cdaSZbigniew Bodek  * Maximum number of data beats in the data read FIFO.
876*49b49cdaSZbigniew Bodek  * Defined based on data FIFO size
877*49b49cdaSZbigniew Bodek  * (default FIFO size 2KB → 128 beats)
878*49b49cdaSZbigniew Bodek  */
879*49b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_3_DATA_FIFO_DEPTH_MASK 0x000003FF
880*49b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_3_DATA_FIFO_DEPTH_SHIFT 0
881*49b49cdaSZbigniew Bodek /*
882*49b49cdaSZbigniew Bodek  * Maximum number of packets in the data read FIFO.
883*49b49cdaSZbigniew Bodek  * Defined based on header FIFO size
884*49b49cdaSZbigniew Bodek  */
885*49b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_3_DATA_RD_MAX_PKT_LIMIT_MASK 0x00FF0000
886*49b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_3_DATA_RD_MAX_PKT_LIMIT_SHIFT 16
887*49b49cdaSZbigniew Bodek 
888*49b49cdaSZbigniew Bodek /**** reg_4 register ****/
889*49b49cdaSZbigniew Bodek /*
890*49b49cdaSZbigniew Bodek  * Size of the completion FIFO of each queue
891*49b49cdaSZbigniew Bodek  * (words)
892*49b49cdaSZbigniew Bodek  */
893*49b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_4_COMP_FIFO_DEPTH_MASK 0x000000FF
894*49b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_4_COMP_FIFO_DEPTH_SHIFT 0
895*49b49cdaSZbigniew Bodek /* Size of the unacknowledged FIFO (descriptors) */
896*49b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_4_COMP_UNACK_FIFO_DEPTH_MASK 0x0001FF00
897*49b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_4_COMP_UNACK_FIFO_DEPTH_SHIFT 8
898*49b49cdaSZbigniew Bodek 
899*49b49cdaSZbigniew Bodek /**** reg_5 register ****/
900*49b49cdaSZbigniew Bodek /* Maximum number of outstanding data reads to AXI */
901*49b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_5_MAX_DATA_RD_OSTAND_MASK 0x0000003F
902*49b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_5_MAX_DATA_RD_OSTAND_SHIFT 0
903*49b49cdaSZbigniew Bodek /* Maximum number of outstanding descriptor reads to AXI */
904*49b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_5_MAX_DESC_RD_OSTAND_MASK 0x00003F00
905*49b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_5_MAX_DESC_RD_OSTAND_SHIFT 8
906*49b49cdaSZbigniew Bodek /*
907*49b49cdaSZbigniew Bodek  * Maximum number of outstanding descriptor writes to AXI.
908*49b49cdaSZbigniew Bodek  * (AXI transactions)
909*49b49cdaSZbigniew Bodek  */
910*49b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_5_MAX_COMP_REQ_MASK 0x003F0000
911*49b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_5_MAX_COMP_REQ_SHIFT 16
912*49b49cdaSZbigniew Bodek /*
913*49b49cdaSZbigniew Bodek  * Maximum number of outstanding data beats for descriptor write to AXI.
914*49b49cdaSZbigniew Bodek  * (AXI beats)
915*49b49cdaSZbigniew Bodek  */
916*49b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_5_MAX_COMP_DATA_WR_OSTAND_MASK 0xFF000000
917*49b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_5_MAX_COMP_DATA_WR_OSTAND_SHIFT 24
918*49b49cdaSZbigniew Bodek 
919*49b49cdaSZbigniew Bodek /**** cfg register ****/
920*49b49cdaSZbigniew Bodek /*
921*49b49cdaSZbigniew Bodek  * Length offset to be used for each packet from this queue.
922*49b49cdaSZbigniew Bodek  * (length offset is used for the scheduler and rate limiter).
923*49b49cdaSZbigniew Bodek  */
924*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_CFG_PKT_LEN_OFFSET_MASK 0x0000FFFF
925*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_CFG_PKT_LEN_OFFSET_SHIFT 0
926*49b49cdaSZbigniew Bodek /*
927*49b49cdaSZbigniew Bodek  * Enable operation of this queue.
928*49b49cdaSZbigniew Bodek  * Start prefetch.
929*49b49cdaSZbigniew Bodek  */
930*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_CFG_EN_PREF       (1 << 16)
931*49b49cdaSZbigniew Bodek /*
932*49b49cdaSZbigniew Bodek  * Enable operation of this queue.
933*49b49cdaSZbigniew Bodek  * Start scheduling.
934*49b49cdaSZbigniew Bodek  */
935*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_CFG_EN_SCHEDULING (1 << 17)
936*49b49cdaSZbigniew Bodek /* Allow prefetch of less than minimum prefetch burst size. */
937*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_CFG_ALLOW_LT_MIN_PREF (1 << 20)
938*49b49cdaSZbigniew Bodek /* Configure the AXI AWCACHE for completion write.  */
939*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_CFG_AXI_AWCACHE_COMP_MASK 0x0F000000
940*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_CFG_AXI_AWCACHE_COMP_SHIFT 24
941*49b49cdaSZbigniew Bodek /*
942*49b49cdaSZbigniew Bodek  * AXI QoS for the selected queue.
943*49b49cdaSZbigniew Bodek  * This value is used in AXI transactions associated with this queue and the
944*49b49cdaSZbigniew Bodek  * prefetch and completion arbiters.
945*49b49cdaSZbigniew Bodek  */
946*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_CFG_AXI_QOS_MASK  0x70000000
947*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_CFG_AXI_QOS_SHIFT 28
948*49b49cdaSZbigniew Bodek 
949*49b49cdaSZbigniew Bodek /**** status register ****/
950*49b49cdaSZbigniew Bodek /* Indicates how many entries are used in the queue */
951*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_STATUS_Q_USED_MASK 0x01FFFFFF
952*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_STATUS_Q_USED_SHIFT 0
953*49b49cdaSZbigniew Bodek /*
954*49b49cdaSZbigniew Bodek  * prefetch status
955*49b49cdaSZbigniew Bodek  * 0 – prefetch operation is stopped
956*49b49cdaSZbigniew Bodek  * 1 – prefetch is operational
957*49b49cdaSZbigniew Bodek  */
958*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_STATUS_PREFETCH   (1 << 28)
959*49b49cdaSZbigniew Bodek /*
960*49b49cdaSZbigniew Bodek  * Queue scheduler status
961*49b49cdaSZbigniew Bodek  * 0 – queue is not active and not participating in scheduling
962*49b49cdaSZbigniew Bodek  * 1 – queue is active and participating in the scheduling process
963*49b49cdaSZbigniew Bodek  */
964*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_STATUS_SCHEDULER  (1 << 29)
965*49b49cdaSZbigniew Bodek /* Queue is suspended due to DMB */
966*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_STATUS_Q_DMB      (1 << 30)
967*49b49cdaSZbigniew Bodek /*
968*49b49cdaSZbigniew Bodek  * Queue full indication.
969*49b49cdaSZbigniew Bodek  * (used by the host when head pointer equals tail pointer).
970*49b49cdaSZbigniew Bodek  */
971*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_STATUS_Q_FULL     (1 << 31)
972*49b49cdaSZbigniew Bodek /*
973*49b49cdaSZbigniew Bodek  * M2S Descriptor Ring Base address [31:4].
974*49b49cdaSZbigniew Bodek  * Value of the base address of the M2S descriptor ring
975*49b49cdaSZbigniew Bodek  * [3:0] - 0 - 16B alignment is enforced
976*49b49cdaSZbigniew Bodek  * ([11:4] should be 0 for 4KB alignment)
977*49b49cdaSZbigniew Bodek  */
978*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDRBP_LOW_ADDR_MASK 0xFFFFFFF0
979*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDRBP_LOW_ADDR_SHIFT 4
980*49b49cdaSZbigniew Bodek 
981*49b49cdaSZbigniew Bodek /**** TDRL register ****/
982*49b49cdaSZbigniew Bodek /*
983*49b49cdaSZbigniew Bodek  * Length of the descriptor ring.
984*49b49cdaSZbigniew Bodek  * (descriptors)
985*49b49cdaSZbigniew Bodek  * Associated with the ring base address, ends at maximum burst size alignment.
986*49b49cdaSZbigniew Bodek  */
987*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDRL_OFFSET_MASK  0x00FFFFFF
988*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDRL_OFFSET_SHIFT 0
989*49b49cdaSZbigniew Bodek 
990*49b49cdaSZbigniew Bodek /**** TDRHP register ****/
991*49b49cdaSZbigniew Bodek /*
992*49b49cdaSZbigniew Bodek  * Relative offset of the next descriptor that needs to be read into the
993*49b49cdaSZbigniew Bodek  * prefetch FIFO.
994*49b49cdaSZbigniew Bodek  * Incremented when the DMA reads valid descriptors from the host memory to the
995*49b49cdaSZbigniew Bodek  * prefetch FIFO.
996*49b49cdaSZbigniew Bodek  * Note that this is the offset in # of descriptors and not in byte address.
997*49b49cdaSZbigniew Bodek  */
998*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDRHP_OFFSET_MASK 0x00FFFFFF
999*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDRHP_OFFSET_SHIFT 0
1000*49b49cdaSZbigniew Bodek /* Ring ID */
1001*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDRHP_RING_ID_MASK 0xC0000000
1002*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDRHP_RING_ID_SHIFT 30
1003*49b49cdaSZbigniew Bodek 
1004*49b49cdaSZbigniew Bodek /**** TDRTP_inc register ****/
1005*49b49cdaSZbigniew Bodek /* Increments the value in Q_TDRTP (descriptors) */
1006*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDRTP_INC_VAL_MASK 0x00FFFFFF
1007*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDRTP_INC_VAL_SHIFT 0
1008*49b49cdaSZbigniew Bodek 
1009*49b49cdaSZbigniew Bodek /**** TDRTP register ****/
1010*49b49cdaSZbigniew Bodek /*
1011*49b49cdaSZbigniew Bodek  * Relative offset of the next free descriptor in the host memory.
1012*49b49cdaSZbigniew Bodek  * Note that this is the offset in # of descriptors and not in byte address.
1013*49b49cdaSZbigniew Bodek  */
1014*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDRTP_OFFSET_MASK 0x00FFFFFF
1015*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDRTP_OFFSET_SHIFT 0
1016*49b49cdaSZbigniew Bodek /* Ring ID */
1017*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDRTP_RING_ID_MASK 0xC0000000
1018*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDRTP_RING_ID_SHIFT 30
1019*49b49cdaSZbigniew Bodek 
1020*49b49cdaSZbigniew Bodek /**** TDCP register ****/
1021*49b49cdaSZbigniew Bodek /*
1022*49b49cdaSZbigniew Bodek  * Relative offset of the first descriptor in the prefetch FIFO.
1023*49b49cdaSZbigniew Bodek  * This is the next descriptor that will be read by the scheduler.
1024*49b49cdaSZbigniew Bodek  */
1025*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDCP_OFFSET_MASK  0x00FFFFFF
1026*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDCP_OFFSET_SHIFT 0
1027*49b49cdaSZbigniew Bodek /* Ring ID */
1028*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDCP_RING_ID_MASK 0xC0000000
1029*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDCP_RING_ID_SHIFT 30
1030*49b49cdaSZbigniew Bodek /*
1031*49b49cdaSZbigniew Bodek  * M2S Descriptor Ring Base address [31:4].
1032*49b49cdaSZbigniew Bodek  * Value of the base address of the M2S descriptor ring
1033*49b49cdaSZbigniew Bodek  * [3:0] - 0 - 16B alignment is enforced
1034*49b49cdaSZbigniew Bodek  * ([11:4] should be 0 for 4KB alignment)
1035*49b49cdaSZbigniew Bodek  * NOTE:
1036*49b49cdaSZbigniew Bodek  * Length of the descriptor ring (in descriptors) associated with the ring base
1037*49b49cdaSZbigniew Bodek  * address. Ends at maximum burst size alignment.
1038*49b49cdaSZbigniew Bodek  */
1039*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TCRBP_LOW_ADDR_MASK 0xFFFFFFF0
1040*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TCRBP_LOW_ADDR_SHIFT 4
1041*49b49cdaSZbigniew Bodek 
1042*49b49cdaSZbigniew Bodek /**** TCRHP register ****/
1043*49b49cdaSZbigniew Bodek /*
1044*49b49cdaSZbigniew Bodek  * Relative offset of the next descriptor that needs to be updated by the
1045*49b49cdaSZbigniew Bodek  * completion controller.
1046*49b49cdaSZbigniew Bodek  * Note: This is in descriptors and not in byte address.
1047*49b49cdaSZbigniew Bodek  */
1048*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TCRHP_OFFSET_MASK 0x00FFFFFF
1049*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TCRHP_OFFSET_SHIFT 0
1050*49b49cdaSZbigniew Bodek /* Ring ID */
1051*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TCRHP_RING_ID_MASK 0xC0000000
1052*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TCRHP_RING_ID_SHIFT 30
1053*49b49cdaSZbigniew Bodek 
1054*49b49cdaSZbigniew Bodek /**** TCRHP_internal register ****/
1055*49b49cdaSZbigniew Bodek /*
1056*49b49cdaSZbigniew Bodek  * Relative offset of the next descriptor that needs to be updated by the
1057*49b49cdaSZbigniew Bodek  * completion controller.
1058*49b49cdaSZbigniew Bodek  * Note: This is in descriptors and not in byte address.
1059*49b49cdaSZbigniew Bodek  */
1060*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TCRHP_INTERNAL_OFFSET_MASK 0x00FFFFFF
1061*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TCRHP_INTERNAL_OFFSET_SHIFT 0
1062*49b49cdaSZbigniew Bodek /* Ring ID */
1063*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TCRHP_INTERNAL_RING_ID_MASK 0xC0000000
1064*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TCRHP_INTERNAL_RING_ID_SHIFT 30
1065*49b49cdaSZbigniew Bodek 
1066*49b49cdaSZbigniew Bodek /**** rate_limit_cfg_1 register ****/
1067*49b49cdaSZbigniew Bodek /* Maximum number of accumulated bytes in the token counter. */
1068*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_CFG_1_MAX_BURST_SIZE_MASK 0x00FFFFFF
1069*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_CFG_1_MAX_BURST_SIZE_SHIFT 0
1070*49b49cdaSZbigniew Bodek /* Enable the rate limiter. */
1071*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_CFG_1_EN (1 << 24)
1072*49b49cdaSZbigniew Bodek /* Stop token fill. */
1073*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_CFG_1_PAUSE (1 << 25)
1074*49b49cdaSZbigniew Bodek 
1075*49b49cdaSZbigniew Bodek /**** rate_limit_cfg_cycle register ****/
1076*49b49cdaSZbigniew Bodek /* Number of short cycles between token fills */
1077*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_CFG_CYCLE_LONG_CYCLE_SIZE_MASK 0x0000FFFF
1078*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_CFG_CYCLE_LONG_CYCLE_SIZE_SHIFT 0
1079*49b49cdaSZbigniew Bodek 
1080*49b49cdaSZbigniew Bodek /**** rate_limit_cfg_token_size_1 register ****/
1081*49b49cdaSZbigniew Bodek /* Number of bits to add in each long cycle */
1082*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_CFG_TOKEN_SIZE_1_LONG_CYCLE_MASK 0x0007FFFF
1083*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_CFG_TOKEN_SIZE_1_LONG_CYCLE_SHIFT 0
1084*49b49cdaSZbigniew Bodek 
1085*49b49cdaSZbigniew Bodek /**** rate_limit_cfg_token_size_2 register ****/
1086*49b49cdaSZbigniew Bodek /* Number of bits to add in each cycle */
1087*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_CFG_TOKEN_SIZE_2_SHORT_CYCLE_MASK 0x0007FFFF
1088*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_CFG_TOKEN_SIZE_2_SHORT_CYCLE_SHIFT 0
1089*49b49cdaSZbigniew Bodek 
1090*49b49cdaSZbigniew Bodek /**** rate_limit_sw_ctrl register ****/
1091*49b49cdaSZbigniew Bodek /* Reset the token bucket counter. */
1092*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_SW_CTRL_RST_TOKEN_CNT (1 << 0)
1093*49b49cdaSZbigniew Bodek 
1094*49b49cdaSZbigniew Bodek /**** rate_limit_mask register ****/
1095*49b49cdaSZbigniew Bodek /* Mask the external rate limiter. */
1096*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_MASK_EXTERNAL_RATE_LIMITER (1 << 0)
1097*49b49cdaSZbigniew Bodek /* Mask the internal rate limiter. */
1098*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_MASK_INTERNAL_RATE_LIMITER (1 << 1)
1099*49b49cdaSZbigniew Bodek /*
1100*49b49cdaSZbigniew Bodek  * Mask the internal pause mechanism for DMB.
1101*49b49cdaSZbigniew Bodek  * (Data Memory Barrier).
1102*49b49cdaSZbigniew Bodek  */
1103*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_MASK_INTERNAL_PAUSE_DMB (1 << 2)
1104*49b49cdaSZbigniew Bodek /* Mask the external application pause interface. */
1105*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_MASK_EXTERNAL_PAUSE (1 << 3)
1106*49b49cdaSZbigniew Bodek 
1107*49b49cdaSZbigniew Bodek /**** dwrr_cfg_1 register ****/
1108*49b49cdaSZbigniew Bodek /* Maximum number of accumulated bytes in the deficit counter */
1109*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_DWRR_CFG_1_MAX_DEFICIT_CNT_SIZE_MASK 0x00FFFFFF
1110*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_DWRR_CFG_1_MAX_DEFICIT_CNT_SIZE_SHIFT 0
1111*49b49cdaSZbigniew Bodek /* Bypass the DWRR.  */
1112*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_DWRR_CFG_1_STRICT (1 << 24)
1113*49b49cdaSZbigniew Bodek /* Stop deficit counter increment. */
1114*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_DWRR_CFG_1_PAUSE  (1 << 25)
1115*49b49cdaSZbigniew Bodek 
1116*49b49cdaSZbigniew Bodek /**** dwrr_cfg_2 register ****/
1117*49b49cdaSZbigniew Bodek /*
1118*49b49cdaSZbigniew Bodek  * Value for the queue QoS.
1119*49b49cdaSZbigniew Bodek  * Queues with the same QoS value are scheduled with RR/DWRR.
1120*49b49cdaSZbigniew Bodek  * Only LOG(number of queues) is used.
1121*49b49cdaSZbigniew Bodek  */
1122*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_DWRR_CFG_2_Q_QOS_MASK 0x000000FF
1123*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_DWRR_CFG_2_Q_QOS_SHIFT 0
1124*49b49cdaSZbigniew Bodek 
1125*49b49cdaSZbigniew Bodek /**** dwrr_cfg_3 register ****/
1126*49b49cdaSZbigniew Bodek /* Queue weight */
1127*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_DWRR_CFG_3_WEIGHT_MASK 0x000000FF
1128*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_DWRR_CFG_3_WEIGHT_SHIFT 0
1129*49b49cdaSZbigniew Bodek 
1130*49b49cdaSZbigniew Bodek /**** dwrr_sw_ctrl register ****/
1131*49b49cdaSZbigniew Bodek /* Reset the DWRR deficit counter. */
1132*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_DWRR_SW_CTRL_RST_CNT (1 << 0)
1133*49b49cdaSZbigniew Bodek 
1134*49b49cdaSZbigniew Bodek /**** comp_cfg register ****/
1135*49b49cdaSZbigniew Bodek /* Enable writing to the completion ring */
1136*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_COMP_CFG_EN_COMP_RING_UPDATE (1 << 0)
1137*49b49cdaSZbigniew Bodek /* Disable the completion coalescing function. */
1138*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_COMP_CFG_DIS_COMP_COAL (1 << 1)
1139*49b49cdaSZbigniew Bodek 
1140*49b49cdaSZbigniew Bodek /**** q_sw_ctrl register ****/
1141*49b49cdaSZbigniew Bodek /*
1142*49b49cdaSZbigniew Bodek  * Reset the DMB hardware barrier
1143*49b49cdaSZbigniew Bodek  * (enable queue operation).
1144*49b49cdaSZbigniew Bodek  */
1145*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_SW_CTRL_RST_DMB (1 << 0)
1146*49b49cdaSZbigniew Bodek /* Reset the tail pointer hardware. */
1147*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_SW_CTRL_RST_TAIL_PTR (1 << 1)
1148*49b49cdaSZbigniew Bodek /* Reset the head pointer hardware. */
1149*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_SW_CTRL_RST_HEAD_PTR (1 << 2)
1150*49b49cdaSZbigniew Bodek /* Reset the current pointer hardware. */
1151*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_SW_CTRL_RST_CURRENT_PTR (1 << 3)
1152*49b49cdaSZbigniew Bodek /* Reset the queue */
1153*49b49cdaSZbigniew Bodek #define UDMA_M2S_Q_SW_CTRL_RST_Q   (1 << 8)
1154*49b49cdaSZbigniew Bodek 
1155*49b49cdaSZbigniew Bodek #ifdef __cplusplus
1156*49b49cdaSZbigniew Bodek }
1157*49b49cdaSZbigniew Bodek #endif
1158*49b49cdaSZbigniew Bodek 
1159*49b49cdaSZbigniew Bodek #endif /* __AL_HAL_UDMA_M2S_REG_H */
1160