linux/drivers/net/ethernet/altera/altera_tse.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-only */
   2/* Altera Triple-Speed Ethernet MAC driver
   3 * Copyright (C) 2008-2014 Altera Corporation. All rights reserved
   4 *
   5 * Contributors:
   6 *   Dalon Westergreen
   7 *   Thomas Chou
   8 *   Ian Abbott
   9 *   Yuriy Kozlov
  10 *   Tobias Klauser
  11 *   Andriy Smolskyy
  12 *   Roman Bulgakov
  13 *   Dmytro Mytarchuk
  14 *   Matthew Gerlach
  15 *
  16 * Original driver contributed by SLS.
  17 * Major updates contributed by GlobalLogic
  18 */
  19
  20#ifndef __ALTERA_TSE_H__
  21#define __ALTERA_TSE_H__
  22
  23#define ALTERA_TSE_RESOURCE_NAME        "altera_tse"
  24
  25#include <linux/bitops.h>
  26#include <linux/if_vlan.h>
  27#include <linux/list.h>
  28#include <linux/netdevice.h>
  29#include <linux/phy.h>
  30
  31#define ALTERA_TSE_SW_RESET_WATCHDOG_CNTR       10000
  32#define ALTERA_TSE_MAC_FIFO_WIDTH               4       /* TX/RX FIFO width in
  33                                                         * bytes
  34                                                         */
  35/* Rx FIFO default settings */
  36#define ALTERA_TSE_RX_SECTION_EMPTY     16
  37#define ALTERA_TSE_RX_SECTION_FULL      0
  38#define ALTERA_TSE_RX_ALMOST_EMPTY      8
  39#define ALTERA_TSE_RX_ALMOST_FULL       8
  40
  41/* Tx FIFO default settings */
  42#define ALTERA_TSE_TX_SECTION_EMPTY     16
  43#define ALTERA_TSE_TX_SECTION_FULL      0
  44#define ALTERA_TSE_TX_ALMOST_EMPTY      8
  45#define ALTERA_TSE_TX_ALMOST_FULL       3
  46
  47/* MAC function configuration default settings */
  48#define ALTERA_TSE_TX_IPG_LENGTH        12
  49
  50#define ALTERA_TSE_PAUSE_QUANTA         0xffff
  51
  52#define GET_BIT_VALUE(v, bit)           (((v) >> (bit)) & 0x1)
  53
  54/* MAC Command_Config Register Bit Definitions
  55 */
  56#define MAC_CMDCFG_TX_ENA                       BIT(0)
  57#define MAC_CMDCFG_RX_ENA                       BIT(1)
  58#define MAC_CMDCFG_XON_GEN                      BIT(2)
  59#define MAC_CMDCFG_ETH_SPEED                    BIT(3)
  60#define MAC_CMDCFG_PROMIS_EN                    BIT(4)
  61#define MAC_CMDCFG_PAD_EN                       BIT(5)
  62#define MAC_CMDCFG_CRC_FWD                      BIT(6)
  63#define MAC_CMDCFG_PAUSE_FWD                    BIT(7)
  64#define MAC_CMDCFG_PAUSE_IGNORE                 BIT(8)
  65#define MAC_CMDCFG_TX_ADDR_INS                  BIT(9)
  66#define MAC_CMDCFG_HD_ENA                       BIT(10)
  67#define MAC_CMDCFG_EXCESS_COL                   BIT(11)
  68#define MAC_CMDCFG_LATE_COL                     BIT(12)
  69#define MAC_CMDCFG_SW_RESET                     BIT(13)
  70#define MAC_CMDCFG_MHASH_SEL                    BIT(14)
  71#define MAC_CMDCFG_LOOP_ENA                     BIT(15)
  72#define MAC_CMDCFG_TX_ADDR_SEL(v)               (((v) & 0x7) << 16)
  73#define MAC_CMDCFG_MAGIC_ENA                    BIT(19)
  74#define MAC_CMDCFG_SLEEP                        BIT(20)
  75#define MAC_CMDCFG_WAKEUP                       BIT(21)
  76#define MAC_CMDCFG_XOFF_GEN                     BIT(22)
  77#define MAC_CMDCFG_CNTL_FRM_ENA                 BIT(23)
  78#define MAC_CMDCFG_NO_LGTH_CHECK                BIT(24)
  79#define MAC_CMDCFG_ENA_10                       BIT(25)
  80#define MAC_CMDCFG_RX_ERR_DISC                  BIT(26)
  81#define MAC_CMDCFG_DISABLE_READ_TIMEOUT         BIT(27)
  82#define MAC_CMDCFG_CNT_RESET                    BIT(31)
  83
  84#define MAC_CMDCFG_TX_ENA_GET(v)                GET_BIT_VALUE(v, 0)
  85#define MAC_CMDCFG_RX_ENA_GET(v)                GET_BIT_VALUE(v, 1)
  86#define MAC_CMDCFG_XON_GEN_GET(v)               GET_BIT_VALUE(v, 2)
  87#define MAC_CMDCFG_ETH_SPEED_GET(v)             GET_BIT_VALUE(v, 3)
  88#define MAC_CMDCFG_PROMIS_EN_GET(v)             GET_BIT_VALUE(v, 4)
  89#define MAC_CMDCFG_PAD_EN_GET(v)                GET_BIT_VALUE(v, 5)
  90#define MAC_CMDCFG_CRC_FWD_GET(v)               GET_BIT_VALUE(v, 6)
  91#define MAC_CMDCFG_PAUSE_FWD_GET(v)             GET_BIT_VALUE(v, 7)
  92#define MAC_CMDCFG_PAUSE_IGNORE_GET(v)          GET_BIT_VALUE(v, 8)
  93#define MAC_CMDCFG_TX_ADDR_INS_GET(v)           GET_BIT_VALUE(v, 9)
  94#define MAC_CMDCFG_HD_ENA_GET(v)                GET_BIT_VALUE(v, 10)
  95#define MAC_CMDCFG_EXCESS_COL_GET(v)            GET_BIT_VALUE(v, 11)
  96#define MAC_CMDCFG_LATE_COL_GET(v)              GET_BIT_VALUE(v, 12)
  97#define MAC_CMDCFG_SW_RESET_GET(v)              GET_BIT_VALUE(v, 13)
  98#define MAC_CMDCFG_MHASH_SEL_GET(v)             GET_BIT_VALUE(v, 14)
  99#define MAC_CMDCFG_LOOP_ENA_GET(v)              GET_BIT_VALUE(v, 15)
 100#define MAC_CMDCFG_TX_ADDR_SEL_GET(v)           (((v) >> 16) & 0x7)
 101#define MAC_CMDCFG_MAGIC_ENA_GET(v)             GET_BIT_VALUE(v, 19)
 102#define MAC_CMDCFG_SLEEP_GET(v)                 GET_BIT_VALUE(v, 20)
 103#define MAC_CMDCFG_WAKEUP_GET(v)                GET_BIT_VALUE(v, 21)
 104#define MAC_CMDCFG_XOFF_GEN_GET(v)              GET_BIT_VALUE(v, 22)
 105#define MAC_CMDCFG_CNTL_FRM_ENA_GET(v)          GET_BIT_VALUE(v, 23)
 106#define MAC_CMDCFG_NO_LGTH_CHECK_GET(v)         GET_BIT_VALUE(v, 24)
 107#define MAC_CMDCFG_ENA_10_GET(v)                GET_BIT_VALUE(v, 25)
 108#define MAC_CMDCFG_RX_ERR_DISC_GET(v)           GET_BIT_VALUE(v, 26)
 109#define MAC_CMDCFG_DISABLE_READ_TIMEOUT_GET(v)  GET_BIT_VALUE(v, 27)
 110#define MAC_CMDCFG_CNT_RESET_GET(v)             GET_BIT_VALUE(v, 31)
 111
 112/* SGMII PCS register addresses
 113 */
 114#define SGMII_PCS_SCRATCH       0x10
 115#define SGMII_PCS_REV           0x11
 116#define SGMII_PCS_LINK_TIMER_0  0x12
 117#define SGMII_PCS_LINK_TIMER_1  0x13
 118#define SGMII_PCS_IF_MODE       0x14
 119#define SGMII_PCS_DIS_READ_TO   0x15
 120#define SGMII_PCS_READ_TO       0x16
 121#define SGMII_PCS_SW_RESET_TIMEOUT 100 /* usecs */
 122
 123/* MDIO registers within MAC register Space
 124 */
 125struct altera_tse_mdio {
 126        u32 control;    /* PHY device operation control register */
 127        u32 status;     /* PHY device operation status register */
 128        u32 phy_id1;    /* Bits 31:16 of PHY identifier */
 129        u32 phy_id2;    /* Bits 15:0 of PHY identifier */
 130        u32 auto_negotiation_advertisement;     /* Auto-negotiation
 131                                                         * advertisement
 132                                                         * register
 133                                                         */
 134        u32 remote_partner_base_page_ability;
 135
 136        u32 reg6;
 137        u32 reg7;
 138        u32 reg8;
 139        u32 reg9;
 140        u32 rega;
 141        u32 regb;
 142        u32 regc;
 143        u32 regd;
 144        u32 rege;
 145        u32 regf;
 146        u32 reg10;
 147        u32 reg11;
 148        u32 reg12;
 149        u32 reg13;
 150        u32 reg14;
 151        u32 reg15;
 152        u32 reg16;
 153        u32 reg17;
 154        u32 reg18;
 155        u32 reg19;
 156        u32 reg1a;
 157        u32 reg1b;
 158        u32 reg1c;
 159        u32 reg1d;
 160        u32 reg1e;
 161        u32 reg1f;
 162};
 163
 164/* MAC register Space. Note that some of these registers may or may not be
 165 * present depending upon options chosen by the user when the core was
 166 * configured and built. Please consult the Altera Triple Speed Ethernet User
 167 * Guide for details.
 168 */
 169struct altera_tse_mac {
 170        /* Bits 15:0: MegaCore function revision (0x0800). Bit 31:16: Customer
 171         * specific revision
 172         */
 173        u32 megacore_revision;
 174        /* Provides a memory location for user applications to test the device
 175         * memory operation.
 176         */
 177        u32 scratch_pad;
 178        /* The host processor uses this register to control and configure the
 179         * MAC block
 180         */
 181        u32 command_config;
 182        /* 32-bit primary MAC address word 0 bits 0 to 31 of the primary
 183         * MAC address
 184         */
 185        u32 mac_addr_0;
 186        /* 32-bit primary MAC address word 1 bits 32 to 47 of the primary
 187         * MAC address
 188         */
 189        u32 mac_addr_1;
 190        /* 14-bit maximum frame length. The MAC receive logic */
 191        u32 frm_length;
 192        /* The pause quanta is used in each pause frame sent to a remote
 193         * Ethernet device, in increments of 512 Ethernet bit times
 194         */
 195        u32 pause_quanta;
 196        /* 12-bit receive FIFO section-empty threshold */
 197        u32 rx_section_empty;
 198        /* 12-bit receive FIFO section-full threshold */
 199        u32 rx_section_full;
 200        /* 12-bit transmit FIFO section-empty threshold */
 201        u32 tx_section_empty;
 202        /* 12-bit transmit FIFO section-full threshold */
 203        u32 tx_section_full;
 204        /* 12-bit receive FIFO almost-empty threshold */
 205        u32 rx_almost_empty;
 206        /* 12-bit receive FIFO almost-full threshold */
 207        u32 rx_almost_full;
 208        /* 12-bit transmit FIFO almost-empty threshold */
 209        u32 tx_almost_empty;
 210        /* 12-bit transmit FIFO almost-full threshold */
 211        u32 tx_almost_full;
 212        /* MDIO address of PHY Device 0. Bits 0 to 4 hold a 5-bit PHY address */
 213        u32 mdio_phy0_addr;
 214        /* MDIO address of PHY Device 1. Bits 0 to 4 hold a 5-bit PHY address */
 215        u32 mdio_phy1_addr;
 216
 217        /* Bit[15:0]—16-bit holdoff quanta */
 218        u32 holdoff_quant;
 219
 220        /* only if 100/1000 BaseX PCS, reserved otherwise */
 221        u32 reserved1[5];
 222
 223        /* Minimum IPG between consecutive transmit frame in terms of bytes */
 224        u32 tx_ipg_length;
 225
 226        /* IEEE 802.3 oEntity Managed Object Support */
 227
 228        /* The MAC addresses */
 229        u32 mac_id_1;
 230        u32 mac_id_2;
 231
 232        /* Number of frames transmitted without error including pause frames */
 233        u32 frames_transmitted_ok;
 234        /* Number of frames received without error including pause frames */
 235        u32 frames_received_ok;
 236        /* Number of frames received with a CRC error */
 237        u32 frames_check_sequence_errors;
 238        /* Frame received with an alignment error */
 239        u32 alignment_errors;
 240        /* Sum of payload and padding octets of frames transmitted without
 241         * error
 242         */
 243        u32 octets_transmitted_ok;
 244        /* Sum of payload and padding octets of frames received without error */
 245        u32 octets_received_ok;
 246
 247        /* IEEE 802.3 oPausedEntity Managed Object Support */
 248
 249        /* Number of transmitted pause frames */
 250        u32 tx_pause_mac_ctrl_frames;
 251        /* Number of Received pause frames */
 252        u32 rx_pause_mac_ctrl_frames;
 253
 254        /* IETF MIB (MIB-II) Object Support */
 255
 256        /* Number of frames received with error */
 257        u32 if_in_errors;
 258        /* Number of frames transmitted with error */
 259        u32 if_out_errors;
 260        /* Number of valid received unicast frames */
 261        u32 if_in_ucast_pkts;
 262        /* Number of valid received multicasts frames (without pause) */
 263        u32 if_in_multicast_pkts;
 264        /* Number of valid received broadcast frames */
 265        u32 if_in_broadcast_pkts;
 266        u32 if_out_discards;
 267        /* The number of valid unicast frames transmitted */
 268        u32 if_out_ucast_pkts;
 269        /* The number of valid multicast frames transmitted,
 270         * excluding pause frames
 271         */
 272        u32 if_out_multicast_pkts;
 273        u32 if_out_broadcast_pkts;
 274
 275        /* IETF RMON MIB Object Support */
 276
 277        /* Counts the number of dropped packets due to internal errors
 278         * of the MAC client.
 279         */
 280        u32 ether_stats_drop_events;
 281        /* Total number of bytes received. Good and bad frames. */
 282        u32 ether_stats_octets;
 283        /* Total number of packets received. Counts good and bad packets. */
 284        u32 ether_stats_pkts;
 285        /* Number of packets received with less than 64 bytes. */
 286        u32 ether_stats_undersize_pkts;
 287        /* The number of frames received that are longer than the
 288         * value configured in the frm_length register
 289         */
 290        u32 ether_stats_oversize_pkts;
 291        /* Number of received packet with 64 bytes */
 292        u32 ether_stats_pkts_64_octets;
 293        /* Frames (good and bad) with 65 to 127 bytes */
 294        u32 ether_stats_pkts_65to127_octets;
 295        /* Frames (good and bad) with 128 to 255 bytes */
 296        u32 ether_stats_pkts_128to255_octets;
 297        /* Frames (good and bad) with 256 to 511 bytes */
 298        u32 ether_stats_pkts_256to511_octets;
 299        /* Frames (good and bad) with 512 to 1023 bytes */
 300        u32 ether_stats_pkts_512to1023_octets;
 301        /* Frames (good and bad) with 1024 to 1518 bytes */
 302        u32 ether_stats_pkts_1024to1518_octets;
 303
 304        /* Any frame length from 1519 to the maximum length configured in the
 305         * frm_length register, if it is greater than 1518
 306         */
 307        u32 ether_stats_pkts_1519tox_octets;
 308        /* Too long frames with CRC error */
 309        u32 ether_stats_jabbers;
 310        /* Too short frames with CRC error */
 311        u32 ether_stats_fragments;
 312
 313        u32 reserved2;
 314
 315        /* FIFO control register */
 316        u32 tx_cmd_stat;
 317        u32 rx_cmd_stat;
 318
 319        /* Extended Statistics Counters */
 320        u32 msb_octets_transmitted_ok;
 321        u32 msb_octets_received_ok;
 322        u32 msb_ether_stats_octets;
 323
 324        u32 reserved3;
 325
 326        /* Multicast address resolution table, mapped in the controller address
 327         * space
 328         */
 329        u32 hash_table[64];
 330
 331        /* Registers 0 to 31 within PHY device 0/1 connected to the MDIO PHY
 332         * management interface
 333         */
 334        struct altera_tse_mdio mdio_phy0;
 335        struct altera_tse_mdio mdio_phy1;
 336
 337        /* 4 Supplemental MAC Addresses */
 338        u32 supp_mac_addr_0_0;
 339        u32 supp_mac_addr_0_1;
 340        u32 supp_mac_addr_1_0;
 341        u32 supp_mac_addr_1_1;
 342        u32 supp_mac_addr_2_0;
 343        u32 supp_mac_addr_2_1;
 344        u32 supp_mac_addr_3_0;
 345        u32 supp_mac_addr_3_1;
 346
 347        u32 reserved4[8];
 348
 349        /* IEEE 1588v2 Feature */
 350        u32 tx_period;
 351        u32 tx_adjust_fns;
 352        u32 tx_adjust_ns;
 353        u32 rx_period;
 354        u32 rx_adjust_fns;
 355        u32 rx_adjust_ns;
 356
 357        u32 reserved5[42];
 358};
 359
 360#define tse_csroffs(a) (offsetof(struct altera_tse_mac, a))
 361
 362/* Transmit and Receive Command Registers Bit Definitions
 363 */
 364#define ALTERA_TSE_TX_CMD_STAT_OMIT_CRC         BIT(17)
 365#define ALTERA_TSE_TX_CMD_STAT_TX_SHIFT16       BIT(18)
 366#define ALTERA_TSE_RX_CMD_STAT_RX_SHIFT16       BIT(25)
 367
 368/* Wrapper around a pointer to a socket buffer,
 369 * so a DMA handle can be stored along with the buffer
 370 */
 371struct tse_buffer {
 372        struct list_head lh;
 373        struct sk_buff *skb;
 374        dma_addr_t dma_addr;
 375        u32 len;
 376        int mapped_as_page;
 377};
 378
 379struct altera_tse_private;
 380
 381#define ALTERA_DTYPE_SGDMA 1
 382#define ALTERA_DTYPE_MSGDMA 2
 383
 384/* standard DMA interface for SGDMA and MSGDMA */
 385struct altera_dmaops {
 386        int altera_dtype;
 387        int dmamask;
 388        void (*reset_dma)(struct altera_tse_private *);
 389        void (*enable_txirq)(struct altera_tse_private *);
 390        void (*enable_rxirq)(struct altera_tse_private *);
 391        void (*disable_txirq)(struct altera_tse_private *);
 392        void (*disable_rxirq)(struct altera_tse_private *);
 393        void (*clear_txirq)(struct altera_tse_private *);
 394        void (*clear_rxirq)(struct altera_tse_private *);
 395        int (*tx_buffer)(struct altera_tse_private *, struct tse_buffer *);
 396        u32 (*tx_completions)(struct altera_tse_private *);
 397        void (*add_rx_desc)(struct altera_tse_private *, struct tse_buffer *);
 398        u32 (*get_rx_status)(struct altera_tse_private *);
 399        int (*init_dma)(struct altera_tse_private *);
 400        void (*uninit_dma)(struct altera_tse_private *);
 401        void (*start_rxdma)(struct altera_tse_private *);
 402};
 403
 404/* This structure is private to each device.
 405 */
 406struct altera_tse_private {
 407        struct net_device *dev;
 408        struct device *device;
 409        struct napi_struct napi;
 410
 411        /* MAC address space */
 412        struct altera_tse_mac __iomem *mac_dev;
 413
 414        /* TSE Revision */
 415        u32     revision;
 416
 417        /* mSGDMA Rx Dispatcher address space */
 418        void __iomem *rx_dma_csr;
 419        void __iomem *rx_dma_desc;
 420        void __iomem *rx_dma_resp;
 421
 422        /* mSGDMA Tx Dispatcher address space */
 423        void __iomem *tx_dma_csr;
 424        void __iomem *tx_dma_desc;
 425
 426        /* Rx buffers queue */
 427        struct tse_buffer *rx_ring;
 428        u32 rx_cons;
 429        u32 rx_prod;
 430        u32 rx_ring_size;
 431        u32 rx_dma_buf_sz;
 432
 433        /* Tx ring buffer */
 434        struct tse_buffer *tx_ring;
 435        u32 tx_prod;
 436        u32 tx_cons;
 437        u32 tx_ring_size;
 438
 439        /* Interrupts */
 440        u32 tx_irq;
 441        u32 rx_irq;
 442
 443        /* RX/TX MAC FIFO configs */
 444        u32 tx_fifo_depth;
 445        u32 rx_fifo_depth;
 446
 447        /* Hash filter settings */
 448        u32 hash_filter;
 449        u32 added_unicast;
 450
 451        /* Descriptor memory info for managing SGDMA */
 452        u32 txdescmem;
 453        u32 rxdescmem;
 454        dma_addr_t rxdescmem_busaddr;
 455        dma_addr_t txdescmem_busaddr;
 456        u32 txctrlreg;
 457        u32 rxctrlreg;
 458        dma_addr_t rxdescphys;
 459        dma_addr_t txdescphys;
 460
 461        struct list_head txlisthd;
 462        struct list_head rxlisthd;
 463
 464        /* MAC command_config register protection */
 465        spinlock_t mac_cfg_lock;
 466        /* Tx path protection */
 467        spinlock_t tx_lock;
 468        /* Rx DMA & interrupt control protection */
 469        spinlock_t rxdma_irq_lock;
 470
 471        /* PHY */
 472        int phy_addr;           /* PHY's MDIO address, -1 for autodetection */
 473        phy_interface_t phy_iface;
 474        struct mii_bus *mdio;
 475        int oldspeed;
 476        int oldduplex;
 477        int oldlink;
 478
 479        /* ethtool msglvl option */
 480        u32 msg_enable;
 481
 482        struct altera_dmaops *dmaops;
 483};
 484
 485/* Function prototypes
 486 */
 487void altera_tse_set_ethtool_ops(struct net_device *);
 488
 489static inline
 490u32 csrrd32(void __iomem *mac, size_t offs)
 491{
 492        void __iomem *paddr = (void __iomem *)((uintptr_t)mac + offs);
 493        return readl(paddr);
 494}
 495
 496static inline
 497u16 csrrd16(void __iomem *mac, size_t offs)
 498{
 499        void __iomem *paddr = (void __iomem *)((uintptr_t)mac + offs);
 500        return readw(paddr);
 501}
 502
 503static inline
 504u8 csrrd8(void __iomem *mac, size_t offs)
 505{
 506        void __iomem *paddr = (void __iomem *)((uintptr_t)mac + offs);
 507        return readb(paddr);
 508}
 509
 510static inline
 511void csrwr32(u32 val, void __iomem *mac, size_t offs)
 512{
 513        void __iomem *paddr = (void __iomem *)((uintptr_t)mac + offs);
 514
 515        writel(val, paddr);
 516}
 517
 518static inline
 519void csrwr16(u16 val, void __iomem *mac, size_t offs)
 520{
 521        void __iomem *paddr = (void __iomem *)((uintptr_t)mac + offs);
 522
 523        writew(val, paddr);
 524}
 525
 526static inline
 527void csrwr8(u8 val, void __iomem *mac, size_t offs)
 528{
 529        void __iomem *paddr = (void __iomem *)((uintptr_t)mac + offs);
 530
 531        writeb(val, paddr);
 532}
 533
 534#endif /* __ALTERA_TSE_H__ */
 535