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