xref: /linux/drivers/net/ethernet/qualcomm/ppe/ppe_regs.h (revision 07fdad3a93756b872da7b53647715c48d0f4a2d0)
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