1 // SPDX-License-Identifier: GPL-2.0-only 2 /* Copyright (C) 2020 Felix Fietkau <nbd@nbd.name> */ 3 4 #ifndef __MTK_WED_REGS_H 5 #define __MTK_WED_REGS_H 6 7 #define MTK_WDMA_DESC_CTRL_LEN1 GENMASK(14, 0) 8 #define MTK_WDMA_DESC_CTRL_LAST_SEG1 BIT(15) 9 #define MTK_WDMA_DESC_CTRL_BURST BIT(16) 10 #define MTK_WDMA_DESC_CTRL_LEN0 GENMASK(29, 16) 11 #define MTK_WDMA_DESC_CTRL_LAST_SEG0 BIT(30) 12 #define MTK_WDMA_DESC_CTRL_DMA_DONE BIT(31) 13 14 struct mtk_wdma_desc { 15 __le32 buf0; 16 __le32 ctrl; 17 __le32 buf1; 18 __le32 info; 19 } __packed __aligned(4); 20 21 #define MTK_WED_RESET 0x008 22 #define MTK_WED_RESET_TX_BM BIT(0) 23 #define MTK_WED_RESET_TX_FREE_AGENT BIT(4) 24 #define MTK_WED_RESET_WPDMA_TX_DRV BIT(8) 25 #define MTK_WED_RESET_WPDMA_RX_DRV BIT(9) 26 #define MTK_WED_RESET_WPDMA_INT_AGENT BIT(11) 27 #define MTK_WED_RESET_WED_TX_DMA BIT(12) 28 #define MTK_WED_RESET_WDMA_RX_DRV BIT(17) 29 #define MTK_WED_RESET_WDMA_INT_AGENT BIT(19) 30 #define MTK_WED_RESET_WED BIT(31) 31 32 #define MTK_WED_CTRL 0x00c 33 #define MTK_WED_CTRL_WPDMA_INT_AGENT_EN BIT(0) 34 #define MTK_WED_CTRL_WPDMA_INT_AGENT_BUSY BIT(1) 35 #define MTK_WED_CTRL_WDMA_INT_AGENT_EN BIT(2) 36 #define MTK_WED_CTRL_WDMA_INT_AGENT_BUSY BIT(3) 37 #define MTK_WED_CTRL_WED_TX_BM_EN BIT(8) 38 #define MTK_WED_CTRL_WED_TX_BM_BUSY BIT(9) 39 #define MTK_WED_CTRL_WED_TX_FREE_AGENT_EN BIT(10) 40 #define MTK_WED_CTRL_WED_TX_FREE_AGENT_BUSY BIT(11) 41 #define MTK_WED_CTRL_RESERVE_EN BIT(12) 42 #define MTK_WED_CTRL_RESERVE_BUSY BIT(13) 43 #define MTK_WED_CTRL_FINAL_DIDX_READ BIT(24) 44 #define MTK_WED_CTRL_MIB_READ_CLEAR BIT(28) 45 46 #define MTK_WED_EXT_INT_STATUS 0x020 47 #define MTK_WED_EXT_INT_STATUS_TF_LEN_ERR BIT(0) 48 #define MTK_WED_EXT_INT_STATUS_TKID_WO_PYLD BIT(1) 49 #define MTK_WED_EXT_INT_STATUS_TKID_TITO_INVALID BIT(4) 50 #define MTK_WED_EXT_INT_STATUS_TX_FBUF_LO_TH BIT(8) 51 #define MTK_WED_EXT_INT_STATUS_TX_FBUF_HI_TH BIT(9) 52 #define MTK_WED_EXT_INT_STATUS_RX_FBUF_LO_TH BIT(12) 53 #define MTK_WED_EXT_INT_STATUS_RX_FBUF_HI_TH BIT(13) 54 #define MTK_WED_EXT_INT_STATUS_RX_DRV_R_RESP_ERR BIT(16) 55 #define MTK_WED_EXT_INT_STATUS_RX_DRV_W_RESP_ERR BIT(17) 56 #define MTK_WED_EXT_INT_STATUS_RX_DRV_COHERENT BIT(18) 57 #define MTK_WED_EXT_INT_STATUS_RX_DRV_INIT_WDMA_EN BIT(19) 58 #define MTK_WED_EXT_INT_STATUS_RX_DRV_BM_DMAD_COHERENT BIT(20) 59 #define MTK_WED_EXT_INT_STATUS_TX_DRV_R_RESP_ERR BIT(21) 60 #define MTK_WED_EXT_INT_STATUS_TX_DRV_W_RESP_ERR BIT(22) 61 #define MTK_WED_EXT_INT_STATUS_RX_DRV_DMA_RECYCLE BIT(24) 62 #define MTK_WED_EXT_INT_STATUS_ERROR_MASK (MTK_WED_EXT_INT_STATUS_TF_LEN_ERR | \ 63 MTK_WED_EXT_INT_STATUS_TKID_WO_PYLD | \ 64 MTK_WED_EXT_INT_STATUS_TKID_TITO_INVALID | \ 65 MTK_WED_EXT_INT_STATUS_RX_DRV_R_RESP_ERR | \ 66 MTK_WED_EXT_INT_STATUS_RX_DRV_W_RESP_ERR | \ 67 MTK_WED_EXT_INT_STATUS_RX_DRV_INIT_WDMA_EN | \ 68 MTK_WED_EXT_INT_STATUS_TX_DRV_R_RESP_ERR | \ 69 MTK_WED_EXT_INT_STATUS_TX_DRV_W_RESP_ERR) 70 71 #define MTK_WED_EXT_INT_MASK 0x028 72 73 #define MTK_WED_STATUS 0x060 74 #define MTK_WED_STATUS_TX GENMASK(15, 8) 75 76 #define MTK_WED_TX_BM_CTRL 0x080 77 #define MTK_WED_TX_BM_CTRL_VLD_GRP_NUM GENMASK(6, 0) 78 #define MTK_WED_TX_BM_CTRL_RSV_GRP_NUM GENMASK(22, 16) 79 #define MTK_WED_TX_BM_CTRL_PAUSE BIT(28) 80 81 #define MTK_WED_TX_BM_BASE 0x084 82 83 #define MTK_WED_TX_BM_TKID 0x088 84 #define MTK_WED_TX_BM_TKID_START GENMASK(15, 0) 85 #define MTK_WED_TX_BM_TKID_END GENMASK(31, 16) 86 87 #define MTK_WED_TX_BM_BUF_LEN 0x08c 88 89 #define MTK_WED_TX_BM_INTF 0x09c 90 #define MTK_WED_TX_BM_INTF_TKID GENMASK(15, 0) 91 #define MTK_WED_TX_BM_INTF_TKFIFO_FDEP GENMASK(23, 16) 92 #define MTK_WED_TX_BM_INTF_TKID_VALID BIT(28) 93 #define MTK_WED_TX_BM_INTF_TKID_READ BIT(29) 94 95 #define MTK_WED_TX_BM_DYN_THR 0x0a0 96 #define MTK_WED_TX_BM_DYN_THR_LO GENMASK(6, 0) 97 #define MTK_WED_TX_BM_DYN_THR_HI GENMASK(22, 16) 98 99 #define MTK_WED_INT_STATUS 0x200 100 #define MTK_WED_INT_MASK 0x204 101 102 #define MTK_WED_GLO_CFG 0x208 103 #define MTK_WED_GLO_CFG_TX_DMA_EN BIT(0) 104 #define MTK_WED_GLO_CFG_TX_DMA_BUSY BIT(1) 105 #define MTK_WED_GLO_CFG_RX_DMA_EN BIT(2) 106 #define MTK_WED_GLO_CFG_RX_DMA_BUSY BIT(3) 107 #define MTK_WED_GLO_CFG_RX_BT_SIZE GENMASK(5, 4) 108 #define MTK_WED_GLO_CFG_TX_WB_DDONE BIT(6) 109 #define MTK_WED_GLO_CFG_BIG_ENDIAN BIT(7) 110 #define MTK_WED_GLO_CFG_DIS_BT_SIZE_ALIGN BIT(8) 111 #define MTK_WED_GLO_CFG_TX_BT_SIZE_LO BIT(9) 112 #define MTK_WED_GLO_CFG_MULTI_DMA_EN GENMASK(11, 10) 113 #define MTK_WED_GLO_CFG_FIFO_LITTLE_ENDIAN BIT(12) 114 #define MTK_WED_GLO_CFG_MI_DEPTH_RD GENMASK(21, 13) 115 #define MTK_WED_GLO_CFG_TX_BT_SIZE_HI GENMASK(23, 22) 116 #define MTK_WED_GLO_CFG_SW_RESET BIT(24) 117 #define MTK_WED_GLO_CFG_FIRST_TOKEN_ONLY BIT(26) 118 #define MTK_WED_GLO_CFG_OMIT_RX_INFO BIT(27) 119 #define MTK_WED_GLO_CFG_OMIT_TX_INFO BIT(28) 120 #define MTK_WED_GLO_CFG_BYTE_SWAP BIT(29) 121 #define MTK_WED_GLO_CFG_RX_2B_OFFSET BIT(31) 122 123 #define MTK_WED_RESET_IDX 0x20c 124 #define MTK_WED_RESET_IDX_TX GENMASK(3, 0) 125 #define MTK_WED_RESET_IDX_RX GENMASK(17, 16) 126 127 #define MTK_WED_TX_MIB(_n) (0x2a0 + (_n) * 4) 128 129 #define MTK_WED_RING_TX(_n) (0x300 + (_n) * 0x10) 130 131 #define MTK_WED_RING_RX(_n) (0x400 + (_n) * 0x10) 132 133 #define MTK_WED_WPDMA_INT_TRIGGER 0x504 134 #define MTK_WED_WPDMA_INT_TRIGGER_RX_DONE BIT(1) 135 #define MTK_WED_WPDMA_INT_TRIGGER_TX_DONE GENMASK(5, 4) 136 137 #define MTK_WED_WPDMA_GLO_CFG 0x508 138 #define MTK_WED_WPDMA_GLO_CFG_TX_DRV_EN BIT(0) 139 #define MTK_WED_WPDMA_GLO_CFG_TX_DRV_BUSY BIT(1) 140 #define MTK_WED_WPDMA_GLO_CFG_RX_DRV_EN BIT(2) 141 #define MTK_WED_WPDMA_GLO_CFG_RX_DRV_BUSY BIT(3) 142 #define MTK_WED_WPDMA_GLO_CFG_RX_BT_SIZE GENMASK(5, 4) 143 #define MTK_WED_WPDMA_GLO_CFG_TX_WB_DDONE BIT(6) 144 #define MTK_WED_WPDMA_GLO_CFG_BIG_ENDIAN BIT(7) 145 #define MTK_WED_WPDMA_GLO_CFG_DIS_BT_SIZE_ALIGN BIT(8) 146 #define MTK_WED_WPDMA_GLO_CFG_TX_BT_SIZE_LO BIT(9) 147 #define MTK_WED_WPDMA_GLO_CFG_MULTI_DMA_EN GENMASK(11, 10) 148 #define MTK_WED_WPDMA_GLO_CFG_FIFO_LITTLE_ENDIAN BIT(12) 149 #define MTK_WED_WPDMA_GLO_CFG_MI_DEPTH_RD GENMASK(21, 13) 150 #define MTK_WED_WPDMA_GLO_CFG_TX_BT_SIZE_HI GENMASK(23, 22) 151 #define MTK_WED_WPDMA_GLO_CFG_SW_RESET BIT(24) 152 #define MTK_WED_WPDMA_GLO_CFG_FIRST_TOKEN_ONLY BIT(26) 153 #define MTK_WED_WPDMA_GLO_CFG_OMIT_RX_INFO BIT(27) 154 #define MTK_WED_WPDMA_GLO_CFG_OMIT_TX_INFO BIT(28) 155 #define MTK_WED_WPDMA_GLO_CFG_BYTE_SWAP BIT(29) 156 #define MTK_WED_WPDMA_GLO_CFG_RX_2B_OFFSET BIT(31) 157 158 #define MTK_WED_WPDMA_RESET_IDX 0x50c 159 #define MTK_WED_WPDMA_RESET_IDX_TX GENMASK(3, 0) 160 #define MTK_WED_WPDMA_RESET_IDX_RX GENMASK(17, 16) 161 162 #define MTK_WED_WPDMA_INT_CTRL 0x520 163 #define MTK_WED_WPDMA_INT_CTRL_SUBRT_ADV BIT(21) 164 165 #define MTK_WED_WPDMA_INT_MASK 0x524 166 167 #define MTK_WED_PCIE_CFG_BASE 0x560 168 169 #define MTK_WED_PCIE_INT_TRIGGER 0x570 170 #define MTK_WED_PCIE_INT_TRIGGER_STATUS BIT(16) 171 172 #define MTK_WED_WPDMA_CFG_BASE 0x580 173 174 #define MTK_WED_WPDMA_TX_MIB(_n) (0x5a0 + (_n) * 4) 175 #define MTK_WED_WPDMA_TX_COHERENT_MIB(_n) (0x5d0 + (_n) * 4) 176 177 #define MTK_WED_WPDMA_RING_TX(_n) (0x600 + (_n) * 0x10) 178 #define MTK_WED_WPDMA_RING_RX(_n) (0x700 + (_n) * 0x10) 179 #define MTK_WED_WDMA_RING_RX(_n) (0x900 + (_n) * 0x10) 180 #define MTK_WED_WDMA_RX_THRES(_n) (0x940 + (_n) * 0x4) 181 182 #define MTK_WED_WDMA_GLO_CFG 0xa04 183 #define MTK_WED_WDMA_GLO_CFG_TX_DRV_EN BIT(0) 184 #define MTK_WED_WDMA_GLO_CFG_RX_DRV_EN BIT(2) 185 #define MTK_WED_WDMA_GLO_CFG_RX_DRV_BUSY BIT(3) 186 #define MTK_WED_WDMA_GLO_CFG_BT_SIZE GENMASK(5, 4) 187 #define MTK_WED_WDMA_GLO_CFG_TX_WB_DDONE BIT(6) 188 #define MTK_WED_WDMA_GLO_CFG_RX_DIS_FSM_AUTO_IDLE BIT(13) 189 #define MTK_WED_WDMA_GLO_CFG_WCOMPLETE_SEL BIT(16) 190 #define MTK_WED_WDMA_GLO_CFG_INIT_PHASE_RXDMA_BYPASS BIT(17) 191 #define MTK_WED_WDMA_GLO_CFG_INIT_PHASE_BYPASS BIT(18) 192 #define MTK_WED_WDMA_GLO_CFG_FSM_RETURN_IDLE BIT(19) 193 #define MTK_WED_WDMA_GLO_CFG_WAIT_COHERENT BIT(20) 194 #define MTK_WED_WDMA_GLO_CFG_AXI_W_AFTER_AW BIT(21) 195 #define MTK_WED_WDMA_GLO_CFG_IDLE_DMAD_SUPPLY_SINGLE_W BIT(22) 196 #define MTK_WED_WDMA_GLO_CFG_IDLE_DMAD_SUPPLY BIT(23) 197 #define MTK_WED_WDMA_GLO_CFG_DYNAMIC_SKIP_DMAD_PREP BIT(24) 198 #define MTK_WED_WDMA_GLO_CFG_DYNAMIC_DMAD_RECYCLE BIT(25) 199 #define MTK_WED_WDMA_GLO_CFG_RST_INIT_COMPLETE BIT(26) 200 #define MTK_WED_WDMA_GLO_CFG_RXDRV_CLKGATE_BYPASS BIT(30) 201 202 #define MTK_WED_WDMA_RESET_IDX 0xa08 203 #define MTK_WED_WDMA_RESET_IDX_RX GENMASK(17, 16) 204 #define MTK_WED_WDMA_RESET_IDX_DRV GENMASK(25, 24) 205 206 #define MTK_WED_WDMA_INT_TRIGGER 0xa28 207 #define MTK_WED_WDMA_INT_TRIGGER_RX_DONE GENMASK(17, 16) 208 209 #define MTK_WED_WDMA_INT_CTRL 0xa2c 210 #define MTK_WED_WDMA_INT_CTRL_POLL_SRC_SEL GENMASK(17, 16) 211 212 #define MTK_WED_WDMA_OFFSET0 0xaa4 213 #define MTK_WED_WDMA_OFFSET1 0xaa8 214 215 #define MTK_WED_WDMA_RX_MIB(_n) (0xae0 + (_n) * 4) 216 #define MTK_WED_WDMA_RX_RECYCLE_MIB(_n) (0xae8 + (_n) * 4) 217 #define MTK_WED_WDMA_RX_PROCESSED_MIB(_n) (0xaf0 + (_n) * 4) 218 219 #define MTK_WED_RING_OFS_BASE 0x00 220 #define MTK_WED_RING_OFS_COUNT 0x04 221 #define MTK_WED_RING_OFS_CPU_IDX 0x08 222 #define MTK_WED_RING_OFS_DMA_IDX 0x0c 223 224 #define MTK_WDMA_RING_RX(_n) (0x100 + (_n) * 0x10) 225 226 #define MTK_WDMA_GLO_CFG 0x204 227 #define MTK_WDMA_GLO_CFG_RX_INFO_PRERES GENMASK(28, 26) 228 229 #define MTK_WDMA_RESET_IDX 0x208 230 #define MTK_WDMA_RESET_IDX_TX GENMASK(3, 0) 231 #define MTK_WDMA_RESET_IDX_RX GENMASK(17, 16) 232 233 #define MTK_WDMA_INT_MASK 0x228 234 #define MTK_WDMA_INT_MASK_TX_DONE GENMASK(3, 0) 235 #define MTK_WDMA_INT_MASK_RX_DONE GENMASK(17, 16) 236 #define MTK_WDMA_INT_MASK_TX_DELAY BIT(28) 237 #define MTK_WDMA_INT_MASK_TX_COHERENT BIT(29) 238 #define MTK_WDMA_INT_MASK_RX_DELAY BIT(30) 239 #define MTK_WDMA_INT_MASK_RX_COHERENT BIT(31) 240 241 #define MTK_WDMA_INT_GRP1 0x250 242 #define MTK_WDMA_INT_GRP2 0x254 243 244 #define MTK_PCIE_MIRROR_MAP(n) ((n) ? 0x4 : 0x0) 245 #define MTK_PCIE_MIRROR_MAP_EN BIT(0) 246 #define MTK_PCIE_MIRROR_MAP_WED_ID BIT(1) 247 248 /* DMA channel mapping */ 249 #define HIFSYS_DMA_AG_MAP 0x008 250 251 #endif 252