0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #ifndef FEC_H
0014 #define FEC_H
0015
0016
0017 #include <linux/clocksource.h>
0018 #include <linux/net_tstamp.h>
0019 #include <linux/pm_qos.h>
0020 #include <linux/ptp_clock_kernel.h>
0021 #include <linux/timecounter.h>
0022
0023 #if defined(CONFIG_M523x) || defined(CONFIG_M527x) || defined(CONFIG_M528x) || \
0024 defined(CONFIG_M520x) || defined(CONFIG_M532x) || defined(CONFIG_ARM) || \
0025 defined(CONFIG_ARM64) || defined(CONFIG_COMPILE_TEST)
0026
0027
0028
0029
0030
0031 #define FEC_IEVENT 0x004
0032 #define FEC_IMASK 0x008
0033 #define FEC_R_DES_ACTIVE_0 0x010
0034 #define FEC_X_DES_ACTIVE_0 0x014
0035 #define FEC_ECNTRL 0x024
0036 #define FEC_MII_DATA 0x040
0037 #define FEC_MII_SPEED 0x044
0038 #define FEC_MIB_CTRLSTAT 0x064
0039 #define FEC_R_CNTRL 0x084
0040 #define FEC_X_CNTRL 0x0c4
0041 #define FEC_ADDR_LOW 0x0e4
0042 #define FEC_ADDR_HIGH 0x0e8
0043 #define FEC_OPD 0x0ec
0044 #define FEC_TXIC0 0x0f0
0045 #define FEC_TXIC1 0x0f4
0046 #define FEC_TXIC2 0x0f8
0047 #define FEC_RXIC0 0x100
0048 #define FEC_RXIC1 0x104
0049 #define FEC_RXIC2 0x108
0050 #define FEC_HASH_TABLE_HIGH 0x118
0051 #define FEC_HASH_TABLE_LOW 0x11c
0052 #define FEC_GRP_HASH_TABLE_HIGH 0x120
0053 #define FEC_GRP_HASH_TABLE_LOW 0x124
0054 #define FEC_X_WMRK 0x144
0055 #define FEC_R_BOUND 0x14c
0056 #define FEC_R_FSTART 0x150
0057 #define FEC_R_DES_START_1 0x160
0058 #define FEC_X_DES_START_1 0x164
0059 #define FEC_R_BUFF_SIZE_1 0x168
0060 #define FEC_R_DES_START_2 0x16c
0061 #define FEC_X_DES_START_2 0x170
0062 #define FEC_R_BUFF_SIZE_2 0x174
0063 #define FEC_R_DES_START_0 0x180
0064 #define FEC_X_DES_START_0 0x184
0065 #define FEC_R_BUFF_SIZE_0 0x188
0066 #define FEC_R_FIFO_RSFL 0x190
0067 #define FEC_R_FIFO_RSEM 0x194
0068 #define FEC_R_FIFO_RAEM 0x198
0069 #define FEC_R_FIFO_RAFL 0x19c
0070 #define FEC_FTRL 0x1b0
0071 #define FEC_RACC 0x1c4
0072 #define FEC_RCMR_1 0x1c8
0073 #define FEC_RCMR_2 0x1cc
0074 #define FEC_DMA_CFG_1 0x1d8
0075 #define FEC_DMA_CFG_2 0x1dc
0076 #define FEC_R_DES_ACTIVE_1 0x1e0
0077 #define FEC_X_DES_ACTIVE_1 0x1e4
0078 #define FEC_R_DES_ACTIVE_2 0x1e8
0079 #define FEC_X_DES_ACTIVE_2 0x1ec
0080 #define FEC_QOS_SCHEME 0x1f0
0081 #define FEC_LPI_SLEEP 0x1f4
0082 #define FEC_LPI_WAKE 0x1f8
0083 #define FEC_MIIGSK_CFGR 0x300
0084 #define FEC_MIIGSK_ENR 0x308
0085
0086 #define BM_MIIGSK_CFGR_MII 0x00
0087 #define BM_MIIGSK_CFGR_RMII 0x01
0088 #define BM_MIIGSK_CFGR_FRCONT_10M 0x40
0089
0090 #define RMON_T_DROP 0x200
0091 #define RMON_T_PACKETS 0x204
0092 #define RMON_T_BC_PKT 0x208
0093 #define RMON_T_MC_PKT 0x20c
0094 #define RMON_T_CRC_ALIGN 0x210
0095 #define RMON_T_UNDERSIZE 0x214
0096 #define RMON_T_OVERSIZE 0x218
0097 #define RMON_T_FRAG 0x21c
0098 #define RMON_T_JAB 0x220
0099 #define RMON_T_COL 0x224
0100 #define RMON_T_P64 0x228
0101 #define RMON_T_P65TO127 0x22c
0102 #define RMON_T_P128TO255 0x230
0103 #define RMON_T_P256TO511 0x234
0104 #define RMON_T_P512TO1023 0x238
0105 #define RMON_T_P1024TO2047 0x23c
0106 #define RMON_T_P_GTE2048 0x240
0107 #define RMON_T_OCTETS 0x244
0108 #define IEEE_T_DROP 0x248
0109 #define IEEE_T_FRAME_OK 0x24c
0110 #define IEEE_T_1COL 0x250
0111 #define IEEE_T_MCOL 0x254
0112 #define IEEE_T_DEF 0x258
0113 #define IEEE_T_LCOL 0x25c
0114 #define IEEE_T_EXCOL 0x260
0115 #define IEEE_T_MACERR 0x264
0116 #define IEEE_T_CSERR 0x268
0117 #define IEEE_T_SQE 0x26c
0118 #define IEEE_T_FDXFC 0x270
0119 #define IEEE_T_OCTETS_OK 0x274
0120 #define RMON_R_PACKETS 0x284
0121 #define RMON_R_BC_PKT 0x288
0122 #define RMON_R_MC_PKT 0x28c
0123 #define RMON_R_CRC_ALIGN 0x290
0124 #define RMON_R_UNDERSIZE 0x294
0125 #define RMON_R_OVERSIZE 0x298
0126 #define RMON_R_FRAG 0x29c
0127 #define RMON_R_JAB 0x2a0
0128 #define RMON_R_RESVD_O 0x2a4
0129 #define RMON_R_P64 0x2a8
0130 #define RMON_R_P65TO127 0x2ac
0131 #define RMON_R_P128TO255 0x2b0
0132 #define RMON_R_P256TO511 0x2b4
0133 #define RMON_R_P512TO1023 0x2b8
0134 #define RMON_R_P1024TO2047 0x2bc
0135 #define RMON_R_P_GTE2048 0x2c0
0136 #define RMON_R_OCTETS 0x2c4
0137 #define IEEE_R_DROP 0x2c8
0138 #define IEEE_R_FRAME_OK 0x2cc
0139 #define IEEE_R_CRC 0x2d0
0140 #define IEEE_R_ALIGN 0x2d4
0141 #define IEEE_R_MACERR 0x2d8
0142 #define IEEE_R_FDXFC 0x2dc
0143 #define IEEE_R_OCTETS_OK 0x2e0
0144
0145 #else
0146
0147 #define FEC_ECNTRL 0x000
0148 #define FEC_IEVENT 0x004
0149 #define FEC_IMASK 0x008
0150 #define FEC_IVEC 0x00c
0151 #define FEC_R_DES_ACTIVE_0 0x010
0152 #define FEC_R_DES_ACTIVE_1 FEC_R_DES_ACTIVE_0
0153 #define FEC_R_DES_ACTIVE_2 FEC_R_DES_ACTIVE_0
0154 #define FEC_X_DES_ACTIVE_0 0x014
0155 #define FEC_X_DES_ACTIVE_1 FEC_X_DES_ACTIVE_0
0156 #define FEC_X_DES_ACTIVE_2 FEC_X_DES_ACTIVE_0
0157 #define FEC_MII_DATA 0x040
0158 #define FEC_MII_SPEED 0x044
0159 #define FEC_R_BOUND 0x08c
0160 #define FEC_R_FSTART 0x090
0161 #define FEC_X_WMRK 0x0a4
0162 #define FEC_X_FSTART 0x0ac
0163 #define FEC_R_CNTRL 0x104
0164 #define FEC_MAX_FRM_LEN 0x108
0165 #define FEC_X_CNTRL 0x144
0166 #define FEC_ADDR_LOW 0x3c0
0167 #define FEC_ADDR_HIGH 0x3c4
0168 #define FEC_GRP_HASH_TABLE_HIGH 0x3c8
0169 #define FEC_GRP_HASH_TABLE_LOW 0x3cc
0170 #define FEC_R_DES_START_0 0x3d0
0171 #define FEC_R_DES_START_1 FEC_R_DES_START_0
0172 #define FEC_R_DES_START_2 FEC_R_DES_START_0
0173 #define FEC_X_DES_START_0 0x3d4
0174 #define FEC_X_DES_START_1 FEC_X_DES_START_0
0175 #define FEC_X_DES_START_2 FEC_X_DES_START_0
0176 #define FEC_R_BUFF_SIZE_0 0x3d8
0177 #define FEC_R_BUFF_SIZE_1 FEC_R_BUFF_SIZE_0
0178 #define FEC_R_BUFF_SIZE_2 FEC_R_BUFF_SIZE_0
0179 #define FEC_FIFO_RAM 0x400
0180
0181
0182
0183 #define FEC_RCMR_1 0xfff
0184 #define FEC_RCMR_2 0xfff
0185 #define FEC_DMA_CFG_1 0xfff
0186 #define FEC_DMA_CFG_2 0xfff
0187 #define FEC_TXIC0 0xfff
0188 #define FEC_TXIC1 0xfff
0189 #define FEC_TXIC2 0xfff
0190 #define FEC_RXIC0 0xfff
0191 #define FEC_RXIC1 0xfff
0192 #define FEC_RXIC2 0xfff
0193 #define FEC_LPI_SLEEP 0xfff
0194 #define FEC_LPI_WAKE 0xfff
0195 #endif
0196
0197
0198
0199
0200
0201
0202
0203
0204 #if defined(CONFIG_ARM) || defined(CONFIG_ARM64)
0205 #define fec32_to_cpu le32_to_cpu
0206 #define fec16_to_cpu le16_to_cpu
0207 #define cpu_to_fec32 cpu_to_le32
0208 #define cpu_to_fec16 cpu_to_le16
0209 #define __fec32 __le32
0210 #define __fec16 __le16
0211
0212 struct bufdesc {
0213 __fec16 cbd_datlen;
0214 __fec16 cbd_sc;
0215 __fec32 cbd_bufaddr;
0216 };
0217 #else
0218 #define fec32_to_cpu be32_to_cpu
0219 #define fec16_to_cpu be16_to_cpu
0220 #define cpu_to_fec32 cpu_to_be32
0221 #define cpu_to_fec16 cpu_to_be16
0222 #define __fec32 __be32
0223 #define __fec16 __be16
0224
0225 struct bufdesc {
0226 __fec16 cbd_sc;
0227 __fec16 cbd_datlen;
0228 __fec32 cbd_bufaddr;
0229 };
0230 #endif
0231
0232 struct bufdesc_ex {
0233 struct bufdesc desc;
0234 __fec32 cbd_esc;
0235 __fec32 cbd_prot;
0236 __fec32 cbd_bdu;
0237 __fec32 ts;
0238 __fec16 res0[4];
0239 };
0240
0241
0242
0243
0244
0245 #define BD_SC_EMPTY ((ushort)0x8000)
0246 #define BD_SC_READY ((ushort)0x8000)
0247 #define BD_SC_WRAP ((ushort)0x2000)
0248 #define BD_SC_INTRPT ((ushort)0x1000)
0249 #define BD_SC_CM ((ushort)0x0200)
0250 #define BD_SC_ID ((ushort)0x0100)
0251 #define BD_SC_P ((ushort)0x0100)
0252 #define BD_SC_BR ((ushort)0x0020)
0253 #define BD_SC_FR ((ushort)0x0010)
0254 #define BD_SC_PR ((ushort)0x0008)
0255 #define BD_SC_OV ((ushort)0x0002)
0256 #define BD_SC_CD ((ushort)0x0001)
0257
0258
0259
0260 #define BD_ENET_RX_EMPTY ((ushort)0x8000)
0261 #define BD_ENET_RX_WRAP ((ushort)0x2000)
0262 #define BD_ENET_RX_INTR ((ushort)0x1000)
0263 #define BD_ENET_RX_LAST ((ushort)0x0800)
0264 #define BD_ENET_RX_FIRST ((ushort)0x0400)
0265 #define BD_ENET_RX_MISS ((ushort)0x0100)
0266 #define BD_ENET_RX_LG ((ushort)0x0020)
0267 #define BD_ENET_RX_NO ((ushort)0x0010)
0268 #define BD_ENET_RX_SH ((ushort)0x0008)
0269 #define BD_ENET_RX_CR ((ushort)0x0004)
0270 #define BD_ENET_RX_OV ((ushort)0x0002)
0271 #define BD_ENET_RX_CL ((ushort)0x0001)
0272 #define BD_ENET_RX_STATS ((ushort)0x013f)
0273
0274
0275 #define BD_ENET_RX_VLAN 0x00000004
0276
0277
0278
0279 #define BD_ENET_TX_READY ((ushort)0x8000)
0280 #define BD_ENET_TX_PAD ((ushort)0x4000)
0281 #define BD_ENET_TX_WRAP ((ushort)0x2000)
0282 #define BD_ENET_TX_INTR ((ushort)0x1000)
0283 #define BD_ENET_TX_LAST ((ushort)0x0800)
0284 #define BD_ENET_TX_TC ((ushort)0x0400)
0285 #define BD_ENET_TX_DEF ((ushort)0x0200)
0286 #define BD_ENET_TX_HB ((ushort)0x0100)
0287 #define BD_ENET_TX_LC ((ushort)0x0080)
0288 #define BD_ENET_TX_RL ((ushort)0x0040)
0289 #define BD_ENET_TX_RCMASK ((ushort)0x003c)
0290 #define BD_ENET_TX_UN ((ushort)0x0002)
0291 #define BD_ENET_TX_CSL ((ushort)0x0001)
0292 #define BD_ENET_TX_STATS ((ushort)0x0fff)
0293
0294
0295 #define BD_ENET_TX_INT 0x40000000
0296 #define BD_ENET_TX_TS 0x20000000
0297 #define BD_ENET_TX_PINS 0x10000000
0298 #define BD_ENET_TX_IINS 0x08000000
0299
0300
0301
0302 #define FEC_IRQ_NUM 3
0303
0304
0305
0306
0307
0308 #define FEC_ENET_MAX_TX_QS 3
0309 #define FEC_ENET_MAX_RX_QS 3
0310
0311 #define FEC_R_DES_START(X) (((X) == 1) ? FEC_R_DES_START_1 : \
0312 (((X) == 2) ? \
0313 FEC_R_DES_START_2 : FEC_R_DES_START_0))
0314 #define FEC_X_DES_START(X) (((X) == 1) ? FEC_X_DES_START_1 : \
0315 (((X) == 2) ? \
0316 FEC_X_DES_START_2 : FEC_X_DES_START_0))
0317 #define FEC_R_BUFF_SIZE(X) (((X) == 1) ? FEC_R_BUFF_SIZE_1 : \
0318 (((X) == 2) ? \
0319 FEC_R_BUFF_SIZE_2 : FEC_R_BUFF_SIZE_0))
0320
0321 #define FEC_DMA_CFG(X) (((X) == 2) ? FEC_DMA_CFG_2 : FEC_DMA_CFG_1)
0322
0323 #define DMA_CLASS_EN (1 << 16)
0324 #define FEC_RCMR(X) (((X) == 2) ? FEC_RCMR_2 : FEC_RCMR_1)
0325 #define IDLE_SLOPE_MASK 0xffff
0326 #define IDLE_SLOPE_1 0x200
0327 #define IDLE_SLOPE_2 0x200
0328 #define IDLE_SLOPE(X) (((X) == 1) ? \
0329 (IDLE_SLOPE_1 & IDLE_SLOPE_MASK) : \
0330 (IDLE_SLOPE_2 & IDLE_SLOPE_MASK))
0331 #define RCMR_MATCHEN (0x1 << 16)
0332 #define RCMR_CMP_CFG(v, n) (((v) & 0x7) << (n << 2))
0333 #define RCMR_CMP_1 (RCMR_CMP_CFG(0, 0) | RCMR_CMP_CFG(1, 1) | \
0334 RCMR_CMP_CFG(2, 2) | RCMR_CMP_CFG(3, 3))
0335 #define RCMR_CMP_2 (RCMR_CMP_CFG(4, 0) | RCMR_CMP_CFG(5, 1) | \
0336 RCMR_CMP_CFG(6, 2) | RCMR_CMP_CFG(7, 3))
0337 #define RCMR_CMP(X) (((X) == 1) ? RCMR_CMP_1 : RCMR_CMP_2)
0338 #define FEC_TX_BD_FTYPE(X) (((X) & 0xf) << 20)
0339
0340
0341
0342
0343
0344
0345
0346
0347 #define FEC_ENET_RX_PAGES 256
0348 #define FEC_ENET_RX_FRSIZE 2048
0349 #define FEC_ENET_RX_FRPPG (PAGE_SIZE / FEC_ENET_RX_FRSIZE)
0350 #define RX_RING_SIZE (FEC_ENET_RX_FRPPG * FEC_ENET_RX_PAGES)
0351 #define FEC_ENET_TX_FRSIZE 2048
0352 #define FEC_ENET_TX_FRPPG (PAGE_SIZE / FEC_ENET_TX_FRSIZE)
0353 #define TX_RING_SIZE 512
0354 #define TX_RING_MOD_MASK 511
0355
0356 #define BD_ENET_RX_INT 0x00800000
0357 #define BD_ENET_RX_PTP ((ushort)0x0400)
0358 #define BD_ENET_RX_ICE 0x00000020
0359 #define BD_ENET_RX_PCR 0x00000010
0360 #define FLAG_RX_CSUM_ENABLED (BD_ENET_RX_ICE | BD_ENET_RX_PCR)
0361 #define FLAG_RX_CSUM_ERROR (BD_ENET_RX_ICE | BD_ENET_RX_PCR)
0362
0363
0364 #define FEC_ENET_HBERR ((uint)0x80000000)
0365 #define FEC_ENET_BABR ((uint)0x40000000)
0366 #define FEC_ENET_BABT ((uint)0x20000000)
0367 #define FEC_ENET_GRA ((uint)0x10000000)
0368 #define FEC_ENET_TXF_0 ((uint)0x08000000)
0369 #define FEC_ENET_TXF_1 ((uint)0x00000008)
0370 #define FEC_ENET_TXF_2 ((uint)0x00000080)
0371 #define FEC_ENET_TXB ((uint)0x04000000)
0372 #define FEC_ENET_RXF_0 ((uint)0x02000000)
0373 #define FEC_ENET_RXF_1 ((uint)0x00000002)
0374 #define FEC_ENET_RXF_2 ((uint)0x00000020)
0375 #define FEC_ENET_RXB ((uint)0x01000000)
0376 #define FEC_ENET_MII ((uint)0x00800000)
0377 #define FEC_ENET_EBERR ((uint)0x00400000)
0378 #define FEC_ENET_WAKEUP ((uint)0x00020000)
0379 #define FEC_ENET_TXF (FEC_ENET_TXF_0 | FEC_ENET_TXF_1 | FEC_ENET_TXF_2)
0380 #define FEC_ENET_RXF (FEC_ENET_RXF_0 | FEC_ENET_RXF_1 | FEC_ENET_RXF_2)
0381 #define FEC_ENET_RXF_GET(X) (((X) == 0) ? FEC_ENET_RXF_0 : \
0382 (((X) == 1) ? FEC_ENET_RXF_1 : \
0383 FEC_ENET_RXF_2))
0384 #define FEC_ENET_TS_AVAIL ((uint)0x00010000)
0385 #define FEC_ENET_TS_TIMER ((uint)0x00008000)
0386
0387 #define FEC_DEFAULT_IMASK (FEC_ENET_TXF | FEC_ENET_RXF)
0388 #define FEC_RX_DISABLED_IMASK (FEC_DEFAULT_IMASK & (~FEC_ENET_RXF))
0389
0390 #define FEC_ENET_TXC_DLY ((uint)0x00010000)
0391 #define FEC_ENET_RXC_DLY ((uint)0x00020000)
0392
0393
0394 #define FEC_ITR_CLK_SEL (0x1 << 30)
0395 #define FEC_ITR_EN (0x1 << 31)
0396 #define FEC_ITR_ICFT(X) (((X) & 0xff) << 20)
0397 #define FEC_ITR_ICTT(X) ((X) & 0xffff)
0398 #define FEC_ITR_ICFT_DEFAULT 200
0399 #define FEC_ITR_ICTT_DEFAULT 1000
0400
0401 #define FEC_VLAN_TAG_LEN 0x04
0402 #define FEC_ETHTYPE_LEN 0x02
0403
0404
0405 #define FEC_QUIRK_ENET_MAC (1 << 0)
0406
0407 #define FEC_QUIRK_SWAP_FRAME (1 << 1)
0408
0409 #define FEC_QUIRK_USE_GASKET (1 << 2)
0410
0411 #define FEC_QUIRK_HAS_GBIT (1 << 3)
0412
0413 #define FEC_QUIRK_HAS_BUFDESC_EX (1 << 4)
0414
0415 #define FEC_QUIRK_HAS_CSUM (1 << 5)
0416
0417 #define FEC_QUIRK_HAS_VLAN (1 << 6)
0418
0419
0420
0421
0422
0423
0424
0425
0426
0427 #define FEC_QUIRK_ERR006358 (1 << 7)
0428
0429
0430
0431
0432
0433
0434
0435
0436
0437 #define FEC_QUIRK_HAS_AVB (1 << 8)
0438
0439
0440
0441
0442
0443 #define FEC_QUIRK_ERR007885 (1 << 9)
0444
0445
0446
0447
0448
0449
0450
0451
0452 #define FEC_QUIRK_BUG_CAPTURE (1 << 10)
0453
0454 #define FEC_QUIRK_SINGLE_MDIO (1 << 11)
0455
0456 #define FEC_QUIRK_HAS_RACC (1 << 12)
0457
0458 #define FEC_QUIRK_HAS_COALESCE (1 << 13)
0459
0460 #define FEC_QUIRK_ERR006687 (1 << 14)
0461
0462
0463
0464 #define FEC_QUIRK_MIB_CLEAR (1 << 15)
0465
0466
0467
0468 #define FEC_QUIRK_HAS_FRREG (1 << 16)
0469
0470
0471
0472
0473
0474 #define FEC_QUIRK_CLEAR_SETUP_MII (1 << 17)
0475
0476
0477
0478
0479 #define FEC_QUIRK_NO_HARD_RESET (1 << 18)
0480
0481
0482
0483
0484 #define FEC_QUIRK_HAS_MULTI_QUEUES (1 << 19)
0485
0486
0487
0488
0489
0490 #define FEC_QUIRK_HAS_EEE (1 << 20)
0491
0492
0493
0494
0495
0496
0497 #define FEC_QUIRK_DELAYED_CLKS_SUPPORT (1 << 21)
0498
0499
0500 #define FEC_QUIRK_WAKEUP_FROM_INT2 (1 << 22)
0501
0502
0503 #define FEC_QUIRK_HAS_PMQOS BIT(23)
0504
0505 struct bufdesc_prop {
0506 int qid;
0507
0508 struct bufdesc *base;
0509 struct bufdesc *last;
0510 struct bufdesc *cur;
0511 void __iomem *reg_desc_active;
0512 dma_addr_t dma;
0513 unsigned short ring_size;
0514 unsigned char dsize;
0515 unsigned char dsize_log2;
0516 };
0517
0518 struct fec_enet_priv_tx_q {
0519 struct bufdesc_prop bd;
0520 unsigned char *tx_bounce[TX_RING_SIZE];
0521 struct sk_buff *tx_skbuff[TX_RING_SIZE];
0522
0523 unsigned short tx_stop_threshold;
0524 unsigned short tx_wake_threshold;
0525
0526 struct bufdesc *dirty_tx;
0527 char *tso_hdrs;
0528 dma_addr_t tso_hdrs_dma;
0529 };
0530
0531 struct fec_enet_priv_rx_q {
0532 struct bufdesc_prop bd;
0533 struct sk_buff *rx_skbuff[RX_RING_SIZE];
0534 };
0535
0536 struct fec_stop_mode_gpr {
0537 struct regmap *gpr;
0538 u8 reg;
0539 u8 bit;
0540 };
0541
0542
0543
0544
0545
0546
0547
0548
0549
0550 struct fec_enet_private {
0551
0552 void __iomem *hwp;
0553
0554 struct net_device *netdev;
0555
0556 struct clk *clk_ipg;
0557 struct clk *clk_ahb;
0558 struct clk *clk_ref;
0559 struct clk *clk_enet_out;
0560 struct clk *clk_ptp;
0561 struct clk *clk_2x_txclk;
0562
0563 bool ptp_clk_on;
0564 struct mutex ptp_clk_mutex;
0565 unsigned int num_tx_queues;
0566 unsigned int num_rx_queues;
0567
0568
0569 struct fec_enet_priv_tx_q *tx_queue[FEC_ENET_MAX_TX_QS];
0570 struct fec_enet_priv_rx_q *rx_queue[FEC_ENET_MAX_RX_QS];
0571
0572 unsigned int total_tx_ring_size;
0573 unsigned int total_rx_ring_size;
0574
0575 struct platform_device *pdev;
0576
0577 int dev_id;
0578
0579
0580 struct mii_bus *mii_bus;
0581 uint phy_speed;
0582 phy_interface_t phy_interface;
0583 struct device_node *phy_node;
0584 bool rgmii_txc_dly;
0585 bool rgmii_rxc_dly;
0586 int link;
0587 int full_duplex;
0588 int speed;
0589 int irq[FEC_IRQ_NUM];
0590 bool bufdesc_ex;
0591 int pause_flag;
0592 int wol_flag;
0593 int wake_irq;
0594 u32 quirks;
0595
0596 struct napi_struct napi;
0597 int csum_flags;
0598
0599 struct work_struct tx_timeout_work;
0600
0601 struct ptp_clock *ptp_clock;
0602 struct ptp_clock_info ptp_caps;
0603 unsigned long last_overflow_check;
0604 spinlock_t tmreg_lock;
0605 struct cyclecounter cc;
0606 struct timecounter tc;
0607 int rx_hwtstamp_filter;
0608 u32 base_incval;
0609 u32 cycle_speed;
0610 int hwts_rx_en;
0611 int hwts_tx_en;
0612 struct delayed_work time_keep;
0613 struct regulator *reg_phy;
0614 struct fec_stop_mode_gpr stop_gpr;
0615 struct pm_qos_request pm_qos_req;
0616
0617 unsigned int tx_align;
0618 unsigned int rx_align;
0619
0620
0621 unsigned int rx_pkts_itr;
0622 unsigned int rx_time_itr;
0623 unsigned int tx_pkts_itr;
0624 unsigned int tx_time_itr;
0625 unsigned int itr_clk_rate;
0626
0627
0628 struct ethtool_eee eee;
0629 unsigned int clk_ref_rate;
0630
0631 u32 rx_copybreak;
0632
0633
0634 unsigned int ptp_inc;
0635
0636
0637 int pps_channel;
0638 unsigned int reload_period;
0639 int pps_enable;
0640 unsigned int next_counter;
0641
0642 u64 ethtool_stats[];
0643 };
0644
0645 void fec_ptp_init(struct platform_device *pdev, int irq_idx);
0646 void fec_ptp_stop(struct platform_device *pdev);
0647 void fec_ptp_start_cyclecounter(struct net_device *ndev);
0648 void fec_ptp_disable_hwts(struct net_device *ndev);
0649 int fec_ptp_set(struct net_device *ndev, struct ifreq *ifr);
0650 int fec_ptp_get(struct net_device *ndev, struct ifreq *ifr);
0651
0652
0653 #endif