Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  *
0004  *   Copyright (C) 2009-2016 John Crispin <blogic@openwrt.org>
0005  *   Copyright (C) 2009-2016 Felix Fietkau <nbd@openwrt.org>
0006  *   Copyright (C) 2013-2016 Michael Lee <igvtee@gmail.com>
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   /* 20 us */
0067 #define MTK_HW_LRO_REFRESH_TIME     50000   /* 1 sec. */
0068 #define MTK_HW_LRO_AGG_TIME     10  /* 200us */
0069 #define MTK_HW_LRO_AGE_TIME     50  /* 1ms */
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 /* Frame Engine Global Reset Register */
0076 #define MTK_RST_GL      0x04
0077 #define RST_GL_PSE      BIT(0)
0078 
0079 /* Frame Engine Interrupt Status Register */
0080 #define MTK_INT_STATUS2     0x08
0081 #define MTK_GDM1_AF     BIT(28)
0082 #define MTK_GDM2_AF     BIT(29)
0083 
0084 /* PDMA HW LRO Alter Flow Timer Register */
0085 #define MTK_PDMA_LRO_ALT_REFRESH_TIMER  0x1c
0086 
0087 /* Frame Engine Interrupt Grouping Register */
0088 #define MTK_FE_INT_GRP      0x20
0089 
0090 /* CDMP Ingress Control Register */
0091 #define MTK_CDMQ_IG_CTRL    0x1400
0092 #define MTK_CDMQ_STAG_EN    BIT(0)
0093 
0094 /* CDMP Ingress Control Register */
0095 #define MTK_CDMP_IG_CTRL    0x400
0096 #define MTK_CDMP_STAG_EN    BIT(0)
0097 
0098 /* CDMP Exgress Control Register */
0099 #define MTK_CDMP_EG_CTRL    0x404
0100 
0101 /* GDM Exgress Control Register */
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 /* Unicast Filter MAC Address Register - Low */
0112 #define MTK_GDMA_MAC_ADRL(x)    (0x508 + (x * 0x1000))
0113 
0114 /* Unicast Filter MAC Address Register - High */
0115 #define MTK_GDMA_MAC_ADRH(x)    (0x50C + (x * 0x1000))
0116 
0117 /* FE global misc reg*/
0118 #define MTK_FE_GLO_MISC         0x124
0119 
0120 /* PSE Free Queue Flow Control  */
0121 #define PSE_FQFC_CFG1       0x100
0122 #define PSE_FQFC_CFG2       0x104
0123 #define PSE_DROP_CFG        0x108
0124 
0125 /* PSE Input Queue Reservation Register*/
0126 #define PSE_IQ_REV(x)       (0x140 + (((x) - 1) << 2))
0127 
0128 /* PSE Output Queue Threshold Register*/
0129 #define PSE_OQ_TH(x)        (0x160 + (((x) - 1) << 2))
0130 
0131 /* GDM and CDM Threshold */
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 /* PDMA HW LRO Control Registers */
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 /* PDMA Global Configuration Register */
0161 #define MTK_PDMA_LRO_SDL    0x3000
0162 #define MTK_RX_CFG_SDL_OFFSET   16
0163 
0164 /* PDMA Reset Index Register */
0165 #define MTK_PST_DRX_IDX0    BIT(16)
0166 #define MTK_PST_DRX_IDX_CFG(x)  (MTK_PST_DRX_IDX0 << (x))
0167 
0168 /* PDMA Delay Interrupt Register */
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 /* PDMA HW LRO Alter Flow Delta Register */
0183 #define MTK_PDMA_LRO_ALT_SCORE_DELTA    0xa4c
0184 
0185 /* PDMA HW LRO IP Setting Registers */
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 /* PDMA HW LRO Ring Control Registers */
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 /* QDMA TX Queue Configuration Registers */
0206 #define QDMA_RES_THRES      4
0207 
0208 /* QDMA Global Configuration Register */
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 /* QDMA V2 Global Configuration Register */
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 /* QDMA Flow Control Register */
0228 #define FC_THRES_DROP_MODE  BIT(20)
0229 #define FC_THRES_DROP_EN    (7 << 16)
0230 #define FC_THRES_MIN        0x4444
0231 
0232 /* QDMA Interrupt Status Register */
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 /* QDMA Interrupt grouping registers */
0249 #define MTK_RLS_DONE_INT    BIT(0)
0250 
0251 #define MTK_STAT_OFFSET     0x40
0252 
0253 /* QDMA TX NUM */
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 /* QDMA V2 descriptor txd6 */
0262 #define TX_DMA_INS_VLAN_V2  BIT(16)
0263 /* QDMA V2 descriptor txd5 */
0264 #define TX_DMA_CHKSUM_V2    (0x7 << 28)
0265 #define TX_DMA_TSO_V2       BIT(31)
0266 
0267 /* QDMA V2 descriptor txd4 */
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 /* QDMA descriptor txd4 */
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 /* QDMA descriptor txd3 */
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 /* PDMA on MT7628 */
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 /* QDMA descriptor rxd2 */
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 /* QDMA descriptor rxd3 */
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 /* QDMA descriptor rxd4 */
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 /* QDMA descriptor rxd4 */
0313 #define RX_DMA_L4_VALID     BIT(24)
0314 #define RX_DMA_L4_VALID_PDMA    BIT(30)     /* when PDMA is used */
0315 #define RX_DMA_SPECIAL_TAG  BIT(22)
0316 
0317 /* PDMA descriptor rxd5 */
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 /* PDMA V2 descriptor rxd3 */
0326 #define RX_DMA_VTAG_V2      BIT(0)
0327 #define RX_DMA_L4_VALID_V2  BIT(2)
0328 
0329 /* PHY Indirect Access Control registers */
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 /* Mac control registers */
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 /* Mac status registers */
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 /* TRGMII RXC control register */
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 /* TRGMII RXC control register */
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 /* TRGMII TX Drive Strength */
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 /* TRGMII Interface mode register */
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 /* GPIO port control registers for GMAC 2*/
0418 #define GPIO_OD33_CTRL8     0x4c0
0419 #define GPIO_BIAS_CTRL      0xed0
0420 #define GPIO_DRV_SEL10      0xf00
0421 
0422 /* ethernet subsystem chip id register */
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 /* ethernet system control register */
0430 #define ETHSYS_SYSCFG       0x10
0431 #define SYSCFG_DRAM_TYPE_DDR2   BIT(4)
0432 
0433 /* ethernet subsystem config register */
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 /* ethernet subsystem clock register */
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 /* ethernet reset control register */
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 /* ethernet reset check idle register */
0459 #define ETHSYS_FE_RST_CHK_IDLE_EN   0x28
0460 
0461 /* ethernet reset control register */
0462 #define ETHSYS_RSTCTRL      0x34
0463 #define RSTCTRL_FE      BIT(6)
0464 #define RSTCTRL_PPE     BIT(31)
0465 
0466 /* ethernet dma channel agent map */
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 /* SGMII subsystem config registers */
0473 /* Register to auto-negotiation restart */
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 /* Register to programmable link timer, the unit in 2 * 8ns */
0485 #define SGMSYS_PCS_LINK_TIMER   0x18
0486 #define SGMII_LINK_TIMER_DEFAULT    (0x186a0 & GENMASK(19, 0))
0487 
0488 /* Register to control remote fault */
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 /* Register to set SGMII speed, ANA RG_ Control Signals III*/
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 /* Register to power up QPHY */
0511 #define SGMSYS_QPHY_PWR_STATE_CTRL 0xe8
0512 #define SGMII_PHYA_PWD      BIT(4)
0513 
0514 /* Infrasys subsystem config registers */
0515 #define INFRA_MISC2            0x70c
0516 #define CO_QPHY_SEL            BIT(0)
0517 #define GEPHY_MAC_SEL          BIT(1)
0518 
0519 /* MT7628/88 specific stuff */
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 /* Counter / stat register */
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 /* struct mtk_hw_stats - the structure that holds the traffic statistics.
0589  * @stats_lock:     make sure that stats operations are atomic
0590  * @reg_offset:     the status register offset of the SoC
0591  * @syncp:      the refcount
0592  *
0593  * All of the supported SoCs have hardware counters for traffic statistics.
0594  * Whenever the status IRQ triggers we can read the latest stats from these
0595  * counters and store them in this struct.
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     /* PDMA descriptor can point at 1-2 segments. This enum allows us to
0620      * track how memory was allocated so that it can be freed properly.
0621      */
0622     MTK_TX_FLAGS_SINGLE0    = 0x01,
0623     MTK_TX_FLAGS_PAGE0  = 0x02,
0624 
0625     /* MTK_TX_FLAGS_FPORTx allows tracking which port the transmitted
0626      * SKB out instead of looking up through hardware TX descriptor.
0627      */
0628     MTK_TX_FLAGS_FPORT0 = 0x04,
0629     MTK_TX_FLAGS_FPORT1 = 0x08,
0630 };
0631 
0632 /* This enum allows us to identify how the clock is defined on the array of the
0633  * clock in the order
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 /* struct mtk_tx_buf -  This struct holds the pointers to the memory pointed at
0711  *          by the TX descriptor    s
0712  * @skb:        The SKB pointer of the packet being sent
0713  * @dma_addr0:      The base addr of the first segment
0714  * @dma_len0:       The length of the first segment
0715  * @dma_addr1:      The base addr of the second segment
0716  * @dma_len1:       The length of the second segment
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 /* struct mtk_tx_ring - This struct holds info describing a TX ring
0730  * @dma:        The descriptor ring
0731  * @buf:        The memory pointed at by the ring
0732  * @phys:       The physical addr of tx_buf
0733  * @next_free:      Pointer to the next free descriptor
0734  * @last_free:      Pointer to the last free descriptor
0735  * @last_free_ptr:  Hardware pointer value of the last free descriptor
0736  * @thresh:     The threshold of minimum amount of free descriptors
0737  * @free_count:     QDMA uses a linked list. Track how many free descriptors
0738  *          are present
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;    /* For MT7628/88 PDMA handling */
0751     dma_addr_t phys_pdma;
0752     int cpu_idx;
0753 };
0754 
0755 /* PDMA rx ring mode */
0756 enum mtk_rx_flags {
0757     MTK_RX_FLAGS_NORMAL = 0,
0758     MTK_RX_FLAGS_HWLRO,
0759     MTK_RX_FLAGS_QDMA,
0760 };
0761 
0762 /* struct mtk_rx_ring - This struct holds info describing a RX ring
0763  * @dma:        The descriptor ring
0764  * @data:       The memory pointed at by the ring
0765  * @phys:       The physical addr of rx_buf
0766  * @frag_size:      How big can each fragment be
0767  * @buf_size:       The size of each packet buffer
0768  * @calc_idx:       The current head of ring
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     /* page_pool */
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     /* MUX BITS*/
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     /* PATH BITS */
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 /* Supported hardware group on SoCs */
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 /* Supported path present on SoCs */
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 /* MUXes present on SoCs */
0865 /* 0: GDM1 -> GMAC1, 1: GDM1 -> ESW */
0866 #define MTK_MUX_GDM1_TO_GMAC1_ESW (MTK_ETH_MUX_GDM1_TO_GMAC1_ESW | MTK_MUX)
0867 
0868 /* 0: GMAC2 -> GEPHY, 1: GMAC0 -> GePHY */
0869 #define MTK_MUX_GMAC2_GMAC0_TO_GEPHY    \
0870     (MTK_ETH_MUX_GMAC2_GMAC0_TO_GEPHY | MTK_MUX | MTK_INFRA)
0871 
0872 /* 0: U3 -> QPHY, 1: GMAC2 -> QPHY */
0873 #define MTK_MUX_U3_GMAC2_TO_QPHY        \
0874     (MTK_ETH_MUX_U3_GMAC2_TO_QPHY | MTK_MUX | MTK_INFRA)
0875 
0876 /* 2: GMAC1 -> SGMII, 3: GMAC2 -> SGMII */
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 /* 0: GMACx -> GEPHY, 1: GMACx -> SGMII where x is 1 or 2 */
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;     /* rx base pointer */
0928         u32 rx_cnt_cfg; /* rx max count configuration */
0929         u32 pcrx_ptr;   /* rx cpu pointer */
0930         u32 glo_cfg;    /* global configuration */
0931         u32 rst_idx;    /* reset index */
0932         u32 delay_irq;  /* delay interrupt */
0933         u32 irq_status; /* interrupt status */
0934         u32 irq_mask;   /* interrupt mask */
0935         u32 int_grp;
0936     } pdma;
0937     struct {
0938         u32 qtx_cfg;    /* tx queue configuration */
0939         u32 rx_ptr;     /* rx base pointer */
0940         u32 rx_cnt_cfg; /* rx max count configuration */
0941         u32 qcrx_ptr;   /* rx cpu pointer */
0942         u32 glo_cfg;    /* global configuration */
0943         u32 rst_idx;    /* reset index */
0944         u32 delay_irq;  /* delay interrupt */
0945         u32 fc_th;      /* flow control */
0946         u32 int_grp;
0947         u32 hred;       /* interrupt mask */
0948         u32 ctx_ptr;    /* tx acquire cpu pointer */
0949         u32 dtx_ptr;    /* tx acquire dma pointer */
0950         u32 crx_ptr;    /* tx release cpu pointer */
0951         u32 drx_ptr;    /* tx release dma pointer */
0952         u32 fq_head;    /* fq head pointer */
0953         u32 fq_tail;    /* fq tail pointer */
0954         u32 fq_count;   /* fq free page count */
0955         u32 fq_blen;    /* fq free page buffer length */
0956     } qdma;
0957     u32 gdm1_cnt;
0958 };
0959 
0960 /* struct mtk_eth_data -    This is the structure holding all differences
0961  *              among various plaforms
0962  * @reg_map         Soc register map.
0963  * @ana_rgc3:                   The offset for register ANA_RGC3 related to
0964  *              sgmiisys syscon
0965  * @caps            Flags shown the extra capability for the SoC
0966  * @hw_features         Flags shown HW features
0967  * @required_clks       Flags shown the bitmap for required clocks on
0968  *              the target SoC
0969  * @required_pctl       A bool value to show whether the SoC requires
0970  *              the extra setup for those pins used by GMAC.
0971  * @txd_size            Tx DMA descriptor size.
0972  * @rxd_size            Rx DMA descriptor size.
0973  * @rx_irq_done_mask        Rx irq done register mask.
0974  * @rx_dma_l4_valid     Rx DMA valid register mask.
0975  * @dma_max_len         Max DMA tx/rx buffer length.
0976  * @dma_len_offset      Tx/Rx DMA length field offset.
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 /* currently no SoC has more than 2 macs */
0997 #define MTK_MAX_DEVS            2
0998 
0999 /* struct mtk_pcs -    This structure holds each sgmii regmap and associated
1000  *                     data
1001  * @regmap:            The register map pointing at the range used to setup
1002  *                     SGMII modes
1003  * @ana_rgc3:          The offset refers to register ANA_RGC3 related to regmap
1004  * @pcs:               Phylink PCS structure
1005  */
1006 struct mtk_pcs {
1007     struct regmap   *regmap;
1008     u32             ana_rgc3;
1009     struct phylink_pcs pcs;
1010 };
1011 
1012 /* struct mtk_sgmii -  This is the structure holding sgmii regmap and its
1013  *                     characteristics
1014  * @pcs                Array of individual PCS structures
1015  */
1016 struct mtk_sgmii {
1017     struct mtk_pcs  pcs[MTK_MAX_DEVS];
1018 };
1019 
1020 /* struct mtk_eth - This is the main datasructure for holding the state
1021  *          of the driver
1022  * @dev:        The device pointer
1023  * @dev:        The device pointer used for dma mapping/alloc
1024  * @base:       The mapped register i/o base
1025  * @page_lock:      Make sure that register operations are atomic
1026  * @tx_irq__lock:   Make sure that IRQ register operations are atomic
1027  * @rx_irq__lock:   Make sure that IRQ register operations are atomic
1028  * @dim_lock:       Make sure that Net DIM operations are atomic
1029  * @dummy_dev:      we run 2 netdevs on 1 physical DMA ring and need a
1030  *          dummy for NAPI to work
1031  * @netdev:     The netdev instances
1032  * @mac:        Each netdev is linked to a physical MAC
1033  * @irq:        The IRQ that we are using
1034  * @msg_enable:     Ethtool msg level
1035  * @ethsys:     The register map pointing at the range used to setup
1036  *          MII modes
1037  * @infra:              The register map pointing at the range used to setup
1038  *                      SGMII and GePHY path
1039  * @pctl:       The register map pointing at the range used to setup
1040  *          GMAC port drive/slew values
1041  * @dma_refcnt:     track how many netdevs are using the DMA engine
1042  * @tx_ring:        Pointer to the memory holding info about the TX ring
1043  * @rx_ring:        Pointer to the memory holding info about the RX ring
1044  * @rx_ring_qdma:   Pointer to the memory holding info about the QDMA RX ring
1045  * @tx_napi:        The TX NAPI struct
1046  * @rx_napi:        The RX NAPI struct
1047  * @rx_events:      Net DIM RX event counter
1048  * @rx_packets:     Net DIM RX packet counter
1049  * @rx_bytes:       Net DIM RX byte counter
1050  * @rx_dim:     Net DIM RX context
1051  * @tx_events:      Net DIM TX event counter
1052  * @tx_packets:     Net DIM TX packet counter
1053  * @tx_bytes:       Net DIM TX byte counter
1054  * @tx_dim:     Net DIM TX context
1055  * @scratch_ring:   Newer SoCs need memory for a second HW managed TX ring
1056  * @phy_scratch_ring:   physical address of scratch_ring
1057  * @scratch_head:   The scratch memory that scratch_ring points to.
1058  * @clks:       clock array for all clocks required
1059  * @mii_bus:        If there is a bus we need to create an instance for it
1060  * @pending_work:   The workqueue used to reset the dma ring
1061  * @state:      Initialization and runtime state of the device
1062  * @soc:        Holding specific data among vaious SoCs
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 /* struct mtk_mac - the structure that holds the info about the MACs of the
1121  *          SoC
1122  * @id:         The number of the MAC
1123  * @interface:      Interface mode kept for detecting change in hw settings
1124  * @of_node:        Our devicetree node
1125  * @hw:         Backpointer to our main datastruture
1126  * @hw_stats:       Packet statistics counter
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 /* the struct describing the SoC. these are declared in the soc_xyz.c files */
1143 extern const struct of_device_id of_mtk_match[];
1144 
1145 /* read the hardware status register */
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 /* MTK_ETH_H */