#ifndef __ENETC4_HW_H_
#define __ENETC4_HW_H_
#define NXP_ENETC_VENDOR_ID 0x1131
#define NXP_ENETC_PF_DEV_ID 0xe101
#define NXP_ENETC_PPM_DEV_ID 0xe110
#define ENETC4_SILSOSFMR0 0x1300
#define SILSOSFMR0_TCP_MID_SEG GENMASK(27, 16)
#define SILSOSFMR0_TCP_1ST_SEG GENMASK(11, 0)
#define SILSOSFMR0_VAL_SET(first, mid) (FIELD_PREP(SILSOSFMR0_TCP_MID_SEG, mid) | \
FIELD_PREP(SILSOSFMR0_TCP_1ST_SEG, first))
#define ENETC4_SILSOSFMR1 0x1304
#define SILSOSFMR1_TCP_LAST_SEG GENMASK(11, 0)
#define ENETC4_TCP_FLAGS_FIN BIT(0)
#define ENETC4_TCP_FLAGS_SYN BIT(1)
#define ENETC4_TCP_FLAGS_RST BIT(2)
#define ENETC4_TCP_FLAGS_PSH BIT(3)
#define ENETC4_TCP_FLAGS_ACK BIT(4)
#define ENETC4_TCP_FLAGS_URG BIT(5)
#define ENETC4_TCP_FLAGS_ECE BIT(6)
#define ENETC4_TCP_FLAGS_CWR BIT(7)
#define ENETC4_TCP_FLAGS_NS BIT(8)
#define ENETC4_TCP_NL_SEG_FLAGS_DMASK (ENETC4_TCP_FLAGS_FIN | \
ENETC4_TCP_FLAGS_RST | ENETC4_TCP_FLAGS_PSH)
#define ENETC4_ECAPR0 0x0
#define ECAPR0_RFS BIT(2)
#define ECAPR0_TSD BIT(5)
#define ECAPR0_RSS BIT(8)
#define ECAPR0_RSC BIT(9)
#define ECAPR0_LSO BIT(10)
#define ECAPR0_WO BIT(13)
#define ENETC4_ECAPR1 0x4
#define ECAPR1_NUM_TCS GENMASK(6, 4)
#define ECAPR1_NUM_MCH GENMASK(9, 8)
#define ECAPR1_NUM_UCH GENMASK(11, 10)
#define ECAPR1_NUM_MSIX GENMASK(22, 12)
#define ECAPR1_NUM_VSI GENMASK(27, 24)
#define ECAPR1_NUM_IPV BIT(31)
#define ENETC4_ECAPR2 0x8
#define ECAPR2_NUM_TX_BDR GENMASK(9, 0)
#define ECAPR2_NUM_RX_BDR GENMASK(25, 16)
#define ENETC4_PMR 0x10
#define PMR_SI_EN(a) BIT((16 + (a)))
#define ENETC4_PPAUONTR 0x108
#define ENETC4_PPAUOFFTR 0x10c
#define ENETC4_PICDRDCR(a) ((a) * 0x10 + 0x140)
#define ENETC4_PSIPMMR 0x200
#define PSIPMMR_SI_MAC_UP(a) BIT(a)
#define PSIPMMR_SI_MAC_MP(a) BIT((a) + 16)
#define ENETC4_PSIPVMR 0x204
#define ENETC4_PBFDSIR 0x208
#define ENETC4_PFDMSAPR 0x20c
#define ENETC4_PRSSKR(n) ((n) * 0x4 + 0x250)
#define ENETC4_PSIMAFCAPR 0x280
#define PSIMAFCAPR_NUM_MAC_AFTE GENMASK(11, 0)
#define ENETC4_PUFDMFR 0x284
#define ENETC4_PMFDMFR 0x288
#define ENETC4_PSIVLANFCAPR 0x2c0
#define PSIVLANFCAPR_NUM_VLAN_FTE GENMASK(11, 0)
#define ENETC4_PSIVLANFMR 0x2c4
#define PSIVLANFMR_VS BIT(0)
#define ENETC4_PUFDVFR 0x2d0
#define ENETC4_PMFDVFR 0x2d4
#define ENETC4_PBFDVFR 0x2d8
#define ENETC4_PSIPMAR0(a) ((a) * 0x80 + 0x2000)
#define ENETC4_PSIPMAR1(a) ((a) * 0x80 + 0x2004)
#define ENETC4_PSICFGR0(a) ((a) * 0x80 + 0x2010)
#define PSICFGR0_VASE BIT(13)
#define PSICFGR0_ASE BIT(15)
#define PSICFGR0_ANTI_SPOOFING (PSICFGR0_VASE | PSICFGR0_ASE)
#define ENETC4_PSICFGR2(a) ((a) * 0x80 + 0x2018)
#define PSICFGR2_NUM_MSIX GENMASK(5, 0)
#define ENETC4_PSIUMHFR0(a) ((a) * 0x80 + 0x2050)
#define ENETC4_PSIUMHFR1(a) ((a) * 0x80 + 0x2054)
#define ENETC4_PSIMMHFR0(a) ((a) * 0x80 + 0x2058)
#define ENETC4_PSIMMHFR1(a) ((a) * 0x80 + 0x205c)
#define ENETC4_PSIVHFR0(a) ((a) * 0x80 + 0x2060)
#define ENETC4_PSIVHFR1(a) ((a) * 0x80 + 0x2064)
#define ENETC4_PMCAPR 0x4004
#define PMCAPR_HD BIT(8)
#define PMCAPR_FP GENMASK(10, 9)
#define ENETC4_PCAPR 0x4000
#define PCAPR_LINK_TYPE BIT(4)
#define ENETC4_PCR 0x4010
#define PCR_HDR_FMT BIT(0)
#define PCR_L2DOSE BIT(4)
#define PCR_TIMER_CS BIT(8)
#define PCR_PSPEED GENMASK(29, 16)
#define PCR_PSPEED_VAL(speed) (((speed) / 10 - 1) << 16)
#define ENETC4_PMAR0 0x4020
#define ENETC4_PMAR1 0x4024
#define ENETC4_POR 0x4100
#define POR_TXDIS BIT(0)
#define POR_RXDIS BIT(1)
#define ENETC4_PSR 0x4104
#define PSR_RX_BUSY BIT(1)
#define ENETC4_PRXDCR 0x41c0
#define ENETC4_PRXDCRRR 0x41c4
#define ENETC4_PRXDCRR0 0x41c8
#define ENETC4_PRXDCRR1 0x41cc
#define ENETC4_PTCTMSDUR(a) ((a) * 0x20 + 0x4208)
#define PTCTMSDUR_MAXSDU GENMASK(15, 0)
#define PTCTMSDUR_SDU_TYPE GENMASK(17, 16)
#define SDU_TYPE_PPDU 0
#define SDU_TYPE_MPDU 1
#define SDU_TYPE_MSDU 2
#define ENETC4_PMAC_OFFSET 0x400
#define ENETC4_PM_CMD_CFG(mac) (0x5008 + (mac) * 0x400)
#define PM_CMD_CFG_TX_EN BIT(0)
#define PM_CMD_CFG_RX_EN BIT(1)
#define PM_CMD_CFG_PAUSE_FWD BIT(7)
#define PM_CMD_CFG_PAUSE_IGN BIT(8)
#define PM_CMD_CFG_TX_ADDR_INS BIT(9)
#define PM_CMD_CFG_LOOP_EN BIT(10)
#define PM_CMD_CFG_LPBK_MODE GENMASK(12, 11)
#define LPBCK_MODE_EXT_TX_CLK 0
#define LPBCK_MODE_MAC_LEVEL 1
#define LPBCK_MODE_INT_TX_CLK 2
#define PM_CMD_CFG_CNT_FRM_EN BIT(13)
#define PM_CMD_CFG_TXP BIT(15)
#define PM_CMD_CFG_SEND_IDLE BIT(16)
#define PM_CMD_CFG_HD_FCEN BIT(18)
#define PM_CMD_CFG_SFD BIT(21)
#define PM_CMD_CFG_TX_FLUSH BIT(22)
#define PM_CMD_CFG_TX_LOWP_EN BIT(23)
#define PM_CMD_CFG_RX_LOWP_EMPTY BIT(24)
#define PM_CMD_CFG_SWR BIT(26)
#define PM_CMD_CFG_TS_MODE BIT(30)
#define PM_CMD_CFG_MG BIT(31)
#define ENETC4_PM_MAXFRM(mac) (0x5014 + (mac) * 0x400)
#define ENETC4_PM_IMDIO_BASE 0x5030
#define ENETC4_PM_IEVENT(mac) (0x5040 + (mac) * 0x400)
#define PM_IEVENT_TX_EMPTY BIT(5)
#define PM_IEVENT_RX_EMPTY BIT(6)
#define ENETC4_PM_PAUSE_QUANTA(mac) (0x5054 + (mac) * 0x400)
#define ENETC4_PM_PAUSE_THRESH(mac) (0x5064 + (mac) * 0x400)
#define ENETC4_PM_SINGLE_STEP(mac) (0x50c0 + (mac) * 0x400)
#define PM_SINGLE_STEP_CH BIT(6)
#define PM_SINGLE_STEP_OFFSET GENMASK(15, 7)
#define PM_SINGLE_STEP_OFFSET_SET(o) FIELD_PREP(PM_SINGLE_STEP_OFFSET, o)
#define PM_SINGLE_STEP_EN BIT(31)
#define ENETC4_PM_REOCT(mac) (0x5100 + (mac) * 0x400)
#define ENETC4_PM_ROCT(mac) (0x5108 + (mac) * 0x400)
#define ENETC4_PM_RALN(mac) (0x5110 + (mac) * 0x400)
#define ENETC4_PM_RXPF(mac) (0x5118 + (mac) * 0x400)
#define ENETC4_PM_RFRM(mac) (0x5120 + (mac) * 0x400)
#define ENETC4_PM_RFCS(mac) (0x5128 + (mac) * 0x400)
#define ENETC4_PM_RVLAN(mac) (0x5130 + (mac) * 0x400)
#define ENETC4_PM_RERR(mac) (0x5138 + (mac) * 0x400)
#define ENETC4_PM_RUCA(mac) (0x5140 + (mac) * 0x400)
#define ENETC4_PM_RMCA(mac) (0x5148 + (mac) * 0x400)
#define ENETC4_PM_RBCA(mac) (0x5150 + (mac) * 0x400)
#define ENETC4_PM_RDRP(mac) (0x5158 + (mac) * 0x400)
#define ENETC4_PM_RPKT(mac) (0x5160 + (mac) * 0x400)
#define ENETC4_PM_RUND(mac) (0x5168 + (mac) * 0x400)
#define ENETC4_PM_R64(mac) (0x5170 + (mac) * 0x400)
#define ENETC4_PM_R127(mac) (0x5178 + (mac) * 0x400)
#define ENETC4_PM_R255(mac) (0x5180 + (mac) * 0x400)
#define ENETC4_PM_R511(mac) (0x5188 + (mac) * 0x400)
#define ENETC4_PM_R1023(mac) (0x5190 + (mac) * 0x400)
#define ENETC4_PM_R1522(mac) (0x5198 + (mac) * 0x400)
#define ENETC4_PM_R1523X(mac) (0x51a0 + (mac) * 0x400)
#define ENETC4_PM_ROVR(mac) (0x51a8 + (mac) * 0x400)
#define ENETC4_PM_RJBR(mac) (0x51b0 + (mac) * 0x400)
#define ENETC4_PM_RFRG(mac) (0x51b8 + (mac) * 0x400)
#define ENETC4_PM_RCNP(mac) (0x51c0 + (mac) * 0x400)
#define ENETC4_PM_RDRNTP(mac) (0x51c8 + (mac) * 0x400)
#define ENETC4_PM_TEOCT(mac) (0x5200 + (mac) * 0x400)
#define ENETC4_PM_TOCT(mac) (0x5208 + (mac) * 0x400)
#define ENETC4_PM_TXPF(mac) (0x5218 + (mac) * 0x400)
#define ENETC4_PM_TFRM(mac) (0x5220 + (mac) * 0x400)
#define ENETC4_PM_TFCS(mac) (0x5228 + (mac) * 0x400)
#define ENETC4_PM_TVLAN(mac) (0x5230 + (mac) * 0x400)
#define ENETC4_PM_TERR(mac) (0x5238 + (mac) * 0x400)
#define ENETC4_PM_TUCA(mac) (0x5240 + (mac) * 0x400)
#define ENETC4_PM_TMCA(mac) (0x5248 + (mac) * 0x400)
#define ENETC4_PM_TBCA(mac) (0x5250 + (mac) * 0x400)
#define ENETC4_PM_TPKT(mac) (0x5260 + (mac) * 0x400)
#define ENETC4_PM_TUND(mac) (0x5268 + (mac) * 0x400)
#define ENETC4_PM_T64(mac) (0x5270 + (mac) * 0x400)
#define ENETC4_PM_T127(mac) (0x5278 + (mac) * 0x400)
#define ENETC4_PM_T255(mac) (0x5280 + (mac) * 0x400)
#define ENETC4_PM_T511(mac) (0x5288 + (mac) * 0x400)
#define ENETC4_PM_T1023(mac) (0x5290 + (mac) * 0x400)
#define ENETC4_PM_T1522(mac) (0x5298 + (mac) * 0x400)
#define ENETC4_PM_T1523X(mac) (0x52a0 + (mac) * 0x400)
#define ENETC4_PM_TCNP(mac) (0x52c0 + (mac) * 0x400)
#define ENETC4_PM_TDFR(mac) (0x52d0 + (mac) * 0x400)
#define ENETC4_PM_TMCOL(mac) (0x52d8 + (mac) * 0x400)
#define ENETC4_PM_TSCOL(mac) (0x52e0 + (mac) * 0x400)
#define ENETC4_PM_TLCOL(mac) (0x52e8 + (mac) * 0x400)
#define ENETC4_PM_TECOL(mac) (0x52f0 + (mac) * 0x400)
#define ENETC4_PM_TIOCT(mac) (0x52f8 + (mac) * 0x400)
#define ENETC4_PM_IF_MODE(mac) (0x5300 + (mac) * 0x400)
#define PM_IF_MODE_IFMODE GENMASK(2, 0)
#define IFMODE_XGMII 0
#define IFMODE_RMII 3
#define IFMODE_RGMII 4
#define IFMODE_SGMII 5
#define PM_IF_MODE_REVMII BIT(3)
#define PM_IF_MODE_M10 BIT(4)
#define PM_IF_MODE_HD BIT(6)
#define PM_IF_MODE_SSP GENMASK(14, 13)
#define SSP_100M 0
#define SSP_10M 1
#define SSP_1G 2
#define PM_IF_MODE_ENA BIT(15)
#define ENETC4_EMDIO_BASE 0x5c00
#define ENETC4_PPMROCR 0x5080
#define ENETC4_PPMRUFCR 0x5088
#define ENETC4_PPMRMFCR 0x5090
#define ENETC4_PPMRBFCR 0x5098
#define ENETC4_PPMTOCR 0x50c0
#define ENETC4_PPMTUFCR 0x50c8
#define ENETC4_PPMTMFCR 0x50d0
#define ENETC4_PPMTBFCR 0x50d8
#endif