18a971df9SLuo Jie /* SPDX-License-Identifier: GPL-2.0-only 28a971df9SLuo Jie * 38a971df9SLuo Jie * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. 48a971df9SLuo Jie */ 58a971df9SLuo Jie 68a971df9SLuo Jie /* PPE hardware register and table declarations. */ 78a971df9SLuo Jie #ifndef __PPE_REGS_H__ 88a971df9SLuo Jie #define __PPE_REGS_H__ 98a971df9SLuo Jie 108a971df9SLuo Jie #include <linux/bitfield.h> 118a971df9SLuo Jie 1233122798SLuo Jie /* PPE scheduler configurations for buffer manager block. */ 1333122798SLuo Jie #define PPE_BM_SCH_CTRL_ADDR 0xb000 1433122798SLuo Jie #define PPE_BM_SCH_CTRL_INC 4 1533122798SLuo Jie #define PPE_BM_SCH_CTRL_SCH_DEPTH GENMASK(7, 0) 1633122798SLuo Jie #define PPE_BM_SCH_CTRL_SCH_OFFSET GENMASK(14, 8) 1733122798SLuo Jie #define PPE_BM_SCH_CTRL_SCH_EN BIT(31) 1833122798SLuo Jie 19*a2a7221dSLuo Jie /* PPE drop counters. */ 20*a2a7221dSLuo Jie #define PPE_DROP_CNT_TBL_ADDR 0xb024 21*a2a7221dSLuo Jie #define PPE_DROP_CNT_TBL_ENTRIES 8 22*a2a7221dSLuo Jie #define PPE_DROP_CNT_TBL_INC 4 23*a2a7221dSLuo Jie 24*a2a7221dSLuo Jie /* BM port drop counters. */ 25*a2a7221dSLuo Jie #define PPE_DROP_STAT_TBL_ADDR 0xe000 26*a2a7221dSLuo Jie #define PPE_DROP_STAT_TBL_ENTRIES 30 27*a2a7221dSLuo Jie #define PPE_DROP_STAT_TBL_INC 0x10 28*a2a7221dSLuo Jie 29*a2a7221dSLuo Jie /* Egress VLAN counters. */ 30*a2a7221dSLuo Jie #define PPE_EG_VSI_COUNTER_TBL_ADDR 0x41000 31*a2a7221dSLuo Jie #define PPE_EG_VSI_COUNTER_TBL_ENTRIES 64 32*a2a7221dSLuo Jie #define PPE_EG_VSI_COUNTER_TBL_INC 0x10 33*a2a7221dSLuo Jie 34*a2a7221dSLuo Jie /* Port TX counters. */ 35*a2a7221dSLuo Jie #define PPE_PORT_TX_COUNTER_TBL_ADDR 0x45000 36*a2a7221dSLuo Jie #define PPE_PORT_TX_COUNTER_TBL_ENTRIES 8 37*a2a7221dSLuo Jie #define PPE_PORT_TX_COUNTER_TBL_INC 0x10 38*a2a7221dSLuo Jie 39*a2a7221dSLuo Jie /* Virtual port TX counters. */ 40*a2a7221dSLuo Jie #define PPE_VPORT_TX_COUNTER_TBL_ADDR 0x47000 41*a2a7221dSLuo Jie #define PPE_VPORT_TX_COUNTER_TBL_ENTRIES 256 42*a2a7221dSLuo Jie #define PPE_VPORT_TX_COUNTER_TBL_INC 0x10 43*a2a7221dSLuo Jie 44*a2a7221dSLuo Jie /* Queue counters. */ 45*a2a7221dSLuo Jie #define PPE_QUEUE_TX_COUNTER_TBL_ADDR 0x4a000 46*a2a7221dSLuo Jie #define PPE_QUEUE_TX_COUNTER_TBL_ENTRIES 300 47*a2a7221dSLuo Jie #define PPE_QUEUE_TX_COUNTER_TBL_INC 0x10 48*a2a7221dSLuo Jie 491c46c3c0SLuo Jie /* RSS settings are to calculate the random RSS hash value generated during 501c46c3c0SLuo Jie * packet receive to ARM cores. This hash is then used to generate the queue 511c46c3c0SLuo Jie * offset used to determine the queue used to transmit the packet to ARM cores. 521c46c3c0SLuo Jie */ 531c46c3c0SLuo Jie #define PPE_RSS_HASH_MASK_ADDR 0xb4318 541c46c3c0SLuo Jie #define PPE_RSS_HASH_MASK_HASH_MASK GENMASK(20, 0) 551c46c3c0SLuo Jie #define PPE_RSS_HASH_MASK_FRAGMENT BIT(28) 561c46c3c0SLuo Jie 571c46c3c0SLuo Jie #define PPE_RSS_HASH_SEED_ADDR 0xb431c 581c46c3c0SLuo Jie #define PPE_RSS_HASH_SEED_VAL GENMASK(31, 0) 591c46c3c0SLuo Jie 601c46c3c0SLuo Jie #define PPE_RSS_HASH_MIX_ADDR 0xb4320 611c46c3c0SLuo Jie #define PPE_RSS_HASH_MIX_ENTRIES 11 621c46c3c0SLuo Jie #define PPE_RSS_HASH_MIX_INC 4 631c46c3c0SLuo Jie #define PPE_RSS_HASH_MIX_VAL GENMASK(4, 0) 641c46c3c0SLuo Jie 651c46c3c0SLuo Jie #define PPE_RSS_HASH_FIN_ADDR 0xb4350 661c46c3c0SLuo Jie #define PPE_RSS_HASH_FIN_ENTRIES 5 671c46c3c0SLuo Jie #define PPE_RSS_HASH_FIN_INC 4 681c46c3c0SLuo Jie #define PPE_RSS_HASH_FIN_INNER GENMASK(4, 0) 691c46c3c0SLuo Jie #define PPE_RSS_HASH_FIN_OUTER GENMASK(9, 5) 701c46c3c0SLuo Jie 711c46c3c0SLuo Jie #define PPE_RSS_HASH_MASK_IPV4_ADDR 0xb4380 721c46c3c0SLuo Jie #define PPE_RSS_HASH_MASK_IPV4_HASH_MASK GENMASK(20, 0) 731c46c3c0SLuo Jie #define PPE_RSS_HASH_MASK_IPV4_FRAGMENT BIT(28) 741c46c3c0SLuo Jie 751c46c3c0SLuo Jie #define PPE_RSS_HASH_SEED_IPV4_ADDR 0xb4384 761c46c3c0SLuo Jie #define PPE_RSS_HASH_SEED_IPV4_VAL GENMASK(31, 0) 771c46c3c0SLuo Jie 781c46c3c0SLuo Jie #define PPE_RSS_HASH_MIX_IPV4_ADDR 0xb4390 791c46c3c0SLuo Jie #define PPE_RSS_HASH_MIX_IPV4_ENTRIES 5 801c46c3c0SLuo Jie #define PPE_RSS_HASH_MIX_IPV4_INC 4 811c46c3c0SLuo Jie #define PPE_RSS_HASH_MIX_IPV4_VAL GENMASK(4, 0) 821c46c3c0SLuo Jie 831c46c3c0SLuo Jie #define PPE_RSS_HASH_FIN_IPV4_ADDR 0xb43b0 841c46c3c0SLuo Jie #define PPE_RSS_HASH_FIN_IPV4_ENTRIES 5 851c46c3c0SLuo Jie #define PPE_RSS_HASH_FIN_IPV4_INC 4 861c46c3c0SLuo Jie #define PPE_RSS_HASH_FIN_IPV4_INNER GENMASK(4, 0) 871c46c3c0SLuo Jie #define PPE_RSS_HASH_FIN_IPV4_OUTER GENMASK(9, 5) 881c46c3c0SLuo Jie 8933122798SLuo Jie #define PPE_BM_SCH_CFG_TBL_ADDR 0xc000 9033122798SLuo Jie #define PPE_BM_SCH_CFG_TBL_ENTRIES 128 9133122798SLuo Jie #define PPE_BM_SCH_CFG_TBL_INC 0x10 9233122798SLuo Jie #define PPE_BM_SCH_CFG_TBL_PORT_NUM GENMASK(3, 0) 9333122798SLuo Jie #define PPE_BM_SCH_CFG_TBL_DIR BIT(4) 9433122798SLuo Jie #define PPE_BM_SCH_CFG_TBL_VALID BIT(5) 9533122798SLuo Jie #define PPE_BM_SCH_CFG_TBL_SECOND_PORT_VALID BIT(6) 9633122798SLuo Jie #define PPE_BM_SCH_CFG_TBL_SECOND_PORT GENMASK(11, 8) 9733122798SLuo Jie 9873d05bdaSLuo Jie /* PPE service code configuration for the ingress direction functions, 9973d05bdaSLuo Jie * including bypass configuration for relevant PPE switch core functions 10073d05bdaSLuo Jie * such as flow entry lookup bypass. 10173d05bdaSLuo Jie */ 10273d05bdaSLuo Jie #define PPE_SERVICE_TBL_ADDR 0x15000 10373d05bdaSLuo Jie #define PPE_SERVICE_TBL_ENTRIES 256 10473d05bdaSLuo Jie #define PPE_SERVICE_TBL_INC 0x10 10573d05bdaSLuo Jie #define PPE_SERVICE_W0_BYPASS_BITMAP GENMASK(31, 0) 10673d05bdaSLuo Jie #define PPE_SERVICE_W1_RX_CNT_EN BIT(0) 10773d05bdaSLuo Jie 10873d05bdaSLuo Jie #define PPE_SERVICE_SET_BYPASS_BITMAP(tbl_cfg, value) \ 10973d05bdaSLuo Jie FIELD_MODIFY(PPE_SERVICE_W0_BYPASS_BITMAP, tbl_cfg, value) 11073d05bdaSLuo Jie #define PPE_SERVICE_SET_RX_CNT_EN(tbl_cfg, value) \ 11173d05bdaSLuo Jie FIELD_MODIFY(PPE_SERVICE_W1_RX_CNT_EN, (tbl_cfg) + 0x1, value) 11273d05bdaSLuo Jie 1138821bb0fSLuo Jie /* PPE port egress VLAN configurations. */ 1148821bb0fSLuo Jie #define PPE_PORT_EG_VLAN_TBL_ADDR 0x20020 1158821bb0fSLuo Jie #define PPE_PORT_EG_VLAN_TBL_ENTRIES 8 1168821bb0fSLuo Jie #define PPE_PORT_EG_VLAN_TBL_INC 4 1178821bb0fSLuo Jie #define PPE_PORT_EG_VLAN_TBL_VLAN_TYPE BIT(0) 1188821bb0fSLuo Jie #define PPE_PORT_EG_VLAN_TBL_CTAG_MODE GENMASK(2, 1) 1198821bb0fSLuo Jie #define PPE_PORT_EG_VLAN_TBL_STAG_MODE GENMASK(4, 3) 1208821bb0fSLuo Jie #define PPE_PORT_EG_VLAN_TBL_VSI_TAG_MODE_EN BIT(5) 1218821bb0fSLuo Jie #define PPE_PORT_EG_VLAN_TBL_PCP_PROP_CMD BIT(6) 1228821bb0fSLuo Jie #define PPE_PORT_EG_VLAN_TBL_DEI_PROP_CMD BIT(7) 1238821bb0fSLuo Jie #define PPE_PORT_EG_VLAN_TBL_TX_COUNTING_EN BIT(8) 1248821bb0fSLuo Jie 125806268dcSLuo Jie /* PPE queue counters enable/disable control. */ 126806268dcSLuo Jie #define PPE_EG_BRIDGE_CONFIG_ADDR 0x20044 127806268dcSLuo Jie #define PPE_EG_BRIDGE_CONFIG_QUEUE_CNT_EN BIT(2) 128806268dcSLuo Jie 12973d05bdaSLuo Jie /* PPE service code configuration on the egress direction. */ 13073d05bdaSLuo Jie #define PPE_EG_SERVICE_TBL_ADDR 0x43000 13173d05bdaSLuo Jie #define PPE_EG_SERVICE_TBL_ENTRIES 256 13273d05bdaSLuo Jie #define PPE_EG_SERVICE_TBL_INC 0x10 13373d05bdaSLuo Jie #define PPE_EG_SERVICE_W0_UPDATE_ACTION GENMASK(31, 0) 13473d05bdaSLuo Jie #define PPE_EG_SERVICE_W1_NEXT_SERVCODE GENMASK(7, 0) 13573d05bdaSLuo Jie #define PPE_EG_SERVICE_W1_HW_SERVICE GENMASK(13, 8) 13673d05bdaSLuo Jie #define PPE_EG_SERVICE_W1_OFFSET_SEL BIT(14) 13773d05bdaSLuo Jie #define PPE_EG_SERVICE_W1_TX_CNT_EN BIT(15) 13873d05bdaSLuo Jie 13973d05bdaSLuo Jie #define PPE_EG_SERVICE_SET_UPDATE_ACTION(tbl_cfg, value) \ 14073d05bdaSLuo Jie FIELD_MODIFY(PPE_EG_SERVICE_W0_UPDATE_ACTION, tbl_cfg, value) 14173d05bdaSLuo Jie #define PPE_EG_SERVICE_SET_NEXT_SERVCODE(tbl_cfg, value) \ 14273d05bdaSLuo Jie FIELD_MODIFY(PPE_EG_SERVICE_W1_NEXT_SERVCODE, (tbl_cfg) + 0x1, value) 14373d05bdaSLuo Jie #define PPE_EG_SERVICE_SET_HW_SERVICE(tbl_cfg, value) \ 14473d05bdaSLuo Jie FIELD_MODIFY(PPE_EG_SERVICE_W1_HW_SERVICE, (tbl_cfg) + 0x1, value) 14573d05bdaSLuo Jie #define PPE_EG_SERVICE_SET_OFFSET_SEL(tbl_cfg, value) \ 14673d05bdaSLuo Jie FIELD_MODIFY(PPE_EG_SERVICE_W1_OFFSET_SEL, (tbl_cfg) + 0x1, value) 14773d05bdaSLuo Jie #define PPE_EG_SERVICE_SET_TX_CNT_EN(tbl_cfg, value) \ 14873d05bdaSLuo Jie FIELD_MODIFY(PPE_EG_SERVICE_W1_TX_CNT_EN, (tbl_cfg) + 0x1, value) 14973d05bdaSLuo Jie 1508cc72c6cSLei Wei /* PPE port bridge configuration */ 1518cc72c6cSLei Wei #define PPE_PORT_BRIDGE_CTRL_ADDR 0x60300 1528cc72c6cSLei Wei #define PPE_PORT_BRIDGE_CTRL_ENTRIES 8 1538cc72c6cSLei Wei #define PPE_PORT_BRIDGE_CTRL_INC 4 1548cc72c6cSLei Wei #define PPE_PORT_BRIDGE_NEW_LRN_EN BIT(0) 1558cc72c6cSLei Wei #define PPE_PORT_BRIDGE_STA_MOVE_LRN_EN BIT(3) 1568cc72c6cSLei Wei #define PPE_PORT_BRIDGE_TXMAC_EN BIT(16) 1578cc72c6cSLei Wei 1588821bb0fSLuo Jie /* PPE port control configurations for the traffic to the multicast queues. */ 1598821bb0fSLuo Jie #define PPE_MC_MTU_CTRL_TBL_ADDR 0x60a00 1608821bb0fSLuo Jie #define PPE_MC_MTU_CTRL_TBL_ENTRIES 8 1618821bb0fSLuo Jie #define PPE_MC_MTU_CTRL_TBL_INC 4 1628821bb0fSLuo Jie #define PPE_MC_MTU_CTRL_TBL_MTU GENMASK(13, 0) 1638821bb0fSLuo Jie #define PPE_MC_MTU_CTRL_TBL_MTU_CMD GENMASK(15, 14) 1648821bb0fSLuo Jie #define PPE_MC_MTU_CTRL_TBL_TX_CNT_EN BIT(16) 1658821bb0fSLuo Jie 1668cc72c6cSLei Wei /* PPE VSI configurations */ 1678cc72c6cSLei Wei #define PPE_VSI_TBL_ADDR 0x63800 1688cc72c6cSLei Wei #define PPE_VSI_TBL_ENTRIES 64 1698cc72c6cSLei Wei #define PPE_VSI_TBL_INC 0x10 1708cc72c6cSLei Wei #define PPE_VSI_W0_MEMBER_PORT_BITMAP GENMASK(7, 0) 1718cc72c6cSLei Wei #define PPE_VSI_W0_UUC_BITMAP GENMASK(15, 8) 1728cc72c6cSLei Wei #define PPE_VSI_W0_UMC_BITMAP GENMASK(23, 16) 1738cc72c6cSLei Wei #define PPE_VSI_W0_BC_BITMAP GENMASK(31, 24) 1748cc72c6cSLei Wei #define PPE_VSI_W1_NEW_ADDR_LRN_EN BIT(0) 1758cc72c6cSLei Wei #define PPE_VSI_W1_NEW_ADDR_FWD_CMD GENMASK(2, 1) 1768cc72c6cSLei Wei #define PPE_VSI_W1_STATION_MOVE_LRN_EN BIT(3) 1778cc72c6cSLei Wei #define PPE_VSI_W1_STATION_MOVE_FWD_CMD GENMASK(5, 4) 1788cc72c6cSLei Wei 1798cc72c6cSLei Wei #define PPE_VSI_SET_MEMBER_PORT_BITMAP(tbl_cfg, value) \ 1808cc72c6cSLei Wei FIELD_MODIFY(PPE_VSI_W0_MEMBER_PORT_BITMAP, tbl_cfg, value) 1818cc72c6cSLei Wei #define PPE_VSI_SET_UUC_BITMAP(tbl_cfg, value) \ 1828cc72c6cSLei Wei FIELD_MODIFY(PPE_VSI_W0_UUC_BITMAP, tbl_cfg, value) 1838cc72c6cSLei Wei #define PPE_VSI_SET_UMC_BITMAP(tbl_cfg, value) \ 1848cc72c6cSLei Wei FIELD_MODIFY(PPE_VSI_W0_UMC_BITMAP, tbl_cfg, value) 1858cc72c6cSLei Wei #define PPE_VSI_SET_BC_BITMAP(tbl_cfg, value) \ 1868cc72c6cSLei Wei FIELD_MODIFY(PPE_VSI_W0_BC_BITMAP, tbl_cfg, value) 1878cc72c6cSLei Wei #define PPE_VSI_SET_NEW_ADDR_LRN_EN(tbl_cfg, value) \ 1888cc72c6cSLei Wei FIELD_MODIFY(PPE_VSI_W1_NEW_ADDR_LRN_EN, (tbl_cfg) + 0x1, value) 1898cc72c6cSLei Wei #define PPE_VSI_SET_NEW_ADDR_FWD_CMD(tbl_cfg, value) \ 1908cc72c6cSLei Wei FIELD_MODIFY(PPE_VSI_W1_NEW_ADDR_FWD_CMD, (tbl_cfg) + 0x1, value) 1918cc72c6cSLei Wei #define PPE_VSI_SET_STATION_MOVE_LRN_EN(tbl_cfg, value) \ 1928cc72c6cSLei Wei FIELD_MODIFY(PPE_VSI_W1_STATION_MOVE_LRN_EN, (tbl_cfg) + 0x1, value) 1938cc72c6cSLei Wei #define PPE_VSI_SET_STATION_MOVE_FWD_CMD(tbl_cfg, value) \ 1948cc72c6cSLei Wei FIELD_MODIFY(PPE_VSI_W1_STATION_MOVE_FWD_CMD, (tbl_cfg) + 0x1, value) 1958cc72c6cSLei Wei 1968821bb0fSLuo Jie /* PPE port control configurations for the traffic to the unicast queues. */ 1978821bb0fSLuo Jie #define PPE_MRU_MTU_CTRL_TBL_ADDR 0x65000 1988821bb0fSLuo Jie #define PPE_MRU_MTU_CTRL_TBL_ENTRIES 256 1998821bb0fSLuo Jie #define PPE_MRU_MTU_CTRL_TBL_INC 0x10 2008821bb0fSLuo Jie #define PPE_MRU_MTU_CTRL_W0_MRU GENMASK(13, 0) 2018821bb0fSLuo Jie #define PPE_MRU_MTU_CTRL_W0_MRU_CMD GENMASK(15, 14) 2028821bb0fSLuo Jie #define PPE_MRU_MTU_CTRL_W0_MTU GENMASK(29, 16) 2038821bb0fSLuo Jie #define PPE_MRU_MTU_CTRL_W0_MTU_CMD GENMASK(31, 30) 2048821bb0fSLuo Jie #define PPE_MRU_MTU_CTRL_W1_RX_CNT_EN BIT(0) 2058821bb0fSLuo Jie #define PPE_MRU_MTU_CTRL_W1_TX_CNT_EN BIT(1) 2068821bb0fSLuo Jie #define PPE_MRU_MTU_CTRL_W1_SRC_PROFILE GENMASK(3, 2) 2078821bb0fSLuo Jie #define PPE_MRU_MTU_CTRL_W1_INNER_PREC_LOW BIT(31) 2088821bb0fSLuo Jie #define PPE_MRU_MTU_CTRL_W2_INNER_PREC_HIGH GENMASK(1, 0) 2098821bb0fSLuo Jie 2108821bb0fSLuo Jie #define PPE_MRU_MTU_CTRL_SET_MRU(tbl_cfg, value) \ 2118821bb0fSLuo Jie FIELD_MODIFY(PPE_MRU_MTU_CTRL_W0_MRU, tbl_cfg, value) 2128821bb0fSLuo Jie #define PPE_MRU_MTU_CTRL_SET_MRU_CMD(tbl_cfg, value) \ 2138821bb0fSLuo Jie FIELD_MODIFY(PPE_MRU_MTU_CTRL_W0_MRU_CMD, tbl_cfg, value) 2148821bb0fSLuo Jie #define PPE_MRU_MTU_CTRL_SET_MTU(tbl_cfg, value) \ 2158821bb0fSLuo Jie FIELD_MODIFY(PPE_MRU_MTU_CTRL_W0_MTU, tbl_cfg, value) 2168821bb0fSLuo Jie #define PPE_MRU_MTU_CTRL_SET_MTU_CMD(tbl_cfg, value) \ 2178821bb0fSLuo Jie FIELD_MODIFY(PPE_MRU_MTU_CTRL_W0_MTU_CMD, tbl_cfg, value) 2188821bb0fSLuo Jie #define PPE_MRU_MTU_CTRL_SET_RX_CNT_EN(tbl_cfg, value) \ 2198821bb0fSLuo Jie FIELD_MODIFY(PPE_MRU_MTU_CTRL_W1_RX_CNT_EN, (tbl_cfg) + 0x1, value) 2208821bb0fSLuo Jie #define PPE_MRU_MTU_CTRL_SET_TX_CNT_EN(tbl_cfg, value) \ 2218821bb0fSLuo Jie FIELD_MODIFY(PPE_MRU_MTU_CTRL_W1_TX_CNT_EN, (tbl_cfg) + 0x1, value) 2228821bb0fSLuo Jie 22373d05bdaSLuo Jie /* PPE service code configuration for destination port and counter. */ 22473d05bdaSLuo Jie #define PPE_IN_L2_SERVICE_TBL_ADDR 0x66000 22573d05bdaSLuo Jie #define PPE_IN_L2_SERVICE_TBL_ENTRIES 256 22673d05bdaSLuo Jie #define PPE_IN_L2_SERVICE_TBL_INC 0x10 22773d05bdaSLuo Jie #define PPE_IN_L2_SERVICE_TBL_DST_PORT_ID_VALID BIT(0) 22873d05bdaSLuo Jie #define PPE_IN_L2_SERVICE_TBL_DST_PORT_ID GENMASK(4, 1) 22973d05bdaSLuo Jie #define PPE_IN_L2_SERVICE_TBL_DST_DIRECTION BIT(5) 23073d05bdaSLuo Jie #define PPE_IN_L2_SERVICE_TBL_DST_BYPASS_BITMAP GENMASK(29, 6) 23173d05bdaSLuo Jie #define PPE_IN_L2_SERVICE_TBL_RX_CNT_EN BIT(30) 23273d05bdaSLuo Jie #define PPE_IN_L2_SERVICE_TBL_TX_CNT_EN BIT(31) 23373d05bdaSLuo Jie 2348cc72c6cSLei Wei /* L2 Port configurations */ 2358cc72c6cSLei Wei #define PPE_L2_VP_PORT_TBL_ADDR 0x98000 2368cc72c6cSLei Wei #define PPE_L2_VP_PORT_TBL_ENTRIES 256 2378cc72c6cSLei Wei #define PPE_L2_VP_PORT_TBL_INC 0x10 2388cc72c6cSLei Wei #define PPE_L2_VP_PORT_W0_INVALID_VSI_FWD_EN BIT(0) 2398cc72c6cSLei Wei #define PPE_L2_VP_PORT_W0_DST_INFO GENMASK(9, 2) 2408cc72c6cSLei Wei 2418cc72c6cSLei Wei #define PPE_L2_PORT_SET_INVALID_VSI_FWD_EN(tbl_cfg, value) \ 2428cc72c6cSLei Wei FIELD_MODIFY(PPE_L2_VP_PORT_W0_INVALID_VSI_FWD_EN, tbl_cfg, value) 2438cc72c6cSLei Wei #define PPE_L2_PORT_SET_DST_INFO(tbl_cfg, value) \ 2448cc72c6cSLei Wei FIELD_MODIFY(PPE_L2_VP_PORT_W0_DST_INFO, tbl_cfg, value) 2458cc72c6cSLei Wei 246*a2a7221dSLuo Jie /* Port RX and RX drop counters. */ 247*a2a7221dSLuo Jie #define PPE_PORT_RX_CNT_TBL_ADDR 0x150000 248*a2a7221dSLuo Jie #define PPE_PORT_RX_CNT_TBL_ENTRIES 256 249*a2a7221dSLuo Jie #define PPE_PORT_RX_CNT_TBL_INC 0x20 250*a2a7221dSLuo Jie 251*a2a7221dSLuo Jie /* Physical port RX and RX drop counters. */ 252*a2a7221dSLuo Jie #define PPE_PHY_PORT_RX_CNT_TBL_ADDR 0x156000 253*a2a7221dSLuo Jie #define PPE_PHY_PORT_RX_CNT_TBL_ENTRIES 8 254*a2a7221dSLuo Jie #define PPE_PHY_PORT_RX_CNT_TBL_INC 0x20 255*a2a7221dSLuo Jie 256*a2a7221dSLuo Jie /* Counters for the packet to CPU port. */ 257*a2a7221dSLuo Jie #define PPE_DROP_CPU_CNT_TBL_ADDR 0x160000 258*a2a7221dSLuo Jie #define PPE_DROP_CPU_CNT_TBL_ENTRIES 1280 259*a2a7221dSLuo Jie #define PPE_DROP_CPU_CNT_TBL_INC 0x10 260*a2a7221dSLuo Jie 261*a2a7221dSLuo Jie /* VLAN counters. */ 262*a2a7221dSLuo Jie #define PPE_VLAN_CNT_TBL_ADDR 0x178000 263*a2a7221dSLuo Jie #define PPE_VLAN_CNT_TBL_ENTRIES 64 264*a2a7221dSLuo Jie #define PPE_VLAN_CNT_TBL_INC 0x10 265*a2a7221dSLuo Jie 266*a2a7221dSLuo Jie /* PPE L2 counters. */ 267*a2a7221dSLuo Jie #define PPE_PRE_L2_CNT_TBL_ADDR 0x17c000 268*a2a7221dSLuo Jie #define PPE_PRE_L2_CNT_TBL_ENTRIES 64 269*a2a7221dSLuo Jie #define PPE_PRE_L2_CNT_TBL_INC 0x20 270*a2a7221dSLuo Jie 271*a2a7221dSLuo Jie /* Port TX drop counters. */ 272*a2a7221dSLuo Jie #define PPE_PORT_TX_DROP_CNT_TBL_ADDR 0x17d000 273*a2a7221dSLuo Jie #define PPE_PORT_TX_DROP_CNT_TBL_ENTRIES 8 274*a2a7221dSLuo Jie #define PPE_PORT_TX_DROP_CNT_TBL_INC 0x10 275*a2a7221dSLuo Jie 276*a2a7221dSLuo Jie /* Virtual port TX counters. */ 277*a2a7221dSLuo Jie #define PPE_VPORT_TX_DROP_CNT_TBL_ADDR 0x17e000 278*a2a7221dSLuo Jie #define PPE_VPORT_TX_DROP_CNT_TBL_ENTRIES 256 279*a2a7221dSLuo Jie #define PPE_VPORT_TX_DROP_CNT_TBL_INC 0x10 280*a2a7221dSLuo Jie 281*a2a7221dSLuo Jie /* Counters for the tunnel packet. */ 282*a2a7221dSLuo Jie #define PPE_TPR_PKT_CNT_TBL_ADDR 0x1d0080 283*a2a7221dSLuo Jie #define PPE_TPR_PKT_CNT_TBL_ENTRIES 8 284*a2a7221dSLuo Jie #define PPE_TPR_PKT_CNT_TBL_INC 4 285*a2a7221dSLuo Jie 286*a2a7221dSLuo Jie /* Counters for the all packet received. */ 287*a2a7221dSLuo Jie #define PPE_IPR_PKT_CNT_TBL_ADDR 0x1e0080 288*a2a7221dSLuo Jie #define PPE_IPR_PKT_CNT_TBL_ENTRIES 8 289*a2a7221dSLuo Jie #define PPE_IPR_PKT_CNT_TBL_INC 4 290*a2a7221dSLuo Jie 29173d05bdaSLuo Jie /* PPE service code configuration for the tunnel packet. */ 29273d05bdaSLuo Jie #define PPE_TL_SERVICE_TBL_ADDR 0x306000 29373d05bdaSLuo Jie #define PPE_TL_SERVICE_TBL_ENTRIES 256 29473d05bdaSLuo Jie #define PPE_TL_SERVICE_TBL_INC 4 29573d05bdaSLuo Jie #define PPE_TL_SERVICE_TBL_BYPASS_BITMAP GENMASK(31, 0) 29673d05bdaSLuo Jie 29733122798SLuo Jie /* Port scheduler global config. */ 29833122798SLuo Jie #define PPE_PSCH_SCH_DEPTH_CFG_ADDR 0x400000 29933122798SLuo Jie #define PPE_PSCH_SCH_DEPTH_CFG_INC 4 30033122798SLuo Jie #define PPE_PSCH_SCH_DEPTH_CFG_SCH_DEPTH GENMASK(7, 0) 30133122798SLuo Jie 30233122798SLuo Jie /* PPE queue level scheduler configurations. */ 30333122798SLuo Jie #define PPE_L0_FLOW_MAP_TBL_ADDR 0x402000 30433122798SLuo Jie #define PPE_L0_FLOW_MAP_TBL_ENTRIES 300 30533122798SLuo Jie #define PPE_L0_FLOW_MAP_TBL_INC 0x10 30633122798SLuo Jie #define PPE_L0_FLOW_MAP_TBL_FLOW_ID GENMASK(5, 0) 30733122798SLuo Jie #define PPE_L0_FLOW_MAP_TBL_C_PRI GENMASK(8, 6) 30833122798SLuo Jie #define PPE_L0_FLOW_MAP_TBL_E_PRI GENMASK(11, 9) 30933122798SLuo Jie #define PPE_L0_FLOW_MAP_TBL_C_NODE_WT GENMASK(21, 12) 31033122798SLuo Jie #define PPE_L0_FLOW_MAP_TBL_E_NODE_WT GENMASK(31, 22) 31133122798SLuo Jie 31233122798SLuo Jie #define PPE_L0_C_FLOW_CFG_TBL_ADDR 0x404000 31333122798SLuo Jie #define PPE_L0_C_FLOW_CFG_TBL_ENTRIES 512 31433122798SLuo Jie #define PPE_L0_C_FLOW_CFG_TBL_INC 0x10 31533122798SLuo Jie #define PPE_L0_C_FLOW_CFG_TBL_NODE_ID GENMASK(7, 0) 31633122798SLuo Jie #define PPE_L0_C_FLOW_CFG_TBL_NODE_CREDIT_UNIT BIT(8) 31733122798SLuo Jie 31833122798SLuo Jie #define PPE_L0_E_FLOW_CFG_TBL_ADDR 0x406000 31933122798SLuo Jie #define PPE_L0_E_FLOW_CFG_TBL_ENTRIES 512 32033122798SLuo Jie #define PPE_L0_E_FLOW_CFG_TBL_INC 0x10 32133122798SLuo Jie #define PPE_L0_E_FLOW_CFG_TBL_NODE_ID GENMASK(7, 0) 32233122798SLuo Jie #define PPE_L0_E_FLOW_CFG_TBL_NODE_CREDIT_UNIT BIT(8) 32333122798SLuo Jie 32433122798SLuo Jie #define PPE_L0_FLOW_PORT_MAP_TBL_ADDR 0x408000 32533122798SLuo Jie #define PPE_L0_FLOW_PORT_MAP_TBL_ENTRIES 300 32633122798SLuo Jie #define PPE_L0_FLOW_PORT_MAP_TBL_INC 0x10 32733122798SLuo Jie #define PPE_L0_FLOW_PORT_MAP_TBL_PORT_NUM GENMASK(3, 0) 32833122798SLuo Jie 32933122798SLuo Jie #define PPE_L0_COMP_CFG_TBL_ADDR 0x428000 33033122798SLuo Jie #define PPE_L0_COMP_CFG_TBL_ENTRIES 300 33133122798SLuo Jie #define PPE_L0_COMP_CFG_TBL_INC 0x10 33233122798SLuo Jie #define PPE_L0_COMP_CFG_TBL_SHAPER_METER_LEN GENMASK(1, 0) 33333122798SLuo Jie #define PPE_L0_COMP_CFG_TBL_NODE_METER_LEN GENMASK(3, 2) 33433122798SLuo Jie 335fa99608aSLuo Jie /* PPE queue to Ethernet DMA ring mapping table. */ 336fa99608aSLuo Jie #define PPE_RING_Q_MAP_TBL_ADDR 0x42a000 337fa99608aSLuo Jie #define PPE_RING_Q_MAP_TBL_ENTRIES 24 338fa99608aSLuo Jie #define PPE_RING_Q_MAP_TBL_INC 0x40 339fa99608aSLuo Jie 340806268dcSLuo Jie /* Table addresses for per-queue dequeue setting. */ 341806268dcSLuo Jie #define PPE_DEQ_OPR_TBL_ADDR 0x430000 342806268dcSLuo Jie #define PPE_DEQ_OPR_TBL_ENTRIES 300 343806268dcSLuo Jie #define PPE_DEQ_OPR_TBL_INC 0x10 344806268dcSLuo Jie #define PPE_DEQ_OPR_TBL_DEQ_DISABLE BIT(0) 345806268dcSLuo Jie 34633122798SLuo Jie /* PPE flow level scheduler configurations. */ 34733122798SLuo Jie #define PPE_L1_FLOW_MAP_TBL_ADDR 0x440000 34833122798SLuo Jie #define PPE_L1_FLOW_MAP_TBL_ENTRIES 64 34933122798SLuo Jie #define PPE_L1_FLOW_MAP_TBL_INC 0x10 35033122798SLuo Jie #define PPE_L1_FLOW_MAP_TBL_FLOW_ID GENMASK(3, 0) 35133122798SLuo Jie #define PPE_L1_FLOW_MAP_TBL_C_PRI GENMASK(6, 4) 35233122798SLuo Jie #define PPE_L1_FLOW_MAP_TBL_E_PRI GENMASK(9, 7) 35333122798SLuo Jie #define PPE_L1_FLOW_MAP_TBL_C_NODE_WT GENMASK(19, 10) 35433122798SLuo Jie #define PPE_L1_FLOW_MAP_TBL_E_NODE_WT GENMASK(29, 20) 35533122798SLuo Jie 35633122798SLuo Jie #define PPE_L1_C_FLOW_CFG_TBL_ADDR 0x442000 35733122798SLuo Jie #define PPE_L1_C_FLOW_CFG_TBL_ENTRIES 64 35833122798SLuo Jie #define PPE_L1_C_FLOW_CFG_TBL_INC 0x10 35933122798SLuo Jie #define PPE_L1_C_FLOW_CFG_TBL_NODE_ID GENMASK(5, 0) 36033122798SLuo Jie #define PPE_L1_C_FLOW_CFG_TBL_NODE_CREDIT_UNIT BIT(6) 36133122798SLuo Jie 36233122798SLuo Jie #define PPE_L1_E_FLOW_CFG_TBL_ADDR 0x444000 36333122798SLuo Jie #define PPE_L1_E_FLOW_CFG_TBL_ENTRIES 64 36433122798SLuo Jie #define PPE_L1_E_FLOW_CFG_TBL_INC 0x10 36533122798SLuo Jie #define PPE_L1_E_FLOW_CFG_TBL_NODE_ID GENMASK(5, 0) 36633122798SLuo Jie #define PPE_L1_E_FLOW_CFG_TBL_NODE_CREDIT_UNIT BIT(6) 36733122798SLuo Jie 36833122798SLuo Jie #define PPE_L1_FLOW_PORT_MAP_TBL_ADDR 0x446000 36933122798SLuo Jie #define PPE_L1_FLOW_PORT_MAP_TBL_ENTRIES 64 37033122798SLuo Jie #define PPE_L1_FLOW_PORT_MAP_TBL_INC 0x10 37133122798SLuo Jie #define PPE_L1_FLOW_PORT_MAP_TBL_PORT_NUM GENMASK(3, 0) 37233122798SLuo Jie 37333122798SLuo Jie #define PPE_L1_COMP_CFG_TBL_ADDR 0x46a000 37433122798SLuo Jie #define PPE_L1_COMP_CFG_TBL_ENTRIES 64 37533122798SLuo Jie #define PPE_L1_COMP_CFG_TBL_INC 0x10 37633122798SLuo Jie #define PPE_L1_COMP_CFG_TBL_SHAPER_METER_LEN GENMASK(1, 0) 37733122798SLuo Jie #define PPE_L1_COMP_CFG_TBL_NODE_METER_LEN GENMASK(3, 2) 37833122798SLuo Jie 37933122798SLuo Jie /* PPE port scheduler configurations for egress. */ 38033122798SLuo Jie #define PPE_PSCH_SCH_CFG_TBL_ADDR 0x47a000 38133122798SLuo Jie #define PPE_PSCH_SCH_CFG_TBL_ENTRIES 128 38233122798SLuo Jie #define PPE_PSCH_SCH_CFG_TBL_INC 0x10 38333122798SLuo Jie #define PPE_PSCH_SCH_CFG_TBL_DES_PORT GENMASK(3, 0) 38433122798SLuo Jie #define PPE_PSCH_SCH_CFG_TBL_ENS_PORT GENMASK(7, 4) 38533122798SLuo Jie #define PPE_PSCH_SCH_CFG_TBL_ENS_PORT_BITMAP GENMASK(15, 8) 38633122798SLuo Jie #define PPE_PSCH_SCH_CFG_TBL_DES_SECOND_PORT_EN BIT(16) 38733122798SLuo Jie #define PPE_PSCH_SCH_CFG_TBL_DES_SECOND_PORT GENMASK(20, 17) 38833122798SLuo Jie 3898a971df9SLuo Jie /* There are 15 BM ports and 4 BM groups supported by PPE. 3908a971df9SLuo Jie * BM port (0-7) is for EDMA port 0, BM port (8-13) is for 3918a971df9SLuo Jie * PPE physical port 1-6 and BM port 14 is for EIP port. 3928a971df9SLuo Jie */ 3938a971df9SLuo Jie #define PPE_BM_PORT_FC_MODE_ADDR 0x600100 3948a971df9SLuo Jie #define PPE_BM_PORT_FC_MODE_ENTRIES 15 3958a971df9SLuo Jie #define PPE_BM_PORT_FC_MODE_INC 0x4 3968a971df9SLuo Jie #define PPE_BM_PORT_FC_MODE_EN BIT(0) 3978a971df9SLuo Jie 3988a971df9SLuo Jie #define PPE_BM_PORT_GROUP_ID_ADDR 0x600180 3998a971df9SLuo Jie #define PPE_BM_PORT_GROUP_ID_ENTRIES 15 4008a971df9SLuo Jie #define PPE_BM_PORT_GROUP_ID_INC 0x4 4018a971df9SLuo Jie #define PPE_BM_PORT_GROUP_ID_SHARED_GROUP_ID GENMASK(1, 0) 4028a971df9SLuo Jie 403*a2a7221dSLuo Jie /* Counters for PPE buffers used for packets cached. */ 404*a2a7221dSLuo Jie #define PPE_BM_USED_CNT_TBL_ADDR 0x6001c0 405*a2a7221dSLuo Jie #define PPE_BM_USED_CNT_TBL_ENTRIES 15 406*a2a7221dSLuo Jie #define PPE_BM_USED_CNT_TBL_INC 0x4 407*a2a7221dSLuo Jie #define PPE_BM_USED_CNT_VAL GENMASK(10, 0) 408*a2a7221dSLuo Jie 409*a2a7221dSLuo Jie /* Counters for PPE buffers used for packets received after pause frame sent. */ 410*a2a7221dSLuo Jie #define PPE_BM_REACT_CNT_TBL_ADDR 0x600240 411*a2a7221dSLuo Jie #define PPE_BM_REACT_CNT_TBL_ENTRIES 15 412*a2a7221dSLuo Jie #define PPE_BM_REACT_CNT_TBL_INC 0x4 413*a2a7221dSLuo Jie #define PPE_BM_REACT_CNT_VAL GENMASK(8, 0) 414*a2a7221dSLuo Jie 4158a971df9SLuo Jie #define PPE_BM_SHARED_GROUP_CFG_ADDR 0x600290 4168a971df9SLuo Jie #define PPE_BM_SHARED_GROUP_CFG_ENTRIES 4 4178a971df9SLuo Jie #define PPE_BM_SHARED_GROUP_CFG_INC 0x4 4188a971df9SLuo Jie #define PPE_BM_SHARED_GROUP_CFG_SHARED_LIMIT GENMASK(10, 0) 4198a971df9SLuo Jie 4208a971df9SLuo Jie #define PPE_BM_PORT_FC_CFG_TBL_ADDR 0x601000 4218a971df9SLuo Jie #define PPE_BM_PORT_FC_CFG_TBL_ENTRIES 15 4228a971df9SLuo Jie #define PPE_BM_PORT_FC_CFG_TBL_INC 0x10 4238a971df9SLuo Jie #define PPE_BM_PORT_FC_W0_REACT_LIMIT GENMASK(8, 0) 4248a971df9SLuo Jie #define PPE_BM_PORT_FC_W0_RESUME_THRESHOLD GENMASK(17, 9) 4258a971df9SLuo Jie #define PPE_BM_PORT_FC_W0_RESUME_OFFSET GENMASK(28, 18) 4268a971df9SLuo Jie #define PPE_BM_PORT_FC_W0_CEILING_LOW GENMASK(31, 29) 4278a971df9SLuo Jie #define PPE_BM_PORT_FC_W1_CEILING_HIGH GENMASK(7, 0) 4288a971df9SLuo Jie #define PPE_BM_PORT_FC_W1_WEIGHT GENMASK(10, 8) 4298a971df9SLuo Jie #define PPE_BM_PORT_FC_W1_DYNAMIC BIT(11) 4308a971df9SLuo Jie #define PPE_BM_PORT_FC_W1_PRE_ALLOC GENMASK(22, 12) 4318a971df9SLuo Jie 4328a971df9SLuo Jie #define PPE_BM_PORT_FC_SET_REACT_LIMIT(tbl_cfg, value) \ 4338a971df9SLuo Jie FIELD_MODIFY(PPE_BM_PORT_FC_W0_REACT_LIMIT, tbl_cfg, value) 4348a971df9SLuo Jie #define PPE_BM_PORT_FC_SET_RESUME_THRESHOLD(tbl_cfg, value) \ 4358a971df9SLuo Jie FIELD_MODIFY(PPE_BM_PORT_FC_W0_RESUME_THRESHOLD, tbl_cfg, value) 4368a971df9SLuo Jie #define PPE_BM_PORT_FC_SET_RESUME_OFFSET(tbl_cfg, value) \ 4378a971df9SLuo Jie FIELD_MODIFY(PPE_BM_PORT_FC_W0_RESUME_OFFSET, tbl_cfg, value) 4388a971df9SLuo Jie #define PPE_BM_PORT_FC_SET_CEILING_LOW(tbl_cfg, value) \ 4398a971df9SLuo Jie FIELD_MODIFY(PPE_BM_PORT_FC_W0_CEILING_LOW, tbl_cfg, value) 4408a971df9SLuo Jie #define PPE_BM_PORT_FC_SET_CEILING_HIGH(tbl_cfg, value) \ 4418a971df9SLuo Jie FIELD_MODIFY(PPE_BM_PORT_FC_W1_CEILING_HIGH, (tbl_cfg) + 0x1, value) 4428a971df9SLuo Jie #define PPE_BM_PORT_FC_SET_WEIGHT(tbl_cfg, value) \ 4438a971df9SLuo Jie FIELD_MODIFY(PPE_BM_PORT_FC_W1_WEIGHT, (tbl_cfg) + 0x1, value) 4448a971df9SLuo Jie #define PPE_BM_PORT_FC_SET_DYNAMIC(tbl_cfg, value) \ 4458a971df9SLuo Jie FIELD_MODIFY(PPE_BM_PORT_FC_W1_DYNAMIC, (tbl_cfg) + 0x1, value) 4468a971df9SLuo Jie #define PPE_BM_PORT_FC_SET_PRE_ALLOC(tbl_cfg, value) \ 4478a971df9SLuo Jie FIELD_MODIFY(PPE_BM_PORT_FC_W1_PRE_ALLOC, (tbl_cfg) + 0x1, value) 448806268dcSLuo Jie 4497a23a8afSLuo Jie /* The queue base configurations based on destination port, 4507a23a8afSLuo Jie * service code or CPU code. 4517a23a8afSLuo Jie */ 4527a23a8afSLuo Jie #define PPE_UCAST_QUEUE_MAP_TBL_ADDR 0x810000 4537a23a8afSLuo Jie #define PPE_UCAST_QUEUE_MAP_TBL_ENTRIES 3072 4547a23a8afSLuo Jie #define PPE_UCAST_QUEUE_MAP_TBL_INC 0x10 4557a23a8afSLuo Jie #define PPE_UCAST_QUEUE_MAP_TBL_PROFILE_ID GENMASK(3, 0) 4567a23a8afSLuo Jie #define PPE_UCAST_QUEUE_MAP_TBL_QUEUE_ID GENMASK(11, 4) 4577a23a8afSLuo Jie 4587a23a8afSLuo Jie /* The queue offset configurations based on RSS hash value. */ 4597a23a8afSLuo Jie #define PPE_UCAST_HASH_MAP_TBL_ADDR 0x830000 4607a23a8afSLuo Jie #define PPE_UCAST_HASH_MAP_TBL_ENTRIES 4096 4617a23a8afSLuo Jie #define PPE_UCAST_HASH_MAP_TBL_INC 0x10 4627a23a8afSLuo Jie #define PPE_UCAST_HASH_MAP_TBL_HASH GENMASK(7, 0) 4637a23a8afSLuo Jie 4647a23a8afSLuo Jie /* The queue offset configurations based on PPE internal priority. */ 4657a23a8afSLuo Jie #define PPE_UCAST_PRIORITY_MAP_TBL_ADDR 0x842000 4667a23a8afSLuo Jie #define PPE_UCAST_PRIORITY_MAP_TBL_ENTRIES 256 4677a23a8afSLuo Jie #define PPE_UCAST_PRIORITY_MAP_TBL_INC 0x10 4687a23a8afSLuo Jie #define PPE_UCAST_PRIORITY_MAP_TBL_CLASS GENMASK(3, 0) 4697a23a8afSLuo Jie 470806268dcSLuo Jie /* PPE unicast queue (0-255) configurations. */ 471806268dcSLuo Jie #define PPE_AC_UNICAST_QUEUE_CFG_TBL_ADDR 0x848000 472806268dcSLuo Jie #define PPE_AC_UNICAST_QUEUE_CFG_TBL_ENTRIES 256 473806268dcSLuo Jie #define PPE_AC_UNICAST_QUEUE_CFG_TBL_INC 0x10 474806268dcSLuo Jie #define PPE_AC_UNICAST_QUEUE_CFG_W0_EN BIT(0) 475806268dcSLuo Jie #define PPE_AC_UNICAST_QUEUE_CFG_W0_WRED_EN BIT(1) 476806268dcSLuo Jie #define PPE_AC_UNICAST_QUEUE_CFG_W0_FC_EN BIT(2) 477806268dcSLuo Jie #define PPE_AC_UNICAST_QUEUE_CFG_W0_CLR_AWARE BIT(3) 478806268dcSLuo Jie #define PPE_AC_UNICAST_QUEUE_CFG_W0_GRP_ID GENMASK(5, 4) 479806268dcSLuo Jie #define PPE_AC_UNICAST_QUEUE_CFG_W0_PRE_LIMIT GENMASK(16, 6) 480806268dcSLuo Jie #define PPE_AC_UNICAST_QUEUE_CFG_W0_DYNAMIC BIT(17) 481806268dcSLuo Jie #define PPE_AC_UNICAST_QUEUE_CFG_W0_WEIGHT GENMASK(20, 18) 482806268dcSLuo Jie #define PPE_AC_UNICAST_QUEUE_CFG_W0_THRESHOLD GENMASK(31, 21) 483806268dcSLuo Jie #define PPE_AC_UNICAST_QUEUE_CFG_W3_GRN_RESUME GENMASK(23, 13) 484806268dcSLuo Jie 485806268dcSLuo Jie #define PPE_AC_UNICAST_QUEUE_SET_EN(tbl_cfg, value) \ 486806268dcSLuo Jie FIELD_MODIFY(PPE_AC_UNICAST_QUEUE_CFG_W0_EN, tbl_cfg, value) 487806268dcSLuo Jie #define PPE_AC_UNICAST_QUEUE_SET_GRP_ID(tbl_cfg, value) \ 488806268dcSLuo Jie FIELD_MODIFY(PPE_AC_UNICAST_QUEUE_CFG_W0_GRP_ID, tbl_cfg, value) 489806268dcSLuo Jie #define PPE_AC_UNICAST_QUEUE_SET_PRE_LIMIT(tbl_cfg, value) \ 490806268dcSLuo Jie FIELD_MODIFY(PPE_AC_UNICAST_QUEUE_CFG_W0_PRE_LIMIT, tbl_cfg, value) 491806268dcSLuo Jie #define PPE_AC_UNICAST_QUEUE_SET_DYNAMIC(tbl_cfg, value) \ 492806268dcSLuo Jie FIELD_MODIFY(PPE_AC_UNICAST_QUEUE_CFG_W0_DYNAMIC, tbl_cfg, value) 493806268dcSLuo Jie #define PPE_AC_UNICAST_QUEUE_SET_WEIGHT(tbl_cfg, value) \ 494806268dcSLuo Jie FIELD_MODIFY(PPE_AC_UNICAST_QUEUE_CFG_W0_WEIGHT, tbl_cfg, value) 495806268dcSLuo Jie #define PPE_AC_UNICAST_QUEUE_SET_THRESHOLD(tbl_cfg, value) \ 496806268dcSLuo Jie FIELD_MODIFY(PPE_AC_UNICAST_QUEUE_CFG_W0_THRESHOLD, tbl_cfg, value) 497806268dcSLuo Jie #define PPE_AC_UNICAST_QUEUE_SET_GRN_RESUME(tbl_cfg, value) \ 498806268dcSLuo Jie FIELD_MODIFY(PPE_AC_UNICAST_QUEUE_CFG_W3_GRN_RESUME, (tbl_cfg) + 0x3, value) 499806268dcSLuo Jie 500806268dcSLuo Jie /* PPE multicast queue (256-299) configurations. */ 501806268dcSLuo Jie #define PPE_AC_MULTICAST_QUEUE_CFG_TBL_ADDR 0x84a000 502806268dcSLuo Jie #define PPE_AC_MULTICAST_QUEUE_CFG_TBL_ENTRIES 44 503806268dcSLuo Jie #define PPE_AC_MULTICAST_QUEUE_CFG_TBL_INC 0x10 504806268dcSLuo Jie #define PPE_AC_MULTICAST_QUEUE_CFG_W0_EN BIT(0) 505806268dcSLuo Jie #define PPE_AC_MULTICAST_QUEUE_CFG_W0_FC_EN BIT(1) 506806268dcSLuo Jie #define PPE_AC_MULTICAST_QUEUE_CFG_W0_CLR_AWARE BIT(2) 507806268dcSLuo Jie #define PPE_AC_MULTICAST_QUEUE_CFG_W0_GRP_ID GENMASK(4, 3) 508806268dcSLuo Jie #define PPE_AC_MULTICAST_QUEUE_CFG_W0_PRE_LIMIT GENMASK(15, 5) 509806268dcSLuo Jie #define PPE_AC_MULTICAST_QUEUE_CFG_W0_THRESHOLD GENMASK(26, 16) 510806268dcSLuo Jie #define PPE_AC_MULTICAST_QUEUE_CFG_W2_RESUME GENMASK(17, 7) 511806268dcSLuo Jie 512806268dcSLuo Jie #define PPE_AC_MULTICAST_QUEUE_SET_EN(tbl_cfg, value) \ 513806268dcSLuo Jie FIELD_MODIFY(PPE_AC_MULTICAST_QUEUE_CFG_W0_EN, tbl_cfg, value) 514806268dcSLuo Jie #define PPE_AC_MULTICAST_QUEUE_SET_GRN_GRP_ID(tbl_cfg, value) \ 515806268dcSLuo Jie FIELD_MODIFY(PPE_AC_MULTICAST_QUEUE_CFG_W0_GRP_ID, tbl_cfg, value) 516806268dcSLuo Jie #define PPE_AC_MULTICAST_QUEUE_SET_GRN_PRE_LIMIT(tbl_cfg, value) \ 517806268dcSLuo Jie FIELD_MODIFY(PPE_AC_MULTICAST_QUEUE_CFG_W0_PRE_LIMIT, tbl_cfg, value) 518806268dcSLuo Jie #define PPE_AC_MULTICAST_QUEUE_SET_GRN_THRESHOLD(tbl_cfg, value) \ 519806268dcSLuo Jie FIELD_MODIFY(PPE_AC_MULTICAST_QUEUE_CFG_W0_THRESHOLD, tbl_cfg, value) 520806268dcSLuo Jie #define PPE_AC_MULTICAST_QUEUE_SET_GRN_RESUME(tbl_cfg, value) \ 521806268dcSLuo Jie FIELD_MODIFY(PPE_AC_MULTICAST_QUEUE_CFG_W2_RESUME, (tbl_cfg) + 0x2, value) 522806268dcSLuo Jie 523806268dcSLuo Jie /* PPE admission control group (0-3) configurations */ 524806268dcSLuo Jie #define PPE_AC_GRP_CFG_TBL_ADDR 0x84c000 525806268dcSLuo Jie #define PPE_AC_GRP_CFG_TBL_ENTRIES 0x4 526806268dcSLuo Jie #define PPE_AC_GRP_CFG_TBL_INC 0x10 527806268dcSLuo Jie #define PPE_AC_GRP_W0_AC_EN BIT(0) 528806268dcSLuo Jie #define PPE_AC_GRP_W0_AC_FC_EN BIT(1) 529806268dcSLuo Jie #define PPE_AC_GRP_W0_CLR_AWARE BIT(2) 530806268dcSLuo Jie #define PPE_AC_GRP_W0_THRESHOLD_LOW GENMASK(31, 25) 531806268dcSLuo Jie #define PPE_AC_GRP_W1_THRESHOLD_HIGH GENMASK(3, 0) 532806268dcSLuo Jie #define PPE_AC_GRP_W1_BUF_LIMIT GENMASK(14, 4) 533806268dcSLuo Jie #define PPE_AC_GRP_W2_RESUME_GRN GENMASK(15, 5) 534806268dcSLuo Jie #define PPE_AC_GRP_W2_PRE_ALLOC GENMASK(26, 16) 535806268dcSLuo Jie 536806268dcSLuo Jie #define PPE_AC_GRP_SET_BUF_LIMIT(tbl_cfg, value) \ 537806268dcSLuo Jie FIELD_MODIFY(PPE_AC_GRP_W1_BUF_LIMIT, (tbl_cfg) + 0x1, value) 538806268dcSLuo Jie 539*a2a7221dSLuo Jie /* Counters for packets handled by unicast queues (0-255). */ 540*a2a7221dSLuo Jie #define PPE_AC_UNICAST_QUEUE_CNT_TBL_ADDR 0x84e000 541*a2a7221dSLuo Jie #define PPE_AC_UNICAST_QUEUE_CNT_TBL_ENTRIES 256 542*a2a7221dSLuo Jie #define PPE_AC_UNICAST_QUEUE_CNT_TBL_INC 0x10 543*a2a7221dSLuo Jie #define PPE_AC_UNICAST_QUEUE_CNT_TBL_PEND_CNT GENMASK(12, 0) 544*a2a7221dSLuo Jie 545*a2a7221dSLuo Jie /* Counters for packets handled by multicast queues (256-299). */ 546*a2a7221dSLuo Jie #define PPE_AC_MULTICAST_QUEUE_CNT_TBL_ADDR 0x852000 547*a2a7221dSLuo Jie #define PPE_AC_MULTICAST_QUEUE_CNT_TBL_ENTRIES 44 548*a2a7221dSLuo Jie #define PPE_AC_MULTICAST_QUEUE_CNT_TBL_INC 0x10 549*a2a7221dSLuo Jie #define PPE_AC_MULTICAST_QUEUE_CNT_TBL_PEND_CNT GENMASK(12, 0) 550*a2a7221dSLuo Jie 551806268dcSLuo Jie /* Table addresses for per-queue enqueue setting. */ 552806268dcSLuo Jie #define PPE_ENQ_OPR_TBL_ADDR 0x85c000 553806268dcSLuo Jie #define PPE_ENQ_OPR_TBL_ENTRIES 300 554806268dcSLuo Jie #define PPE_ENQ_OPR_TBL_INC 0x10 555806268dcSLuo Jie #define PPE_ENQ_OPR_TBL_ENQ_DISABLE BIT(0) 556*a2a7221dSLuo Jie 557*a2a7221dSLuo Jie /* Unicast drop count includes the possible drops with WRED for the green, 558*a2a7221dSLuo Jie * yellow and red categories. 559*a2a7221dSLuo Jie */ 560*a2a7221dSLuo Jie #define PPE_UNICAST_DROP_CNT_TBL_ADDR 0x9e0000 561*a2a7221dSLuo Jie #define PPE_UNICAST_DROP_CNT_TBL_ENTRIES 1536 562*a2a7221dSLuo Jie #define PPE_UNICAST_DROP_CNT_TBL_INC 0x10 563*a2a7221dSLuo Jie #define PPE_UNICAST_DROP_TYPES 6 564*a2a7221dSLuo Jie #define PPE_UNICAST_DROP_FORCE_OFFSET 3 565*a2a7221dSLuo Jie 566*a2a7221dSLuo Jie /* There are 16 multicast queues dedicated to CPU port 0. Multicast drop 567*a2a7221dSLuo Jie * count includes the force drop for green, yellow and red category packets. 568*a2a7221dSLuo Jie */ 569*a2a7221dSLuo Jie #define PPE_P0_MULTICAST_DROP_CNT_TBL_ADDR 0x9f0000 570*a2a7221dSLuo Jie #define PPE_P0_MULTICAST_DROP_CNT_TBL_ENTRIES 48 571*a2a7221dSLuo Jie #define PPE_P0_MULTICAST_DROP_CNT_TBL_INC 0x10 572*a2a7221dSLuo Jie #define PPE_P0_MULTICAST_QUEUE_NUM 16 573*a2a7221dSLuo Jie 574*a2a7221dSLuo Jie /* Each PPE physical port has four dedicated multicast queues, providing 575*a2a7221dSLuo Jie * a total of 12 entries per port. The multicast drop count includes forced 576*a2a7221dSLuo Jie * drops for green, yellow, and red category packets. 577*a2a7221dSLuo Jie */ 578*a2a7221dSLuo Jie #define PPE_MULTICAST_QUEUE_PORT_ADDR_INC 0x1000 579*a2a7221dSLuo Jie #define PPE_MULTICAST_DROP_CNT_TBL_INC 0x10 580*a2a7221dSLuo Jie #define PPE_MULTICAST_DROP_TYPES 3 581*a2a7221dSLuo Jie #define PPE_MULTICAST_QUEUE_NUM 4 582*a2a7221dSLuo Jie #define PPE_MULTICAST_DROP_CNT_TBL_ENTRIES 12 583*a2a7221dSLuo Jie 584*a2a7221dSLuo Jie #define PPE_CPU_PORT_MULTICAST_FORCE_DROP_CNT_TBL_ADDR(mq_offset) \ 585*a2a7221dSLuo Jie (PPE_P0_MULTICAST_DROP_CNT_TBL_ADDR + \ 586*a2a7221dSLuo Jie (mq_offset) * PPE_P0_MULTICAST_DROP_CNT_TBL_INC * \ 587*a2a7221dSLuo Jie PPE_MULTICAST_DROP_TYPES) 588*a2a7221dSLuo Jie 589*a2a7221dSLuo Jie #define PPE_P1_MULTICAST_DROP_CNT_TBL_ADDR \ 590*a2a7221dSLuo Jie (PPE_P0_MULTICAST_DROP_CNT_TBL_ADDR + PPE_MULTICAST_QUEUE_PORT_ADDR_INC) 5918a971df9SLuo Jie #endif 592