cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

emac.h (15255B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/* Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
      3 */
      4
      5#ifndef _EMAC_H_
      6#define _EMAC_H_
      7
      8#include <linux/irqreturn.h>
      9#include <linux/netdevice.h>
     10#include <linux/clk.h>
     11#include <linux/platform_device.h>
     12#include "emac-mac.h"
     13#include "emac-phy.h"
     14#include "emac-sgmii.h"
     15
     16/* EMAC base register offsets */
     17#define EMAC_DMA_MAS_CTRL		0x1400
     18#define EMAC_IRQ_MOD_TIM_INIT		0x1408
     19#define EMAC_BLK_IDLE_STS		0x140c
     20#define EMAC_PHY_LINK_DELAY		0x141c
     21#define EMAC_SYS_ALIV_CTRL		0x1434
     22#define EMAC_MAC_CTRL			0x1480
     23#define EMAC_MAC_IPGIFG_CTRL		0x1484
     24#define EMAC_MAC_STA_ADDR0		0x1488
     25#define EMAC_MAC_STA_ADDR1		0x148c
     26#define EMAC_HASH_TAB_REG0		0x1490
     27#define EMAC_HASH_TAB_REG1		0x1494
     28#define EMAC_MAC_HALF_DPLX_CTRL		0x1498
     29#define EMAC_MAX_FRAM_LEN_CTRL		0x149c
     30#define EMAC_WOL_CTRL0			0x14a0
     31#define EMAC_RSS_KEY0			0x14b0
     32#define EMAC_H1TPD_BASE_ADDR_LO		0x14e0
     33#define EMAC_H2TPD_BASE_ADDR_LO		0x14e4
     34#define EMAC_H3TPD_BASE_ADDR_LO		0x14e8
     35#define EMAC_INTER_SRAM_PART9		0x1534
     36#define EMAC_DESC_CTRL_0		0x1540
     37#define EMAC_DESC_CTRL_1		0x1544
     38#define EMAC_DESC_CTRL_2		0x1550
     39#define EMAC_DESC_CTRL_10		0x1554
     40#define EMAC_DESC_CTRL_12		0x1558
     41#define EMAC_DESC_CTRL_13		0x155c
     42#define EMAC_DESC_CTRL_3		0x1560
     43#define EMAC_DESC_CTRL_4		0x1564
     44#define EMAC_DESC_CTRL_5		0x1568
     45#define EMAC_DESC_CTRL_14		0x156c
     46#define EMAC_DESC_CTRL_15		0x1570
     47#define EMAC_DESC_CTRL_16		0x1574
     48#define EMAC_DESC_CTRL_6		0x1578
     49#define EMAC_DESC_CTRL_8		0x1580
     50#define EMAC_DESC_CTRL_9		0x1584
     51#define EMAC_DESC_CTRL_11		0x1588
     52#define EMAC_TXQ_CTRL_0			0x1590
     53#define EMAC_TXQ_CTRL_1			0x1594
     54#define EMAC_TXQ_CTRL_2			0x1598
     55#define EMAC_RXQ_CTRL_0			0x15a0
     56#define EMAC_RXQ_CTRL_1			0x15a4
     57#define EMAC_RXQ_CTRL_2			0x15a8
     58#define EMAC_RXQ_CTRL_3			0x15ac
     59#define EMAC_BASE_CPU_NUMBER		0x15b8
     60#define EMAC_DMA_CTRL			0x15c0
     61#define EMAC_MAILBOX_0			0x15e0
     62#define EMAC_MAILBOX_5			0x15e4
     63#define EMAC_MAILBOX_6			0x15e8
     64#define EMAC_MAILBOX_13			0x15ec
     65#define EMAC_MAILBOX_2			0x15f4
     66#define EMAC_MAILBOX_3			0x15f8
     67#define EMAC_INT_STATUS			0x1600
     68#define EMAC_INT_MASK			0x1604
     69#define EMAC_MAILBOX_11			0x160c
     70#define EMAC_AXI_MAST_CTRL		0x1610
     71#define EMAC_MAILBOX_12			0x1614
     72#define EMAC_MAILBOX_9			0x1618
     73#define EMAC_MAILBOX_10			0x161c
     74#define EMAC_ATHR_HEADER_CTRL		0x1620
     75#define EMAC_RXMAC_STATC_REG0		0x1700
     76#define EMAC_RXMAC_STATC_REG22		0x1758
     77#define EMAC_TXMAC_STATC_REG0		0x1760
     78#define EMAC_TXMAC_STATC_REG24		0x17c0
     79#define EMAC_CLK_GATE_CTRL		0x1814
     80#define EMAC_CORE_HW_VERSION		0x1974
     81#define EMAC_MISC_CTRL			0x1990
     82#define EMAC_MAILBOX_7			0x19e0
     83#define EMAC_MAILBOX_8			0x19e4
     84#define EMAC_IDT_TABLE0			0x1b00
     85#define EMAC_RXMAC_STATC_REG23		0x1bc8
     86#define EMAC_RXMAC_STATC_REG24		0x1bcc
     87#define EMAC_TXMAC_STATC_REG25		0x1bd0
     88#define EMAC_MAILBOX_15			0x1bd4
     89#define EMAC_MAILBOX_16			0x1bd8
     90#define EMAC_INT1_MASK			0x1bf0
     91#define EMAC_INT1_STATUS		0x1bf4
     92#define EMAC_INT2_MASK			0x1bf8
     93#define EMAC_INT2_STATUS		0x1bfc
     94#define EMAC_INT3_MASK			0x1c00
     95#define EMAC_INT3_STATUS		0x1c04
     96
     97/* EMAC_DMA_MAS_CTRL */
     98#define DEV_ID_NUM_BMSK                                     0x7f000000
     99#define DEV_ID_NUM_SHFT                                             24
    100#define DEV_REV_NUM_BMSK                                      0xff0000
    101#define DEV_REV_NUM_SHFT                                            16
    102#define INT_RD_CLR_EN                                           0x4000
    103#define IRQ_MODERATOR2_EN                                        0x800
    104#define IRQ_MODERATOR_EN                                         0x400
    105#define LPW_CLK_SEL                                               0x80
    106#define LPW_STATE                                                 0x20
    107#define LPW_MODE                                                  0x10
    108#define SOFT_RST                                                   0x1
    109
    110/* EMAC_IRQ_MOD_TIM_INIT */
    111#define IRQ_MODERATOR2_INIT_BMSK                            0xffff0000
    112#define IRQ_MODERATOR2_INIT_SHFT                                    16
    113#define IRQ_MODERATOR_INIT_BMSK                                 0xffff
    114#define IRQ_MODERATOR_INIT_SHFT                                      0
    115
    116/* EMAC_INT_STATUS */
    117#define DIS_INT                                                BIT(31)
    118#define PTP_INT                                                BIT(30)
    119#define RFD4_UR_INT                                            BIT(29)
    120#define TX_PKT_INT3                                            BIT(26)
    121#define TX_PKT_INT2                                            BIT(25)
    122#define TX_PKT_INT1                                            BIT(24)
    123#define RX_PKT_INT3                                            BIT(19)
    124#define RX_PKT_INT2                                            BIT(18)
    125#define RX_PKT_INT1                                            BIT(17)
    126#define RX_PKT_INT0                                            BIT(16)
    127#define TX_PKT_INT                                             BIT(15)
    128#define TXQ_TO_INT                                             BIT(14)
    129#define GPHY_WAKEUP_INT                                        BIT(13)
    130#define GPHY_LINK_DOWN_INT                                     BIT(12)
    131#define GPHY_LINK_UP_INT                                       BIT(11)
    132#define DMAW_TO_INT                                            BIT(10)
    133#define DMAR_TO_INT                                             BIT(9)
    134#define TXF_UR_INT                                              BIT(8)
    135#define RFD3_UR_INT                                             BIT(7)
    136#define RFD2_UR_INT                                             BIT(6)
    137#define RFD1_UR_INT                                             BIT(5)
    138#define RFD0_UR_INT                                             BIT(4)
    139#define RXF_OF_INT                                              BIT(3)
    140#define SW_MAN_INT                                              BIT(2)
    141
    142/* EMAC_MAILBOX_6 */
    143#define RFD2_PROC_IDX_BMSK                                   0xfff0000
    144#define RFD2_PROC_IDX_SHFT                                          16
    145#define RFD2_PROD_IDX_BMSK                                       0xfff
    146#define RFD2_PROD_IDX_SHFT                                           0
    147
    148/* EMAC_CORE_HW_VERSION */
    149#define MAJOR_BMSK                                          0xf0000000
    150#define MAJOR_SHFT                                                  28
    151#define MINOR_BMSK                                           0xfff0000
    152#define MINOR_SHFT                                                  16
    153#define STEP_BMSK                                               0xffff
    154#define STEP_SHFT                                                    0
    155
    156/* EMAC_EMAC_WRAPPER_CSR1 */
    157#define TX_INDX_FIFO_SYNC_RST                                  BIT(23)
    158#define TX_TS_FIFO_SYNC_RST                                    BIT(22)
    159#define RX_TS_FIFO2_SYNC_RST                                   BIT(21)
    160#define RX_TS_FIFO1_SYNC_RST                                   BIT(20)
    161#define TX_TS_ENABLE                                           BIT(16)
    162#define DIS_1588_CLKS                                          BIT(11)
    163#define FREQ_MODE                                               BIT(9)
    164#define ENABLE_RRD_TIMESTAMP                                    BIT(3)
    165
    166/* EMAC_EMAC_WRAPPER_CSR2 */
    167#define HDRIVE_BMSK                                             0x3000
    168#define HDRIVE_SHFT                                                 12
    169#define SLB_EN                                                  BIT(9)
    170#define PLB_EN                                                  BIT(8)
    171#define WOL_EN                                                  BIT(3)
    172#define PHY_RESET                                               BIT(0)
    173
    174#define EMAC_DEV_ID                                             0x0040
    175
    176/* SGMII v2 per lane registers */
    177#define SGMII_LN_RSM_START             0x029C
    178
    179/* SGMII v2 PHY common registers */
    180#define SGMII_PHY_CMN_CTRL            0x0408
    181#define SGMII_PHY_CMN_RESET_CTRL      0x0410
    182
    183/* SGMII v2 PHY registers per lane */
    184#define SGMII_PHY_LN_OFFSET          0x0400
    185#define SGMII_PHY_LN_LANE_STATUS     0x00DC
    186#define SGMII_PHY_LN_BIST_GEN0       0x008C
    187#define SGMII_PHY_LN_BIST_GEN1       0x0090
    188#define SGMII_PHY_LN_BIST_GEN2       0x0094
    189#define SGMII_PHY_LN_BIST_GEN3       0x0098
    190#define SGMII_PHY_LN_CDR_CTRL1       0x005C
    191
    192enum emac_clk_id {
    193	EMAC_CLK_AXI,
    194	EMAC_CLK_CFG_AHB,
    195	EMAC_CLK_HIGH_SPEED,
    196	EMAC_CLK_MDIO,
    197	EMAC_CLK_TX,
    198	EMAC_CLK_RX,
    199	EMAC_CLK_SYS,
    200	EMAC_CLK_CNT
    201};
    202
    203#define EMAC_LINK_SPEED_UNKNOWN                                    0x0
    204#define EMAC_LINK_SPEED_10_HALF                                 BIT(0)
    205#define EMAC_LINK_SPEED_10_FULL                                 BIT(1)
    206#define EMAC_LINK_SPEED_100_HALF                                BIT(2)
    207#define EMAC_LINK_SPEED_100_FULL                                BIT(3)
    208#define EMAC_LINK_SPEED_1GB_FULL                                BIT(5)
    209
    210#define EMAC_MAX_SETUP_LNK_CYCLE                                   100
    211
    212struct emac_stats {
    213	/* rx */
    214	u64 rx_ok;              /* good packets */
    215	u64 rx_bcast;           /* good broadcast packets */
    216	u64 rx_mcast;           /* good multicast packets */
    217	u64 rx_pause;           /* pause packet */
    218	u64 rx_ctrl;            /* control packets other than pause frame. */
    219	u64 rx_fcs_err;         /* packets with bad FCS. */
    220	u64 rx_len_err;         /* packets with length mismatch */
    221	u64 rx_byte_cnt;        /* good bytes count (without FCS) */
    222	u64 rx_runt;            /* runt packets */
    223	u64 rx_frag;            /* fragment count */
    224	u64 rx_sz_64;	        /* packets that are 64 bytes */
    225	u64 rx_sz_65_127;       /* packets that are 65-127 bytes */
    226	u64 rx_sz_128_255;      /* packets that are 128-255 bytes */
    227	u64 rx_sz_256_511;      /* packets that are 256-511 bytes */
    228	u64 rx_sz_512_1023;     /* packets that are 512-1023 bytes */
    229	u64 rx_sz_1024_1518;    /* packets that are 1024-1518 bytes */
    230	u64 rx_sz_1519_max;     /* packets that are 1519-MTU bytes*/
    231	u64 rx_sz_ov;           /* packets that are >MTU bytes (truncated) */
    232	u64 rx_rxf_ov;          /* packets dropped due to RX FIFO overflow */
    233	u64 rx_align_err;       /* alignment errors */
    234	u64 rx_bcast_byte_cnt;  /* broadcast packets byte count (without FCS) */
    235	u64 rx_mcast_byte_cnt;  /* multicast packets byte count (without FCS) */
    236	u64 rx_err_addr;        /* packets dropped due to address filtering */
    237	u64 rx_crc_align;       /* CRC align errors */
    238	u64 rx_jabbers;         /* jabbers */
    239
    240	/* tx */
    241	u64 tx_ok;              /* good packets */
    242	u64 tx_bcast;           /* good broadcast packets */
    243	u64 tx_mcast;           /* good multicast packets */
    244	u64 tx_pause;           /* pause packets */
    245	u64 tx_exc_defer;       /* packets with excessive deferral */
    246	u64 tx_ctrl;            /* control packets other than pause frame */
    247	u64 tx_defer;           /* packets that are deferred. */
    248	u64 tx_byte_cnt;        /* good bytes count (without FCS) */
    249	u64 tx_sz_64;           /* packets that are 64 bytes */
    250	u64 tx_sz_65_127;       /* packets that are 65-127 bytes */
    251	u64 tx_sz_128_255;      /* packets that are 128-255 bytes */
    252	u64 tx_sz_256_511;      /* packets that are 256-511 bytes */
    253	u64 tx_sz_512_1023;     /* packets that are 512-1023 bytes */
    254	u64 tx_sz_1024_1518;    /* packets that are 1024-1518 bytes */
    255	u64 tx_sz_1519_max;     /* packets that are 1519-MTU bytes */
    256	u64 tx_1_col;           /* packets single prior collision */
    257	u64 tx_2_col;           /* packets with multiple prior collisions */
    258	u64 tx_late_col;        /* packets with late collisions */
    259	u64 tx_abort_col;       /* packets aborted due to excess collisions */
    260	u64 tx_underrun;        /* packets aborted due to FIFO underrun */
    261	u64 tx_rd_eop;          /* count of reads beyond EOP */
    262	u64 tx_len_err;         /* packets with length mismatch */
    263	u64 tx_trunc;           /* packets truncated due to size >MTU */
    264	u64 tx_bcast_byte;      /* broadcast packets byte count (without FCS) */
    265	u64 tx_mcast_byte;      /* multicast packets byte count (without FCS) */
    266	u64 tx_col;             /* collisions */
    267
    268	spinlock_t lock;	/* prevent multiple simultaneous readers */
    269};
    270
    271/* RSS hstype Definitions */
    272#define EMAC_RSS_HSTYP_IPV4_EN				    0x00000001
    273#define EMAC_RSS_HSTYP_TCP4_EN				    0x00000002
    274#define EMAC_RSS_HSTYP_IPV6_EN				    0x00000004
    275#define EMAC_RSS_HSTYP_TCP6_EN				    0x00000008
    276#define EMAC_RSS_HSTYP_ALL_EN (\
    277		EMAC_RSS_HSTYP_IPV4_EN   |\
    278		EMAC_RSS_HSTYP_TCP4_EN   |\
    279		EMAC_RSS_HSTYP_IPV6_EN   |\
    280		EMAC_RSS_HSTYP_TCP6_EN)
    281
    282#define EMAC_VLAN_TO_TAG(_vlan, _tag) \
    283		(_tag =  ((((_vlan) >> 8) & 0xFF) | (((_vlan) & 0xFF) << 8)))
    284
    285#define EMAC_TAG_TO_VLAN(_tag, _vlan) \
    286		(_vlan = ((((_tag) >> 8) & 0xFF) | (((_tag) & 0xFF) << 8)))
    287
    288#define EMAC_DEF_RX_BUF_SIZE					  1536
    289#define EMAC_MAX_JUMBO_PKT_SIZE				    (9 * 1024)
    290#define EMAC_MAX_TX_OFFLOAD_THRESH			    (9 * 1024)
    291
    292#define EMAC_MAX_ETH_FRAME_SIZE		       EMAC_MAX_JUMBO_PKT_SIZE
    293#define EMAC_MIN_ETH_FRAME_SIZE					    68
    294
    295#define EMAC_DEF_TX_QUEUES					     1
    296#define EMAC_DEF_RX_QUEUES					     1
    297
    298#define EMAC_MIN_TX_DESCS					   128
    299#define EMAC_MIN_RX_DESCS					   128
    300
    301#define EMAC_MAX_TX_DESCS					 16383
    302#define EMAC_MAX_RX_DESCS					  2047
    303
    304#define EMAC_DEF_TX_DESCS					   512
    305#define EMAC_DEF_RX_DESCS					   256
    306
    307#define EMAC_DEF_RX_IRQ_MOD					   250
    308#define EMAC_DEF_TX_IRQ_MOD					   250
    309
    310#define EMAC_WATCHDOG_TIME				      (5 * HZ)
    311
    312/* by default check link every 4 seconds */
    313#define EMAC_TRY_LINK_TIMEOUT				      (4 * HZ)
    314
    315/* emac_irq per-device (per-adapter) irq properties.
    316 * @irq:	irq number.
    317 * @mask	mask to use over status register.
    318 */
    319struct emac_irq {
    320	unsigned int	irq;
    321	u32		mask;
    322};
    323
    324/* The device's main data structure */
    325struct emac_adapter {
    326	struct net_device		*netdev;
    327	struct mii_bus			*mii_bus;
    328	struct phy_device		*phydev;
    329
    330	void __iomem			*base;
    331	void __iomem			*csr;
    332
    333	struct emac_sgmii		phy;
    334	struct emac_stats		stats;
    335
    336	struct emac_irq			irq;
    337	struct clk			*clk[EMAC_CLK_CNT];
    338
    339	/* All Descriptor memory */
    340	struct emac_ring_header		ring_header;
    341	struct emac_tx_queue		tx_q;
    342	struct emac_rx_queue		rx_q;
    343	unsigned int			tx_desc_cnt;
    344	unsigned int			rx_desc_cnt;
    345	unsigned int			rrd_size; /* in quad words */
    346	unsigned int			rfd_size; /* in quad words */
    347	unsigned int			tpd_size; /* in quad words */
    348
    349	unsigned int			rxbuf_size;
    350
    351	/* Flow control / pause frames support. If automatic=True, do whatever
    352	 * the PHY does. Otherwise, use tx_flow_control and rx_flow_control.
    353	 */
    354	bool				automatic;
    355	bool				tx_flow_control;
    356	bool				rx_flow_control;
    357
    358	/* True == use single-pause-frame mode. */
    359	bool				single_pause_mode;
    360
    361	/* Ring parameter */
    362	u8				tpd_burst;
    363	u8				rfd_burst;
    364	unsigned int			dmaw_dly_cnt;
    365	unsigned int			dmar_dly_cnt;
    366	enum emac_dma_req_block		dmar_block;
    367	enum emac_dma_req_block		dmaw_block;
    368	enum emac_dma_order		dma_order;
    369
    370	u32				irq_mod;
    371	u32				preamble;
    372
    373	struct work_struct		work_thread;
    374
    375	u16				msg_enable;
    376
    377	struct mutex			reset_lock;
    378};
    379
    380int emac_reinit_locked(struct emac_adapter *adpt);
    381void emac_reg_update32(void __iomem *addr, u32 mask, u32 val);
    382
    383void emac_set_ethtool_ops(struct net_device *netdev);
    384void emac_update_hw_stats(struct emac_adapter *adpt);
    385
    386#endif /* _EMAC_H_ */