1 /* Altera Triple-Speed Ethernet MAC driver
2 * Copyright (C) 2008-2014 Altera Corporation. All rights reserved
15 * Original driver contributed by SLS.
16 * Major updates contributed by GlobalLogic
18 * This program is free software; you can redistribute it and/or modify it
19 * under the terms and conditions of the GNU General Public License,
20 * version 2, as published by the Free Software Foundation.
22 * This program is distributed in the hope it will be useful, but WITHOUT
23 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
24 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
27 * You should have received a copy of the GNU General Public License along with
28 * this program. If not, see <http://www.gnu.org/licenses/>.
31 #ifndef __ALTERA_TSE_H__
32 #define __ALTERA_TSE_H__
34 #define ALTERA_TSE_RESOURCE_NAME "altera_tse"
36 #include <linux/bitops.h>
37 #include <linux/if_vlan.h>
38 #include <linux/list.h>
39 #include <linux/netdevice.h>
40 #include <linux/phy.h>
42 #define ALTERA_TSE_SW_RESET_WATCHDOG_CNTR 10000
43 #define ALTERA_TSE_MAC_FIFO_WIDTH 4 /* TX/RX FIFO width in
46 /* Rx FIFO default settings */
47 #define ALTERA_TSE_RX_SECTION_EMPTY 16
48 #define ALTERA_TSE_RX_SECTION_FULL 0
49 #define ALTERA_TSE_RX_ALMOST_EMPTY 8
50 #define ALTERA_TSE_RX_ALMOST_FULL 8
52 /* Tx FIFO default settings */
53 #define ALTERA_TSE_TX_SECTION_EMPTY 16
54 #define ALTERA_TSE_TX_SECTION_FULL 0
55 #define ALTERA_TSE_TX_ALMOST_EMPTY 8
56 #define ALTERA_TSE_TX_ALMOST_FULL 3
58 /* MAC function configuration default settings */
59 #define ALTERA_TSE_TX_IPG_LENGTH 12
61 #define ALTERA_TSE_PAUSE_QUANTA 0xffff
63 #define GET_BIT_VALUE(v, bit) (((v) >> (bit)) & 0x1)
65 /* MAC Command_Config Register Bit Definitions
67 #define MAC_CMDCFG_TX_ENA BIT(0)
68 #define MAC_CMDCFG_RX_ENA BIT(1)
69 #define MAC_CMDCFG_XON_GEN BIT(2)
70 #define MAC_CMDCFG_ETH_SPEED BIT(3)
71 #define MAC_CMDCFG_PROMIS_EN BIT(4)
72 #define MAC_CMDCFG_PAD_EN BIT(5)
73 #define MAC_CMDCFG_CRC_FWD BIT(6)
74 #define MAC_CMDCFG_PAUSE_FWD BIT(7)
75 #define MAC_CMDCFG_PAUSE_IGNORE BIT(8)
76 #define MAC_CMDCFG_TX_ADDR_INS BIT(9)
77 #define MAC_CMDCFG_HD_ENA BIT(10)
78 #define MAC_CMDCFG_EXCESS_COL BIT(11)
79 #define MAC_CMDCFG_LATE_COL BIT(12)
80 #define MAC_CMDCFG_SW_RESET BIT(13)
81 #define MAC_CMDCFG_MHASH_SEL BIT(14)
82 #define MAC_CMDCFG_LOOP_ENA BIT(15)
83 #define MAC_CMDCFG_TX_ADDR_SEL(v) (((v) & 0x7) << 16)
84 #define MAC_CMDCFG_MAGIC_ENA BIT(19)
85 #define MAC_CMDCFG_SLEEP BIT(20)
86 #define MAC_CMDCFG_WAKEUP BIT(21)
87 #define MAC_CMDCFG_XOFF_GEN BIT(22)
88 #define MAC_CMDCFG_CNTL_FRM_ENA BIT(23)
89 #define MAC_CMDCFG_NO_LGTH_CHECK BIT(24)
90 #define MAC_CMDCFG_ENA_10 BIT(25)
91 #define MAC_CMDCFG_RX_ERR_DISC BIT(26)
92 #define MAC_CMDCFG_DISABLE_READ_TIMEOUT BIT(27)
93 #define MAC_CMDCFG_CNT_RESET BIT(31)
95 #define MAC_CMDCFG_TX_ENA_GET(v) GET_BIT_VALUE(v, 0)
96 #define MAC_CMDCFG_RX_ENA_GET(v) GET_BIT_VALUE(v, 1)
97 #define MAC_CMDCFG_XON_GEN_GET(v) GET_BIT_VALUE(v, 2)
98 #define MAC_CMDCFG_ETH_SPEED_GET(v) GET_BIT_VALUE(v, 3)
99 #define MAC_CMDCFG_PROMIS_EN_GET(v) GET_BIT_VALUE(v, 4)
100 #define MAC_CMDCFG_PAD_EN_GET(v) GET_BIT_VALUE(v, 5)
101 #define MAC_CMDCFG_CRC_FWD_GET(v) GET_BIT_VALUE(v, 6)
102 #define MAC_CMDCFG_PAUSE_FWD_GET(v) GET_BIT_VALUE(v, 7)
103 #define MAC_CMDCFG_PAUSE_IGNORE_GET(v) GET_BIT_VALUE(v, 8)
104 #define MAC_CMDCFG_TX_ADDR_INS_GET(v) GET_BIT_VALUE(v, 9)
105 #define MAC_CMDCFG_HD_ENA_GET(v) GET_BIT_VALUE(v, 10)
106 #define MAC_CMDCFG_EXCESS_COL_GET(v) GET_BIT_VALUE(v, 11)
107 #define MAC_CMDCFG_LATE_COL_GET(v) GET_BIT_VALUE(v, 12)
108 #define MAC_CMDCFG_SW_RESET_GET(v) GET_BIT_VALUE(v, 13)
109 #define MAC_CMDCFG_MHASH_SEL_GET(v) GET_BIT_VALUE(v, 14)
110 #define MAC_CMDCFG_LOOP_ENA_GET(v) GET_BIT_VALUE(v, 15)
111 #define MAC_CMDCFG_TX_ADDR_SEL_GET(v) (((v) >> 16) & 0x7)
112 #define MAC_CMDCFG_MAGIC_ENA_GET(v) GET_BIT_VALUE(v, 19)
113 #define MAC_CMDCFG_SLEEP_GET(v) GET_BIT_VALUE(v, 20)
114 #define MAC_CMDCFG_WAKEUP_GET(v) GET_BIT_VALUE(v, 21)
115 #define MAC_CMDCFG_XOFF_GEN_GET(v) GET_BIT_VALUE(v, 22)
116 #define MAC_CMDCFG_CNTL_FRM_ENA_GET(v) GET_BIT_VALUE(v, 23)
117 #define MAC_CMDCFG_NO_LGTH_CHECK_GET(v) GET_BIT_VALUE(v, 24)
118 #define MAC_CMDCFG_ENA_10_GET(v) GET_BIT_VALUE(v, 25)
119 #define MAC_CMDCFG_RX_ERR_DISC_GET(v) GET_BIT_VALUE(v, 26)
120 #define MAC_CMDCFG_DISABLE_READ_TIMEOUT_GET(v) GET_BIT_VALUE(v, 27)
121 #define MAC_CMDCFG_CNT_RESET_GET(v) GET_BIT_VALUE(v, 31)
123 /* SGMII PCS register addresses
125 #define SGMII_PCS_SCRATCH 0x10
126 #define SGMII_PCS_REV 0x11
127 #define SGMII_PCS_LINK_TIMER_0 0x12
128 #define SGMII_PCS_LINK_TIMER_1 0x13
129 #define SGMII_PCS_IF_MODE 0x14
130 #define SGMII_PCS_DIS_READ_TO 0x15
131 #define SGMII_PCS_READ_TO 0x16
132 #define SGMII_PCS_SW_RESET_TIMEOUT 100 /* usecs */
134 /* MDIO registers within MAC register Space
136 struct altera_tse_mdio
{
137 u32 control
; /* PHY device operation control register */
138 u32 status
; /* PHY device operation status register */
139 u32 phy_id1
; /* Bits 31:16 of PHY identifier */
140 u32 phy_id2
; /* Bits 15:0 of PHY identifier */
141 u32 auto_negotiation_advertisement
; /* Auto-negotiation
145 u32 remote_partner_base_page_ability
;
175 /* MAC register Space. Note that some of these registers may or may not be
176 * present depending upon options chosen by the user when the core was
177 * configured and built. Please consult the Altera Triple Speed Ethernet User
180 struct altera_tse_mac
{
181 /* Bits 15:0: MegaCore function revision (0x0800). Bit 31:16: Customer
184 u32 megacore_revision
;
185 /* Provides a memory location for user applications to test the device
189 /* The host processor uses this register to control and configure the
193 /* 32-bit primary MAC address word 0 bits 0 to 31 of the primary
197 /* 32-bit primary MAC address word 1 bits 32 to 47 of the primary
201 /* 14-bit maximum frame length. The MAC receive logic */
203 /* The pause quanta is used in each pause frame sent to a remote
204 * Ethernet device, in increments of 512 Ethernet bit times
207 /* 12-bit receive FIFO section-empty threshold */
208 u32 rx_section_empty
;
209 /* 12-bit receive FIFO section-full threshold */
211 /* 12-bit transmit FIFO section-empty threshold */
212 u32 tx_section_empty
;
213 /* 12-bit transmit FIFO section-full threshold */
215 /* 12-bit receive FIFO almost-empty threshold */
217 /* 12-bit receive FIFO almost-full threshold */
219 /* 12-bit transmit FIFO almost-empty threshold */
221 /* 12-bit transmit FIFO almost-full threshold */
223 /* MDIO address of PHY Device 0. Bits 0 to 4 hold a 5-bit PHY address */
225 /* MDIO address of PHY Device 1. Bits 0 to 4 hold a 5-bit PHY address */
228 /* Bit[15:0]—16-bit holdoff quanta */
231 /* only if 100/1000 BaseX PCS, reserved otherwise */
234 /* Minimum IPG between consecutive transmit frame in terms of bytes */
237 /* IEEE 802.3 oEntity Managed Object Support */
239 /* The MAC addresses */
243 /* Number of frames transmitted without error including pause frames */
244 u32 frames_transmitted_ok
;
245 /* Number of frames received without error including pause frames */
246 u32 frames_received_ok
;
247 /* Number of frames received with a CRC error */
248 u32 frames_check_sequence_errors
;
249 /* Frame received with an alignment error */
250 u32 alignment_errors
;
251 /* Sum of payload and padding octets of frames transmitted without
254 u32 octets_transmitted_ok
;
255 /* Sum of payload and padding octets of frames received without error */
256 u32 octets_received_ok
;
258 /* IEEE 802.3 oPausedEntity Managed Object Support */
260 /* Number of transmitted pause frames */
261 u32 tx_pause_mac_ctrl_frames
;
262 /* Number of Received pause frames */
263 u32 rx_pause_mac_ctrl_frames
;
265 /* IETF MIB (MIB-II) Object Support */
267 /* Number of frames received with error */
269 /* Number of frames transmitted with error */
271 /* Number of valid received unicast frames */
272 u32 if_in_ucast_pkts
;
273 /* Number of valid received multicasts frames (without pause) */
274 u32 if_in_multicast_pkts
;
275 /* Number of valid received broadcast frames */
276 u32 if_in_broadcast_pkts
;
278 /* The number of valid unicast frames transmitted */
279 u32 if_out_ucast_pkts
;
280 /* The number of valid multicast frames transmitted,
281 * excluding pause frames
283 u32 if_out_multicast_pkts
;
284 u32 if_out_broadcast_pkts
;
286 /* IETF RMON MIB Object Support */
288 /* Counts the number of dropped packets due to internal errors
291 u32 ether_stats_drop_events
;
292 /* Total number of bytes received. Good and bad frames. */
293 u32 ether_stats_octets
;
294 /* Total number of packets received. Counts good and bad packets. */
295 u32 ether_stats_pkts
;
296 /* Number of packets received with less than 64 bytes. */
297 u32 ether_stats_undersize_pkts
;
298 /* The number of frames received that are longer than the
299 * value configured in the frm_length register
301 u32 ether_stats_oversize_pkts
;
302 /* Number of received packet with 64 bytes */
303 u32 ether_stats_pkts_64_octets
;
304 /* Frames (good and bad) with 65 to 127 bytes */
305 u32 ether_stats_pkts_65to127_octets
;
306 /* Frames (good and bad) with 128 to 255 bytes */
307 u32 ether_stats_pkts_128to255_octets
;
308 /* Frames (good and bad) with 256 to 511 bytes */
309 u32 ether_stats_pkts_256to511_octets
;
310 /* Frames (good and bad) with 512 to 1023 bytes */
311 u32 ether_stats_pkts_512to1023_octets
;
312 /* Frames (good and bad) with 1024 to 1518 bytes */
313 u32 ether_stats_pkts_1024to1518_octets
;
315 /* Any frame length from 1519 to the maximum length configured in the
316 * frm_length register, if it is greater than 1518
318 u32 ether_stats_pkts_1519tox_octets
;
319 /* Too long frames with CRC error */
320 u32 ether_stats_jabbers
;
321 /* Too short frames with CRC error */
322 u32 ether_stats_fragments
;
326 /* FIFO control register */
330 /* Extended Statistics Counters */
331 u32 msb_octets_transmitted_ok
;
332 u32 msb_octets_received_ok
;
333 u32 msb_ether_stats_octets
;
337 /* Multicast address resolution table, mapped in the controller address
342 /* Registers 0 to 31 within PHY device 0/1 connected to the MDIO PHY
343 * management interface
345 struct altera_tse_mdio mdio_phy0
;
346 struct altera_tse_mdio mdio_phy1
;
348 /* 4 Supplemental MAC Addresses */
349 u32 supp_mac_addr_0_0
;
350 u32 supp_mac_addr_0_1
;
351 u32 supp_mac_addr_1_0
;
352 u32 supp_mac_addr_1_1
;
353 u32 supp_mac_addr_2_0
;
354 u32 supp_mac_addr_2_1
;
355 u32 supp_mac_addr_3_0
;
356 u32 supp_mac_addr_3_1
;
360 /* IEEE 1588v2 Feature */
371 #define tse_csroffs(a) (offsetof(struct altera_tse_mac, a))
373 /* Transmit and Receive Command Registers Bit Definitions
375 #define ALTERA_TSE_TX_CMD_STAT_OMIT_CRC BIT(17)
376 #define ALTERA_TSE_TX_CMD_STAT_TX_SHIFT16 BIT(18)
377 #define ALTERA_TSE_RX_CMD_STAT_RX_SHIFT16 BIT(25)
379 /* Wrapper around a pointer to a socket buffer,
380 * so a DMA handle can be stored along with the buffer
390 struct altera_tse_private
;
392 #define ALTERA_DTYPE_SGDMA 1
393 #define ALTERA_DTYPE_MSGDMA 2
395 /* standard DMA interface for SGDMA and MSGDMA */
396 struct altera_dmaops
{
399 void (*reset_dma
)(struct altera_tse_private
*);
400 void (*enable_txirq
)(struct altera_tse_private
*);
401 void (*enable_rxirq
)(struct altera_tse_private
*);
402 void (*disable_txirq
)(struct altera_tse_private
*);
403 void (*disable_rxirq
)(struct altera_tse_private
*);
404 void (*clear_txirq
)(struct altera_tse_private
*);
405 void (*clear_rxirq
)(struct altera_tse_private
*);
406 int (*tx_buffer
)(struct altera_tse_private
*, struct tse_buffer
*);
407 u32 (*tx_completions
)(struct altera_tse_private
*);
408 void (*add_rx_desc
)(struct altera_tse_private
*, struct tse_buffer
*);
409 u32 (*get_rx_status
)(struct altera_tse_private
*);
410 int (*init_dma
)(struct altera_tse_private
*);
411 void (*uninit_dma
)(struct altera_tse_private
*);
412 void (*start_rxdma
)(struct altera_tse_private
*);
415 /* This structure is private to each device.
417 struct altera_tse_private
{
418 struct net_device
*dev
;
419 struct device
*device
;
420 struct napi_struct napi
;
422 /* MAC address space */
423 struct altera_tse_mac __iomem
*mac_dev
;
428 /* mSGDMA Rx Dispatcher address space */
429 void __iomem
*rx_dma_csr
;
430 void __iomem
*rx_dma_desc
;
431 void __iomem
*rx_dma_resp
;
433 /* mSGDMA Tx Dispatcher address space */
434 void __iomem
*tx_dma_csr
;
435 void __iomem
*tx_dma_desc
;
437 /* Rx buffers queue */
438 struct tse_buffer
*rx_ring
;
445 struct tse_buffer
*tx_ring
;
454 /* RX/TX MAC FIFO configs */
458 /* Hash filter settings */
462 /* Descriptor memory info for managing SGDMA */
465 dma_addr_t rxdescmem_busaddr
;
466 dma_addr_t txdescmem_busaddr
;
469 dma_addr_t rxdescphys
;
470 dma_addr_t txdescphys
;
472 struct list_head txlisthd
;
473 struct list_head rxlisthd
;
475 /* MAC command_config register protection */
476 spinlock_t mac_cfg_lock
;
477 /* Tx path protection */
479 /* Rx DMA & interrupt control protection */
480 spinlock_t rxdma_irq_lock
;
483 int phy_addr
; /* PHY's MDIO address, -1 for autodetection */
484 phy_interface_t phy_iface
;
485 struct mii_bus
*mdio
;
490 /* ethtool msglvl option */
493 struct altera_dmaops
*dmaops
;
496 /* Function prototypes
498 void altera_tse_set_ethtool_ops(struct net_device
*);
501 u32
csrrd32(void __iomem
*mac
, size_t offs
)
503 void __iomem
*paddr
= (void __iomem
*)((uintptr_t)mac
+ offs
);
508 u16
csrrd16(void __iomem
*mac
, size_t offs
)
510 void __iomem
*paddr
= (void __iomem
*)((uintptr_t)mac
+ offs
);
515 u8
csrrd8(void __iomem
*mac
, size_t offs
)
517 void __iomem
*paddr
= (void __iomem
*)((uintptr_t)mac
+ offs
);
522 void csrwr32(u32 val
, void __iomem
*mac
, size_t offs
)
524 void __iomem
*paddr
= (void __iomem
*)((uintptr_t)mac
+ offs
);
530 void csrwr16(u16 val
, void __iomem
*mac
, size_t offs
)
532 void __iomem
*paddr
= (void __iomem
*)((uintptr_t)mac
+ offs
);
538 void csrwr8(u8 val
, void __iomem
*mac
, size_t offs
)
540 void __iomem
*paddr
= (void __iomem
*)((uintptr_t)mac
+ offs
);
545 #endif /* __ALTERA_TSE_H__ */