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