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