xref: /freebsd/sys/dev/enetc/enetc_hw.h (revision 19aa95e4)
119aa95e4SMarcin Wojtas /* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */
219aa95e4SMarcin Wojtas /* Copyright 2017-2019 NXP */
319aa95e4SMarcin Wojtas #ifndef _ENETC_HW_H_
419aa95e4SMarcin Wojtas #define _ENETC_HW_H_
519aa95e4SMarcin Wojtas 
619aa95e4SMarcin Wojtas #include <sys/cdefs.h>
719aa95e4SMarcin Wojtas 
819aa95e4SMarcin Wojtas #include <sys/param.h>
919aa95e4SMarcin Wojtas 
1019aa95e4SMarcin Wojtas #define BIT(x)	(1UL << (x))
1119aa95e4SMarcin Wojtas #define GENMASK(h, l)	(((~0U) - (1U << (l)) + 1) & (~0U >> (32 - 1 - (h))))
1219aa95e4SMarcin Wojtas #define ilog2(x)	(flsl(x) - 1)
1319aa95e4SMarcin Wojtas 
1419aa95e4SMarcin Wojtas #define PCI_VENDOR_FREESCALE	0x1957
1519aa95e4SMarcin Wojtas 
1619aa95e4SMarcin Wojtas /* ENETC device IDs */
1719aa95e4SMarcin Wojtas #define ENETC_DEV_ID_PF		0xe100
1819aa95e4SMarcin Wojtas #define ENETC_DEV_ID_VF		0xef00
1919aa95e4SMarcin Wojtas #define ENETC_DEV_ID_PTP	0xee02
2019aa95e4SMarcin Wojtas 
2119aa95e4SMarcin Wojtas /* ENETC register block BAR */
2219aa95e4SMarcin Wojtas #define ENETC_BAR_REGS	0
2319aa95e4SMarcin Wojtas 
2419aa95e4SMarcin Wojtas /** SI regs, offset: 0h */
2519aa95e4SMarcin Wojtas #define ENETC_SIMR	0
2619aa95e4SMarcin Wojtas #define ENETC_SIMR_EN	BIT(31)
2719aa95e4SMarcin Wojtas #define ENETC_SIMR_DRXG	BIT(16)
2819aa95e4SMarcin Wojtas #define ENETC_SIMR_RSSE	BIT(0)
2919aa95e4SMarcin Wojtas #define ENETC_SICTR0	0x18
3019aa95e4SMarcin Wojtas #define ENETC_SICTR1	0x1c
3119aa95e4SMarcin Wojtas #define ENETC_SIPCAPR0	0x20
3219aa95e4SMarcin Wojtas #define ENETC_SIPCAPR0_QBV	BIT(4)
3319aa95e4SMarcin Wojtas #define ENETC_SIPCAPR0_PSFP	BIT(9)
3419aa95e4SMarcin Wojtas #define ENETC_SIPCAPR0_RSS	BIT(8)
3519aa95e4SMarcin Wojtas #define ENETC_SIPCAPR1	0x24
3619aa95e4SMarcin Wojtas #define ENETC_SITGTGR	0x30
3719aa95e4SMarcin Wojtas #define ENETC_SIRBGCR	0x38
3819aa95e4SMarcin Wojtas /* cache attribute registers for transactions initiated by ENETC */
3919aa95e4SMarcin Wojtas #define ENETC_SICAR0	0x40
4019aa95e4SMarcin Wojtas #define ENETC_SICAR1	0x44
4119aa95e4SMarcin Wojtas #define ENETC_SICAR2	0x48
4219aa95e4SMarcin Wojtas /* rd snoop, no alloc
4319aa95e4SMarcin Wojtas  * wr snoop, no alloc, partial cache line update for BDs and full cache line
4419aa95e4SMarcin Wojtas  * update for data
4519aa95e4SMarcin Wojtas  */
4619aa95e4SMarcin Wojtas #define ENETC_SICAR_RD_COHERENT	0x2b2b0000
4719aa95e4SMarcin Wojtas #define ENETC_SICAR_WR_COHERENT	0x00006727
4819aa95e4SMarcin Wojtas #define ENETC_SICAR_MSI	0x00300030 /* rd/wr device, no snoop, no alloc */
4919aa95e4SMarcin Wojtas 
5019aa95e4SMarcin Wojtas #define ENETC_SIPMAR0	0x80
5119aa95e4SMarcin Wojtas #define ENETC_SIPMAR1	0x84
5219aa95e4SMarcin Wojtas 
5319aa95e4SMarcin Wojtas /* VF-PF Message passing */
5419aa95e4SMarcin Wojtas #define ENETC_DEFAULT_MSG_SIZE	1024	/* and max size */
5519aa95e4SMarcin Wojtas 
5619aa95e4SMarcin Wojtas #define ENETC_PSIMSGRR	0x204
5719aa95e4SMarcin Wojtas #define ENETC_PSIMSGRR_MR_MASK	GENMASK(2, 1)
5819aa95e4SMarcin Wojtas #define ENETC_PSIMSGRR_MR(n) BIT((n) + 1) /* n = VSI index */
5919aa95e4SMarcin Wojtas #define ENETC_PSIVMSGRCVAR0(n)	(0x210 + (n) * 0x8) /* n = VSI index */
6019aa95e4SMarcin Wojtas #define ENETC_PSIVMSGRCVAR1(n)	(0x214 + (n) * 0x8)
6119aa95e4SMarcin Wojtas 
6219aa95e4SMarcin Wojtas #define ENETC_VSIMSGSR	0x204	/* RO */
6319aa95e4SMarcin Wojtas #define ENETC_VSIMSGSR_MB	BIT(0)
6419aa95e4SMarcin Wojtas #define ENETC_VSIMSGSR_MS	BIT(1)
6519aa95e4SMarcin Wojtas #define ENETC_VSIMSGSNDAR0	0x210
6619aa95e4SMarcin Wojtas #define ENETC_VSIMSGSNDAR1	0x214
6719aa95e4SMarcin Wojtas 
6819aa95e4SMarcin Wojtas #define ENETC_SIMSGSR_SET_MC(val) ((val) << 16)
6919aa95e4SMarcin Wojtas #define ENETC_SIMSGSR_GET_MC(val) ((val) >> 16)
7019aa95e4SMarcin Wojtas 
7119aa95e4SMarcin Wojtas /* SI statistics */
7219aa95e4SMarcin Wojtas #define ENETC_SIROCT	0x300
7319aa95e4SMarcin Wojtas #define ENETC_SIRFRM	0x308
7419aa95e4SMarcin Wojtas #define ENETC_SIRUCA	0x310
7519aa95e4SMarcin Wojtas #define ENETC_SIRMCA	0x318
7619aa95e4SMarcin Wojtas #define ENETC_SITOCT	0x320
7719aa95e4SMarcin Wojtas #define ENETC_SITFRM	0x328
7819aa95e4SMarcin Wojtas #define ENETC_SITUCA	0x330
7919aa95e4SMarcin Wojtas #define ENETC_SITMCA	0x338
8019aa95e4SMarcin Wojtas #define ENETC_RBDCR(n)	(0x8180 + (n) * 0x200)
8119aa95e4SMarcin Wojtas 
8219aa95e4SMarcin Wojtas /* Control BDR regs */
8319aa95e4SMarcin Wojtas #define ENETC_SICBDRMR		0x800
8419aa95e4SMarcin Wojtas #define ENETC_SICBDRMR_EN	BIT(31)
8519aa95e4SMarcin Wojtas #define ENETC_SICBDRSR		0x804	/* RO */
8619aa95e4SMarcin Wojtas #define ENETC_SICBDRBAR0	0x810
8719aa95e4SMarcin Wojtas #define ENETC_SICBDRBAR1	0x814
8819aa95e4SMarcin Wojtas #define ENETC_SICBDRPIR		0x818
8919aa95e4SMarcin Wojtas #define ENETC_SICBDRCIR		0x81c
9019aa95e4SMarcin Wojtas #define ENETC_SICBDRLENR	0x820
9119aa95e4SMarcin Wojtas 
9219aa95e4SMarcin Wojtas #define ENETC_SICAPR0	0x900
9319aa95e4SMarcin Wojtas #define ENETC_SICAPR1	0x904
9419aa95e4SMarcin Wojtas 
9519aa95e4SMarcin Wojtas #define ENETC_PSIIER	0xa00
9619aa95e4SMarcin Wojtas #define ENETC_PSIIER_MR_MASK	GENMASK(2, 1)
9719aa95e4SMarcin Wojtas #define ENETC_PSIIDR	0xa08
9819aa95e4SMarcin Wojtas #define ENETC_SITXIDR	0xa18
9919aa95e4SMarcin Wojtas #define ENETC_SIRXIDR	0xa28
10019aa95e4SMarcin Wojtas #define ENETC_SIMSIVR	0xa30
10119aa95e4SMarcin Wojtas 
10219aa95e4SMarcin Wojtas #define ENETC_SIMSITRV(n) (0xB00 + (n) * 0x4)
10319aa95e4SMarcin Wojtas #define ENETC_SIMSIRRV(n) (0xB80 + (n) * 0x4)
10419aa95e4SMarcin Wojtas 
10519aa95e4SMarcin Wojtas #define ENETC_SIUEFDCR	0xe28
10619aa95e4SMarcin Wojtas 
10719aa95e4SMarcin Wojtas #define ENETC_SIRFSCAPR	0x1200
10819aa95e4SMarcin Wojtas #define ENETC_SIRFSCAPR_GET_NUM_RFS(val) ((val) & 0x7f)
10919aa95e4SMarcin Wojtas #define ENETC_SIRSSCAPR	0x1600
11019aa95e4SMarcin Wojtas #define ENETC_SIRSSCAPR_GET_NUM_RSS(val) (BIT((val) & 0xf) * 32)
11119aa95e4SMarcin Wojtas 
11219aa95e4SMarcin Wojtas /** SI BDR sub-blocks, n = 0..7 */
11319aa95e4SMarcin Wojtas enum enetc_bdr_type {TX, RX};
11419aa95e4SMarcin Wojtas #define ENETC_BDR_OFF(i)	((i) * 0x200)
11519aa95e4SMarcin Wojtas #define ENETC_BDR(t, i, r)	(0x8000 + (t) * 0x100 + ENETC_BDR_OFF(i) + (r))
11619aa95e4SMarcin Wojtas /* RX BDR reg offsets */
11719aa95e4SMarcin Wojtas #define ENETC_RBMR	0
11819aa95e4SMarcin Wojtas #define ENETC_RBMR_AL	BIT(0)
11919aa95e4SMarcin Wojtas #define ENETC_RBMR_BDS	BIT(2)
12019aa95e4SMarcin Wojtas #define ENETC_RBMR_VTE	BIT(5)
12119aa95e4SMarcin Wojtas #define ENETC_RBMR_EN	BIT(31)
12219aa95e4SMarcin Wojtas #define ENETC_RBSR	0x4
12319aa95e4SMarcin Wojtas #define ENETC_RBBSR	0x8
12419aa95e4SMarcin Wojtas #define ENETC_RBCIR	0xc
12519aa95e4SMarcin Wojtas #define ENETC_RBBAR0	0x10
12619aa95e4SMarcin Wojtas #define ENETC_RBBAR1	0x14
12719aa95e4SMarcin Wojtas #define ENETC_RBPIR	0x18
12819aa95e4SMarcin Wojtas #define ENETC_RBLENR	0x20
12919aa95e4SMarcin Wojtas #define ENETC_RBIER	0xa0
13019aa95e4SMarcin Wojtas #define ENETC_RBIER_RXTIE	BIT(0)
13119aa95e4SMarcin Wojtas #define ENETC_RBIDR	0xa4
13219aa95e4SMarcin Wojtas #define ENETC_RBICR0	0xa8
13319aa95e4SMarcin Wojtas #define ENETC_RBICR0_ICEN		BIT(31)
13419aa95e4SMarcin Wojtas #define ENETC_RBICR0_ICPT_MASK		0x1ff
13519aa95e4SMarcin Wojtas #define ENETC_RBICR0_SET_ICPT(n)	((n) & ENETC_RBICR0_ICPT_MASK)
13619aa95e4SMarcin Wojtas #define ENETC_RBICR1	0xac
13719aa95e4SMarcin Wojtas 
13819aa95e4SMarcin Wojtas /* TX BDR reg offsets */
13919aa95e4SMarcin Wojtas #define ENETC_TBMR	0
14019aa95e4SMarcin Wojtas #define ENETC_TBSR_BUSY	BIT(0)
14119aa95e4SMarcin Wojtas #define ENETC_TBMR_VIH	BIT(9)
14219aa95e4SMarcin Wojtas #define ENETC_TBMR_PRIO_MASK		GENMASK(2, 0)
14319aa95e4SMarcin Wojtas #define ENETC_TBMR_SET_PRIO(val)	((val) & ENETC_TBMR_PRIO_MASK)
14419aa95e4SMarcin Wojtas #define ENETC_TBMR_EN	BIT(31)
14519aa95e4SMarcin Wojtas #define ENETC_TBSR	0x4
14619aa95e4SMarcin Wojtas #define ENETC_TBBAR0	0x10
14719aa95e4SMarcin Wojtas #define ENETC_TBBAR1	0x14
14819aa95e4SMarcin Wojtas #define ENETC_TBPIR	0x18
14919aa95e4SMarcin Wojtas #define ENETC_TBCIR	0x1c
15019aa95e4SMarcin Wojtas #define ENETC_TBCIR_IDX_MASK	0xffff
15119aa95e4SMarcin Wojtas #define ENETC_TBLENR	0x20
15219aa95e4SMarcin Wojtas #define ENETC_TBIER	0xa0
15319aa95e4SMarcin Wojtas #define ENETC_TBIER_TXT	BIT(0)
15419aa95e4SMarcin Wojtas #define ENETC_TBIER_TXF	BIT(1)
15519aa95e4SMarcin Wojtas #define ENETC_TBIDR	0xa4
15619aa95e4SMarcin Wojtas #define ENETC_TBICR0	0xa8
15719aa95e4SMarcin Wojtas #define ENETC_TBICR0_ICEN		BIT(31)
15819aa95e4SMarcin Wojtas #define ENETC_TBICR0_ICPT_MASK		0xf
15919aa95e4SMarcin Wojtas #define ENETC_TBICR0_SET_ICPT(n) ((ilog2(n) + 1) & ENETC_TBICR0_ICPT_MASK)
16019aa95e4SMarcin Wojtas #define ENETC_TBICR1	0xac
16119aa95e4SMarcin Wojtas 
16219aa95e4SMarcin Wojtas #define ENETC_RTBLENR_LEN(n)	((n) & ~0x7)
16319aa95e4SMarcin Wojtas 
16419aa95e4SMarcin Wojtas /* Port regs, offset: 1_0000h */
16519aa95e4SMarcin Wojtas #define ENETC_PORT_BASE		0x10000
16619aa95e4SMarcin Wojtas #define ENETC_PMR		0x0000
16719aa95e4SMarcin Wojtas #define ENETC_PMR_SI0EN		BIT(16)
16819aa95e4SMarcin Wojtas #define ENETC_PMR_EN	GENMASK(18, 16)
16919aa95e4SMarcin Wojtas #define ENETC_PMR_PSPEED_MASK GENMASK(11, 8)
17019aa95e4SMarcin Wojtas #define ENETC_PMR_PSPEED_10M	0
17119aa95e4SMarcin Wojtas #define ENETC_PMR_PSPEED_100M	BIT(8)
17219aa95e4SMarcin Wojtas #define ENETC_PMR_PSPEED_1000M	BIT(9)
17319aa95e4SMarcin Wojtas #define ENETC_PMR_PSPEED_2500M	BIT(10)
17419aa95e4SMarcin Wojtas #define ENETC_PSR		0x0004 /* RO */
17519aa95e4SMarcin Wojtas #define ENETC_PSIPMR		0x0018
17619aa95e4SMarcin Wojtas #define ENETC_PSIPMR_SET_UP(n)	BIT(n) /* n = SI index */
17719aa95e4SMarcin Wojtas #define ENETC_PSIPMR_SET_MP(n)	BIT((n) + 16)
17819aa95e4SMarcin Wojtas #define ENETC_PSIPVMR		0x001c
17919aa95e4SMarcin Wojtas #define ENETC_VLAN_PROMISC_MAP_ALL	0x7
18019aa95e4SMarcin Wojtas #define ENETC_PSIPVMR_SET_VP(simap)	((simap) & 0x7)
18119aa95e4SMarcin Wojtas #define ENETC_PSIPVMR_SET_VUTA(simap)	(((simap) & 0x7) << 16)
18219aa95e4SMarcin Wojtas #define ENETC_PSIPMAR0(n)	(0x0100 + (n) * 0x8) /* n = SI index */
18319aa95e4SMarcin Wojtas #define ENETC_PSIPMAR1(n)	(0x0104 + (n) * 0x8)
18419aa95e4SMarcin Wojtas #define ENETC_PVCLCTR		0x0208
18519aa95e4SMarcin Wojtas #define ENETC_PCVLANR1		0x0210
18619aa95e4SMarcin Wojtas #define ENETC_PCVLANR2		0x0214
18719aa95e4SMarcin Wojtas #define ENETC_VLAN_TYPE_C	BIT(0)
18819aa95e4SMarcin Wojtas #define ENETC_VLAN_TYPE_S	BIT(1)
18919aa95e4SMarcin Wojtas #define ENETC_PVCLCTR_OVTPIDL(bmp)	((bmp) & 0xff) /* VLAN_TYPE */
19019aa95e4SMarcin Wojtas #define ENETC_PSIVLANR(n)	(0x0240 + (n) * 4) /* n = SI index */
19119aa95e4SMarcin Wojtas #define ENETC_PSIVLAN_EN	BIT(31)
19219aa95e4SMarcin Wojtas #define ENETC_PSIVLAN_SET_QOS(val)	((uint32_t)(val) << 12)
19319aa95e4SMarcin Wojtas #define ENETC_PTXMBAR		0x0608
19419aa95e4SMarcin Wojtas #define ENETC_PCAPR0		0x0900
19519aa95e4SMarcin Wojtas #define ENETC_PCAPR0_RXBDR(val)	((val) >> 24)
19619aa95e4SMarcin Wojtas #define ENETC_PCAPR0_TXBDR(val)	(((val) >> 16) & 0xff)
19719aa95e4SMarcin Wojtas #define ENETC_PCAPR1		0x0904
19819aa95e4SMarcin Wojtas #define ENETC_PSICFGR0(n)	(0x0940 + (n) * 0xc)  /* n = SI index */
19919aa95e4SMarcin Wojtas #define ENETC_PSICFGR0_SET_TXBDR(val)	((val) & 0xff)
20019aa95e4SMarcin Wojtas #define ENETC_PSICFGR0_SET_RXBDR(val)	(((val) & 0xff) << 16)
20119aa95e4SMarcin Wojtas #define ENETC_PSICFGR0_VTE	BIT(12)
20219aa95e4SMarcin Wojtas #define ENETC_PSICFGR0_SIVIE	BIT(14)
20319aa95e4SMarcin Wojtas #define ENETC_PSICFGR0_ASE	BIT(15)
20419aa95e4SMarcin Wojtas #define ENETC_PSICFGR0_SIVC(bmp)	(((bmp) & 0xff) << 24) /* VLAN_TYPE */
20519aa95e4SMarcin Wojtas 
20619aa95e4SMarcin Wojtas #define ENETC_PTCCBSR0(n)	(0x1110 + (n) * 8) /* n = 0 to 7*/
20719aa95e4SMarcin Wojtas #define ENETC_CBSE		BIT(31)
20819aa95e4SMarcin Wojtas #define ENETC_CBS_BW_MASK	GENMASK(6, 0)
20919aa95e4SMarcin Wojtas #define ENETC_PTCCBSR1(n)	(0x1114 + (n) * 8) /* n = 0 to 7*/
21019aa95e4SMarcin Wojtas #define ENETC_RSSHASH_KEY_SIZE	40
21119aa95e4SMarcin Wojtas #define ENETC_PRSSCAPR		0x1404
21219aa95e4SMarcin Wojtas #define ENETC_PRSSCAPR_GET_NUM_RSS(val)	(BIT((val) & 0xf) * 32)
21319aa95e4SMarcin Wojtas #define ENETC_PRSSK(n)		(0x1410 + (n) * 4) /* n = [0..9] */
21419aa95e4SMarcin Wojtas #define ENETC_PSIVLANFMR	0x1700
21519aa95e4SMarcin Wojtas #define ENETC_PSIVLANFMR_VS	BIT(0)
21619aa95e4SMarcin Wojtas #define ENETC_PRFSMR		0x1800
21719aa95e4SMarcin Wojtas #define ENETC_PRFSMR_RFSE	BIT(31)
21819aa95e4SMarcin Wojtas #define ENETC_PRFSCAPR		0x1804
21919aa95e4SMarcin Wojtas #define ENETC_PRFSCAPR_GET_NUM_RFS(val)	((((val) & 0xf) + 1) * 16)
22019aa95e4SMarcin Wojtas #define ENETC_PSIRFSCFGR(n)	(0x1814 + (n) * 4) /* n = SI index */
22119aa95e4SMarcin Wojtas #define ENETC_PFPMR		0x1900
22219aa95e4SMarcin Wojtas #define ENETC_PFPMR_PMACE	BIT(1)
22319aa95e4SMarcin Wojtas #define ENETC_PFPMR_MWLM	BIT(0)
22419aa95e4SMarcin Wojtas #define ENETC_EMDIO_BASE	0x1c00
22519aa95e4SMarcin Wojtas #define ENETC_PSIUMHFR0(n, err)	(((err) ? 0x1d08 : 0x1d00) + (n) * 0x10)
22619aa95e4SMarcin Wojtas #define ENETC_PSIUMHFR1(n)	(0x1d04 + (n) * 0x10)
22719aa95e4SMarcin Wojtas #define ENETC_PSIMMHFR0(n, err)	(((err) ? 0x1d00 : 0x1d08) + (n) * 0x10)
22819aa95e4SMarcin Wojtas #define ENETC_PSIMMHFR1(n)	(0x1d0c + (n) * 0x10)
22919aa95e4SMarcin Wojtas #define ENETC_PSIVHFR0(n)	(0x1e00 + (n) * 8) /* n = SI index */
23019aa95e4SMarcin Wojtas #define ENETC_PSIVHFR1(n)	(0x1e04 + (n) * 8) /* n = SI index */
23119aa95e4SMarcin Wojtas #define ENETC_MMCSR		0x1f00
23219aa95e4SMarcin Wojtas #define ENETC_MMCSR_ME		BIT(16)
23319aa95e4SMarcin Wojtas #define ENETC_PTCMSDUR(n)	(0x2020 + (n) * 4) /* n = TC index [0..7] */
23419aa95e4SMarcin Wojtas 
23519aa95e4SMarcin Wojtas #define ENETC_PAR_PORT_CFG	0x3050
23619aa95e4SMarcin Wojtas #define ENETC_PAR_PORT_L4CD	BIT(0)
23719aa95e4SMarcin Wojtas #define ENETC_PAR_PORT_L3CD	BIT(1)
23819aa95e4SMarcin Wojtas 
23919aa95e4SMarcin Wojtas #define ENETC_PM0_CMD_CFG	0x8008
24019aa95e4SMarcin Wojtas #define ENETC_PM1_CMD_CFG	0x9008
24119aa95e4SMarcin Wojtas #define ENETC_PM0_TX_EN		BIT(0)
24219aa95e4SMarcin Wojtas #define ENETC_PM0_RX_EN		BIT(1)
24319aa95e4SMarcin Wojtas #define ENETC_PM0_PROMISC	BIT(4)
24419aa95e4SMarcin Wojtas #define ENETC_PM0_CMD_XGLP	BIT(10)
24519aa95e4SMarcin Wojtas #define ENETC_PM0_CMD_TXP	BIT(11)
24619aa95e4SMarcin Wojtas #define ENETC_PM0_CMD_PHY_TX_EN	BIT(15)
24719aa95e4SMarcin Wojtas #define ENETC_PM0_CMD_SFD	BIT(21)
24819aa95e4SMarcin Wojtas #define ENETC_PM0_MAXFRM	0x8014
24919aa95e4SMarcin Wojtas #define ENETC_SET_TX_MTU(val)	((val) << 16)
25019aa95e4SMarcin Wojtas #define ENETC_SET_MAXFRM(val)	((val) & 0xffff)
25119aa95e4SMarcin Wojtas #define ENETC_PM0_RX_FIFO	0x801c
25219aa95e4SMarcin Wojtas #define ENETC_PM0_RX_FIFO_VAL	1
25319aa95e4SMarcin Wojtas 
25419aa95e4SMarcin Wojtas #define ENETC_PM_IMDIO_BASE	0x8030
25519aa95e4SMarcin Wojtas 
25619aa95e4SMarcin Wojtas #define ENETC_PM0_IF_MODE	0x8300
25719aa95e4SMarcin Wojtas #define ENETC_PM0_IFM_RG	BIT(2)
25819aa95e4SMarcin Wojtas #define ENETC_PM0_IFM_RLP	(BIT(5) | BIT(11))
25919aa95e4SMarcin Wojtas #define ENETC_PM0_IFM_EN_AUTO	BIT(15)
26019aa95e4SMarcin Wojtas #define ENETC_PM0_IFM_SSP_MASK	GENMASK(14, 13)
26119aa95e4SMarcin Wojtas #define ENETC_PM0_IFM_SSP_1000	(2 << 13)
26219aa95e4SMarcin Wojtas #define ENETC_PM0_IFM_SSP_100	(0 << 13)
26319aa95e4SMarcin Wojtas #define ENETC_PM0_IFM_SSP_10	(1 << 13)
26419aa95e4SMarcin Wojtas #define ENETC_PM0_IFM_FULL_DPX	BIT(12)
26519aa95e4SMarcin Wojtas #define ENETC_PM0_IFM_IFMODE_MASK GENMASK(1, 0)
26619aa95e4SMarcin Wojtas #define ENETC_PM0_IFM_IFMODE_XGMII 0
26719aa95e4SMarcin Wojtas #define ENETC_PM0_IFM_IFMODE_GMII 2
26819aa95e4SMarcin Wojtas #define ENETC_PSIDCAPR		0x1b08
26919aa95e4SMarcin Wojtas #define ENETC_PSIDCAPR_MSK	GENMASK(15, 0)
27019aa95e4SMarcin Wojtas #define ENETC_PSFCAPR		0x1b18
27119aa95e4SMarcin Wojtas #define ENETC_PSFCAPR_MSK	GENMASK(15, 0)
27219aa95e4SMarcin Wojtas #define ENETC_PSGCAPR		0x1b28
27319aa95e4SMarcin Wojtas #define ENETC_PSGCAPR_GCL_MSK	GENMASK(18, 16)
27419aa95e4SMarcin Wojtas #define ENETC_PSGCAPR_SGIT_MSK	GENMASK(15, 0)
27519aa95e4SMarcin Wojtas #define ENETC_PFMCAPR		0x1b38
27619aa95e4SMarcin Wojtas #define ENETC_PFMCAPR_MSK	GENMASK(15, 0)
27719aa95e4SMarcin Wojtas 
27819aa95e4SMarcin Wojtas /* MAC counters */
27919aa95e4SMarcin Wojtas #define ENETC_PM0_REOCT		0x8100
28019aa95e4SMarcin Wojtas #define ENETC_PM0_RALN		0x8110
28119aa95e4SMarcin Wojtas #define ENETC_PM0_RXPF		0x8118
28219aa95e4SMarcin Wojtas #define ENETC_PM0_RFRM		0x8120
28319aa95e4SMarcin Wojtas #define ENETC_PM0_RFCS		0x8128
28419aa95e4SMarcin Wojtas #define ENETC_PM0_RVLAN		0x8130
28519aa95e4SMarcin Wojtas #define ENETC_PM0_RERR		0x8138
28619aa95e4SMarcin Wojtas #define ENETC_PM0_RUCA		0x8140
28719aa95e4SMarcin Wojtas #define ENETC_PM0_RMCA		0x8148
28819aa95e4SMarcin Wojtas #define ENETC_PM0_RBCA		0x8150
28919aa95e4SMarcin Wojtas #define ENETC_PM0_RDRP		0x8158
29019aa95e4SMarcin Wojtas #define ENETC_PM0_RPKT		0x8160
29119aa95e4SMarcin Wojtas #define ENETC_PM0_RUND		0x8168
29219aa95e4SMarcin Wojtas #define ENETC_PM0_R64		0x8170
29319aa95e4SMarcin Wojtas #define ENETC_PM0_R127		0x8178
29419aa95e4SMarcin Wojtas #define ENETC_PM0_R255		0x8180
29519aa95e4SMarcin Wojtas #define ENETC_PM0_R511		0x8188
29619aa95e4SMarcin Wojtas #define ENETC_PM0_R1023		0x8190
29719aa95e4SMarcin Wojtas #define ENETC_PM0_R1522		0x8198
29819aa95e4SMarcin Wojtas #define ENETC_PM0_R1523X	0x81A0
29919aa95e4SMarcin Wojtas #define ENETC_PM0_ROVR		0x81A8
30019aa95e4SMarcin Wojtas #define ENETC_PM0_RJBR		0x81B0
30119aa95e4SMarcin Wojtas #define ENETC_PM0_RFRG		0x81B8
30219aa95e4SMarcin Wojtas #define ENETC_PM0_RCNP		0x81C0
30319aa95e4SMarcin Wojtas #define ENETC_PM0_RDRNTP	0x81C8
30419aa95e4SMarcin Wojtas #define ENETC_PM0_TEOCT		0x8200
30519aa95e4SMarcin Wojtas #define ENETC_PM0_TOCT		0x8208
30619aa95e4SMarcin Wojtas #define ENETC_PM0_TCRSE		0x8210
30719aa95e4SMarcin Wojtas #define ENETC_PM0_TXPF		0x8218
30819aa95e4SMarcin Wojtas #define ENETC_PM0_TFRM		0x8220
30919aa95e4SMarcin Wojtas #define ENETC_PM0_TFCS		0x8228
31019aa95e4SMarcin Wojtas #define ENETC_PM0_TVLAN		0x8230
31119aa95e4SMarcin Wojtas #define ENETC_PM0_TERR		0x8238
31219aa95e4SMarcin Wojtas #define ENETC_PM0_TUCA		0x8240
31319aa95e4SMarcin Wojtas #define ENETC_PM0_TMCA		0x8248
31419aa95e4SMarcin Wojtas #define ENETC_PM0_TBCA		0x8250
31519aa95e4SMarcin Wojtas #define ENETC_PM0_TPKT		0x8260
31619aa95e4SMarcin Wojtas #define ENETC_PM0_TUND		0x8268
31719aa95e4SMarcin Wojtas #define ENETC_PM0_T64		0x8270
31819aa95e4SMarcin Wojtas #define ENETC_PM0_T127		0x8278
31919aa95e4SMarcin Wojtas #define ENETC_PM0_T255		0x8280
32019aa95e4SMarcin Wojtas #define ENETC_PM0_T511		0x8288
32119aa95e4SMarcin Wojtas #define ENETC_PM0_T1023		0x8290
32219aa95e4SMarcin Wojtas #define ENETC_PM0_T1522		0x8298
32319aa95e4SMarcin Wojtas #define ENETC_PM0_T1523X	0x82A0
32419aa95e4SMarcin Wojtas #define ENETC_PM0_TCNP		0x82C0
32519aa95e4SMarcin Wojtas #define ENETC_PM0_TDFR		0x82D0
32619aa95e4SMarcin Wojtas #define ENETC_PM0_TMCOL		0x82D8
32719aa95e4SMarcin Wojtas #define ENETC_PM0_TSCOL		0x82E0
32819aa95e4SMarcin Wojtas #define ENETC_PM0_TLCOL		0x82E8
32919aa95e4SMarcin Wojtas #define ENETC_PM0_TECOL		0x82F0
33019aa95e4SMarcin Wojtas 
33119aa95e4SMarcin Wojtas /* Port counters */
33219aa95e4SMarcin Wojtas #define ENETC_PICDR(n)		(0x0700 + (n) * 8) /* n = [0..3] */
33319aa95e4SMarcin Wojtas #define ENETC_PBFDSIR		0x0810
33419aa95e4SMarcin Wojtas #define ENETC_PFDMSAPR		0x0814
33519aa95e4SMarcin Wojtas #define ENETC_UFDMF		0x1680
33619aa95e4SMarcin Wojtas #define ENETC_MFDMF		0x1684
33719aa95e4SMarcin Wojtas #define ENETC_PUFDVFR		0x1780
33819aa95e4SMarcin Wojtas #define ENETC_PMFDVFR		0x1784
33919aa95e4SMarcin Wojtas #define ENETC_PBFDVFR		0x1788
34019aa95e4SMarcin Wojtas 
34119aa95e4SMarcin Wojtas /** Global regs, offset: 2_0000h */
34219aa95e4SMarcin Wojtas #define ENETC_GLOBAL_BASE	0x20000
34319aa95e4SMarcin Wojtas #define ENETC_G_EIPBRR0		0x0bf8
34419aa95e4SMarcin Wojtas #define ENETC_G_EIPBRR1		0x0bfc
34519aa95e4SMarcin Wojtas #define ENETC_G_EPFBLPR(n)	(0xd00 + 4 * (n))
34619aa95e4SMarcin Wojtas #define ENETC_G_EPFBLPR1_XGMII	0x80000000
34719aa95e4SMarcin Wojtas 
34819aa95e4SMarcin Wojtas /* Buffer Descriptors (BD) */
34919aa95e4SMarcin Wojtas union enetc_tx_bd {
35019aa95e4SMarcin Wojtas 	struct {
35119aa95e4SMarcin Wojtas 		uint64_t addr;
35219aa95e4SMarcin Wojtas 		uint16_t buf_len;
35319aa95e4SMarcin Wojtas 		uint16_t frm_len;
35419aa95e4SMarcin Wojtas 		union {
35519aa95e4SMarcin Wojtas 			struct {
35619aa95e4SMarcin Wojtas 				uint8_t reserved[3];
35719aa95e4SMarcin Wojtas 				uint8_t flags;
35819aa95e4SMarcin Wojtas 			}; /* default layout */
35919aa95e4SMarcin Wojtas 			uint32_t txstart;
36019aa95e4SMarcin Wojtas 			uint32_t lstatus;
36119aa95e4SMarcin Wojtas 		};
36219aa95e4SMarcin Wojtas 	};
36319aa95e4SMarcin Wojtas 	struct {
36419aa95e4SMarcin Wojtas 		uint32_t tstamp;
36519aa95e4SMarcin Wojtas 		uint16_t tpid;
36619aa95e4SMarcin Wojtas 		uint16_t vid;
36719aa95e4SMarcin Wojtas 		uint8_t reserved[6];
36819aa95e4SMarcin Wojtas 		uint8_t e_flags;
36919aa95e4SMarcin Wojtas 		uint8_t flags;
37019aa95e4SMarcin Wojtas 	} ext; /* Tx BD extension */
37119aa95e4SMarcin Wojtas 	struct {
37219aa95e4SMarcin Wojtas 		uint32_t tstamp;
37319aa95e4SMarcin Wojtas 		uint8_t reserved[10];
37419aa95e4SMarcin Wojtas 		uint8_t status;
37519aa95e4SMarcin Wojtas 		uint8_t flags;
37619aa95e4SMarcin Wojtas 	} wb; /* writeback descriptor */
37719aa95e4SMarcin Wojtas };
37819aa95e4SMarcin Wojtas 
37919aa95e4SMarcin Wojtas enum enetc_txbd_flags {
38019aa95e4SMarcin Wojtas 	ENETC_TXBD_FLAGS_RES0 = BIT(0), /* reserved */
38119aa95e4SMarcin Wojtas 	ENETC_TXBD_FLAGS_TSE = BIT(1),
38219aa95e4SMarcin Wojtas 	ENETC_TXBD_FLAGS_W = BIT(2),
38319aa95e4SMarcin Wojtas 	ENETC_TXBD_FLAGS_RES3 = BIT(3), /* reserved */
38419aa95e4SMarcin Wojtas 	ENETC_TXBD_FLAGS_TXSTART = BIT(4),
38519aa95e4SMarcin Wojtas 	ENETC_TXBD_FLAGS_FI = BIT(5),
38619aa95e4SMarcin Wojtas 	ENETC_TXBD_FLAGS_EX = BIT(6),
38719aa95e4SMarcin Wojtas 	ENETC_TXBD_FLAGS_F = BIT(7)
38819aa95e4SMarcin Wojtas };
38919aa95e4SMarcin Wojtas #define ENETC_TXBD_TXSTART_MASK GENMASK(24, 0)
39019aa95e4SMarcin Wojtas #define ENETC_TXBD_FLAGS_OFFSET 24
39119aa95e4SMarcin Wojtas 
enetc_clear_tx_bd(union enetc_tx_bd * txbd)39219aa95e4SMarcin Wojtas static inline void enetc_clear_tx_bd(union enetc_tx_bd *txbd)
39319aa95e4SMarcin Wojtas {
39419aa95e4SMarcin Wojtas 	memset(txbd, 0, sizeof(*txbd));
39519aa95e4SMarcin Wojtas }
39619aa95e4SMarcin Wojtas 
39719aa95e4SMarcin Wojtas /* Extension flags */
39819aa95e4SMarcin Wojtas #define ENETC_TXBD_E_FLAGS_VLAN_INS	BIT(0)
39919aa95e4SMarcin Wojtas #define ENETC_TXBD_E_FLAGS_TWO_STEP_PTP	BIT(2)
40019aa95e4SMarcin Wojtas 
40119aa95e4SMarcin Wojtas union enetc_rx_bd {
40219aa95e4SMarcin Wojtas 	struct {
40319aa95e4SMarcin Wojtas 		uint64_t addr;
40419aa95e4SMarcin Wojtas 		uint8_t reserved[8];
40519aa95e4SMarcin Wojtas 	} w;
40619aa95e4SMarcin Wojtas 	struct {
40719aa95e4SMarcin Wojtas 		uint16_t inet_csum;
40819aa95e4SMarcin Wojtas 		uint16_t parse_summary;
40919aa95e4SMarcin Wojtas 		uint32_t rss_hash;
41019aa95e4SMarcin Wojtas 		uint16_t buf_len;
41119aa95e4SMarcin Wojtas 		uint16_t vlan_opt;
41219aa95e4SMarcin Wojtas 		union {
41319aa95e4SMarcin Wojtas 			struct {
41419aa95e4SMarcin Wojtas 				uint16_t flags;
41519aa95e4SMarcin Wojtas 				uint16_t error;
41619aa95e4SMarcin Wojtas 			};
41719aa95e4SMarcin Wojtas 			uint32_t lstatus;
41819aa95e4SMarcin Wojtas 		};
41919aa95e4SMarcin Wojtas 	} r;
42019aa95e4SMarcin Wojtas 	struct {
42119aa95e4SMarcin Wojtas 		uint32_t tstamp;
42219aa95e4SMarcin Wojtas 		uint8_t reserved[12];
42319aa95e4SMarcin Wojtas 	} ext;
42419aa95e4SMarcin Wojtas };
42519aa95e4SMarcin Wojtas 
42619aa95e4SMarcin Wojtas #define ENETC_RXBD_PARSER_ERROR	BIT(15)
42719aa95e4SMarcin Wojtas 
42819aa95e4SMarcin Wojtas #define ENETC_RXBD_LSTATUS_R	BIT(30)
42919aa95e4SMarcin Wojtas #define ENETC_RXBD_LSTATUS_F	BIT(31)
43019aa95e4SMarcin Wojtas #define ENETC_RXBD_ERR_MASK	0xff
43119aa95e4SMarcin Wojtas #define ENETC_RXBD_LSTATUS(flags)	((flags) << 16)
43219aa95e4SMarcin Wojtas #define ENETC_RXBD_FLAG_RSSV	BIT(8)
43319aa95e4SMarcin Wojtas #define ENETC_RXBD_FLAG_VLAN	BIT(9)
43419aa95e4SMarcin Wojtas #define ENETC_RXBD_FLAG_TSTMP	BIT(10)
43519aa95e4SMarcin Wojtas #define ENETC_RXBD_FLAG_TPID	GENMASK(1, 0)
43619aa95e4SMarcin Wojtas 
43719aa95e4SMarcin Wojtas #define ENETC_MAC_ADDR_FILT_CNT	8 /* # of supported entries per port */
43819aa95e4SMarcin Wojtas #define EMETC_MAC_ADDR_FILT_RES	3 /* # of reserved entries at the beginning */
43919aa95e4SMarcin Wojtas #define ENETC_MAX_NUM_VFS	2
44019aa95e4SMarcin Wojtas 
44119aa95e4SMarcin Wojtas #define ENETC_CBD_FLAGS_SF	BIT(7) /* short format */
44219aa95e4SMarcin Wojtas #define ENETC_CBD_STATUS_MASK	0xf
44319aa95e4SMarcin Wojtas 
44419aa95e4SMarcin Wojtas struct enetc_cmd_rfse {
44519aa95e4SMarcin Wojtas 	uint8_t smac_h[6];
44619aa95e4SMarcin Wojtas 	uint8_t smac_m[6];
44719aa95e4SMarcin Wojtas 	uint8_t dmac_h[6];
44819aa95e4SMarcin Wojtas 	uint8_t dmac_m[6];
44919aa95e4SMarcin Wojtas 	uint32_t sip_h[4];	/* Big-endian */
45019aa95e4SMarcin Wojtas 	uint32_t sip_m[4];	/* Big-endian */
45119aa95e4SMarcin Wojtas 	uint32_t dip_h[4];	/* Big-endian */
45219aa95e4SMarcin Wojtas 	uint32_t dip_m[4];	/* Big-endian */
45319aa95e4SMarcin Wojtas 	uint16_t ethtype_h;
45419aa95e4SMarcin Wojtas 	uint16_t ethtype_m;
45519aa95e4SMarcin Wojtas 	uint16_t ethtype4_h;
45619aa95e4SMarcin Wojtas 	uint16_t ethtype4_m;
45719aa95e4SMarcin Wojtas 	uint16_t sport_h;
45819aa95e4SMarcin Wojtas 	uint16_t sport_m;
45919aa95e4SMarcin Wojtas 	uint16_t dport_h;
46019aa95e4SMarcin Wojtas 	uint16_t dport_m;
46119aa95e4SMarcin Wojtas 	uint16_t vlan_h;
46219aa95e4SMarcin Wojtas 	uint16_t vlan_m;
46319aa95e4SMarcin Wojtas 	uint8_t proto_h;
46419aa95e4SMarcin Wojtas 	uint8_t proto_m;
46519aa95e4SMarcin Wojtas 	uint16_t flags;
46619aa95e4SMarcin Wojtas 	uint16_t result;
46719aa95e4SMarcin Wojtas 	uint16_t mode;
46819aa95e4SMarcin Wojtas };
46919aa95e4SMarcin Wojtas 
47019aa95e4SMarcin Wojtas #define ENETC_RFSE_EN	BIT(15)
47119aa95e4SMarcin Wojtas #define ENETC_RFSE_MODE_BD	2
47219aa95e4SMarcin Wojtas 
47319aa95e4SMarcin Wojtas #define ENETC_SI_INT_IDX	0
47419aa95e4SMarcin Wojtas /* base index for Rx/Tx interrupts */
47519aa95e4SMarcin Wojtas #define ENETC_BDR_INT_BASE_IDX	1
47619aa95e4SMarcin Wojtas 
47719aa95e4SMarcin Wojtas /* Messaging */
47819aa95e4SMarcin Wojtas 
47919aa95e4SMarcin Wojtas /* Command completion status */
48019aa95e4SMarcin Wojtas enum enetc_msg_cmd_status {
48119aa95e4SMarcin Wojtas 	ENETC_MSG_CMD_STATUS_OK,
48219aa95e4SMarcin Wojtas 	ENETC_MSG_CMD_STATUS_FAIL
48319aa95e4SMarcin Wojtas };
48419aa95e4SMarcin Wojtas 
48519aa95e4SMarcin Wojtas /* VSI-PSI command message types */
48619aa95e4SMarcin Wojtas enum enetc_msg_cmd_type {
48719aa95e4SMarcin Wojtas 	ENETC_MSG_CMD_MNG_MAC = 1, /* manage MAC address */
48819aa95e4SMarcin Wojtas 	ENETC_MSG_CMD_MNG_RX_MAC_FILTER,/* manage RX MAC table */
48919aa95e4SMarcin Wojtas 	ENETC_MSG_CMD_MNG_RX_VLAN_FILTER /* manage RX VLAN table */
49019aa95e4SMarcin Wojtas };
49119aa95e4SMarcin Wojtas 
49219aa95e4SMarcin Wojtas /* VSI-PSI command action types */
49319aa95e4SMarcin Wojtas enum enetc_msg_cmd_action_type {
49419aa95e4SMarcin Wojtas 	ENETC_MSG_CMD_MNG_ADD = 1,
49519aa95e4SMarcin Wojtas 	ENETC_MSG_CMD_MNG_REMOVE
49619aa95e4SMarcin Wojtas };
49719aa95e4SMarcin Wojtas 
49819aa95e4SMarcin Wojtas /* PSI-VSI command header format */
49919aa95e4SMarcin Wojtas struct enetc_msg_cmd_header {
50019aa95e4SMarcin Wojtas 	uint16_t type;	/* command class type */
50119aa95e4SMarcin Wojtas 	uint16_t id;		/* denotes the specific required action */
50219aa95e4SMarcin Wojtas };
50319aa95e4SMarcin Wojtas 
50419aa95e4SMarcin Wojtas enum bdcr_cmd_class {
50519aa95e4SMarcin Wojtas 	BDCR_CMD_UNSPEC = 0,
50619aa95e4SMarcin Wojtas 	BDCR_CMD_MAC_FILTER,
50719aa95e4SMarcin Wojtas 	BDCR_CMD_VLAN_FILTER,
50819aa95e4SMarcin Wojtas 	BDCR_CMD_RSS,
50919aa95e4SMarcin Wojtas 	BDCR_CMD_RFS,
51019aa95e4SMarcin Wojtas 	BDCR_CMD_PORT_GCL,
51119aa95e4SMarcin Wojtas 	BDCR_CMD_RECV_CLASSIFIER,
51219aa95e4SMarcin Wojtas 	BDCR_CMD_STREAM_IDENTIFY,
51319aa95e4SMarcin Wojtas 	BDCR_CMD_STREAM_FILTER,
51419aa95e4SMarcin Wojtas 	BDCR_CMD_STREAM_GCL,
51519aa95e4SMarcin Wojtas 	BDCR_CMD_FLOW_METER,
51619aa95e4SMarcin Wojtas 	__BDCR_CMD_MAX_LEN,
51719aa95e4SMarcin Wojtas 	BDCR_CMD_MAX_LEN = __BDCR_CMD_MAX_LEN - 1,
51819aa95e4SMarcin Wojtas };
51919aa95e4SMarcin Wojtas 
52019aa95e4SMarcin Wojtas enum bdcr_cmd_rss {
52119aa95e4SMarcin Wojtas 	BDCR_CMD_RSS_WRITE = 1,
52219aa95e4SMarcin Wojtas 	BDCR_CMD_RSS_READ = 2,
52319aa95e4SMarcin Wojtas };
52419aa95e4SMarcin Wojtas 
52519aa95e4SMarcin Wojtas /* class 5, command 0 */
52619aa95e4SMarcin Wojtas struct tgs_gcl_conf {
52719aa95e4SMarcin Wojtas 	uint8_t	atc;	/* init gate value */
52819aa95e4SMarcin Wojtas 	uint8_t	res[7];
52919aa95e4SMarcin Wojtas 	struct {
53019aa95e4SMarcin Wojtas 		uint8_t	res1[4];
53119aa95e4SMarcin Wojtas 		uint16_t	acl_len;
53219aa95e4SMarcin Wojtas 		uint8_t	res2[2];
53319aa95e4SMarcin Wojtas 	};
53419aa95e4SMarcin Wojtas };
53519aa95e4SMarcin Wojtas 
53619aa95e4SMarcin Wojtas /* gate control list entry */
53719aa95e4SMarcin Wojtas struct gce {
53819aa95e4SMarcin Wojtas 	uint32_t	period;
53919aa95e4SMarcin Wojtas 	uint8_t	gate;
54019aa95e4SMarcin Wojtas 	uint8_t	res[3];
54119aa95e4SMarcin Wojtas };
54219aa95e4SMarcin Wojtas 
54319aa95e4SMarcin Wojtas /* tgs_gcl_conf address point to this data space */
54419aa95e4SMarcin Wojtas struct tgs_gcl_data {
54519aa95e4SMarcin Wojtas 	uint32_t		btl;
54619aa95e4SMarcin Wojtas 	uint32_t		bth;
54719aa95e4SMarcin Wojtas 	uint32_t		ct;
54819aa95e4SMarcin Wojtas 	uint32_t		cte;
54919aa95e4SMarcin Wojtas 	struct gce	entry[];
55019aa95e4SMarcin Wojtas };
55119aa95e4SMarcin Wojtas 
55219aa95e4SMarcin Wojtas /* class 7, command 0, Stream Identity Entry Configuration */
55319aa95e4SMarcin Wojtas struct streamid_conf {
55419aa95e4SMarcin Wojtas 	uint32_t	stream_handle;	/* init gate value */
55519aa95e4SMarcin Wojtas 	uint32_t	iports;
55619aa95e4SMarcin Wojtas 		uint8_t	id_type;
55719aa95e4SMarcin Wojtas 		uint8_t	oui[3];
55819aa95e4SMarcin Wojtas 		uint8_t	res[3];
55919aa95e4SMarcin Wojtas 		uint8_t	en;
56019aa95e4SMarcin Wojtas };
56119aa95e4SMarcin Wojtas 
56219aa95e4SMarcin Wojtas #define ENETC_CBDR_SID_VID_MASK 0xfff
56319aa95e4SMarcin Wojtas #define ENETC_CBDR_SID_VIDM BIT(12)
56419aa95e4SMarcin Wojtas #define ENETC_CBDR_SID_TG_MASK 0xc000
56519aa95e4SMarcin Wojtas /* streamid_conf address point to this data space */
56619aa95e4SMarcin Wojtas struct streamid_data {
56719aa95e4SMarcin Wojtas 	union {
56819aa95e4SMarcin Wojtas 		uint8_t dmac[6];
56919aa95e4SMarcin Wojtas 		uint8_t smac[6];
57019aa95e4SMarcin Wojtas 	};
57119aa95e4SMarcin Wojtas 	uint16_t     vid_vidm_tg;
57219aa95e4SMarcin Wojtas };
57319aa95e4SMarcin Wojtas 
57419aa95e4SMarcin Wojtas #define ENETC_CBDR_SFI_PRI_MASK 0x7
57519aa95e4SMarcin Wojtas #define ENETC_CBDR_SFI_PRIM		BIT(3)
57619aa95e4SMarcin Wojtas #define ENETC_CBDR_SFI_BLOV		BIT(4)
57719aa95e4SMarcin Wojtas #define ENETC_CBDR_SFI_BLEN		BIT(5)
57819aa95e4SMarcin Wojtas #define ENETC_CBDR_SFI_MSDUEN	BIT(6)
57919aa95e4SMarcin Wojtas #define ENETC_CBDR_SFI_FMITEN	BIT(7)
58019aa95e4SMarcin Wojtas #define ENETC_CBDR_SFI_ENABLE	BIT(7)
58119aa95e4SMarcin Wojtas /* class 8, command 0, Stream Filter Instance, Short Format */
58219aa95e4SMarcin Wojtas struct sfi_conf {
58319aa95e4SMarcin Wojtas 	uint32_t	stream_handle;
58419aa95e4SMarcin Wojtas 		uint8_t	multi;
58519aa95e4SMarcin Wojtas 		uint8_t	res[2];
58619aa95e4SMarcin Wojtas 		uint8_t	sthm;
58719aa95e4SMarcin Wojtas 	/* Max Service Data Unit or Flow Meter Instance Table index.
58819aa95e4SMarcin Wojtas 	 * Depending on the value of FLT this represents either Max
58919aa95e4SMarcin Wojtas 	 * Service Data Unit (max frame size) allowed by the filter
59019aa95e4SMarcin Wojtas 	 * entry or is an index into the Flow Meter Instance table
59119aa95e4SMarcin Wojtas 	 * index identifying the policer which will be used to police
59219aa95e4SMarcin Wojtas 	 * it.
59319aa95e4SMarcin Wojtas 	 */
59419aa95e4SMarcin Wojtas 	uint16_t	fm_inst_table_index;
59519aa95e4SMarcin Wojtas 	uint16_t	msdu;
59619aa95e4SMarcin Wojtas 	uint16_t	sg_inst_table_index;
59719aa95e4SMarcin Wojtas 		uint8_t	res1[2];
59819aa95e4SMarcin Wojtas 	uint32_t	input_ports;
59919aa95e4SMarcin Wojtas 		uint8_t	res2[3];
60019aa95e4SMarcin Wojtas 		uint8_t	en;
60119aa95e4SMarcin Wojtas };
60219aa95e4SMarcin Wojtas 
60319aa95e4SMarcin Wojtas /* class 8, command 2 stream Filter Instance status query short format
60419aa95e4SMarcin Wojtas  * command no need structure define
60519aa95e4SMarcin Wojtas  * Stream Filter Instance Query Statistics Response data
60619aa95e4SMarcin Wojtas  */
60719aa95e4SMarcin Wojtas struct sfi_counter_data {
60819aa95e4SMarcin Wojtas 	uint32_t matchl;
60919aa95e4SMarcin Wojtas 	uint32_t matchh;
61019aa95e4SMarcin Wojtas 	uint32_t msdu_dropl;
61119aa95e4SMarcin Wojtas 	uint32_t msdu_droph;
61219aa95e4SMarcin Wojtas 	uint32_t stream_gate_dropl;
61319aa95e4SMarcin Wojtas 	uint32_t stream_gate_droph;
61419aa95e4SMarcin Wojtas 	uint32_t flow_meter_dropl;
61519aa95e4SMarcin Wojtas 	uint32_t flow_meter_droph;
61619aa95e4SMarcin Wojtas };
61719aa95e4SMarcin Wojtas 
61819aa95e4SMarcin Wojtas #define ENETC_CBDR_SGI_OIPV_MASK 0x7
61919aa95e4SMarcin Wojtas #define ENETC_CBDR_SGI_OIPV_EN	BIT(3)
62019aa95e4SMarcin Wojtas #define ENETC_CBDR_SGI_CGTST	BIT(6)
62119aa95e4SMarcin Wojtas #define ENETC_CBDR_SGI_OGTST	BIT(7)
62219aa95e4SMarcin Wojtas #define ENETC_CBDR_SGI_CFG_CHG  BIT(1)
62319aa95e4SMarcin Wojtas #define ENETC_CBDR_SGI_CFG_PND  BIT(2)
62419aa95e4SMarcin Wojtas #define ENETC_CBDR_SGI_OEX		BIT(4)
62519aa95e4SMarcin Wojtas #define ENETC_CBDR_SGI_OEXEN	BIT(5)
62619aa95e4SMarcin Wojtas #define ENETC_CBDR_SGI_IRX		BIT(6)
62719aa95e4SMarcin Wojtas #define ENETC_CBDR_SGI_IRXEN	BIT(7)
62819aa95e4SMarcin Wojtas #define ENETC_CBDR_SGI_ACLLEN_MASK 0x3
62919aa95e4SMarcin Wojtas #define ENETC_CBDR_SGI_OCLLEN_MASK 0xc
63019aa95e4SMarcin Wojtas #define	ENETC_CBDR_SGI_EN		BIT(7)
63119aa95e4SMarcin Wojtas /* class 9, command 0, Stream Gate Instance Table, Short Format
63219aa95e4SMarcin Wojtas  * class 9, command 2, Stream Gate Instance Table entry query write back
63319aa95e4SMarcin Wojtas  * Short Format
63419aa95e4SMarcin Wojtas  */
63519aa95e4SMarcin Wojtas struct sgi_table {
63619aa95e4SMarcin Wojtas 	uint8_t	res[8];
63719aa95e4SMarcin Wojtas 	uint8_t	oipv;
63819aa95e4SMarcin Wojtas 	uint8_t	res0[2];
63919aa95e4SMarcin Wojtas 	uint8_t	ocgtst;
64019aa95e4SMarcin Wojtas 	uint8_t	res1[7];
64119aa95e4SMarcin Wojtas 	uint8_t	gset;
64219aa95e4SMarcin Wojtas 	uint8_t	oacl_len;
64319aa95e4SMarcin Wojtas 	uint8_t	res2[2];
64419aa95e4SMarcin Wojtas 	uint8_t	en;
64519aa95e4SMarcin Wojtas };
64619aa95e4SMarcin Wojtas 
64719aa95e4SMarcin Wojtas #define ENETC_CBDR_SGI_AIPV_MASK 0x7
64819aa95e4SMarcin Wojtas #define ENETC_CBDR_SGI_AIPV_EN	BIT(3)
64919aa95e4SMarcin Wojtas #define ENETC_CBDR_SGI_AGTST	BIT(7)
65019aa95e4SMarcin Wojtas 
65119aa95e4SMarcin Wojtas /* class 9, command 1, Stream Gate Control List, Long Format */
65219aa95e4SMarcin Wojtas struct sgcl_conf {
65319aa95e4SMarcin Wojtas 	uint8_t	aipv;
65419aa95e4SMarcin Wojtas 	uint8_t	res[2];
65519aa95e4SMarcin Wojtas 	uint8_t	agtst;
65619aa95e4SMarcin Wojtas 	uint8_t	res1[4];
65719aa95e4SMarcin Wojtas 	union {
65819aa95e4SMarcin Wojtas 		struct {
65919aa95e4SMarcin Wojtas 			uint8_t res2[4];
66019aa95e4SMarcin Wojtas 			uint8_t acl_len;
66119aa95e4SMarcin Wojtas 			uint8_t res3[3];
66219aa95e4SMarcin Wojtas 		};
66319aa95e4SMarcin Wojtas 		uint8_t cct[8]; /* Config change time */
66419aa95e4SMarcin Wojtas 	};
66519aa95e4SMarcin Wojtas };
66619aa95e4SMarcin Wojtas 
66719aa95e4SMarcin Wojtas #define ENETC_CBDR_SGL_IOMEN	BIT(0)
66819aa95e4SMarcin Wojtas #define ENETC_CBDR_SGL_IPVEN	BIT(3)
66919aa95e4SMarcin Wojtas #define ENETC_CBDR_SGL_GTST		BIT(4)
67019aa95e4SMarcin Wojtas #define ENETC_CBDR_SGL_IPV_MASK 0xe
67119aa95e4SMarcin Wojtas /* Stream Gate Control List Entry */
67219aa95e4SMarcin Wojtas struct sgce {
67319aa95e4SMarcin Wojtas 	uint32_t	interval;
67419aa95e4SMarcin Wojtas 	uint8_t	msdu[3];
67519aa95e4SMarcin Wojtas 	uint8_t	multi;
67619aa95e4SMarcin Wojtas };
67719aa95e4SMarcin Wojtas 
67819aa95e4SMarcin Wojtas /* stream control list class 9 , cmd 1 data buffer */
67919aa95e4SMarcin Wojtas struct sgcl_data {
68019aa95e4SMarcin Wojtas 	uint32_t		btl;
68119aa95e4SMarcin Wojtas 	uint32_t		bth;
68219aa95e4SMarcin Wojtas 	uint32_t		ct;
68319aa95e4SMarcin Wojtas 	uint32_t		cte;
68419aa95e4SMarcin Wojtas 	struct sgce	sgcl[0];
68519aa95e4SMarcin Wojtas };
68619aa95e4SMarcin Wojtas 
68719aa95e4SMarcin Wojtas #define ENETC_CBDR_FMI_MR	BIT(0)
68819aa95e4SMarcin Wojtas #define ENETC_CBDR_FMI_MREN	BIT(1)
68919aa95e4SMarcin Wojtas #define ENETC_CBDR_FMI_DOY	BIT(2)
69019aa95e4SMarcin Wojtas #define	ENETC_CBDR_FMI_CM	BIT(3)
69119aa95e4SMarcin Wojtas #define ENETC_CBDR_FMI_CF	BIT(4)
69219aa95e4SMarcin Wojtas #define ENETC_CBDR_FMI_NDOR	BIT(5)
69319aa95e4SMarcin Wojtas #define ENETC_CBDR_FMI_OALEN	BIT(6)
69419aa95e4SMarcin Wojtas #define ENETC_CBDR_FMI_IRFPP_MASK GENMASK(4, 0)
69519aa95e4SMarcin Wojtas 
69619aa95e4SMarcin Wojtas /* class 10: command 0/1, Flow Meter Instance Set, short Format */
69719aa95e4SMarcin Wojtas struct fmi_conf {
69819aa95e4SMarcin Wojtas 	uint32_t	cir;
69919aa95e4SMarcin Wojtas 	uint32_t	cbs;
70019aa95e4SMarcin Wojtas 	uint32_t	eir;
70119aa95e4SMarcin Wojtas 	uint32_t	ebs;
70219aa95e4SMarcin Wojtas 		uint8_t	conf;
70319aa95e4SMarcin Wojtas 		uint8_t	res1;
70419aa95e4SMarcin Wojtas 		uint8_t	ir_fpp;
70519aa95e4SMarcin Wojtas 		uint8_t	res2[4];
70619aa95e4SMarcin Wojtas 		uint8_t	en;
70719aa95e4SMarcin Wojtas };
70819aa95e4SMarcin Wojtas 
70919aa95e4SMarcin Wojtas struct enetc_cbd {
71019aa95e4SMarcin Wojtas 	union{
71119aa95e4SMarcin Wojtas 		struct sfi_conf sfi_conf;
71219aa95e4SMarcin Wojtas 		struct sgi_table sgi_table;
71319aa95e4SMarcin Wojtas 		struct fmi_conf fmi_conf;
71419aa95e4SMarcin Wojtas 		struct {
71519aa95e4SMarcin Wojtas 			uint32_t	addr[2];
71619aa95e4SMarcin Wojtas 			union {
71719aa95e4SMarcin Wojtas 				uint32_t	opt[4];
71819aa95e4SMarcin Wojtas 				struct tgs_gcl_conf	gcl_conf;
71919aa95e4SMarcin Wojtas 				struct streamid_conf	sid_set;
72019aa95e4SMarcin Wojtas 				struct sgcl_conf	sgcl_conf;
72119aa95e4SMarcin Wojtas 			};
72219aa95e4SMarcin Wojtas 		};	/* Long format */
72319aa95e4SMarcin Wojtas 		uint32_t data[6];
72419aa95e4SMarcin Wojtas 	};
72519aa95e4SMarcin Wojtas 	uint16_t index;
72619aa95e4SMarcin Wojtas 	uint16_t length;
72719aa95e4SMarcin Wojtas 	uint8_t cmd;
72819aa95e4SMarcin Wojtas 	uint8_t cls;
72919aa95e4SMarcin Wojtas 	uint8_t _res;
73019aa95e4SMarcin Wojtas 	uint8_t status_flags;
73119aa95e4SMarcin Wojtas };
73219aa95e4SMarcin Wojtas 
73319aa95e4SMarcin Wojtas #define ENETC_CLK  400000000ULL
73419aa95e4SMarcin Wojtas 
73519aa95e4SMarcin Wojtas /* port time gating control register */
73619aa95e4SMarcin Wojtas #define ENETC_QBV_PTGCR_OFFSET		0x11a00
73719aa95e4SMarcin Wojtas #define ENETC_QBV_TGE			BIT(31)
73819aa95e4SMarcin Wojtas #define ENETC_QBV_TGPE			BIT(30)
73919aa95e4SMarcin Wojtas 
74019aa95e4SMarcin Wojtas /* Port time gating capability register */
74119aa95e4SMarcin Wojtas #define ENETC_QBV_PTGCAPR_OFFSET	0x11a08
74219aa95e4SMarcin Wojtas #define ENETC_QBV_MAX_GCL_LEN_MASK	GENMASK(15, 0)
74319aa95e4SMarcin Wojtas 
74419aa95e4SMarcin Wojtas /* Port time specific departure */
74519aa95e4SMarcin Wojtas #define ENETC_PTCTSDR(n)	(0x1210 + 4 * (n))
74619aa95e4SMarcin Wojtas #define ENETC_TSDE		BIT(31)
74719aa95e4SMarcin Wojtas 
74819aa95e4SMarcin Wojtas /* PSFP setting */
74919aa95e4SMarcin Wojtas #define ENETC_PPSFPMR 0x11b00
75019aa95e4SMarcin Wojtas #define ENETC_PPSFPMR_PSFPEN BIT(0)
75119aa95e4SMarcin Wojtas #define ENETC_PPSFPMR_VS BIT(1)
75219aa95e4SMarcin Wojtas #define ENETC_PPSFPMR_PVC BIT(2)
75319aa95e4SMarcin Wojtas #define ENETC_PPSFPMR_PVZC BIT(3)
75419aa95e4SMarcin Wojtas 
75519aa95e4SMarcin Wojtas #endif
756