xref: /linux/drivers/net/ethernet/freescale/enetc/enetc4_hw.h (revision 1b98f357dadd6ea613a435fbaef1a5dd7b35fd21)
199100d0dSWei Fang /* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */
299100d0dSWei Fang /*
399100d0dSWei Fang  * This header file defines the register offsets and bit fields
499100d0dSWei Fang  * of ENETC4 PF and VFs. Note that the same registers as ENETC
599100d0dSWei Fang  * version 1.0 are defined in the enetc_hw.h file.
699100d0dSWei Fang  *
799100d0dSWei Fang  * Copyright 2024 NXP
899100d0dSWei Fang  */
999100d0dSWei Fang #ifndef __ENETC4_HW_H_
1099100d0dSWei Fang #define __ENETC4_HW_H_
1199100d0dSWei Fang 
1299100d0dSWei Fang #define NXP_ENETC_VENDOR_ID		0x1131
1399100d0dSWei Fang #define NXP_ENETC_PF_DEV_ID		0xe101
1499100d0dSWei Fang 
1569797ff8SWei Fang /**********************Station interface registers************************/
1669797ff8SWei Fang /* Station interface LSO segmentation flag mask register 0/1 */
1769797ff8SWei Fang #define ENETC4_SILSOSFMR0		0x1300
1869797ff8SWei Fang #define  SILSOSFMR0_TCP_MID_SEG		GENMASK(27, 16)
1969797ff8SWei Fang #define  SILSOSFMR0_TCP_1ST_SEG		GENMASK(11, 0)
2069797ff8SWei Fang #define  SILSOSFMR0_VAL_SET(first, mid)	(FIELD_PREP(SILSOSFMR0_TCP_MID_SEG, mid) | \
2169797ff8SWei Fang 					 FIELD_PREP(SILSOSFMR0_TCP_1ST_SEG, first))
2269797ff8SWei Fang 
2369797ff8SWei Fang #define ENETC4_SILSOSFMR1		0x1304
2469797ff8SWei Fang #define  SILSOSFMR1_TCP_LAST_SEG	GENMASK(11, 0)
2569797ff8SWei Fang #define   ENETC4_TCP_FLAGS_FIN		BIT(0)
2669797ff8SWei Fang #define   ENETC4_TCP_FLAGS_SYN		BIT(1)
2769797ff8SWei Fang #define   ENETC4_TCP_FLAGS_RST		BIT(2)
2869797ff8SWei Fang #define   ENETC4_TCP_FLAGS_PSH		BIT(3)
2969797ff8SWei Fang #define   ENETC4_TCP_FLAGS_ACK		BIT(4)
3069797ff8SWei Fang #define   ENETC4_TCP_FLAGS_URG		BIT(5)
3169797ff8SWei Fang #define   ENETC4_TCP_FLAGS_ECE		BIT(6)
3269797ff8SWei Fang #define   ENETC4_TCP_FLAGS_CWR		BIT(7)
3369797ff8SWei Fang #define   ENETC4_TCP_FLAGS_NS		BIT(8)
3469797ff8SWei Fang /* According to tso_build_hdr(), clear all special flags for not last packet. */
3569797ff8SWei Fang #define ENETC4_TCP_NL_SEG_FLAGS_DMASK	(ENETC4_TCP_FLAGS_FIN | \
3669797ff8SWei Fang 					 ENETC4_TCP_FLAGS_RST | ENETC4_TCP_FLAGS_PSH)
3769797ff8SWei Fang 
3899100d0dSWei Fang /***************************ENETC port registers**************************/
3999100d0dSWei Fang #define ENETC4_ECAPR0			0x0
4099100d0dSWei Fang #define  ECAPR0_RFS			BIT(2)
4199100d0dSWei Fang #define  ECAPR0_TSD			BIT(5)
4299100d0dSWei Fang #define  ECAPR0_RSS			BIT(8)
4399100d0dSWei Fang #define  ECAPR0_RSC			BIT(9)
4499100d0dSWei Fang #define  ECAPR0_LSO			BIT(10)
4599100d0dSWei Fang #define  ECAPR0_WO			BIT(13)
4699100d0dSWei Fang 
4799100d0dSWei Fang #define ENETC4_ECAPR1			0x4
4899100d0dSWei Fang #define  ECAPR1_NUM_TCS			GENMASK(6, 4)
4999100d0dSWei Fang #define  ECAPR1_NUM_MCH			GENMASK(9, 8)
5099100d0dSWei Fang #define  ECAPR1_NUM_UCH			GENMASK(11, 10)
5199100d0dSWei Fang #define  ECAPR1_NUM_MSIX		GENMASK(22, 12)
5299100d0dSWei Fang #define  ECAPR1_NUM_VSI			GENMASK(27, 24)
5399100d0dSWei Fang #define  ECAPR1_NUM_IPV			BIT(31)
5499100d0dSWei Fang 
5599100d0dSWei Fang #define ENETC4_ECAPR2			0x8
5699100d0dSWei Fang #define  ECAPR2_NUM_TX_BDR		GENMASK(9, 0)
5799100d0dSWei Fang #define  ECAPR2_NUM_RX_BDR		GENMASK(25, 16)
5899100d0dSWei Fang 
5999100d0dSWei Fang #define ENETC4_PMR			0x10
6099100d0dSWei Fang #define  PMR_SI_EN(a)			BIT((16 + (a)))
6199100d0dSWei Fang 
6299100d0dSWei Fang /* Port Pause ON/OFF threshold register */
6399100d0dSWei Fang #define ENETC4_PPAUONTR			0x108
6499100d0dSWei Fang #define ENETC4_PPAUOFFTR		0x10c
6599100d0dSWei Fang 
6699100d0dSWei Fang /* Port Station interface promiscuous MAC mode register */
6799100d0dSWei Fang #define ENETC4_PSIPMMR			0x200
6899100d0dSWei Fang #define  PSIPMMR_SI_MAC_UP(a)		BIT(a) /* a = SI index */
6999100d0dSWei Fang #define  PSIPMMR_SI_MAC_MP(a)		BIT((a) + 16)
7099100d0dSWei Fang 
7199100d0dSWei Fang /* Port Station interface promiscuous VLAN mode register */
7299100d0dSWei Fang #define ENETC4_PSIPVMR			0x204
7399100d0dSWei Fang 
7499100d0dSWei Fang /* Port RSS key register n. n = 0,1,2,...,9 */
7599100d0dSWei Fang #define ENETC4_PRSSKR(n)		((n) * 0x4 + 0x250)
7699100d0dSWei Fang 
7799100d0dSWei Fang /* Port station interface MAC address filtering capability register */
7899100d0dSWei Fang #define ENETC4_PSIMAFCAPR		0x280
7999100d0dSWei Fang #define  PSIMAFCAPR_NUM_MAC_AFTE	GENMASK(11, 0)
8099100d0dSWei Fang 
8199100d0dSWei Fang /* Port station interface VLAN filtering capability register */
8299100d0dSWei Fang #define ENETC4_PSIVLANFCAPR		0x2c0
8399100d0dSWei Fang #define  PSIVLANFCAPR_NUM_VLAN_FTE	GENMASK(11, 0)
8499100d0dSWei Fang 
8599100d0dSWei Fang /* Port station interface VLAN filtering mode register */
8699100d0dSWei Fang #define ENETC4_PSIVLANFMR		0x2c4
8799100d0dSWei Fang #define  PSIVLANFMR_VS			BIT(0)
8899100d0dSWei Fang 
8999100d0dSWei Fang /* Port Station interface a primary MAC address registers */
9099100d0dSWei Fang #define ENETC4_PSIPMAR0(a)		((a) * 0x80 + 0x2000)
9199100d0dSWei Fang #define ENETC4_PSIPMAR1(a)		((a) * 0x80 + 0x2004)
9299100d0dSWei Fang 
9399100d0dSWei Fang /* Port station interface a configuration register 0/2 */
9499100d0dSWei Fang #define ENETC4_PSICFGR0(a)		((a) * 0x80 + 0x2010)
9599100d0dSWei Fang #define  PSICFGR0_VASE			BIT(13)
9699100d0dSWei Fang #define  PSICFGR0_ASE			BIT(15)
9799100d0dSWei Fang #define  PSICFGR0_ANTI_SPOOFING		(PSICFGR0_VASE | PSICFGR0_ASE)
9899100d0dSWei Fang 
9999100d0dSWei Fang #define ENETC4_PSICFGR2(a)		((a) * 0x80 + 0x2018)
10099100d0dSWei Fang #define  PSICFGR2_NUM_MSIX		GENMASK(5, 0)
10199100d0dSWei Fang 
1026c5bafbaSWei Fang /* Port station interface a unicast MAC hash filter register 0/1 */
1036c5bafbaSWei Fang #define ENETC4_PSIUMHFR0(a)		((a) * 0x80 + 0x2050)
1046c5bafbaSWei Fang #define ENETC4_PSIUMHFR1(a)		((a) * 0x80 + 0x2054)
1056c5bafbaSWei Fang 
1066c5bafbaSWei Fang /* Port station interface a multicast MAC hash filter register 0/1 */
1076c5bafbaSWei Fang #define ENETC4_PSIMMHFR0(a)		((a) * 0x80 + 0x2058)
1086c5bafbaSWei Fang #define ENETC4_PSIMMHFR1(a)		((a) * 0x80 + 0x205c)
1096c5bafbaSWei Fang 
110*f7d30ef6SWei Fang /* Port station interface a VLAN hash filter register 0/1 */
111*f7d30ef6SWei Fang #define ENETC4_PSIVHFR0(a)		((a) * 0x80 + 0x2060)
112*f7d30ef6SWei Fang #define ENETC4_PSIVHFR1(a)		((a) * 0x80 + 0x2064)
113*f7d30ef6SWei Fang 
11499100d0dSWei Fang #define ENETC4_PMCAPR			0x4004
11599100d0dSWei Fang #define  PMCAPR_HD			BIT(8)
11699100d0dSWei Fang #define  PMCAPR_FP			GENMASK(10, 9)
11799100d0dSWei Fang 
11899100d0dSWei Fang /* Port configuration register */
11999100d0dSWei Fang #define ENETC4_PCR			0x4010
12099100d0dSWei Fang #define  PCR_HDR_FMT			BIT(0)
12199100d0dSWei Fang #define  PCR_L2DOSE			BIT(4)
12299100d0dSWei Fang #define  PCR_TIMER_CS			BIT(8)
12399100d0dSWei Fang #define  PCR_PSPEED			GENMASK(29, 16)
12499100d0dSWei Fang #define  PCR_PSPEED_VAL(speed)		(((speed) / 10 - 1) << 16)
12599100d0dSWei Fang 
12699100d0dSWei Fang /* Port MAC address register 0/1 */
12799100d0dSWei Fang #define ENETC4_PMAR0			0x4020
12899100d0dSWei Fang #define ENETC4_PMAR1			0x4024
12999100d0dSWei Fang 
13099100d0dSWei Fang /* Port operational register */
13199100d0dSWei Fang #define ENETC4_POR			0x4100
13299100d0dSWei Fang 
13399100d0dSWei Fang /* Port traffic class a transmit maximum SDU register */
13499100d0dSWei Fang #define ENETC4_PTCTMSDUR(a)		((a) * 0x20 + 0x4208)
13599100d0dSWei Fang #define  PTCTMSDUR_MAXSDU		GENMASK(15, 0)
13699100d0dSWei Fang #define  PTCTMSDUR_SDU_TYPE		GENMASK(17, 16)
13799100d0dSWei Fang #define   SDU_TYPE_PPDU			0
13899100d0dSWei Fang #define   SDU_TYPE_MPDU			1
13999100d0dSWei Fang #define   SDU_TYPE_MSDU			2
14099100d0dSWei Fang 
14199100d0dSWei Fang #define ENETC4_PMAC_OFFSET		0x400
14299100d0dSWei Fang #define ENETC4_PM_CMD_CFG(mac)		(0x5008 + (mac) * 0x400)
14399100d0dSWei Fang #define  PM_CMD_CFG_TX_EN		BIT(0)
14499100d0dSWei Fang #define  PM_CMD_CFG_RX_EN		BIT(1)
14599100d0dSWei Fang #define  PM_CMD_CFG_PAUSE_FWD		BIT(7)
14699100d0dSWei Fang #define  PM_CMD_CFG_PAUSE_IGN		BIT(8)
14799100d0dSWei Fang #define  PM_CMD_CFG_TX_ADDR_INS		BIT(9)
14899100d0dSWei Fang #define  PM_CMD_CFG_LOOP_EN		BIT(10)
14999100d0dSWei Fang #define  PM_CMD_CFG_LPBK_MODE		GENMASK(12, 11)
15099100d0dSWei Fang #define   LPBCK_MODE_EXT_TX_CLK		0
15199100d0dSWei Fang #define   LPBCK_MODE_MAC_LEVEL		1
15299100d0dSWei Fang #define   LPBCK_MODE_INT_TX_CLK		2
15399100d0dSWei Fang #define  PM_CMD_CFG_CNT_FRM_EN		BIT(13)
15499100d0dSWei Fang #define  PM_CMD_CFG_TXP			BIT(15)
15599100d0dSWei Fang #define  PM_CMD_CFG_SEND_IDLE		BIT(16)
15699100d0dSWei Fang #define  PM_CMD_CFG_HD_FCEN		BIT(18)
15799100d0dSWei Fang #define  PM_CMD_CFG_SFD			BIT(21)
15899100d0dSWei Fang #define  PM_CMD_CFG_TX_FLUSH		BIT(22)
15999100d0dSWei Fang #define  PM_CMD_CFG_TX_LOWP_EN		BIT(23)
16099100d0dSWei Fang #define  PM_CMD_CFG_RX_LOWP_EMPTY	BIT(24)
16199100d0dSWei Fang #define  PM_CMD_CFG_SWR			BIT(26)
16299100d0dSWei Fang #define  PM_CMD_CFG_TS_MODE		BIT(30)
16399100d0dSWei Fang #define  PM_CMD_CFG_MG			BIT(31)
16499100d0dSWei Fang 
16599100d0dSWei Fang /* Port MAC 0/1 Maximum Frame Length Register */
16699100d0dSWei Fang #define ENETC4_PM_MAXFRM(mac)		(0x5014 + (mac) * 0x400)
16799100d0dSWei Fang 
16899100d0dSWei Fang /* Port MAC 0/1 Pause Quanta Register */
16999100d0dSWei Fang #define ENETC4_PM_PAUSE_QUANTA(mac)	(0x5054 + (mac) * 0x400)
17099100d0dSWei Fang 
17199100d0dSWei Fang /* Port MAC 0/1 Pause Quanta Threshold Register */
17299100d0dSWei Fang #define ENETC4_PM_PAUSE_THRESH(mac)	(0x5064 + (mac) * 0x400)
17399100d0dSWei Fang 
17499100d0dSWei Fang /* Port MAC 0 Interface Mode Control Register */
17599100d0dSWei Fang #define ENETC4_PM_IF_MODE(mac)		(0x5300 + (mac) * 0x400)
17699100d0dSWei Fang #define  PM_IF_MODE_IFMODE		GENMASK(2, 0)
17799100d0dSWei Fang #define   IFMODE_XGMII			0
17899100d0dSWei Fang #define   IFMODE_RMII			3
17999100d0dSWei Fang #define   IFMODE_RGMII			4
18099100d0dSWei Fang #define   IFMODE_SGMII			5
18199100d0dSWei Fang #define  PM_IF_MODE_REVMII		BIT(3)
18299100d0dSWei Fang #define  PM_IF_MODE_M10			BIT(4)
18399100d0dSWei Fang #define  PM_IF_MODE_HD			BIT(6)
18499100d0dSWei Fang #define  PM_IF_MODE_SSP			GENMASK(14, 13)
18599100d0dSWei Fang #define   SSP_100M			0
18699100d0dSWei Fang #define   SSP_10M			1
18799100d0dSWei Fang #define   SSP_1G			2
18899100d0dSWei Fang #define  PM_IF_MODE_ENA			BIT(15)
18999100d0dSWei Fang 
19099100d0dSWei Fang #endif
191