xref: /freebsd/sys/contrib/alpine-hal/al_hal_udma_regs_s2m.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_s2m.h
39*49b49cdaSZbigniew Bodek  *
40*49b49cdaSZbigniew Bodek  * @brief C Header file for the UDMA S2M registers
41*49b49cdaSZbigniew Bodek  *
42*49b49cdaSZbigniew Bodek  */
43*49b49cdaSZbigniew Bodek 
44*49b49cdaSZbigniew Bodek #ifndef __AL_HAL_UDMA_S2M_REG_H
45*49b49cdaSZbigniew Bodek #define __AL_HAL_UDMA_S2M_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_s2m {
59*49b49cdaSZbigniew Bodek 	/* [0x0] Data write master configuration */
60*49b49cdaSZbigniew Bodek 	uint32_t data_wr_cfg_1;
61*49b49cdaSZbigniew Bodek 	/* [0x4] Data write master configuration */
62*49b49cdaSZbigniew Bodek 	uint32_t data_wr_cfg_2;
63*49b49cdaSZbigniew Bodek 	/* [0x8] Descriptor read master configuration */
64*49b49cdaSZbigniew Bodek 	uint32_t desc_rd_cfg_4;
65*49b49cdaSZbigniew Bodek 	/* [0xc] Descriptor read master configuration */
66*49b49cdaSZbigniew Bodek 	uint32_t desc_rd_cfg_5;
67*49b49cdaSZbigniew Bodek 	/* [0x10] Completion  write master configuration */
68*49b49cdaSZbigniew Bodek 	uint32_t comp_wr_cfg_1;
69*49b49cdaSZbigniew Bodek 	/* [0x14] Completion  write master configuration */
70*49b49cdaSZbigniew Bodek 	uint32_t comp_wr_cfg_2;
71*49b49cdaSZbigniew Bodek 	/* [0x18] Data write master configuration */
72*49b49cdaSZbigniew Bodek 	uint32_t data_wr_cfg;
73*49b49cdaSZbigniew Bodek 	/* [0x1c] Descriptors read master configuration */
74*49b49cdaSZbigniew Bodek 	uint32_t desc_rd_cfg_3;
75*49b49cdaSZbigniew Bodek 	/* [0x20] Completion descriptors write master configuration */
76*49b49cdaSZbigniew Bodek 	uint32_t desc_wr_cfg_1;
77*49b49cdaSZbigniew Bodek 	/* [0x24] AXI outstanding read configuration */
78*49b49cdaSZbigniew Bodek 	uint32_t ostand_cfg_rd;
79*49b49cdaSZbigniew Bodek 	/* [0x28] AXI outstanding write configuration */
80*49b49cdaSZbigniew Bodek 	uint32_t ostand_cfg_wr;
81*49b49cdaSZbigniew Bodek 	uint32_t rsrvd[53];
82*49b49cdaSZbigniew Bodek };
83*49b49cdaSZbigniew Bodek struct udma_s2m {
84*49b49cdaSZbigniew Bodek 	/*
85*49b49cdaSZbigniew Bodek 	 * [0x0] DMA state
86*49b49cdaSZbigniew Bodek 	 * 00  - No pending tasks
87*49b49cdaSZbigniew Bodek 	 * 01 – Normal (active)
88*49b49cdaSZbigniew Bodek 	 * 10 – Abort (error condition)
89*49b49cdaSZbigniew Bodek 	 * 11 – Reserved
90*49b49cdaSZbigniew Bodek 	 */
91*49b49cdaSZbigniew Bodek 	uint32_t state;
92*49b49cdaSZbigniew Bodek 	/* [0x4] CPU request to change DMA state */
93*49b49cdaSZbigniew Bodek 	uint32_t change_state;
94*49b49cdaSZbigniew Bodek 	uint32_t rsrvd_0;
95*49b49cdaSZbigniew Bodek 	/*
96*49b49cdaSZbigniew Bodek 	 * [0xc] S2M DMA error log mask.
97*49b49cdaSZbigniew Bodek 	 * Each error has an interrupt controller cause bit.
98*49b49cdaSZbigniew Bodek 	 * This register determines if these errors cause the S2M DMA to log the
99*49b49cdaSZbigniew Bodek 	 * error condition.
100*49b49cdaSZbigniew Bodek 	 * 0 - Log is enable
101*49b49cdaSZbigniew Bodek 	 * 1 - Log is masked.
102*49b49cdaSZbigniew Bodek 	 */
103*49b49cdaSZbigniew Bodek 	uint32_t err_log_mask;
104*49b49cdaSZbigniew Bodek 	uint32_t rsrvd_1;
105*49b49cdaSZbigniew Bodek 	/*
106*49b49cdaSZbigniew Bodek 	 * [0x14] DMA header log
107*49b49cdaSZbigniew Bodek 	 * Sample the packet header that caused the error
108*49b49cdaSZbigniew Bodek 	 */
109*49b49cdaSZbigniew Bodek 	uint32_t log_0;
110*49b49cdaSZbigniew Bodek 	/*
111*49b49cdaSZbigniew Bodek 	 * [0x18] DMA header log
112*49b49cdaSZbigniew Bodek 	 * Sample the packet header that caused the error.
113*49b49cdaSZbigniew Bodek 	 */
114*49b49cdaSZbigniew Bodek 	uint32_t log_1;
115*49b49cdaSZbigniew Bodek 	/*
116*49b49cdaSZbigniew Bodek 	 * [0x1c] DMA header log
117*49b49cdaSZbigniew Bodek 	 * Sample the packet header that caused the error.
118*49b49cdaSZbigniew Bodek 	 */
119*49b49cdaSZbigniew Bodek 	uint32_t log_2;
120*49b49cdaSZbigniew Bodek 	/*
121*49b49cdaSZbigniew Bodek 	 * [0x20] DMA header log
122*49b49cdaSZbigniew Bodek 	 * Sample the packet header that caused the error
123*49b49cdaSZbigniew Bodek 	 */
124*49b49cdaSZbigniew Bodek 	uint32_t log_3;
125*49b49cdaSZbigniew Bodek 	/* [0x24] DMA clear error log */
126*49b49cdaSZbigniew Bodek 	uint32_t clear_err_log;
127*49b49cdaSZbigniew Bodek 	/* [0x28] S2M stream data FIFO status */
128*49b49cdaSZbigniew Bodek 	uint32_t s_data_fifo_status;
129*49b49cdaSZbigniew Bodek 	/* [0x2c] S2M stream header FIFO status */
130*49b49cdaSZbigniew Bodek 	uint32_t s_header_fifo_status;
131*49b49cdaSZbigniew Bodek 	/* [0x30] S2M AXI data FIFO status */
132*49b49cdaSZbigniew Bodek 	uint32_t axi_data_fifo_status;
133*49b49cdaSZbigniew Bodek 	/* [0x34] S2M unack FIFO status */
134*49b49cdaSZbigniew Bodek 	uint32_t unack_fifo_status;
135*49b49cdaSZbigniew Bodek 	/* [0x38] Select queue for debug */
136*49b49cdaSZbigniew Bodek 	uint32_t indirect_ctrl;
137*49b49cdaSZbigniew Bodek 	/*
138*49b49cdaSZbigniew Bodek 	 * [0x3c] S2M prefetch FIFO status.
139*49b49cdaSZbigniew Bodek 	 * Status of the selected queue in S2M_indirect_ctrl
140*49b49cdaSZbigniew Bodek 	 */
141*49b49cdaSZbigniew Bodek 	uint32_t sel_pref_fifo_status;
142*49b49cdaSZbigniew Bodek 	/*
143*49b49cdaSZbigniew Bodek 	 * [0x40] S2M completion FIFO status.
144*49b49cdaSZbigniew Bodek 	 * Status of the selected queue in S2M_indirect_ctrl
145*49b49cdaSZbigniew Bodek 	 */
146*49b49cdaSZbigniew Bodek 	uint32_t sel_comp_fifo_status;
147*49b49cdaSZbigniew Bodek 	/* [0x44] S2M state machine and FIFO clear control */
148*49b49cdaSZbigniew Bodek 	uint32_t clear_ctrl;
149*49b49cdaSZbigniew Bodek 	/* [0x48] S2M Misc Check enable */
150*49b49cdaSZbigniew Bodek 	uint32_t check_en;
151*49b49cdaSZbigniew Bodek 	/* [0x4c] S2M FIFO enable control, internal */
152*49b49cdaSZbigniew Bodek 	uint32_t fifo_en;
153*49b49cdaSZbigniew Bodek 	/* [0x50] Stream interface configuration */
154*49b49cdaSZbigniew Bodek 	uint32_t stream_cfg;
155*49b49cdaSZbigniew Bodek 	uint32_t rsrvd[43];
156*49b49cdaSZbigniew Bodek };
157*49b49cdaSZbigniew Bodek struct udma_s2m_rd {
158*49b49cdaSZbigniew Bodek 	/* [0x0] S2M descriptor prefetch configuration */
159*49b49cdaSZbigniew Bodek 	uint32_t desc_pref_cfg_1;
160*49b49cdaSZbigniew Bodek 	/* [0x4] S2M descriptor prefetch configuration */
161*49b49cdaSZbigniew Bodek 	uint32_t desc_pref_cfg_2;
162*49b49cdaSZbigniew Bodek 	/* [0x8] S2M descriptor prefetch configuration */
163*49b49cdaSZbigniew Bodek 	uint32_t desc_pref_cfg_3;
164*49b49cdaSZbigniew Bodek 	/* [0xc] S2M descriptor prefetch configuration */
165*49b49cdaSZbigniew Bodek 	uint32_t desc_pref_cfg_4;
166*49b49cdaSZbigniew Bodek 	uint32_t rsrvd[12];
167*49b49cdaSZbigniew Bodek };
168*49b49cdaSZbigniew Bodek struct udma_s2m_wr {
169*49b49cdaSZbigniew Bodek 	/* [0x0] Stream data FIFO configuration */
170*49b49cdaSZbigniew Bodek 	uint32_t data_cfg_1;
171*49b49cdaSZbigniew Bodek 	/* [0x4] Data write configuration */
172*49b49cdaSZbigniew Bodek 	uint32_t data_cfg_2;
173*49b49cdaSZbigniew Bodek 	uint32_t rsrvd[14];
174*49b49cdaSZbigniew Bodek };
175*49b49cdaSZbigniew Bodek struct udma_s2m_comp {
176*49b49cdaSZbigniew Bodek 	/* [0x0] Completion controller configuration */
177*49b49cdaSZbigniew Bodek 	uint32_t cfg_1c;
178*49b49cdaSZbigniew Bodek 	/* [0x4] Completion controller configuration */
179*49b49cdaSZbigniew Bodek 	uint32_t cfg_2c;
180*49b49cdaSZbigniew Bodek 	uint32_t rsrvd_0;
181*49b49cdaSZbigniew Bodek 	/* [0xc] Completion controller application acknowledge configuration */
182*49b49cdaSZbigniew Bodek 	uint32_t cfg_application_ack;
183*49b49cdaSZbigniew Bodek 	uint32_t rsrvd[12];
184*49b49cdaSZbigniew Bodek };
185*49b49cdaSZbigniew Bodek struct udma_s2m_stat {
186*49b49cdaSZbigniew Bodek 	uint32_t rsrvd_0;
187*49b49cdaSZbigniew Bodek 	/* [0x4] Number of dropped packets */
188*49b49cdaSZbigniew Bodek 	uint32_t drop_pkt;
189*49b49cdaSZbigniew Bodek 	/*
190*49b49cdaSZbigniew Bodek 	 * [0x8] Counting the net length of the data buffers [64-bit]
191*49b49cdaSZbigniew Bodek 	 * Should be read before rx_bytes_high
192*49b49cdaSZbigniew Bodek 	 */
193*49b49cdaSZbigniew Bodek 	uint32_t rx_bytes_low;
194*49b49cdaSZbigniew Bodek 	/*
195*49b49cdaSZbigniew Bodek 	 * [0xc] Counting the net length of the data buffers [64-bit]
196*49b49cdaSZbigniew Bodek 	 * Should be read after tx_bytes_low (value is sampled when reading
197*49b49cdaSZbigniew Bodek 	 * Should be read before rx_bytes_low
198*49b49cdaSZbigniew Bodek 	 */
199*49b49cdaSZbigniew Bodek 	uint32_t rx_bytes_high;
200*49b49cdaSZbigniew Bodek 	/* [0x10] Total number of descriptors read from the host memory */
201*49b49cdaSZbigniew Bodek 	uint32_t prefed_desc;
202*49b49cdaSZbigniew Bodek 	/* [0x14] Number of packets written into the completion ring */
203*49b49cdaSZbigniew Bodek 	uint32_t comp_pkt;
204*49b49cdaSZbigniew Bodek 	/* [0x18] Number of descriptors written into the completion ring */
205*49b49cdaSZbigniew Bodek 	uint32_t comp_desc;
206*49b49cdaSZbigniew Bodek 	/*
207*49b49cdaSZbigniew Bodek 	 * [0x1c] Number of acknowledged packets.
208*49b49cdaSZbigniew Bodek 	 * (acknowledge sent to the stream interface)
209*49b49cdaSZbigniew Bodek 	 */
210*49b49cdaSZbigniew Bodek 	uint32_t ack_pkts;
211*49b49cdaSZbigniew Bodek 	uint32_t rsrvd[56];
212*49b49cdaSZbigniew Bodek };
213*49b49cdaSZbigniew Bodek struct udma_s2m_feature {
214*49b49cdaSZbigniew Bodek 	/*
215*49b49cdaSZbigniew Bodek 	 * [0x0] S2M Feature register
216*49b49cdaSZbigniew Bodek 	 * S2M instantiation parameters
217*49b49cdaSZbigniew Bodek 	 */
218*49b49cdaSZbigniew Bodek 	uint32_t reg_1;
219*49b49cdaSZbigniew Bodek 	/* [0x4] Reserved S2M feature register */
220*49b49cdaSZbigniew Bodek 	uint32_t reg_2;
221*49b49cdaSZbigniew Bodek 	/*
222*49b49cdaSZbigniew Bodek 	 * [0x8] S2M Feature register
223*49b49cdaSZbigniew Bodek 	 * S2M instantiation parameters
224*49b49cdaSZbigniew Bodek 	 */
225*49b49cdaSZbigniew Bodek 	uint32_t reg_3;
226*49b49cdaSZbigniew Bodek 	/*
227*49b49cdaSZbigniew Bodek 	 * [0xc] S2M Feature register.
228*49b49cdaSZbigniew Bodek 	 * S2M instantiation parameters.
229*49b49cdaSZbigniew Bodek 	 */
230*49b49cdaSZbigniew Bodek 	uint32_t reg_4;
231*49b49cdaSZbigniew Bodek 	/*
232*49b49cdaSZbigniew Bodek 	 * [0x10] S2M Feature register.
233*49b49cdaSZbigniew Bodek 	 * S2M instantiation parameters.
234*49b49cdaSZbigniew Bodek 	 */
235*49b49cdaSZbigniew Bodek 	uint32_t reg_5;
236*49b49cdaSZbigniew Bodek 	/* [0x14] S2M Feature register. S2M instantiation parameters. */
237*49b49cdaSZbigniew Bodek 	uint32_t reg_6;
238*49b49cdaSZbigniew Bodek 	uint32_t rsrvd[58];
239*49b49cdaSZbigniew Bodek };
240*49b49cdaSZbigniew Bodek struct udma_s2m_q {
241*49b49cdaSZbigniew Bodek 	uint32_t rsrvd_0[8];
242*49b49cdaSZbigniew Bodek 	/* [0x20] S2M Descriptor ring configuration */
243*49b49cdaSZbigniew Bodek 	uint32_t cfg;
244*49b49cdaSZbigniew Bodek 	/* [0x24] S2M Descriptor ring status and information */
245*49b49cdaSZbigniew Bodek 	uint32_t status;
246*49b49cdaSZbigniew Bodek 	/* [0x28] Rx Descriptor Ring Base Pointer [31:4] */
247*49b49cdaSZbigniew Bodek 	uint32_t rdrbp_low;
248*49b49cdaSZbigniew Bodek 	/* [0x2c] Rx Descriptor Ring Base Pointer [63:32] */
249*49b49cdaSZbigniew Bodek 	uint32_t rdrbp_high;
250*49b49cdaSZbigniew Bodek 	/*
251*49b49cdaSZbigniew Bodek 	 * [0x30] Rx Descriptor Ring Length[23:2]
252*49b49cdaSZbigniew Bodek 	 */
253*49b49cdaSZbigniew Bodek 	uint32_t rdrl;
254*49b49cdaSZbigniew Bodek 	/* [0x34] RX Descriptor Ring Head Pointer */
255*49b49cdaSZbigniew Bodek 	uint32_t rdrhp;
256*49b49cdaSZbigniew Bodek 	/* [0x38] Rx Descriptor Tail Pointer increment */
257*49b49cdaSZbigniew Bodek 	uint32_t rdrtp_inc;
258*49b49cdaSZbigniew Bodek 	/* [0x3c] Rx Descriptor Tail Pointer */
259*49b49cdaSZbigniew Bodek 	uint32_t rdrtp;
260*49b49cdaSZbigniew Bodek 	/* [0x40] RX Descriptor Current Pointer */
261*49b49cdaSZbigniew Bodek 	uint32_t rdcp;
262*49b49cdaSZbigniew Bodek 	/* [0x44] Rx Completion Ring Base Pointer [31:4] */
263*49b49cdaSZbigniew Bodek 	uint32_t rcrbp_low;
264*49b49cdaSZbigniew Bodek 	/* [0x48] Rx Completion Ring Base Pointer [63:32] */
265*49b49cdaSZbigniew Bodek 	uint32_t rcrbp_high;
266*49b49cdaSZbigniew Bodek 	/* [0x4c] Rx Completion Ring Head Pointer */
267*49b49cdaSZbigniew Bodek 	uint32_t rcrhp;
268*49b49cdaSZbigniew Bodek 	/*
269*49b49cdaSZbigniew Bodek 	 * [0x50] RX Completion Ring Head Pointer internal.
270*49b49cdaSZbigniew Bodek 	 * (Before the coalescing FIFO)
271*49b49cdaSZbigniew Bodek 	 */
272*49b49cdaSZbigniew Bodek 	uint32_t rcrhp_internal;
273*49b49cdaSZbigniew Bodek 	/* [0x54] Completion controller configuration for the queue */
274*49b49cdaSZbigniew Bodek 	uint32_t comp_cfg;
275*49b49cdaSZbigniew Bodek 	/* [0x58] Completion controller configuration for the queue */
276*49b49cdaSZbigniew Bodek 	uint32_t comp_cfg_2;
277*49b49cdaSZbigniew Bodek 	/* [0x5c] Packet handler configuration */
278*49b49cdaSZbigniew Bodek 	uint32_t pkt_cfg;
279*49b49cdaSZbigniew Bodek 	/* [0x60] Queue QoS configuration */
280*49b49cdaSZbigniew Bodek 	uint32_t qos_cfg;
281*49b49cdaSZbigniew Bodek 	/* [0x64] DMB software control */
282*49b49cdaSZbigniew Bodek 	uint32_t q_sw_ctrl;
283*49b49cdaSZbigniew Bodek 	/* [0x68] Number of S2M Rx packets after completion  */
284*49b49cdaSZbigniew Bodek 	uint32_t q_rx_pkt;
285*49b49cdaSZbigniew Bodek 	uint32_t rsrvd[997];
286*49b49cdaSZbigniew Bodek };
287*49b49cdaSZbigniew Bodek 
288*49b49cdaSZbigniew Bodek struct udma_s2m_regs {
289*49b49cdaSZbigniew Bodek 	uint32_t rsrvd_0[64];
290*49b49cdaSZbigniew Bodek 	struct udma_axi_s2m axi_s2m;                     /* [0x100] */
291*49b49cdaSZbigniew Bodek 	struct udma_s2m s2m;                             /* [0x200] */
292*49b49cdaSZbigniew Bodek 	struct udma_s2m_rd s2m_rd;                       /* [0x300] */
293*49b49cdaSZbigniew Bodek 	struct udma_s2m_wr s2m_wr;                       /* [0x340] */
294*49b49cdaSZbigniew Bodek 	struct udma_s2m_comp s2m_comp;                   /* [0x380] */
295*49b49cdaSZbigniew Bodek 	uint32_t rsrvd_1[80];
296*49b49cdaSZbigniew Bodek 	struct udma_s2m_stat s2m_stat;                   /* [0x500] */
297*49b49cdaSZbigniew Bodek 	struct udma_s2m_feature s2m_feature;             /* [0x600] */
298*49b49cdaSZbigniew Bodek 	uint32_t rsrvd_2[576];
299*49b49cdaSZbigniew Bodek 	struct udma_s2m_q s2m_q[4];                      /* [0x1000] */
300*49b49cdaSZbigniew Bodek };
301*49b49cdaSZbigniew Bodek 
302*49b49cdaSZbigniew Bodek 
303*49b49cdaSZbigniew Bodek /*
304*49b49cdaSZbigniew Bodek * Registers Fields
305*49b49cdaSZbigniew Bodek */
306*49b49cdaSZbigniew Bodek 
307*49b49cdaSZbigniew Bodek 
308*49b49cdaSZbigniew Bodek /**** data_wr_cfg_1 register ****/
309*49b49cdaSZbigniew Bodek /* AXI write  ID (AWID) */
310*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DATA_WR_CFG_1_AWID_MASK 0x000000FF
311*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DATA_WR_CFG_1_AWID_SHIFT 0
312*49b49cdaSZbigniew Bodek /* Cache Type */
313*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DATA_WR_CFG_1_AWCACHE_MASK 0x000F0000
314*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DATA_WR_CFG_1_AWCACHE_SHIFT 16
315*49b49cdaSZbigniew Bodek /* Burst type */
316*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DATA_WR_CFG_1_AWBURST_MASK 0x03000000
317*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DATA_WR_CFG_1_AWBURST_SHIFT 24
318*49b49cdaSZbigniew Bodek 
319*49b49cdaSZbigniew Bodek /**** data_wr_cfg_2 register ****/
320*49b49cdaSZbigniew Bodek /* User extension */
321*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DATA_WR_CFG_2_AWUSER_MASK 0x000FFFFF
322*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DATA_WR_CFG_2_AWUSER_SHIFT 0
323*49b49cdaSZbigniew Bodek /* Bus size, 128-bit */
324*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DATA_WR_CFG_2_AWSIZE_MASK 0x00700000
325*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DATA_WR_CFG_2_AWSIZE_SHIFT 20
326*49b49cdaSZbigniew Bodek /*
327*49b49cdaSZbigniew Bodek  * AXI Master QoS.
328*49b49cdaSZbigniew Bodek  * Used for arbitration between AXI masters
329*49b49cdaSZbigniew Bodek  */
330*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DATA_WR_CFG_2_AWQOS_MASK 0x07000000
331*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DATA_WR_CFG_2_AWQOS_SHIFT 24
332*49b49cdaSZbigniew Bodek /* Protection Type */
333*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DATA_WR_CFG_2_AWPROT_MASK 0x70000000
334*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DATA_WR_CFG_2_AWPROT_SHIFT 28
335*49b49cdaSZbigniew Bodek 
336*49b49cdaSZbigniew Bodek /**** desc_rd_cfg_4 register ****/
337*49b49cdaSZbigniew Bodek /* AXI read  ID (ARID) */
338*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DESC_RD_CFG_4_ARID_MASK 0x000000FF
339*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DESC_RD_CFG_4_ARID_SHIFT 0
340*49b49cdaSZbigniew Bodek /* Cache Type */
341*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DESC_RD_CFG_4_ARCACHE_MASK 0x000F0000
342*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DESC_RD_CFG_4_ARCACHE_SHIFT 16
343*49b49cdaSZbigniew Bodek /* Burst type */
344*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DESC_RD_CFG_4_ARBURST_MASK 0x03000000
345*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DESC_RD_CFG_4_ARBURST_SHIFT 24
346*49b49cdaSZbigniew Bodek 
347*49b49cdaSZbigniew Bodek /**** desc_rd_cfg_5 register ****/
348*49b49cdaSZbigniew Bodek /* User extension */
349*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DESC_RD_CFG_5_ARUSER_MASK 0x000FFFFF
350*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DESC_RD_CFG_5_ARUSER_SHIFT 0
351*49b49cdaSZbigniew Bodek /* Bus size, 128-bit */
352*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DESC_RD_CFG_5_ARSIZE_MASK 0x00700000
353*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DESC_RD_CFG_5_ARSIZE_SHIFT 20
354*49b49cdaSZbigniew Bodek /*
355*49b49cdaSZbigniew Bodek  * AXI Master QoS.
356*49b49cdaSZbigniew Bodek  * Used for arbitration between AXI masters
357*49b49cdaSZbigniew Bodek  */
358*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DESC_RD_CFG_5_ARQOS_MASK 0x07000000
359*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DESC_RD_CFG_5_ARQOS_SHIFT 24
360*49b49cdaSZbigniew Bodek /* Protection Type */
361*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DESC_RD_CFG_5_ARPROT_MASK 0x70000000
362*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DESC_RD_CFG_5_ARPROT_SHIFT 28
363*49b49cdaSZbigniew Bodek 
364*49b49cdaSZbigniew Bodek /**** comp_wr_cfg_1 register ****/
365*49b49cdaSZbigniew Bodek /* AXI write  ID (AWID) */
366*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_COMP_WR_CFG_1_AWID_MASK 0x000000FF
367*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_COMP_WR_CFG_1_AWID_SHIFT 0
368*49b49cdaSZbigniew Bodek /* Cache Type */
369*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_COMP_WR_CFG_1_AWCACHE_MASK 0x000F0000
370*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_COMP_WR_CFG_1_AWCACHE_SHIFT 16
371*49b49cdaSZbigniew Bodek /* Burst type */
372*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_COMP_WR_CFG_1_AWBURST_MASK 0x03000000
373*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_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_S2M_COMP_WR_CFG_2_AWUSER_MASK 0x000FFFFF
378*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_COMP_WR_CFG_2_AWUSER_SHIFT 0
379*49b49cdaSZbigniew Bodek /* Bus size, 128-bit */
380*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_COMP_WR_CFG_2_AWSIZE_MASK 0x00700000
381*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_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_S2M_COMP_WR_CFG_2_AWQOS_MASK 0x07000000
387*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_COMP_WR_CFG_2_AWQOS_SHIFT 24
388*49b49cdaSZbigniew Bodek /* Protection Type */
389*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_COMP_WR_CFG_2_AWPROT_MASK 0x70000000
390*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_COMP_WR_CFG_2_AWPROT_SHIFT 28
391*49b49cdaSZbigniew Bodek 
392*49b49cdaSZbigniew Bodek /**** data_wr_cfg register ****/
393*49b49cdaSZbigniew Bodek /*
394*49b49cdaSZbigniew Bodek  * Defines the maximum number of AXI beats for a single AXI burst. This value is
395*49b49cdaSZbigniew Bodek  * used for the burst split decision.
396*49b49cdaSZbigniew Bodek  */
397*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DATA_WR_CFG_MAX_AXI_BEATS_MASK 0x000000FF
398*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DATA_WR_CFG_MAX_AXI_BEATS_SHIFT 0
399*49b49cdaSZbigniew Bodek 
400*49b49cdaSZbigniew Bodek /**** desc_rd_cfg_3 register ****/
401*49b49cdaSZbigniew Bodek /*
402*49b49cdaSZbigniew Bodek  * Defines the maximum number of AXI beats for a single AXI burst. This value is
403*49b49cdaSZbigniew Bodek  * used for the burst split decision.
404*49b49cdaSZbigniew Bodek  */
405*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DESC_RD_CFG_3_MAX_AXI_BEATS_MASK 0x000000FF
406*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DESC_RD_CFG_3_MAX_AXI_BEATS_SHIFT 0
407*49b49cdaSZbigniew Bodek /*
408*49b49cdaSZbigniew Bodek  * Enables breaking descriptor read request.
409*49b49cdaSZbigniew Bodek  * Aligned to max_AXI_beats when the total read size is less than max_AXI_beats.
410*49b49cdaSZbigniew Bodek  */
411*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DESC_RD_CFG_3_ALWAYS_BREAK_ON_MAX_BOUDRY (1 << 16)
412*49b49cdaSZbigniew Bodek 
413*49b49cdaSZbigniew Bodek /**** desc_wr_cfg_1 register ****/
414*49b49cdaSZbigniew Bodek /*
415*49b49cdaSZbigniew Bodek  * Defines the maximum number of AXI beats for a single AXI burst. This value is
416*49b49cdaSZbigniew Bodek  * used for the burst split decision.
417*49b49cdaSZbigniew Bodek  */
418*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DESC_WR_CFG_1_MAX_AXI_BEATS_MASK 0x000000FF
419*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DESC_WR_CFG_1_MAX_AXI_BEATS_SHIFT 0
420*49b49cdaSZbigniew Bodek /*
421*49b49cdaSZbigniew Bodek  * Minimum burst for writing completion descriptors.
422*49b49cdaSZbigniew Bodek  * (AXI beats).
423*49b49cdaSZbigniew Bodek  * Value must be aligned to cache lines (64 bytes).
424*49b49cdaSZbigniew Bodek  * Default value is 2 cache lines, 8 beats.
425*49b49cdaSZbigniew Bodek  */
426*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DESC_WR_CFG_1_MIN_AXI_BEATS_MASK 0x00FF0000
427*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_DESC_WR_CFG_1_MIN_AXI_BEATS_SHIFT 16
428*49b49cdaSZbigniew Bodek 
429*49b49cdaSZbigniew Bodek /**** ostand_cfg_rd register ****/
430*49b49cdaSZbigniew Bodek /*
431*49b49cdaSZbigniew Bodek  * Maximum number of outstanding descriptor reads to the AXI.
432*49b49cdaSZbigniew Bodek  * (AXI transactions).
433*49b49cdaSZbigniew Bodek  */
434*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_OSTAND_CFG_RD_MAX_DESC_RD_OSTAND_MASK 0x0000003F
435*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_OSTAND_CFG_RD_MAX_DESC_RD_OSTAND_SHIFT 0
436*49b49cdaSZbigniew Bodek /* Maximum number of outstanding stream acknowledges. */
437*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_OSTAND_CFG_RD_MAX_STREAM_ACK_MASK 0x001F0000
438*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_OSTAND_CFG_RD_MAX_STREAM_ACK_SHIFT 16
439*49b49cdaSZbigniew Bodek 
440*49b49cdaSZbigniew Bodek /**** ostand_cfg_wr register ****/
441*49b49cdaSZbigniew Bodek /*
442*49b49cdaSZbigniew Bodek  * Maximum number of outstanding data writes to the AXI.
443*49b49cdaSZbigniew Bodek  * (AXI transactions).
444*49b49cdaSZbigniew Bodek  */
445*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_OSTAND_CFG_WR_MAX_DATA_WR_OSTAND_MASK 0x0000003F
446*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_OSTAND_CFG_WR_MAX_DATA_WR_OSTAND_SHIFT 0
447*49b49cdaSZbigniew Bodek /*
448*49b49cdaSZbigniew Bodek  * Maximum number of outstanding data beats for data write to AXI.
449*49b49cdaSZbigniew Bodek  * (AXI beats).
450*49b49cdaSZbigniew Bodek  */
451*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_OSTAND_CFG_WR_MAX_DATA_BEATS_WR_OSTAND_MASK 0x0000FF00
452*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_OSTAND_CFG_WR_MAX_DATA_BEATS_WR_OSTAND_SHIFT 8
453*49b49cdaSZbigniew Bodek /*
454*49b49cdaSZbigniew Bodek  * Maximum number of outstanding descriptor writes to the AXI.
455*49b49cdaSZbigniew Bodek  * (AXI transactions).
456*49b49cdaSZbigniew Bodek  */
457*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_OSTAND_CFG_WR_MAX_COMP_REQ_MASK 0x003F0000
458*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_OSTAND_CFG_WR_MAX_COMP_REQ_SHIFT 16
459*49b49cdaSZbigniew Bodek /*
460*49b49cdaSZbigniew Bodek  * Maximum number of outstanding data beats for descriptor write to AXI.
461*49b49cdaSZbigniew Bodek  * (AXI beats).
462*49b49cdaSZbigniew Bodek  */
463*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_OSTAND_CFG_WR_MAX_COMP_DATA_WR_OSTAND_MASK 0xFF000000
464*49b49cdaSZbigniew Bodek #define UDMA_AXI_S2M_OSTAND_CFG_WR_MAX_COMP_DATA_WR_OSTAND_SHIFT 24
465*49b49cdaSZbigniew Bodek 
466*49b49cdaSZbigniew Bodek /**** state register ****/
467*49b49cdaSZbigniew Bodek 
468*49b49cdaSZbigniew Bodek #define UDMA_S2M_STATE_COMP_CTRL_MASK 0x00000003
469*49b49cdaSZbigniew Bodek #define UDMA_S2M_STATE_COMP_CTRL_SHIFT 0
470*49b49cdaSZbigniew Bodek 
471*49b49cdaSZbigniew Bodek #define UDMA_S2M_STATE_STREAM_IF_MASK 0x00000030
472*49b49cdaSZbigniew Bodek #define UDMA_S2M_STATE_STREAM_IF_SHIFT 4
473*49b49cdaSZbigniew Bodek 
474*49b49cdaSZbigniew Bodek #define UDMA_S2M_STATE_DATA_WR_CTRL_MASK 0x00000300
475*49b49cdaSZbigniew Bodek #define UDMA_S2M_STATE_DATA_WR_CTRL_SHIFT 8
476*49b49cdaSZbigniew Bodek 
477*49b49cdaSZbigniew Bodek #define UDMA_S2M_STATE_DESC_PREF_MASK 0x00003000
478*49b49cdaSZbigniew Bodek #define UDMA_S2M_STATE_DESC_PREF_SHIFT 12
479*49b49cdaSZbigniew Bodek 
480*49b49cdaSZbigniew Bodek #define UDMA_S2M_STATE_AXI_WR_DATA_MASK 0x00030000
481*49b49cdaSZbigniew Bodek #define UDMA_S2M_STATE_AXI_WR_DATA_SHIFT 16
482*49b49cdaSZbigniew Bodek 
483*49b49cdaSZbigniew Bodek /**** change_state register ****/
484*49b49cdaSZbigniew Bodek /* Start normal operation */
485*49b49cdaSZbigniew Bodek #define UDMA_S2M_CHANGE_STATE_NORMAL (1 << 0)
486*49b49cdaSZbigniew Bodek /* Stop normal operation */
487*49b49cdaSZbigniew Bodek #define UDMA_S2M_CHANGE_STATE_DIS    (1 << 1)
488*49b49cdaSZbigniew Bodek /*
489*49b49cdaSZbigniew Bodek  * Stop all machines.
490*49b49cdaSZbigniew Bodek  * (Prefetch, scheduling, completion and stream interface)
491*49b49cdaSZbigniew Bodek  */
492*49b49cdaSZbigniew Bodek #define UDMA_S2M_CHANGE_STATE_ABORT  (1 << 2)
493*49b49cdaSZbigniew Bodek 
494*49b49cdaSZbigniew Bodek /**** clear_err_log register ****/
495*49b49cdaSZbigniew Bodek /* Clear error log */
496*49b49cdaSZbigniew Bodek #define UDMA_S2M_CLEAR_ERR_LOG_CLEAR (1 << 0)
497*49b49cdaSZbigniew Bodek 
498*49b49cdaSZbigniew Bodek /**** s_data_fifo_status register ****/
499*49b49cdaSZbigniew Bodek /* FIFO used indication */
500*49b49cdaSZbigniew Bodek #define UDMA_S2M_S_DATA_FIFO_STATUS_USED_MASK 0x0000FFFF
501*49b49cdaSZbigniew Bodek #define UDMA_S2M_S_DATA_FIFO_STATUS_USED_SHIFT 0
502*49b49cdaSZbigniew Bodek /* FIFO empty indication */
503*49b49cdaSZbigniew Bodek #define UDMA_S2M_S_DATA_FIFO_STATUS_EMPTY (1 << 24)
504*49b49cdaSZbigniew Bodek /* FIFO full indication */
505*49b49cdaSZbigniew Bodek #define UDMA_S2M_S_DATA_FIFO_STATUS_FULL (1 << 28)
506*49b49cdaSZbigniew Bodek 
507*49b49cdaSZbigniew Bodek /**** s_header_fifo_status register ****/
508*49b49cdaSZbigniew Bodek /* FIFO used indication */
509*49b49cdaSZbigniew Bodek #define UDMA_S2M_S_HEADER_FIFO_STATUS_USED_MASK 0x0000FFFF
510*49b49cdaSZbigniew Bodek #define UDMA_S2M_S_HEADER_FIFO_STATUS_USED_SHIFT 0
511*49b49cdaSZbigniew Bodek /* FIFO empty indication */
512*49b49cdaSZbigniew Bodek #define UDMA_S2M_S_HEADER_FIFO_STATUS_EMPTY (1 << 24)
513*49b49cdaSZbigniew Bodek /* FIFO full indication */
514*49b49cdaSZbigniew Bodek #define UDMA_S2M_S_HEADER_FIFO_STATUS_FULL (1 << 28)
515*49b49cdaSZbigniew Bodek 
516*49b49cdaSZbigniew Bodek /**** axi_data_fifo_status register ****/
517*49b49cdaSZbigniew Bodek /* FIFO used indication */
518*49b49cdaSZbigniew Bodek #define UDMA_S2M_AXI_DATA_FIFO_STATUS_USED_MASK 0x0000FFFF
519*49b49cdaSZbigniew Bodek #define UDMA_S2M_AXI_DATA_FIFO_STATUS_USED_SHIFT 0
520*49b49cdaSZbigniew Bodek /* FIFO empty indication */
521*49b49cdaSZbigniew Bodek #define UDMA_S2M_AXI_DATA_FIFO_STATUS_EMPTY (1 << 24)
522*49b49cdaSZbigniew Bodek /* FIFO full indication */
523*49b49cdaSZbigniew Bodek #define UDMA_S2M_AXI_DATA_FIFO_STATUS_FULL (1 << 28)
524*49b49cdaSZbigniew Bodek 
525*49b49cdaSZbigniew Bodek /**** unack_fifo_status register ****/
526*49b49cdaSZbigniew Bodek /* FIFO used indication */
527*49b49cdaSZbigniew Bodek #define UDMA_S2M_UNACK_FIFO_STATUS_USED_MASK 0x0000FFFF
528*49b49cdaSZbigniew Bodek #define UDMA_S2M_UNACK_FIFO_STATUS_USED_SHIFT 0
529*49b49cdaSZbigniew Bodek /* FIFO empty indication */
530*49b49cdaSZbigniew Bodek #define UDMA_S2M_UNACK_FIFO_STATUS_EMPTY (1 << 24)
531*49b49cdaSZbigniew Bodek /* FIFO full indication */
532*49b49cdaSZbigniew Bodek #define UDMA_S2M_UNACK_FIFO_STATUS_FULL (1 << 28)
533*49b49cdaSZbigniew Bodek 
534*49b49cdaSZbigniew Bodek /**** indirect_ctrl register ****/
535*49b49cdaSZbigniew Bodek /* Selected queue for status read */
536*49b49cdaSZbigniew Bodek #define UDMA_S2M_INDIRECT_CTRL_Q_NUM_MASK 0x00000FFF
537*49b49cdaSZbigniew Bodek #define UDMA_S2M_INDIRECT_CTRL_Q_NUM_SHIFT 0
538*49b49cdaSZbigniew Bodek 
539*49b49cdaSZbigniew Bodek /**** sel_pref_fifo_status register ****/
540*49b49cdaSZbigniew Bodek /* FIFO used indication */
541*49b49cdaSZbigniew Bodek #define UDMA_S2M_SEL_PREF_FIFO_STATUS_USED_MASK 0x0000FFFF
542*49b49cdaSZbigniew Bodek #define UDMA_S2M_SEL_PREF_FIFO_STATUS_USED_SHIFT 0
543*49b49cdaSZbigniew Bodek /* FIFO empty indication */
544*49b49cdaSZbigniew Bodek #define UDMA_S2M_SEL_PREF_FIFO_STATUS_EMPTY (1 << 24)
545*49b49cdaSZbigniew Bodek /* FIFO full indication */
546*49b49cdaSZbigniew Bodek #define UDMA_S2M_SEL_PREF_FIFO_STATUS_FULL (1 << 28)
547*49b49cdaSZbigniew Bodek 
548*49b49cdaSZbigniew Bodek /**** sel_comp_fifo_status register ****/
549*49b49cdaSZbigniew Bodek /* FIFO used indication */
550*49b49cdaSZbigniew Bodek #define UDMA_S2M_SEL_COMP_FIFO_STATUS_USED_MASK 0x0000FFFF
551*49b49cdaSZbigniew Bodek #define UDMA_S2M_SEL_COMP_FIFO_STATUS_USED_SHIFT 0
552*49b49cdaSZbigniew Bodek /* Coalescing ACTIVE FSM state indication. */
553*49b49cdaSZbigniew Bodek #define UDMA_S2M_SEL_COMP_FIFO_STATUS_COAL_ACTIVE_STATE_MASK 0x00300000
554*49b49cdaSZbigniew Bodek #define UDMA_S2M_SEL_COMP_FIFO_STATUS_COAL_ACTIVE_STATE_SHIFT 20
555*49b49cdaSZbigniew Bodek /* FIFO empty indication */
556*49b49cdaSZbigniew Bodek #define UDMA_S2M_SEL_COMP_FIFO_STATUS_EMPTY (1 << 24)
557*49b49cdaSZbigniew Bodek /* FIFO full indication */
558*49b49cdaSZbigniew Bodek #define UDMA_S2M_SEL_COMP_FIFO_STATUS_FULL (1 << 28)
559*49b49cdaSZbigniew Bodek 
560*49b49cdaSZbigniew Bodek /**** stream_cfg register ****/
561*49b49cdaSZbigniew Bodek /*
562*49b49cdaSZbigniew Bodek  * Disables the stream interface operation.
563*49b49cdaSZbigniew Bodek  * Changing to 1 stops at the end of packet reception.
564*49b49cdaSZbigniew Bodek  */
565*49b49cdaSZbigniew Bodek #define UDMA_S2M_STREAM_CFG_DISABLE  (1 << 0)
566*49b49cdaSZbigniew Bodek /*
567*49b49cdaSZbigniew Bodek  * Flush the stream interface operation.
568*49b49cdaSZbigniew Bodek  * Changing to 1 stops at the end of packet reception and assert ready to the
569*49b49cdaSZbigniew Bodek  * stream I/F.
570*49b49cdaSZbigniew Bodek  */
571*49b49cdaSZbigniew Bodek #define UDMA_S2M_STREAM_CFG_FLUSH    (1 << 4)
572*49b49cdaSZbigniew Bodek /* Stop descriptor prefetch when the stream is disabled and the S2M is idle. */
573*49b49cdaSZbigniew Bodek #define UDMA_S2M_STREAM_CFG_STOP_PREFETCH (1 << 8)
574*49b49cdaSZbigniew Bodek 
575*49b49cdaSZbigniew Bodek /**** desc_pref_cfg_1 register ****/
576*49b49cdaSZbigniew Bodek /*
577*49b49cdaSZbigniew Bodek  * Size of the descriptor prefetch FIFO.
578*49b49cdaSZbigniew Bodek  * (descriptors)
579*49b49cdaSZbigniew Bodek  */
580*49b49cdaSZbigniew Bodek #define UDMA_S2M_RD_DESC_PREF_CFG_1_FIFO_DEPTH_MASK 0x000000FF
581*49b49cdaSZbigniew Bodek #define UDMA_S2M_RD_DESC_PREF_CFG_1_FIFO_DEPTH_SHIFT 0
582*49b49cdaSZbigniew Bodek 
583*49b49cdaSZbigniew Bodek /**** desc_pref_cfg_2 register ****/
584*49b49cdaSZbigniew Bodek /* Enable promotion of the current queue in progress */
585*49b49cdaSZbigniew Bodek #define UDMA_S2M_RD_DESC_PREF_CFG_2_Q_PROMOTION (1 << 0)
586*49b49cdaSZbigniew Bodek /* Force promotion of the current queue in progress */
587*49b49cdaSZbigniew Bodek #define UDMA_S2M_RD_DESC_PREF_CFG_2_FORCE_PROMOTION (1 << 1)
588*49b49cdaSZbigniew Bodek /* Enable prefetch prediction of next packet in line. */
589*49b49cdaSZbigniew Bodek #define UDMA_S2M_RD_DESC_PREF_CFG_2_EN_PREF_PREDICTION (1 << 2)
590*49b49cdaSZbigniew Bodek /*
591*49b49cdaSZbigniew Bodek  * Threshold for queue promotion.
592*49b49cdaSZbigniew Bodek  * Queue is promoted for prefetch if there are less descriptors in the prefetch
593*49b49cdaSZbigniew Bodek  * FIFO than the threshold
594*49b49cdaSZbigniew Bodek  */
595*49b49cdaSZbigniew Bodek #define UDMA_S2M_RD_DESC_PREF_CFG_2_PROMOTION_TH_MASK 0x0000FF00
596*49b49cdaSZbigniew Bodek #define UDMA_S2M_RD_DESC_PREF_CFG_2_PROMOTION_TH_SHIFT 8
597*49b49cdaSZbigniew Bodek /*
598*49b49cdaSZbigniew Bodek  * Force RR arbitration in the prefetch arbiter.
599*49b49cdaSZbigniew Bodek  * 0 - Standard arbitration based on queue QoS
600*49b49cdaSZbigniew Bodek  * 1 - Force round robin arbitration
601*49b49cdaSZbigniew Bodek  */
602*49b49cdaSZbigniew Bodek #define UDMA_S2M_RD_DESC_PREF_CFG_2_PREF_FORCE_RR (1 << 16)
603*49b49cdaSZbigniew Bodek 
604*49b49cdaSZbigniew Bodek /**** desc_pref_cfg_3 register ****/
605*49b49cdaSZbigniew Bodek /*
606*49b49cdaSZbigniew Bodek  * Minimum descriptor burst size when prefetch FIFO level is below the
607*49b49cdaSZbigniew Bodek  * descriptor prefetch threshold
608*49b49cdaSZbigniew Bodek  * (must be 1)
609*49b49cdaSZbigniew Bodek  */
610*49b49cdaSZbigniew Bodek #define UDMA_S2M_RD_DESC_PREF_CFG_3_MIN_BURST_BELOW_THR_MASK 0x0000000F
611*49b49cdaSZbigniew Bodek #define UDMA_S2M_RD_DESC_PREF_CFG_3_MIN_BURST_BELOW_THR_SHIFT 0
612*49b49cdaSZbigniew Bodek /*
613*49b49cdaSZbigniew Bodek  * Minimum descriptor burst size when prefetch FIFO level is above the
614*49b49cdaSZbigniew Bodek  * descriptor prefetch threshold
615*49b49cdaSZbigniew Bodek  */
616*49b49cdaSZbigniew Bodek #define UDMA_S2M_RD_DESC_PREF_CFG_3_MIN_BURST_ABOVE_THR_MASK 0x000000F0
617*49b49cdaSZbigniew Bodek #define UDMA_S2M_RD_DESC_PREF_CFG_3_MIN_BURST_ABOVE_THR_SHIFT 4
618*49b49cdaSZbigniew Bodek /*
619*49b49cdaSZbigniew Bodek  * Descriptor fetch threshold.
620*49b49cdaSZbigniew Bodek  * Used as a threshold to determine the allowed minimum descriptor burst size.
621*49b49cdaSZbigniew Bodek  * (Must be at least "max_desc_per_pkt")
622*49b49cdaSZbigniew Bodek  */
623*49b49cdaSZbigniew Bodek #define UDMA_S2M_RD_DESC_PREF_CFG_3_PREF_THR_MASK 0x0000FF00
624*49b49cdaSZbigniew Bodek #define UDMA_S2M_RD_DESC_PREF_CFG_3_PREF_THR_SHIFT 8
625*49b49cdaSZbigniew Bodek 
626*49b49cdaSZbigniew Bodek /**** desc_pref_cfg_4 register ****/
627*49b49cdaSZbigniew Bodek /*
628*49b49cdaSZbigniew Bodek  * Used as a threshold for generating almost FULL indication to the application
629*49b49cdaSZbigniew Bodek  */
630*49b49cdaSZbigniew Bodek #define UDMA_S2M_RD_DESC_PREF_CFG_4_A_FULL_THR_MASK 0x000000FF
631*49b49cdaSZbigniew Bodek #define UDMA_S2M_RD_DESC_PREF_CFG_4_A_FULL_THR_SHIFT 0
632*49b49cdaSZbigniew Bodek 
633*49b49cdaSZbigniew Bodek /**** data_cfg_1 register ****/
634*49b49cdaSZbigniew Bodek /*
635*49b49cdaSZbigniew Bodek  * Maximum number of data beats in the data write FIFO.
636*49b49cdaSZbigniew Bodek  * Defined based on data FIFO size
637*49b49cdaSZbigniew Bodek  * (default FIFO size 512B → 32 beats)
638*49b49cdaSZbigniew Bodek  */
639*49b49cdaSZbigniew Bodek #define UDMA_S2M_WR_DATA_CFG_1_DATA_FIFO_DEPTH_MASK 0x000003FF
640*49b49cdaSZbigniew Bodek #define UDMA_S2M_WR_DATA_CFG_1_DATA_FIFO_DEPTH_SHIFT 0
641*49b49cdaSZbigniew Bodek /*
642*49b49cdaSZbigniew Bodek  * Maximum number of packets in the data write FIFO.
643*49b49cdaSZbigniew Bodek  * Defined based on header FIFO size
644*49b49cdaSZbigniew Bodek  */
645*49b49cdaSZbigniew Bodek #define UDMA_S2M_WR_DATA_CFG_1_MAX_PKT_LIMIT_MASK 0x00FF0000
646*49b49cdaSZbigniew Bodek #define UDMA_S2M_WR_DATA_CFG_1_MAX_PKT_LIMIT_SHIFT 16
647*49b49cdaSZbigniew Bodek /*
648*49b49cdaSZbigniew Bodek  * Internal use
649*49b49cdaSZbigniew Bodek  * Data FIFO margin
650*49b49cdaSZbigniew Bodek  */
651*49b49cdaSZbigniew Bodek #define UDMA_S2M_WR_DATA_CFG_1_FIFO_MARGIN_MASK 0xFF000000
652*49b49cdaSZbigniew Bodek #define UDMA_S2M_WR_DATA_CFG_1_FIFO_MARGIN_SHIFT 24
653*49b49cdaSZbigniew Bodek 
654*49b49cdaSZbigniew Bodek /**** data_cfg_2 register ****/
655*49b49cdaSZbigniew Bodek /*
656*49b49cdaSZbigniew Bodek  * Drop timer.
657*49b49cdaSZbigniew Bodek  * Waiting time for the host to write new descriptor to the queue
658*49b49cdaSZbigniew Bodek  * (for the current packet in process)
659*49b49cdaSZbigniew Bodek  */
660*49b49cdaSZbigniew Bodek #define UDMA_S2M_WR_DATA_CFG_2_DESC_WAIT_TIMER_MASK 0x00FFFFFF
661*49b49cdaSZbigniew Bodek #define UDMA_S2M_WR_DATA_CFG_2_DESC_WAIT_TIMER_SHIFT 0
662*49b49cdaSZbigniew Bodek /*
663*49b49cdaSZbigniew Bodek  * Drop enable.
664*49b49cdaSZbigniew Bodek  * Enable packet drop if there are no available descriptors in the system for
665*49b49cdaSZbigniew Bodek  * this queue
666*49b49cdaSZbigniew Bodek  */
667*49b49cdaSZbigniew Bodek #define UDMA_S2M_WR_DATA_CFG_2_DROP_IF_NO_DESC (1 << 27)
668*49b49cdaSZbigniew Bodek /*
669*49b49cdaSZbigniew Bodek  * Lack of descriptors hint.
670*49b49cdaSZbigniew Bodek  * Generate interrupt when a packet is waiting but there are no available
671*49b49cdaSZbigniew Bodek  * descriptors in the queue
672*49b49cdaSZbigniew Bodek  */
673*49b49cdaSZbigniew Bodek #define UDMA_S2M_WR_DATA_CFG_2_HINT_IF_NO_DESC (1 << 28)
674*49b49cdaSZbigniew Bodek /*
675*49b49cdaSZbigniew Bodek  * Drop conditions
676*49b49cdaSZbigniew Bodek  * Wait until a descriptor is available in the prefetch FIFO or the host before
677*49b49cdaSZbigniew Bodek  * dropping packet.
678*49b49cdaSZbigniew Bodek  * 1 - Drop if a descriptor is not available in the prefetch.
679*49b49cdaSZbigniew Bodek  * 0 - Drop if a descriptor is not available in the system
680*49b49cdaSZbigniew Bodek  */
681*49b49cdaSZbigniew Bodek #define UDMA_S2M_WR_DATA_CFG_2_WAIT_FOR_PREF (1 << 29)
682*49b49cdaSZbigniew Bodek /*
683*49b49cdaSZbigniew Bodek  * DRAM write optimization
684*49b49cdaSZbigniew Bodek  * 0 - Data write with byte enable
685*49b49cdaSZbigniew Bodek  * 1 - Data write is always in Full AXI bus width (128 bit)
686*49b49cdaSZbigniew Bodek  */
687*49b49cdaSZbigniew Bodek #define UDMA_S2M_WR_DATA_CFG_2_FULL_LINE_MODE (1 << 30)
688*49b49cdaSZbigniew Bodek /*
689*49b49cdaSZbigniew Bodek  * Direct data write address
690*49b49cdaSZbigniew Bodek  * 1 - Use buffer 1 instead of buffer 2 when direct data placement is used with
691*49b49cdaSZbigniew Bodek  * header split.
692*49b49cdaSZbigniew Bodek  * 0 - Use buffer 2 for the header.
693*49b49cdaSZbigniew Bodek  */
694*49b49cdaSZbigniew Bodek #define UDMA_S2M_WR_DATA_CFG_2_DIRECT_HDR_USE_BUF1 (1 << 31)
695*49b49cdaSZbigniew Bodek 
696*49b49cdaSZbigniew Bodek /**** cfg_1c register ****/
697*49b49cdaSZbigniew Bodek /*
698*49b49cdaSZbigniew Bodek  * Completion descriptor size.
699*49b49cdaSZbigniew Bodek  * (words)
700*49b49cdaSZbigniew Bodek  */
701*49b49cdaSZbigniew Bodek #define UDMA_S2M_COMP_CFG_1C_DESC_SIZE_MASK 0x0000000F
702*49b49cdaSZbigniew Bodek #define UDMA_S2M_COMP_CFG_1C_DESC_SIZE_SHIFT 0
703*49b49cdaSZbigniew Bodek /*
704*49b49cdaSZbigniew Bodek  * Completion queue counter configuration.
705*49b49cdaSZbigniew Bodek  * Completion FIFO in use counter measured in words or descriptors
706*49b49cdaSZbigniew Bodek  * 1 - Words
707*49b49cdaSZbigniew Bodek  * 0 - Descriptors
708*49b49cdaSZbigniew Bodek  */
709*49b49cdaSZbigniew Bodek #define UDMA_S2M_COMP_CFG_1C_CNT_WORDS (1 << 8)
710*49b49cdaSZbigniew Bodek /*
711*49b49cdaSZbigniew Bodek  * Enable promotion of the current queue in progress in the completion write
712*49b49cdaSZbigniew Bodek  * scheduler.
713*49b49cdaSZbigniew Bodek  */
714*49b49cdaSZbigniew Bodek #define UDMA_S2M_COMP_CFG_1C_Q_PROMOTION (1 << 12)
715*49b49cdaSZbigniew Bodek /* Force RR arbitration in the completion arbiter */
716*49b49cdaSZbigniew Bodek #define UDMA_S2M_COMP_CFG_1C_FORCE_RR (1 << 16)
717*49b49cdaSZbigniew Bodek /* Minimum number of free completion entries to qualify for promotion */
718*49b49cdaSZbigniew Bodek #define UDMA_S2M_COMP_CFG_1C_Q_FREE_MIN_MASK 0xF0000000
719*49b49cdaSZbigniew Bodek #define UDMA_S2M_COMP_CFG_1C_Q_FREE_MIN_SHIFT 28
720*49b49cdaSZbigniew Bodek 
721*49b49cdaSZbigniew Bodek /**** cfg_2c register ****/
722*49b49cdaSZbigniew Bodek /*
723*49b49cdaSZbigniew Bodek  * Completion FIFO size.
724*49b49cdaSZbigniew Bodek  * (words per queue)
725*49b49cdaSZbigniew Bodek  */
726*49b49cdaSZbigniew Bodek #define UDMA_S2M_COMP_CFG_2C_COMP_FIFO_DEPTH_MASK 0x00000FFF
727*49b49cdaSZbigniew Bodek #define UDMA_S2M_COMP_CFG_2C_COMP_FIFO_DEPTH_SHIFT 0
728*49b49cdaSZbigniew Bodek /*
729*49b49cdaSZbigniew Bodek  * Unacknowledged FIFO size.
730*49b49cdaSZbigniew Bodek  * (descriptors)
731*49b49cdaSZbigniew Bodek  */
732*49b49cdaSZbigniew Bodek #define UDMA_S2M_COMP_CFG_2C_UNACK_FIFO_DEPTH_MASK 0x0FFF0000
733*49b49cdaSZbigniew Bodek #define UDMA_S2M_COMP_CFG_2C_UNACK_FIFO_DEPTH_SHIFT 16
734*49b49cdaSZbigniew Bodek 
735*49b49cdaSZbigniew Bodek /**** reg_1 register ****/
736*49b49cdaSZbigniew Bodek /*
737*49b49cdaSZbigniew Bodek  * Descriptor prefetch FIFO size
738*49b49cdaSZbigniew Bodek  * (descriptors)
739*49b49cdaSZbigniew Bodek  */
740*49b49cdaSZbigniew Bodek #define UDMA_S2M_FEATURE_REG_1_DESC_PREFERCH_FIFO_DEPTH_MASK 0x000000FF
741*49b49cdaSZbigniew Bodek #define UDMA_S2M_FEATURE_REG_1_DESC_PREFERCH_FIFO_DEPTH_SHIFT 0
742*49b49cdaSZbigniew Bodek 
743*49b49cdaSZbigniew Bodek /**** reg_3 register ****/
744*49b49cdaSZbigniew Bodek /*
745*49b49cdaSZbigniew Bodek  * Maximum number of data beats in the data write FIFO.
746*49b49cdaSZbigniew Bodek  * Defined based on data FIFO size
747*49b49cdaSZbigniew Bodek  * (default FIFO size 512B →32 beats)
748*49b49cdaSZbigniew Bodek  */
749*49b49cdaSZbigniew Bodek #define UDMA_S2M_FEATURE_REG_3_DATA_FIFO_DEPTH_MASK 0x000003FF
750*49b49cdaSZbigniew Bodek #define UDMA_S2M_FEATURE_REG_3_DATA_FIFO_DEPTH_SHIFT 0
751*49b49cdaSZbigniew Bodek /*
752*49b49cdaSZbigniew Bodek  * Maximum number of packets in the data write FIFO.
753*49b49cdaSZbigniew Bodek  * Defined based on header FIFO size
754*49b49cdaSZbigniew Bodek  */
755*49b49cdaSZbigniew Bodek #define UDMA_S2M_FEATURE_REG_3_DATA_WR_MAX_PKT_LIMIT_MASK 0x00FF0000
756*49b49cdaSZbigniew Bodek #define UDMA_S2M_FEATURE_REG_3_DATA_WR_MAX_PKT_LIMIT_SHIFT 16
757*49b49cdaSZbigniew Bodek 
758*49b49cdaSZbigniew Bodek /**** reg_4 register ****/
759*49b49cdaSZbigniew Bodek /*
760*49b49cdaSZbigniew Bodek  * Completion FIFO size.
761*49b49cdaSZbigniew Bodek  * (words per queue)
762*49b49cdaSZbigniew Bodek  */
763*49b49cdaSZbigniew Bodek #define UDMA_S2M_FEATURE_REG_4_COMP_FIFO_DEPTH_MASK 0x00000FFF
764*49b49cdaSZbigniew Bodek #define UDMA_S2M_FEATURE_REG_4_COMP_FIFO_DEPTH_SHIFT 0
765*49b49cdaSZbigniew Bodek /*
766*49b49cdaSZbigniew Bodek  * Unacknowledged FIFO size.
767*49b49cdaSZbigniew Bodek  * (descriptors)
768*49b49cdaSZbigniew Bodek  */
769*49b49cdaSZbigniew Bodek #define UDMA_S2M_FEATURE_REG_4_COMP_UNACK_FIFO_DEPTH_MASK 0x0FFF0000
770*49b49cdaSZbigniew Bodek #define UDMA_S2M_FEATURE_REG_4_COMP_UNACK_FIFO_DEPTH_SHIFT 16
771*49b49cdaSZbigniew Bodek 
772*49b49cdaSZbigniew Bodek /**** reg_5 register ****/
773*49b49cdaSZbigniew Bodek /* Maximum number of outstanding data writes to the AXI */
774*49b49cdaSZbigniew Bodek #define UDMA_S2M_FEATURE_REG_5_MAX_DATA_WR_OSTAND_MASK 0x0000003F
775*49b49cdaSZbigniew Bodek #define UDMA_S2M_FEATURE_REG_5_MAX_DATA_WR_OSTAND_SHIFT 0
776*49b49cdaSZbigniew Bodek /*
777*49b49cdaSZbigniew Bodek  * Maximum number of outstanding data beats for data write to AXI.
778*49b49cdaSZbigniew Bodek  * (AXI beats)
779*49b49cdaSZbigniew Bodek  */
780*49b49cdaSZbigniew Bodek #define UDMA_S2M_FEATURE_REG_5_MAX_DATA_BEATS_WR_OSTAND_MASK 0x0000FF00
781*49b49cdaSZbigniew Bodek #define UDMA_S2M_FEATURE_REG_5_MAX_DATA_BEATS_WR_OSTAND_SHIFT 8
782*49b49cdaSZbigniew Bodek /*
783*49b49cdaSZbigniew Bodek  * Maximum number of outstanding descriptor reads to the AXI.
784*49b49cdaSZbigniew Bodek  * (AXI transactions)
785*49b49cdaSZbigniew Bodek  */
786*49b49cdaSZbigniew Bodek #define UDMA_S2M_FEATURE_REG_5_MAX_COMP_REQ_MASK 0x003F0000
787*49b49cdaSZbigniew Bodek #define UDMA_S2M_FEATURE_REG_5_MAX_COMP_REQ_SHIFT 16
788*49b49cdaSZbigniew Bodek /*
789*49b49cdaSZbigniew Bodek  * Maximum number of outstanding data beats for descriptor write to AXI.
790*49b49cdaSZbigniew Bodek  * (AXI beats)
791*49b49cdaSZbigniew Bodek  */
792*49b49cdaSZbigniew Bodek #define UDMA_S2M_FEATURE_REG_5_MAX_COMP_DATA_WR_OSTAND_MASK 0xFF000000
793*49b49cdaSZbigniew Bodek #define UDMA_S2M_FEATURE_REG_5_MAX_COMP_DATA_WR_OSTAND_SHIFT 24
794*49b49cdaSZbigniew Bodek 
795*49b49cdaSZbigniew Bodek /**** reg_6 register ****/
796*49b49cdaSZbigniew Bodek /* Maximum number of outstanding descriptor reads to the AXI */
797*49b49cdaSZbigniew Bodek #define UDMA_S2M_FEATURE_REG_6_MAX_DESC_RD_OSTAND_MASK 0x0000003F
798*49b49cdaSZbigniew Bodek #define UDMA_S2M_FEATURE_REG_6_MAX_DESC_RD_OSTAND_SHIFT 0
799*49b49cdaSZbigniew Bodek /* Maximum number of outstanding stream acknowledges */
800*49b49cdaSZbigniew Bodek #define UDMA_S2M_FEATURE_REG_6_MAX_STREAM_ACK_MASK 0x001F0000
801*49b49cdaSZbigniew Bodek #define UDMA_S2M_FEATURE_REG_6_MAX_STREAM_ACK_SHIFT 16
802*49b49cdaSZbigniew Bodek 
803*49b49cdaSZbigniew Bodek /**** cfg register ****/
804*49b49cdaSZbigniew Bodek /*
805*49b49cdaSZbigniew Bodek  * Configure the AXI AWCACHE
806*49b49cdaSZbigniew Bodek  * for header write.
807*49b49cdaSZbigniew Bodek  */
808*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_CFG_AXI_AWCACHE_HDR_MASK 0x0000000F
809*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_CFG_AXI_AWCACHE_HDR_SHIFT 0
810*49b49cdaSZbigniew Bodek /*
811*49b49cdaSZbigniew Bodek  * Configure the AXI AWCACHE
812*49b49cdaSZbigniew Bodek  * for data write.
813*49b49cdaSZbigniew Bodek  */
814*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_CFG_AXI_AWCACHE_DATA_MASK 0x000000F0
815*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_CFG_AXI_AWCACHE_DATA_SHIFT 4
816*49b49cdaSZbigniew Bodek /*
817*49b49cdaSZbigniew Bodek  * Enable operation of this queue.
818*49b49cdaSZbigniew Bodek  * Start prefetch.
819*49b49cdaSZbigniew Bodek  */
820*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_CFG_EN_PREF       (1 << 16)
821*49b49cdaSZbigniew Bodek /* Enables the reception of packets from the stream to this queue */
822*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_CFG_EN_STREAM     (1 << 17)
823*49b49cdaSZbigniew Bodek /* Allow prefetch of less than minimum prefetch burst size. */
824*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_CFG_ALLOW_LT_MIN_PREF (1 << 20)
825*49b49cdaSZbigniew Bodek /*
826*49b49cdaSZbigniew Bodek  * Configure the AXI AWCACHE
827*49b49cdaSZbigniew Bodek  * for completion descriptor write
828*49b49cdaSZbigniew Bodek  */
829*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_CFG_AXI_AWCACHE_COMP_MASK 0x0F000000
830*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_CFG_AXI_AWCACHE_COMP_SHIFT 24
831*49b49cdaSZbigniew Bodek /*
832*49b49cdaSZbigniew Bodek  * AXI QoS
833*49b49cdaSZbigniew Bodek  * This value is used in AXI transactions associated with this queue and the
834*49b49cdaSZbigniew Bodek  * prefetch and completion arbiters.
835*49b49cdaSZbigniew Bodek  */
836*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_CFG_AXI_QOS_MASK  0x70000000
837*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_CFG_AXI_QOS_SHIFT 28
838*49b49cdaSZbigniew Bodek 
839*49b49cdaSZbigniew Bodek /**** status register ****/
840*49b49cdaSZbigniew Bodek /* Indicates how many entries are used in the Queue */
841*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_STATUS_Q_USED_MASK 0x01FFFFFF
842*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_STATUS_Q_USED_SHIFT 0
843*49b49cdaSZbigniew Bodek /*
844*49b49cdaSZbigniew Bodek  * prefetch status
845*49b49cdaSZbigniew Bodek  * 0 – prefetch operation is stopped
846*49b49cdaSZbigniew Bodek  * 1 – prefetch is operational
847*49b49cdaSZbigniew Bodek  */
848*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_STATUS_PREFETCH   (1 << 28)
849*49b49cdaSZbigniew Bodek /*
850*49b49cdaSZbigniew Bodek  * Queue receive status
851*49b49cdaSZbigniew Bodek  * 0 -queue RX operation is stopped
852*49b49cdaSZbigniew Bodek  * 1 – RX queue is active and processing packets
853*49b49cdaSZbigniew Bodek  */
854*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_STATUS_RX         (1 << 29)
855*49b49cdaSZbigniew Bodek /*
856*49b49cdaSZbigniew Bodek  * Indicates if the queue is full.
857*49b49cdaSZbigniew Bodek  * (Used by the host when head pointer equals tail pointer)
858*49b49cdaSZbigniew Bodek  */
859*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_STATUS_Q_FULL     (1 << 31)
860*49b49cdaSZbigniew Bodek /*
861*49b49cdaSZbigniew Bodek  * S2M Descriptor Ring Base address [31:4].
862*49b49cdaSZbigniew Bodek  * Value of the base address of the S2M descriptor ring
863*49b49cdaSZbigniew Bodek  * [3:0] - 0 - 16B alignment is enforced
864*49b49cdaSZbigniew Bodek  * ([11:4] should be 0 for 4KB alignment)
865*49b49cdaSZbigniew Bodek  */
866*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_RDRBP_LOW_ADDR_MASK 0xFFFFFFF0
867*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_RDRBP_LOW_ADDR_SHIFT 4
868*49b49cdaSZbigniew Bodek 
869*49b49cdaSZbigniew Bodek /**** RDRL register ****/
870*49b49cdaSZbigniew Bodek /*
871*49b49cdaSZbigniew Bodek  * Length of the descriptor ring.
872*49b49cdaSZbigniew Bodek  * (descriptors)
873*49b49cdaSZbigniew Bodek  * Associated with the ring base address ends at maximum burst size alignment
874*49b49cdaSZbigniew Bodek  */
875*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_RDRL_OFFSET_MASK  0x00FFFFFF
876*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_RDRL_OFFSET_SHIFT 0
877*49b49cdaSZbigniew Bodek 
878*49b49cdaSZbigniew Bodek /**** RDRHP register ****/
879*49b49cdaSZbigniew Bodek /*
880*49b49cdaSZbigniew Bodek  * Relative offset of the next descriptor that needs to be read into the
881*49b49cdaSZbigniew Bodek  * prefetch FIFO.
882*49b49cdaSZbigniew Bodek  * Incremented when the DMA reads valid descriptors from the host memory to the
883*49b49cdaSZbigniew Bodek  * prefetch FIFO.
884*49b49cdaSZbigniew Bodek  * Note that this is the offset in # of descriptors and not in byte address.
885*49b49cdaSZbigniew Bodek  */
886*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_RDRHP_OFFSET_MASK 0x00FFFFFF
887*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_RDRHP_OFFSET_SHIFT 0
888*49b49cdaSZbigniew Bodek /* Ring ID */
889*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_RDRHP_RING_ID_MASK 0xC0000000
890*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_RDRHP_RING_ID_SHIFT 30
891*49b49cdaSZbigniew Bodek 
892*49b49cdaSZbigniew Bodek /**** RDRTP_inc register ****/
893*49b49cdaSZbigniew Bodek /*
894*49b49cdaSZbigniew Bodek  * Increments the value in Q_RDRTP with the value written to this field in
895*49b49cdaSZbigniew Bodek  * number of descriptors.
896*49b49cdaSZbigniew Bodek  */
897*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_RDRTP_INC_VAL_MASK 0x00FFFFFF
898*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_RDRTP_INC_VAL_SHIFT 0
899*49b49cdaSZbigniew Bodek 
900*49b49cdaSZbigniew Bodek /**** RDRTP register ****/
901*49b49cdaSZbigniew Bodek /*
902*49b49cdaSZbigniew Bodek  * Relative offset of the next free descriptor in the host memory.
903*49b49cdaSZbigniew Bodek  * Note that this is the offset in # of descriptors and not in byte address.
904*49b49cdaSZbigniew Bodek  */
905*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_RDRTP_OFFSET_MASK 0x00FFFFFF
906*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_RDRTP_OFFSET_SHIFT 0
907*49b49cdaSZbigniew Bodek /* Ring ID */
908*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_RDRTP_RING_ID_MASK 0xC0000000
909*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_RDRTP_RING_ID_SHIFT 30
910*49b49cdaSZbigniew Bodek 
911*49b49cdaSZbigniew Bodek /**** RDCP register ****/
912*49b49cdaSZbigniew Bodek /* Relative offset of the first descriptor in the prefetch FIFO.  */
913*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_RDCP_OFFSET_MASK  0x00FFFFFF
914*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_RDCP_OFFSET_SHIFT 0
915*49b49cdaSZbigniew Bodek /* Ring ID */
916*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_RDCP_RING_ID_MASK 0xC0000000
917*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_RDCP_RING_ID_SHIFT 30
918*49b49cdaSZbigniew Bodek /*
919*49b49cdaSZbigniew Bodek  * S2M Descriptor Ring Base address [31:4].
920*49b49cdaSZbigniew Bodek  * Value of the base address of the S2M descriptor ring
921*49b49cdaSZbigniew Bodek  * [3:0] - 0 - 16B alignment is enforced
922*49b49cdaSZbigniew Bodek  * ([11:4] Must be 0 for 4KB alignment)
923*49b49cdaSZbigniew Bodek  * NOTE:
924*49b49cdaSZbigniew Bodek  * Length of the descriptor ring (in descriptors) associated with the ring base
925*49b49cdaSZbigniew Bodek  * address ends at maximum burst size alignment
926*49b49cdaSZbigniew Bodek  */
927*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_RCRBP_LOW_ADDR_MASK 0xFFFFFFF0
928*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_RCRBP_LOW_ADDR_SHIFT 4
929*49b49cdaSZbigniew Bodek 
930*49b49cdaSZbigniew Bodek /**** RCRHP register ****/
931*49b49cdaSZbigniew Bodek /*
932*49b49cdaSZbigniew Bodek  * Relative offset of the next descriptor that needs to be updated by the
933*49b49cdaSZbigniew Bodek  * completion controller.
934*49b49cdaSZbigniew Bodek  * Note: This is in descriptors and not in byte address.
935*49b49cdaSZbigniew Bodek  */
936*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_RCRHP_OFFSET_MASK 0x00FFFFFF
937*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_RCRHP_OFFSET_SHIFT 0
938*49b49cdaSZbigniew Bodek /* Ring ID */
939*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_RCRHP_RING_ID_MASK 0xC0000000
940*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_RCRHP_RING_ID_SHIFT 30
941*49b49cdaSZbigniew Bodek 
942*49b49cdaSZbigniew Bodek /**** RCRHP_internal register ****/
943*49b49cdaSZbigniew Bodek /*
944*49b49cdaSZbigniew Bodek  * Relative offset of the next descriptor that needs to be updated by the
945*49b49cdaSZbigniew Bodek  * completion controller.
946*49b49cdaSZbigniew Bodek  * Note: This is in descriptors and not in byte address.
947*49b49cdaSZbigniew Bodek  */
948*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_RCRHP_INTERNAL_OFFSET_MASK 0x00FFFFFF
949*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_RCRHP_INTERNAL_OFFSET_SHIFT 0
950*49b49cdaSZbigniew Bodek /* Ring ID */
951*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_RCRHP_INTERNAL_RING_ID_MASK 0xC0000000
952*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_RCRHP_INTERNAL_RING_ID_SHIFT 30
953*49b49cdaSZbigniew Bodek 
954*49b49cdaSZbigniew Bodek /**** comp_cfg register ****/
955*49b49cdaSZbigniew Bodek /* Enables writing to the completion ring. */
956*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_COMP_CFG_EN_COMP_RING_UPDATE (1 << 0)
957*49b49cdaSZbigniew Bodek /* Disables the completion coalescing function. */
958*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_COMP_CFG_DIS_COMP_COAL (1 << 1)
959*49b49cdaSZbigniew Bodek /* Reserved */
960*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_COMP_CFG_FIRST_PKT_PROMOTION (1 << 2)
961*49b49cdaSZbigniew Bodek /*
962*49b49cdaSZbigniew Bodek  * Buffer 2 location.
963*49b49cdaSZbigniew Bodek  * Determines the position of the buffer 2 length in the S2M completion
964*49b49cdaSZbigniew Bodek  * descriptor.
965*49b49cdaSZbigniew Bodek  * 0 - WORD 1 [31:16]
966*49b49cdaSZbigniew Bodek  * 1 - WORD 2 [31:16]
967*49b49cdaSZbigniew Bodek  */
968*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_COMP_CFG_BUF2_LEN_LOCATION (1 << 3)
969*49b49cdaSZbigniew Bodek 
970*49b49cdaSZbigniew Bodek /**** pkt_cfg register ****/
971*49b49cdaSZbigniew Bodek /* Header size. (bytes) */
972*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_PKT_CFG_HDR_SPLIT_SIZE_MASK 0x0000FFFF
973*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_PKT_CFG_HDR_SPLIT_SIZE_SHIFT 0
974*49b49cdaSZbigniew Bodek /* Force header split */
975*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_PKT_CFG_FORCE_HDR_SPLIT (1 << 16)
976*49b49cdaSZbigniew Bodek /* Enable header split. */
977*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_PKT_CFG_EN_HDR_SPLIT (1 << 17)
978*49b49cdaSZbigniew Bodek 
979*49b49cdaSZbigniew Bodek /**** qos_cfg register ****/
980*49b49cdaSZbigniew Bodek /* Queue QoS */
981*49b49cdaSZbigniew Bodek #define UDMA_S2M_QOS_CFG_Q_QOS_MASK 0x000000FF
982*49b49cdaSZbigniew Bodek #define UDMA_S2M_QOS_CFG_Q_QOS_SHIFT 0
983*49b49cdaSZbigniew Bodek /* Reset the tail pointer hardware. */
984*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_SW_CTRL_RST_TAIL_PTR (1 << 1)
985*49b49cdaSZbigniew Bodek /* Reset the head pointer hardware. */
986*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_SW_CTRL_RST_HEAD_PTR (1 << 2)
987*49b49cdaSZbigniew Bodek /* Reset the current pointer hardware. */
988*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_SW_CTRL_RST_CURRENT_PTR (1 << 3)
989*49b49cdaSZbigniew Bodek /* Reset the prefetch FIFO */
990*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_SW_CTRL_RST_PREFETCH (1 << 4)
991*49b49cdaSZbigniew Bodek /* Reset the queue */
992*49b49cdaSZbigniew Bodek #define UDMA_S2M_Q_SW_CTRL_RST_Q   (1 << 8)
993*49b49cdaSZbigniew Bodek 
994*49b49cdaSZbigniew Bodek #ifdef __cplusplus
995*49b49cdaSZbigniew Bodek }
996*49b49cdaSZbigniew Bodek #endif
997*49b49cdaSZbigniew Bodek 
998*49b49cdaSZbigniew Bodek #endif /* __AL_HAL_UDMA_S2M_REG_H */
999