xref: /dpdk/drivers/net/pfe/base/cbus/emac_mtip.h (revision f513f620591370c7b10f43fc7baa2e258d2f428d)
16dd52083SGagandeep Singh /* SPDX-License-Identifier: BSD-3-Clause
2*f513f620SSachin Saxena  * Copyright 2018-2019 NXP
36dd52083SGagandeep Singh  */
46dd52083SGagandeep Singh 
56dd52083SGagandeep Singh #ifndef _EMAC_H_
66dd52083SGagandeep Singh #define _EMAC_H_
76dd52083SGagandeep Singh 
86dd52083SGagandeep Singh /* This file is for Ethernet MAC registers and offsets
96dd52083SGagandeep Singh  */
106dd52083SGagandeep Singh 
116dd52083SGagandeep Singh #include <linux/ethtool.h>
126dd52083SGagandeep Singh 
136dd52083SGagandeep Singh #define EMAC_IEVENT_REG		0x004
146dd52083SGagandeep Singh #define EMAC_IMASK_REG		0x008
156dd52083SGagandeep Singh #define EMAC_R_DES_ACTIVE_REG	0x010
166dd52083SGagandeep Singh #define EMAC_X_DES_ACTIVE_REG	0x014
176dd52083SGagandeep Singh #define EMAC_ECNTRL_REG		0x024
186dd52083SGagandeep Singh #define EMAC_MII_DATA_REG	0x040
196dd52083SGagandeep Singh #define EMAC_MII_CTRL_REG	0x044
206dd52083SGagandeep Singh #define EMAC_MIB_CTRL_STS_REG	0x064
216dd52083SGagandeep Singh #define EMAC_RCNTRL_REG		0x084
226dd52083SGagandeep Singh #define EMAC_TCNTRL_REG		0x0C4
236dd52083SGagandeep Singh #define EMAC_PHY_ADDR_LOW	0x0E4
246dd52083SGagandeep Singh #define EMAC_PHY_ADDR_HIGH	0x0E8
256dd52083SGagandeep Singh #define EMAC_GAUR		0x120
266dd52083SGagandeep Singh #define EMAC_GALR		0x124
276dd52083SGagandeep Singh #define EMAC_TFWR_STR_FWD	0x144
286dd52083SGagandeep Singh #define EMAC_RX_SECTION_FULL	0x190
296dd52083SGagandeep Singh #define EMAC_RX_SECTION_EMPTY	0x194
306dd52083SGagandeep Singh #define EMAC_TX_SECTION_EMPTY	0x1A0
316dd52083SGagandeep Singh #define EMAC_TRUNC_FL		0x1B0
326dd52083SGagandeep Singh 
336dd52083SGagandeep Singh #define RMON_T_DROP	0x200 /* Count of frames not cntd correctly */
346dd52083SGagandeep Singh #define RMON_T_PACKETS	0x204 /* RMON TX packet count */
356dd52083SGagandeep Singh #define RMON_T_BC_PKT	0x208 /* RMON TX broadcast pkts */
366dd52083SGagandeep Singh #define RMON_T_MC_PKT	0x20c /* RMON TX multicast pkts */
376dd52083SGagandeep Singh #define RMON_T_CRC_ALIGN	0x210 /* RMON TX pkts with CRC align err */
386dd52083SGagandeep Singh #define RMON_T_UNDERSIZE	0x214 /* RMON TX pkts < 64 bytes, good CRC */
396dd52083SGagandeep Singh #define RMON_T_OVERSIZE	0x218 /* RMON TX pkts > MAX_FL bytes good CRC */
406dd52083SGagandeep Singh #define RMON_T_FRAG	0x21c /* RMON TX pkts < 64 bytes, bad CRC */
416dd52083SGagandeep Singh #define RMON_T_JAB	0x220 /* RMON TX pkts > MAX_FL bytes, bad CRC */
426dd52083SGagandeep Singh #define RMON_T_COL	0x224 /* RMON TX collision count */
436dd52083SGagandeep Singh #define RMON_T_P64	0x228 /* RMON TX 64 byte pkts */
446dd52083SGagandeep Singh #define RMON_T_P65TO127	0x22c /* RMON TX 65 to 127 byte pkts */
456dd52083SGagandeep Singh #define RMON_T_P128TO255	0x230 /* RMON TX 128 to 255 byte pkts */
466dd52083SGagandeep Singh #define RMON_T_P256TO511	0x234 /* RMON TX 256 to 511 byte pkts */
476dd52083SGagandeep Singh #define RMON_T_P512TO1023	0x238 /* RMON TX 512 to 1023 byte pkts */
486dd52083SGagandeep Singh #define RMON_T_P1024TO2047	0x23c /* RMON TX 1024 to 2047 byte pkts */
496dd52083SGagandeep Singh #define RMON_T_P_GTE2048	0x240 /* RMON TX pkts > 2048 bytes */
506dd52083SGagandeep Singh #define RMON_T_OCTETS	0x244 /* RMON TX octets */
516dd52083SGagandeep Singh #define IEEE_T_DROP	0x248 /* Count of frames not counted crtly */
526dd52083SGagandeep Singh #define IEEE_T_FRAME_OK	0x24c /* Frames tx'd OK */
536dd52083SGagandeep Singh #define IEEE_T_1COL	0x250 /* Frames tx'd with single collision */
546dd52083SGagandeep Singh #define IEEE_T_MCOL	0x254 /* Frames tx'd with multiple collision */
556dd52083SGagandeep Singh #define IEEE_T_DEF	0x258 /* Frames tx'd after deferral delay */
566dd52083SGagandeep Singh #define IEEE_T_LCOL	0x25c /* Frames tx'd with late collision */
576dd52083SGagandeep Singh #define IEEE_T_EXCOL	0x260 /* Frames tx'd with excesv collisions */
586dd52083SGagandeep Singh #define IEEE_T_MACERR	0x264 /* Frames tx'd with TX FIFO underrun */
596dd52083SGagandeep Singh #define IEEE_T_CSERR	0x268 /* Frames tx'd with carrier sense err */
606dd52083SGagandeep Singh #define IEEE_T_SQE	0x26c /* Frames tx'd with SQE err */
616dd52083SGagandeep Singh #define IEEE_T_FDXFC	0x270 /* Flow control pause frames tx'd */
626dd52083SGagandeep Singh #define IEEE_T_OCTETS_OK	0x274 /* Octet count for frames tx'd w/o err */
636dd52083SGagandeep Singh #define RMON_R_PACKETS	0x284 /* RMON RX packet count */
646dd52083SGagandeep Singh #define RMON_R_BC_PKT	0x288 /* RMON RX broadcast pkts */
656dd52083SGagandeep Singh #define RMON_R_MC_PKT	0x28c /* RMON RX multicast pkts */
666dd52083SGagandeep Singh #define RMON_R_CRC_ALIGN	0x290 /* RMON RX pkts with CRC alignment err */
676dd52083SGagandeep Singh #define RMON_R_UNDERSIZE	0x294 /* RMON RX pkts < 64 bytes, good CRC */
686dd52083SGagandeep Singh #define RMON_R_OVERSIZE	0x298 /* RMON RX pkts > MAX_FL bytes good CRC */
696dd52083SGagandeep Singh #define RMON_R_FRAG	0x29c /* RMON RX pkts < 64 bytes, bad CRC */
706dd52083SGagandeep Singh #define RMON_R_JAB	0x2a0 /* RMON RX pkts > MAX_FL bytes, bad CRC */
716dd52083SGagandeep Singh #define RMON_R_RESVD_O	0x2a4 /* Reserved */
726dd52083SGagandeep Singh #define RMON_R_P64	0x2a8 /* RMON RX 64 byte pkts */
736dd52083SGagandeep Singh #define RMON_R_P65TO127	0x2ac /* RMON RX 65 to 127 byte pkts */
746dd52083SGagandeep Singh #define RMON_R_P128TO255	0x2b0 /* RMON RX 128 to 255 byte pkts */
756dd52083SGagandeep Singh #define RMON_R_P256TO511	0x2b4 /* RMON RX 256 to 511 byte pkts */
766dd52083SGagandeep Singh #define RMON_R_P512TO1023	0x2b8 /* RMON RX 512 to 1023 byte pkts */
776dd52083SGagandeep Singh #define RMON_R_P1024TO2047	0x2bc /* RMON RX 1024 to 2047 byte pkts */
786dd52083SGagandeep Singh #define RMON_R_P_GTE2048	0x2c0 /* RMON RX pkts > 2048 bytes */
796dd52083SGagandeep Singh #define RMON_R_OCTETS	0x2c4 /* RMON RX octets */
806dd52083SGagandeep Singh #define IEEE_R_DROP	0x2c8 /* Count frames not counted correctly */
816dd52083SGagandeep Singh #define IEEE_R_FRAME_OK	0x2cc /* Frames rx'd OK */
826dd52083SGagandeep Singh #define IEEE_R_CRC	0x2d0 /* Frames rx'd with CRC err */
836dd52083SGagandeep Singh #define IEEE_R_ALIGN	0x2d4 /* Frames rx'd with alignment err */
846dd52083SGagandeep Singh #define IEEE_R_MACERR	0x2d8 /* Receive FIFO overflow count */
856dd52083SGagandeep Singh #define IEEE_R_FDXFC	0x2dc /* Flow control pause frames rx'd */
866dd52083SGagandeep Singh #define IEEE_R_OCTETS_OK	0x2e0 /* Octet cnt for frames rx'd w/o err */
876dd52083SGagandeep Singh 
886dd52083SGagandeep Singh #define EMAC_SMAC_0_0	0x500 /*Supplemental MAC Address 0 (RW).*/
896dd52083SGagandeep Singh #define EMAC_SMAC_0_1	0x504 /*Supplemental MAC Address 0 (RW).*/
906dd52083SGagandeep Singh 
916dd52083SGagandeep Singh /* GEMAC definitions and settings */
926dd52083SGagandeep Singh 
936dd52083SGagandeep Singh #define EMAC_PORT_0	0
946dd52083SGagandeep Singh #define EMAC_PORT_1	1
956dd52083SGagandeep Singh 
966dd52083SGagandeep Singh /* GEMAC Bit definitions */
976dd52083SGagandeep Singh #define EMAC_IEVENT_HBERR		 0x80000000
986dd52083SGagandeep Singh #define EMAC_IEVENT_BABR		 0x40000000
996dd52083SGagandeep Singh #define EMAC_IEVENT_BABT		 0x20000000
1006dd52083SGagandeep Singh #define EMAC_IEVENT_GRA			 0x10000000
1016dd52083SGagandeep Singh #define EMAC_IEVENT_TXF			 0x08000000
1026dd52083SGagandeep Singh #define EMAC_IEVENT_TXB			 0x04000000
1036dd52083SGagandeep Singh #define EMAC_IEVENT_RXF			 0x02000000
1046dd52083SGagandeep Singh #define EMAC_IEVENT_RXB			 0x01000000
1056dd52083SGagandeep Singh #define EMAC_IEVENT_MII			 0x00800000
1066dd52083SGagandeep Singh #define EMAC_IEVENT_EBERR		 0x00400000
1076dd52083SGagandeep Singh #define EMAC_IEVENT_LC			 0x00200000
1086dd52083SGagandeep Singh #define EMAC_IEVENT_RL			 0x00100000
1096dd52083SGagandeep Singh #define EMAC_IEVENT_UN			 0x00080000
1106dd52083SGagandeep Singh 
1116dd52083SGagandeep Singh #define EMAC_IMASK_HBERR                 0x80000000
1126dd52083SGagandeep Singh #define EMAC_IMASK_BABR                  0x40000000
1136dd52083SGagandeep Singh #define EMAC_IMASKT_BABT                 0x20000000
1146dd52083SGagandeep Singh #define EMAC_IMASK_GRA                   0x10000000
1156dd52083SGagandeep Singh #define EMAC_IMASKT_TXF                  0x08000000
1166dd52083SGagandeep Singh #define EMAC_IMASK_TXB                   0x04000000
1176dd52083SGagandeep Singh #define EMAC_IMASKT_RXF                  0x02000000
1186dd52083SGagandeep Singh #define EMAC_IMASK_RXB                   0x01000000
1196dd52083SGagandeep Singh #define EMAC_IMASK_MII                   0x00800000
1206dd52083SGagandeep Singh #define EMAC_IMASK_EBERR                 0x00400000
1216dd52083SGagandeep Singh #define EMAC_IMASK_LC                    0x00200000
1226dd52083SGagandeep Singh #define EMAC_IMASKT_RL                   0x00100000
1236dd52083SGagandeep Singh #define EMAC_IMASK_UN                    0x00080000
1246dd52083SGagandeep Singh 
1256dd52083SGagandeep Singh #define EMAC_RCNTRL_MAX_FL_SHIFT         16
1266dd52083SGagandeep Singh #define EMAC_RCNTRL_LOOP                 0x00000001
1276dd52083SGagandeep Singh #define EMAC_RCNTRL_DRT                  0x00000002
1286dd52083SGagandeep Singh #define EMAC_RCNTRL_MII_MODE             0x00000004
1296dd52083SGagandeep Singh #define EMAC_RCNTRL_PROM                 0x00000008
1306dd52083SGagandeep Singh #define EMAC_RCNTRL_BC_REJ               0x00000010
1316dd52083SGagandeep Singh #define EMAC_RCNTRL_FCE                  0x00000020
1326dd52083SGagandeep Singh #define EMAC_RCNTRL_RGMII                0x00000040
1336dd52083SGagandeep Singh #define EMAC_RCNTRL_SGMII                0x00000080
1346dd52083SGagandeep Singh #define EMAC_RCNTRL_RMII                 0x00000100
1356dd52083SGagandeep Singh #define EMAC_RCNTRL_RMII_10T             0x00000200
1366dd52083SGagandeep Singh #define EMAC_RCNTRL_CRC_FWD		 0x00004000
1376dd52083SGagandeep Singh 
1386dd52083SGagandeep Singh #define EMAC_TCNTRL_GTS                  0x00000001
1396dd52083SGagandeep Singh #define EMAC_TCNTRL_HBC                  0x00000002
1406dd52083SGagandeep Singh #define EMAC_TCNTRL_FDEN                 0x00000004
1416dd52083SGagandeep Singh #define EMAC_TCNTRL_TFC_PAUSE            0x00000008
1426dd52083SGagandeep Singh #define EMAC_TCNTRL_RFC_PAUSE            0x00000010
1436dd52083SGagandeep Singh 
1446dd52083SGagandeep Singh #define EMAC_ECNTRL_RESET                0x00000001      /* reset the EMAC */
1456dd52083SGagandeep Singh #define EMAC_ECNTRL_ETHER_EN             0x00000002      /* enable the EMAC */
1466dd52083SGagandeep Singh #define EMAC_ECNTRL_MAGIC_ENA		 0x00000004
1476dd52083SGagandeep Singh #define EMAC_ECNTRL_SLEEP		 0x00000008
1486dd52083SGagandeep Singh #define EMAC_ECNTRL_SPEED                0x00000020
1496dd52083SGagandeep Singh #define EMAC_ECNTRL_DBSWAP               0x00000100
1506dd52083SGagandeep Singh 
1516dd52083SGagandeep Singh #define EMAC_X_WMRK_STRFWD               0x00000100
1526dd52083SGagandeep Singh 
1536dd52083SGagandeep Singh #define EMAC_X_DES_ACTIVE_TDAR           0x01000000
1546dd52083SGagandeep Singh #define EMAC_R_DES_ACTIVE_RDAR           0x01000000
1556dd52083SGagandeep Singh 
1566dd52083SGagandeep Singh #define EMAC_RX_SECTION_EMPTY_V		0x00010006
1576dd52083SGagandeep Singh /*
1586dd52083SGagandeep Singh  * The possible operating speeds of the MAC, currently supporting 10, 100 and
1596dd52083SGagandeep Singh  * 1000Mb modes.
1606dd52083SGagandeep Singh  */
1616dd52083SGagandeep Singh enum mac_speed {SPEED_10M, SPEED_100M, SPEED_1000M, SPEED_1000M_PCS};
1626dd52083SGagandeep Singh 
1636dd52083SGagandeep Singh /* MII-related definitios */
1646dd52083SGagandeep Singh #define EMAC_MII_DATA_ST         0x40000000      /* Start of frame delimiter */
1656dd52083SGagandeep Singh #define EMAC_MII_DATA_OP_RD      0x20000000      /* Perform a read operation */
1666dd52083SGagandeep Singh #define EMAC_MII_DATA_OP_CL45_RD 0x30000000      /* Perform a read operation */
1676dd52083SGagandeep Singh #define EMAC_MII_DATA_OP_WR      0x10000000      /* Perform a write operation */
1686dd52083SGagandeep Singh #define EMAC_MII_DATA_OP_CL45_WR 0x10000000      /* Perform a write operation */
1696dd52083SGagandeep Singh #define EMAC_MII_DATA_PA_MSK     0x0f800000      /* PHY Address field mask */
1706dd52083SGagandeep Singh #define EMAC_MII_DATA_RA_MSK     0x007c0000      /* PHY Register field mask */
1716dd52083SGagandeep Singh #define EMAC_MII_DATA_TA         0x00020000      /* Turnaround */
1726dd52083SGagandeep Singh #define EMAC_MII_DATA_DATAMSK    0x0000ffff      /* PHY data field */
1736dd52083SGagandeep Singh 
1746dd52083SGagandeep Singh #define EMAC_MII_DATA_RA_SHIFT   18      /* MII Register address bits */
1756dd52083SGagandeep Singh #define EMAC_MII_DATA_RA_MASK	 0x1F      /* MII Register address mask */
1766dd52083SGagandeep Singh #define EMAC_MII_DATA_PA_SHIFT   23      /* MII PHY address bits */
1776dd52083SGagandeep Singh #define EMAC_MII_DATA_PA_MASK    0x1F      /* MII PHY address mask */
1786dd52083SGagandeep Singh 
1796dd52083SGagandeep Singh #define EMAC_MII_DATA_RA(v) (((v) & EMAC_MII_DATA_RA_MASK) << \
1806dd52083SGagandeep Singh 				EMAC_MII_DATA_RA_SHIFT)
1816dd52083SGagandeep Singh #define EMAC_MII_DATA_PA(v) (((v) & EMAC_MII_DATA_RA_MASK) << \
1826dd52083SGagandeep Singh 				EMAC_MII_DATA_PA_SHIFT)
1836dd52083SGagandeep Singh #define EMAC_MII_DATA(v)    ((v) & 0xffff)
1846dd52083SGagandeep Singh 
1856dd52083SGagandeep Singh #define EMAC_MII_SPEED_SHIFT	1
1866dd52083SGagandeep Singh #define EMAC_HOLDTIME_SHIFT	8
1876dd52083SGagandeep Singh #define EMAC_HOLDTIME_MASK	0x7
1886dd52083SGagandeep Singh #define EMAC_HOLDTIME(v)	(((v) & EMAC_HOLDTIME_MASK) << \
1896dd52083SGagandeep Singh 					EMAC_HOLDTIME_SHIFT)
1906dd52083SGagandeep Singh 
1916dd52083SGagandeep Singh /*
1926dd52083SGagandeep Singh  * The Address organisation for the MAC device.  All addresses are split into
1936dd52083SGagandeep Singh  * two 32-bit register fields.  The first one (bottom) is the lower 32-bits of
1946dd52083SGagandeep Singh  * the address and the other field are the high order bits - this may be 16-bits
1956dd52083SGagandeep Singh  * in the case of MAC addresses, or 32-bits for the hash address.
1966dd52083SGagandeep Singh  * In terms of memory storage, the first item (bottom) is assumed to be at a
1976dd52083SGagandeep Singh  * lower address location than 'top'. i.e. top should be at address location of
1986dd52083SGagandeep Singh  * 'bottom' + 4 bytes.
1996dd52083SGagandeep Singh  */
2006dd52083SGagandeep Singh struct pfe_mac_addr {
2016dd52083SGagandeep Singh 	u32 bottom;     /* Lower 32-bits of address. */
2026dd52083SGagandeep Singh 	u32 top;        /* Upper 32-bits of address. */
2036dd52083SGagandeep Singh };
2046dd52083SGagandeep Singh 
2056dd52083SGagandeep Singh /*
2066dd52083SGagandeep Singh  * The following is the organisation of the address filters section of the MAC
2076dd52083SGagandeep Singh  * registers.  The Cadence MAC contains four possible specific address match
2086dd52083SGagandeep Singh  * addresses, if an incoming frame corresponds to any one of these four
2096dd52083SGagandeep Singh  * addresses then the frame will be copied to memory.
2106dd52083SGagandeep Singh  * It is not necessary for all four of the address match registers to be
2116dd52083SGagandeep Singh  * programmed, this is application dependent.
2126dd52083SGagandeep Singh  */
2136dd52083SGagandeep Singh struct spec_addr {
2146dd52083SGagandeep Singh 	struct pfe_mac_addr one;        /* Specific address register 1. */
2156dd52083SGagandeep Singh 	struct pfe_mac_addr two;        /* Specific address register 2. */
2166dd52083SGagandeep Singh 	struct pfe_mac_addr three;      /* Specific address register 3. */
2176dd52083SGagandeep Singh 	struct pfe_mac_addr four;       /* Specific address register 4. */
2186dd52083SGagandeep Singh };
2196dd52083SGagandeep Singh 
2206dd52083SGagandeep Singh struct gemac_cfg {
2216dd52083SGagandeep Singh 	u32 mode;
2226dd52083SGagandeep Singh 	u32 speed;
2236dd52083SGagandeep Singh 	u32 duplex;
2246dd52083SGagandeep Singh };
2256dd52083SGagandeep Singh 
2266dd52083SGagandeep Singh /* EMAC Hash size */
2276dd52083SGagandeep Singh #define EMAC_HASH_REG_BITS       64
2286dd52083SGagandeep Singh 
2296dd52083SGagandeep Singh #define EMAC_SPEC_ADDR_MAX	4
2306dd52083SGagandeep Singh 
2316dd52083SGagandeep Singh #endif /* _EMAC_H_ */
232