0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef MTK_ETH_H
0010 #define MTK_ETH_H
0011
0012 #include <linux/dma-mapping.h>
0013 #include <linux/netdevice.h>
0014 #include <linux/of_net.h>
0015 #include <linux/u64_stats_sync.h>
0016 #include <linux/refcount.h>
0017 #include <linux/phylink.h>
0018 #include <linux/rhashtable.h>
0019 #include <linux/dim.h>
0020 #include <linux/bitfield.h>
0021 #include <net/page_pool.h>
0022 #include <linux/bpf_trace.h>
0023 #include "mtk_ppe.h"
0024
0025 #define MTK_QDMA_PAGE_SIZE 2048
0026 #define MTK_MAX_RX_LENGTH 1536
0027 #define MTK_MAX_RX_LENGTH_2K 2048
0028 #define MTK_TX_DMA_BUF_LEN 0x3fff
0029 #define MTK_TX_DMA_BUF_LEN_V2 0xffff
0030 #define MTK_DMA_SIZE 512
0031 #define MTK_MAC_COUNT 2
0032 #define MTK_RX_ETH_HLEN (ETH_HLEN + ETH_FCS_LEN)
0033 #define MTK_RX_HLEN (NET_SKB_PAD + MTK_RX_ETH_HLEN + NET_IP_ALIGN)
0034 #define MTK_DMA_DUMMY_DESC 0xffffffff
0035 #define MTK_DEFAULT_MSG_ENABLE (NETIF_MSG_DRV | \
0036 NETIF_MSG_PROBE | \
0037 NETIF_MSG_LINK | \
0038 NETIF_MSG_TIMER | \
0039 NETIF_MSG_IFDOWN | \
0040 NETIF_MSG_IFUP | \
0041 NETIF_MSG_RX_ERR | \
0042 NETIF_MSG_TX_ERR)
0043 #define MTK_HW_FEATURES (NETIF_F_IP_CSUM | \
0044 NETIF_F_RXCSUM | \
0045 NETIF_F_HW_VLAN_CTAG_TX | \
0046 NETIF_F_HW_VLAN_CTAG_RX | \
0047 NETIF_F_SG | NETIF_F_TSO | \
0048 NETIF_F_TSO6 | \
0049 NETIF_F_IPV6_CSUM |\
0050 NETIF_F_HW_TC)
0051 #define MTK_HW_FEATURES_MT7628 (NETIF_F_SG | NETIF_F_RXCSUM)
0052 #define NEXT_DESP_IDX(X, Y) (((X) + 1) & ((Y) - 1))
0053
0054 #define MTK_PP_HEADROOM XDP_PACKET_HEADROOM
0055 #define MTK_PP_PAD (MTK_PP_HEADROOM + \
0056 SKB_DATA_ALIGN(sizeof(struct skb_shared_info)))
0057 #define MTK_PP_MAX_BUF_SIZE (PAGE_SIZE - MTK_PP_PAD)
0058
0059 #define MTK_QRX_OFFSET 0x10
0060
0061 #define MTK_MAX_RX_RING_NUM 4
0062 #define MTK_HW_LRO_DMA_SIZE 8
0063
0064 #define MTK_MAX_LRO_RX_LENGTH (4096 * 3)
0065 #define MTK_MAX_LRO_IP_CNT 2
0066 #define MTK_HW_LRO_TIMER_UNIT 1
0067 #define MTK_HW_LRO_REFRESH_TIME 50000
0068 #define MTK_HW_LRO_AGG_TIME 10
0069 #define MTK_HW_LRO_AGE_TIME 50
0070 #define MTK_HW_LRO_MAX_AGG_CNT 64
0071 #define MTK_HW_LRO_BW_THRE 3000
0072 #define MTK_HW_LRO_REPLACE_DELTA 1000
0073 #define MTK_HW_LRO_SDL_REMAIN_ROOM 1522
0074
0075
0076 #define MTK_RST_GL 0x04
0077 #define RST_GL_PSE BIT(0)
0078
0079
0080 #define MTK_INT_STATUS2 0x08
0081 #define MTK_GDM1_AF BIT(28)
0082 #define MTK_GDM2_AF BIT(29)
0083
0084
0085 #define MTK_PDMA_LRO_ALT_REFRESH_TIMER 0x1c
0086
0087
0088 #define MTK_FE_INT_GRP 0x20
0089
0090
0091 #define MTK_CDMQ_IG_CTRL 0x1400
0092 #define MTK_CDMQ_STAG_EN BIT(0)
0093
0094
0095 #define MTK_CDMP_IG_CTRL 0x400
0096 #define MTK_CDMP_STAG_EN BIT(0)
0097
0098
0099 #define MTK_CDMP_EG_CTRL 0x404
0100
0101
0102 #define MTK_GDMA_FWD_CFG(x) (0x500 + (x * 0x1000))
0103 #define MTK_GDMA_SPECIAL_TAG BIT(24)
0104 #define MTK_GDMA_ICS_EN BIT(22)
0105 #define MTK_GDMA_TCS_EN BIT(21)
0106 #define MTK_GDMA_UCS_EN BIT(20)
0107 #define MTK_GDMA_TO_PDMA 0x0
0108 #define MTK_GDMA_TO_PPE 0x4444
0109 #define MTK_GDMA_DROP_ALL 0x7777
0110
0111
0112 #define MTK_GDMA_MAC_ADRL(x) (0x508 + (x * 0x1000))
0113
0114
0115 #define MTK_GDMA_MAC_ADRH(x) (0x50C + (x * 0x1000))
0116
0117
0118 #define MTK_FE_GLO_MISC 0x124
0119
0120
0121 #define PSE_FQFC_CFG1 0x100
0122 #define PSE_FQFC_CFG2 0x104
0123 #define PSE_DROP_CFG 0x108
0124
0125
0126 #define PSE_IQ_REV(x) (0x140 + (((x) - 1) << 2))
0127
0128
0129 #define PSE_OQ_TH(x) (0x160 + (((x) - 1) << 2))
0130
0131
0132 #define MTK_GDM2_THRES 0x1530
0133 #define MTK_CDMW0_THRES 0x164c
0134 #define MTK_CDMW1_THRES 0x1650
0135 #define MTK_CDME0_THRES 0x1654
0136 #define MTK_CDME1_THRES 0x1658
0137 #define MTK_CDMM_THRES 0x165c
0138
0139
0140 #define MTK_PDMA_LRO_CTRL_DW0 0x980
0141 #define MTK_LRO_EN BIT(0)
0142 #define MTK_L3_CKS_UPD_EN BIT(7)
0143 #define MTK_L3_CKS_UPD_EN_V2 BIT(19)
0144 #define MTK_LRO_ALT_PKT_CNT_MODE BIT(21)
0145 #define MTK_LRO_RING_RELINQUISH_REQ (0x7 << 26)
0146 #define MTK_LRO_RING_RELINQUISH_REQ_V2 (0xf << 24)
0147 #define MTK_LRO_RING_RELINQUISH_DONE (0x7 << 29)
0148 #define MTK_LRO_RING_RELINQUISH_DONE_V2 (0xf << 28)
0149
0150 #define MTK_PDMA_LRO_CTRL_DW1 0x984
0151 #define MTK_PDMA_LRO_CTRL_DW2 0x988
0152 #define MTK_PDMA_LRO_CTRL_DW3 0x98c
0153 #define MTK_ADMA_MODE BIT(15)
0154 #define MTK_LRO_MIN_RXD_SDL (MTK_HW_LRO_SDL_REMAIN_ROOM << 16)
0155
0156 #define MTK_RX_DMA_LRO_EN BIT(8)
0157 #define MTK_MULTI_EN BIT(10)
0158 #define MTK_PDMA_SIZE_8DWORDS (1 << 4)
0159
0160
0161 #define MTK_PDMA_LRO_SDL 0x3000
0162 #define MTK_RX_CFG_SDL_OFFSET 16
0163
0164
0165 #define MTK_PST_DRX_IDX0 BIT(16)
0166 #define MTK_PST_DRX_IDX_CFG(x) (MTK_PST_DRX_IDX0 << (x))
0167
0168
0169 #define MTK_PDMA_DELAY_RX_MASK GENMASK(15, 0)
0170 #define MTK_PDMA_DELAY_RX_EN BIT(15)
0171 #define MTK_PDMA_DELAY_RX_PINT_SHIFT 8
0172 #define MTK_PDMA_DELAY_RX_PTIME_SHIFT 0
0173
0174 #define MTK_PDMA_DELAY_TX_MASK GENMASK(31, 16)
0175 #define MTK_PDMA_DELAY_TX_EN BIT(31)
0176 #define MTK_PDMA_DELAY_TX_PINT_SHIFT 24
0177 #define MTK_PDMA_DELAY_TX_PTIME_SHIFT 16
0178
0179 #define MTK_PDMA_DELAY_PINT_MASK 0x7f
0180 #define MTK_PDMA_DELAY_PTIME_MASK 0xff
0181
0182
0183 #define MTK_PDMA_LRO_ALT_SCORE_DELTA 0xa4c
0184
0185
0186 #define MTK_LRO_RX_RING0_DIP_DW0 0xb04
0187 #define MTK_LRO_DIP_DW0_CFG(x) (MTK_LRO_RX_RING0_DIP_DW0 + (x * 0x40))
0188 #define MTK_RING_MYIP_VLD BIT(9)
0189
0190
0191 #define MTK_LRO_RX_RING0_CTRL_DW1 0xb28
0192 #define MTK_LRO_RX_RING0_CTRL_DW2 0xb2c
0193 #define MTK_LRO_RX_RING0_CTRL_DW3 0xb30
0194 #define MTK_LRO_CTRL_DW1_CFG(x) (MTK_LRO_RX_RING0_CTRL_DW1 + (x * 0x40))
0195 #define MTK_LRO_CTRL_DW2_CFG(x) (MTK_LRO_RX_RING0_CTRL_DW2 + (x * 0x40))
0196 #define MTK_LRO_CTRL_DW3_CFG(x) (MTK_LRO_RX_RING0_CTRL_DW3 + (x * 0x40))
0197 #define MTK_RING_AGE_TIME_L ((MTK_HW_LRO_AGE_TIME & 0x3ff) << 22)
0198 #define MTK_RING_AGE_TIME_H ((MTK_HW_LRO_AGE_TIME >> 10) & 0x3f)
0199 #define MTK_RING_AUTO_LERAN_MODE (3 << 6)
0200 #define MTK_RING_VLD BIT(8)
0201 #define MTK_RING_MAX_AGG_TIME ((MTK_HW_LRO_AGG_TIME & 0xffff) << 10)
0202 #define MTK_RING_MAX_AGG_CNT_L ((MTK_HW_LRO_MAX_AGG_CNT & 0x3f) << 26)
0203 #define MTK_RING_MAX_AGG_CNT_H ((MTK_HW_LRO_MAX_AGG_CNT >> 6) & 0x3)
0204
0205
0206 #define QDMA_RES_THRES 4
0207
0208
0209 #define MTK_RX_2B_OFFSET BIT(31)
0210 #define MTK_RX_BT_32DWORDS (3 << 11)
0211 #define MTK_NDP_CO_PRO BIT(10)
0212 #define MTK_TX_WB_DDONE BIT(6)
0213 #define MTK_TX_BT_32DWORDS (3 << 4)
0214 #define MTK_RX_DMA_BUSY BIT(3)
0215 #define MTK_TX_DMA_BUSY BIT(1)
0216 #define MTK_RX_DMA_EN BIT(2)
0217 #define MTK_TX_DMA_EN BIT(0)
0218 #define MTK_DMA_BUSY_TIMEOUT_US 1000000
0219
0220
0221 #define MTK_CHK_DDONE_EN BIT(28)
0222 #define MTK_DMAD_WR_WDONE BIT(26)
0223 #define MTK_WCOMP_EN BIT(24)
0224 #define MTK_RESV_BUF (0x40 << 16)
0225 #define MTK_MUTLI_CNT (0x4 << 12)
0226
0227
0228 #define FC_THRES_DROP_MODE BIT(20)
0229 #define FC_THRES_DROP_EN (7 << 16)
0230 #define FC_THRES_MIN 0x4444
0231
0232
0233 #define MTK_RX_DONE_DLY BIT(30)
0234 #define MTK_TX_DONE_DLY BIT(28)
0235 #define MTK_RX_DONE_INT3 BIT(19)
0236 #define MTK_RX_DONE_INT2 BIT(18)
0237 #define MTK_RX_DONE_INT1 BIT(17)
0238 #define MTK_RX_DONE_INT0 BIT(16)
0239 #define MTK_TX_DONE_INT3 BIT(3)
0240 #define MTK_TX_DONE_INT2 BIT(2)
0241 #define MTK_TX_DONE_INT1 BIT(1)
0242 #define MTK_TX_DONE_INT0 BIT(0)
0243 #define MTK_RX_DONE_INT MTK_RX_DONE_DLY
0244 #define MTK_TX_DONE_INT MTK_TX_DONE_DLY
0245
0246 #define MTK_RX_DONE_INT_V2 BIT(14)
0247
0248
0249 #define MTK_RLS_DONE_INT BIT(0)
0250
0251 #define MTK_STAT_OFFSET 0x40
0252
0253
0254 #define MTK_QDMA_TX_NUM 16
0255 #define MTK_QDMA_TX_MASK (MTK_QDMA_TX_NUM - 1)
0256 #define QID_BITS_V2(x) (((x) & 0x3f) << 16)
0257 #define MTK_QDMA_GMAC2_QID 8
0258
0259 #define MTK_TX_DMA_BUF_SHIFT 8
0260
0261
0262 #define TX_DMA_INS_VLAN_V2 BIT(16)
0263
0264 #define TX_DMA_CHKSUM_V2 (0x7 << 28)
0265 #define TX_DMA_TSO_V2 BIT(31)
0266
0267
0268 #define TX_DMA_FPORT_SHIFT_V2 8
0269 #define TX_DMA_FPORT_MASK_V2 0xf
0270 #define TX_DMA_SWC_V2 BIT(30)
0271
0272 #define MTK_WDMA0_BASE 0x2800
0273 #define MTK_WDMA1_BASE 0x2c00
0274
0275
0276 #define TX_DMA_CHKSUM (0x7 << 29)
0277 #define TX_DMA_TSO BIT(28)
0278 #define TX_DMA_FPORT_SHIFT 25
0279 #define TX_DMA_FPORT_MASK 0x7
0280 #define TX_DMA_INS_VLAN BIT(16)
0281
0282
0283 #define TX_DMA_OWNER_CPU BIT(31)
0284 #define TX_DMA_LS0 BIT(30)
0285 #define TX_DMA_PLEN0(x) (((x) & eth->soc->txrx.dma_max_len) << eth->soc->txrx.dma_len_offset)
0286 #define TX_DMA_PLEN1(x) ((x) & eth->soc->txrx.dma_max_len)
0287 #define TX_DMA_SWC BIT(14)
0288
0289
0290 #define TX_DMA_DONE BIT(31)
0291 #define TX_DMA_LS1 BIT(14)
0292 #define TX_DMA_DESP2_DEF (TX_DMA_LS0 | TX_DMA_DONE)
0293
0294
0295 #define RX_DMA_DONE BIT(31)
0296 #define RX_DMA_LSO BIT(30)
0297 #define RX_DMA_PREP_PLEN0(x) (((x) & eth->soc->txrx.dma_max_len) << eth->soc->txrx.dma_len_offset)
0298 #define RX_DMA_GET_PLEN0(x) (((x) >> eth->soc->txrx.dma_len_offset) & eth->soc->txrx.dma_max_len)
0299 #define RX_DMA_VTAG BIT(15)
0300
0301
0302 #define RX_DMA_VID(x) ((x) & VLAN_VID_MASK)
0303 #define RX_DMA_TCI(x) ((x) & (VLAN_PRIO_MASK | VLAN_VID_MASK))
0304 #define RX_DMA_VPID(x) (((x) >> 16) & 0xffff)
0305
0306
0307 #define MTK_RXD4_FOE_ENTRY GENMASK(13, 0)
0308 #define MTK_RXD4_PPE_CPU_REASON GENMASK(18, 14)
0309 #define MTK_RXD4_SRC_PORT GENMASK(21, 19)
0310 #define MTK_RXD4_ALG GENMASK(31, 22)
0311
0312
0313 #define RX_DMA_L4_VALID BIT(24)
0314 #define RX_DMA_L4_VALID_PDMA BIT(30)
0315 #define RX_DMA_SPECIAL_TAG BIT(22)
0316
0317
0318 #define MTK_RXD5_FOE_ENTRY GENMASK(14, 0)
0319 #define MTK_RXD5_PPE_CPU_REASON GENMASK(22, 18)
0320 #define MTK_RXD5_SRC_PORT GENMASK(29, 26)
0321
0322 #define RX_DMA_GET_SPORT(x) (((x) >> 19) & 0x7)
0323 #define RX_DMA_GET_SPORT_V2(x) (((x) >> 26) & 0xf)
0324
0325
0326 #define RX_DMA_VTAG_V2 BIT(0)
0327 #define RX_DMA_L4_VALID_V2 BIT(2)
0328
0329
0330 #define MTK_PHY_IAC 0x10004
0331 #define PHY_IAC_ACCESS BIT(31)
0332 #define PHY_IAC_REG_MASK GENMASK(29, 25)
0333 #define PHY_IAC_REG(x) FIELD_PREP(PHY_IAC_REG_MASK, (x))
0334 #define PHY_IAC_ADDR_MASK GENMASK(24, 20)
0335 #define PHY_IAC_ADDR(x) FIELD_PREP(PHY_IAC_ADDR_MASK, (x))
0336 #define PHY_IAC_CMD_MASK GENMASK(19, 18)
0337 #define PHY_IAC_CMD_C45_ADDR FIELD_PREP(PHY_IAC_CMD_MASK, 0)
0338 #define PHY_IAC_CMD_WRITE FIELD_PREP(PHY_IAC_CMD_MASK, 1)
0339 #define PHY_IAC_CMD_C22_READ FIELD_PREP(PHY_IAC_CMD_MASK, 2)
0340 #define PHY_IAC_CMD_C45_READ FIELD_PREP(PHY_IAC_CMD_MASK, 3)
0341 #define PHY_IAC_START_MASK GENMASK(17, 16)
0342 #define PHY_IAC_START_C45 FIELD_PREP(PHY_IAC_START_MASK, 0)
0343 #define PHY_IAC_START_C22 FIELD_PREP(PHY_IAC_START_MASK, 1)
0344 #define PHY_IAC_DATA_MASK GENMASK(15, 0)
0345 #define PHY_IAC_DATA(x) FIELD_PREP(PHY_IAC_DATA_MASK, (x))
0346 #define PHY_IAC_TIMEOUT HZ
0347
0348 #define MTK_MAC_MISC 0x1000c
0349 #define MTK_MUX_TO_ESW BIT(0)
0350
0351
0352 #define MTK_MAC_MCR(x) (0x10100 + (x * 0x100))
0353 #define MAC_MCR_MAX_RX_MASK GENMASK(25, 24)
0354 #define MAC_MCR_MAX_RX(_x) (MAC_MCR_MAX_RX_MASK & ((_x) << 24))
0355 #define MAC_MCR_MAX_RX_1518 0x0
0356 #define MAC_MCR_MAX_RX_1536 0x1
0357 #define MAC_MCR_MAX_RX_1552 0x2
0358 #define MAC_MCR_MAX_RX_2048 0x3
0359 #define MAC_MCR_IPG_CFG (BIT(18) | BIT(16))
0360 #define MAC_MCR_FORCE_MODE BIT(15)
0361 #define MAC_MCR_TX_EN BIT(14)
0362 #define MAC_MCR_RX_EN BIT(13)
0363 #define MAC_MCR_BACKOFF_EN BIT(9)
0364 #define MAC_MCR_BACKPR_EN BIT(8)
0365 #define MAC_MCR_FORCE_RX_FC BIT(5)
0366 #define MAC_MCR_FORCE_TX_FC BIT(4)
0367 #define MAC_MCR_SPEED_1000 BIT(3)
0368 #define MAC_MCR_SPEED_100 BIT(2)
0369 #define MAC_MCR_FORCE_DPX BIT(1)
0370 #define MAC_MCR_FORCE_LINK BIT(0)
0371 #define MAC_MCR_FORCE_LINK_DOWN (MAC_MCR_FORCE_MODE)
0372
0373
0374 #define MTK_MAC_MSR(x) (0x10108 + (x * 0x100))
0375 #define MAC_MSR_EEE1G BIT(7)
0376 #define MAC_MSR_EEE100M BIT(6)
0377 #define MAC_MSR_RX_FC BIT(5)
0378 #define MAC_MSR_TX_FC BIT(4)
0379 #define MAC_MSR_SPEED_1000 BIT(3)
0380 #define MAC_MSR_SPEED_100 BIT(2)
0381 #define MAC_MSR_SPEED_MASK (MAC_MSR_SPEED_1000 | MAC_MSR_SPEED_100)
0382 #define MAC_MSR_DPX BIT(1)
0383 #define MAC_MSR_LINK BIT(0)
0384
0385
0386 #define TRGMII_RCK_CTRL 0x10300
0387 #define DQSI0(x) ((x << 0) & GENMASK(6, 0))
0388 #define DQSI1(x) ((x << 8) & GENMASK(14, 8))
0389 #define RXCTL_DMWTLAT(x) ((x << 16) & GENMASK(18, 16))
0390 #define RXC_RST BIT(31)
0391 #define RXC_DQSISEL BIT(30)
0392 #define RCK_CTRL_RGMII_1000 (RXC_DQSISEL | RXCTL_DMWTLAT(2) | DQSI1(16))
0393 #define RCK_CTRL_RGMII_10_100 RXCTL_DMWTLAT(2)
0394
0395 #define NUM_TRGMII_CTRL 5
0396
0397
0398 #define TRGMII_TCK_CTRL 0x10340
0399 #define TXCTL_DMWTLAT(x) ((x << 16) & GENMASK(18, 16))
0400 #define TXC_INV BIT(30)
0401 #define TCK_CTRL_RGMII_1000 TXCTL_DMWTLAT(2)
0402 #define TCK_CTRL_RGMII_10_100 (TXC_INV | TXCTL_DMWTLAT(2))
0403
0404
0405 #define TRGMII_TD_ODT(i) (0x10354 + 8 * (i))
0406 #define TD_DM_DRVP(x) ((x) & 0xf)
0407 #define TD_DM_DRVN(x) (((x) & 0xf) << 4)
0408
0409
0410 #define INTF_MODE 0x10390
0411 #define TRGMII_INTF_DIS BIT(0)
0412 #define TRGMII_MODE BIT(1)
0413 #define TRGMII_CENTRAL_ALIGNED BIT(2)
0414 #define INTF_MODE_RGMII_1000 (TRGMII_MODE | TRGMII_CENTRAL_ALIGNED)
0415 #define INTF_MODE_RGMII_10_100 0
0416
0417
0418 #define GPIO_OD33_CTRL8 0x4c0
0419 #define GPIO_BIAS_CTRL 0xed0
0420 #define GPIO_DRV_SEL10 0xf00
0421
0422
0423 #define ETHSYS_CHIPID0_3 0x0
0424 #define ETHSYS_CHIPID4_7 0x4
0425 #define MT7623_ETH 7623
0426 #define MT7622_ETH 7622
0427 #define MT7621_ETH 7621
0428
0429
0430 #define ETHSYS_SYSCFG 0x10
0431 #define SYSCFG_DRAM_TYPE_DDR2 BIT(4)
0432
0433
0434 #define ETHSYS_SYSCFG0 0x14
0435 #define SYSCFG0_GE_MASK 0x3
0436 #define SYSCFG0_GE_MODE(x, y) (x << (12 + (y * 2)))
0437 #define SYSCFG0_SGMII_MASK GENMASK(9, 8)
0438 #define SYSCFG0_SGMII_GMAC1 ((2 << 8) & SYSCFG0_SGMII_MASK)
0439 #define SYSCFG0_SGMII_GMAC2 ((3 << 8) & SYSCFG0_SGMII_MASK)
0440 #define SYSCFG0_SGMII_GMAC1_V2 BIT(9)
0441 #define SYSCFG0_SGMII_GMAC2_V2 BIT(8)
0442
0443
0444
0445 #define ETHSYS_CLKCFG0 0x2c
0446 #define ETHSYS_TRGMII_CLK_SEL362_5 BIT(11)
0447 #define ETHSYS_TRGMII_MT7621_MASK (BIT(5) | BIT(6))
0448 #define ETHSYS_TRGMII_MT7621_APLL BIT(6)
0449 #define ETHSYS_TRGMII_MT7621_DDR_PLL BIT(5)
0450
0451
0452 #define ETHSYS_RSTCTRL 0x34
0453 #define RSTCTRL_FE BIT(6)
0454 #define RSTCTRL_PPE BIT(31)
0455 #define RSTCTRL_PPE1 BIT(30)
0456 #define RSTCTRL_ETH BIT(23)
0457
0458
0459 #define ETHSYS_FE_RST_CHK_IDLE_EN 0x28
0460
0461
0462 #define ETHSYS_RSTCTRL 0x34
0463 #define RSTCTRL_FE BIT(6)
0464 #define RSTCTRL_PPE BIT(31)
0465
0466
0467 #define ETHSYS_DMA_AG_MAP 0x408
0468 #define ETHSYS_DMA_AG_MAP_PDMA BIT(0)
0469 #define ETHSYS_DMA_AG_MAP_QDMA BIT(1)
0470 #define ETHSYS_DMA_AG_MAP_PPE BIT(2)
0471
0472
0473
0474 #define SGMSYS_PCS_CONTROL_1 0x0
0475 #define SGMII_AN_RESTART BIT(9)
0476 #define SGMII_ISOLATE BIT(10)
0477 #define SGMII_AN_ENABLE BIT(12)
0478 #define SGMII_LINK_STATYS BIT(18)
0479 #define SGMII_AN_ABILITY BIT(19)
0480 #define SGMII_AN_COMPLETE BIT(21)
0481 #define SGMII_PCS_FAULT BIT(23)
0482 #define SGMII_AN_EXPANSION_CLR BIT(30)
0483
0484
0485 #define SGMSYS_PCS_LINK_TIMER 0x18
0486 #define SGMII_LINK_TIMER_DEFAULT (0x186a0 & GENMASK(19, 0))
0487
0488
0489 #define SGMSYS_SGMII_MODE 0x20
0490 #define SGMII_IF_MODE_BIT0 BIT(0)
0491 #define SGMII_SPEED_DUPLEX_AN BIT(1)
0492 #define SGMII_SPEED_MASK GENMASK(3, 2)
0493 #define SGMII_SPEED_10 FIELD_PREP(SGMII_SPEED_MASK, 0)
0494 #define SGMII_SPEED_100 FIELD_PREP(SGMII_SPEED_MASK, 1)
0495 #define SGMII_SPEED_1000 FIELD_PREP(SGMII_SPEED_MASK, 2)
0496 #define SGMII_DUPLEX_FULL BIT(4)
0497 #define SGMII_IF_MODE_BIT5 BIT(5)
0498 #define SGMII_REMOTE_FAULT_DIS BIT(8)
0499 #define SGMII_CODE_SYNC_SET_VAL BIT(9)
0500 #define SGMII_CODE_SYNC_SET_EN BIT(10)
0501 #define SGMII_SEND_AN_ERROR_EN BIT(11)
0502 #define SGMII_IF_MODE_MASK GENMASK(5, 1)
0503
0504
0505 #define SGMSYS_ANA_RG_CS3 0x2028
0506 #define RG_PHY_SPEED_MASK (BIT(2) | BIT(3))
0507 #define RG_PHY_SPEED_1_25G 0x0
0508 #define RG_PHY_SPEED_3_125G BIT(2)
0509
0510
0511 #define SGMSYS_QPHY_PWR_STATE_CTRL 0xe8
0512 #define SGMII_PHYA_PWD BIT(4)
0513
0514
0515 #define INFRA_MISC2 0x70c
0516 #define CO_QPHY_SEL BIT(0)
0517 #define GEPHY_MAC_SEL BIT(1)
0518
0519
0520 #define MT7628_PDMA_OFFSET 0x0800
0521 #define MT7628_SDM_OFFSET 0x0c00
0522
0523 #define MT7628_TX_BASE_PTR0 (MT7628_PDMA_OFFSET + 0x00)
0524 #define MT7628_TX_MAX_CNT0 (MT7628_PDMA_OFFSET + 0x04)
0525 #define MT7628_TX_CTX_IDX0 (MT7628_PDMA_OFFSET + 0x08)
0526 #define MT7628_TX_DTX_IDX0 (MT7628_PDMA_OFFSET + 0x0c)
0527 #define MT7628_PST_DTX_IDX0 BIT(0)
0528
0529 #define MT7628_SDM_MAC_ADRL (MT7628_SDM_OFFSET + 0x0c)
0530 #define MT7628_SDM_MAC_ADRH (MT7628_SDM_OFFSET + 0x10)
0531
0532
0533 #define MT7628_SDM_TPCNT (MT7628_SDM_OFFSET + 0x100)
0534 #define MT7628_SDM_TBCNT (MT7628_SDM_OFFSET + 0x104)
0535 #define MT7628_SDM_RPCNT (MT7628_SDM_OFFSET + 0x108)
0536 #define MT7628_SDM_RBCNT (MT7628_SDM_OFFSET + 0x10c)
0537 #define MT7628_SDM_CS_ERR (MT7628_SDM_OFFSET + 0x110)
0538
0539 struct mtk_rx_dma {
0540 unsigned int rxd1;
0541 unsigned int rxd2;
0542 unsigned int rxd3;
0543 unsigned int rxd4;
0544 } __packed __aligned(4);
0545
0546 struct mtk_rx_dma_v2 {
0547 unsigned int rxd1;
0548 unsigned int rxd2;
0549 unsigned int rxd3;
0550 unsigned int rxd4;
0551 unsigned int rxd5;
0552 unsigned int rxd6;
0553 unsigned int rxd7;
0554 unsigned int rxd8;
0555 } __packed __aligned(4);
0556
0557 struct mtk_tx_dma {
0558 unsigned int txd1;
0559 unsigned int txd2;
0560 unsigned int txd3;
0561 unsigned int txd4;
0562 } __packed __aligned(4);
0563
0564 struct mtk_tx_dma_v2 {
0565 unsigned int txd1;
0566 unsigned int txd2;
0567 unsigned int txd3;
0568 unsigned int txd4;
0569 unsigned int txd5;
0570 unsigned int txd6;
0571 unsigned int txd7;
0572 unsigned int txd8;
0573 } __packed __aligned(4);
0574
0575 struct mtk_eth;
0576 struct mtk_mac;
0577
0578 struct mtk_xdp_stats {
0579 u64 rx_xdp_redirect;
0580 u64 rx_xdp_pass;
0581 u64 rx_xdp_drop;
0582 u64 rx_xdp_tx;
0583 u64 rx_xdp_tx_errors;
0584 u64 tx_xdp_xmit;
0585 u64 tx_xdp_xmit_errors;
0586 };
0587
0588
0589
0590
0591
0592
0593
0594
0595
0596
0597 struct mtk_hw_stats {
0598 u64 tx_bytes;
0599 u64 tx_packets;
0600 u64 tx_skip;
0601 u64 tx_collisions;
0602 u64 rx_bytes;
0603 u64 rx_packets;
0604 u64 rx_overflow;
0605 u64 rx_fcs_errors;
0606 u64 rx_short_errors;
0607 u64 rx_long_errors;
0608 u64 rx_checksum_errors;
0609 u64 rx_flow_control_packets;
0610
0611 struct mtk_xdp_stats xdp_stats;
0612
0613 spinlock_t stats_lock;
0614 u32 reg_offset;
0615 struct u64_stats_sync syncp;
0616 };
0617
0618 enum mtk_tx_flags {
0619
0620
0621
0622 MTK_TX_FLAGS_SINGLE0 = 0x01,
0623 MTK_TX_FLAGS_PAGE0 = 0x02,
0624
0625
0626
0627
0628 MTK_TX_FLAGS_FPORT0 = 0x04,
0629 MTK_TX_FLAGS_FPORT1 = 0x08,
0630 };
0631
0632
0633
0634
0635 enum mtk_clks_map {
0636 MTK_CLK_ETHIF,
0637 MTK_CLK_SGMIITOP,
0638 MTK_CLK_ESW,
0639 MTK_CLK_GP0,
0640 MTK_CLK_GP1,
0641 MTK_CLK_GP2,
0642 MTK_CLK_FE,
0643 MTK_CLK_TRGPLL,
0644 MTK_CLK_SGMII_TX_250M,
0645 MTK_CLK_SGMII_RX_250M,
0646 MTK_CLK_SGMII_CDR_REF,
0647 MTK_CLK_SGMII_CDR_FB,
0648 MTK_CLK_SGMII2_TX_250M,
0649 MTK_CLK_SGMII2_RX_250M,
0650 MTK_CLK_SGMII2_CDR_REF,
0651 MTK_CLK_SGMII2_CDR_FB,
0652 MTK_CLK_SGMII_CK,
0653 MTK_CLK_ETH2PLL,
0654 MTK_CLK_WOCPU0,
0655 MTK_CLK_WOCPU1,
0656 MTK_CLK_NETSYS0,
0657 MTK_CLK_NETSYS1,
0658 MTK_CLK_MAX
0659 };
0660
0661 #define MT7623_CLKS_BITMAP (BIT(MTK_CLK_ETHIF) | BIT(MTK_CLK_ESW) | \
0662 BIT(MTK_CLK_GP1) | BIT(MTK_CLK_GP2) | \
0663 BIT(MTK_CLK_TRGPLL))
0664 #define MT7622_CLKS_BITMAP (BIT(MTK_CLK_ETHIF) | BIT(MTK_CLK_ESW) | \
0665 BIT(MTK_CLK_GP0) | BIT(MTK_CLK_GP1) | \
0666 BIT(MTK_CLK_GP2) | \
0667 BIT(MTK_CLK_SGMII_TX_250M) | \
0668 BIT(MTK_CLK_SGMII_RX_250M) | \
0669 BIT(MTK_CLK_SGMII_CDR_REF) | \
0670 BIT(MTK_CLK_SGMII_CDR_FB) | \
0671 BIT(MTK_CLK_SGMII_CK) | \
0672 BIT(MTK_CLK_ETH2PLL))
0673 #define MT7621_CLKS_BITMAP (0)
0674 #define MT7628_CLKS_BITMAP (0)
0675 #define MT7629_CLKS_BITMAP (BIT(MTK_CLK_ETHIF) | BIT(MTK_CLK_ESW) | \
0676 BIT(MTK_CLK_GP0) | BIT(MTK_CLK_GP1) | \
0677 BIT(MTK_CLK_GP2) | BIT(MTK_CLK_FE) | \
0678 BIT(MTK_CLK_SGMII_TX_250M) | \
0679 BIT(MTK_CLK_SGMII_RX_250M) | \
0680 BIT(MTK_CLK_SGMII_CDR_REF) | \
0681 BIT(MTK_CLK_SGMII_CDR_FB) | \
0682 BIT(MTK_CLK_SGMII2_TX_250M) | \
0683 BIT(MTK_CLK_SGMII2_RX_250M) | \
0684 BIT(MTK_CLK_SGMII2_CDR_REF) | \
0685 BIT(MTK_CLK_SGMII2_CDR_FB) | \
0686 BIT(MTK_CLK_SGMII_CK) | \
0687 BIT(MTK_CLK_ETH2PLL) | BIT(MTK_CLK_SGMIITOP))
0688 #define MT7986_CLKS_BITMAP (BIT(MTK_CLK_FE) | BIT(MTK_CLK_GP2) | BIT(MTK_CLK_GP1) | \
0689 BIT(MTK_CLK_WOCPU1) | BIT(MTK_CLK_WOCPU0) | \
0690 BIT(MTK_CLK_SGMII_TX_250M) | \
0691 BIT(MTK_CLK_SGMII_RX_250M) | \
0692 BIT(MTK_CLK_SGMII_CDR_REF) | \
0693 BIT(MTK_CLK_SGMII_CDR_FB) | \
0694 BIT(MTK_CLK_SGMII2_TX_250M) | \
0695 BIT(MTK_CLK_SGMII2_RX_250M) | \
0696 BIT(MTK_CLK_SGMII2_CDR_REF) | \
0697 BIT(MTK_CLK_SGMII2_CDR_FB))
0698
0699 enum mtk_dev_state {
0700 MTK_HW_INIT,
0701 MTK_RESETTING
0702 };
0703
0704 enum mtk_tx_buf_type {
0705 MTK_TYPE_SKB,
0706 MTK_TYPE_XDP_TX,
0707 MTK_TYPE_XDP_NDO,
0708 };
0709
0710
0711
0712
0713
0714
0715
0716
0717
0718 struct mtk_tx_buf {
0719 enum mtk_tx_buf_type type;
0720 void *data;
0721
0722 u32 flags;
0723 DEFINE_DMA_UNMAP_ADDR(dma_addr0);
0724 DEFINE_DMA_UNMAP_LEN(dma_len0);
0725 DEFINE_DMA_UNMAP_ADDR(dma_addr1);
0726 DEFINE_DMA_UNMAP_LEN(dma_len1);
0727 };
0728
0729
0730
0731
0732
0733
0734
0735
0736
0737
0738
0739
0740 struct mtk_tx_ring {
0741 void *dma;
0742 struct mtk_tx_buf *buf;
0743 dma_addr_t phys;
0744 struct mtk_tx_dma *next_free;
0745 struct mtk_tx_dma *last_free;
0746 u32 last_free_ptr;
0747 u16 thresh;
0748 atomic_t free_count;
0749 int dma_size;
0750 struct mtk_tx_dma *dma_pdma;
0751 dma_addr_t phys_pdma;
0752 int cpu_idx;
0753 };
0754
0755
0756 enum mtk_rx_flags {
0757 MTK_RX_FLAGS_NORMAL = 0,
0758 MTK_RX_FLAGS_HWLRO,
0759 MTK_RX_FLAGS_QDMA,
0760 };
0761
0762
0763
0764
0765
0766
0767
0768
0769
0770 struct mtk_rx_ring {
0771 void *dma;
0772 u8 **data;
0773 dma_addr_t phys;
0774 u16 frag_size;
0775 u16 buf_size;
0776 u16 dma_size;
0777 bool calc_idx_update;
0778 u16 calc_idx;
0779 u32 crx_idx_reg;
0780
0781 struct page_pool *page_pool;
0782 struct xdp_rxq_info xdp_q;
0783 };
0784
0785 enum mkt_eth_capabilities {
0786 MTK_RGMII_BIT = 0,
0787 MTK_TRGMII_BIT,
0788 MTK_SGMII_BIT,
0789 MTK_ESW_BIT,
0790 MTK_GEPHY_BIT,
0791 MTK_MUX_BIT,
0792 MTK_INFRA_BIT,
0793 MTK_SHARED_SGMII_BIT,
0794 MTK_HWLRO_BIT,
0795 MTK_SHARED_INT_BIT,
0796 MTK_TRGMII_MT7621_CLK_BIT,
0797 MTK_QDMA_BIT,
0798 MTK_NETSYS_V2_BIT,
0799 MTK_SOC_MT7628_BIT,
0800 MTK_RSTCTRL_PPE1_BIT,
0801
0802
0803 MTK_ETH_MUX_GDM1_TO_GMAC1_ESW_BIT,
0804 MTK_ETH_MUX_GMAC2_GMAC0_TO_GEPHY_BIT,
0805 MTK_ETH_MUX_U3_GMAC2_TO_QPHY_BIT,
0806 MTK_ETH_MUX_GMAC1_GMAC2_TO_SGMII_RGMII_BIT,
0807 MTK_ETH_MUX_GMAC12_TO_GEPHY_SGMII_BIT,
0808
0809
0810 MTK_ETH_PATH_GMAC1_RGMII_BIT,
0811 MTK_ETH_PATH_GMAC1_TRGMII_BIT,
0812 MTK_ETH_PATH_GMAC1_SGMII_BIT,
0813 MTK_ETH_PATH_GMAC2_RGMII_BIT,
0814 MTK_ETH_PATH_GMAC2_SGMII_BIT,
0815 MTK_ETH_PATH_GMAC2_GEPHY_BIT,
0816 MTK_ETH_PATH_GDM1_ESW_BIT,
0817 };
0818
0819
0820 #define MTK_RGMII BIT(MTK_RGMII_BIT)
0821 #define MTK_TRGMII BIT(MTK_TRGMII_BIT)
0822 #define MTK_SGMII BIT(MTK_SGMII_BIT)
0823 #define MTK_ESW BIT(MTK_ESW_BIT)
0824 #define MTK_GEPHY BIT(MTK_GEPHY_BIT)
0825 #define MTK_MUX BIT(MTK_MUX_BIT)
0826 #define MTK_INFRA BIT(MTK_INFRA_BIT)
0827 #define MTK_SHARED_SGMII BIT(MTK_SHARED_SGMII_BIT)
0828 #define MTK_HWLRO BIT(MTK_HWLRO_BIT)
0829 #define MTK_SHARED_INT BIT(MTK_SHARED_INT_BIT)
0830 #define MTK_TRGMII_MT7621_CLK BIT(MTK_TRGMII_MT7621_CLK_BIT)
0831 #define MTK_QDMA BIT(MTK_QDMA_BIT)
0832 #define MTK_NETSYS_V2 BIT(MTK_NETSYS_V2_BIT)
0833 #define MTK_SOC_MT7628 BIT(MTK_SOC_MT7628_BIT)
0834 #define MTK_RSTCTRL_PPE1 BIT(MTK_RSTCTRL_PPE1_BIT)
0835
0836 #define MTK_ETH_MUX_GDM1_TO_GMAC1_ESW \
0837 BIT(MTK_ETH_MUX_GDM1_TO_GMAC1_ESW_BIT)
0838 #define MTK_ETH_MUX_GMAC2_GMAC0_TO_GEPHY \
0839 BIT(MTK_ETH_MUX_GMAC2_GMAC0_TO_GEPHY_BIT)
0840 #define MTK_ETH_MUX_U3_GMAC2_TO_QPHY \
0841 BIT(MTK_ETH_MUX_U3_GMAC2_TO_QPHY_BIT)
0842 #define MTK_ETH_MUX_GMAC1_GMAC2_TO_SGMII_RGMII \
0843 BIT(MTK_ETH_MUX_GMAC1_GMAC2_TO_SGMII_RGMII_BIT)
0844 #define MTK_ETH_MUX_GMAC12_TO_GEPHY_SGMII \
0845 BIT(MTK_ETH_MUX_GMAC12_TO_GEPHY_SGMII_BIT)
0846
0847
0848 #define MTK_ETH_PATH_GMAC1_RGMII BIT(MTK_ETH_PATH_GMAC1_RGMII_BIT)
0849 #define MTK_ETH_PATH_GMAC1_TRGMII BIT(MTK_ETH_PATH_GMAC1_TRGMII_BIT)
0850 #define MTK_ETH_PATH_GMAC1_SGMII BIT(MTK_ETH_PATH_GMAC1_SGMII_BIT)
0851 #define MTK_ETH_PATH_GMAC2_RGMII BIT(MTK_ETH_PATH_GMAC2_RGMII_BIT)
0852 #define MTK_ETH_PATH_GMAC2_SGMII BIT(MTK_ETH_PATH_GMAC2_SGMII_BIT)
0853 #define MTK_ETH_PATH_GMAC2_GEPHY BIT(MTK_ETH_PATH_GMAC2_GEPHY_BIT)
0854 #define MTK_ETH_PATH_GDM1_ESW BIT(MTK_ETH_PATH_GDM1_ESW_BIT)
0855
0856 #define MTK_GMAC1_RGMII (MTK_ETH_PATH_GMAC1_RGMII | MTK_RGMII)
0857 #define MTK_GMAC1_TRGMII (MTK_ETH_PATH_GMAC1_TRGMII | MTK_TRGMII)
0858 #define MTK_GMAC1_SGMII (MTK_ETH_PATH_GMAC1_SGMII | MTK_SGMII)
0859 #define MTK_GMAC2_RGMII (MTK_ETH_PATH_GMAC2_RGMII | MTK_RGMII)
0860 #define MTK_GMAC2_SGMII (MTK_ETH_PATH_GMAC2_SGMII | MTK_SGMII)
0861 #define MTK_GMAC2_GEPHY (MTK_ETH_PATH_GMAC2_GEPHY | MTK_GEPHY)
0862 #define MTK_GDM1_ESW (MTK_ETH_PATH_GDM1_ESW | MTK_ESW)
0863
0864
0865
0866 #define MTK_MUX_GDM1_TO_GMAC1_ESW (MTK_ETH_MUX_GDM1_TO_GMAC1_ESW | MTK_MUX)
0867
0868
0869 #define MTK_MUX_GMAC2_GMAC0_TO_GEPHY \
0870 (MTK_ETH_MUX_GMAC2_GMAC0_TO_GEPHY | MTK_MUX | MTK_INFRA)
0871
0872
0873 #define MTK_MUX_U3_GMAC2_TO_QPHY \
0874 (MTK_ETH_MUX_U3_GMAC2_TO_QPHY | MTK_MUX | MTK_INFRA)
0875
0876
0877 #define MTK_MUX_GMAC1_GMAC2_TO_SGMII_RGMII \
0878 (MTK_ETH_MUX_GMAC1_GMAC2_TO_SGMII_RGMII | MTK_MUX | \
0879 MTK_SHARED_SGMII)
0880
0881
0882 #define MTK_MUX_GMAC12_TO_GEPHY_SGMII \
0883 (MTK_ETH_MUX_GMAC12_TO_GEPHY_SGMII | MTK_MUX)
0884
0885 #define MTK_HAS_CAPS(caps, _x) (((caps) & (_x)) == (_x))
0886
0887 #define MT7621_CAPS (MTK_GMAC1_RGMII | MTK_GMAC1_TRGMII | \
0888 MTK_GMAC2_RGMII | MTK_SHARED_INT | \
0889 MTK_TRGMII_MT7621_CLK | MTK_QDMA)
0890
0891 #define MT7622_CAPS (MTK_GMAC1_RGMII | MTK_GMAC1_SGMII | MTK_GMAC2_RGMII | \
0892 MTK_GMAC2_SGMII | MTK_GDM1_ESW | \
0893 MTK_MUX_GDM1_TO_GMAC1_ESW | \
0894 MTK_MUX_GMAC1_GMAC2_TO_SGMII_RGMII | MTK_QDMA)
0895
0896 #define MT7623_CAPS (MTK_GMAC1_RGMII | MTK_GMAC1_TRGMII | MTK_GMAC2_RGMII | \
0897 MTK_QDMA)
0898
0899 #define MT7628_CAPS (MTK_SHARED_INT | MTK_SOC_MT7628)
0900
0901 #define MT7629_CAPS (MTK_GMAC1_SGMII | MTK_GMAC2_SGMII | MTK_GMAC2_GEPHY | \
0902 MTK_GDM1_ESW | MTK_MUX_GDM1_TO_GMAC1_ESW | \
0903 MTK_MUX_GMAC2_GMAC0_TO_GEPHY | \
0904 MTK_MUX_U3_GMAC2_TO_QPHY | \
0905 MTK_MUX_GMAC12_TO_GEPHY_SGMII | MTK_QDMA)
0906
0907 #define MT7986_CAPS (MTK_GMAC1_SGMII | MTK_GMAC2_SGMII | \
0908 MTK_MUX_GMAC12_TO_GEPHY_SGMII | MTK_QDMA | \
0909 MTK_NETSYS_V2 | MTK_RSTCTRL_PPE1)
0910
0911 struct mtk_tx_dma_desc_info {
0912 dma_addr_t addr;
0913 u32 size;
0914 u16 vlan_tci;
0915 u16 qid;
0916 u8 gso:1;
0917 u8 csum:1;
0918 u8 vlan:1;
0919 u8 first:1;
0920 u8 last:1;
0921 };
0922
0923 struct mtk_reg_map {
0924 u32 tx_irq_mask;
0925 u32 tx_irq_status;
0926 struct {
0927 u32 rx_ptr;
0928 u32 rx_cnt_cfg;
0929 u32 pcrx_ptr;
0930 u32 glo_cfg;
0931 u32 rst_idx;
0932 u32 delay_irq;
0933 u32 irq_status;
0934 u32 irq_mask;
0935 u32 int_grp;
0936 } pdma;
0937 struct {
0938 u32 qtx_cfg;
0939 u32 rx_ptr;
0940 u32 rx_cnt_cfg;
0941 u32 qcrx_ptr;
0942 u32 glo_cfg;
0943 u32 rst_idx;
0944 u32 delay_irq;
0945 u32 fc_th;
0946 u32 int_grp;
0947 u32 hred;
0948 u32 ctx_ptr;
0949 u32 dtx_ptr;
0950 u32 crx_ptr;
0951 u32 drx_ptr;
0952 u32 fq_head;
0953 u32 fq_tail;
0954 u32 fq_count;
0955 u32 fq_blen;
0956 } qdma;
0957 u32 gdm1_cnt;
0958 };
0959
0960
0961
0962
0963
0964
0965
0966
0967
0968
0969
0970
0971
0972
0973
0974
0975
0976
0977
0978 struct mtk_soc_data {
0979 const struct mtk_reg_map *reg_map;
0980 u32 ana_rgc3;
0981 u32 caps;
0982 u32 required_clks;
0983 bool required_pctl;
0984 u8 offload_version;
0985 netdev_features_t hw_features;
0986 struct {
0987 u32 txd_size;
0988 u32 rxd_size;
0989 u32 rx_irq_done_mask;
0990 u32 rx_dma_l4_valid;
0991 u32 dma_max_len;
0992 u32 dma_len_offset;
0993 } txrx;
0994 };
0995
0996
0997 #define MTK_MAX_DEVS 2
0998
0999
1000
1001
1002
1003
1004
1005
1006 struct mtk_pcs {
1007 struct regmap *regmap;
1008 u32 ana_rgc3;
1009 struct phylink_pcs pcs;
1010 };
1011
1012
1013
1014
1015
1016 struct mtk_sgmii {
1017 struct mtk_pcs pcs[MTK_MAX_DEVS];
1018 };
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065 struct mtk_eth {
1066 struct device *dev;
1067 struct device *dma_dev;
1068 void __iomem *base;
1069 spinlock_t page_lock;
1070 spinlock_t tx_irq_lock;
1071 spinlock_t rx_irq_lock;
1072 struct net_device dummy_dev;
1073 struct net_device *netdev[MTK_MAX_DEVS];
1074 struct mtk_mac *mac[MTK_MAX_DEVS];
1075 int irq[3];
1076 u32 msg_enable;
1077 unsigned long sysclk;
1078 struct regmap *ethsys;
1079 struct regmap *infra;
1080 struct mtk_sgmii *sgmii;
1081 struct regmap *pctl;
1082 bool hwlro;
1083 refcount_t dma_refcnt;
1084 struct mtk_tx_ring tx_ring;
1085 struct mtk_rx_ring rx_ring[MTK_MAX_RX_RING_NUM];
1086 struct mtk_rx_ring rx_ring_qdma;
1087 struct napi_struct tx_napi;
1088 struct napi_struct rx_napi;
1089 void *scratch_ring;
1090 dma_addr_t phy_scratch_ring;
1091 void *scratch_head;
1092 struct clk *clks[MTK_CLK_MAX];
1093
1094 struct mii_bus *mii_bus;
1095 struct work_struct pending_work;
1096 unsigned long state;
1097
1098 const struct mtk_soc_data *soc;
1099
1100 spinlock_t dim_lock;
1101
1102 u32 rx_events;
1103 u32 rx_packets;
1104 u32 rx_bytes;
1105 struct dim rx_dim;
1106
1107 u32 tx_events;
1108 u32 tx_packets;
1109 u32 tx_bytes;
1110 struct dim tx_dim;
1111
1112 int ip_align;
1113
1114 struct mtk_ppe *ppe;
1115 struct rhashtable flow_table;
1116
1117 struct bpf_prog __rcu *prog;
1118 };
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128 struct mtk_mac {
1129 int id;
1130 phy_interface_t interface;
1131 int speed;
1132 struct device_node *of_node;
1133 struct phylink *phylink;
1134 struct phylink_config phylink_config;
1135 struct mtk_eth *hw;
1136 struct mtk_hw_stats *hw_stats;
1137 __be32 hwlro_ip[MTK_MAX_LRO_IP_CNT];
1138 int hwlro_ip_cnt;
1139 unsigned int syscfg0;
1140 };
1141
1142
1143 extern const struct of_device_id of_mtk_match[];
1144
1145
1146 void mtk_stats_update_mac(struct mtk_mac *mac);
1147
1148 void mtk_w32(struct mtk_eth *eth, u32 val, unsigned reg);
1149 u32 mtk_r32(struct mtk_eth *eth, unsigned reg);
1150
1151 struct phylink_pcs *mtk_sgmii_select_pcs(struct mtk_sgmii *ss, int id);
1152 int mtk_sgmii_init(struct mtk_sgmii *ss, struct device_node *np,
1153 u32 ana_rgc3);
1154
1155 int mtk_gmac_sgmii_path_setup(struct mtk_eth *eth, int mac_id);
1156 int mtk_gmac_gephy_path_setup(struct mtk_eth *eth, int mac_id);
1157 int mtk_gmac_rgmii_path_setup(struct mtk_eth *eth, int mac_id);
1158
1159 int mtk_eth_offload_init(struct mtk_eth *eth);
1160 int mtk_eth_setup_tc(struct net_device *dev, enum tc_setup_type type,
1161 void *type_data);
1162 void mtk_eth_set_dma_device(struct mtk_eth *eth, struct device *dma_dev);
1163
1164
1165 #endif