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

sxgbe_common.h (14957B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/* 10G controller driver for Samsung SoCs
      3 *
      4 * Copyright (C) 2013 Samsung Electronics Co., Ltd.
      5 *		http://www.samsung.com
      6 *
      7 * Author: Siva Reddy Kallam <siva.kallam@samsung.com>
      8 */
      9
     10#ifndef __SXGBE_COMMON_H__
     11#define __SXGBE_COMMON_H__
     12
     13/* forward references */
     14struct sxgbe_desc_ops;
     15struct sxgbe_dma_ops;
     16struct sxgbe_mtl_ops;
     17
     18#define SXGBE_RESOURCE_NAME	"sam_sxgbeeth"
     19#define DRV_MODULE_VERSION	"November_2013"
     20
     21/* MAX HW feature words */
     22#define SXGBE_HW_WORDS 3
     23
     24#define SXGBE_RX_COE_NONE	0
     25
     26/* CSR Frequency Access Defines*/
     27#define SXGBE_CSR_F_150M	150000000
     28#define SXGBE_CSR_F_250M	250000000
     29#define SXGBE_CSR_F_300M	300000000
     30#define SXGBE_CSR_F_350M	350000000
     31#define SXGBE_CSR_F_400M	400000000
     32#define SXGBE_CSR_F_500M	500000000
     33
     34/* pause time */
     35#define SXGBE_PAUSE_TIME 0x200
     36
     37/* tx queues */
     38#define SXGBE_TX_QUEUES   8
     39#define SXGBE_RX_QUEUES   16
     40
     41/* Calculated based how much time does it take to fill 256KB Rx memory
     42 * at 10Gb speed at 156MHz clock rate and considered little less then
     43 * the actual value.
     44 */
     45#define SXGBE_MAX_DMA_RIWT	0x70
     46#define SXGBE_MIN_DMA_RIWT	0x01
     47
     48/* Tx coalesce parameters */
     49#define SXGBE_COAL_TX_TIMER	40000
     50#define SXGBE_MAX_COAL_TX_TICK	100000
     51#define SXGBE_TX_MAX_FRAMES	512
     52#define SXGBE_TX_FRAMES	128
     53
     54/* SXGBE TX FIFO is 8K, Rx FIFO is 16K */
     55#define BUF_SIZE_16KiB 16384
     56#define BUF_SIZE_8KiB 8192
     57#define BUF_SIZE_4KiB 4096
     58#define BUF_SIZE_2KiB 2048
     59
     60#define SXGBE_DEFAULT_LIT_LS	0x3E8
     61#define SXGBE_DEFAULT_TWT_LS	0x0
     62
     63/* Flow Control defines */
     64#define SXGBE_FLOW_OFF		0
     65#define SXGBE_FLOW_RX		1
     66#define SXGBE_FLOW_TX		2
     67#define SXGBE_FLOW_AUTO		(SXGBE_FLOW_TX | SXGBE_FLOW_RX)
     68
     69#define SF_DMA_MODE 1		/* DMA STORE-AND-FORWARD Operation Mode */
     70
     71/* errors */
     72#define RX_GMII_ERR		0x01
     73#define RX_WATCHDOG_ERR		0x02
     74#define RX_CRC_ERR		0x03
     75#define RX_GAINT_ERR		0x04
     76#define RX_IP_HDR_ERR		0x05
     77#define RX_PAYLOAD_ERR		0x06
     78#define RX_OVERFLOW_ERR		0x07
     79
     80/* pkt type */
     81#define RX_LEN_PKT		0x00
     82#define RX_MACCTL_PKT		0x01
     83#define RX_DCBCTL_PKT		0x02
     84#define RX_ARP_PKT		0x03
     85#define RX_OAM_PKT		0x04
     86#define RX_UNTAG_PKT		0x05
     87#define RX_OTHER_PKT		0x07
     88#define RX_SVLAN_PKT		0x08
     89#define RX_CVLAN_PKT		0x09
     90#define RX_DVLAN_OCVLAN_ICVLAN_PKT		0x0A
     91#define RX_DVLAN_OSVLAN_ISVLAN_PKT		0x0B
     92#define RX_DVLAN_OSVLAN_ICVLAN_PKT		0x0C
     93#define RX_DVLAN_OCVLAN_ISVLAN_PKT		0x0D
     94
     95#define RX_NOT_IP_PKT		0x00
     96#define RX_IPV4_TCP_PKT		0x01
     97#define RX_IPV4_UDP_PKT		0x02
     98#define RX_IPV4_ICMP_PKT	0x03
     99#define RX_IPV4_UNKNOWN_PKT	0x07
    100#define RX_IPV6_TCP_PKT		0x09
    101#define RX_IPV6_UDP_PKT		0x0A
    102#define RX_IPV6_ICMP_PKT	0x0B
    103#define RX_IPV6_UNKNOWN_PKT	0x0F
    104
    105#define RX_NO_PTP		0x00
    106#define RX_PTP_SYNC		0x01
    107#define RX_PTP_FOLLOW_UP	0x02
    108#define RX_PTP_DELAY_REQ	0x03
    109#define RX_PTP_DELAY_RESP	0x04
    110#define RX_PTP_PDELAY_REQ	0x05
    111#define RX_PTP_PDELAY_RESP	0x06
    112#define RX_PTP_PDELAY_FOLLOW_UP	0x07
    113#define RX_PTP_ANNOUNCE		0x08
    114#define RX_PTP_MGMT		0x09
    115#define RX_PTP_SIGNAL		0x0A
    116#define RX_PTP_RESV_MSG		0x0F
    117
    118/* EEE-LPI mode  flags*/
    119#define TX_ENTRY_LPI_MODE	0x10
    120#define TX_EXIT_LPI_MODE	0x20
    121#define RX_ENTRY_LPI_MODE	0x40
    122#define RX_EXIT_LPI_MODE	0x80
    123
    124/* EEE-LPI Interrupt status flag */
    125#define LPI_INT_STATUS		BIT(5)
    126
    127/* EEE-LPI Default timer values */
    128#define LPI_LINK_STATUS_TIMER	0x3E8
    129#define LPI_MAC_WAIT_TIMER	0x00
    130
    131/* EEE-LPI Control and status definitions */
    132#define LPI_CTRL_STATUS_TXA	BIT(19)
    133#define LPI_CTRL_STATUS_PLSDIS	BIT(18)
    134#define LPI_CTRL_STATUS_PLS	BIT(17)
    135#define LPI_CTRL_STATUS_LPIEN	BIT(16)
    136#define LPI_CTRL_STATUS_TXRSTP	BIT(11)
    137#define LPI_CTRL_STATUS_RXRSTP	BIT(10)
    138#define LPI_CTRL_STATUS_RLPIST	BIT(9)
    139#define LPI_CTRL_STATUS_TLPIST	BIT(8)
    140#define LPI_CTRL_STATUS_RLPIEX	BIT(3)
    141#define LPI_CTRL_STATUS_RLPIEN	BIT(2)
    142#define LPI_CTRL_STATUS_TLPIEX	BIT(1)
    143#define LPI_CTRL_STATUS_TLPIEN	BIT(0)
    144
    145enum dma_irq_status {
    146	tx_hard_error	= BIT(0),
    147	tx_bump_tc	= BIT(1),
    148	handle_tx	= BIT(2),
    149	rx_hard_error	= BIT(3),
    150	rx_bump_tc	= BIT(4),
    151	handle_rx	= BIT(5),
    152};
    153
    154#define NETIF_F_HW_VLAN_ALL     (NETIF_F_HW_VLAN_CTAG_RX |	\
    155				 NETIF_F_HW_VLAN_STAG_RX |	\
    156				 NETIF_F_HW_VLAN_CTAG_TX |	\
    157				 NETIF_F_HW_VLAN_STAG_TX |	\
    158				 NETIF_F_HW_VLAN_CTAG_FILTER |	\
    159				 NETIF_F_HW_VLAN_STAG_FILTER)
    160
    161/* MMC control defines */
    162#define SXGBE_MMC_CTRL_CNT_FRZ  0x00000008
    163
    164/* SXGBE HW ADDR regs */
    165#define SXGBE_ADDR_HIGH(reg)    (((reg > 15) ? 0x00000800 : 0x00000040) + \
    166				 (reg * 8))
    167#define SXGBE_ADDR_LOW(reg)     (((reg > 15) ? 0x00000804 : 0x00000044) + \
    168				 (reg * 8))
    169#define SXGBE_MAX_PERFECT_ADDRESSES 32 /* Maximum unicast perfect filtering */
    170#define SXGBE_FRAME_FILTER       0x00000004      /* Frame Filter */
    171
    172/* SXGBE Frame Filter defines */
    173#define SXGBE_FRAME_FILTER_PR    0x00000001      /* Promiscuous Mode */
    174#define SXGBE_FRAME_FILTER_HUC   0x00000002      /* Hash Unicast */
    175#define SXGBE_FRAME_FILTER_HMC   0x00000004      /* Hash Multicast */
    176#define SXGBE_FRAME_FILTER_DAIF  0x00000008      /* DA Inverse Filtering */
    177#define SXGBE_FRAME_FILTER_PM    0x00000010      /* Pass all multicast */
    178#define SXGBE_FRAME_FILTER_DBF   0x00000020      /* Disable Broadcast frames */
    179#define SXGBE_FRAME_FILTER_SAIF  0x00000100      /* Inverse Filtering */
    180#define SXGBE_FRAME_FILTER_SAF   0x00000200      /* Source Address Filter */
    181#define SXGBE_FRAME_FILTER_HPF   0x00000400      /* Hash or perfect Filter */
    182#define SXGBE_FRAME_FILTER_RA    0x80000000      /* Receive all mode */
    183
    184#define SXGBE_HASH_TABLE_SIZE    64
    185#define SXGBE_HASH_HIGH          0x00000008      /* Multicast Hash Table High */
    186#define SXGBE_HASH_LOW           0x0000000c      /* Multicast Hash Table Low */
    187
    188#define SXGBE_HI_REG_AE          0x80000000
    189
    190/* Minimum and maximum MTU */
    191#define MIN_MTU         68
    192#define MAX_MTU         9000
    193
    194#define SXGBE_FOR_EACH_QUEUE(max_queues, queue_num)			\
    195	for (queue_num = 0; queue_num < max_queues; queue_num++)
    196
    197#define DRV_VERSION "1.0.0"
    198
    199#define SXGBE_MAX_RX_CHANNELS	16
    200#define SXGBE_MAX_TX_CHANNELS	16
    201
    202#define START_MAC_REG_OFFSET	0x0000
    203#define MAX_MAC_REG_OFFSET	0x0DFC
    204#define START_MTL_REG_OFFSET	0x1000
    205#define MAX_MTL_REG_OFFSET	0x18FC
    206#define START_DMA_REG_OFFSET	0x3000
    207#define MAX_DMA_REG_OFFSET	0x38FC
    208
    209#define REG_SPACE_SIZE		0x2000
    210
    211/* sxgbe statistics counters */
    212struct sxgbe_extra_stats {
    213	/* TX/RX IRQ events */
    214	unsigned long tx_underflow_irq;
    215	unsigned long tx_process_stopped_irq;
    216	unsigned long tx_ctxt_desc_err;
    217	unsigned long tx_threshold;
    218	unsigned long rx_threshold;
    219	unsigned long tx_pkt_n;
    220	unsigned long rx_pkt_n;
    221	unsigned long normal_irq_n;
    222	unsigned long tx_normal_irq_n;
    223	unsigned long rx_normal_irq_n;
    224	unsigned long napi_poll;
    225	unsigned long tx_clean;
    226	unsigned long tx_reset_ic_bit;
    227	unsigned long rx_process_stopped_irq;
    228	unsigned long rx_underflow_irq;
    229
    230	/* Bus access errors */
    231	unsigned long fatal_bus_error_irq;
    232	unsigned long tx_read_transfer_err;
    233	unsigned long tx_write_transfer_err;
    234	unsigned long tx_desc_access_err;
    235	unsigned long tx_buffer_access_err;
    236	unsigned long tx_data_transfer_err;
    237	unsigned long rx_read_transfer_err;
    238	unsigned long rx_write_transfer_err;
    239	unsigned long rx_desc_access_err;
    240	unsigned long rx_buffer_access_err;
    241	unsigned long rx_data_transfer_err;
    242
    243	/* EEE-LPI stats */
    244	unsigned long tx_lpi_entry_n;
    245	unsigned long tx_lpi_exit_n;
    246	unsigned long rx_lpi_entry_n;
    247	unsigned long rx_lpi_exit_n;
    248	unsigned long eee_wakeup_error_n;
    249
    250	/* RX specific */
    251	/* L2 error */
    252	unsigned long rx_code_gmii_err;
    253	unsigned long rx_watchdog_err;
    254	unsigned long rx_crc_err;
    255	unsigned long rx_gaint_pkt_err;
    256	unsigned long ip_hdr_err;
    257	unsigned long ip_payload_err;
    258	unsigned long overflow_error;
    259
    260	/* L2 Pkt type */
    261	unsigned long len_pkt;
    262	unsigned long mac_ctl_pkt;
    263	unsigned long dcb_ctl_pkt;
    264	unsigned long arp_pkt;
    265	unsigned long oam_pkt;
    266	unsigned long untag_okt;
    267	unsigned long other_pkt;
    268	unsigned long svlan_tag_pkt;
    269	unsigned long cvlan_tag_pkt;
    270	unsigned long dvlan_ocvlan_icvlan_pkt;
    271	unsigned long dvlan_osvlan_isvlan_pkt;
    272	unsigned long dvlan_osvlan_icvlan_pkt;
    273	unsigned long dvan_ocvlan_icvlan_pkt;
    274
    275	/* L3/L4 Pkt type */
    276	unsigned long not_ip_pkt;
    277	unsigned long ip4_tcp_pkt;
    278	unsigned long ip4_udp_pkt;
    279	unsigned long ip4_icmp_pkt;
    280	unsigned long ip4_unknown_pkt;
    281	unsigned long ip6_tcp_pkt;
    282	unsigned long ip6_udp_pkt;
    283	unsigned long ip6_icmp_pkt;
    284	unsigned long ip6_unknown_pkt;
    285
    286	/* Filter specific */
    287	unsigned long vlan_filter_match;
    288	unsigned long sa_filter_fail;
    289	unsigned long da_filter_fail;
    290	unsigned long hash_filter_pass;
    291	unsigned long l3_filter_match;
    292	unsigned long l4_filter_match;
    293
    294	/* RX context specific */
    295	unsigned long timestamp_dropped;
    296	unsigned long rx_msg_type_no_ptp;
    297	unsigned long rx_ptp_type_sync;
    298	unsigned long rx_ptp_type_follow_up;
    299	unsigned long rx_ptp_type_delay_req;
    300	unsigned long rx_ptp_type_delay_resp;
    301	unsigned long rx_ptp_type_pdelay_req;
    302	unsigned long rx_ptp_type_pdelay_resp;
    303	unsigned long rx_ptp_type_pdelay_follow_up;
    304	unsigned long rx_ptp_announce;
    305	unsigned long rx_ptp_mgmt;
    306	unsigned long rx_ptp_signal;
    307	unsigned long rx_ptp_resv_msg_type;
    308};
    309
    310struct mac_link {
    311	int port;
    312	int duplex;
    313	int speed;
    314};
    315
    316struct mii_regs {
    317	unsigned int addr;	/* MII Address */
    318	unsigned int data;	/* MII Data */
    319};
    320
    321struct sxgbe_core_ops {
    322	/* MAC core initialization */
    323	void (*core_init)(void __iomem *ioaddr);
    324	/* Dump MAC registers */
    325	void (*dump_regs)(void __iomem *ioaddr);
    326	/* Handle extra events on specific interrupts hw dependent */
    327	int (*host_irq_status)(void __iomem *ioaddr,
    328			       struct sxgbe_extra_stats *x);
    329	/* Set power management mode (e.g. magic frame) */
    330	void (*pmt)(void __iomem *ioaddr, unsigned long mode);
    331	/* Set/Get Unicast MAC addresses */
    332	void (*set_umac_addr)(void __iomem *ioaddr, const unsigned char *addr,
    333			      unsigned int reg_n);
    334	void (*get_umac_addr)(void __iomem *ioaddr, unsigned char *addr,
    335			      unsigned int reg_n);
    336	void (*enable_rx)(void __iomem *ioaddr, bool enable);
    337	void (*enable_tx)(void __iomem *ioaddr, bool enable);
    338
    339	/* controller version specific operations */
    340	int (*get_controller_version)(void __iomem *ioaddr);
    341
    342	/* If supported then get the optional core features */
    343	unsigned int (*get_hw_feature)(void __iomem *ioaddr,
    344				       unsigned char feature_index);
    345	/* adjust SXGBE speed */
    346	void (*set_speed)(void __iomem *ioaddr, unsigned char speed);
    347
    348	/* EEE-LPI specific operations */
    349	void (*set_eee_mode)(void __iomem *ioaddr);
    350	void (*reset_eee_mode)(void __iomem *ioaddr);
    351	void (*set_eee_timer)(void __iomem *ioaddr, const int ls,
    352			      const int tw);
    353	void (*set_eee_pls)(void __iomem *ioaddr, const int link);
    354
    355	/* Enable disable checksum offload operations */
    356	void (*enable_rx_csum)(void __iomem *ioaddr);
    357	void (*disable_rx_csum)(void __iomem *ioaddr);
    358	void (*enable_rxqueue)(void __iomem *ioaddr, int queue_num);
    359	void (*disable_rxqueue)(void __iomem *ioaddr, int queue_num);
    360};
    361
    362const struct sxgbe_core_ops *sxgbe_get_core_ops(void);
    363
    364struct sxgbe_ops {
    365	const struct sxgbe_core_ops *mac;
    366	const struct sxgbe_desc_ops *desc;
    367	const struct sxgbe_dma_ops *dma;
    368	const struct sxgbe_mtl_ops *mtl;
    369	struct mii_regs mii;	/* MII register Addresses */
    370	struct mac_link link;
    371	unsigned int ctrl_uid;
    372	unsigned int ctrl_id;
    373};
    374
    375/* SXGBE private data structures */
    376struct sxgbe_tx_queue {
    377	unsigned int irq_no;
    378	struct sxgbe_priv_data *priv_ptr;
    379	struct sxgbe_tx_norm_desc *dma_tx;
    380	dma_addr_t dma_tx_phy;
    381	dma_addr_t *tx_skbuff_dma;
    382	struct sk_buff **tx_skbuff;
    383	struct timer_list txtimer;
    384	unsigned int cur_tx;
    385	unsigned int dirty_tx;
    386	u32 tx_count_frames;
    387	u32 tx_coal_frames;
    388	u32 tx_coal_timer;
    389	int hwts_tx_en;
    390	u16 prev_mss;
    391	u8 queue_no;
    392};
    393
    394struct sxgbe_rx_queue {
    395	struct sxgbe_priv_data *priv_ptr;
    396	struct sxgbe_rx_norm_desc *dma_rx;
    397	struct sk_buff **rx_skbuff;
    398	unsigned int cur_rx;
    399	unsigned int dirty_rx;
    400	unsigned int irq_no;
    401	u32 rx_riwt;
    402	dma_addr_t *rx_skbuff_dma;
    403	dma_addr_t dma_rx_phy;
    404	u8 queue_no;
    405};
    406
    407/* SXGBE HW capabilities */
    408struct sxgbe_hw_features {
    409	/****** CAP [0] *******/
    410	unsigned int pmt_remote_wake_up;
    411	unsigned int pmt_magic_frame;
    412	/* IEEE 1588-2008 */
    413	unsigned int atime_stamp;
    414
    415	unsigned int eee;
    416
    417	unsigned int tx_csum_offload;
    418	unsigned int rx_csum_offload;
    419	unsigned int multi_macaddr;
    420	unsigned int tstamp_srcselect;
    421	unsigned int sa_vlan_insert;
    422
    423	/****** CAP [1] *******/
    424	unsigned int rxfifo_size;
    425	unsigned int txfifo_size;
    426	unsigned int atstmap_hword;
    427	unsigned int dcb_enable;
    428	unsigned int splithead_enable;
    429	unsigned int tcpseg_offload;
    430	unsigned int debug_mem;
    431	unsigned int rss_enable;
    432	unsigned int hash_tsize;
    433	unsigned int l3l4_filer_size;
    434
    435	/* This value is in bytes and
    436	 * as mentioned in HW features
    437	 * of SXGBE data book
    438	 */
    439	unsigned int rx_mtl_qsize;
    440	unsigned int tx_mtl_qsize;
    441
    442	/****** CAP [2] *******/
    443	/* TX and RX number of channels */
    444	unsigned int rx_mtl_queues;
    445	unsigned int tx_mtl_queues;
    446	unsigned int rx_dma_channels;
    447	unsigned int tx_dma_channels;
    448	unsigned int pps_output_count;
    449	unsigned int aux_input_count;
    450};
    451
    452struct sxgbe_priv_data {
    453	/* DMA descriptos */
    454	struct sxgbe_tx_queue *txq[SXGBE_TX_QUEUES];
    455	struct sxgbe_rx_queue *rxq[SXGBE_RX_QUEUES];
    456	u8 cur_rx_qnum;
    457
    458	unsigned int dma_tx_size;
    459	unsigned int dma_rx_size;
    460	unsigned int dma_buf_sz;
    461	u32 rx_riwt;
    462
    463	struct napi_struct napi;
    464
    465	void __iomem *ioaddr;
    466	struct net_device *dev;
    467	struct device *device;
    468	struct sxgbe_ops *hw;	/* sxgbe specific ops */
    469	int no_csum_insertion;
    470	int irq;
    471	int rxcsum_insertion;
    472	spinlock_t stats_lock;	/* lock for tx/rx statatics */
    473
    474	int oldlink;
    475	int speed;
    476	int oldduplex;
    477	struct mii_bus *mii;
    478	int mii_irq[PHY_MAX_ADDR];
    479	u8 rx_pause;
    480	u8 tx_pause;
    481
    482	struct sxgbe_extra_stats xstats;
    483	struct sxgbe_plat_data *plat;
    484	struct sxgbe_hw_features hw_cap;
    485
    486	u32 msg_enable;
    487
    488	struct clk *sxgbe_clk;
    489	int clk_csr;
    490	unsigned int mode;
    491	unsigned int default_addend;
    492
    493	/* advanced time stamp support */
    494	u32 adv_ts;
    495	int use_riwt;
    496	struct ptp_clock *ptp_clock;
    497
    498	/* tc control */
    499	int tx_tc;
    500	int rx_tc;
    501	/* EEE-LPI specific members */
    502	struct timer_list eee_ctrl_timer;
    503	bool tx_path_in_lpi_mode;
    504	int lpi_irq;
    505	int eee_enabled;
    506	int eee_active;
    507	int tx_lpi_timer;
    508};
    509
    510/* Function prototypes */
    511struct sxgbe_priv_data *sxgbe_drv_probe(struct device *device,
    512					struct sxgbe_plat_data *plat_dat,
    513					void __iomem *addr);
    514int sxgbe_drv_remove(struct net_device *ndev);
    515void sxgbe_set_ethtool_ops(struct net_device *netdev);
    516int sxgbe_mdio_unregister(struct net_device *ndev);
    517int sxgbe_mdio_register(struct net_device *ndev);
    518int sxgbe_register_platform(void);
    519void sxgbe_unregister_platform(void);
    520
    521#ifdef CONFIG_PM
    522int sxgbe_suspend(struct net_device *ndev);
    523int sxgbe_resume(struct net_device *ndev);
    524int sxgbe_freeze(struct net_device *ndev);
    525int sxgbe_restore(struct net_device *ndev);
    526#endif /* CONFIG_PM */
    527
    528const struct sxgbe_mtl_ops *sxgbe_get_mtl_ops(void);
    529
    530void sxgbe_disable_eee_mode(struct sxgbe_priv_data * const priv);
    531bool sxgbe_eee_init(struct sxgbe_priv_data * const priv);
    532#endif /* __SXGBE_COMMON_H__ */