149b49cdaSZbigniew Bodek /*-
249b49cdaSZbigniew Bodek *******************************************************************************
349b49cdaSZbigniew Bodek Copyright (C) 2015 Annapurna Labs Ltd.
449b49cdaSZbigniew Bodek 
549b49cdaSZbigniew Bodek This file may be licensed under the terms of the Annapurna Labs Commercial
649b49cdaSZbigniew Bodek License Agreement.
749b49cdaSZbigniew Bodek 
849b49cdaSZbigniew Bodek Alternatively, this file can be distributed under the terms of the GNU General
949b49cdaSZbigniew Bodek Public License V2 as published by the Free Software Foundation and can be
1049b49cdaSZbigniew Bodek found at http://www.gnu.org/licenses/gpl-2.0.html
1149b49cdaSZbigniew Bodek 
1249b49cdaSZbigniew Bodek Alternatively, redistribution and use in source and binary forms, with or
1349b49cdaSZbigniew Bodek without modification, are permitted provided that the following conditions are
1449b49cdaSZbigniew Bodek met:
1549b49cdaSZbigniew Bodek 
1649b49cdaSZbigniew Bodek     *     Redistributions of source code must retain the above copyright notice,
1749b49cdaSZbigniew Bodek this list of conditions and the following disclaimer.
1849b49cdaSZbigniew Bodek 
1949b49cdaSZbigniew Bodek     *     Redistributions in binary form must reproduce the above copyright
2049b49cdaSZbigniew Bodek notice, this list of conditions and the following disclaimer in
2149b49cdaSZbigniew Bodek the documentation and/or other materials provided with the
2249b49cdaSZbigniew Bodek distribution.
2349b49cdaSZbigniew Bodek 
2449b49cdaSZbigniew Bodek THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
2549b49cdaSZbigniew Bodek ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
2649b49cdaSZbigniew Bodek WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
2749b49cdaSZbigniew Bodek DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
2849b49cdaSZbigniew Bodek ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
2949b49cdaSZbigniew Bodek (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
3049b49cdaSZbigniew Bodek LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
3149b49cdaSZbigniew Bodek ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
3249b49cdaSZbigniew Bodek (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
3349b49cdaSZbigniew Bodek SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3449b49cdaSZbigniew Bodek 
3549b49cdaSZbigniew Bodek *******************************************************************************/
3649b49cdaSZbigniew Bodek 
3749b49cdaSZbigniew Bodek /**
3849b49cdaSZbigniew Bodek  * @file   al_hal_udma_regs_m2s.h
3949b49cdaSZbigniew Bodek  *
4049b49cdaSZbigniew Bodek  * @brief C Header file for the UDMA M2S registers
4149b49cdaSZbigniew Bodek  *
4249b49cdaSZbigniew Bodek  */
4349b49cdaSZbigniew Bodek 
4449b49cdaSZbigniew Bodek #ifndef __AL_HAL_UDMA_M2S_REG_H
4549b49cdaSZbigniew Bodek #define __AL_HAL_UDMA_M2S_REG_H
4649b49cdaSZbigniew Bodek 
4749b49cdaSZbigniew Bodek #include "al_hal_plat_types.h"
4849b49cdaSZbigniew Bodek 
4949b49cdaSZbigniew Bodek #ifdef __cplusplus
5049b49cdaSZbigniew Bodek extern "C" {
5149b49cdaSZbigniew Bodek #endif
5249b49cdaSZbigniew Bodek /*
5349b49cdaSZbigniew Bodek * Unit Registers
5449b49cdaSZbigniew Bodek */
5549b49cdaSZbigniew Bodek 
5649b49cdaSZbigniew Bodek 
5749b49cdaSZbigniew Bodek 
5849b49cdaSZbigniew Bodek struct udma_axi_m2s {
5949b49cdaSZbigniew Bodek 	/* [0x0] Completion write master configuration */
6049b49cdaSZbigniew Bodek 	uint32_t comp_wr_cfg_1;
6149b49cdaSZbigniew Bodek 	/* [0x4] Completion write master configuration */
6249b49cdaSZbigniew Bodek 	uint32_t comp_wr_cfg_2;
6349b49cdaSZbigniew Bodek 	/* [0x8] Data read master configuration */
6449b49cdaSZbigniew Bodek 	uint32_t data_rd_cfg_1;
6549b49cdaSZbigniew Bodek 	/* [0xc] Data read master configuration */
6649b49cdaSZbigniew Bodek 	uint32_t data_rd_cfg_2;
6749b49cdaSZbigniew Bodek 	/* [0x10] Descriptor read master configuration */
6849b49cdaSZbigniew Bodek 	uint32_t desc_rd_cfg_1;
6949b49cdaSZbigniew Bodek 	/* [0x14] Descriptor read master configuration */
7049b49cdaSZbigniew Bodek 	uint32_t desc_rd_cfg_2;
7149b49cdaSZbigniew Bodek 	/* [0x18] Data read master configuration */
7249b49cdaSZbigniew Bodek 	uint32_t data_rd_cfg;
7349b49cdaSZbigniew Bodek 	/* [0x1c] Descriptors read master configuration */
7449b49cdaSZbigniew Bodek 	uint32_t desc_rd_cfg_3;
7549b49cdaSZbigniew Bodek 	/* [0x20] Descriptors write master configuration (completion) */
7649b49cdaSZbigniew Bodek 	uint32_t desc_wr_cfg_1;
7749b49cdaSZbigniew Bodek 	/* [0x24] AXI outstanding  configuration */
7849b49cdaSZbigniew Bodek 	uint32_t ostand_cfg;
7949b49cdaSZbigniew Bodek 	uint32_t rsrvd[54];
8049b49cdaSZbigniew Bodek };
8149b49cdaSZbigniew Bodek struct udma_m2s {
8249b49cdaSZbigniew Bodek 	/*
8349b49cdaSZbigniew Bodek 	 * [0x0] DMA state.
8449b49cdaSZbigniew Bodek 	 * 00  - No pending tasks
8549b49cdaSZbigniew Bodek 	 * 01 – Normal (active)
8649b49cdaSZbigniew Bodek 	 * 10 – Abort (error condition)
8749b49cdaSZbigniew Bodek 	 * 11 – Reserved
8849b49cdaSZbigniew Bodek 	 */
8949b49cdaSZbigniew Bodek 	uint32_t state;
9049b49cdaSZbigniew Bodek 	/* [0x4] CPU request to change DMA state */
9149b49cdaSZbigniew Bodek 	uint32_t change_state;
9249b49cdaSZbigniew Bodek 	uint32_t rsrvd_0;
9349b49cdaSZbigniew Bodek 	/*
9449b49cdaSZbigniew Bodek 	 * [0xc] M2S DMA error log mask.
9549b49cdaSZbigniew Bodek 	 * Each error has an interrupt controller cause bit.
9649b49cdaSZbigniew Bodek 	 * This register determines if these errors cause the M2S DMA to log the
9749b49cdaSZbigniew Bodek 	 * error condition.
9849b49cdaSZbigniew Bodek 	 * 0 - Log is enabled.
9949b49cdaSZbigniew Bodek 	 * 1 - Log is masked.
10049b49cdaSZbigniew Bodek 	 */
10149b49cdaSZbigniew Bodek 	uint32_t err_log_mask;
10249b49cdaSZbigniew Bodek 	uint32_t rsrvd_1;
10349b49cdaSZbigniew Bodek 	/*
10449b49cdaSZbigniew Bodek 	 * [0x14] DMA header log.
10549b49cdaSZbigniew Bodek 	 * Sample the packet header that caused the error.
10649b49cdaSZbigniew Bodek 	 */
10749b49cdaSZbigniew Bodek 	uint32_t log_0;
10849b49cdaSZbigniew Bodek 	/*
10949b49cdaSZbigniew Bodek 	 * [0x18] DMA header log.
11049b49cdaSZbigniew Bodek 	 * Sample the packet header that caused the error.
11149b49cdaSZbigniew Bodek 	 */
11249b49cdaSZbigniew Bodek 	uint32_t log_1;
11349b49cdaSZbigniew Bodek 	/*
11449b49cdaSZbigniew Bodek 	 * [0x1c] DMA header log.
11549b49cdaSZbigniew Bodek 	 * Sample the packet header that caused the error.
11649b49cdaSZbigniew Bodek 	 */
11749b49cdaSZbigniew Bodek 	uint32_t log_2;
11849b49cdaSZbigniew Bodek 	/*
11949b49cdaSZbigniew Bodek 	 * [0x20] DMA header log.
12049b49cdaSZbigniew Bodek 	 * Sample the packet header that caused the error.
12149b49cdaSZbigniew Bodek 	 */
12249b49cdaSZbigniew Bodek 	uint32_t log_3;
12349b49cdaSZbigniew Bodek 	/* [0x24] DMA clear error log */
12449b49cdaSZbigniew Bodek 	uint32_t clear_err_log;
12549b49cdaSZbigniew Bodek 	/* [0x28] M2S data FIFO status */
12649b49cdaSZbigniew Bodek 	uint32_t data_fifo_status;
12749b49cdaSZbigniew Bodek 	/* [0x2c] M2S header FIFO status */
12849b49cdaSZbigniew Bodek 	uint32_t header_fifo_status;
12949b49cdaSZbigniew Bodek 	/* [0x30] M2S unack FIFO status */
13049b49cdaSZbigniew Bodek 	uint32_t unack_fifo_status;
13149b49cdaSZbigniew Bodek 	/* [0x34] Select queue for debug */
13249b49cdaSZbigniew Bodek 	uint32_t indirect_ctrl;
13349b49cdaSZbigniew Bodek 	/*
13449b49cdaSZbigniew Bodek 	 * [0x38] M2S prefetch FIFO status.
13549b49cdaSZbigniew Bodek 	 * Status of the selected queue in M2S_indirect_ctrl
13649b49cdaSZbigniew Bodek 	 */
13749b49cdaSZbigniew Bodek 	uint32_t sel_pref_fifo_status;
13849b49cdaSZbigniew Bodek 	/*
13949b49cdaSZbigniew Bodek 	 * [0x3c] M2S completion FIFO status.
14049b49cdaSZbigniew Bodek 	 * Status of the selected queue in M2S_indirect_ctrl
14149b49cdaSZbigniew Bodek 	 */
14249b49cdaSZbigniew Bodek 	uint32_t sel_comp_fifo_status;
14349b49cdaSZbigniew Bodek 	/*
14449b49cdaSZbigniew Bodek 	 * [0x40] M2S rate limit status.
14549b49cdaSZbigniew Bodek 	 * Status of the selected queue in M2S_indirect_ctrl
14649b49cdaSZbigniew Bodek 	 */
14749b49cdaSZbigniew Bodek 	uint32_t sel_rate_limit_status;
14849b49cdaSZbigniew Bodek 	/*
14949b49cdaSZbigniew Bodek 	 * [0x44] M2S DWRR scheduler status.
15049b49cdaSZbigniew Bodek 	 * Status of the selected queue in M2S_indirect_ctrl
15149b49cdaSZbigniew Bodek 	 */
15249b49cdaSZbigniew Bodek 	uint32_t sel_dwrr_status;
15349b49cdaSZbigniew Bodek 	/* [0x48] M2S state machine and FIFO clear control */
15449b49cdaSZbigniew Bodek 	uint32_t clear_ctrl;
15549b49cdaSZbigniew Bodek 	/* [0x4c] Misc Check enable */
15649b49cdaSZbigniew Bodek 	uint32_t check_en;
15749b49cdaSZbigniew Bodek 	/* [0x50] M2S FIFO enable control, internal */
15849b49cdaSZbigniew Bodek 	uint32_t fifo_en;
15949b49cdaSZbigniew Bodek 	/* [0x54] M2S packet length configuration */
16049b49cdaSZbigniew Bodek 	uint32_t cfg_len;
16149b49cdaSZbigniew Bodek 	/* [0x58] Stream interface configuration */
16249b49cdaSZbigniew Bodek 	uint32_t stream_cfg;
16349b49cdaSZbigniew Bodek 	uint32_t rsrvd[41];
16449b49cdaSZbigniew Bodek };
16549b49cdaSZbigniew Bodek struct udma_m2s_rd {
16649b49cdaSZbigniew Bodek 	/* [0x0] M2S descriptor prefetch configuration */
16749b49cdaSZbigniew Bodek 	uint32_t desc_pref_cfg_1;
16849b49cdaSZbigniew Bodek 	/* [0x4] M2S descriptor prefetch configuration */
16949b49cdaSZbigniew Bodek 	uint32_t desc_pref_cfg_2;
17049b49cdaSZbigniew Bodek 	/* [0x8] M2S descriptor prefetch configuration */
17149b49cdaSZbigniew Bodek 	uint32_t desc_pref_cfg_3;
17249b49cdaSZbigniew Bodek 	uint32_t rsrvd_0;
17349b49cdaSZbigniew Bodek 	/* [0x10] Data burst read configuration */
17449b49cdaSZbigniew Bodek 	uint32_t data_cfg;
17549b49cdaSZbigniew Bodek 	uint32_t rsrvd[11];
17649b49cdaSZbigniew Bodek };
17749b49cdaSZbigniew Bodek struct udma_m2s_dwrr {
17849b49cdaSZbigniew Bodek 	/* [0x0] Tx DMA DWRR scheduler configuration */
17949b49cdaSZbigniew Bodek 	uint32_t cfg_sched;
18049b49cdaSZbigniew Bodek 	/* [0x4] Token bucket rate limit control */
18149b49cdaSZbigniew Bodek 	uint32_t ctrl_deficit_cnt;
18249b49cdaSZbigniew Bodek 	uint32_t rsrvd[14];
18349b49cdaSZbigniew Bodek };
18449b49cdaSZbigniew Bodek struct udma_m2s_rate_limiter {
18549b49cdaSZbigniew Bodek 	/* [0x0] Token bucket rate limit configuration */
18649b49cdaSZbigniew Bodek 	uint32_t gen_cfg;
18749b49cdaSZbigniew Bodek 	/*
18849b49cdaSZbigniew Bodek 	 * [0x4] Token bucket rate limit control.
18949b49cdaSZbigniew Bodek 	 * Controls the cycle counters.
19049b49cdaSZbigniew Bodek 	 */
19149b49cdaSZbigniew Bodek 	uint32_t ctrl_cycle_cnt;
19249b49cdaSZbigniew Bodek 	/*
19349b49cdaSZbigniew Bodek 	 * [0x8] Token bucket rate limit control.
19449b49cdaSZbigniew Bodek 	 * Controls the token bucket counter.
19549b49cdaSZbigniew Bodek 	 */
19649b49cdaSZbigniew Bodek 	uint32_t ctrl_token;
19749b49cdaSZbigniew Bodek 	uint32_t rsrvd[13];
19849b49cdaSZbigniew Bodek };
19949b49cdaSZbigniew Bodek 
20049b49cdaSZbigniew Bodek struct udma_rlimit_common {
20149b49cdaSZbigniew Bodek 	/* [0x0] Token bucket configuration */
20249b49cdaSZbigniew Bodek 	uint32_t cfg_1s;
20349b49cdaSZbigniew Bodek 	/* [0x4] Token bucket rate limit configuration */
20449b49cdaSZbigniew Bodek 	uint32_t cfg_cycle;
20549b49cdaSZbigniew Bodek 	/* [0x8] Token bucket rate limit configuration */
20649b49cdaSZbigniew Bodek 	uint32_t cfg_token_size_1;
20749b49cdaSZbigniew Bodek 	/* [0xc] Token bucket rate limit configuration */
20849b49cdaSZbigniew Bodek 	uint32_t cfg_token_size_2;
20949b49cdaSZbigniew Bodek 	/* [0x10] Token bucket rate limit configuration */
21049b49cdaSZbigniew Bodek 	uint32_t sw_ctrl;
21149b49cdaSZbigniew Bodek 	/*
21249b49cdaSZbigniew Bodek 	 * [0x14] Mask the different types of rate limiter.
21349b49cdaSZbigniew Bodek 	 * 0 - Rate limit is active.
21449b49cdaSZbigniew Bodek 	 * 1 - Rate limit is masked.
21549b49cdaSZbigniew Bodek 	 */
21649b49cdaSZbigniew Bodek 	uint32_t mask;
21749b49cdaSZbigniew Bodek };
21849b49cdaSZbigniew Bodek 
21949b49cdaSZbigniew Bodek struct udma_m2s_stream_rate_limiter {
22049b49cdaSZbigniew Bodek 	struct udma_rlimit_common rlimit;
22149b49cdaSZbigniew Bodek 	uint32_t rsrvd[10];
22249b49cdaSZbigniew Bodek };
22349b49cdaSZbigniew Bodek struct udma_m2s_comp {
22449b49cdaSZbigniew Bodek 	/* [0x0] Completion controller configuration */
22549b49cdaSZbigniew Bodek 	uint32_t cfg_1c;
22649b49cdaSZbigniew Bodek 	/* [0x4] Completion controller coalescing configuration */
22749b49cdaSZbigniew Bodek 	uint32_t cfg_coal;
22849b49cdaSZbigniew Bodek 	/* [0x8] Completion controller application acknowledge configuration */
22949b49cdaSZbigniew Bodek 	uint32_t cfg_application_ack;
23049b49cdaSZbigniew Bodek 	uint32_t rsrvd[61];
23149b49cdaSZbigniew Bodek };
23249b49cdaSZbigniew Bodek struct udma_m2s_stat {
23349b49cdaSZbigniew Bodek 	/* [0x0] Statistics counters configuration */
23449b49cdaSZbigniew Bodek 	uint32_t cfg_st;
23549b49cdaSZbigniew Bodek 	/* [0x4] Counting number of descriptors with First-bit set. */
23649b49cdaSZbigniew Bodek 	uint32_t tx_pkt;
23749b49cdaSZbigniew Bodek 	/*
23849b49cdaSZbigniew Bodek 	 * [0x8] Counting the net length of the data buffers [64-bit]
23949b49cdaSZbigniew Bodek 	 * Should be read before tx_bytes_high
24049b49cdaSZbigniew Bodek 	 */
24149b49cdaSZbigniew Bodek 	uint32_t tx_bytes_low;
24249b49cdaSZbigniew Bodek 	/*
24349b49cdaSZbigniew Bodek 	 * [0xc] Counting the net length of the data buffers [64-bit],
24449b49cdaSZbigniew Bodek 	 * Should be read after tx_bytes_low (value is sampled when reading
24549b49cdaSZbigniew Bodek 	 * Should be read before tx_bytes_low
24649b49cdaSZbigniew Bodek 	 */
24749b49cdaSZbigniew Bodek 	uint32_t tx_bytes_high;
24849b49cdaSZbigniew Bodek 	/* [0x10] Total number of descriptors read from the host memory */
24949b49cdaSZbigniew Bodek 	uint32_t prefed_desc;
25049b49cdaSZbigniew Bodek 	/* [0x14] Number of packets read from the unack FIFO */
25149b49cdaSZbigniew Bodek 	uint32_t comp_pkt;
25249b49cdaSZbigniew Bodek 	/* [0x18] Number of descriptors written into the completion ring */
25349b49cdaSZbigniew Bodek 	uint32_t comp_desc;
25449b49cdaSZbigniew Bodek 	/*
25549b49cdaSZbigniew Bodek 	 * [0x1c] Number of acknowledged packets.
25649b49cdaSZbigniew Bodek 	 * (acknowledge received from the stream interface)
25749b49cdaSZbigniew Bodek 	 */
25849b49cdaSZbigniew Bodek 	uint32_t ack_pkts;
25949b49cdaSZbigniew Bodek 	uint32_t rsrvd[56];
26049b49cdaSZbigniew Bodek };
26149b49cdaSZbigniew Bodek struct udma_m2s_feature {
26249b49cdaSZbigniew Bodek 	/*
26349b49cdaSZbigniew Bodek 	 * [0x0] M2S Feature register.
26449b49cdaSZbigniew Bodek 	 * M2S instantiation parameters
26549b49cdaSZbigniew Bodek 	 */
26649b49cdaSZbigniew Bodek 	uint32_t reg_1;
26749b49cdaSZbigniew Bodek 	/* [0x4] Reserved M2S feature register */
26849b49cdaSZbigniew Bodek 	uint32_t reg_2;
26949b49cdaSZbigniew Bodek 	/*
27049b49cdaSZbigniew Bodek 	 * [0x8] M2S Feature register.
27149b49cdaSZbigniew Bodek 	 * M2S instantiation parameters
27249b49cdaSZbigniew Bodek 	 */
27349b49cdaSZbigniew Bodek 	uint32_t reg_3;
27449b49cdaSZbigniew Bodek 	/*
27549b49cdaSZbigniew Bodek 	 * [0xc] M2S Feature register.
27649b49cdaSZbigniew Bodek 	 * M2S instantiation parameters
27749b49cdaSZbigniew Bodek 	 */
27849b49cdaSZbigniew Bodek 	uint32_t reg_4;
27949b49cdaSZbigniew Bodek 	/*
28049b49cdaSZbigniew Bodek 	 * [0x10] M2S Feature register.
28149b49cdaSZbigniew Bodek 	 * M2S instantiation parameters
28249b49cdaSZbigniew Bodek 	 */
28349b49cdaSZbigniew Bodek 	uint32_t reg_5;
28449b49cdaSZbigniew Bodek 	uint32_t rsrvd[59];
28549b49cdaSZbigniew Bodek };
28649b49cdaSZbigniew Bodek struct udma_m2s_q {
28749b49cdaSZbigniew Bodek 	uint32_t rsrvd_0[8];
28849b49cdaSZbigniew Bodek 	/* [0x20] M2S descriptor ring configuration */
28949b49cdaSZbigniew Bodek 	uint32_t cfg;
29049b49cdaSZbigniew Bodek 	/* [0x24] M2S descriptor ring status and information */
29149b49cdaSZbigniew Bodek 	uint32_t status;
29249b49cdaSZbigniew Bodek 	/* [0x28] TX Descriptor Ring Base Pointer [31:4] */
29349b49cdaSZbigniew Bodek 	uint32_t tdrbp_low;
29449b49cdaSZbigniew Bodek 	/* [0x2c] TX Descriptor Ring Base Pointer [63:32] */
29549b49cdaSZbigniew Bodek 	uint32_t tdrbp_high;
29649b49cdaSZbigniew Bodek 	/*
29749b49cdaSZbigniew Bodek 	 * [0x30] TX Descriptor Ring Length[23:2]
29849b49cdaSZbigniew Bodek 	 */
29949b49cdaSZbigniew Bodek 	uint32_t tdrl;
30049b49cdaSZbigniew Bodek 	/* [0x34] TX Descriptor Ring Head Pointer */
30149b49cdaSZbigniew Bodek 	uint32_t tdrhp;
30249b49cdaSZbigniew Bodek 	/* [0x38] Tx Descriptor Tail Pointer increment */
30349b49cdaSZbigniew Bodek 	uint32_t tdrtp_inc;
30449b49cdaSZbigniew Bodek 	/* [0x3c] Tx Descriptor Tail Pointer */
30549b49cdaSZbigniew Bodek 	uint32_t tdrtp;
30649b49cdaSZbigniew Bodek 	/* [0x40] TX Descriptor Current Pointer */
30749b49cdaSZbigniew Bodek 	uint32_t tdcp;
30849b49cdaSZbigniew Bodek 	/* [0x44] Tx Completion Ring Base Pointer [31:4] */
30949b49cdaSZbigniew Bodek 	uint32_t tcrbp_low;
31049b49cdaSZbigniew Bodek 	/* [0x48] TX Completion Ring Base Pointer [63:32] */
31149b49cdaSZbigniew Bodek 	uint32_t tcrbp_high;
31249b49cdaSZbigniew Bodek 	/* [0x4c] TX Completion Ring Head Pointer */
31349b49cdaSZbigniew Bodek 	uint32_t tcrhp;
31449b49cdaSZbigniew Bodek 	/*
31549b49cdaSZbigniew Bodek 	 * [0x50] Tx Completion Ring Head Pointer internal (Before the
31649b49cdaSZbigniew Bodek 	 * coalescing FIFO)
31749b49cdaSZbigniew Bodek 	 */
31849b49cdaSZbigniew Bodek 	uint32_t tcrhp_internal;
31949b49cdaSZbigniew Bodek 	uint32_t rsrvd_1[3];
32049b49cdaSZbigniew Bodek 	/* [0x60] Rate limit configuration */
32149b49cdaSZbigniew Bodek 	struct udma_rlimit_common rlimit;
32249b49cdaSZbigniew Bodek 	uint32_t rsrvd_2[2];
32349b49cdaSZbigniew Bodek 	/* [0x80] DWRR scheduler configuration */
32449b49cdaSZbigniew Bodek 	uint32_t dwrr_cfg_1;
32549b49cdaSZbigniew Bodek 	/* [0x84] DWRR scheduler configuration */
32649b49cdaSZbigniew Bodek 	uint32_t dwrr_cfg_2;
32749b49cdaSZbigniew Bodek 	/* [0x88] DWRR scheduler configuration */
32849b49cdaSZbigniew Bodek 	uint32_t dwrr_cfg_3;
32949b49cdaSZbigniew Bodek 	/* [0x8c] DWRR scheduler software control */
33049b49cdaSZbigniew Bodek 	uint32_t dwrr_sw_ctrl;
33149b49cdaSZbigniew Bodek 	uint32_t rsrvd_3[4];
33249b49cdaSZbigniew Bodek 	/* [0xa0] Completion controller configuration */
33349b49cdaSZbigniew Bodek 	uint32_t comp_cfg;
33449b49cdaSZbigniew Bodek 	uint32_t rsrvd_4[3];
33549b49cdaSZbigniew Bodek 	/* [0xb0] SW control  */
33649b49cdaSZbigniew Bodek 	uint32_t q_sw_ctrl;
33749b49cdaSZbigniew Bodek 	uint32_t rsrvd_5[3];
33849b49cdaSZbigniew Bodek 	/* [0xc0] Number of M2S Tx packets after the scheduler */
33949b49cdaSZbigniew Bodek 	uint32_t q_tx_pkt;
34049b49cdaSZbigniew Bodek 	uint32_t rsrvd[975];
34149b49cdaSZbigniew Bodek };
34249b49cdaSZbigniew Bodek 
34349b49cdaSZbigniew Bodek struct udma_m2s_regs {
34449b49cdaSZbigniew Bodek 	uint32_t rsrvd_0[64];
34549b49cdaSZbigniew Bodek 	struct udma_axi_m2s axi_m2s;                     /* [0x100] */
34649b49cdaSZbigniew Bodek 	struct udma_m2s m2s;                             /* [0x200] */
34749b49cdaSZbigniew Bodek 	struct udma_m2s_rd m2s_rd;                       /* [0x300] */
34849b49cdaSZbigniew Bodek 	struct udma_m2s_dwrr m2s_dwrr;                   /* [0x340] */
34949b49cdaSZbigniew Bodek 	struct udma_m2s_rate_limiter m2s_rate_limiter;   /* [0x380] */
35049b49cdaSZbigniew Bodek 	struct udma_m2s_stream_rate_limiter m2s_stream_rate_limiter; /* [0x3c0] */
35149b49cdaSZbigniew Bodek 	struct udma_m2s_comp m2s_comp;                   /* [0x400] */
35249b49cdaSZbigniew Bodek 	struct udma_m2s_stat m2s_stat;                   /* [0x500] */
35349b49cdaSZbigniew Bodek 	struct udma_m2s_feature m2s_feature;             /* [0x600] */
35449b49cdaSZbigniew Bodek 	uint32_t rsrvd_1[576];
35549b49cdaSZbigniew Bodek 	struct udma_m2s_q m2s_q[4];                      /* [0x1000] */
35649b49cdaSZbigniew Bodek };
35749b49cdaSZbigniew Bodek 
35849b49cdaSZbigniew Bodek 
35949b49cdaSZbigniew Bodek /*
36049b49cdaSZbigniew Bodek * Registers Fields
36149b49cdaSZbigniew Bodek */
36249b49cdaSZbigniew Bodek 
36349b49cdaSZbigniew Bodek 
36449b49cdaSZbigniew Bodek /**** comp_wr_cfg_1 register ****/
36549b49cdaSZbigniew Bodek /* AXI write  ID (AWID) */
36649b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_COMP_WR_CFG_1_AWID_MASK 0x000000FF
36749b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_COMP_WR_CFG_1_AWID_SHIFT 0
36849b49cdaSZbigniew Bodek /* Cache Type */
36949b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_COMP_WR_CFG_1_AWCACHE_MASK 0x000F0000
37049b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_COMP_WR_CFG_1_AWCACHE_SHIFT 16
37149b49cdaSZbigniew Bodek /* Burst type */
37249b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_COMP_WR_CFG_1_AWBURST_MASK 0x03000000
37349b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_COMP_WR_CFG_1_AWBURST_SHIFT 24
37449b49cdaSZbigniew Bodek 
37549b49cdaSZbigniew Bodek /**** comp_wr_cfg_2 register ****/
37649b49cdaSZbigniew Bodek /* User extension */
37749b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_COMP_WR_CFG_2_AWUSER_MASK 0x000FFFFF
37849b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_COMP_WR_CFG_2_AWUSER_SHIFT 0
37949b49cdaSZbigniew Bodek /* Bus size, 128-bit */
38049b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_COMP_WR_CFG_2_AWSIZE_MASK 0x00700000
38149b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_COMP_WR_CFG_2_AWSIZE_SHIFT 20
38249b49cdaSZbigniew Bodek /*
38349b49cdaSZbigniew Bodek  * AXI Master QoS.
38449b49cdaSZbigniew Bodek  * Used for arbitration between AXI masters
38549b49cdaSZbigniew Bodek  */
38649b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_COMP_WR_CFG_2_AWQOS_MASK 0x07000000
38749b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_COMP_WR_CFG_2_AWQOS_SHIFT 24
38849b49cdaSZbigniew Bodek /* Protection Type */
38949b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_COMP_WR_CFG_2_AWPROT_MASK 0x70000000
39049b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_COMP_WR_CFG_2_AWPROT_SHIFT 28
39149b49cdaSZbigniew Bodek 
39249b49cdaSZbigniew Bodek /**** data_rd_cfg_1 register ****/
39349b49cdaSZbigniew Bodek /* AXI read  ID (ARID) */
39449b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_1_ARID_MASK 0x000000FF
39549b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_1_ARID_SHIFT 0
39649b49cdaSZbigniew Bodek /* Cache Type */
39749b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_1_ARCACHE_MASK 0x000F0000
39849b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_1_ARCACHE_SHIFT 16
39949b49cdaSZbigniew Bodek /* Burst type */
40049b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_1_ARBURST_MASK 0x03000000
40149b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_1_ARBURST_SHIFT 24
40249b49cdaSZbigniew Bodek 
40349b49cdaSZbigniew Bodek /**** data_rd_cfg_2 register ****/
40449b49cdaSZbigniew Bodek /* User extension */
40549b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_2_ARUSER_MASK 0x000FFFFF
40649b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_2_ARUSER_SHIFT 0
40749b49cdaSZbigniew Bodek /* Bus size, 128-bit */
40849b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_2_ARSIZE_MASK 0x00700000
40949b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_2_ARSIZE_SHIFT 20
41049b49cdaSZbigniew Bodek /*
41149b49cdaSZbigniew Bodek  * AXI Master QoS.
41249b49cdaSZbigniew Bodek  * Used for arbitration between AXI masters
41349b49cdaSZbigniew Bodek  */
41449b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_2_ARQOS_MASK 0x07000000
41549b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_2_ARQOS_SHIFT 24
41649b49cdaSZbigniew Bodek /* Protection Type */
41749b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_2_ARPROT_MASK 0x70000000
41849b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_2_ARPROT_SHIFT 28
41949b49cdaSZbigniew Bodek 
42049b49cdaSZbigniew Bodek /**** desc_rd_cfg_1 register ****/
42149b49cdaSZbigniew Bodek /* AXI read  ID (ARID) */
42249b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_1_ARID_MASK 0x000000FF
42349b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_1_ARID_SHIFT 0
42449b49cdaSZbigniew Bodek /* Cache Type */
42549b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_1_ARCACHE_MASK 0x000F0000
42649b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_1_ARCACHE_SHIFT 16
42749b49cdaSZbigniew Bodek /* Burst type */
42849b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_1_ARBURST_MASK 0x03000000
42949b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_1_ARBURST_SHIFT 24
43049b49cdaSZbigniew Bodek 
43149b49cdaSZbigniew Bodek /**** desc_rd_cfg_2 register ****/
43249b49cdaSZbigniew Bodek /* User extension */
43349b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_2_ARUSER_MASK 0x000FFFFF
43449b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_2_ARUSER_SHIFT 0
43549b49cdaSZbigniew Bodek /* Bus size, 128-bit */
43649b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_2_ARSIZE_MASK 0x00700000
43749b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_2_ARSIZE_SHIFT 20
43849b49cdaSZbigniew Bodek /*
43949b49cdaSZbigniew Bodek  * AXI Master QoS
44049b49cdaSZbigniew Bodek  * Used for arbitration between AXI masters
44149b49cdaSZbigniew Bodek  */
44249b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_2_ARQOS_MASK 0x07000000
44349b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_2_ARQOS_SHIFT 24
44449b49cdaSZbigniew Bodek /* Protection Type */
44549b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_2_ARPROT_MASK 0x70000000
44649b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_2_ARPROT_SHIFT 28
44749b49cdaSZbigniew Bodek 
44849b49cdaSZbigniew Bodek /**** data_rd_cfg register ****/
44949b49cdaSZbigniew Bodek /*
45049b49cdaSZbigniew Bodek  * Defines the maximum number of AXI beats for a single AXI burst.
45149b49cdaSZbigniew Bodek  * This value is used for a burst split decision.
45249b49cdaSZbigniew Bodek  */
45349b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_MAX_AXI_BEATS_MASK 0x000000FF
45449b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_MAX_AXI_BEATS_SHIFT 0
45549b49cdaSZbigniew Bodek /*
45649b49cdaSZbigniew Bodek  * Enable breaking data read request.
45749b49cdaSZbigniew Bodek  * Aligned to max_AXI_beats when the total read size is less than max_AXI_beats
45849b49cdaSZbigniew Bodek  */
45949b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DATA_RD_CFG_ALWAYS_BREAK_ON_MAX_BOUDRY (1 << 16)
46049b49cdaSZbigniew Bodek 
46149b49cdaSZbigniew Bodek /**** desc_rd_cfg_3 register ****/
46249b49cdaSZbigniew Bodek /*
46349b49cdaSZbigniew Bodek  * Defines the maximum number of AXI beats for a single AXI burst.
46449b49cdaSZbigniew Bodek  * This value is used for a burst split decision.
46549b49cdaSZbigniew Bodek  * Maximum burst size for reading data( in AXI beats, 128-bits)
46649b49cdaSZbigniew Bodek  * (default – 16 beats, 256 bytes)
46749b49cdaSZbigniew Bodek  */
46849b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_3_MAX_AXI_BEATS_MASK 0x000000FF
46949b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_3_MAX_AXI_BEATS_SHIFT 0
47049b49cdaSZbigniew Bodek /*
47149b49cdaSZbigniew Bodek  * Enable breaking descriptor read request.
47249b49cdaSZbigniew Bodek  * Aligned to max_AXI_beats when the total read size is less than max_AXI_beats.
47349b49cdaSZbigniew Bodek  */
47449b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_RD_CFG_3_ALWAYS_BREAK_ON_MAX_BOUDRY (1 << 16)
47549b49cdaSZbigniew Bodek 
47649b49cdaSZbigniew Bodek /**** desc_wr_cfg_1 register ****/
47749b49cdaSZbigniew Bodek /*
47849b49cdaSZbigniew Bodek  * Defines the maximum number of AXI beats for a single AXI burst.
47949b49cdaSZbigniew Bodek  * This value is used for a burst split decision.
48049b49cdaSZbigniew Bodek  */
48149b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_WR_CFG_1_MAX_AXI_BEATS_MASK 0x000000FF
48249b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_WR_CFG_1_MAX_AXI_BEATS_SHIFT 0
48349b49cdaSZbigniew Bodek /*
48449b49cdaSZbigniew Bodek  * Minimum burst for writing completion descriptors.
48549b49cdaSZbigniew Bodek  * Defined in AXI beats
48649b49cdaSZbigniew Bodek  * 4 Descriptors per beat.
48749b49cdaSZbigniew Bodek  * Value must be aligned to cache lines (64 bytes).
48849b49cdaSZbigniew Bodek  * Default value is 2 cache lines, 32 descriptors, 8 beats.
48949b49cdaSZbigniew Bodek  */
49049b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_WR_CFG_1_MIN_AXI_BEATS_MASK 0x00FF0000
49149b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_DESC_WR_CFG_1_MIN_AXI_BEATS_SHIFT 16
49249b49cdaSZbigniew Bodek 
49349b49cdaSZbigniew Bodek /**** ostand_cfg register ****/
49449b49cdaSZbigniew Bodek /* Maximum number of outstanding data reads to the AXI (AXI transactions) */
49549b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_OSTAND_CFG_MAX_DATA_RD_MASK 0x0000003F
49649b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_OSTAND_CFG_MAX_DATA_RD_SHIFT 0
49749b49cdaSZbigniew Bodek /*
49849b49cdaSZbigniew Bodek  * Maximum number of outstanding descriptor reads to the AXI (AXI transactions)
49949b49cdaSZbigniew Bodek  */
50049b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_OSTAND_CFG_MAX_DESC_RD_MASK 0x00003F00
50149b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_OSTAND_CFG_MAX_DESC_RD_SHIFT 8
50249b49cdaSZbigniew Bodek /*
50349b49cdaSZbigniew Bodek  * Maximum number of outstanding descriptor writes to the AXI (AXI transactions)
50449b49cdaSZbigniew Bodek  */
50549b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_OSTAND_CFG_MAX_COMP_REQ_MASK 0x003F0000
50649b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_OSTAND_CFG_MAX_COMP_REQ_SHIFT 16
50749b49cdaSZbigniew Bodek /*
50849b49cdaSZbigniew Bodek  * Maximum number of outstanding data beats for descriptor write to AXI (AXI
50949b49cdaSZbigniew Bodek  * beats)
51049b49cdaSZbigniew Bodek  */
51149b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_OSTAND_CFG_MAX_COMP_DATA_WR_MASK 0xFF000000
51249b49cdaSZbigniew Bodek #define UDMA_AXI_M2S_OSTAND_CFG_MAX_COMP_DATA_WR_SHIFT 24
51349b49cdaSZbigniew Bodek 
51449b49cdaSZbigniew Bodek /**** state register ****/
51549b49cdaSZbigniew Bodek /* Completion control */
51649b49cdaSZbigniew Bodek #define UDMA_M2S_STATE_COMP_CTRL_MASK 0x00000003
51749b49cdaSZbigniew Bodek #define UDMA_M2S_STATE_COMP_CTRL_SHIFT 0
51849b49cdaSZbigniew Bodek /* Stream interface */
51949b49cdaSZbigniew Bodek #define UDMA_M2S_STATE_STREAM_IF_MASK 0x00000030
52049b49cdaSZbigniew Bodek #define UDMA_M2S_STATE_STREAM_IF_SHIFT 4
52149b49cdaSZbigniew Bodek /* Data read control */
52249b49cdaSZbigniew Bodek #define UDMA_M2S_STATE_DATA_RD_CTRL_MASK 0x00000300
52349b49cdaSZbigniew Bodek #define UDMA_M2S_STATE_DATA_RD_CTRL_SHIFT 8
52449b49cdaSZbigniew Bodek /* Descriptor prefetch */
52549b49cdaSZbigniew Bodek #define UDMA_M2S_STATE_DESC_PREF_MASK 0x00003000
52649b49cdaSZbigniew Bodek #define UDMA_M2S_STATE_DESC_PREF_SHIFT 12
52749b49cdaSZbigniew Bodek 
52849b49cdaSZbigniew Bodek /**** change_state register ****/
52949b49cdaSZbigniew Bodek /* Start normal operation */
53049b49cdaSZbigniew Bodek #define UDMA_M2S_CHANGE_STATE_NORMAL (1 << 0)
53149b49cdaSZbigniew Bodek /* Stop normal operation */
53249b49cdaSZbigniew Bodek #define UDMA_M2S_CHANGE_STATE_DIS    (1 << 1)
53349b49cdaSZbigniew Bodek /*
53449b49cdaSZbigniew Bodek  * Stop all machines.
53549b49cdaSZbigniew Bodek  * (Prefetch, scheduling, completion and stream interface)
53649b49cdaSZbigniew Bodek  */
53749b49cdaSZbigniew Bodek #define UDMA_M2S_CHANGE_STATE_ABORT  (1 << 2)
53849b49cdaSZbigniew Bodek 
53949b49cdaSZbigniew Bodek /**** err_log_mask register ****/
54049b49cdaSZbigniew Bodek /*
54149b49cdaSZbigniew Bodek  * Mismatch of packet serial number.
54249b49cdaSZbigniew Bodek  * (between first packet in the unacknowledged FIFO and received ack from the
54349b49cdaSZbigniew Bodek  * stream)
54449b49cdaSZbigniew Bodek  */
54549b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_COMP_PKT_MISMATCH (1 << 0)
54649b49cdaSZbigniew Bodek /* Parity error */
54749b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_STREAM_AXI_PARITY (1 << 1)
54849b49cdaSZbigniew Bodek /* AXI response error */
54949b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_STREAM_AXI_RESPONSE (1 << 2)
55049b49cdaSZbigniew Bodek /* AXI timeout (ack not received) */
55149b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_STREAM_AXI_TOUT (1 << 3)
55249b49cdaSZbigniew Bodek /* Parity error */
55349b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_COMP_AXI_PARITY (1 << 4)
55449b49cdaSZbigniew Bodek /* AXI response error */
55549b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_COMP_AXI_RESPONSE (1 << 5)
55649b49cdaSZbigniew Bodek /* AXI timeout */
55749b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_COMP_AXI_TOUT (1 << 6)
55849b49cdaSZbigniew Bodek /* Parity error */
55949b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_DATA_AXI_PARITY (1 << 7)
56049b49cdaSZbigniew Bodek /* AXI response error */
56149b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_DATA_AXI_RESPONSE (1 << 8)
56249b49cdaSZbigniew Bodek /* AXI timeout */
56349b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_DATA_AXI_TOUT (1 << 9)
56449b49cdaSZbigniew Bodek /* Parity error */
56549b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_PREF_AXI_PARITY (1 << 10)
56649b49cdaSZbigniew Bodek /* AXI response error */
56749b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_PREF_AXI_RESPONSE (1 << 11)
56849b49cdaSZbigniew Bodek /* AXI timeout */
56949b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_PREF_AXI_TOUT (1 << 12)
57049b49cdaSZbigniew Bodek /* Packet length error */
57149b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_PREF_PKT_LEN_OVERFLOW (1 << 13)
57249b49cdaSZbigniew Bodek /* Maximum number of descriptors per packet error */
57349b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_PREF_MAX_DESC_CNT (1 << 14)
57449b49cdaSZbigniew Bodek /* Error in first bit indication of the descriptor */
57549b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_PREF_FIRST (1 << 15)
57649b49cdaSZbigniew Bodek /* Error in last bit indication of the descriptor */
57749b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_PREF_LAST (1 << 16)
57849b49cdaSZbigniew Bodek /* Ring_ID error */
57949b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_PREF_RING_ID (1 << 17)
58049b49cdaSZbigniew Bodek /* Data buffer parity error */
58149b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_DATA_BUFF_PARITY (1 << 18)
58249b49cdaSZbigniew Bodek /* Internal error */
58349b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_INTERNAL_MASK 0xFFF80000
58449b49cdaSZbigniew Bodek #define UDMA_M2S_ERR_LOG_MASK_INTERNAL_SHIFT 19
58549b49cdaSZbigniew Bodek 
58649b49cdaSZbigniew Bodek /**** clear_err_log register ****/
58749b49cdaSZbigniew Bodek /* Clear error log */
58849b49cdaSZbigniew Bodek #define UDMA_M2S_CLEAR_ERR_LOG_CLEAR (1 << 0)
58949b49cdaSZbigniew Bodek 
59049b49cdaSZbigniew Bodek /**** data_fifo_status register ****/
59149b49cdaSZbigniew Bodek /* FIFO used indication */
59249b49cdaSZbigniew Bodek #define UDMA_M2S_DATA_FIFO_STATUS_USED_MASK 0x0000FFFF
59349b49cdaSZbigniew Bodek #define UDMA_M2S_DATA_FIFO_STATUS_USED_SHIFT 0
59449b49cdaSZbigniew Bodek /* FIFO empty indication */
59549b49cdaSZbigniew Bodek #define UDMA_M2S_DATA_FIFO_STATUS_EMPTY (1 << 24)
59649b49cdaSZbigniew Bodek /* FIFO full indication */
59749b49cdaSZbigniew Bodek #define UDMA_M2S_DATA_FIFO_STATUS_FULL (1 << 28)
59849b49cdaSZbigniew Bodek 
59949b49cdaSZbigniew Bodek /**** header_fifo_status register ****/
60049b49cdaSZbigniew Bodek /* FIFO used indication */
60149b49cdaSZbigniew Bodek #define UDMA_M2S_HEADER_FIFO_STATUS_USED_MASK 0x0000FFFF
60249b49cdaSZbigniew Bodek #define UDMA_M2S_HEADER_FIFO_STATUS_USED_SHIFT 0
60349b49cdaSZbigniew Bodek /* FIFO empty indication */
60449b49cdaSZbigniew Bodek #define UDMA_M2S_HEADER_FIFO_STATUS_EMPTY (1 << 24)
60549b49cdaSZbigniew Bodek /* FIFO full indication */
60649b49cdaSZbigniew Bodek #define UDMA_M2S_HEADER_FIFO_STATUS_FULL (1 << 28)
60749b49cdaSZbigniew Bodek 
60849b49cdaSZbigniew Bodek /**** unack_fifo_status register ****/
60949b49cdaSZbigniew Bodek /* FIFO used indication */
61049b49cdaSZbigniew Bodek #define UDMA_M2S_UNACK_FIFO_STATUS_USED_MASK 0x0000FFFF
61149b49cdaSZbigniew Bodek #define UDMA_M2S_UNACK_FIFO_STATUS_USED_SHIFT 0
61249b49cdaSZbigniew Bodek /* FIFO empty indication */
61349b49cdaSZbigniew Bodek #define UDMA_M2S_UNACK_FIFO_STATUS_EMPTY (1 << 24)
61449b49cdaSZbigniew Bodek /* FIFO full indication */
61549b49cdaSZbigniew Bodek #define UDMA_M2S_UNACK_FIFO_STATUS_FULL (1 << 28)
61649b49cdaSZbigniew Bodek 
61749b49cdaSZbigniew Bodek /**** indirect_ctrl register ****/
61849b49cdaSZbigniew Bodek /* Selected queue for status read */
61949b49cdaSZbigniew Bodek #define UDMA_M2S_INDIRECT_CTRL_Q_NUM_MASK 0x00000FFF
62049b49cdaSZbigniew Bodek #define UDMA_M2S_INDIRECT_CTRL_Q_NUM_SHIFT 0
62149b49cdaSZbigniew Bodek 
62249b49cdaSZbigniew Bodek /**** sel_pref_fifo_status register ****/
62349b49cdaSZbigniew Bodek /* FIFO used indication */
62449b49cdaSZbigniew Bodek #define UDMA_M2S_SEL_PREF_FIFO_STATUS_USED_MASK 0x0000FFFF
62549b49cdaSZbigniew Bodek #define UDMA_M2S_SEL_PREF_FIFO_STATUS_USED_SHIFT 0
62649b49cdaSZbigniew Bodek /* FIFO empty indication */
62749b49cdaSZbigniew Bodek #define UDMA_M2S_SEL_PREF_FIFO_STATUS_EMPTY (1 << 24)
62849b49cdaSZbigniew Bodek /* FIFO full indication */
62949b49cdaSZbigniew Bodek #define UDMA_M2S_SEL_PREF_FIFO_STATUS_FULL (1 << 28)
63049b49cdaSZbigniew Bodek 
63149b49cdaSZbigniew Bodek /**** sel_comp_fifo_status register ****/
63249b49cdaSZbigniew Bodek /* FIFO used indication */
63349b49cdaSZbigniew Bodek #define UDMA_M2S_SEL_COMP_FIFO_STATUS_USED_MASK 0x0000FFFF
63449b49cdaSZbigniew Bodek #define UDMA_M2S_SEL_COMP_FIFO_STATUS_USED_SHIFT 0
63549b49cdaSZbigniew Bodek /* FIFO empty indication */
63649b49cdaSZbigniew Bodek #define UDMA_M2S_SEL_COMP_FIFO_STATUS_EMPTY (1 << 24)
63749b49cdaSZbigniew Bodek /* FIFO full indication */
63849b49cdaSZbigniew Bodek #define UDMA_M2S_SEL_COMP_FIFO_STATUS_FULL (1 << 28)
63949b49cdaSZbigniew Bodek 
64049b49cdaSZbigniew Bodek /**** sel_rate_limit_status register ****/
64149b49cdaSZbigniew Bodek /* Token counter */
64249b49cdaSZbigniew Bodek #define UDMA_M2S_SEL_RATE_LIMIT_STATUS_TOKEN_CNT_MASK 0x00FFFFFF
64349b49cdaSZbigniew Bodek #define UDMA_M2S_SEL_RATE_LIMIT_STATUS_TOKEN_CNT_SHIFT 0
64449b49cdaSZbigniew Bodek 
64549b49cdaSZbigniew Bodek /**** sel_dwrr_status register ****/
64649b49cdaSZbigniew Bodek /* Deficit counter */
64749b49cdaSZbigniew Bodek #define UDMA_M2S_SEL_DWRR_STATUS_DEFICIT_CNT_MASK 0x00FFFFFF
64849b49cdaSZbigniew Bodek #define UDMA_M2S_SEL_DWRR_STATUS_DEFICIT_CNT_SHIFT 0
64949b49cdaSZbigniew Bodek 
65049b49cdaSZbigniew Bodek /**** cfg_len register ****/
65149b49cdaSZbigniew Bodek /* Maximum packet size for the M2S */
65249b49cdaSZbigniew Bodek #define UDMA_M2S_CFG_LEN_MAX_PKT_SIZE_MASK 0x000FFFFF
65349b49cdaSZbigniew Bodek #define UDMA_M2S_CFG_LEN_MAX_PKT_SIZE_SHIFT 0
65449b49cdaSZbigniew Bodek /*
65549b49cdaSZbigniew Bodek  * Length encoding for 64K.
65649b49cdaSZbigniew Bodek  * 0 - length 0x0000 = 0
65749b49cdaSZbigniew Bodek  * 1 - length 0x0000 = 64k
65849b49cdaSZbigniew Bodek  */
65949b49cdaSZbigniew Bodek #define UDMA_M2S_CFG_LEN_ENCODE_64K  (1 << 24)
66049b49cdaSZbigniew Bodek 
66149b49cdaSZbigniew Bodek /**** stream_cfg register ****/
66249b49cdaSZbigniew Bodek /*
66349b49cdaSZbigniew Bodek  * Disables the stream interface operation.
66449b49cdaSZbigniew Bodek  * Changing to 1 stops at the end of packet transmission.
66549b49cdaSZbigniew Bodek  */
66649b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_CFG_DISABLE  (1 << 0)
66749b49cdaSZbigniew Bodek /*
66849b49cdaSZbigniew Bodek  * Configuration of the stream FIFO read control.
66949b49cdaSZbigniew Bodek  * 0 - Cut through
67049b49cdaSZbigniew Bodek  * 1 - Threshold based
67149b49cdaSZbigniew Bodek  */
67249b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_CFG_RD_MODE  (1 << 1)
67349b49cdaSZbigniew Bodek /* Minimum number of beats to start packet transmission. */
67449b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_CFG_RD_TH_MASK 0x0003FF00
67549b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_CFG_RD_TH_SHIFT 8
67649b49cdaSZbigniew Bodek 
67749b49cdaSZbigniew Bodek /**** desc_pref_cfg_1 register ****/
67849b49cdaSZbigniew Bodek /* Size of the descriptor prefetch FIFO (in descriptors) */
67949b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DESC_PREF_CFG_1_FIFO_DEPTH_MASK 0x000000FF
68049b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DESC_PREF_CFG_1_FIFO_DEPTH_SHIFT 0
68149b49cdaSZbigniew Bodek 
68249b49cdaSZbigniew Bodek /**** desc_pref_cfg_2 register ****/
68349b49cdaSZbigniew Bodek /* Maximum number of descriptors per packet */
68449b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DESC_PREF_CFG_2_MAX_DESC_PER_PKT_MASK 0x0000001F
68549b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DESC_PREF_CFG_2_MAX_DESC_PER_PKT_SHIFT 0
68649b49cdaSZbigniew Bodek /*
68749b49cdaSZbigniew Bodek  * Force RR arbitration in the prefetch arbiter.
68849b49cdaSZbigniew Bodek  * 0 -Standard arbitration based on queue QoS
68949b49cdaSZbigniew Bodek  * 1 - Force Round Robin arbitration
69049b49cdaSZbigniew Bodek  */
69149b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DESC_PREF_CFG_2_PREF_FORCE_RR (1 << 16)
69249b49cdaSZbigniew Bodek 
69349b49cdaSZbigniew Bodek /**** desc_pref_cfg_3 register ****/
69449b49cdaSZbigniew Bodek /*
69549b49cdaSZbigniew Bodek  * Minimum descriptor burst size when prefetch FIFO level is below the
69649b49cdaSZbigniew Bodek  * descriptor prefetch threshold
69749b49cdaSZbigniew Bodek  * (must be 1)
69849b49cdaSZbigniew Bodek  */
69949b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DESC_PREF_CFG_3_MIN_BURST_BELOW_THR_MASK 0x0000000F
70049b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DESC_PREF_CFG_3_MIN_BURST_BELOW_THR_SHIFT 0
70149b49cdaSZbigniew Bodek /*
70249b49cdaSZbigniew Bodek  * Minimum descriptor burst size when prefetch FIFO level is above the
70349b49cdaSZbigniew Bodek  * descriptor prefetch threshold
70449b49cdaSZbigniew Bodek  */
70549b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DESC_PREF_CFG_3_MIN_BURST_ABOVE_THR_MASK 0x000000F0
70649b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DESC_PREF_CFG_3_MIN_BURST_ABOVE_THR_SHIFT 4
70749b49cdaSZbigniew Bodek /*
70849b49cdaSZbigniew Bodek  * Descriptor fetch threshold.
70949b49cdaSZbigniew Bodek  * Used as a threshold to determine the allowed minimum descriptor burst size.
71049b49cdaSZbigniew Bodek  * (Must be at least max_desc_per_pkt)
71149b49cdaSZbigniew Bodek  */
71249b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DESC_PREF_CFG_3_PREF_THR_MASK 0x0000FF00
71349b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DESC_PREF_CFG_3_PREF_THR_SHIFT 8
71449b49cdaSZbigniew Bodek 
71549b49cdaSZbigniew Bodek /**** data_cfg register ****/
71649b49cdaSZbigniew Bodek /*
71749b49cdaSZbigniew Bodek  * Maximum number of data beats in the data read FIFO.
71849b49cdaSZbigniew Bodek  * Defined based on data FIFO size
71949b49cdaSZbigniew Bodek  * (default FIFO size 2KB → 128 beats)
72049b49cdaSZbigniew Bodek  */
72149b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DATA_CFG_DATA_FIFO_DEPTH_MASK 0x000003FF
72249b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DATA_CFG_DATA_FIFO_DEPTH_SHIFT 0
72349b49cdaSZbigniew Bodek /*
72449b49cdaSZbigniew Bodek  * Maximum number of packets in the data read FIFO.
72549b49cdaSZbigniew Bodek  * Defined based on header FIFO size
72649b49cdaSZbigniew Bodek  */
72749b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DATA_CFG_MAX_PKT_LIMIT_MASK 0x00FF0000
72849b49cdaSZbigniew Bodek #define UDMA_M2S_RD_DATA_CFG_MAX_PKT_LIMIT_SHIFT 16
72949b49cdaSZbigniew Bodek 
73049b49cdaSZbigniew Bodek /**** cfg_sched register ****/
73149b49cdaSZbigniew Bodek /*
73249b49cdaSZbigniew Bodek  * Enable the DWRR scheduler.
73349b49cdaSZbigniew Bodek  * If this bit is 0, queues with same QoS will be served with RR scheduler.
73449b49cdaSZbigniew Bodek  */
73549b49cdaSZbigniew Bodek #define UDMA_M2S_DWRR_CFG_SCHED_EN_DWRR (1 << 0)
73649b49cdaSZbigniew Bodek /*
73749b49cdaSZbigniew Bodek  * Scheduler operation mode.
73849b49cdaSZbigniew Bodek  * 0 - Byte mode
73949b49cdaSZbigniew Bodek  * 1 - Packet mode
74049b49cdaSZbigniew Bodek  */
74149b49cdaSZbigniew Bodek #define UDMA_M2S_DWRR_CFG_SCHED_PKT_MODE_EN (1 << 4)
74249b49cdaSZbigniew Bodek /*
74349b49cdaSZbigniew Bodek  * Enable incrementing the weight factor between DWRR iterations.
74449b49cdaSZbigniew Bodek  * 00 - Don't increase the increment factor.
74549b49cdaSZbigniew Bodek  * 01 - Increment once
74649b49cdaSZbigniew Bodek  * 10 - Increment exponential
74749b49cdaSZbigniew Bodek  * 11 - Reserved
74849b49cdaSZbigniew Bodek  */
74949b49cdaSZbigniew Bodek #define UDMA_M2S_DWRR_CFG_SCHED_WEIGHT_INC_MASK 0x00000300
75049b49cdaSZbigniew Bodek #define UDMA_M2S_DWRR_CFG_SCHED_WEIGHT_INC_SHIFT 8
75149b49cdaSZbigniew Bodek /*
75249b49cdaSZbigniew Bodek  * Increment factor power of 2.
75349b49cdaSZbigniew Bodek  * 7 --> 128 bytes
75449b49cdaSZbigniew Bodek  * This is the factor used to multiply the weight.
75549b49cdaSZbigniew Bodek  */
75649b49cdaSZbigniew Bodek #define UDMA_M2S_DWRR_CFG_SCHED_INC_FACTOR_MASK 0x000F0000
75749b49cdaSZbigniew Bodek #define UDMA_M2S_DWRR_CFG_SCHED_INC_FACTOR_SHIFT 16
75849b49cdaSZbigniew Bodek 
75949b49cdaSZbigniew Bodek /**** ctrl_deficit_cnt register ****/
76049b49cdaSZbigniew Bodek /*
76149b49cdaSZbigniew Bodek  * Init value for the deficit counter.
76249b49cdaSZbigniew Bodek  * Initializes the deficit counters of all queues to this value any time this
76349b49cdaSZbigniew Bodek  * register is written.
76449b49cdaSZbigniew Bodek  */
76549b49cdaSZbigniew Bodek #define UDMA_M2S_DWRR_CTRL_DEFICIT_CNT_INIT_MASK 0x00FFFFFF
76649b49cdaSZbigniew Bodek #define UDMA_M2S_DWRR_CTRL_DEFICIT_CNT_INIT_SHIFT 0
76749b49cdaSZbigniew Bodek 
76849b49cdaSZbigniew Bodek /**** gen_cfg register ****/
76949b49cdaSZbigniew Bodek /* Size of the basic token fill cycle, system clock cycles */
77049b49cdaSZbigniew Bodek #define UDMA_M2S_RATE_LIMITER_GEN_CFG_SHORT_CYCLE_SIZE_MASK 0x0000FFFF
77149b49cdaSZbigniew Bodek #define UDMA_M2S_RATE_LIMITER_GEN_CFG_SHORT_CYCLE_SIZE_SHIFT 0
77249b49cdaSZbigniew Bodek /*
77349b49cdaSZbigniew Bodek  * Rate limiter operation mode.
77449b49cdaSZbigniew Bodek  * 0 - Byte mode
77549b49cdaSZbigniew Bodek  * 1 - Packet mode
77649b49cdaSZbigniew Bodek  */
77749b49cdaSZbigniew Bodek #define UDMA_M2S_RATE_LIMITER_GEN_CFG_PKT_MODE_EN (1 << 24)
77849b49cdaSZbigniew Bodek 
77949b49cdaSZbigniew Bodek /**** ctrl_cycle_cnt register ****/
78049b49cdaSZbigniew Bodek /* Reset the short and long cycle counters. */
78149b49cdaSZbigniew Bodek #define UDMA_M2S_RATE_LIMITER_CTRL_CYCLE_CNT_RST (1 << 0)
78249b49cdaSZbigniew Bodek 
78349b49cdaSZbigniew Bodek /**** ctrl_token register ****/
78449b49cdaSZbigniew Bodek /*
78549b49cdaSZbigniew Bodek  * Init value for the token counter.
78649b49cdaSZbigniew Bodek  * Initializes the token counters of all queues to this value any time this
78749b49cdaSZbigniew Bodek  * register is written.
78849b49cdaSZbigniew Bodek  */
78949b49cdaSZbigniew Bodek #define UDMA_M2S_RATE_LIMITER_CTRL_TOKEN_RST_MASK 0x00FFFFFF
79049b49cdaSZbigniew Bodek #define UDMA_M2S_RATE_LIMITER_CTRL_TOKEN_RST_SHIFT 0
79149b49cdaSZbigniew Bodek 
79249b49cdaSZbigniew Bodek /**** cfg_1s register ****/
79349b49cdaSZbigniew Bodek /* Maximum number of accumulated bytes in the token counter */
79449b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_RATE_LIMITER_CFG_1S_MAX_BURST_SIZE_MASK 0x00FFFFFF
79549b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_RATE_LIMITER_CFG_1S_MAX_BURST_SIZE_SHIFT 0
79649b49cdaSZbigniew Bodek /* Enable the rate limiter. */
79749b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_RATE_LIMITER_CFG_1S_EN (1 << 24)
79849b49cdaSZbigniew Bodek /* Stop token fill. */
79949b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_RATE_LIMITER_CFG_1S_PAUSE (1 << 25)
80049b49cdaSZbigniew Bodek 
80149b49cdaSZbigniew Bodek /**** cfg_cycle register ****/
80249b49cdaSZbigniew Bodek /* Number of short cycles between token fills */
80349b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_RATE_LIMITER_CFG_CYCLE_LONG_CYCLE_SIZE_MASK 0x0000FFFF
80449b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_RATE_LIMITER_CFG_CYCLE_LONG_CYCLE_SIZE_SHIFT 0
80549b49cdaSZbigniew Bodek 
80649b49cdaSZbigniew Bodek /**** cfg_token_size_1 register ****/
80749b49cdaSZbigniew Bodek /* Number of bits to add in each long cycle */
80849b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_RATE_LIMITER_CFG_TOKEN_SIZE_1_LONG_CYCLE_MASK 0x0007FFFF
80949b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_RATE_LIMITER_CFG_TOKEN_SIZE_1_LONG_CYCLE_SHIFT 0
81049b49cdaSZbigniew Bodek 
81149b49cdaSZbigniew Bodek /**** cfg_token_size_2 register ****/
81249b49cdaSZbigniew Bodek /* Number of bits to add in each short cycle */
81349b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_RATE_LIMITER_CFG_TOKEN_SIZE_2_SHORT_CYCLE_MASK 0x0007FFFF
81449b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_RATE_LIMITER_CFG_TOKEN_SIZE_2_SHORT_CYCLE_SHIFT 0
81549b49cdaSZbigniew Bodek 
81649b49cdaSZbigniew Bodek /**** sw_ctrl register ****/
81749b49cdaSZbigniew Bodek /* Reset the token bucket counter. */
81849b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_RATE_LIMITER_SW_CTRL_RST_TOKEN_CNT (1 << 0)
81949b49cdaSZbigniew Bodek 
82049b49cdaSZbigniew Bodek /**** mask register ****/
82149b49cdaSZbigniew Bodek /* Mask the external rate limiter. */
82249b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_RATE_LIMITER_MASK_EXTERNAL_RATE_LIMITER (1 << 0)
82349b49cdaSZbigniew Bodek /* Mask the internal rate limiter. */
82449b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_RATE_LIMITER_MASK_INTERNAL_RATE_LIMITER (1 << 1)
82549b49cdaSZbigniew Bodek /* Mask the external application pause interface. */
82649b49cdaSZbigniew Bodek #define UDMA_M2S_STREAM_RATE_LIMITER_MASK_EXTERNAL_PAUSE (1 << 3)
82749b49cdaSZbigniew Bodek 
82849b49cdaSZbigniew Bodek /**** cfg_1c register ****/
82949b49cdaSZbigniew Bodek /*
83049b49cdaSZbigniew Bodek  * Completion FIFO size
83149b49cdaSZbigniew Bodek  *  (descriptors per queue)
83249b49cdaSZbigniew Bodek  */
83349b49cdaSZbigniew Bodek #define UDMA_M2S_COMP_CFG_1C_COMP_FIFO_DEPTH_MASK 0x000000FF
83449b49cdaSZbigniew Bodek #define UDMA_M2S_COMP_CFG_1C_COMP_FIFO_DEPTH_SHIFT 0
83549b49cdaSZbigniew Bodek /*
83649b49cdaSZbigniew Bodek  * Unacknowledged FIFO size.
83749b49cdaSZbigniew Bodek  * (descriptors)
83849b49cdaSZbigniew Bodek  */
83949b49cdaSZbigniew Bodek #define UDMA_M2S_COMP_CFG_1C_UNACK_FIFO_DEPTH_MASK 0x0001FF00
84049b49cdaSZbigniew Bodek #define UDMA_M2S_COMP_CFG_1C_UNACK_FIFO_DEPTH_SHIFT 8
84149b49cdaSZbigniew Bodek /*
84249b49cdaSZbigniew Bodek  * Enable promotion.
84349b49cdaSZbigniew Bodek  * Enable the promotion of the current queue in progress for the completion
84449b49cdaSZbigniew Bodek  * write scheduler.
84549b49cdaSZbigniew Bodek  */
84649b49cdaSZbigniew Bodek #define UDMA_M2S_COMP_CFG_1C_Q_PROMOTION (1 << 24)
84749b49cdaSZbigniew Bodek /* Force RR arbitration in the completion arbiter */
84849b49cdaSZbigniew Bodek #define UDMA_M2S_COMP_CFG_1C_FORCE_RR (1 << 25)
84949b49cdaSZbigniew Bodek /* Minimum number of free completion entries to qualify for promotion */
85049b49cdaSZbigniew Bodek #define UDMA_M2S_COMP_CFG_1C_Q_FREE_MIN_MASK 0xF0000000
85149b49cdaSZbigniew Bodek #define UDMA_M2S_COMP_CFG_1C_Q_FREE_MIN_SHIFT 28
85249b49cdaSZbigniew Bodek 
85349b49cdaSZbigniew Bodek /**** cfg_application_ack register ****/
85449b49cdaSZbigniew Bodek /*
85549b49cdaSZbigniew Bodek  * Acknowledge timeout timer.
85649b49cdaSZbigniew Bodek  * ACK from the application through the stream interface)
85749b49cdaSZbigniew Bodek  */
85849b49cdaSZbigniew Bodek #define UDMA_M2S_COMP_CFG_APPLICATION_ACK_TOUT_MASK 0x00FFFFFF
85949b49cdaSZbigniew Bodek #define UDMA_M2S_COMP_CFG_APPLICATION_ACK_TOUT_SHIFT 0
86049b49cdaSZbigniew Bodek 
86149b49cdaSZbigniew Bodek /**** cfg_st register ****/
86249b49cdaSZbigniew Bodek /* Use additional length value for all statistics counters. */
86349b49cdaSZbigniew Bodek #define UDMA_M2S_STAT_CFG_ST_USE_EXTRA_LEN (1 << 0)
86449b49cdaSZbigniew Bodek 
86549b49cdaSZbigniew Bodek /**** reg_1 register ****/
86649b49cdaSZbigniew Bodek /*
86749b49cdaSZbigniew Bodek  * Read the size of the descriptor prefetch FIFO
86849b49cdaSZbigniew Bodek  * (descriptors).
86949b49cdaSZbigniew Bodek  */
87049b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_1_DESC_PREFERCH_FIFO_DEPTH_MASK 0x000000FF
87149b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_1_DESC_PREFERCH_FIFO_DEPTH_SHIFT 0
87249b49cdaSZbigniew Bodek 
87349b49cdaSZbigniew Bodek /**** reg_3 register ****/
87449b49cdaSZbigniew Bodek /*
87549b49cdaSZbigniew Bodek  * Maximum number of data beats in the data read FIFO.
87649b49cdaSZbigniew Bodek  * Defined based on data FIFO size
87749b49cdaSZbigniew Bodek  * (default FIFO size 2KB → 128 beats)
87849b49cdaSZbigniew Bodek  */
87949b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_3_DATA_FIFO_DEPTH_MASK 0x000003FF
88049b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_3_DATA_FIFO_DEPTH_SHIFT 0
88149b49cdaSZbigniew Bodek /*
88249b49cdaSZbigniew Bodek  * Maximum number of packets in the data read FIFO.
88349b49cdaSZbigniew Bodek  * Defined based on header FIFO size
88449b49cdaSZbigniew Bodek  */
88549b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_3_DATA_RD_MAX_PKT_LIMIT_MASK 0x00FF0000
88649b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_3_DATA_RD_MAX_PKT_LIMIT_SHIFT 16
88749b49cdaSZbigniew Bodek 
88849b49cdaSZbigniew Bodek /**** reg_4 register ****/
88949b49cdaSZbigniew Bodek /*
89049b49cdaSZbigniew Bodek  * Size of the completion FIFO of each queue
89149b49cdaSZbigniew Bodek  * (words)
89249b49cdaSZbigniew Bodek  */
89349b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_4_COMP_FIFO_DEPTH_MASK 0x000000FF
89449b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_4_COMP_FIFO_DEPTH_SHIFT 0
89549b49cdaSZbigniew Bodek /* Size of the unacknowledged FIFO (descriptors) */
89649b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_4_COMP_UNACK_FIFO_DEPTH_MASK 0x0001FF00
89749b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_4_COMP_UNACK_FIFO_DEPTH_SHIFT 8
89849b49cdaSZbigniew Bodek 
89949b49cdaSZbigniew Bodek /**** reg_5 register ****/
90049b49cdaSZbigniew Bodek /* Maximum number of outstanding data reads to AXI */
90149b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_5_MAX_DATA_RD_OSTAND_MASK 0x0000003F
90249b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_5_MAX_DATA_RD_OSTAND_SHIFT 0
90349b49cdaSZbigniew Bodek /* Maximum number of outstanding descriptor reads to AXI */
90449b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_5_MAX_DESC_RD_OSTAND_MASK 0x00003F00
90549b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_5_MAX_DESC_RD_OSTAND_SHIFT 8
90649b49cdaSZbigniew Bodek /*
90749b49cdaSZbigniew Bodek  * Maximum number of outstanding descriptor writes to AXI.
90849b49cdaSZbigniew Bodek  * (AXI transactions)
90949b49cdaSZbigniew Bodek  */
91049b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_5_MAX_COMP_REQ_MASK 0x003F0000
91149b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_5_MAX_COMP_REQ_SHIFT 16
91249b49cdaSZbigniew Bodek /*
91349b49cdaSZbigniew Bodek  * Maximum number of outstanding data beats for descriptor write to AXI.
91449b49cdaSZbigniew Bodek  * (AXI beats)
91549b49cdaSZbigniew Bodek  */
91649b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_5_MAX_COMP_DATA_WR_OSTAND_MASK 0xFF000000
91749b49cdaSZbigniew Bodek #define UDMA_M2S_FEATURE_REG_5_MAX_COMP_DATA_WR_OSTAND_SHIFT 24
91849b49cdaSZbigniew Bodek 
91949b49cdaSZbigniew Bodek /**** cfg register ****/
92049b49cdaSZbigniew Bodek /*
92149b49cdaSZbigniew Bodek  * Length offset to be used for each packet from this queue.
92249b49cdaSZbigniew Bodek  * (length offset is used for the scheduler and rate limiter).
92349b49cdaSZbigniew Bodek  */
92449b49cdaSZbigniew Bodek #define UDMA_M2S_Q_CFG_PKT_LEN_OFFSET_MASK 0x0000FFFF
92549b49cdaSZbigniew Bodek #define UDMA_M2S_Q_CFG_PKT_LEN_OFFSET_SHIFT 0
92649b49cdaSZbigniew Bodek /*
92749b49cdaSZbigniew Bodek  * Enable operation of this queue.
92849b49cdaSZbigniew Bodek  * Start prefetch.
92949b49cdaSZbigniew Bodek  */
93049b49cdaSZbigniew Bodek #define UDMA_M2S_Q_CFG_EN_PREF       (1 << 16)
93149b49cdaSZbigniew Bodek /*
93249b49cdaSZbigniew Bodek  * Enable operation of this queue.
93349b49cdaSZbigniew Bodek  * Start scheduling.
93449b49cdaSZbigniew Bodek  */
93549b49cdaSZbigniew Bodek #define UDMA_M2S_Q_CFG_EN_SCHEDULING (1 << 17)
93649b49cdaSZbigniew Bodek /* Allow prefetch of less than minimum prefetch burst size. */
93749b49cdaSZbigniew Bodek #define UDMA_M2S_Q_CFG_ALLOW_LT_MIN_PREF (1 << 20)
93849b49cdaSZbigniew Bodek /* Configure the AXI AWCACHE for completion write.  */
93949b49cdaSZbigniew Bodek #define UDMA_M2S_Q_CFG_AXI_AWCACHE_COMP_MASK 0x0F000000
94049b49cdaSZbigniew Bodek #define UDMA_M2S_Q_CFG_AXI_AWCACHE_COMP_SHIFT 24
94149b49cdaSZbigniew Bodek /*
94249b49cdaSZbigniew Bodek  * AXI QoS for the selected queue.
94349b49cdaSZbigniew Bodek  * This value is used in AXI transactions associated with this queue and the
94449b49cdaSZbigniew Bodek  * prefetch and completion arbiters.
94549b49cdaSZbigniew Bodek  */
94649b49cdaSZbigniew Bodek #define UDMA_M2S_Q_CFG_AXI_QOS_MASK  0x70000000
94749b49cdaSZbigniew Bodek #define UDMA_M2S_Q_CFG_AXI_QOS_SHIFT 28
94849b49cdaSZbigniew Bodek 
94949b49cdaSZbigniew Bodek /**** status register ****/
95049b49cdaSZbigniew Bodek /* Indicates how many entries are used in the queue */
95149b49cdaSZbigniew Bodek #define UDMA_M2S_Q_STATUS_Q_USED_MASK 0x01FFFFFF
95249b49cdaSZbigniew Bodek #define UDMA_M2S_Q_STATUS_Q_USED_SHIFT 0
95349b49cdaSZbigniew Bodek /*
95449b49cdaSZbigniew Bodek  * prefetch status
95549b49cdaSZbigniew Bodek  * 0 – prefetch operation is stopped
95649b49cdaSZbigniew Bodek  * 1 – prefetch is operational
95749b49cdaSZbigniew Bodek  */
95849b49cdaSZbigniew Bodek #define UDMA_M2S_Q_STATUS_PREFETCH   (1 << 28)
95949b49cdaSZbigniew Bodek /*
96049b49cdaSZbigniew Bodek  * Queue scheduler status
96149b49cdaSZbigniew Bodek  * 0 – queue is not active and not participating in scheduling
96249b49cdaSZbigniew Bodek  * 1 – queue is active and participating in the scheduling process
96349b49cdaSZbigniew Bodek  */
96449b49cdaSZbigniew Bodek #define UDMA_M2S_Q_STATUS_SCHEDULER  (1 << 29)
96549b49cdaSZbigniew Bodek /* Queue is suspended due to DMB */
96649b49cdaSZbigniew Bodek #define UDMA_M2S_Q_STATUS_Q_DMB      (1 << 30)
96749b49cdaSZbigniew Bodek /*
96849b49cdaSZbigniew Bodek  * Queue full indication.
96949b49cdaSZbigniew Bodek  * (used by the host when head pointer equals tail pointer).
97049b49cdaSZbigniew Bodek  */
97149b49cdaSZbigniew Bodek #define UDMA_M2S_Q_STATUS_Q_FULL     (1 << 31)
97249b49cdaSZbigniew Bodek /*
97349b49cdaSZbigniew Bodek  * M2S Descriptor Ring Base address [31:4].
97449b49cdaSZbigniew Bodek  * Value of the base address of the M2S descriptor ring
97549b49cdaSZbigniew Bodek  * [3:0] - 0 - 16B alignment is enforced
97649b49cdaSZbigniew Bodek  * ([11:4] should be 0 for 4KB alignment)
97749b49cdaSZbigniew Bodek  */
97849b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDRBP_LOW_ADDR_MASK 0xFFFFFFF0
97949b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDRBP_LOW_ADDR_SHIFT 4
98049b49cdaSZbigniew Bodek 
98149b49cdaSZbigniew Bodek /**** TDRL register ****/
98249b49cdaSZbigniew Bodek /*
98349b49cdaSZbigniew Bodek  * Length of the descriptor ring.
98449b49cdaSZbigniew Bodek  * (descriptors)
98549b49cdaSZbigniew Bodek  * Associated with the ring base address, ends at maximum burst size alignment.
98649b49cdaSZbigniew Bodek  */
98749b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDRL_OFFSET_MASK  0x00FFFFFF
98849b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDRL_OFFSET_SHIFT 0
98949b49cdaSZbigniew Bodek 
99049b49cdaSZbigniew Bodek /**** TDRHP register ****/
99149b49cdaSZbigniew Bodek /*
99249b49cdaSZbigniew Bodek  * Relative offset of the next descriptor that needs to be read into the
99349b49cdaSZbigniew Bodek  * prefetch FIFO.
99449b49cdaSZbigniew Bodek  * Incremented when the DMA reads valid descriptors from the host memory to the
99549b49cdaSZbigniew Bodek  * prefetch FIFO.
99649b49cdaSZbigniew Bodek  * Note that this is the offset in # of descriptors and not in byte address.
99749b49cdaSZbigniew Bodek  */
99849b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDRHP_OFFSET_MASK 0x00FFFFFF
99949b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDRHP_OFFSET_SHIFT 0
100049b49cdaSZbigniew Bodek /* Ring ID */
100149b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDRHP_RING_ID_MASK 0xC0000000
100249b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDRHP_RING_ID_SHIFT 30
100349b49cdaSZbigniew Bodek 
100449b49cdaSZbigniew Bodek /**** TDRTP_inc register ****/
100549b49cdaSZbigniew Bodek /* Increments the value in Q_TDRTP (descriptors) */
100649b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDRTP_INC_VAL_MASK 0x00FFFFFF
100749b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDRTP_INC_VAL_SHIFT 0
100849b49cdaSZbigniew Bodek 
100949b49cdaSZbigniew Bodek /**** TDRTP register ****/
101049b49cdaSZbigniew Bodek /*
101149b49cdaSZbigniew Bodek  * Relative offset of the next free descriptor in the host memory.
101249b49cdaSZbigniew Bodek  * Note that this is the offset in # of descriptors and not in byte address.
101349b49cdaSZbigniew Bodek  */
101449b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDRTP_OFFSET_MASK 0x00FFFFFF
101549b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDRTP_OFFSET_SHIFT 0
101649b49cdaSZbigniew Bodek /* Ring ID */
101749b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDRTP_RING_ID_MASK 0xC0000000
101849b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDRTP_RING_ID_SHIFT 30
101949b49cdaSZbigniew Bodek 
102049b49cdaSZbigniew Bodek /**** TDCP register ****/
102149b49cdaSZbigniew Bodek /*
102249b49cdaSZbigniew Bodek  * Relative offset of the first descriptor in the prefetch FIFO.
102349b49cdaSZbigniew Bodek  * This is the next descriptor that will be read by the scheduler.
102449b49cdaSZbigniew Bodek  */
102549b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDCP_OFFSET_MASK  0x00FFFFFF
102649b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDCP_OFFSET_SHIFT 0
102749b49cdaSZbigniew Bodek /* Ring ID */
102849b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDCP_RING_ID_MASK 0xC0000000
102949b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TDCP_RING_ID_SHIFT 30
103049b49cdaSZbigniew Bodek /*
103149b49cdaSZbigniew Bodek  * M2S Descriptor Ring Base address [31:4].
103249b49cdaSZbigniew Bodek  * Value of the base address of the M2S descriptor ring
103349b49cdaSZbigniew Bodek  * [3:0] - 0 - 16B alignment is enforced
103449b49cdaSZbigniew Bodek  * ([11:4] should be 0 for 4KB alignment)
103549b49cdaSZbigniew Bodek  * NOTE:
103649b49cdaSZbigniew Bodek  * Length of the descriptor ring (in descriptors) associated with the ring base
103749b49cdaSZbigniew Bodek  * address. Ends at maximum burst size alignment.
103849b49cdaSZbigniew Bodek  */
103949b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TCRBP_LOW_ADDR_MASK 0xFFFFFFF0
104049b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TCRBP_LOW_ADDR_SHIFT 4
104149b49cdaSZbigniew Bodek 
104249b49cdaSZbigniew Bodek /**** TCRHP register ****/
104349b49cdaSZbigniew Bodek /*
104449b49cdaSZbigniew Bodek  * Relative offset of the next descriptor that needs to be updated by the
104549b49cdaSZbigniew Bodek  * completion controller.
104649b49cdaSZbigniew Bodek  * Note: This is in descriptors and not in byte address.
104749b49cdaSZbigniew Bodek  */
104849b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TCRHP_OFFSET_MASK 0x00FFFFFF
104949b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TCRHP_OFFSET_SHIFT 0
105049b49cdaSZbigniew Bodek /* Ring ID */
105149b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TCRHP_RING_ID_MASK 0xC0000000
105249b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TCRHP_RING_ID_SHIFT 30
105349b49cdaSZbigniew Bodek 
105449b49cdaSZbigniew Bodek /**** TCRHP_internal register ****/
105549b49cdaSZbigniew Bodek /*
105649b49cdaSZbigniew Bodek  * Relative offset of the next descriptor that needs to be updated by the
105749b49cdaSZbigniew Bodek  * completion controller.
105849b49cdaSZbigniew Bodek  * Note: This is in descriptors and not in byte address.
105949b49cdaSZbigniew Bodek  */
106049b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TCRHP_INTERNAL_OFFSET_MASK 0x00FFFFFF
106149b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TCRHP_INTERNAL_OFFSET_SHIFT 0
106249b49cdaSZbigniew Bodek /* Ring ID */
106349b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TCRHP_INTERNAL_RING_ID_MASK 0xC0000000
106449b49cdaSZbigniew Bodek #define UDMA_M2S_Q_TCRHP_INTERNAL_RING_ID_SHIFT 30
106549b49cdaSZbigniew Bodek 
106649b49cdaSZbigniew Bodek /**** rate_limit_cfg_1 register ****/
106749b49cdaSZbigniew Bodek /* Maximum number of accumulated bytes in the token counter. */
106849b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_CFG_1_MAX_BURST_SIZE_MASK 0x00FFFFFF
106949b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_CFG_1_MAX_BURST_SIZE_SHIFT 0
107049b49cdaSZbigniew Bodek /* Enable the rate limiter. */
107149b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_CFG_1_EN (1 << 24)
107249b49cdaSZbigniew Bodek /* Stop token fill. */
107349b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_CFG_1_PAUSE (1 << 25)
107449b49cdaSZbigniew Bodek 
107549b49cdaSZbigniew Bodek /**** rate_limit_cfg_cycle register ****/
107649b49cdaSZbigniew Bodek /* Number of short cycles between token fills */
107749b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_CFG_CYCLE_LONG_CYCLE_SIZE_MASK 0x0000FFFF
107849b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_CFG_CYCLE_LONG_CYCLE_SIZE_SHIFT 0
107949b49cdaSZbigniew Bodek 
108049b49cdaSZbigniew Bodek /**** rate_limit_cfg_token_size_1 register ****/
108149b49cdaSZbigniew Bodek /* Number of bits to add in each long cycle */
108249b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_CFG_TOKEN_SIZE_1_LONG_CYCLE_MASK 0x0007FFFF
108349b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_CFG_TOKEN_SIZE_1_LONG_CYCLE_SHIFT 0
108449b49cdaSZbigniew Bodek 
108549b49cdaSZbigniew Bodek /**** rate_limit_cfg_token_size_2 register ****/
108649b49cdaSZbigniew Bodek /* Number of bits to add in each cycle */
108749b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_CFG_TOKEN_SIZE_2_SHORT_CYCLE_MASK 0x0007FFFF
108849b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_CFG_TOKEN_SIZE_2_SHORT_CYCLE_SHIFT 0
108949b49cdaSZbigniew Bodek 
109049b49cdaSZbigniew Bodek /**** rate_limit_sw_ctrl register ****/
109149b49cdaSZbigniew Bodek /* Reset the token bucket counter. */
109249b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_SW_CTRL_RST_TOKEN_CNT (1 << 0)
109349b49cdaSZbigniew Bodek 
109449b49cdaSZbigniew Bodek /**** rate_limit_mask register ****/
109549b49cdaSZbigniew Bodek /* Mask the external rate limiter. */
109649b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_MASK_EXTERNAL_RATE_LIMITER (1 << 0)
109749b49cdaSZbigniew Bodek /* Mask the internal rate limiter. */
109849b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_MASK_INTERNAL_RATE_LIMITER (1 << 1)
109949b49cdaSZbigniew Bodek /*
110049b49cdaSZbigniew Bodek  * Mask the internal pause mechanism for DMB.
110149b49cdaSZbigniew Bodek  * (Data Memory Barrier).
110249b49cdaSZbigniew Bodek  */
110349b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_MASK_INTERNAL_PAUSE_DMB (1 << 2)
110449b49cdaSZbigniew Bodek /* Mask the external application pause interface. */
110549b49cdaSZbigniew Bodek #define UDMA_M2S_Q_RATE_LIMIT_MASK_EXTERNAL_PAUSE (1 << 3)
110649b49cdaSZbigniew Bodek 
110749b49cdaSZbigniew Bodek /**** dwrr_cfg_1 register ****/
110849b49cdaSZbigniew Bodek /* Maximum number of accumulated bytes in the deficit counter */
110949b49cdaSZbigniew Bodek #define UDMA_M2S_Q_DWRR_CFG_1_MAX_DEFICIT_CNT_SIZE_MASK 0x00FFFFFF
111049b49cdaSZbigniew Bodek #define UDMA_M2S_Q_DWRR_CFG_1_MAX_DEFICIT_CNT_SIZE_SHIFT 0
111149b49cdaSZbigniew Bodek /* Bypass the DWRR.  */
111249b49cdaSZbigniew Bodek #define UDMA_M2S_Q_DWRR_CFG_1_STRICT (1 << 24)
111349b49cdaSZbigniew Bodek /* Stop deficit counter increment. */
111449b49cdaSZbigniew Bodek #define UDMA_M2S_Q_DWRR_CFG_1_PAUSE  (1 << 25)
111549b49cdaSZbigniew Bodek 
111649b49cdaSZbigniew Bodek /**** dwrr_cfg_2 register ****/
111749b49cdaSZbigniew Bodek /*
111849b49cdaSZbigniew Bodek  * Value for the queue QoS.
111949b49cdaSZbigniew Bodek  * Queues with the same QoS value are scheduled with RR/DWRR.
112049b49cdaSZbigniew Bodek  * Only LOG(number of queues) is used.
112149b49cdaSZbigniew Bodek  */
112249b49cdaSZbigniew Bodek #define UDMA_M2S_Q_DWRR_CFG_2_Q_QOS_MASK 0x000000FF
112349b49cdaSZbigniew Bodek #define UDMA_M2S_Q_DWRR_CFG_2_Q_QOS_SHIFT 0
112449b49cdaSZbigniew Bodek 
112549b49cdaSZbigniew Bodek /**** dwrr_cfg_3 register ****/
112649b49cdaSZbigniew Bodek /* Queue weight */
112749b49cdaSZbigniew Bodek #define UDMA_M2S_Q_DWRR_CFG_3_WEIGHT_MASK 0x000000FF
112849b49cdaSZbigniew Bodek #define UDMA_M2S_Q_DWRR_CFG_3_WEIGHT_SHIFT 0
112949b49cdaSZbigniew Bodek 
113049b49cdaSZbigniew Bodek /**** dwrr_sw_ctrl register ****/
113149b49cdaSZbigniew Bodek /* Reset the DWRR deficit counter. */
113249b49cdaSZbigniew Bodek #define UDMA_M2S_Q_DWRR_SW_CTRL_RST_CNT (1 << 0)
113349b49cdaSZbigniew Bodek 
113449b49cdaSZbigniew Bodek /**** comp_cfg register ****/
113549b49cdaSZbigniew Bodek /* Enable writing to the completion ring */
113649b49cdaSZbigniew Bodek #define UDMA_M2S_Q_COMP_CFG_EN_COMP_RING_UPDATE (1 << 0)
113749b49cdaSZbigniew Bodek /* Disable the completion coalescing function. */
113849b49cdaSZbigniew Bodek #define UDMA_M2S_Q_COMP_CFG_DIS_COMP_COAL (1 << 1)
113949b49cdaSZbigniew Bodek 
114049b49cdaSZbigniew Bodek /**** q_sw_ctrl register ****/
114149b49cdaSZbigniew Bodek /*
114249b49cdaSZbigniew Bodek  * Reset the DMB hardware barrier
114349b49cdaSZbigniew Bodek  * (enable queue operation).
114449b49cdaSZbigniew Bodek  */
114549b49cdaSZbigniew Bodek #define UDMA_M2S_Q_SW_CTRL_RST_DMB (1 << 0)
114649b49cdaSZbigniew Bodek /* Reset the tail pointer hardware. */
114749b49cdaSZbigniew Bodek #define UDMA_M2S_Q_SW_CTRL_RST_TAIL_PTR (1 << 1)
114849b49cdaSZbigniew Bodek /* Reset the head pointer hardware. */
114949b49cdaSZbigniew Bodek #define UDMA_M2S_Q_SW_CTRL_RST_HEAD_PTR (1 << 2)
115049b49cdaSZbigniew Bodek /* Reset the current pointer hardware. */
115149b49cdaSZbigniew Bodek #define UDMA_M2S_Q_SW_CTRL_RST_CURRENT_PTR (1 << 3)
115249b49cdaSZbigniew Bodek /* Reset the queue */
115349b49cdaSZbigniew Bodek #define UDMA_M2S_Q_SW_CTRL_RST_Q   (1 << 8)
115449b49cdaSZbigniew Bodek 
115549b49cdaSZbigniew Bodek #ifdef __cplusplus
115649b49cdaSZbigniew Bodek }
115749b49cdaSZbigniew Bodek #endif
115849b49cdaSZbigniew Bodek 
115949b49cdaSZbigniew Bodek #endif /* __AL_HAL_UDMA_M2S_REG_H */
1160