1*4b1a56afSjsg /* $OpenBSD: if_mvppreg.h,v 1.17 2022/01/09 05:42:37 jsg Exp $ */ 21a945772Spatrick /* 31a945772Spatrick * Copyright (c) 2008, 2019 Mark Kettenis <kettenis@openbsd.org> 41a945772Spatrick * Copyright (c) 2017, 2020 Patrick Wildt <patrick@blueri.se> 51a945772Spatrick * 61a945772Spatrick * Permission to use, copy, modify, and distribute this software for any 71a945772Spatrick * purpose with or without fee is hereby granted, provided that the above 81a945772Spatrick * copyright notice and this permission notice appear in all copies. 91a945772Spatrick * 101a945772Spatrick * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 111a945772Spatrick * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 121a945772Spatrick * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 131a945772Spatrick * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 141a945772Spatrick * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 151a945772Spatrick * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 161a945772Spatrick * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 171a945772Spatrick */ 181a945772Spatrick /* 191a945772Spatrick * Copyright (C) 2016 Marvell International Ltd. 201a945772Spatrick * 211a945772Spatrick * Marvell BSD License Option 221a945772Spatrick * 231a945772Spatrick * If you received this File from Marvell, you may opt to use, redistribute 241a945772Spatrick * and/or modify this File under the following licensing terms. 251a945772Spatrick * Redistribution and use in source and binary forms, with or without 261a945772Spatrick * modification, are permitted provided that the following conditions are met: 271a945772Spatrick * 281a945772Spatrick * * Redistributions of source code must retain the above copyright notice, 291a945772Spatrick * this list of conditions and the following disclaimer. 301a945772Spatrick * 311a945772Spatrick * * Redistributions in binary form must reproduce the above copyright 321a945772Spatrick * notice, this list of conditions and the following disclaimer in the 331a945772Spatrick * documentation and/or other materials provided with the distribution. 341a945772Spatrick * 351a945772Spatrick * * Neither the name of Marvell nor the names of its contributors may be 361a945772Spatrick * used to endorse or promote products derived from this software without 371a945772Spatrick * specific prior written permission. 381a945772Spatrick * 391a945772Spatrick * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 401a945772Spatrick * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 411a945772Spatrick * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 421a945772Spatrick * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 431a945772Spatrick * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 441a945772Spatrick * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 451a945772Spatrick * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 461a945772Spatrick * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 471a945772Spatrick * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 481a945772Spatrick * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 491a945772Spatrick * POSSIBILITY OF SUCH DAMAGE. 501a945772Spatrick */ 511a945772Spatrick 521a945772Spatrick #ifndef __MVPP2_LIB_HW__ 531a945772Spatrick #define __MVPP2_LIB_HW__ 541a945772Spatrick 55af1244a6Spatrick #define BIT(nr) (1U << (nr)) 561a945772Spatrick 571a945772Spatrick /* PP2v2 registers offsets */ 581a945772Spatrick #define MVPP22_SMI_OFFSET 0x1200 591a945772Spatrick #define MVPP22_MPCS_OFFSET 0x7000 601a945772Spatrick #define MVPP22_MPCS_REG_SIZE 0x1000 611a945772Spatrick #define MVPP22_XPCS_OFFSET 0x7400 621a945772Spatrick #define MVPP22_XPCS_REG_SIZE 0x1000 631a945772Spatrick #define MVPP22_GMAC_OFFSET 0x7e00 641a945772Spatrick #define MVPP22_GMAC_REG_SIZE 0x1000 651a945772Spatrick #define MVPP22_XLG_OFFSET 0x7f00 661a945772Spatrick #define MVPP22_XLG_REG_SIZE 0x1000 671a945772Spatrick #define MVPP22_RFU1_OFFSET 0x318000 681a945772Spatrick #define MVPP22_ADDR_SPACE_SIZE 0x10000 691a945772Spatrick 701a945772Spatrick /* RX Fifo Registers */ 711a945772Spatrick #define MVPP2_RX_DATA_FIFO_SIZE_REG(port) (0x00 + 4 * (port)) 721a945772Spatrick #define MVPP2_RX_ATTR_FIFO_SIZE_REG(port) (0x20 + 4 * (port)) 731a945772Spatrick #define MVPP2_RX_MIN_PKT_SIZE_REG 0x60 741a945772Spatrick #define MVPP2_RX_FIFO_INIT_REG 0x64 751a945772Spatrick #define MVPP22_TX_FIFO_THRESH_REG(port) (0x8840 + 4 * (port)) 761a945772Spatrick #define MVPP22_TX_FIFO_SIZE_REG(port) (0x8860 + 4 * (port)) 771a945772Spatrick 781a945772Spatrick /* RX DMA Top Registers */ 791a945772Spatrick #define MVPP2_RX_CTRL_REG(port) (0x140 + 4 * (port)) 801a945772Spatrick #define MVPP2_RX_LOW_LATENCY_PKT_SIZE(s) (((s) & 0xfff) << 16) 811a945772Spatrick #define MVPP2_RX_USE_PSEUDO_FOR_CSUM_MASK BIT(31) 821a945772Spatrick #define MVPP2_POOL_BUF_SIZE_REG(pool) (0x180 + 4 * (pool)) 831a945772Spatrick #define MVPP2_POOL_BUF_SIZE_OFFSET 5 841a945772Spatrick #define MVPP2_RXQ_CONFIG_REG(rxq) (0x800 + 4 * (rxq)) 851a945772Spatrick #define MVPP2_SNOOP_PKT_SIZE_MASK 0x1ff 861a945772Spatrick #define MVPP2_SNOOP_BUF_HDR_MASK BIT(9) 871a945772Spatrick #define MVPP2_RXQ_POOL_SHORT_OFFS 20 881a945772Spatrick #define MVPP2_RXQ_POOL_SHORT_MASK 0xf00000 891a945772Spatrick #define MVPP2_RXQ_POOL_LONG_OFFS 24 901a945772Spatrick #define MVPP2_RXQ_POOL_LONG_MASK 0xf000000 911a945772Spatrick #define MVPP2_RXQ_PACKET_OFFSET_OFFS 28 921a945772Spatrick #define MVPP2_RXQ_PACKET_OFFSET_MASK 0x70000000 931a945772Spatrick #define MVPP2_RXQ_DISABLE_MASK BIT(31) 941a945772Spatrick 951a945772Spatrick /* Parser Registers */ 961a945772Spatrick #define MVPP2_PRS_INIT_LOOKUP_REG 0x1000 971a945772Spatrick #define MVPP2_PRS_PORT_LU_MAX 0xf 981a945772Spatrick #define MVPP2_PRS_PORT_LU_MASK(port) (0xff << ((port) * 4)) 991a945772Spatrick #define MVPP2_PRS_PORT_LU_VAL(port, val) ((val) << ((port) * 4)) 1001a945772Spatrick #define MVPP2_PRS_INIT_OFFS_REG(port) (0x1004 + ((port) & 4)) 1011a945772Spatrick #define MVPP2_PRS_INIT_OFF_MASK(port) (0x3f << (((port) % 4) * 8)) 1021a945772Spatrick #define MVPP2_PRS_INIT_OFF_VAL(port, val) ((val) << (((port) % 4) * 8)) 1031a945772Spatrick #define MVPP2_PRS_MAX_LOOP_REG(port) (0x100c + ((port) & 4)) 1041a945772Spatrick #define MVPP2_PRS_MAX_LOOP_MASK(port) (0xff << (((port) % 4) * 8)) 1051a945772Spatrick #define MVPP2_PRS_MAX_LOOP_VAL(port, val) ((val) << (((port) % 4) * 8)) 1061a945772Spatrick #define MVPP2_PRS_TCAM_IDX_REG 0x1100 1071a945772Spatrick #define MVPP2_PRS_TCAM_DATA_REG(idx) (0x1104 + (idx) * 4) 1081a945772Spatrick #define MVPP2_PRS_TCAM_INV_MASK BIT(31) 1091a945772Spatrick #define MVPP2_PRS_SRAM_IDX_REG 0x1200 1101a945772Spatrick #define MVPP2_PRS_SRAM_DATA_REG(idx) (0x1204 + (idx) * 4) 1111a945772Spatrick #define MVPP2_PRS_TCAM_CTRL_REG 0x1230 1121a945772Spatrick #define MVPP2_PRS_TCAM_EN_MASK BIT(0) 1131a945772Spatrick 1141a945772Spatrick /* Classifier Registers */ 1151a945772Spatrick #define MVPP2_CLS_MODE_REG 0x1800 1161a945772Spatrick #define MVPP2_CLS_MODE_ACTIVE_MASK BIT(0) 1171a945772Spatrick #define MVPP2_CLS_PORT_WAY_REG 0x1810 1181a945772Spatrick #define MVPP2_CLS_PORT_WAY_MASK(port) (1 << (port)) 1191a945772Spatrick #define MVPP2_CLS_LKP_INDEX_REG 0x1814 1201a945772Spatrick #define MVPP2_CLS_LKP_INDEX_WAY_OFFS 6 1211a945772Spatrick #define MVPP2_CLS_LKP_TBL_REG 0x1818 1221a945772Spatrick #define MVPP2_CLS_LKP_TBL_RXQ_MASK 0xff 1231a945772Spatrick #define MVPP2_CLS_LKP_TBL_LOOKUP_EN_MASK BIT(25) 1241a945772Spatrick #define MVPP2_CLS_FLOW_INDEX_REG 0x1820 1251a945772Spatrick #define MVPP2_CLS_FLOW_TBL0_REG 0x1824 1261a945772Spatrick #define MVPP2_CLS_FLOW_TBL1_REG 0x1828 1271a945772Spatrick #define MVPP2_CLS_FLOW_TBL2_REG 0x182c 1281a945772Spatrick #define MVPP2_CLS_OVERSIZE_RXQ_LOW_REG(port) (0x1980 + ((port) * 4)) 1291a945772Spatrick #define MVPP2_CLS_OVERSIZE_RXQ_LOW_BITS 3 1301a945772Spatrick #define MVPP2_CLS_OVERSIZE_RXQ_LOW_MASK 0x7 1311a945772Spatrick #define MVPP2_CLS_SWFWD_P2HQ_REG(port) (0x19b0 + ((port) * 4)) 1321a945772Spatrick #define MVPP2_CLS_SWFWD_PCTRL_REG 0x19d0 1331a945772Spatrick #define MVPP2_CLS_SWFWD_PCTRL_MASK(port) (1 << (port)) 1341a945772Spatrick 1351a945772Spatrick /* Descriptor Manager Top Registers */ 1361a945772Spatrick #define MVPP2_RXQ_NUM_REG 0x2040 1371a945772Spatrick #define MVPP2_RXQ_DESC_ADDR_REG 0x2044 1384d0a0269Spatrick #define MVPP22_DESC_ADDR_OFFS 8 1391a945772Spatrick #define MVPP2_RXQ_DESC_SIZE_REG 0x2048 1401a945772Spatrick #define MVPP2_RXQ_DESC_SIZE_MASK 0x3ff0 1411a945772Spatrick #define MVPP2_RXQ_STATUS_UPDATE_REG(rxq) (0x3000 + 4 * (rxq)) 1421a945772Spatrick #define MVPP2_RXQ_NUM_PROCESSED_OFFSET 0 1431a945772Spatrick #define MVPP2_RXQ_NUM_NEW_OFFSET 16 1441a945772Spatrick #define MVPP2_RXQ_STATUS_REG(rxq) (0x3400 + 4 * (rxq)) 1451a945772Spatrick #define MVPP2_RXQ_OCCUPIED_MASK 0x3fff 1461a945772Spatrick #define MVPP2_RXQ_NON_OCCUPIED_OFFSET 16 1471a945772Spatrick #define MVPP2_RXQ_NON_OCCUPIED_MASK 0x3fff0000 1481a945772Spatrick #define MVPP2_RXQ_THRESH_REG 0x204c 1491a945772Spatrick #define MVPP2_OCCUPIED_THRESH_OFFSET 0 1501a945772Spatrick #define MVPP2_OCCUPIED_THRESH_MASK 0x3fff 1511a945772Spatrick #define MVPP2_RXQ_INDEX_REG 0x2050 1521a945772Spatrick #define MVPP2_TXQ_NUM_REG 0x2080 1531a945772Spatrick #define MVPP2_TXQ_DESC_ADDR_REG 0x2084 1541a945772Spatrick #define MVPP22_TXQ_DESC_ADDR_HIGH_REG 0x20a8 1551a945772Spatrick #define MVPP22_TXQ_DESC_ADDR_HIGH_MASK 0xff 1561a945772Spatrick #define MVPP2_TXQ_DESC_SIZE_REG 0x2088 1571a945772Spatrick #define MVPP2_TXQ_DESC_SIZE_MASK 0x3ff0 1581a945772Spatrick #define MVPP2_AGGR_TXQ_UPDATE_REG 0x2090 1591a945772Spatrick #define MVPP2_TXQ_THRESH_REG 0x2094 1601a945772Spatrick #define MVPP2_TRANSMITTED_THRESH_OFFSET 16 1611a945772Spatrick #define MVPP2_TRANSMITTED_THRESH_MASK 0x3fff 1621a945772Spatrick #define MVPP2_TXQ_INDEX_REG 0x2098 1631a945772Spatrick #define MVPP2_TXQ_PREF_BUF_REG 0x209c 1641a945772Spatrick #define MVPP2_PREF_BUF_PTR(desc) ((desc) & 0xfff) 1651a945772Spatrick #define MVPP2_PREF_BUF_SIZE_4 (BIT(12) | BIT(13)) 1661a945772Spatrick #define MVPP2_PREF_BUF_SIZE_16 (BIT(12) | BIT(14)) 1671a945772Spatrick #define MVPP2_PREF_BUF_THRESH(val) ((val) << 17) 1681a945772Spatrick #define MVPP2_TXQ_DRAIN_EN_MASK BIT(31) 1691a945772Spatrick #define MVPP2_TXQ_PENDING_REG 0x20a0 1701a945772Spatrick #define MVPP2_TXQ_PENDING_MASK 0x3fff 1711a945772Spatrick #define MVPP2_TXQ_INT_STATUS_REG 0x20a4 1721a945772Spatrick #define MVPP2_TXQ_SENT_REG(txq) (0x3c00 + 4 * (txq)) 1731a945772Spatrick #define MVPP2_TRANSMITTED_COUNT_OFFSET 16 1741a945772Spatrick #define MVPP2_TRANSMITTED_COUNT_MASK 0x3fff0000 1751a945772Spatrick #define MVPP2_TXQ_RSVD_REQ_REG 0x20b0 1761a945772Spatrick #define MVPP2_TXQ_RSVD_REQ_Q_OFFSET 16 1771a945772Spatrick #define MVPP2_TXQ_RSVD_RSLT_REG 0x20b4 1781a945772Spatrick #define MVPP2_TXQ_RSVD_RSLT_MASK 0x3fff 1791a945772Spatrick #define MVPP2_TXQ_RSVD_CLR_REG 0x20b8 1801a945772Spatrick #define MVPP2_TXQ_RSVD_CLR_OFFSET 16 1811a945772Spatrick #define MVPP2_AGGR_TXQ_DESC_ADDR_REG(cpu) (0x2100 + 4 * (cpu)) 1821a945772Spatrick #define MVPP2_AGGR_TXQ_DESC_SIZE_REG(cpu) (0x2140 + 4 * (cpu)) 1831a945772Spatrick #define MVPP2_AGGR_TXQ_DESC_SIZE_MASK 0x3ff0 1841a945772Spatrick #define MVPP2_AGGR_TXQ_STATUS_REG(cpu) (0x2180 + 4 * (cpu)) 1851a945772Spatrick #define MVPP2_AGGR_TXQ_PENDING_MASK 0x3fff 1861a945772Spatrick #define MVPP2_AGGR_TXQ_INDEX_REG(cpu) (0x21c0 + 4 * (cpu)) 1871a945772Spatrick 1881a945772Spatrick /* MBUS bridge registers */ 1891a945772Spatrick #define MVPP2_WIN_BASE(w) (0x4000 + ((w) << 2)) 1901a945772Spatrick #define MVPP2_WIN_SIZE(w) (0x4020 + ((w) << 2)) 1911a945772Spatrick #define MVPP2_WIN_REMAP(w) (0x4040 + ((w) << 2)) 1921a945772Spatrick #define MVPP2_BASE_ADDR_ENABLE 0x4060 1931a945772Spatrick 194ad54c436Spatrick /* AXI Bridge Registers */ 195ad54c436Spatrick #define MVPP22_AXI_BM_WR_ATTR_REG 0x4100 196ad54c436Spatrick #define MVPP22_AXI_BM_RD_ATTR_REG 0x4104 197ad54c436Spatrick #define MVPP22_AXI_AGGRQ_DESCR_RD_ATTR_REG 0x4110 198ad54c436Spatrick #define MVPP22_AXI_TXQ_DESCR_WR_ATTR_REG 0x4114 199ad54c436Spatrick #define MVPP22_AXI_TXQ_DESCR_RD_ATTR_REG 0x4118 200ad54c436Spatrick #define MVPP22_AXI_RXQ_DESCR_WR_ATTR_REG 0x411c 201ad54c436Spatrick #define MVPP22_AXI_RX_DATA_WR_ATTR_REG 0x4120 202ad54c436Spatrick #define MVPP22_AXI_TX_DATA_RD_ATTR_REG 0x4130 203ad54c436Spatrick #define MVPP22_AXI_RD_NORMAL_CODE_REG 0x4150 204ad54c436Spatrick #define MVPP22_AXI_RD_SNOOP_CODE_REG 0x4154 205ad54c436Spatrick #define MVPP22_AXI_WR_NORMAL_CODE_REG 0x4160 206ad54c436Spatrick #define MVPP22_AXI_WR_SNOOP_CODE_REG 0x4164 207ad54c436Spatrick 208ad54c436Spatrick #define MVPP22_AXI_ATTR_CACHE_OFFS 0 209ad54c436Spatrick #define MVPP22_AXI_ATTR_DOMAIN_OFFS 12 210ad54c436Spatrick 211ad54c436Spatrick #define MVPP22_AXI_CODE_CACHE_OFFS 0 212ad54c436Spatrick #define MVPP22_AXI_CODE_DOMAIN_OFFS 4 213ad54c436Spatrick 214ad54c436Spatrick #define MVPP22_AXI_CODE_CACHE_NON_CACHE 0x3 215ad54c436Spatrick #define MVPP22_AXI_CODE_CACHE_WR_CACHE 0x7 216ad54c436Spatrick #define MVPP22_AXI_CODE_CACHE_RD_CACHE 0xb 217ad54c436Spatrick 218ad54c436Spatrick #define MVPP22_AXI_CODE_DOMAIN_OUTER_DOM 2 219ad54c436Spatrick #define MVPP22_AXI_CODE_DOMAIN_SYSTEM 3 220ad54c436Spatrick 2211a945772Spatrick /* Interrupt Cause and Mask registers */ 2221a945772Spatrick #define MVPP2_ISR_TX_THRESHOLD_REG(port) (0x5140 + 4 * (port)) 2231a945772Spatrick #define MVPP2_ISR_RX_THRESHOLD_REG(rxq) (0x5200 + 4 * (rxq)) 2241a945772Spatrick #define MVPP2_ISR_RXQ_GROUP_REG(rxq) (0x5400 + 4 * (rxq)) 2251a945772Spatrick #define MVPP2_ISR_RXQ_GROUP_INDEX_REG 0x5400 2261a945772Spatrick #define MVPP2_ISR_RXQ_GROUP_INDEX_GROUP_SHIFT 7 2271a945772Spatrick #define MVPP2_ISR_RXQ_SUB_GROUP_CONFIG_REG 0x5404 2281a945772Spatrick #define MVPP2_ISR_RXQ_SUB_GROUP_CONFIG_SIZE_SHIFT 8 2291a945772Spatrick #define MVPP2_ISR_ENABLE_REG(port) (0x5420 + 4 * (port)) 2301a945772Spatrick #define MVPP2_ISR_ENABLE_INTERRUPT(mask) ((mask) & 0xffff) 2311a945772Spatrick #define MVPP2_ISR_DISABLE_INTERRUPT(mask) (((mask) << 16) & 0xffff0000) 2321a945772Spatrick #define MVPP2_ISR_RX_TX_CAUSE_REG(port) (0x5480 + 4 * (port)) 2331a945772Spatrick #define MVPP2_CAUSE_RXQ_OCCUP_DESC_ALL_MASK 0xff 2341a945772Spatrick #define MVPP2_CAUSE_TXQ_OCCUP_DESC_ALL_MASK 0xff0000 2351a945772Spatrick #define MVPP2_CAUSE_TXQ_OCCUP_DESC_ALL_OFFSET 16 2361a945772Spatrick #define MVPP2_CAUSE_RX_FIFO_OVERRUN_MASK BIT(24) 2371a945772Spatrick #define MVPP2_CAUSE_FCS_ERR_MASK BIT(25) 2381a945772Spatrick #define MVPP2_CAUSE_TX_FIFO_UNDERRUN_MASK BIT(26) 2391a945772Spatrick #define MVPP2_CAUSE_TX_EXCEPTION_SUM_MASK BIT(29) 2401a945772Spatrick #define MVPP2_CAUSE_RX_EXCEPTION_SUM_MASK BIT(30) 2411a945772Spatrick #define MVPP2_CAUSE_MISC_SUM_MASK BIT(31) 2421a945772Spatrick #define MVPP2_ISR_RX_TX_MASK_REG(port) (0x54a0 + 4 * (port)) 2431a945772Spatrick #define MVPP2_ISR_PON_RX_TX_MASK_REG 0x54bc 2441a945772Spatrick #define MVPP2_PON_CAUSE_RXQ_OCCUP_DESC_ALL_MASK 0xffff 2451a945772Spatrick #define MVPP2_PON_CAUSE_TXP_OCCUP_DESC_ALL_MASK 0x3fc00000 2461a945772Spatrick #define MVPP2_PON_CAUSE_MISC_SUM_MASK BIT(31) 2471a945772Spatrick #define MVPP2_ISR_MISC_CAUSE_REG 0x55b0 2481a945772Spatrick 2491a945772Spatrick /* Buffer Manager registers */ 2501a945772Spatrick #define MVPP2_BM_POOL_BASE_REG(pool) (0x6000 + ((pool) * 4)) 2511a945772Spatrick #define MVPP2_BM_POOL_BASE_ADDR_MASK 0xfffff80 2521a945772Spatrick #define MVPP2_BM_POOL_SIZE_REG(pool) (0x6040 + ((pool) * 4)) 2531a945772Spatrick #define MVPP2_BM_POOL_SIZE_MASK 0xfff0 2541a945772Spatrick #define MVPP2_BM_POOL_READ_PTR_REG(pool) (0x6080 + ((pool) * 4)) 2551a945772Spatrick #define MVPP2_BM_POOL_GET_READ_PTR_MASK 0xfff0 2561a945772Spatrick #define MVPP2_BM_POOL_PTRS_NUM_REG(pool) (0x60c0 + ((pool) * 4)) 2571a945772Spatrick #define MVPP2_BM_POOL_PTRS_NUM_MASK 0xfff8 2581a945772Spatrick #define MVPP2_BM_BPPI_READ_PTR_REG(pool) (0x6100 + ((pool) * 4)) 2591a945772Spatrick #define MVPP2_BM_BPPI_PTRS_NUM_REG(pool) (0x6140 + ((pool) * 4)) 2606d508037Spatrick #define MVPP2_BM_BPPI_PTRS_NUM_MASK 0x7ff 2611a945772Spatrick #define MVPP2_BM_BPPI_PREFETCH_FULL_MASK BIT(16) 2621a945772Spatrick #define MVPP2_BM_POOL_CTRL_REG(pool) (0x6200 + ((pool) * 4)) 2631a945772Spatrick #define MVPP2_BM_START_MASK BIT(0) 2641a945772Spatrick #define MVPP2_BM_STOP_MASK BIT(1) 2651a945772Spatrick #define MVPP2_BM_STATE_MASK BIT(4) 2661a945772Spatrick #define MVPP2_BM_LOW_THRESH_OFFS 8 2671a945772Spatrick #define MVPP2_BM_LOW_THRESH_MASK 0x7f00 268ad54c436Spatrick #define MVPP2_BM_LOW_THRESH_VALUE(val) ((val) << \ 269ad54c436Spatrick MVPP2_BM_LOW_THRESH_OFFS) 2701a945772Spatrick #define MVPP2_BM_HIGH_THRESH_OFFS 16 2711a945772Spatrick #define MVPP2_BM_HIGH_THRESH_MASK 0x7f0000 272ad54c436Spatrick #define MVPP2_BM_HIGH_THRESH_VALUE(val) ((val) << \ 273ad54c436Spatrick MVPP2_BM_HIGH_THRESH_OFFS) 2741a945772Spatrick #define MVPP2_BM_INTR_CAUSE_REG(pool) (0x6240 + ((pool) * 4)) 2751a945772Spatrick #define MVPP2_BM_RELEASED_DELAY_MASK BIT(0) 2761a945772Spatrick #define MVPP2_BM_ALLOC_FAILED_MASK BIT(1) 2771a945772Spatrick #define MVPP2_BM_BPPE_EMPTY_MASK BIT(2) 2781a945772Spatrick #define MVPP2_BM_BPPE_FULL_MASK BIT(3) 2791a945772Spatrick #define MVPP2_BM_AVAILABLE_BP_LOW_MASK BIT(4) 2801a945772Spatrick #define MVPP2_BM_INTR_MASK_REG(pool) (0x6280 + ((pool) * 4)) 2811a945772Spatrick #define MVPP2_BM_PHY_ALLOC_REG(pool) (0x6400 + ((pool) * 4)) 2821a945772Spatrick #define MVPP2_BM_PHY_ALLOC_GRNTD_MASK BIT(0) 2831a945772Spatrick #define MVPP2_BM_VIRT_ALLOC_REG 0x6440 28413d9cc68Spatrick #define MVPP22_BM_ADDR_HIGH_ALLOC_REG 0x6444 28513d9cc68Spatrick #define MVPP22_BM_ADDR_HIGH_PHYS_MASK 0xff 28613d9cc68Spatrick #define MVPP22_BM_ADDR_HIGH_VIRT_MASK 0xff00 28713d9cc68Spatrick #define MVPP22_BM_ADDR_HIGH_VIRT_SHIFT 8 2881a945772Spatrick #define MVPP2_BM_PHY_RLS_REG(pool) (0x6480 + ((pool) * 4)) 2891a945772Spatrick #define MVPP2_BM_PHY_RLS_MC_BUFF_MASK BIT(0) 2901a945772Spatrick #define MVPP2_BM_PHY_RLS_PRIO_EN_MASK BIT(1) 2911a945772Spatrick #define MVPP2_BM_PHY_RLS_GRNTD_MASK BIT(2) 2921a945772Spatrick #define MVPP2_BM_VIRT_RLS_REG 0x64c0 29313d9cc68Spatrick #define MVPP22_BM_ADDR_HIGH_RLS_REG 0x64c4 29413d9cc68Spatrick #define MVPP22_BM_ADDR_HIGH_PHYS_RLS_MASK 0xff 29513d9cc68Spatrick #define MVPP22_BM_ADDR_HIGH_VIRT_RLS_MASK 0xff00 29613d9cc68Spatrick #define MVPP22_BM_ADDR_HIGH_VIRT_RLS_SHIFT 8 2971a945772Spatrick 2981a945772Spatrick #define MVPP22_BM_POOL_BASE_HIGH_REG 0x6310 2991a945772Spatrick #define MVPP22_BM_POOL_BASE_HIGH_MASK 0xff 3001a945772Spatrick #define MVPP2_BM_PRIO_CTRL_REG 0x6800 3011a945772Spatrick 3021a945772Spatrick /* TX Scheduler registers */ 3031a945772Spatrick #define MVPP2_TXP_SCHED_PORT_INDEX_REG 0x8000 3041a945772Spatrick #define MVPP2_TXP_SCHED_Q_CMD_REG 0x8004 3051a945772Spatrick #define MVPP2_TXP_SCHED_ENQ_MASK 0xff 3061a945772Spatrick #define MVPP2_TXP_SCHED_DISQ_OFFSET 8 3071a945772Spatrick #define MVPP2_TXP_SCHED_CMD_1_REG 0x8010 3081a945772Spatrick #define MVPP2_TXP_SCHED_PERIOD_REG 0x8018 3091a945772Spatrick #define MVPP2_TXP_SCHED_MTU_REG 0x801c 3101a945772Spatrick #define MVPP2_TXP_MTU_MAX 0x7FFFF 3111a945772Spatrick #define MVPP2_TXP_SCHED_REFILL_REG 0x8020 3121a945772Spatrick #define MVPP2_TXP_REFILL_TOKENS_ALL_MASK 0x7ffff 3131a945772Spatrick #define MVPP2_TXP_REFILL_PERIOD_ALL_MASK 0x3ff00000 3141a945772Spatrick #define MVPP2_TXP_REFILL_PERIOD_MASK(v) ((v) << 20) 3151a945772Spatrick #define MVPP2_TXP_SCHED_TOKEN_SIZE_REG 0x8024 3161a945772Spatrick #define MVPP2_TXP_TOKEN_SIZE_MAX 0xffffffff 3171a945772Spatrick #define MVPP2_TXQ_SCHED_REFILL_REG(q) (0x8040 + ((q) << 2)) 3181a945772Spatrick #define MVPP2_TXQ_REFILL_TOKENS_ALL_MASK 0x7ffff 3191a945772Spatrick #define MVPP2_TXQ_REFILL_PERIOD_ALL_MASK 0x3ff00000 3201a945772Spatrick #define MVPP2_TXQ_REFILL_PERIOD_MASK(v) ((v) << 20) 3211a945772Spatrick #define MVPP2_TXQ_SCHED_TOKEN_SIZE_REG(q) (0x8060 + ((q) << 2)) 3221a945772Spatrick #define MVPP2_TXQ_TOKEN_SIZE_MAX 0x7fffffff 3231a945772Spatrick #define MVPP2_TXQ_SCHED_TOKEN_CNTR_REG(q) (0x8080 + ((q) << 2)) 3241a945772Spatrick #define MVPP2_TXQ_TOKEN_CNTR_MAX 0xffffffff 3251a945772Spatrick 3261a945772Spatrick /* TX general registers */ 3271a945772Spatrick #define MVPP2_TX_SNOOP_REG 0x8800 3281a945772Spatrick #define MVPP2_TX_PORT_FLUSH_REG 0x8810 3291a945772Spatrick #define MVPP2_TX_PORT_FLUSH_MASK(port) (1 << (port)) 3301a945772Spatrick 3311a945772Spatrick /* LMS registers */ 3321a945772Spatrick #define MVPP2_SRC_ADDR_MIDDLE 0x24 3331a945772Spatrick #define MVPP2_SRC_ADDR_HIGH 0x28 3341a945772Spatrick #define MVPP2_PHY_AN_CFG0_REG 0x34 3351a945772Spatrick #define MVPP2_PHY_AN_STOP_SMI0_MASK BIT(7) 3361a945772Spatrick #define MVPP2_MIB_COUNTERS_BASE(port) (0x1000 + ((port) >> 1) * 0x400 + (port) * 0x400) 3371a945772Spatrick #define MVPP2_MIB_LATE_COLLISION 0x7c 3381a945772Spatrick #define MVPP2_ISR_SUM_MASK_REG 0x220c 3391a945772Spatrick #define MVPP2_MNG_EXTENDED_GLOBAL_CTRL_REG 0x305c 3401a945772Spatrick #define MVPP2_EXT_GLOBAL_CTRL_DEFAULT 0x27 3411a945772Spatrick 3421a945772Spatrick /* Per-port registers */ 3431a945772Spatrick #define MVPP2_GMAC_CTRL_0_REG 0x0 3441a945772Spatrick #define MVPP2_GMAC_PORT_EN_MASK BIT(0) 3451a945772Spatrick #define MVPP2_GMAC_PORT_TYPE_MASK BIT(1) 3461a945772Spatrick #define MVPP2_GMAC_MAX_RX_SIZE_OFFS 2 3471a945772Spatrick #define MVPP2_GMAC_MAX_RX_SIZE_MASK 0x7ffc 3481a945772Spatrick #define MVPP2_GMAC_MIB_CNTR_EN_MASK BIT(15) 3491a945772Spatrick #define MVPP2_GMAC_CTRL_1_REG 0x4 3501a945772Spatrick #define MVPP2_GMAC_PERIODIC_XON_EN_MASK BIT(1) 3511a945772Spatrick #define MVPP2_GMAC_GMII_LB_EN_MASK BIT(5) 3521a945772Spatrick #define MVPP2_GMAC_PCS_LB_EN_BIT 6 3531a945772Spatrick #define MVPP2_GMAC_PCS_LB_EN_MASK BIT(6) 3541a945772Spatrick #define MVPP2_GMAC_SA_LOW_OFFS 7 3551a945772Spatrick #define MVPP2_GMAC_CTRL_2_REG 0x8 3561a945772Spatrick #define MVPP2_GMAC_INBAND_AN_MASK BIT(0) 3571a945772Spatrick #define MVPP2_GMAC_PCS_ENABLE_MASK BIT(3) 3581a945772Spatrick #define MVPP2_GMAC_PORT_RGMII_MASK BIT(4) 3591a945772Spatrick #define MVPP2_GMAC_PORT_RESET_MASK BIT(6) 3601a945772Spatrick #define MVPP2_GMAC_AUTONEG_CONFIG 0xc 3611a945772Spatrick #define MVPP2_GMAC_FORCE_LINK_DOWN BIT(0) 3621a945772Spatrick #define MVPP2_GMAC_FORCE_LINK_PASS BIT(1) 3631a945772Spatrick #define MVPP2_GMAC_IN_BAND_AUTONEG BIT(2) 3641a945772Spatrick #define MVPP2_GMAC_IN_BAND_AUTONEG_BYPASS BIT(3) 3651a945772Spatrick #define MVPP2_GMAC_IN_BAND_RESTART_AN BIT(4) 3661a945772Spatrick #define MVPP2_GMAC_CONFIG_MII_SPEED BIT(5) 3671a945772Spatrick #define MVPP2_GMAC_CONFIG_GMII_SPEED BIT(6) 3681a945772Spatrick #define MVPP2_GMAC_AN_SPEED_EN BIT(7) 3691a945772Spatrick #define MVPP2_GMAC_FC_ADV_EN BIT(9) 3701a945772Spatrick #define MVPP2_GMAC_FC_ADV_ASM_EN BIT(10) 3711a945772Spatrick #define MVPP2_GMAC_FLOW_CTRL_AUTONEG BIT(11) 3721a945772Spatrick #define MVPP2_GMAC_CONFIG_FULL_DUPLEX BIT(12) 3731a945772Spatrick #define MVPP2_GMAC_AN_DUPLEX_EN BIT(13) 3741a945772Spatrick #define MVPP2_GMAC_PORT_FIFO_CFG_1_REG 0x1c 3751a945772Spatrick #define MVPP2_GMAC_TX_FIFO_MIN_TH_OFFS 6 3761a945772Spatrick #define MVPP2_GMAC_TX_FIFO_MIN_TH_ALL_MASK 0x1fc0 377ad54c436Spatrick #define MVPP2_GMAC_TX_FIFO_MIN_TH_MASK(v) (((v) << 6) & \ 378ad54c436Spatrick MVPP2_GMAC_TX_FIFO_MIN_TH_ALL_MASK) 379b137aaecSpatrick #define MVPP2_GMAC_INT_CAUSE_REG 0x20 380b137aaecSpatrick #define MVPP2_GMAC_INT_MASK_REG 0x24 381b137aaecSpatrick #define MVPP2_GMAC_INT_CAUSE_LINK_CHANGE BIT(1) 382b137aaecSpatrick #define MVPP2_GMAC_INT_SUM_CAUSE_REG 0xa0 383b137aaecSpatrick #define MVPP2_GMAC_INT_SUM_MASK_REG 0xa4 384b137aaecSpatrick #define MVPP2_GMAC_INT_SUM_CAUSE_LINK_CHANGE BIT(1) 3851a945772Spatrick 3861a945772Spatrick /* Port Mac Control0 */ 3874d0a0269Spatrick #define MVPP2_PORT_CTRL0_REG 0x0000 3884d0a0269Spatrick #define MVPP2_PORT_CTRL0_PORTEN BIT(0) 3894d0a0269Spatrick #define MVPP2_PORT_CTRL0_PORTTYPE BIT(1) 3904d0a0269Spatrick #define MVPP2_PORT_CTRL0_FRAMESIZELIMIT (0x1fff << 2) 3914d0a0269Spatrick #define MVPP2_PORT_CTRL0_COUNT_EN BIT(15) 3921a945772Spatrick 3931a945772Spatrick /* Port Mac Control1 */ 3944d0a0269Spatrick #define MVPP2_PORT_CTRL1_REG 0x0004 3954d0a0269Spatrick #define MVPP2_PORT_CTRL1_EN_RX_CRC_CHECK BIT(0) 3964d0a0269Spatrick #define MVPP2_PORT_CTRL1_EN_PERIODIC_FC_XON BIT(1) 3974d0a0269Spatrick #define MVPP2_PORT_CTRL1_MGMII_MODE BIT(2) 3984d0a0269Spatrick #define MVPP2_PORT_CTRL1_PFC_CASCADE_PORT_ENABLE BIT(3) 3994d0a0269Spatrick #define MVPP2_PORT_CTRL1_DIS_EXCESSIVE_COL BIT(4) 4004d0a0269Spatrick #define MVPP2_PORT_CTRL1_GMII_LOOPBACK BIT(5) 4014d0a0269Spatrick #define MVPP2_PORT_CTRL1_PCS_LOOPBACK BIT(6) 4024d0a0269Spatrick #define MVPP2_PORT_CTRL1_FC_SA_ADDR_LO (0xff << 7) 4034d0a0269Spatrick #define MVPP2_PORT_CTRL1_EN_SHORT_PREAMBLE BIT(15) 4041a945772Spatrick 4051a945772Spatrick /* Port Mac Control2 */ 4064d0a0269Spatrick #define MVPP2_PORT_CTRL2_REG 0x0008 4074d0a0269Spatrick #define MVPP2_PORT_CTRL2_SGMII_MODE BIT(0) 4084d0a0269Spatrick #define MVPP2_PORT_CTRL2_FC_MODE (0x3 << 1) 4094d0a0269Spatrick #define MVPP2_PORT_CTRL2_PCS_EN BIT(3) 4104d0a0269Spatrick #define MVPP2_PORT_CTRL2_RGMII_MODE BIT(4) 4114d0a0269Spatrick #define MVPP2_PORT_CTRL2_DIS_PADING BIT(5) 4124d0a0269Spatrick #define MVPP2_PORT_CTRL2_PORTMACRESET BIT(6) 4134d0a0269Spatrick #define MVPP2_PORT_CTRL2_TX_DRAIN BIT(7) 4144d0a0269Spatrick #define MVPP2_PORT_CTRL2_EN_MII_ODD_PRE BIT(8) 4154d0a0269Spatrick #define MVPP2_PORT_CTRL2_CLK_125_BYPS_EN BIT(9) 4164d0a0269Spatrick #define MVPP2_PORT_CTRL2_PRBS_CHECK_EN BIT(10) 4174d0a0269Spatrick #define MVPP2_PORT_CTRL2_PRBS_GEN_EN BIT(11) 4184d0a0269Spatrick #define MVPP2_PORT_CTRL2_SELECT_DATA_TO_TX (0x3 << 12) 4194d0a0269Spatrick #define MVPP2_PORT_CTRL2_EN_COL_ON_BP BIT(14) 4204d0a0269Spatrick #define MVPP2_PORT_CTRL2_EARLY_REJECT_MODE BIT(15) 4211a945772Spatrick 4221a945772Spatrick /* Port Auto-negotiation Configuration */ 4234d0a0269Spatrick #define MVPP2_PORT_AUTO_NEG_CFG_REG 0x000c 4244d0a0269Spatrick #define MVPP2_PORT_AUTO_NEG_CFG_FORCE_LINK_DOWN BIT(0) 4254d0a0269Spatrick #define MVPP2_PORT_AUTO_NEG_CFG_FORCE_LINK_UP BIT(1) 4264d0a0269Spatrick #define MVPP2_PORT_AUTO_NEG_CFG_EN_PCS_AN BIT(2) 4274d0a0269Spatrick #define MVPP2_PORT_AUTO_NEG_CFG_AN_BYPASS_EN BIT(3) 4284d0a0269Spatrick #define MVPP2_PORT_AUTO_NEG_CFG_INBAND_RESTARTAN BIT(4) 4294d0a0269Spatrick #define MVPP2_PORT_AUTO_NEG_CFG_SET_MII_SPEED BIT(5) 4304d0a0269Spatrick #define MVPP2_PORT_AUTO_NEG_CFG_SET_GMII_SPEED BIT(6) 4314d0a0269Spatrick #define MVPP2_PORT_AUTO_NEG_CFG_EN_AN_SPEED BIT(7) 4324d0a0269Spatrick #define MVPP2_PORT_AUTO_NEG_CFG_ADV_PAUSE BIT(9) 4334d0a0269Spatrick #define MVPP2_PORT_AUTO_NEG_CFG_ADV_ASM_PAUSE BIT(10) 4344d0a0269Spatrick #define MVPP2_PORT_AUTO_NEG_CFG_EN_FC_AN BIT(11) 4354d0a0269Spatrick #define MVPP2_PORT_AUTO_NEG_CFG_SET_FULL_DX BIT(12) 4364d0a0269Spatrick #define MVPP2_PORT_AUTO_NEG_CFG_EN_FDX_AN BIT(13) 4374d0a0269Spatrick #define MVPP2_PORT_AUTO_NEG_CFG_PHY_MODE BIT(14) 4384d0a0269Spatrick #define MVPP2_PORT_AUTO_NEG_CFG_CHOOSE_SAMPLE_TX_CONFIG BIT(15) 4391a945772Spatrick 4401a945772Spatrick /* Port Status0 */ 4414d0a0269Spatrick #define MVPP2_PORT_STATUS0_REG 0x0010 4424d0a0269Spatrick #define MVPP2_PORT_STATUS0_LINKUP BIT(0) 4434d0a0269Spatrick #define MVPP2_PORT_STATUS0_GMIISPEED BIT(1) 4444d0a0269Spatrick #define MVPP2_PORT_STATUS0_MIISPEED BIT(2) 4454d0a0269Spatrick #define MVPP2_PORT_STATUS0_FULLDX BIT(3) 4464d0a0269Spatrick #define MVPP2_PORT_STATUS0_RXFCEN BIT(4) 4474d0a0269Spatrick #define MVPP2_PORT_STATUS0_TXFCEN BIT(5) 4484d0a0269Spatrick #define MVPP2_PORT_STATUS0_PORTRXPAUSE BIT(6) 4494d0a0269Spatrick #define MVPP2_PORT_STATUS0_PORTTXPAUSE BIT(7) 4504d0a0269Spatrick #define MVPP2_PORT_STATUS0_PORTIS_DOINGPRESSURE BIT(8) 4514d0a0269Spatrick #define MVPP2_PORT_STATUS0_PORTBUFFULL BIT(9) 4524d0a0269Spatrick #define MVPP2_PORT_STATUS0_SYNCFAIL10MS BIT(10) 4534d0a0269Spatrick #define MVPP2_PORT_STATUS0_ANDONE BIT(11) 4544d0a0269Spatrick #define MVPP2_PORT_STATUS0_INBAND_AUTONEG_BYPASSAC BIT(12) 4554d0a0269Spatrick #define MVPP2_PORT_STATUS0_SERDESPLL_LOCKED BIT(13) 4564d0a0269Spatrick #define MVPP2_PORT_STATUS0_SYNCOK BIT(14) 4574d0a0269Spatrick #define MVPP2_PORT_STATUS0_SQUELCHNOT_DETECTED BIT(15) 4581a945772Spatrick 4591a945772Spatrick /* Port Serial Parameters Configuration */ 4604d0a0269Spatrick #define MVPP2_PORT_SERIAL_PARAM_CFG_REG 0x0014 4614d0a0269Spatrick #define MVPP2_PORT_SERIAL_PARAM_CFG_UNIDIRECTIONAL_ENABLE BIT(0) 4624d0a0269Spatrick #define MVPP2_PORT_SERIAL_PARAM_CFG_RETRANSMIT_COLLISION_DOMAIN BIT(1) 4634d0a0269Spatrick #define MVPP2_PORT_SERIAL_PARAM_CFG_PUMA2_BTS1444_EN BIT(2) 4644d0a0269Spatrick #define MVPP2_PORT_SERIAL_PARAM_CFG_FORWARD_802_3X_FC_EN BIT(3) 4654d0a0269Spatrick #define MVPP2_PORT_SERIAL_PARAM_CFG_BP_EN BIT(4) 4664d0a0269Spatrick #define MVPP2_PORT_SERIAL_PARAM_CFG_RX_NEGEDGE_SAMPLE_EN BIT(5) 4674d0a0269Spatrick #define MVPP2_PORT_SERIAL_PARAM_CFG_COL_DOMAIN_LIMIT (0x3f << 6) 4684d0a0269Spatrick #define MVPP2_PORT_SERIAL_PARAM_CFG_PERIODIC_TYPE_SELECT BIT(12) 4694d0a0269Spatrick #define MVPP2_PORT_SERIAL_PARAM_CFG_PER_PRIORITY_FC_EN BIT(13) 4704d0a0269Spatrick #define MVPP2_PORT_SERIAL_PARAM_CFG_TX_STANDARD_PRBS7 BIT(14) 4714d0a0269Spatrick #define MVPP2_PORT_SERIAL_PARAM_CFG_REVERSE_PRBS_RX BIT(15) 4721a945772Spatrick 4731a945772Spatrick /* Port Fifo Configuration 0 */ 4744d0a0269Spatrick #define MVPP2_PORT_FIFO_CFG_0_REG 0x0018 4754d0a0269Spatrick #define MVPP2_PORT_FIFO_CFG_0_TX_FIFO_HIGH_WM (0xff << 0) 4764d0a0269Spatrick #define MVPP2_PORT_FIFO_CFG_0_TX_FIFO_LOW_WM (0xff << 8) 4771a945772Spatrick 4781a945772Spatrick /* Port Fifo Configuration 1 */ 4794d0a0269Spatrick #define MVPP2_PORT_FIFO_CFG_1_REG 0x001c 4804d0a0269Spatrick #define MVPP2_PORT_FIFO_CFG_1_RX_FIFO_MAX_TH (0x3f << 0) 4814d0a0269Spatrick #define MVPP2_PORT_FIFO_CFG_1_TX_FIFO_MIN_TH (0xff << 6) 4824d0a0269Spatrick #define MVPP2_PORT_FIFO_CFG_1_PORT_EN_FIX_EN BIT(15) 4831a945772Spatrick 4841a945772Spatrick /* Port Serdes Configuration0 */ 4854d0a0269Spatrick #define MVPP2_PORT_SERDES_CFG0_REG 0x0028 4864d0a0269Spatrick #define MVPP2_PORT_SERDES_CFG0_SERDESRESET BIT(0) 4874d0a0269Spatrick #define MVPP2_PORT_SERDES_CFG0_PU_TX BIT(1) 4884d0a0269Spatrick #define MVPP2_PORT_SERDES_CFG0_PU_RX BIT(2) 4894d0a0269Spatrick #define MVPP2_PORT_SERDES_CFG0_PU_PLL BIT(3) 4904d0a0269Spatrick #define MVPP2_PORT_SERDES_CFG0_PU_IVREF BIT(4) 4914d0a0269Spatrick #define MVPP2_PORT_SERDES_CFG0_TESTEN BIT(5) 4924d0a0269Spatrick #define MVPP2_PORT_SERDES_CFG0_DPHER_EN BIT(6) 4934d0a0269Spatrick #define MVPP2_PORT_SERDES_CFG0_RUDI_INVALID_ENABLE BIT(7) 4944d0a0269Spatrick #define MVPP2_PORT_SERDES_CFG0_ACK_OVERRIDE_ENABLE BIT(8) 4954d0a0269Spatrick #define MVPP2_PORT_SERDES_CFG0_CONFIG_WORD_ENABLE BIT(9) 4964d0a0269Spatrick #define MVPP2_PORT_SERDES_CFG0_SYNC_FAIL_INT_ENABLE BIT(10) 4974d0a0269Spatrick #define MVPP2_PORT_SERDES_CFG0_MASTER_MODE_ENABLE BIT(11) 4984d0a0269Spatrick #define MVPP2_PORT_SERDES_CFG0_TERM75_TX BIT(12) 4994d0a0269Spatrick #define MVPP2_PORT_SERDES_CFG0_OUTAMP BIT(13) 5004d0a0269Spatrick #define MVPP2_PORT_SERDES_CFG0_BTS712_FIX_EN BIT(14) 5014d0a0269Spatrick #define MVPP2_PORT_SERDES_CFG0_BTS156_FIX_EN BIT(15) 5021a945772Spatrick 5031a945772Spatrick /* Port Serdes Configuration1 */ 5044d0a0269Spatrick #define MVPP2_PORT_SERDES_CFG1_REG 0x002c 5054d0a0269Spatrick #define MVPP2_PORT_SERDES_CFG1_SMII_RX_10MB_CLK_EDGE_SEL BIT(0) 5064d0a0269Spatrick #define MVPP2_GMAC_PORT_SERDES_CFG1_SMII_TX_10MB_CLK_EDGE_SEL BIT(1) 5074d0a0269Spatrick #define MVPP2_GMAC_PORT_SERDES_CFG1_MEN (0x3 << 2) 5084d0a0269Spatrick #define MVPP2_GMAC_PORT_SERDES_CFG1_VCMS BIT(4) 5094d0a0269Spatrick #define MVPP2_GMAC_PORT_SERDES_CFG1_100FX_PCS_USE_SIGDET BIT(5) 5104d0a0269Spatrick #define MVPP2_GMAC_PORT_SERDES_CFG1_EN_CRS_MASK_TX BIT(6) 5114d0a0269Spatrick #define MVPP2_GMAC_PORT_SERDES_CFG1_100FX_ENABLE BIT(7) 5124d0a0269Spatrick #define MVPP2_GMAC_PORT_SERDES_CFG1_100FX_PCS_PHY_ADDRESS (0x1f << 8) 5134d0a0269Spatrick #define MVPP2_GMAC_PORT_SERDES_CFG1_100FX_PCS_SIGDET_POLARITY BIT(13) 5144d0a0269Spatrick #define MVPP2_GMAC_PORT_SERDES_CFG1_100FX_PCS_INTERRUPT_POLARITY BIT(14) 5154d0a0269Spatrick #define MVPP2_GMAC_PORT_SERDES_CFG1_100FX_PCS_SERDES_POLARITY BIT(15) 5161a945772Spatrick 5171a945772Spatrick /* Port Serdes Configuration2 */ 5184d0a0269Spatrick #define MVPP2_PORT_SERDES_CFG2_REG 0x0030 5194d0a0269Spatrick #define MVPP2_PORT_SERDES_CFG2_AN_ADV_CONFIGURATION (0xffff << 0) 5201a945772Spatrick 5211a945772Spatrick /* Port Serdes Configuration3 */ 5224d0a0269Spatrick #define MVPP2_PORT_SERDES_CFG3_REG 0x0034 5234d0a0269Spatrick #define MVPP2_PORT_SERDES_CFG3_ABILITY_MATCH_STATUS (0xffff << 0) 5241a945772Spatrick 5251a945772Spatrick /* Port Prbs Status */ 5264d0a0269Spatrick #define MVPP2_PORT_PRBS_STATUS_REG 0x0038 5274d0a0269Spatrick #define MVPP2_PORT_PRBS_STATUS_PRBSCHECK_LOCKED BIT(0) 5284d0a0269Spatrick #define MVPP2_PORT_PRBS_STATUS_PRBSCHECKRDY BIT(1) 5291a945772Spatrick 5301a945772Spatrick /* Port Prbs Error Counter */ 5314d0a0269Spatrick #define MVPP2_PORT_PRBS_ERR_CNTR_REG 0x003c 5324d0a0269Spatrick #define MVPP2_PORT_PRBS_ERR_CNTR_PRBSBITERRCNT (0xffff << 0) 5331a945772Spatrick 5341a945772Spatrick /* Port Status1 */ 5354d0a0269Spatrick #define MVPP2_PORT_STATUS1_REG 0x0040 5364d0a0269Spatrick #define MVPP2_PORT_STATUS1_MEDIAACTIVE BIT(0) 5371a945772Spatrick 5381a945772Spatrick /* Port Mib Counters Control */ 5394d0a0269Spatrick #define MVPP2_PORT_MIB_CNTRS_CTRL_REG 0x0044 5404d0a0269Spatrick #define MVPP2_PORT_MIB_CNTRS_CTRL_MIB_COPY_TRIGGER BIT(0) 5414d0a0269Spatrick #define MVPP2_PORT_MIB_CNTRS_CTRL_MIB_CLEAR_ON_READ BIT(1) 5424d0a0269Spatrick #define MVPP2_PORT_MIB_CNTRS_CTRL_RX_HISTOGRAM_EN BIT(2) 5434d0a0269Spatrick #define MVPP2_PORT_MIB_CNTRS_CTRL_TX_HISTOGRAM_EN BIT(3) 5444d0a0269Spatrick #define MVPP2_PORT_MIB_CNTRS_CTRL_MFA1_BTT940_FIX_ENABLE BIT(4) 5454d0a0269Spatrick #define MVPP2_PORT_MIB_CNTRS_CTRL_XCAT_BTS_340_EN BIT(5) 5464d0a0269Spatrick #define MVPP2_PORT_MIB_CNTRS_CTRL_MIB_4_COUNT_HIST BIT(6) 5474d0a0269Spatrick #define MVPP2_PORT_MIB_CNTRS_CTRL_MIB_4_LIMIT_1518_1522 BIT(7) 5481a945772Spatrick 5491a945772Spatrick /* Port Mac Control3 */ 5504d0a0269Spatrick #define MVPP2_PORT_CTRL3_REG 0x0048 5514d0a0269Spatrick #define MVPP2_PORT_CTRL3_BUF_SIZE (0x3f << 0) 5524d0a0269Spatrick #define MVPP2_PORT_CTRL3_IPG_DATA (0x1ff << 6) 5534d0a0269Spatrick #define MVPP2_PORT_CTRL3_LLFC_GLOBAL_FC_ENABLE BIT(15) 5541a945772Spatrick 5551a945772Spatrick /* Port Mac Control4 */ 5564d0a0269Spatrick #define MVPP2_PORT_CTRL4_REG 0x0090 5574d0a0269Spatrick #define MVPP2_PORT_CTRL4_EXT_PIN_GMII_SEL BIT(0) 5584d0a0269Spatrick #define MVPP2_PORT_CTRL4_PREAMBLE_FIX BIT(1) 5594d0a0269Spatrick #define MVPP2_PORT_CTRL4_SQ_DETECT_FIX_EN BIT(2) 5604d0a0269Spatrick #define MVPP2_PORT_CTRL4_FC_EN_RX BIT(3) 5614d0a0269Spatrick #define MVPP2_PORT_CTRL4_FC_EN_TX BIT(4) 5624d0a0269Spatrick #define MVPP2_PORT_CTRL4_DP_CLK_SEL BIT(5) 5634d0a0269Spatrick #define MVPP2_PORT_CTRL4_SYNC_BYPASS BIT(6) 5644d0a0269Spatrick #define MVPP2_PORT_CTRL4_QSGMII_BYPASS_ACTIVE BIT(7) 5654d0a0269Spatrick #define MVPP2_PORT_CTRL4_COUNT_EXTERNAL_FC_EN BIT(8) 5664d0a0269Spatrick #define MVPP2_PORT_CTRL4_MARVELL_HEADER_EN BIT(9) 5674d0a0269Spatrick #define MVPP2_PORT_CTRL4_LEDS_NUMBER BIT(10) 5681a945772Spatrick 569b3a1ec52Spatrick /* SMI registers */ 570b3a1ec52Spatrick #define MVPP22_SMI_MISC_CFG_REG 0x1204 571b3a1ec52Spatrick #define MVPP22_SMI_POLLING_EN BIT(10) 572b3a1ec52Spatrick 5734d0a0269Spatrick #define MVPP2_CAUSE_TXQ_SENT_DESC_ALL_MASK 0xff 5741a945772Spatrick 575ad54c436Spatrick /* MPCS registers */ 576ad54c436Spatrick #define MVPP22_MPCS40G_COMMON_CONTROL 0x14 577ad54c436Spatrick #define MVPP22_MPCS_FORWARD_ERROR_CORRECTION_MASK BIT(10) 578ad54c436Spatrick #define MVPP22_MPCS_CLOCK_RESET 0x14c 5794d0a0269Spatrick #define MVPP22_MPCS_TX_SD_CLK_RESET BIT(0) 5804d0a0269Spatrick #define MVPP22_MPCS_RX_SD_CLK_RESET BIT(1) 5814d0a0269Spatrick #define MVPP22_MPCS_MAC_CLK_RESET BIT(2) 5824d0a0269Spatrick #define MVPP22_MPCS_CLK_DIVISION_RATIO_MASK (0x7 << 4) 5834d0a0269Spatrick #define MVPP22_MPCS_CLK_DIVISION_RATIO_DEFAULT (0x1 << 4) 5844d0a0269Spatrick #define MVPP22_MPCS_CLK_DIV_PHASE_SET BIT(11) 585ad54c436Spatrick 586ad54c436Spatrick /* XPCS registers */ 5871a945772Spatrick #define MVPP22_XPCS_GLOBAL_CFG_0_REG 0x0 5881a945772Spatrick #define MVPP22_XPCS_PCSRESET BIT(0) 5891a945772Spatrick #define MVPP22_XPCS_PCSMODE_OFFS 3 5901a945772Spatrick #define MVPP22_XPCS_PCSMODE_MASK (0x3 << MVPP22_XPCS_PCSMODE_OFFS) 5911a945772Spatrick #define MVPP22_XPCS_LANEACTIVE_OFFS 5 5921a945772Spatrick #define MVPP22_XPCS_LANEACTIVE_MASK (0x3 << MVPP22_XPCS_LANEACTIVE_OFFS) 5931a945772Spatrick 59409e5d825Spatrick /* System controller registers. Accessed through a regmap. */ 59509e5d825Spatrick #define GENCONF_SOFT_RESET1 0x1108 59609e5d825Spatrick #define GENCONF_SOFT_RESET1_GOP BIT(6) 59709e5d825Spatrick #define GENCONF_PORT_CTRL0 0x1110 59809e5d825Spatrick #define GENCONF_PORT_CTRL0_BUS_WIDTH_SELECT BIT(1) 59909e5d825Spatrick #define GENCONF_PORT_CTRL0_RX_DATA_SAMPLE BIT(29) 60009e5d825Spatrick #define GENCONF_PORT_CTRL0_CLK_DIV_PHASE_CLR BIT(31) 60109e5d825Spatrick #define GENCONF_PORT_CTRL1 0x1114 60209e5d825Spatrick #define GENCONF_PORT_CTRL1_EN(p) BIT(p) 60309e5d825Spatrick #define GENCONF_PORT_CTRL1_RESET(p) (BIT(p) << 28) 60409e5d825Spatrick #define GENCONF_CTRL0 0x1120 60509e5d825Spatrick #define GENCONF_CTRL0_PORT0_RGMII BIT(0) 60609e5d825Spatrick #define GENCONF_CTRL0_PORT1_RGMII_MII BIT(1) 60709e5d825Spatrick #define GENCONF_CTRL0_PORT1_RGMII BIT(2) 60809e5d825Spatrick 6091a945772Spatrick /* Various constants */ 6101a945772Spatrick 6111a945772Spatrick /* Coalescing */ 6121a945772Spatrick #define MVPP2_TXDONE_COAL_PKTS_THRESH 64 6131a945772Spatrick #define MVPP2_TXDONE_HRTIMER_PERIOD_NS 1000000UL 6141a945772Spatrick #define MVPP2_TXDONE_COAL_USEC 1000 6151a945772Spatrick #define MVPP2_RX_COAL_PKTS 32 6161a945772Spatrick #define MVPP2_RX_COAL_USEC 64 6171a945772Spatrick 6181a945772Spatrick /* 6191a945772Spatrick * The two bytes Marvell header. Either contains a special value used 6201a945772Spatrick * by Marvell switches when a specific hardware mode is enabled (not 6211a945772Spatrick * supported by this driver) or is filled automatically by zeroes on 6221a945772Spatrick * the RX side. Those two bytes being at the front of the Ethernet 6231a945772Spatrick * header, they allow to have the IP header aligned on a 4 bytes 6241a945772Spatrick * boundary automatically: the hardware skips those two bytes on its 6251a945772Spatrick * own. 6261a945772Spatrick */ 6271a945772Spatrick #define MVPP2_MH_SIZE 2 6281a945772Spatrick #define MVPP2_ETH_TYPE_LEN 2 6291a945772Spatrick #define MVPP2_PPPOE_HDR_SIZE 8 6301a945772Spatrick #define MVPP2_VLAN_TAG_LEN 4 6311a945772Spatrick 6321a945772Spatrick /* Lbtd 802.3 type */ 6331a945772Spatrick #define MVPP2_IP_LBDT_TYPE 0xfffa 6341a945772Spatrick 6351a945772Spatrick #define MVPP2_CPU_D_CACHE_LINE_SIZE 32 6361a945772Spatrick #define MVPP2_TX_CSUM_MAX_SIZE 9800 6371a945772Spatrick 6381a945772Spatrick /* Timeout constants */ 6391a945772Spatrick #define MVPP2_TX_DISABLE_TIMEOUT_MSEC 1000 6401a945772Spatrick #define MVPP2_TX_PENDING_TIMEOUT_MSEC 1000 6411a945772Spatrick 6421a945772Spatrick #define MVPP2_TX_MTU_MAX 0x7ffff 6431a945772Spatrick 6441a945772Spatrick /* Maximum number of T-CONTs of PON port */ 6451a945772Spatrick #define MVPP2_MAX_TCONT 16 6461a945772Spatrick 6471a945772Spatrick /* Maximum number of supported ports */ 6481a945772Spatrick #define MVPP2_MAX_PORTS 4 6491a945772Spatrick 6501a945772Spatrick /* Maximum number of TXQs used by single port */ 6511a945772Spatrick #define MVPP2_MAX_TXQ 8 6521a945772Spatrick 6531a945772Spatrick /* Maximum number of RXQs used by single port */ 6541a945772Spatrick #define MVPP2_MAX_RXQ 8 6551a945772Spatrick 656*4b1a56afSjsg /* Default number of RXQs in use */ 6571a945772Spatrick #define MVPP2_DEFAULT_RXQ 4 6581a945772Spatrick 6591a945772Spatrick /* Total number of RXQs available to all ports */ 6601a945772Spatrick #define MVPP2_RXQ_TOTAL_NUM (MVPP2_MAX_PORTS * MVPP2_MAX_RXQ) 6611a945772Spatrick 6621a945772Spatrick /* Max number of Rx descriptors */ 6631a945772Spatrick #define MVPP2_MAX_RXD 64 6641a945772Spatrick 6651a945772Spatrick /* Max number of Tx descriptors */ 6661a945772Spatrick #define MVPP2_MAX_TXD 32 6671a945772Spatrick 6681a945772Spatrick /* Amount of Tx descriptors that can be reserved at once by CPU */ 6691a945772Spatrick #define MVPP2_CPU_DESC_CHUNK 64 6701a945772Spatrick 6711a945772Spatrick /* Max number of Tx descriptors in each aggregated queue */ 6721a945772Spatrick #define MVPP2_AGGR_TXQ_SIZE 256 6731a945772Spatrick 6741a945772Spatrick /* Descriptor aligned size */ 6751a945772Spatrick #define MVPP2_DESC_ALIGNED_SIZE 32 6761a945772Spatrick 6771a945772Spatrick /* Descriptor alignment mask */ 6781a945772Spatrick #define MVPP2_TX_DESC_ALIGN (MVPP2_DESC_ALIGNED_SIZE - 1) 6791a945772Spatrick 6801a945772Spatrick /* RX FIFO constants */ 6811a945772Spatrick #define MVPP2_RX_FIFO_PORT_DATA_SIZE_32KB 0x8000 6821a945772Spatrick #define MVPP2_RX_FIFO_PORT_DATA_SIZE_8KB 0x2000 6831a945772Spatrick #define MVPP2_RX_FIFO_PORT_DATA_SIZE_4KB 0x1000 6841a945772Spatrick #define MVPP2_RX_FIFO_PORT_ATTR_SIZE_32KB 0x200 6851a945772Spatrick #define MVPP2_RX_FIFO_PORT_ATTR_SIZE_8KB 0x80 6861a945772Spatrick #define MVPP2_RX_FIFO_PORT_ATTR_SIZE_4KB 0x40 6871a945772Spatrick #define MVPP2_RX_FIFO_PORT_MIN_PKT 0x80 6881a945772Spatrick 6891a945772Spatrick /* TX FIFO constants */ 6901a945772Spatrick #define MVPP22_TX_FIFO_DATA_SIZE_10KB 0xa 6911a945772Spatrick #define MVPP22_TX_FIFO_DATA_SIZE_3KB 0x3 6921a945772Spatrick #define MVPP2_TX_FIFO_THRESHOLD_MIN 256 6931a945772Spatrick #define MVPP2_TX_FIFO_THRESHOLD_10KB \ 6941a945772Spatrick (MVPP22_TX_FIFO_DATA_SIZE_10KB * 1024 - MVPP2_TX_FIFO_THRESHOLD_MIN) 6951a945772Spatrick #define MVPP2_TX_FIFO_THRESHOLD_3KB \ 6961a945772Spatrick (MVPP22_TX_FIFO_DATA_SIZE_3KB * 1024 - MVPP2_TX_FIFO_THRESHOLD_MIN) 6971a945772Spatrick 6981a945772Spatrick #define MVPP2_BIT_TO_BYTE(bit) ((bit) / 8) 6991a945772Spatrick 7001a945772Spatrick /* IPv6 max L3 address size */ 7011a945772Spatrick #define MVPP2_MAX_L3_ADDR_SIZE 16 7021a945772Spatrick 7031a945772Spatrick /* Port flags */ 7041a945772Spatrick #define MVPP2_F_LOOPBACK BIT(0) 7051a945772Spatrick 7061a945772Spatrick /* SD1 Control1 */ 7074d0a0269Spatrick #define SD1_CONTROL_1_REG 0x148 7084d0a0269Spatrick #define SD1_CONTROL_RXAUI1_L45_EN_MASK BIT(26) 7094d0a0269Spatrick #define SD1_CONTROL_RXAUI0_L23_EN_MASK BIT(27) 7104d0a0269Spatrick #define SD1_CONTROL_XAUI_EN_MASK BIT(28) 7111a945772Spatrick 7121a945772Spatrick /* System Soft Reset 1 */ 7134d0a0269Spatrick #define MV_GOP_SOFT_RESET_1_REG 0x108 7144d0a0269Spatrick #define NETC_GOP_SOFT_RESET BIT(6) 7151a945772Spatrick 7161a945772Spatrick /* Ports Control 0 */ 7174d0a0269Spatrick #define MV_NETCOMP_PORTS_CONTROL_0 0x110 7184d0a0269Spatrick #define NETC_GOP_ENABLE_MASK BIT(0) 7194d0a0269Spatrick #define NETC_BUS_WIDTH_SELECT_MASK BIT(1) 7204d0a0269Spatrick #define NETC_GIG_RX_DATA_SAMPLE_MASK BIT(29) 7214d0a0269Spatrick #define NETC_CLK_DIV_PHASE_MASK BIT(31) 7221a945772Spatrick 7231a945772Spatrick /* Ports Control 1 */ 7244d0a0269Spatrick #define MV_NETCOMP_PORTS_CONTROL_1 0x114 7254d0a0269Spatrick #define NETC_PORTS_ACTIVE_MASK(port) (1 << (port)) 7264d0a0269Spatrick #define NETC_PORT_GIG_RF_RESET_MASK(port) (1 << (28 + (port))) 7271a945772Spatrick 7281a945772Spatrick /* Ports Status */ 7294d0a0269Spatrick #define MV_NETCOMP_PORTS_STATUS 0x11C 7304d0a0269Spatrick #define NETC_PORTS_STATUS_MASK(port) (1 << (port)) 7311a945772Spatrick 7321a945772Spatrick /* Networking Complex Control 0 */ 7334d0a0269Spatrick #define MV_NETCOMP_CONTROL_0 0x120 7344d0a0269Spatrick #define NETC_GBE_PORT0_SGMII_MODE_MASK BIT(0) 7354d0a0269Spatrick #define NETC_GBE_PORT1_SGMII_MODE_MASK BIT(1) 7364d0a0269Spatrick #define NETC_GBE_PORT1_MII_MODE_MASK BIT(2) 7371a945772Spatrick 7381a945772Spatrick /* Port Mac Control0 */ 7394d0a0269Spatrick #define MV_XLG_PORT_MAC_CTRL0_REG 0x0000 7404d0a0269Spatrick #define MV_XLG_MAC_CTRL0_PORTEN BIT(0) 7414d0a0269Spatrick #define MV_XLG_MAC_CTRL0_MACRESETN BIT(1) 7424d0a0269Spatrick #define MV_XLG_MAC_CTRL0_FORCELINKDOWN BIT(2) 7434d0a0269Spatrick #define MV_XLG_MAC_CTRL0_FORCELINKPASS BIT(3) 7444d0a0269Spatrick #define MV_XLG_MAC_CTRL0_TXIPGMODE (0x3 << 5) 7454d0a0269Spatrick #define MV_XLG_MAC_CTRL0_RXFCEN BIT(7) 7464d0a0269Spatrick #define MV_XLG_MAC_CTRL0_TXFCEN BIT(8) 7474d0a0269Spatrick #define MV_XLG_MAC_CTRL0_RXCRCCHECKEN BIT(9) 7484d0a0269Spatrick #define MV_XLG_MAC_CTRL0_PERIODICXONEN BIT(10) 7494d0a0269Spatrick #define MV_XLG_MAC_CTRL0_RXCRCSTRIPEN BIT(11) 7504d0a0269Spatrick #define MV_XLG_MAC_CTRL0_PADDINGDIS BIT(13) 7514d0a0269Spatrick #define MV_XLG_MAC_CTRL0_MIBCNTDIS BIT(14) 7524d0a0269Spatrick #define MV_XLG_MAC_CTRL0_PFC_CASCADE_PORT_ENABLE BIT(15) 7531a945772Spatrick 7541a945772Spatrick /* Port Mac Control1 */ 7554d0a0269Spatrick #define MV_XLG_PORT_MAC_CTRL1_REG 0x0004 7561a945772Spatrick #define MV_XLG_MAC_CTRL1_FRAMESIZELIMIT_OFFS 0 7574d0a0269Spatrick #define MV_XLG_MAC_CTRL1_FRAMESIZELIMIT_MASK 0x1fff 7581a945772Spatrick #define MV_XLG_MAC_CTRL1_FRAMESIZELIMIT_DEFAULT 0x1400 7594d0a0269Spatrick #define MV_XLG_MAC_CTRL1_MACLOOPBACKEN BIT(13) 7604d0a0269Spatrick #define MV_XLG_MAC_CTRL1_XGMIILOOPBACKEN BIT(14) 7614d0a0269Spatrick #define MV_XLG_MAC_CTRL1_LOOPBACKCLOCKSELECT BIT(15) 7621a945772Spatrick 7631a945772Spatrick /* Port Mac Control2 */ 7644d0a0269Spatrick #define MV_XLG_PORT_MAC_CTRL2_REG 0x0008 7654d0a0269Spatrick #define MV_XLG_MAC_CTRL2_SALOW_7_0 (0xff << 0) 7664d0a0269Spatrick #define MV_XLG_MAC_CTRL2_UNIDIRECTIONALEN BIT(8) 7674d0a0269Spatrick #define MV_XLG_MAC_CTRL2_FIXEDIPGBASE BIT(9) 7684d0a0269Spatrick #define MV_XLG_MAC_CTRL2_PERIODICXOFFEN BIT(10) 7694d0a0269Spatrick #define MV_XLG_MAC_CTRL2_SIMPLEXMODEEN BIT(13) 7704d0a0269Spatrick #define MV_XLG_MAC_CTRL2_FC_MODE (0x3 << 14) 7711a945772Spatrick 7721a945772Spatrick /* Port Status */ 7734d0a0269Spatrick #define MV_XLG_MAC_PORT_STATUS_REG 0x000c 7744d0a0269Spatrick #define MV_XLG_MAC_PORT_STATUS_LINKSTATUS BIT(0) 7754d0a0269Spatrick #define MV_XLG_MAC_PORT_STATUS_REMOTEFAULT BIT(1) 7764d0a0269Spatrick #define MV_XLG_MAC_PORT_STATUS_LOCALFAULT BIT(2) 7774d0a0269Spatrick #define MV_XLG_MAC_PORT_STATUS_LINKSTATUSCLEAN BIT(3) 7784d0a0269Spatrick #define MV_XLG_MAC_PORT_STATUS_LOCALFAULTCLEAN BIT(4) 7794d0a0269Spatrick #define MV_XLG_MAC_PORT_STATUS_REMOTEFAULTCLEAN BIT(5) 7804d0a0269Spatrick #define MV_XLG_MAC_PORT_STATUS_PORTRXPAUSE BIT(6) 7814d0a0269Spatrick #define MV_XLG_MAC_PORT_STATUS_PORTTXPAUSE BIT(7) 7824d0a0269Spatrick #define MV_XLG_MAC_PORT_STATUS_PFC_SYNC_FIFO_FULL BIT(8) 7831a945772Spatrick 7841a945772Spatrick /* Port Fifos Thresholds Configuration */ 7854d0a0269Spatrick #define MV_XLG_PORT_FIFOS_THRS_CFG_REG 0x0010 7864d0a0269Spatrick #define MV_XLG_MAC_PORT_FIFOS_THRS_CFG_RXFULLTHR (0x1f << 0) 7874d0a0269Spatrick #define MV_XLG_MAC_PORT_FIFOS_THRS_CFG_TXFIFOSIZE (0x3f << 5) 7884d0a0269Spatrick #define MV_XLG_MAC_PORT_FIFOS_THRS_CFG_TXRDTHR (0x1f << 11) 7891a945772Spatrick 7901a945772Spatrick /* Port Mac Control3 */ 7914d0a0269Spatrick #define MV_XLG_PORT_MAC_CTRL3_REG 0x001c 7924d0a0269Spatrick #define MV_XLG_MAC_CTRL3_BUFSIZE (0x3f << 0) 7934d0a0269Spatrick #define MV_XLG_MAC_CTRL3_XTRAIPG (0x7f << 6) 7944d0a0269Spatrick #define MV_XLG_MAC_CTRL3_MACMODESELECT_MASK (0x7 << 13) 7954d0a0269Spatrick #define MV_XLG_MAC_CTRL3_MACMODESELECT_GMAC (0x0 << 13) 7964d0a0269Spatrick #define MV_XLG_MAC_CTRL3_MACMODESELECT_10G (0x1 << 13) 7971a945772Spatrick 7981a945772Spatrick /* Port Per Prio Flow Control Status */ 7994d0a0269Spatrick #define MV_XLG_PORT_PER_PRIO_FLOW_CTRL_STATUS_REG 0x0020 8004d0a0269Spatrick #define MV_XLG_MAC_PORT_PER_PRIO_FLOW_CTRL_STATUS_PRIONSTATUS BIT(0) 8011a945772Spatrick 8021a945772Spatrick /* Debug Bus Status */ 8034d0a0269Spatrick #define MV_XLG_DEBUG_BUS_STATUS_REG 0x0024 8044d0a0269Spatrick #define MV_XLG_MAC_DEBUG_BUS_STATUS_DEBUG_BUS (0xffff << 0) 8051a945772Spatrick 8061a945772Spatrick /* Port Metal Fix */ 8074d0a0269Spatrick #define MV_XLG_PORT_METAL_FIX_REG 0x002c 8084d0a0269Spatrick #define MV_XLG_MAC_PORT_METAL_FIX_EN_EOP_IN_FIFO BIT(0) 8094d0a0269Spatrick #define MV_XLG_MAC_PORT_METAL_FIX_EN_LTF_FIX BIT(1) 8104d0a0269Spatrick #define MV_XLG_MAC_PORT_METAL_FIX_EN_HOLD_FIX BIT(2) 8114d0a0269Spatrick #define MV_XLG_MAC_PORT_METAL_FIX_EN_LED_FIX BIT(3) 8124d0a0269Spatrick #define MV_XLG_MAC_PORT_METAL_FIX_EN_PAD_PROTECT BIT(4) 8134d0a0269Spatrick #define MV_XLG_MAC_PORT_METAL_FIX_EN_NX_BTS44 BIT(5) 8144d0a0269Spatrick #define MV_XLG_MAC_PORT_METAL_FIX_EN_NX_BTS42 BIT(6) 8154d0a0269Spatrick #define MV_XLG_MAC_PORT_METAL_FIX_EN_FLUSH_FIX BIT(7) 8164d0a0269Spatrick #define MV_XLG_MAC_PORT_METAL_FIX_EN_PORT_EN_FIX BIT(8) 8174d0a0269Spatrick #define MV_XLG_MAC_PORT_METAL_FIX_SPARE_DEF0_BITS (0xf << 9) 8184d0a0269Spatrick #define MV_XLG_MAC_PORT_METAL_FIX_SPARE_DEF1_BITS (0x7 << 13) 8191a945772Spatrick 8201a945772Spatrick /* Xg Mib Counters Control */ 8214d0a0269Spatrick #define MV_XLG_MIB_CNTRS_CTRL_REG 0x0030 8224d0a0269Spatrick #define MV_XLG_MAC_XG_MIB_CNTRS_CTRL_XGCAPTURETRIGGER BIT(0) 8234d0a0269Spatrick #define MV_XLG_MAC_XG_MIB_CNTRS_CTRL_XGDONTCLEARAFTERREAD BIT(1) 8244d0a0269Spatrick #define MV_XLG_MAC_XG_MIB_CNTRS_CTRL_XGRXHISTOGRAMEN BIT(2) 8254d0a0269Spatrick #define MV_XLG_MAC_XG_MIB_CNTRS_CTRL_XGTXHISTOGRAMEN BIT(3) 8264d0a0269Spatrick #define MV_XLG_MAC_XG_MIB_CNTRS_CTRL_MFA1_BTT940_FIX_ENABLE BIT(4) 8274d0a0269Spatrick #define MV_XLG_MAC_XG_MIB_CNTRS_CTRL_LEDS_NUMBER (0x3f << 5) 8284d0a0269Spatrick #define MV_XLG_MAC_XG_MIB_CNTRS_CTRL_MIB_4_COUNT_HIST BIT(11) 8294d0a0269Spatrick #define MV_XLG_MAC_XG_MIB_CNTRS_CTRL_MIB_4_LIMIT_1518_1522 BIT(12) 8301a945772Spatrick 8311a945772Spatrick /* Cn/ccfc Timer%i */ 8321a945772Spatrick #define MV_XLG_CNCCFC_TIMERI_REG(t) ((0x0038 + (t) * 4)) 8334d0a0269Spatrick #define MV_XLG_MAC_CNCCFC_TIMERI_PORTSPEEDTIMER (0xffff << 0) 8341a945772Spatrick 8351a945772Spatrick /* Ppfc Control */ 8364d0a0269Spatrick #define MV_XLG_MAC_PPFC_CTRL_REG 0x0060 8374d0a0269Spatrick #define MV_XLG_MAC_PPFC_CTRL_GLOBAL_PAUSE_ENI BIT(0) 8384d0a0269Spatrick #define MV_XLG_MAC_PPFC_CTRL_DIP_BTS_677_EN BIT(9) 8391a945772Spatrick 8401a945772Spatrick /* Fc Dsa Tag 0 */ 8414d0a0269Spatrick #define MV_XLG_MAC_FC_DSA_TAG_0_REG 0x0068 8424d0a0269Spatrick #define MV_XLG_MAC_FC_DSA_TAG_0_DSATAGREG0 (0xffff << 0) 8431a945772Spatrick 8441a945772Spatrick /* Fc Dsa Tag 1 */ 8454d0a0269Spatrick #define MV_XLG_MAC_FC_DSA_TAG_1_REG 0x006c 8464d0a0269Spatrick #define MV_XLG_MAC_FC_DSA_TAG_1_DSATAGREG1 (0xffff << 0) 8471a945772Spatrick 8481a945772Spatrick /* Fc Dsa Tag 2 */ 8494d0a0269Spatrick #define MV_XLG_MAC_FC_DSA_TAG_2_REG 0x0070 8504d0a0269Spatrick #define MV_XLG_MAC_FC_DSA_TAG_2_DSATAGREG2 (0xffff << 0) 8511a945772Spatrick 8521a945772Spatrick /* Fc Dsa Tag 3 */ 8534d0a0269Spatrick #define MV_XLG_MAC_FC_DSA_TAG_3_REG 0x0074 8544d0a0269Spatrick #define MV_XLG_MAC_FC_DSA_TAG_3_DSATAGREG3 (0xffff << 0) 8551a945772Spatrick 8561a945772Spatrick /* Dic Budget Compensation */ 8574d0a0269Spatrick #define MV_XLG_MAC_DIC_BUDGET_COMPENSATION_REG 0x0080 8584d0a0269Spatrick #define MV_XLG_MAC_DIC_BUDGET_COMPENSATION_DIC_COUNTER_TO_ADD_8BYTES (0xffff << 0) 8591a945772Spatrick 8601a945772Spatrick /* Port Mac Control4 */ 8614d0a0269Spatrick #define MV_XLG_PORT_MAC_CTRL4_REG 0x0084 8624d0a0269Spatrick #define MV_XLG_MAC_CTRL4_LLFC_GLOBAL_FC_ENABLE BIT(0) 8634d0a0269Spatrick #define MV_XLG_MAC_CTRL4_LED_STREAM_SELECT BIT(1) 8644d0a0269Spatrick #define MV_XLG_MAC_CTRL4_DEBUG_BUS_SELECT BIT(2) 8654d0a0269Spatrick #define MV_XLG_MAC_CTRL4_MASK_PCS_RESET BIT(3) 8664d0a0269Spatrick #define MV_XLG_MAC_CTRL4_ENABLE_SHORT_PREAMBLE_FOR_XLG BIT(4) 8674d0a0269Spatrick #define MV_XLG_MAC_CTRL4_FORWARD_802_3X_FC_EN BIT(5) 8684d0a0269Spatrick #define MV_XLG_MAC_CTRL4_FORWARD_PFC_EN BIT(6) 8694d0a0269Spatrick #define MV_XLG_MAC_CTRL4_FORWARD_UNKNOWN_FC_EN BIT(7) 8704d0a0269Spatrick #define MV_XLG_MAC_CTRL4_USE_XPCS BIT(8) 8714d0a0269Spatrick #define MV_XLG_MAC_CTRL4_DMA_INTERFACE_IS_64_BIT BIT(9) 8724d0a0269Spatrick #define MV_XLG_MAC_CTRL4_TX_DMA_INTERFACE_BITS (0x3 << 10) 8734d0a0269Spatrick #define MV_XLG_MAC_CTRL4_MAC_MODE_DMA_1G BIT(12) 8744d0a0269Spatrick #define MV_XLG_MAC_CTRL4_EN_IDLE_CHECK_FOR_LINK BIT(14) 8751a945772Spatrick 8761a945772Spatrick /* Port Mac Control5 */ 8774d0a0269Spatrick #define MV_XLG_PORT_MAC_CTRL5_REG 0x0088 8784d0a0269Spatrick #define MV_XLG_MAC_CTRL5_TXIPGLENGTH (0xf << 0) 8794d0a0269Spatrick #define MV_XLG_MAC_CTRL5_PREAMBLELENGTHTX (0x7 << 4) 8804d0a0269Spatrick #define MV_XLG_MAC_CTRL5_PREAMBLELENGTHRX (0x7 << 7) 8814d0a0269Spatrick #define MV_XLG_MAC_CTRL5_TXNUMCRCBYTES (0x7 << 10) 8824d0a0269Spatrick #define MV_XLG_MAC_CTRL5_RXNUMCRCBYTES (0x7 << 13) 8831a945772Spatrick 8841a945772Spatrick /* External Control */ 8854d0a0269Spatrick #define MV_XLG_MAC_EXT_CTRL_REG 0x0090 8864d0a0269Spatrick #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL0 BIT(0) 8874d0a0269Spatrick #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL1 BIT(1) 8884d0a0269Spatrick #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL2 BIT(2) 8894d0a0269Spatrick #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL3 BIT(3) 8904d0a0269Spatrick #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL4 BIT(4) 8914d0a0269Spatrick #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL5 BIT(5) 8924d0a0269Spatrick #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL6 BIT(6) 8934d0a0269Spatrick #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL7 BIT(7) 8944d0a0269Spatrick #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL8 BIT(8) 8954d0a0269Spatrick #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL9 BIT(9) 8964d0a0269Spatrick #define MV_XLG_MAC_EXT_CTRL_EXT_CTRL_10 BIT(10) 8974d0a0269Spatrick #define MV_XLG_MAC_EXT_CTRL_EXT_CTRL_11 BIT(11) 8984d0a0269Spatrick #define MV_XLG_MAC_EXT_CTRL_EXT_CTRL_12 BIT(12) 8994d0a0269Spatrick #define MV_XLG_MAC_EXT_CTRL_EXT_CTRL_13 BIT(13) 9004d0a0269Spatrick #define MV_XLG_MAC_EXT_CTRL_EXT_CTRL_14 BIT(14) 9014d0a0269Spatrick #define MV_XLG_MAC_EXT_CTRL_EXT_CTRL_15 BIT(15) 9021a945772Spatrick 9031a945772Spatrick /* Macro Control */ 9044d0a0269Spatrick #define MV_XLG_MAC_MACRO_CTRL_REG 0x0094 9054d0a0269Spatrick #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_0 BIT(0) 9064d0a0269Spatrick #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_1 BIT(1) 9074d0a0269Spatrick #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_2 BIT(2) 9084d0a0269Spatrick #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_3 BIT(3) 9094d0a0269Spatrick #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_4 BIT(4) 9104d0a0269Spatrick #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_5 BIT(5) 9114d0a0269Spatrick #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_6 BIT(6) 9124d0a0269Spatrick #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_7 BIT(7) 9134d0a0269Spatrick #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_8 BIT(8) 9144d0a0269Spatrick #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_9 BIT(9) 9154d0a0269Spatrick #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_10 BIT(10) 9164d0a0269Spatrick #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_11 BIT(11) 9174d0a0269Spatrick #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_12 BIT(12) 9184d0a0269Spatrick #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_13 BIT(13) 9194d0a0269Spatrick #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_14 BIT(14) 9204d0a0269Spatrick #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_15 BIT(15) 9211a945772Spatrick 9224d0a0269Spatrick #define MV_XLG_MAC_DIC_PPM_IPG_REDUCE_REG 0x0094 9231a945772Spatrick 9241a945772Spatrick /* Port Interrupt Cause */ 9254d0a0269Spatrick #define MV_XLG_INTERRUPT_CAUSE_REG 0x0014 9261a945772Spatrick /* Port Interrupt Mask */ 9274d0a0269Spatrick #define MV_XLG_INTERRUPT_MASK_REG 0x0018 9284d0a0269Spatrick #define MV_XLG_SUMMARY_INTERRUPT_MASK BIT(0) 9294d0a0269Spatrick #define MV_XLG_INTERRUPT_LINK_CHANGE BIT(1) 9301a945772Spatrick 9311a945772Spatrick /* Port Interrupt Summary Cause */ 9324d0a0269Spatrick #define MV_XLG_EXTERNAL_INTERRUPT_CAUSE_REG 0x0058 9331a945772Spatrick /* Port Interrupt Summary Mask */ 9344d0a0269Spatrick #define MV_XLG_EXTERNAL_INTERRUPT_MASK_REG 0x005C 9354d0a0269Spatrick #define MV_XLG_EXTERNAL_INTERRUPT_LINK_CHANGE_XLG BIT(1) 9364d0a0269Spatrick #define MV_XLG_EXTERNAL_INTERRUPT_LINK_CHANGE_GIG BIT(2) 9371a945772Spatrick 9381a945772Spatrick /*All PPV22 Addresses are 40-bit */ 9391a945772Spatrick #define MVPP22_ADDR_HIGH_SIZE 8 9401a945772Spatrick #define MVPP22_ADDR_HIGH_MASK ((1 << MVPP22_ADDR_HIGH_SIZE) - 1) 9411a945772Spatrick #define MVPP22_ADDR_MASK (0xFFFFFFFFFF) 9421a945772Spatrick 9431a945772Spatrick /* PHY address register */ 9441a945772Spatrick #define MV_SMI_PHY_ADDRESS_REG(n) (0xC + 0x4 * (n)) 9451a945772Spatrick #define MV_SMI_PHY_ADDRESS_PHYAD_OFFS 0 946ad54c436Spatrick #define MV_SMI_PHY_ADDRESS_PHYAD_MASK (0x1F << MV_SMI_PHY_ADDRESS_PHYAD_OFFS) 9471a945772Spatrick 9481a945772Spatrick /* Marvell tag types */ 949017da651Spatrick enum mvpp2_tag_type { 9501a945772Spatrick MVPP2_TAG_TYPE_NONE = 0, 9511a945772Spatrick MVPP2_TAG_TYPE_MH = 1, 9521a945772Spatrick MVPP2_TAG_TYPE_DSA = 2, 9531a945772Spatrick MVPP2_TAG_TYPE_EDSA = 3, 9541a945772Spatrick MVPP2_TAG_TYPE_VLAN = 4, 9551a945772Spatrick MVPP2_TAG_TYPE_LAST = 5 9561a945772Spatrick }; 9571a945772Spatrick 9581adf4f54Spatrick /* L2 cast enum */ 9591adf4f54Spatrick enum mvpp2_prs_l2_cast { 9601adf4f54Spatrick MVPP2_PRS_L2_UNI_CAST, 9611adf4f54Spatrick MVPP2_PRS_L2_MULTI_CAST, 9621adf4f54Spatrick }; 9631adf4f54Spatrick 964017da651Spatrick /* L3 cast enum */ 965017da651Spatrick enum mvpp2_prs_l3_cast { 966017da651Spatrick MVPP2_PRS_L3_UNI_CAST, 967017da651Spatrick MVPP2_PRS_L3_MULTI_CAST, 968017da651Spatrick MVPP2_PRS_L3_BROAD_CAST 969017da651Spatrick }; 970017da651Spatrick 9711a945772Spatrick /* Parser constants */ 9721a945772Spatrick #define MVPP2_PRS_TCAM_SRAM_SIZE 256 9731a945772Spatrick #define MVPP2_PRS_TCAM_WORDS 6 9741a945772Spatrick #define MVPP2_PRS_SRAM_WORDS 4 9751a945772Spatrick #define MVPP2_PRS_FLOW_ID_SIZE 64 9761a945772Spatrick #define MVPP2_PRS_FLOW_ID_MASK 0x3f 9771a945772Spatrick #define MVPP2_PRS_TCAM_ENTRY_INVALID 1 9781a945772Spatrick #define MVPP2_PRS_TCAM_DSA_TAGGED_BIT BIT(5) 9791a945772Spatrick #define MVPP2_PRS_IPV4_HEAD 0x40 9801a945772Spatrick #define MVPP2_PRS_IPV4_HEAD_MASK 0xf0 9811a945772Spatrick #define MVPP2_PRS_IPV4_MC 0xe0 9821a945772Spatrick #define MVPP2_PRS_IPV4_MC_MASK 0xf0 9831a945772Spatrick #define MVPP2_PRS_IPV4_BC_MASK 0xff 9841a945772Spatrick #define MVPP2_PRS_IPV4_IHL 0x5 9851a945772Spatrick #define MVPP2_PRS_IPV4_IHL_MASK 0xf 9861a945772Spatrick #define MVPP2_PRS_IPV6_MC 0xff 9871a945772Spatrick #define MVPP2_PRS_IPV6_MC_MASK 0xff 9881a945772Spatrick #define MVPP2_PRS_IPV6_HOP_MASK 0xff 9891a945772Spatrick #define MVPP2_PRS_TCAM_PROTO_MASK 0xff 9901a945772Spatrick #define MVPP2_PRS_TCAM_PROTO_MASK_L 0x3f 9911a945772Spatrick #define MVPP2_PRS_DBL_VLANS_MAX 100 99241cd246cSpatrick #define MVPP2_PRS_CAST_MASK BIT(0) 99341cd246cSpatrick #define MVPP2_PRS_MCAST_VAL BIT(0) 99441cd246cSpatrick #define MVPP2_PRS_UCAST_VAL 0x0 9951a945772Spatrick 996ce595ab8Spatrick #define MVPP2_PRS_MAC_RANGE_SIZE 80 997ce595ab8Spatrick #define MVPP2_PRS_MAC_UC_FILT_MAX 4 998ce595ab8Spatrick #define MVPP2_PRS_MAC_MC_FILT_MAX 21 999ce595ab8Spatrick 10001a945772Spatrick /* 10011a945772Spatrick * Tcam structure: 10021a945772Spatrick * - lookup ID - 4 bits 10031a945772Spatrick * - port ID - 1 byte 10041a945772Spatrick * - additional information - 1 byte 10051a945772Spatrick * - header data - 8 bytes 10061a945772Spatrick * The fields are represented by MVPP2_PRS_TCAM_DATA_REG(5)->(0). 10071a945772Spatrick */ 10081a945772Spatrick #define MVPP2_PRS_AI_BITS 8 10091a945772Spatrick #define MVPP2_PRS_PORT_MASK 0xff 10101a945772Spatrick #define MVPP2_PRS_LU_MASK 0xf 10111a945772Spatrick #define MVPP2_PRS_TCAM_DATA_BYTE(offs) (((offs) - ((offs) % 2)) * 2 + ((offs) % 2)) 10121a945772Spatrick #define MVPP2_PRS_TCAM_DATA_BYTE_EN(offs) (((offs) * 2) - ((offs) % 2) + 2) 10131a945772Spatrick #define MVPP2_PRS_TCAM_AI_BYTE 16 10141a945772Spatrick #define MVPP2_PRS_TCAM_PORT_BYTE 17 10151a945772Spatrick #define MVPP2_PRS_TCAM_LU_BYTE 20 10161a945772Spatrick #define MVPP2_PRS_TCAM_EN_OFFS(offs) ((offs) + 2) 10171a945772Spatrick #define MVPP2_PRS_TCAM_INV_WORD 5 10181a945772Spatrick /* Tcam entries ID */ 10191a945772Spatrick #define MVPP2_PE_DROP_ALL 0 10201a945772Spatrick #define MVPP2_PE_FIRST_FREE_TID 1 1021ce595ab8Spatrick #define MVPP2_PE_LAST_FREE_TID (MVPP2_PE_MAC_RANGE_START - 1) 1022ce595ab8Spatrick #define MVPP2_PE_MAC_RANGE_END (MVPP2_PRS_TCAM_SRAM_SIZE - 31) 1023ce595ab8Spatrick #define MVPP2_PE_MAC_RANGE_START (MVPP2_PE_MAC_RANGE_END - \ 1024ce595ab8Spatrick MVPP2_PRS_MAC_RANGE_SIZE + 1) 10251a945772Spatrick #define MVPP2_PE_IP6_EXT_PROTO_UN (MVPP2_PRS_TCAM_SRAM_SIZE - 30) 102641cd246cSpatrick #define MVPP2_PE_IP6_ADDR_UN (MVPP2_PRS_TCAM_SRAM_SIZE - 29) 102741cd246cSpatrick #define MVPP2_PE_IP4_ADDR_UN (MVPP2_PRS_TCAM_SRAM_SIZE - 28) 102841cd246cSpatrick #define MVPP2_PE_LAST_DEFAULT_FLOW (MVPP2_PRS_TCAM_SRAM_SIZE - 27) 102941cd246cSpatrick #define MVPP2_PE_FIRST_DEFAULT_FLOW (MVPP2_PRS_TCAM_SRAM_SIZE - 22) 103041cd246cSpatrick #define MVPP2_PE_EDSA_TAGGED (MVPP2_PRS_TCAM_SRAM_SIZE - 21) 103141cd246cSpatrick #define MVPP2_PE_EDSA_UNTAGGED (MVPP2_PRS_TCAM_SRAM_SIZE - 20) 103241cd246cSpatrick #define MVPP2_PE_DSA_TAGGED (MVPP2_PRS_TCAM_SRAM_SIZE - 19) 103341cd246cSpatrick #define MVPP2_PE_DSA_UNTAGGED (MVPP2_PRS_TCAM_SRAM_SIZE - 18) 103441cd246cSpatrick #define MVPP2_PE_ETYPE_EDSA_TAGGED (MVPP2_PRS_TCAM_SRAM_SIZE - 17) 103541cd246cSpatrick #define MVPP2_PE_ETYPE_EDSA_UNTAGGED (MVPP2_PRS_TCAM_SRAM_SIZE - 16) 103641cd246cSpatrick #define MVPP2_PE_ETYPE_DSA_TAGGED (MVPP2_PRS_TCAM_SRAM_SIZE - 15) 103741cd246cSpatrick #define MVPP2_PE_ETYPE_DSA_UNTAGGED (MVPP2_PRS_TCAM_SRAM_SIZE - 14) 103841cd246cSpatrick #define MVPP2_PE_MH_DEFAULT (MVPP2_PRS_TCAM_SRAM_SIZE - 13) 103941cd246cSpatrick #define MVPP2_PE_DSA_DEFAULT (MVPP2_PRS_TCAM_SRAM_SIZE - 12) 104041cd246cSpatrick #define MVPP2_PE_IP6_PROTO_UN (MVPP2_PRS_TCAM_SRAM_SIZE - 11) 104141cd246cSpatrick #define MVPP2_PE_IP4_PROTO_UN (MVPP2_PRS_TCAM_SRAM_SIZE - 10) 104241cd246cSpatrick #define MVPP2_PE_ETH_TYPE_UN (MVPP2_PRS_TCAM_SRAM_SIZE - 9) 104341cd246cSpatrick #define MVPP2_PE_VLAN_DBL (MVPP2_PRS_TCAM_SRAM_SIZE - 6) 104441cd246cSpatrick #define MVPP2_PE_VLAN_NONE (MVPP2_PRS_TCAM_SRAM_SIZE - 5) 104541cd246cSpatrick #define MVPP2_PE_MAC_MC_PROMISCUOUS (MVPP2_PRS_TCAM_SRAM_SIZE - 3) 104641cd246cSpatrick #define MVPP2_PE_MAC_UC_PROMISCUOUS (MVPP2_PRS_TCAM_SRAM_SIZE - 2) 10471a945772Spatrick #define MVPP2_PE_MAC_NON_PROMISCUOUS (MVPP2_PRS_TCAM_SRAM_SIZE - 1) 10481a945772Spatrick 10491a945772Spatrick /* 10501a945772Spatrick * Sram structure 10511a945772Spatrick * The fields are represented by MVPP2_PRS_TCAM_DATA_REG(3)->(0). 10521a945772Spatrick */ 10531a945772Spatrick #define MVPP2_PRS_SRAM_RI_OFFS 0 10541a945772Spatrick #define MVPP2_PRS_SRAM_RI_WORD 0 10551a945772Spatrick #define MVPP2_PRS_SRAM_RI_CTRL_OFFS 32 10561a945772Spatrick #define MVPP2_PRS_SRAM_RI_CTRL_WORD 1 10571a945772Spatrick #define MVPP2_PRS_SRAM_RI_CTRL_BITS 32 10581a945772Spatrick #define MVPP2_PRS_SRAM_SHIFT_OFFS 64 10591a945772Spatrick #define MVPP2_PRS_SRAM_SHIFT_SIGN_BIT 72 10601a945772Spatrick #define MVPP2_PRS_SRAM_SHIFT_MASK 0xff 10611a945772Spatrick #define MVPP2_PRS_SRAM_UDF_OFFS 73 10621a945772Spatrick #define MVPP2_PRS_SRAM_UDF_BITS 8 10631a945772Spatrick #define MVPP2_PRS_SRAM_UDF_MASK 0xff 10641a945772Spatrick #define MVPP2_PRS_SRAM_UDF_SIGN_BIT 81 10651a945772Spatrick #define MVPP2_PRS_SRAM_UDF_TYPE_OFFS 82 10661a945772Spatrick #define MVPP2_PRS_SRAM_UDF_TYPE_MASK 0x7 10671a945772Spatrick #define MVPP2_PRS_SRAM_UDF_TYPE_L3 1 10681a945772Spatrick #define MVPP2_PRS_SRAM_UDF_TYPE_L4 4 10691a945772Spatrick #define MVPP2_PRS_SRAM_OP_SEL_SHIFT_OFFS 85 10701a945772Spatrick #define MVPP2_PRS_SRAM_OP_SEL_SHIFT_MASK 0x3 10711a945772Spatrick #define MVPP2_PRS_SRAM_OP_SEL_SHIFT_ADD 1 10721a945772Spatrick #define MVPP2_PRS_SRAM_OP_SEL_SHIFT_IP4_ADD 2 10731a945772Spatrick #define MVPP2_PRS_SRAM_OP_SEL_SHIFT_IP6_ADD 3 10741a945772Spatrick #define MVPP2_PRS_SRAM_OP_SEL_UDF_OFFS 87 10751a945772Spatrick #define MVPP2_PRS_SRAM_OP_SEL_UDF_BITS 2 10761a945772Spatrick #define MVPP2_PRS_SRAM_OP_SEL_UDF_MASK 0x3 10771a945772Spatrick #define MVPP2_PRS_SRAM_OP_SEL_UDF_ADD 0 10781a945772Spatrick #define MVPP2_PRS_SRAM_OP_SEL_UDF_IP4_ADD 2 10791a945772Spatrick #define MVPP2_PRS_SRAM_OP_SEL_UDF_IP6_ADD 3 10801a945772Spatrick #define MVPP2_PRS_SRAM_OP_SEL_BASE_OFFS 89 10811a945772Spatrick #define MVPP2_PRS_SRAM_AI_OFFS 90 10821a945772Spatrick #define MVPP2_PRS_SRAM_AI_CTRL_OFFS 98 10831a945772Spatrick #define MVPP2_PRS_SRAM_AI_CTRL_BITS 8 10841a945772Spatrick #define MVPP2_PRS_SRAM_AI_MASK 0xff 10851a945772Spatrick #define MVPP2_PRS_SRAM_NEXT_LU_OFFS 106 10861a945772Spatrick #define MVPP2_PRS_SRAM_NEXT_LU_MASK 0xf 10871a945772Spatrick #define MVPP2_PRS_SRAM_LU_DONE_BIT 110 10881a945772Spatrick #define MVPP2_PRS_SRAM_LU_GEN_BIT 111 10891a945772Spatrick 10901a945772Spatrick /* Sram result info bits assignment */ 10911a945772Spatrick #define MVPP2_PRS_RI_MAC_ME_MASK 0x1 10921a945772Spatrick #define MVPP2_PRS_RI_DSA_MASK 0x2 10931a945772Spatrick #define MVPP2_PRS_RI_VLAN_MASK 0xc 10941a945772Spatrick #define MVPP2_PRS_RI_VLAN_NONE ~(BIT(2) | BIT(3)) 10951a945772Spatrick #define MVPP2_PRS_RI_VLAN_SINGLE BIT(2) 10961a945772Spatrick #define MVPP2_PRS_RI_VLAN_DOUBLE BIT(3) 10971a945772Spatrick #define MVPP2_PRS_RI_VLAN_TRIPLE (BIT(2) | BIT(3)) 10981a945772Spatrick #define MVPP2_PRS_RI_CPU_CODE_MASK 0x70 10991a945772Spatrick #define MVPP2_PRS_RI_CPU_CODE_RX_SPEC BIT(4) 11001a945772Spatrick #define MVPP2_PRS_RI_L2_CAST_MASK 0x600 11011a945772Spatrick #define MVPP2_PRS_RI_L2_UCAST ~(BIT(9) | BIT(10)) 11021a945772Spatrick #define MVPP2_PRS_RI_L2_MCAST BIT(9) 11031a945772Spatrick #define MVPP2_PRS_RI_L2_BCAST BIT(10) 11041a945772Spatrick #define MVPP2_PRS_RI_PPPOE_MASK 0x800 11051a945772Spatrick #define MVPP2_PRS_RI_L3_PROTO_MASK 0x7000 11061a945772Spatrick #define MVPP2_PRS_RI_L3_UN ~(BIT(12) | BIT(13) | BIT(14)) 11071a945772Spatrick #define MVPP2_PRS_RI_L3_IP4 BIT(12) 11081a945772Spatrick #define MVPP2_PRS_RI_L3_IP4_OPT BIT(13) 11091a945772Spatrick #define MVPP2_PRS_RI_L3_IP4_OTHER (BIT(12) | BIT(13)) 11101a945772Spatrick #define MVPP2_PRS_RI_L3_IP6 BIT(14) 11111a945772Spatrick #define MVPP2_PRS_RI_L3_IP6_EXT (BIT(12) | BIT(14)) 11121a945772Spatrick #define MVPP2_PRS_RI_L3_ARP (BIT(13) | BIT(14)) 11131a945772Spatrick #define MVPP2_PRS_RI_L3_ADDR_MASK 0x18000 11141a945772Spatrick #define MVPP2_PRS_RI_L3_UCAST ~(BIT(15) | BIT(16)) 11151a945772Spatrick #define MVPP2_PRS_RI_L3_MCAST BIT(15) 11161a945772Spatrick #define MVPP2_PRS_RI_L3_BCAST (BIT(15) | BIT(16)) 11171a945772Spatrick #define MVPP2_PRS_RI_IP_FRAG_MASK 0x20000 11181a945772Spatrick #define MVPP2_PRS_RI_UDF3_MASK 0x300000 11191a945772Spatrick #define MVPP2_PRS_RI_UDF3_RX_SPECIAL BIT(21) 11201a945772Spatrick #define MVPP2_PRS_RI_L4_PROTO_MASK 0x1c00000 11211a945772Spatrick #define MVPP2_PRS_RI_L4_TCP BIT(22) 11221a945772Spatrick #define MVPP2_PRS_RI_L4_UDP BIT(23) 11231a945772Spatrick #define MVPP2_PRS_RI_L4_OTHER (BIT(22) | BIT(23)) 11241a945772Spatrick #define MVPP2_PRS_RI_UDF7_MASK 0x60000000 11251a945772Spatrick #define MVPP2_PRS_RI_UDF7_IP6_LITE BIT(29) 11261a945772Spatrick #define MVPP2_PRS_RI_DROP_MASK 0x80000000 11271a945772Spatrick 11281a945772Spatrick /* Sram additional info bits assignment */ 11291a945772Spatrick #define MVPP2_PRS_IPV4_DIP_AI_BIT BIT(0) 11301a945772Spatrick #define MVPP2_PRS_IPV6_NO_EXT_AI_BIT BIT(0) 11311a945772Spatrick #define MVPP2_PRS_IPV6_EXT_AI_BIT BIT(1) 11321a945772Spatrick #define MVPP2_PRS_IPV6_EXT_AH_AI_BIT BIT(2) 11331a945772Spatrick #define MVPP2_PRS_IPV6_EXT_AH_LEN_AI_BIT BIT(3) 11341a945772Spatrick #define MVPP2_PRS_IPV6_EXT_AH_L4_AI_BIT BIT(4) 11351a945772Spatrick #define MVPP2_PRS_SINGLE_VLAN_AI 0 11361a945772Spatrick #define MVPP2_PRS_DBL_VLAN_AI_BIT BIT(7) 11371a945772Spatrick 11381a945772Spatrick /* DSA/EDSA type */ 11391a945772Spatrick #define MVPP2_PRS_TAGGED 1 11401a945772Spatrick #define MVPP2_PRS_UNTAGGED 0 11411a945772Spatrick #define MVPP2_PRS_EDSA 1 11421a945772Spatrick #define MVPP2_PRS_DSA 0 11431a945772Spatrick 11441a945772Spatrick /* MAC entries, shadow udf */ 1145017da651Spatrick enum mvpp2_prs_udf { 11461a945772Spatrick MVPP2_PRS_UDF_MAC_DEF, 11471a945772Spatrick MVPP2_PRS_UDF_MAC_RANGE, 11481a945772Spatrick MVPP2_PRS_UDF_L2_DEF, 11491a945772Spatrick MVPP2_PRS_UDF_L2_DEF_COPY, 11501a945772Spatrick MVPP2_PRS_UDF_L2_USER, 11511a945772Spatrick }; 11521a945772Spatrick 11531a945772Spatrick /* Lookup ID */ 1154017da651Spatrick enum mvpp2_prs_lookup { 11551a945772Spatrick MVPP2_PRS_LU_MH, 11561a945772Spatrick MVPP2_PRS_LU_MAC, 11571a945772Spatrick MVPP2_PRS_LU_DSA, 11581a945772Spatrick MVPP2_PRS_LU_VLAN, 11591a945772Spatrick MVPP2_PRS_LU_L2, 11601a945772Spatrick MVPP2_PRS_LU_PPPOE, 11611a945772Spatrick MVPP2_PRS_LU_IP4, 11621a945772Spatrick MVPP2_PRS_LU_IP6, 11631a945772Spatrick MVPP2_PRS_LU_FLOWS, 11641a945772Spatrick MVPP2_PRS_LU_LAST, 11651a945772Spatrick }; 11661a945772Spatrick 11671a945772Spatrick /* Classifier constants */ 11681a945772Spatrick #define MVPP2_CLS_FLOWS_TBL_SIZE 512 11691a945772Spatrick #define MVPP2_CLS_FLOWS_TBL_DATA_WORDS 3 11701a945772Spatrick #define MVPP2_CLS_LKP_TBL_SIZE 64 11711a945772Spatrick 11721a945772Spatrick /* 11731a945772Spatrick * The MVPP2_TX_DESC and MVPP2_RX_DESC structures describe the 11741a945772Spatrick * layout of the transmit and reception DMA descriptors, and their 11751a945772Spatrick * layout is therefore defined by the hardware design 11761a945772Spatrick */ 11771a945772Spatrick #define MVPP2_TXD_L3_OFF_SHIFT 0 11781a945772Spatrick #define MVPP2_TXD_IP_HLEN_SHIFT 8 11791a945772Spatrick #define MVPP2_TXD_L4_CSUM_FRAG BIT(13) 11801a945772Spatrick #define MVPP2_TXD_L4_CSUM_NOT BIT(14) 11811a945772Spatrick #define MVPP2_TXD_IP_CSUM_DISABLE BIT(15) 11821a945772Spatrick #define MVPP2_TXD_PADDING_DISABLE BIT(23) 11831a945772Spatrick #define MVPP2_TXD_L4_UDP BIT(24) 11841a945772Spatrick #define MVPP2_TXD_L3_IP6 BIT(26) 11851a945772Spatrick #define MVPP2_TXD_L_DESC BIT(28) 11861a945772Spatrick #define MVPP2_TXD_F_DESC BIT(29) 11871a945772Spatrick 11881a945772Spatrick #define MVPP2_RXD_ERR_SUMMARY BIT(15) 11891a945772Spatrick #define MVPP2_RXD_ERR_CODE_MASK (BIT(13) | BIT(14)) 11901a945772Spatrick #define MVPP2_RXD_ERR_CRC 0x0 11911a945772Spatrick #define MVPP2_RXD_ERR_OVERRUN BIT(13) 11921a945772Spatrick #define MVPP2_RXD_ERR_RESOURCE (BIT(13) | BIT(14)) 11931a945772Spatrick #define MVPP2_RXD_BM_POOL_ID_OFFS 16 11941a945772Spatrick #define MVPP2_RXD_BM_POOL_ID_MASK (BIT(16) | BIT(17) | BIT(18)) 11951a945772Spatrick #define MVPP2_RXD_HWF_SYNC BIT(21) 11961a945772Spatrick #define MVPP2_RXD_L4_CSUM_OK BIT(22) 11971a945772Spatrick #define MVPP2_RXD_IP4_HEADER_ERR BIT(24) 11981a945772Spatrick #define MVPP2_RXD_L4_TCP BIT(25) 11991a945772Spatrick #define MVPP2_RXD_L4_UDP BIT(26) 12001a945772Spatrick #define MVPP2_RXD_L3_IP4 BIT(28) 12011a945772Spatrick #define MVPP2_RXD_L3_IP6 BIT(30) 12021a945772Spatrick #define MVPP2_RXD_BUF_HDR BIT(31) 12031a945772Spatrick 12041a945772Spatrick struct mvpp2_tx_desc { 12051a945772Spatrick uint32_t command; /* Options used by HW for packet transmitting.*/ 12061a945772Spatrick uint8_t packet_offset; /* the offset from the buffer beginning */ 12071a945772Spatrick uint8_t phys_txq; /* destination queue ID */ 12081a945772Spatrick uint16_t data_size; /* data size of transmitted packet in bytes */ 12091a945772Spatrick uint64_t rsrvd_hw_cmd1; /* HwCmd (BM, PON, PNC) */ 12101a945772Spatrick uint64_t buf_phys_addr_hw_cmd2; 12111a945772Spatrick uint64_t buf_cookie_bm_qset_hw_cmd3; 12121a945772Spatrick }; 12131a945772Spatrick 12141a945772Spatrick struct mvpp2_rx_desc { 12151a945772Spatrick uint32_t status; /* info about received packet */ 12161a945772Spatrick uint16_t reserved1; /* ParserInfo (for future use, PnC) */ 12171a945772Spatrick uint16_t data_size; /* size of received packet in bytes */ 12181a945772Spatrick uint16_t rsrvd_gem; /* GemPortId (for future use, PON) */ 12191a945772Spatrick uint16_t rsrvd_l4_csum; /* CsumL4 (for future use, PnC) */ 12201a945772Spatrick uint32_t rsrvd_timestamp; 12211a945772Spatrick uint64_t buf_phys_addr_key_hash; 12221a945772Spatrick uint64_t buf_cookie_bm_qset_cls_info; 12231a945772Spatrick }; 12241a945772Spatrick 12251a945772Spatrick union mvpp2_prs_tcam_entry { 12261a945772Spatrick uint32_t word[MVPP2_PRS_TCAM_WORDS]; 12271a945772Spatrick uint8_t byte[MVPP2_PRS_TCAM_WORDS * 4]; 12281a945772Spatrick }; 12291a945772Spatrick 12301a945772Spatrick union mvpp2_prs_sram_entry { 12311a945772Spatrick uint32_t word[MVPP2_PRS_SRAM_WORDS]; 12321a945772Spatrick uint8_t byte[MVPP2_PRS_SRAM_WORDS * 4]; 12331a945772Spatrick }; 12341a945772Spatrick 12351a945772Spatrick struct mvpp2_prs_entry { 12361a945772Spatrick uint32_t index; 12371a945772Spatrick union mvpp2_prs_tcam_entry tcam; 12381a945772Spatrick union mvpp2_prs_sram_entry sram; 12391a945772Spatrick }; 12401a945772Spatrick 12411a945772Spatrick struct mvpp2_prs_shadow { 12421a945772Spatrick int valid; 12431a945772Spatrick int finish; 12441a945772Spatrick 12451a945772Spatrick /* Lookup ID */ 12461a945772Spatrick int32_t lu; 12471a945772Spatrick 12481a945772Spatrick /* User defined offset */ 12491a945772Spatrick int32_t udf; 12501a945772Spatrick 12511a945772Spatrick /* Result info */ 12521a945772Spatrick uint32_t ri; 12531a945772Spatrick uint32_t ri_mask; 12541a945772Spatrick }; 12551a945772Spatrick 12561a945772Spatrick struct mvpp2_cls_flow_entry { 12571a945772Spatrick uint32_t index; 12581a945772Spatrick uint32_t data[MVPP2_CLS_FLOWS_TBL_DATA_WORDS]; 12591a945772Spatrick }; 12601a945772Spatrick 12611a945772Spatrick struct mvpp2_cls_lookup_entry { 12621a945772Spatrick uint32_t lkpid; 12631a945772Spatrick uint32_t way; 12641a945772Spatrick uint32_t data; 12651a945772Spatrick }; 12661a945772Spatrick 12671a945772Spatrick typedef struct { 12681a945772Spatrick uint32_t NextBuffPhysAddr; 12691a945772Spatrick uint32_t NextBuffVirtAddr; 12701a945772Spatrick uint16_t ByteCount; 12711a945772Spatrick uint16_t info; 12721a945772Spatrick uint8_t reserved1; /* BmQset (for future use, BM) */ 12731a945772Spatrick } MVPP2_BUFF_HDR; 12741a945772Spatrick 12751a945772Spatrick /* Buffer header info bits */ 12761a945772Spatrick #define MVPP2_B_HDR_INFO_MC_ID_MASK 0xfff 12771a945772Spatrick #define MVPP2_B_HDR_INFO_MC_ID(info) ((info) & MVPP2_B_HDR_INFO_MC_ID_MASK) 12781a945772Spatrick #define MVPP2_B_HDR_INFO_LAST_OFFS 12 12791a945772Spatrick #define MVPP2_B_HDR_INFO_LAST_MASK BIT(12) 12801a945772Spatrick #define MVPP2_B_HDR_INFO_IS_LAST(info) ((info & MVPP2_B_HDR_INFO_LAST_MASK) >> MVPP2_B_HDR_INFO_LAST_OFFS) 12811a945772Spatrick 12821a945772Spatrick /* SerDes */ 12831a945772Spatrick #define MVPP2_SFI_LANE_COUNT 1 12841a945772Spatrick 12851a945772Spatrick #endif /* __MVPP2_LIB_HW__ */ 1286