root/drivers/net/ethernet/ti/davinci_emac.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. emac_get_drvinfo
  2. emac_get_coalesce
  3. emac_set_coalesce
  4. emac_update_phystatus
  5. hash_get
  6. emac_hash_add
  7. emac_hash_del
  8. emac_add_mcast
  9. emac_dev_mcast_set
  10. emac_int_disable
  11. emac_int_enable
  12. emac_irq
  13. emac_rx_alloc
  14. emac_rx_handler
  15. emac_tx_handler
  16. emac_dev_xmit
  17. emac_dev_tx_timeout
  18. emac_set_type0addr
  19. emac_set_type1addr
  20. emac_set_type2addr
  21. emac_setmac
  22. emac_dev_setmac_addr
  23. emac_hw_enable
  24. emac_poll
  25. emac_poll_controller
  26. emac_adjust_link
  27. emac_devioctl
  28. match_first_device
  29. emac_dev_open
  30. emac_dev_stop
  31. emac_dev_getnetstats
  32. davinci_emac_of_get_pdata
  33. davinci_emac_try_get_mac
  34. davinci_emac_probe
  35. davinci_emac_remove
  36. davinci_emac_suspend
  37. davinci_emac_resume
  38. davinci_emac_init
  39. davinci_emac_exit

   1 // SPDX-License-Identifier: GPL-2.0+
   2 /*
   3  * DaVinci Ethernet Medium Access Controller
   4  *
   5  * DaVinci EMAC is based upon CPPI 3.0 TI DMA engine
   6  *
   7  * Copyright (C) 2009 Texas Instruments.
   8  *
   9  * ---------------------------------------------------------------------------
  10  * History:
  11  * 0-5 A number of folks worked on this driver in bits and pieces but the major
  12  *     contribution came from Suraj Iyer and Anant Gole
  13  * 6.0 Anant Gole - rewrote the driver as per Linux conventions
  14  * 6.1 Chaithrika U S - added support for Gigabit and RMII features,
  15  *     PHY layer usage
  16  */
  17 
  18 #include <linux/module.h>
  19 #include <linux/kernel.h>
  20 #include <linux/sched.h>
  21 #include <linux/string.h>
  22 #include <linux/timer.h>
  23 #include <linux/errno.h>
  24 #include <linux/in.h>
  25 #include <linux/ioport.h>
  26 #include <linux/slab.h>
  27 #include <linux/mm.h>
  28 #include <linux/interrupt.h>
  29 #include <linux/init.h>
  30 #include <linux/netdevice.h>
  31 #include <linux/etherdevice.h>
  32 #include <linux/skbuff.h>
  33 #include <linux/ethtool.h>
  34 #include <linux/highmem.h>
  35 #include <linux/proc_fs.h>
  36 #include <linux/ctype.h>
  37 #include <linux/spinlock.h>
  38 #include <linux/dma-mapping.h>
  39 #include <linux/clk.h>
  40 #include <linux/platform_device.h>
  41 #include <linux/regmap.h>
  42 #include <linux/semaphore.h>
  43 #include <linux/phy.h>
  44 #include <linux/bitops.h>
  45 #include <linux/io.h>
  46 #include <linux/uaccess.h>
  47 #include <linux/pm_runtime.h>
  48 #include <linux/davinci_emac.h>
  49 #include <linux/of.h>
  50 #include <linux/of_address.h>
  51 #include <linux/of_device.h>
  52 #include <linux/of_mdio.h>
  53 #include <linux/of_irq.h>
  54 #include <linux/of_net.h>
  55 #include <linux/mfd/syscon.h>
  56 
  57 #include <asm/irq.h>
  58 #include <asm/page.h>
  59 
  60 #include "cpsw.h"
  61 #include "davinci_cpdma.h"
  62 
  63 static int debug_level;
  64 module_param(debug_level, int, 0);
  65 MODULE_PARM_DESC(debug_level, "DaVinci EMAC debug level (NETIF_MSG bits)");
  66 
  67 /* Netif debug messages possible */
  68 #define DAVINCI_EMAC_DEBUG      (NETIF_MSG_DRV | \
  69                                 NETIF_MSG_PROBE | \
  70                                 NETIF_MSG_LINK | \
  71                                 NETIF_MSG_TIMER | \
  72                                 NETIF_MSG_IFDOWN | \
  73                                 NETIF_MSG_IFUP | \
  74                                 NETIF_MSG_RX_ERR | \
  75                                 NETIF_MSG_TX_ERR | \
  76                                 NETIF_MSG_TX_QUEUED | \
  77                                 NETIF_MSG_INTR | \
  78                                 NETIF_MSG_TX_DONE | \
  79                                 NETIF_MSG_RX_STATUS | \
  80                                 NETIF_MSG_PKTDATA | \
  81                                 NETIF_MSG_HW | \
  82                                 NETIF_MSG_WOL)
  83 
  84 /* version info */
  85 #define EMAC_MAJOR_VERSION      6
  86 #define EMAC_MINOR_VERSION      1
  87 #define EMAC_MODULE_VERSION     "6.1"
  88 MODULE_VERSION(EMAC_MODULE_VERSION);
  89 static const char emac_version_string[] = "TI DaVinci EMAC Linux v6.1";
  90 
  91 /* Configuration items */
  92 #define EMAC_DEF_PASS_CRC               (0) /* Do not pass CRC up to frames */
  93 #define EMAC_DEF_QOS_EN                 (0) /* EMAC proprietary QoS disabled */
  94 #define EMAC_DEF_NO_BUFF_CHAIN          (0) /* No buffer chain */
  95 #define EMAC_DEF_MACCTRL_FRAME_EN       (0) /* Discard Maccontrol frames */
  96 #define EMAC_DEF_SHORT_FRAME_EN         (0) /* Discard short frames */
  97 #define EMAC_DEF_ERROR_FRAME_EN         (0) /* Discard error frames */
  98 #define EMAC_DEF_PROM_EN                (0) /* Promiscuous disabled */
  99 #define EMAC_DEF_PROM_CH                (0) /* Promiscuous channel is 0 */
 100 #define EMAC_DEF_BCAST_EN               (1) /* Broadcast enabled */
 101 #define EMAC_DEF_BCAST_CH               (0) /* Broadcast channel is 0 */
 102 #define EMAC_DEF_MCAST_EN               (1) /* Multicast enabled */
 103 #define EMAC_DEF_MCAST_CH               (0) /* Multicast channel is 0 */
 104 
 105 #define EMAC_DEF_TXPRIO_FIXED           (1) /* TX Priority is fixed */
 106 #define EMAC_DEF_TXPACING_EN            (0) /* TX pacing NOT supported*/
 107 
 108 #define EMAC_DEF_BUFFER_OFFSET          (0) /* Buffer offset to DMA (future) */
 109 #define EMAC_DEF_MIN_ETHPKTSIZE         (60) /* Minimum ethernet pkt size */
 110 #define EMAC_DEF_MAX_FRAME_SIZE         (1500 + 14 + 4 + 4)
 111 #define EMAC_DEF_TX_CH                  (0) /* Default 0th channel */
 112 #define EMAC_DEF_RX_CH                  (0) /* Default 0th channel */
 113 #define EMAC_DEF_RX_NUM_DESC            (128)
 114 #define EMAC_DEF_MAX_TX_CH              (1) /* Max TX channels configured */
 115 #define EMAC_DEF_MAX_RX_CH              (1) /* Max RX channels configured */
 116 #define EMAC_POLL_WEIGHT                (64) /* Default NAPI poll weight */
 117 
 118 /* Buffer descriptor parameters */
 119 #define EMAC_DEF_TX_MAX_SERVICE         (32) /* TX max service BD's */
 120 #define EMAC_DEF_RX_MAX_SERVICE         (64) /* should = netdev->weight */
 121 
 122 /* EMAC register related defines */
 123 #define EMAC_ALL_MULTI_REG_VALUE        (0xFFFFFFFF)
 124 #define EMAC_NUM_MULTICAST_BITS         (64)
 125 #define EMAC_TX_CONTROL_TX_ENABLE_VAL   (0x1)
 126 #define EMAC_RX_CONTROL_RX_ENABLE_VAL   (0x1)
 127 #define EMAC_MAC_HOST_ERR_INTMASK_VAL   (0x2)
 128 #define EMAC_RX_UNICAST_CLEAR_ALL       (0xFF)
 129 #define EMAC_INT_MASK_CLEAR             (0xFF)
 130 
 131 /* RX MBP register bit positions */
 132 #define EMAC_RXMBP_PASSCRC_MASK         BIT(30)
 133 #define EMAC_RXMBP_QOSEN_MASK           BIT(29)
 134 #define EMAC_RXMBP_NOCHAIN_MASK         BIT(28)
 135 #define EMAC_RXMBP_CMFEN_MASK           BIT(24)
 136 #define EMAC_RXMBP_CSFEN_MASK           BIT(23)
 137 #define EMAC_RXMBP_CEFEN_MASK           BIT(22)
 138 #define EMAC_RXMBP_CAFEN_MASK           BIT(21)
 139 #define EMAC_RXMBP_PROMCH_SHIFT         (16)
 140 #define EMAC_RXMBP_PROMCH_MASK          (0x7 << 16)
 141 #define EMAC_RXMBP_BROADEN_MASK         BIT(13)
 142 #define EMAC_RXMBP_BROADCH_SHIFT        (8)
 143 #define EMAC_RXMBP_BROADCH_MASK         (0x7 << 8)
 144 #define EMAC_RXMBP_MULTIEN_MASK         BIT(5)
 145 #define EMAC_RXMBP_MULTICH_SHIFT        (0)
 146 #define EMAC_RXMBP_MULTICH_MASK         (0x7)
 147 #define EMAC_RXMBP_CHMASK               (0x7)
 148 
 149 /* EMAC register definitions/bit maps used */
 150 # define EMAC_MBP_RXPROMISC             (0x00200000)
 151 # define EMAC_MBP_PROMISCCH(ch)         (((ch) & 0x7) << 16)
 152 # define EMAC_MBP_RXBCAST               (0x00002000)
 153 # define EMAC_MBP_BCASTCHAN(ch)         (((ch) & 0x7) << 8)
 154 # define EMAC_MBP_RXMCAST               (0x00000020)
 155 # define EMAC_MBP_MCASTCHAN(ch)         ((ch) & 0x7)
 156 
 157 /* EMAC mac_control register */
 158 #define EMAC_MACCONTROL_TXPTYPE         BIT(9)
 159 #define EMAC_MACCONTROL_TXPACEEN        BIT(6)
 160 #define EMAC_MACCONTROL_GMIIEN          BIT(5)
 161 #define EMAC_MACCONTROL_GIGABITEN       BIT(7)
 162 #define EMAC_MACCONTROL_FULLDUPLEXEN    BIT(0)
 163 #define EMAC_MACCONTROL_RMIISPEED_MASK  BIT(15)
 164 
 165 /* GIGABIT MODE related bits */
 166 #define EMAC_DM646X_MACCONTORL_GIG      BIT(7)
 167 #define EMAC_DM646X_MACCONTORL_GIGFORCE BIT(17)
 168 
 169 /* EMAC mac_status register */
 170 #define EMAC_MACSTATUS_TXERRCODE_MASK   (0xF00000)
 171 #define EMAC_MACSTATUS_TXERRCODE_SHIFT  (20)
 172 #define EMAC_MACSTATUS_TXERRCH_MASK     (0x7)
 173 #define EMAC_MACSTATUS_TXERRCH_SHIFT    (16)
 174 #define EMAC_MACSTATUS_RXERRCODE_MASK   (0xF000)
 175 #define EMAC_MACSTATUS_RXERRCODE_SHIFT  (12)
 176 #define EMAC_MACSTATUS_RXERRCH_MASK     (0x7)
 177 #define EMAC_MACSTATUS_RXERRCH_SHIFT    (8)
 178 
 179 /* EMAC RX register masks */
 180 #define EMAC_RX_MAX_LEN_MASK            (0xFFFF)
 181 #define EMAC_RX_BUFFER_OFFSET_MASK      (0xFFFF)
 182 
 183 /* MAC_IN_VECTOR (0x180) register bit fields */
 184 #define EMAC_DM644X_MAC_IN_VECTOR_HOST_INT      BIT(17)
 185 #define EMAC_DM644X_MAC_IN_VECTOR_STATPEND_INT  BIT(16)
 186 #define EMAC_DM644X_MAC_IN_VECTOR_RX_INT_VEC    BIT(8)
 187 #define EMAC_DM644X_MAC_IN_VECTOR_TX_INT_VEC    BIT(0)
 188 
 189 /** NOTE:: For DM646x the IN_VECTOR has changed */
 190 #define EMAC_DM646X_MAC_IN_VECTOR_RX_INT_VEC    BIT(EMAC_DEF_RX_CH)
 191 #define EMAC_DM646X_MAC_IN_VECTOR_TX_INT_VEC    BIT(16 + EMAC_DEF_TX_CH)
 192 #define EMAC_DM646X_MAC_IN_VECTOR_HOST_INT      BIT(26)
 193 #define EMAC_DM646X_MAC_IN_VECTOR_STATPEND_INT  BIT(27)
 194 
 195 /* CPPI bit positions */
 196 #define EMAC_CPPI_SOP_BIT               BIT(31)
 197 #define EMAC_CPPI_EOP_BIT               BIT(30)
 198 #define EMAC_CPPI_OWNERSHIP_BIT         BIT(29)
 199 #define EMAC_CPPI_EOQ_BIT               BIT(28)
 200 #define EMAC_CPPI_TEARDOWN_COMPLETE_BIT BIT(27)
 201 #define EMAC_CPPI_PASS_CRC_BIT          BIT(26)
 202 #define EMAC_RX_BD_BUF_SIZE             (0xFFFF)
 203 #define EMAC_BD_LENGTH_FOR_CACHE        (16) /* only CPPI bytes */
 204 #define EMAC_RX_BD_PKT_LENGTH_MASK      (0xFFFF)
 205 
 206 /* Max hardware defines */
 207 #define EMAC_MAX_TXRX_CHANNELS           (8)  /* Max hardware channels */
 208 #define EMAC_DEF_MAX_MULTICAST_ADDRESSES (64) /* Max mcast addr's */
 209 
 210 /* EMAC Peripheral Device Register Memory Layout structure */
 211 #define EMAC_MACINVECTOR        0x90
 212 
 213 #define EMAC_DM646X_MACEOIVECTOR        0x94
 214 
 215 #define EMAC_MACINTSTATRAW      0xB0
 216 #define EMAC_MACINTSTATMASKED   0xB4
 217 #define EMAC_MACINTMASKSET      0xB8
 218 #define EMAC_MACINTMASKCLEAR    0xBC
 219 
 220 #define EMAC_RXMBPENABLE        0x100
 221 #define EMAC_RXUNICASTSET       0x104
 222 #define EMAC_RXUNICASTCLEAR     0x108
 223 #define EMAC_RXMAXLEN           0x10C
 224 #define EMAC_RXBUFFEROFFSET     0x110
 225 #define EMAC_RXFILTERLOWTHRESH  0x114
 226 
 227 #define EMAC_MACCONTROL         0x160
 228 #define EMAC_MACSTATUS          0x164
 229 #define EMAC_EMCONTROL          0x168
 230 #define EMAC_FIFOCONTROL        0x16C
 231 #define EMAC_MACCONFIG          0x170
 232 #define EMAC_SOFTRESET          0x174
 233 #define EMAC_MACSRCADDRLO       0x1D0
 234 #define EMAC_MACSRCADDRHI       0x1D4
 235 #define EMAC_MACHASH1           0x1D8
 236 #define EMAC_MACHASH2           0x1DC
 237 #define EMAC_MACADDRLO          0x500
 238 #define EMAC_MACADDRHI          0x504
 239 #define EMAC_MACINDEX           0x508
 240 
 241 /* EMAC statistics registers */
 242 #define EMAC_RXGOODFRAMES       0x200
 243 #define EMAC_RXBCASTFRAMES      0x204
 244 #define EMAC_RXMCASTFRAMES      0x208
 245 #define EMAC_RXPAUSEFRAMES      0x20C
 246 #define EMAC_RXCRCERRORS        0x210
 247 #define EMAC_RXALIGNCODEERRORS  0x214
 248 #define EMAC_RXOVERSIZED        0x218
 249 #define EMAC_RXJABBER           0x21C
 250 #define EMAC_RXUNDERSIZED       0x220
 251 #define EMAC_RXFRAGMENTS        0x224
 252 #define EMAC_RXFILTERED         0x228
 253 #define EMAC_RXQOSFILTERED      0x22C
 254 #define EMAC_RXOCTETS           0x230
 255 #define EMAC_TXGOODFRAMES       0x234
 256 #define EMAC_TXBCASTFRAMES      0x238
 257 #define EMAC_TXMCASTFRAMES      0x23C
 258 #define EMAC_TXPAUSEFRAMES      0x240
 259 #define EMAC_TXDEFERRED         0x244
 260 #define EMAC_TXCOLLISION        0x248
 261 #define EMAC_TXSINGLECOLL       0x24C
 262 #define EMAC_TXMULTICOLL        0x250
 263 #define EMAC_TXEXCESSIVECOLL    0x254
 264 #define EMAC_TXLATECOLL         0x258
 265 #define EMAC_TXUNDERRUN         0x25C
 266 #define EMAC_TXCARRIERSENSE     0x260
 267 #define EMAC_TXOCTETS           0x264
 268 #define EMAC_NETOCTETS          0x280
 269 #define EMAC_RXSOFOVERRUNS      0x284
 270 #define EMAC_RXMOFOVERRUNS      0x288
 271 #define EMAC_RXDMAOVERRUNS      0x28C
 272 
 273 /* EMAC DM644x control registers */
 274 #define EMAC_CTRL_EWCTL         (0x4)
 275 #define EMAC_CTRL_EWINTTCNT     (0x8)
 276 
 277 /* EMAC DM644x control module masks */
 278 #define EMAC_DM644X_EWINTCNT_MASK       0x1FFFF
 279 #define EMAC_DM644X_INTMIN_INTVL        0x1
 280 #define EMAC_DM644X_INTMAX_INTVL        (EMAC_DM644X_EWINTCNT_MASK)
 281 
 282 /* EMAC DM646X control module registers */
 283 #define EMAC_DM646X_CMINTCTRL   0x0C
 284 #define EMAC_DM646X_CMRXINTEN   0x14
 285 #define EMAC_DM646X_CMTXINTEN   0x18
 286 #define EMAC_DM646X_CMRXINTMAX  0x70
 287 #define EMAC_DM646X_CMTXINTMAX  0x74
 288 
 289 /* EMAC DM646X control module masks */
 290 #define EMAC_DM646X_INTPACEEN           (0x3 << 16)
 291 #define EMAC_DM646X_INTPRESCALE_MASK    (0x7FF << 0)
 292 #define EMAC_DM646X_CMINTMAX_CNT        63
 293 #define EMAC_DM646X_CMINTMIN_CNT        2
 294 #define EMAC_DM646X_CMINTMAX_INTVL      (1000 / EMAC_DM646X_CMINTMIN_CNT)
 295 #define EMAC_DM646X_CMINTMIN_INTVL      ((1000 / EMAC_DM646X_CMINTMAX_CNT) + 1)
 296 
 297 
 298 /* EMAC EOI codes for C0 */
 299 #define EMAC_DM646X_MAC_EOI_C0_RXEN     (0x01)
 300 #define EMAC_DM646X_MAC_EOI_C0_TXEN     (0x02)
 301 
 302 /* EMAC Stats Clear Mask */
 303 #define EMAC_STATS_CLR_MASK    (0xFFFFFFFF)
 304 
 305 /* emac_priv: EMAC private data structure
 306  *
 307  * EMAC adapter private data structure
 308  */
 309 struct emac_priv {
 310         u32 msg_enable;
 311         struct net_device *ndev;
 312         struct platform_device *pdev;
 313         struct napi_struct napi;
 314         char mac_addr[6];
 315         void __iomem *remap_addr;
 316         u32 emac_base_phys;
 317         void __iomem *emac_base;
 318         void __iomem *ctrl_base;
 319         struct cpdma_ctlr *dma;
 320         struct cpdma_chan *txchan;
 321         struct cpdma_chan *rxchan;
 322         u32 link; /* 1=link on, 0=link off */
 323         u32 speed; /* 0=Auto Neg, 1=No PHY, 10,100, 1000 - mbps */
 324         u32 duplex; /* Link duplex: 0=Half, 1=Full */
 325         u32 rx_buf_size;
 326         u32 isr_count;
 327         u32 coal_intvl;
 328         u32 bus_freq_mhz;
 329         u8 rmii_en;
 330         u8 version;
 331         u32 mac_hash1;
 332         u32 mac_hash2;
 333         u32 multicast_hash_cnt[EMAC_NUM_MULTICAST_BITS];
 334         u32 rx_addr_type;
 335         const char *phy_id;
 336         struct device_node *phy_node;
 337         spinlock_t lock;
 338         /*platform specific members*/
 339         void (*int_enable) (void);
 340         void (*int_disable) (void);
 341 };
 342 
 343 /* EMAC TX Host Error description strings */
 344 static char *emac_txhost_errcodes[16] = {
 345         "No error", "SOP error", "Ownership bit not set in SOP buffer",
 346         "Zero Next Buffer Descriptor Pointer Without EOP",
 347         "Zero Buffer Pointer", "Zero Buffer Length", "Packet Length Error",
 348         "Reserved", "Reserved", "Reserved", "Reserved", "Reserved",
 349         "Reserved", "Reserved", "Reserved", "Reserved"
 350 };
 351 
 352 /* EMAC RX Host Error description strings */
 353 static char *emac_rxhost_errcodes[16] = {
 354         "No error", "Reserved", "Ownership bit not set in input buffer",
 355         "Reserved", "Zero Buffer Pointer", "Reserved", "Reserved",
 356         "Reserved", "Reserved", "Reserved", "Reserved", "Reserved",
 357         "Reserved", "Reserved", "Reserved", "Reserved"
 358 };
 359 
 360 /* Helper macros */
 361 #define emac_read(reg)            ioread32(priv->emac_base + (reg))
 362 #define emac_write(reg, val)      iowrite32(val, priv->emac_base + (reg))
 363 
 364 #define emac_ctrl_read(reg)       ioread32((priv->ctrl_base + (reg)))
 365 #define emac_ctrl_write(reg, val) iowrite32(val, (priv->ctrl_base + (reg)))
 366 
 367 /**
 368  * emac_get_drvinfo - Get EMAC driver information
 369  * @ndev: The DaVinci EMAC network adapter
 370  * @info: ethtool info structure containing name and version
 371  *
 372  * Returns EMAC driver information (name and version)
 373  *
 374  */
 375 static void emac_get_drvinfo(struct net_device *ndev,
 376                              struct ethtool_drvinfo *info)
 377 {
 378         strlcpy(info->driver, emac_version_string, sizeof(info->driver));
 379         strlcpy(info->version, EMAC_MODULE_VERSION, sizeof(info->version));
 380 }
 381 
 382 /**
 383  * emac_get_coalesce - Get interrupt coalesce settings for this device
 384  * @ndev : The DaVinci EMAC network adapter
 385  * @coal : ethtool coalesce settings structure
 386  *
 387  * Fetch the current interrupt coalesce settings
 388  *
 389  */
 390 static int emac_get_coalesce(struct net_device *ndev,
 391                                 struct ethtool_coalesce *coal)
 392 {
 393         struct emac_priv *priv = netdev_priv(ndev);
 394 
 395         coal->rx_coalesce_usecs = priv->coal_intvl;
 396         return 0;
 397 
 398 }
 399 
 400 /**
 401  * emac_set_coalesce - Set interrupt coalesce settings for this device
 402  * @ndev : The DaVinci EMAC network adapter
 403  * @coal : ethtool coalesce settings structure
 404  *
 405  * Set interrupt coalesce parameters
 406  *
 407  */
 408 static int emac_set_coalesce(struct net_device *ndev,
 409                                 struct ethtool_coalesce *coal)
 410 {
 411         struct emac_priv *priv = netdev_priv(ndev);
 412         u32 int_ctrl, num_interrupts = 0;
 413         u32 prescale = 0, addnl_dvdr = 1, coal_intvl = 0;
 414 
 415         if (!coal->rx_coalesce_usecs)
 416                 return -EINVAL;
 417 
 418         coal_intvl = coal->rx_coalesce_usecs;
 419 
 420         switch (priv->version) {
 421         case EMAC_VERSION_2:
 422                 int_ctrl =  emac_ctrl_read(EMAC_DM646X_CMINTCTRL);
 423                 prescale = priv->bus_freq_mhz * 4;
 424 
 425                 if (coal_intvl < EMAC_DM646X_CMINTMIN_INTVL)
 426                         coal_intvl = EMAC_DM646X_CMINTMIN_INTVL;
 427 
 428                 if (coal_intvl > EMAC_DM646X_CMINTMAX_INTVL) {
 429                         /*
 430                          * Interrupt pacer works with 4us Pulse, we can
 431                          * throttle further by dilating the 4us pulse.
 432                          */
 433                         addnl_dvdr = EMAC_DM646X_INTPRESCALE_MASK / prescale;
 434 
 435                         if (addnl_dvdr > 1) {
 436                                 prescale *= addnl_dvdr;
 437                                 if (coal_intvl > (EMAC_DM646X_CMINTMAX_INTVL
 438                                                         * addnl_dvdr))
 439                                         coal_intvl = (EMAC_DM646X_CMINTMAX_INTVL
 440                                                         * addnl_dvdr);
 441                         } else {
 442                                 addnl_dvdr = 1;
 443                                 coal_intvl = EMAC_DM646X_CMINTMAX_INTVL;
 444                         }
 445                 }
 446 
 447                 num_interrupts = (1000 * addnl_dvdr) / coal_intvl;
 448 
 449                 int_ctrl |= EMAC_DM646X_INTPACEEN;
 450                 int_ctrl &= (~EMAC_DM646X_INTPRESCALE_MASK);
 451                 int_ctrl |= (prescale & EMAC_DM646X_INTPRESCALE_MASK);
 452                 emac_ctrl_write(EMAC_DM646X_CMINTCTRL, int_ctrl);
 453 
 454                 emac_ctrl_write(EMAC_DM646X_CMRXINTMAX, num_interrupts);
 455                 emac_ctrl_write(EMAC_DM646X_CMTXINTMAX, num_interrupts);
 456 
 457                 break;
 458         default:
 459                 int_ctrl = emac_ctrl_read(EMAC_CTRL_EWINTTCNT);
 460                 int_ctrl &= (~EMAC_DM644X_EWINTCNT_MASK);
 461                 prescale = coal_intvl * priv->bus_freq_mhz;
 462                 if (prescale > EMAC_DM644X_EWINTCNT_MASK) {
 463                         prescale = EMAC_DM644X_EWINTCNT_MASK;
 464                         coal_intvl = prescale / priv->bus_freq_mhz;
 465                 }
 466                 emac_ctrl_write(EMAC_CTRL_EWINTTCNT, (int_ctrl | prescale));
 467 
 468                 break;
 469         }
 470 
 471         printk(KERN_INFO"Set coalesce to %d usecs.\n", coal_intvl);
 472         priv->coal_intvl = coal_intvl;
 473 
 474         return 0;
 475 
 476 }
 477 
 478 
 479 /* ethtool_ops: DaVinci EMAC Ethtool structure
 480  *
 481  * Ethtool support for EMAC adapter
 482  */
 483 static const struct ethtool_ops ethtool_ops = {
 484         .get_drvinfo = emac_get_drvinfo,
 485         .get_link = ethtool_op_get_link,
 486         .get_coalesce = emac_get_coalesce,
 487         .set_coalesce =  emac_set_coalesce,
 488         .get_ts_info = ethtool_op_get_ts_info,
 489         .get_link_ksettings = phy_ethtool_get_link_ksettings,
 490         .set_link_ksettings = phy_ethtool_set_link_ksettings,
 491 };
 492 
 493 /**
 494  * emac_update_phystatus - Update Phy status
 495  * @priv: The DaVinci EMAC private adapter structure
 496  *
 497  * Updates phy status and takes action for network queue if required
 498  * based upon link status
 499  *
 500  */
 501 static void emac_update_phystatus(struct emac_priv *priv)
 502 {
 503         u32 mac_control;
 504         u32 new_duplex;
 505         u32 cur_duplex;
 506         struct net_device *ndev = priv->ndev;
 507 
 508         mac_control = emac_read(EMAC_MACCONTROL);
 509         cur_duplex = (mac_control & EMAC_MACCONTROL_FULLDUPLEXEN) ?
 510                         DUPLEX_FULL : DUPLEX_HALF;
 511         if (ndev->phydev)
 512                 new_duplex = ndev->phydev->duplex;
 513         else
 514                 new_duplex = DUPLEX_FULL;
 515 
 516         /* We get called only if link has changed (speed/duplex/status) */
 517         if ((priv->link) && (new_duplex != cur_duplex)) {
 518                 priv->duplex = new_duplex;
 519                 if (DUPLEX_FULL == priv->duplex)
 520                         mac_control |= (EMAC_MACCONTROL_FULLDUPLEXEN);
 521                 else
 522                         mac_control &= ~(EMAC_MACCONTROL_FULLDUPLEXEN);
 523         }
 524 
 525         if (priv->speed == SPEED_1000 && (priv->version == EMAC_VERSION_2)) {
 526                 mac_control = emac_read(EMAC_MACCONTROL);
 527                 mac_control |= (EMAC_DM646X_MACCONTORL_GIG |
 528                                 EMAC_DM646X_MACCONTORL_GIGFORCE);
 529         } else {
 530                 /* Clear the GIG bit and GIGFORCE bit */
 531                 mac_control &= ~(EMAC_DM646X_MACCONTORL_GIGFORCE |
 532                                         EMAC_DM646X_MACCONTORL_GIG);
 533 
 534                 if (priv->rmii_en && (priv->speed == SPEED_100))
 535                         mac_control |= EMAC_MACCONTROL_RMIISPEED_MASK;
 536                 else
 537                         mac_control &= ~EMAC_MACCONTROL_RMIISPEED_MASK;
 538         }
 539 
 540         /* Update mac_control if changed */
 541         emac_write(EMAC_MACCONTROL, mac_control);
 542 
 543         if (priv->link) {
 544                 /* link ON */
 545                 if (!netif_carrier_ok(ndev))
 546                         netif_carrier_on(ndev);
 547         /* reactivate the transmit queue if it is stopped */
 548                 if (netif_running(ndev) && netif_queue_stopped(ndev))
 549                         netif_wake_queue(ndev);
 550         } else {
 551                 /* link OFF */
 552                 if (netif_carrier_ok(ndev))
 553                         netif_carrier_off(ndev);
 554                 if (!netif_queue_stopped(ndev))
 555                         netif_stop_queue(ndev);
 556         }
 557 }
 558 
 559 /**
 560  * hash_get - Calculate hash value from mac address
 561  * @addr: mac address to delete from hash table
 562  *
 563  * Calculates hash value from mac address
 564  *
 565  */
 566 static u32 hash_get(u8 *addr)
 567 {
 568         u32 hash;
 569         u8 tmpval;
 570         int cnt;
 571         hash = 0;
 572 
 573         for (cnt = 0; cnt < 2; cnt++) {
 574                 tmpval = *addr++;
 575                 hash ^= (tmpval >> 2) ^ (tmpval << 4);
 576                 tmpval = *addr++;
 577                 hash ^= (tmpval >> 4) ^ (tmpval << 2);
 578                 tmpval = *addr++;
 579                 hash ^= (tmpval >> 6) ^ (tmpval);
 580         }
 581 
 582         return hash & 0x3F;
 583 }
 584 
 585 /**
 586  * emac_hash_add - Hash function to add mac addr from hash table
 587  * @priv: The DaVinci EMAC private adapter structure
 588  * @mac_addr: mac address to delete from hash table
 589  *
 590  * Adds mac address to the internal hash table
 591  *
 592  */
 593 static int emac_hash_add(struct emac_priv *priv, u8 *mac_addr)
 594 {
 595         struct device *emac_dev = &priv->ndev->dev;
 596         u32 rc = 0;
 597         u32 hash_bit;
 598         u32 hash_value = hash_get(mac_addr);
 599 
 600         if (hash_value >= EMAC_NUM_MULTICAST_BITS) {
 601                 if (netif_msg_drv(priv)) {
 602                         dev_err(emac_dev, "DaVinci EMAC: emac_hash_add(): Invalid "\
 603                                 "Hash %08x, should not be greater than %08x",
 604                                 hash_value, (EMAC_NUM_MULTICAST_BITS - 1));
 605                 }
 606                 return -1;
 607         }
 608 
 609         /* set the hash bit only if not previously set */
 610         if (priv->multicast_hash_cnt[hash_value] == 0) {
 611                 rc = 1; /* hash value changed */
 612                 if (hash_value < 32) {
 613                         hash_bit = BIT(hash_value);
 614                         priv->mac_hash1 |= hash_bit;
 615                 } else {
 616                         hash_bit = BIT((hash_value - 32));
 617                         priv->mac_hash2 |= hash_bit;
 618                 }
 619         }
 620 
 621         /* incr counter for num of mcast addr's mapped to "this" hash bit */
 622         ++priv->multicast_hash_cnt[hash_value];
 623 
 624         return rc;
 625 }
 626 
 627 /**
 628  * emac_hash_del - Hash function to delete mac addr from hash table
 629  * @priv: The DaVinci EMAC private adapter structure
 630  * @mac_addr: mac address to delete from hash table
 631  *
 632  * Removes mac address from the internal hash table
 633  *
 634  */
 635 static int emac_hash_del(struct emac_priv *priv, u8 *mac_addr)
 636 {
 637         u32 hash_value;
 638         u32 hash_bit;
 639 
 640         hash_value = hash_get(mac_addr);
 641         if (priv->multicast_hash_cnt[hash_value] > 0) {
 642                 /* dec cntr for num of mcast addr's mapped to this hash bit */
 643                 --priv->multicast_hash_cnt[hash_value];
 644         }
 645 
 646         /* if counter still > 0, at least one multicast address refers
 647          * to this hash bit. so return 0 */
 648         if (priv->multicast_hash_cnt[hash_value] > 0)
 649                 return 0;
 650 
 651         if (hash_value < 32) {
 652                 hash_bit = BIT(hash_value);
 653                 priv->mac_hash1 &= ~hash_bit;
 654         } else {
 655                 hash_bit = BIT((hash_value - 32));
 656                 priv->mac_hash2 &= ~hash_bit;
 657         }
 658 
 659         /* return 1 to indicate change in mac_hash registers reqd */
 660         return 1;
 661 }
 662 
 663 /* EMAC multicast operation */
 664 #define EMAC_MULTICAST_ADD      0
 665 #define EMAC_MULTICAST_DEL      1
 666 #define EMAC_ALL_MULTI_SET      2
 667 #define EMAC_ALL_MULTI_CLR      3
 668 
 669 /**
 670  * emac_add_mcast - Set multicast address in the EMAC adapter (Internal)
 671  * @priv: The DaVinci EMAC private adapter structure
 672  * @action: multicast operation to perform
 673  * mac_addr: mac address to set
 674  *
 675  * Set multicast addresses in EMAC adapter - internal function
 676  *
 677  */
 678 static void emac_add_mcast(struct emac_priv *priv, u32 action, u8 *mac_addr)
 679 {
 680         struct device *emac_dev = &priv->ndev->dev;
 681         int update = -1;
 682 
 683         switch (action) {
 684         case EMAC_MULTICAST_ADD:
 685                 update = emac_hash_add(priv, mac_addr);
 686                 break;
 687         case EMAC_MULTICAST_DEL:
 688                 update = emac_hash_del(priv, mac_addr);
 689                 break;
 690         case EMAC_ALL_MULTI_SET:
 691                 update = 1;
 692                 priv->mac_hash1 = EMAC_ALL_MULTI_REG_VALUE;
 693                 priv->mac_hash2 = EMAC_ALL_MULTI_REG_VALUE;
 694                 break;
 695         case EMAC_ALL_MULTI_CLR:
 696                 update = 1;
 697                 priv->mac_hash1 = 0;
 698                 priv->mac_hash2 = 0;
 699                 memset(&(priv->multicast_hash_cnt[0]), 0,
 700                 sizeof(priv->multicast_hash_cnt[0]) *
 701                        EMAC_NUM_MULTICAST_BITS);
 702                 break;
 703         default:
 704                 if (netif_msg_drv(priv))
 705                         dev_err(emac_dev, "DaVinci EMAC: add_mcast"\
 706                                 ": bad operation %d", action);
 707                 break;
 708         }
 709 
 710         /* write to the hardware only if the register status chances */
 711         if (update > 0) {
 712                 emac_write(EMAC_MACHASH1, priv->mac_hash1);
 713                 emac_write(EMAC_MACHASH2, priv->mac_hash2);
 714         }
 715 }
 716 
 717 /**
 718  * emac_dev_mcast_set - Set multicast address in the EMAC adapter
 719  * @ndev: The DaVinci EMAC network adapter
 720  *
 721  * Set multicast addresses in EMAC adapter
 722  *
 723  */
 724 static void emac_dev_mcast_set(struct net_device *ndev)
 725 {
 726         u32 mbp_enable;
 727         struct emac_priv *priv = netdev_priv(ndev);
 728 
 729         mbp_enable = emac_read(EMAC_RXMBPENABLE);
 730         if (ndev->flags & IFF_PROMISC) {
 731                 mbp_enable &= (~EMAC_MBP_PROMISCCH(EMAC_DEF_PROM_CH));
 732                 mbp_enable |= (EMAC_MBP_RXPROMISC);
 733         } else {
 734                 mbp_enable = (mbp_enable & ~EMAC_MBP_RXPROMISC);
 735                 if ((ndev->flags & IFF_ALLMULTI) ||
 736                     netdev_mc_count(ndev) > EMAC_DEF_MAX_MULTICAST_ADDRESSES) {
 737                         mbp_enable = (mbp_enable | EMAC_MBP_RXMCAST);
 738                         emac_add_mcast(priv, EMAC_ALL_MULTI_SET, NULL);
 739                 } else if (!netdev_mc_empty(ndev)) {
 740                         struct netdev_hw_addr *ha;
 741 
 742                         mbp_enable = (mbp_enable | EMAC_MBP_RXMCAST);
 743                         emac_add_mcast(priv, EMAC_ALL_MULTI_CLR, NULL);
 744                         /* program multicast address list into EMAC hardware */
 745                         netdev_for_each_mc_addr(ha, ndev) {
 746                                 emac_add_mcast(priv, EMAC_MULTICAST_ADD,
 747                                                (u8 *) ha->addr);
 748                         }
 749                 } else {
 750                         mbp_enable = (mbp_enable & ~EMAC_MBP_RXMCAST);
 751                         emac_add_mcast(priv, EMAC_ALL_MULTI_CLR, NULL);
 752                 }
 753         }
 754         /* Set mbp config register */
 755         emac_write(EMAC_RXMBPENABLE, mbp_enable);
 756 }
 757 
 758 /*************************************************************************
 759  *  EMAC Hardware manipulation
 760  *************************************************************************/
 761 
 762 /**
 763  * emac_int_disable - Disable EMAC module interrupt (from adapter)
 764  * @priv: The DaVinci EMAC private adapter structure
 765  *
 766  * Disable EMAC interrupt on the adapter
 767  *
 768  */
 769 static void emac_int_disable(struct emac_priv *priv)
 770 {
 771         if (priv->version == EMAC_VERSION_2) {
 772                 unsigned long flags;
 773 
 774                 local_irq_save(flags);
 775 
 776                 /* Program C0_Int_En to zero to turn off
 777                 * interrupts to the CPU */
 778                 emac_ctrl_write(EMAC_DM646X_CMRXINTEN, 0x0);
 779                 emac_ctrl_write(EMAC_DM646X_CMTXINTEN, 0x0);
 780                 /* NOTE: Rx Threshold and Misc interrupts are not disabled */
 781                 if (priv->int_disable)
 782                         priv->int_disable();
 783 
 784                 /* NOTE: Rx Threshold and Misc interrupts are not enabled */
 785 
 786                 /* ack rxen only then a new pulse will be generated */
 787                 emac_write(EMAC_DM646X_MACEOIVECTOR,
 788                         EMAC_DM646X_MAC_EOI_C0_RXEN);
 789 
 790                 /* ack txen- only then a new pulse will be generated */
 791                 emac_write(EMAC_DM646X_MACEOIVECTOR,
 792                         EMAC_DM646X_MAC_EOI_C0_TXEN);
 793 
 794                 local_irq_restore(flags);
 795 
 796         } else {
 797                 /* Set DM644x control registers for interrupt control */
 798                 emac_ctrl_write(EMAC_CTRL_EWCTL, 0x0);
 799         }
 800 }
 801 
 802 /**
 803  * emac_int_enable - Enable EMAC module interrupt (from adapter)
 804  * @priv: The DaVinci EMAC private adapter structure
 805  *
 806  * Enable EMAC interrupt on the adapter
 807  *
 808  */
 809 static void emac_int_enable(struct emac_priv *priv)
 810 {
 811         if (priv->version == EMAC_VERSION_2) {
 812                 if (priv->int_enable)
 813                         priv->int_enable();
 814 
 815                 emac_ctrl_write(EMAC_DM646X_CMRXINTEN, 0xff);
 816                 emac_ctrl_write(EMAC_DM646X_CMTXINTEN, 0xff);
 817 
 818                 /* In addition to turning on interrupt Enable, we need
 819                  * ack by writing appropriate values to the EOI
 820                  * register */
 821 
 822                 /* NOTE: Rx Threshold and Misc interrupts are not enabled */
 823         } else {
 824                 /* Set DM644x control registers for interrupt control */
 825                 emac_ctrl_write(EMAC_CTRL_EWCTL, 0x1);
 826         }
 827 }
 828 
 829 /**
 830  * emac_irq - EMAC interrupt handler
 831  * @irq: interrupt number
 832  * @dev_id: EMAC network adapter data structure ptr
 833  *
 834  * EMAC Interrupt handler - we only schedule NAPI and not process any packets
 835  * here. EVen the interrupt status is checked (TX/RX/Err) in NAPI poll function
 836  *
 837  * Returns interrupt handled condition
 838  */
 839 static irqreturn_t emac_irq(int irq, void *dev_id)
 840 {
 841         struct net_device *ndev = (struct net_device *)dev_id;
 842         struct emac_priv *priv = netdev_priv(ndev);
 843 
 844         ++priv->isr_count;
 845         if (likely(netif_running(priv->ndev))) {
 846                 emac_int_disable(priv);
 847                 napi_schedule(&priv->napi);
 848         } else {
 849                 /* we are closing down, so dont process anything */
 850         }
 851         return IRQ_HANDLED;
 852 }
 853 
 854 static struct sk_buff *emac_rx_alloc(struct emac_priv *priv)
 855 {
 856         struct sk_buff *skb = netdev_alloc_skb(priv->ndev, priv->rx_buf_size);
 857         if (WARN_ON(!skb))
 858                 return NULL;
 859         skb_reserve(skb, NET_IP_ALIGN);
 860         return skb;
 861 }
 862 
 863 static void emac_rx_handler(void *token, int len, int status)
 864 {
 865         struct sk_buff          *skb = token;
 866         struct net_device       *ndev = skb->dev;
 867         struct emac_priv        *priv = netdev_priv(ndev);
 868         struct device           *emac_dev = &ndev->dev;
 869         int                     ret;
 870 
 871         /* free and bail if we are shutting down */
 872         if (unlikely(!netif_running(ndev))) {
 873                 dev_kfree_skb_any(skb);
 874                 return;
 875         }
 876 
 877         /* recycle on receive error */
 878         if (status < 0) {
 879                 ndev->stats.rx_errors++;
 880                 goto recycle;
 881         }
 882 
 883         /* feed received packet up the stack */
 884         skb_put(skb, len);
 885         skb->protocol = eth_type_trans(skb, ndev);
 886         netif_receive_skb(skb);
 887         ndev->stats.rx_bytes += len;
 888         ndev->stats.rx_packets++;
 889 
 890         /* alloc a new packet for receive */
 891         skb = emac_rx_alloc(priv);
 892         if (!skb) {
 893                 if (netif_msg_rx_err(priv) && net_ratelimit())
 894                         dev_err(emac_dev, "failed rx buffer alloc\n");
 895                 return;
 896         }
 897 
 898 recycle:
 899         ret = cpdma_chan_submit(priv->rxchan, skb, skb->data,
 900                         skb_tailroom(skb), 0);
 901 
 902         WARN_ON(ret == -ENOMEM);
 903         if (unlikely(ret < 0))
 904                 dev_kfree_skb_any(skb);
 905 }
 906 
 907 static void emac_tx_handler(void *token, int len, int status)
 908 {
 909         struct sk_buff          *skb = token;
 910         struct net_device       *ndev = skb->dev;
 911 
 912         /* Check whether the queue is stopped due to stalled tx dma, if the
 913          * queue is stopped then start the queue as we have free desc for tx
 914          */
 915         if (unlikely(netif_queue_stopped(ndev)))
 916                 netif_wake_queue(ndev);
 917         ndev->stats.tx_packets++;
 918         ndev->stats.tx_bytes += len;
 919         dev_kfree_skb_any(skb);
 920 }
 921 
 922 /**
 923  * emac_dev_xmit - EMAC Transmit function
 924  * @skb: SKB pointer
 925  * @ndev: The DaVinci EMAC network adapter
 926  *
 927  * Called by the system to transmit a packet  - we queue the packet in
 928  * EMAC hardware transmit queue
 929  *
 930  * Returns success(NETDEV_TX_OK) or error code (typically out of desc's)
 931  */
 932 static int emac_dev_xmit(struct sk_buff *skb, struct net_device *ndev)
 933 {
 934         struct device *emac_dev = &ndev->dev;
 935         int ret_code;
 936         struct emac_priv *priv = netdev_priv(ndev);
 937 
 938         /* If no link, return */
 939         if (unlikely(!priv->link)) {
 940                 if (netif_msg_tx_err(priv) && net_ratelimit())
 941                         dev_err(emac_dev, "DaVinci EMAC: No link to transmit");
 942                 goto fail_tx;
 943         }
 944 
 945         ret_code = skb_padto(skb, EMAC_DEF_MIN_ETHPKTSIZE);
 946         if (unlikely(ret_code < 0)) {
 947                 if (netif_msg_tx_err(priv) && net_ratelimit())
 948                         dev_err(emac_dev, "DaVinci EMAC: packet pad failed");
 949                 goto fail_tx;
 950         }
 951 
 952         skb_tx_timestamp(skb);
 953 
 954         ret_code = cpdma_chan_submit(priv->txchan, skb, skb->data, skb->len,
 955                                      0);
 956         if (unlikely(ret_code != 0)) {
 957                 if (netif_msg_tx_err(priv) && net_ratelimit())
 958                         dev_err(emac_dev, "DaVinci EMAC: desc submit failed");
 959                 goto fail_tx;
 960         }
 961 
 962         /* If there is no more tx desc left free then we need to
 963          * tell the kernel to stop sending us tx frames.
 964          */
 965         if (unlikely(!cpdma_check_free_tx_desc(priv->txchan)))
 966                 netif_stop_queue(ndev);
 967 
 968         return NETDEV_TX_OK;
 969 
 970 fail_tx:
 971         ndev->stats.tx_dropped++;
 972         netif_stop_queue(ndev);
 973         return NETDEV_TX_BUSY;
 974 }
 975 
 976 /**
 977  * emac_dev_tx_timeout - EMAC Transmit timeout function
 978  * @ndev: The DaVinci EMAC network adapter
 979  *
 980  * Called when system detects that a skb timeout period has expired
 981  * potentially due to a fault in the adapter in not being able to send
 982  * it out on the wire. We teardown the TX channel assuming a hardware
 983  * error and re-initialize the TX channel for hardware operation
 984  *
 985  */
 986 static void emac_dev_tx_timeout(struct net_device *ndev)
 987 {
 988         struct emac_priv *priv = netdev_priv(ndev);
 989         struct device *emac_dev = &ndev->dev;
 990 
 991         if (netif_msg_tx_err(priv))
 992                 dev_err(emac_dev, "DaVinci EMAC: xmit timeout, restarting TX");
 993 
 994         ndev->stats.tx_errors++;
 995         emac_int_disable(priv);
 996         cpdma_chan_stop(priv->txchan);
 997         cpdma_chan_start(priv->txchan);
 998         emac_int_enable(priv);
 999 }
1000 
1001 /**
1002  * emac_set_type0addr - Set EMAC Type0 mac address
1003  * @priv: The DaVinci EMAC private adapter structure
1004  * @ch: RX channel number
1005  * @mac_addr: MAC address to set in device
1006  *
1007  * Called internally to set Type0 mac address of the adapter (Device)
1008  *
1009  * Returns success (0) or appropriate error code (none as of now)
1010  */
1011 static void emac_set_type0addr(struct emac_priv *priv, u32 ch, char *mac_addr)
1012 {
1013         u32 val;
1014         val = ((mac_addr[5] << 8) | (mac_addr[4]));
1015         emac_write(EMAC_MACSRCADDRLO, val);
1016 
1017         val = ((mac_addr[3] << 24) | (mac_addr[2] << 16) | \
1018                (mac_addr[1] << 8) | (mac_addr[0]));
1019         emac_write(EMAC_MACSRCADDRHI, val);
1020         val = emac_read(EMAC_RXUNICASTSET);
1021         val |= BIT(ch);
1022         emac_write(EMAC_RXUNICASTSET, val);
1023         val = emac_read(EMAC_RXUNICASTCLEAR);
1024         val &= ~BIT(ch);
1025         emac_write(EMAC_RXUNICASTCLEAR, val);
1026 }
1027 
1028 /**
1029  * emac_set_type1addr - Set EMAC Type1 mac address
1030  * @priv: The DaVinci EMAC private adapter structure
1031  * @ch: RX channel number
1032  * @mac_addr: MAC address to set in device
1033  *
1034  * Called internally to set Type1 mac address of the adapter (Device)
1035  *
1036  * Returns success (0) or appropriate error code (none as of now)
1037  */
1038 static void emac_set_type1addr(struct emac_priv *priv, u32 ch, char *mac_addr)
1039 {
1040         u32 val;
1041         emac_write(EMAC_MACINDEX, ch);
1042         val = ((mac_addr[5] << 8) | mac_addr[4]);
1043         emac_write(EMAC_MACADDRLO, val);
1044         val = ((mac_addr[3] << 24) | (mac_addr[2] << 16) | \
1045                (mac_addr[1] << 8) | (mac_addr[0]));
1046         emac_write(EMAC_MACADDRHI, val);
1047         emac_set_type0addr(priv, ch, mac_addr);
1048 }
1049 
1050 /**
1051  * emac_set_type2addr - Set EMAC Type2 mac address
1052  * @priv: The DaVinci EMAC private adapter structure
1053  * @ch: RX channel number
1054  * @mac_addr: MAC address to set in device
1055  * @index: index into RX address entries
1056  * @match: match parameter for RX address matching logic
1057  *
1058  * Called internally to set Type2 mac address of the adapter (Device)
1059  *
1060  * Returns success (0) or appropriate error code (none as of now)
1061  */
1062 static void emac_set_type2addr(struct emac_priv *priv, u32 ch,
1063                                char *mac_addr, int index, int match)
1064 {
1065         u32 val;
1066         emac_write(EMAC_MACINDEX, index);
1067         val = ((mac_addr[3] << 24) | (mac_addr[2] << 16) | \
1068                (mac_addr[1] << 8) | (mac_addr[0]));
1069         emac_write(EMAC_MACADDRHI, val);
1070         val = ((mac_addr[5] << 8) | mac_addr[4] | ((ch & 0x7) << 16) | \
1071                (match << 19) | BIT(20));
1072         emac_write(EMAC_MACADDRLO, val);
1073         emac_set_type0addr(priv, ch, mac_addr);
1074 }
1075 
1076 /**
1077  * emac_setmac - Set mac address in the adapter (internal function)
1078  * @priv: The DaVinci EMAC private adapter structure
1079  * @ch: RX channel number
1080  * @mac_addr: MAC address to set in device
1081  *
1082  * Called internally to set the mac address of the adapter (Device)
1083  *
1084  * Returns success (0) or appropriate error code (none as of now)
1085  */
1086 static void emac_setmac(struct emac_priv *priv, u32 ch, char *mac_addr)
1087 {
1088         struct device *emac_dev = &priv->ndev->dev;
1089 
1090         if (priv->rx_addr_type == 0) {
1091                 emac_set_type0addr(priv, ch, mac_addr);
1092         } else if (priv->rx_addr_type == 1) {
1093                 u32 cnt;
1094                 for (cnt = 0; cnt < EMAC_MAX_TXRX_CHANNELS; cnt++)
1095                         emac_set_type1addr(priv, ch, mac_addr);
1096         } else if (priv->rx_addr_type == 2) {
1097                 emac_set_type2addr(priv, ch, mac_addr, ch, 1);
1098                 emac_set_type0addr(priv, ch, mac_addr);
1099         } else {
1100                 if (netif_msg_drv(priv))
1101                         dev_err(emac_dev, "DaVinci EMAC: Wrong addressing\n");
1102         }
1103 }
1104 
1105 /**
1106  * emac_dev_setmac_addr - Set mac address in the adapter
1107  * @ndev: The DaVinci EMAC network adapter
1108  * @addr: MAC address to set in device
1109  *
1110  * Called by the system to set the mac address of the adapter (Device)
1111  *
1112  * Returns success (0) or appropriate error code (none as of now)
1113  */
1114 static int emac_dev_setmac_addr(struct net_device *ndev, void *addr)
1115 {
1116         struct emac_priv *priv = netdev_priv(ndev);
1117         struct device *emac_dev = &priv->ndev->dev;
1118         struct sockaddr *sa = addr;
1119 
1120         if (!is_valid_ether_addr(sa->sa_data))
1121                 return -EADDRNOTAVAIL;
1122 
1123         /* Store mac addr in priv and rx channel and set it in EMAC hw */
1124         memcpy(priv->mac_addr, sa->sa_data, ndev->addr_len);
1125         memcpy(ndev->dev_addr, sa->sa_data, ndev->addr_len);
1126 
1127         /* MAC address is configured only after the interface is enabled. */
1128         if (netif_running(ndev)) {
1129                 emac_setmac(priv, EMAC_DEF_RX_CH, priv->mac_addr);
1130         }
1131 
1132         if (netif_msg_drv(priv))
1133                 dev_notice(emac_dev, "DaVinci EMAC: emac_dev_setmac_addr %pM\n",
1134                                         priv->mac_addr);
1135 
1136         return 0;
1137 }
1138 
1139 /**
1140  * emac_hw_enable - Enable EMAC hardware for packet transmission/reception
1141  * @priv: The DaVinci EMAC private adapter structure
1142  *
1143  * Enables EMAC hardware for packet processing - enables PHY, enables RX
1144  * for packet reception and enables device interrupts and then NAPI
1145  *
1146  * Returns success (0) or appropriate error code (none right now)
1147  */
1148 static int emac_hw_enable(struct emac_priv *priv)
1149 {
1150         u32 val, mbp_enable, mac_control;
1151 
1152         /* Soft reset */
1153         emac_write(EMAC_SOFTRESET, 1);
1154         while (emac_read(EMAC_SOFTRESET))
1155                 cpu_relax();
1156 
1157         /* Disable interrupt & Set pacing for more interrupts initially */
1158         emac_int_disable(priv);
1159 
1160         /* Full duplex enable bit set when auto negotiation happens */
1161         mac_control =
1162                 (((EMAC_DEF_TXPRIO_FIXED) ? (EMAC_MACCONTROL_TXPTYPE) : 0x0) |
1163                 ((priv->speed == 1000) ? EMAC_MACCONTROL_GIGABITEN : 0x0) |
1164                 ((EMAC_DEF_TXPACING_EN) ? (EMAC_MACCONTROL_TXPACEEN) : 0x0) |
1165                 ((priv->duplex == DUPLEX_FULL) ? 0x1 : 0));
1166         emac_write(EMAC_MACCONTROL, mac_control);
1167 
1168         mbp_enable =
1169                 (((EMAC_DEF_PASS_CRC) ? (EMAC_RXMBP_PASSCRC_MASK) : 0x0) |
1170                 ((EMAC_DEF_QOS_EN) ? (EMAC_RXMBP_QOSEN_MASK) : 0x0) |
1171                  ((EMAC_DEF_NO_BUFF_CHAIN) ? (EMAC_RXMBP_NOCHAIN_MASK) : 0x0) |
1172                  ((EMAC_DEF_MACCTRL_FRAME_EN) ? (EMAC_RXMBP_CMFEN_MASK) : 0x0) |
1173                  ((EMAC_DEF_SHORT_FRAME_EN) ? (EMAC_RXMBP_CSFEN_MASK) : 0x0) |
1174                  ((EMAC_DEF_ERROR_FRAME_EN) ? (EMAC_RXMBP_CEFEN_MASK) : 0x0) |
1175                  ((EMAC_DEF_PROM_EN) ? (EMAC_RXMBP_CAFEN_MASK) : 0x0) |
1176                  ((EMAC_DEF_PROM_CH & EMAC_RXMBP_CHMASK) << \
1177                         EMAC_RXMBP_PROMCH_SHIFT) |
1178                  ((EMAC_DEF_BCAST_EN) ? (EMAC_RXMBP_BROADEN_MASK) : 0x0) |
1179                  ((EMAC_DEF_BCAST_CH & EMAC_RXMBP_CHMASK) << \
1180                         EMAC_RXMBP_BROADCH_SHIFT) |
1181                  ((EMAC_DEF_MCAST_EN) ? (EMAC_RXMBP_MULTIEN_MASK) : 0x0) |
1182                  ((EMAC_DEF_MCAST_CH & EMAC_RXMBP_CHMASK) << \
1183                         EMAC_RXMBP_MULTICH_SHIFT));
1184         emac_write(EMAC_RXMBPENABLE, mbp_enable);
1185         emac_write(EMAC_RXMAXLEN, (EMAC_DEF_MAX_FRAME_SIZE &
1186                                    EMAC_RX_MAX_LEN_MASK));
1187         emac_write(EMAC_RXBUFFEROFFSET, (EMAC_DEF_BUFFER_OFFSET &
1188                                          EMAC_RX_BUFFER_OFFSET_MASK));
1189         emac_write(EMAC_RXFILTERLOWTHRESH, 0);
1190         emac_write(EMAC_RXUNICASTCLEAR, EMAC_RX_UNICAST_CLEAR_ALL);
1191         priv->rx_addr_type = (emac_read(EMAC_MACCONFIG) >> 8) & 0xFF;
1192 
1193         emac_write(EMAC_MACINTMASKSET, EMAC_MAC_HOST_ERR_INTMASK_VAL);
1194 
1195         emac_setmac(priv, EMAC_DEF_RX_CH, priv->mac_addr);
1196 
1197         /* Enable MII */
1198         val = emac_read(EMAC_MACCONTROL);
1199         val |= (EMAC_MACCONTROL_GMIIEN);
1200         emac_write(EMAC_MACCONTROL, val);
1201 
1202         /* Enable NAPI and interrupts */
1203         napi_enable(&priv->napi);
1204         emac_int_enable(priv);
1205         return 0;
1206 
1207 }
1208 
1209 /**
1210  * emac_poll - EMAC NAPI Poll function
1211  * @ndev: The DaVinci EMAC network adapter
1212  * @budget: Number of receive packets to process (as told by NAPI layer)
1213  *
1214  * NAPI Poll function implemented to process packets as per budget. We check
1215  * the type of interrupt on the device and accordingly call the TX or RX
1216  * packet processing functions. We follow the budget for RX processing and
1217  * also put a cap on number of TX pkts processed through config param. The
1218  * NAPI schedule function is called if more packets pending.
1219  *
1220  * Returns number of packets received (in most cases; else TX pkts - rarely)
1221  */
1222 static int emac_poll(struct napi_struct *napi, int budget)
1223 {
1224         unsigned int mask;
1225         struct emac_priv *priv = container_of(napi, struct emac_priv, napi);
1226         struct net_device *ndev = priv->ndev;
1227         struct device *emac_dev = &ndev->dev;
1228         u32 status = 0;
1229         u32 num_tx_pkts = 0, num_rx_pkts = 0;
1230 
1231         /* Check interrupt vectors and call packet processing */
1232         status = emac_read(EMAC_MACINVECTOR);
1233 
1234         mask = EMAC_DM644X_MAC_IN_VECTOR_TX_INT_VEC;
1235 
1236         if (priv->version == EMAC_VERSION_2)
1237                 mask = EMAC_DM646X_MAC_IN_VECTOR_TX_INT_VEC;
1238 
1239         if (status & mask) {
1240                 num_tx_pkts = cpdma_chan_process(priv->txchan,
1241                                               EMAC_DEF_TX_MAX_SERVICE);
1242         } /* TX processing */
1243 
1244         mask = EMAC_DM644X_MAC_IN_VECTOR_RX_INT_VEC;
1245 
1246         if (priv->version == EMAC_VERSION_2)
1247                 mask = EMAC_DM646X_MAC_IN_VECTOR_RX_INT_VEC;
1248 
1249         if (status & mask) {
1250                 num_rx_pkts = cpdma_chan_process(priv->rxchan, budget);
1251         } /* RX processing */
1252 
1253         mask = EMAC_DM644X_MAC_IN_VECTOR_HOST_INT;
1254         if (priv->version == EMAC_VERSION_2)
1255                 mask = EMAC_DM646X_MAC_IN_VECTOR_HOST_INT;
1256 
1257         if (unlikely(status & mask)) {
1258                 u32 ch, cause;
1259                 dev_err(emac_dev, "DaVinci EMAC: Fatal Hardware Error\n");
1260                 netif_stop_queue(ndev);
1261                 napi_disable(&priv->napi);
1262 
1263                 status = emac_read(EMAC_MACSTATUS);
1264                 cause = ((status & EMAC_MACSTATUS_TXERRCODE_MASK) >>
1265                          EMAC_MACSTATUS_TXERRCODE_SHIFT);
1266                 if (cause) {
1267                         ch = ((status & EMAC_MACSTATUS_TXERRCH_MASK) >>
1268                               EMAC_MACSTATUS_TXERRCH_SHIFT);
1269                         if (net_ratelimit()) {
1270                                 dev_err(emac_dev, "TX Host error %s on ch=%d\n",
1271                                         &emac_txhost_errcodes[cause][0], ch);
1272                         }
1273                 }
1274                 cause = ((status & EMAC_MACSTATUS_RXERRCODE_MASK) >>
1275                          EMAC_MACSTATUS_RXERRCODE_SHIFT);
1276                 if (cause) {
1277                         ch = ((status & EMAC_MACSTATUS_RXERRCH_MASK) >>
1278                               EMAC_MACSTATUS_RXERRCH_SHIFT);
1279                         if (netif_msg_hw(priv) && net_ratelimit())
1280                                 dev_err(emac_dev, "RX Host error %s on ch=%d\n",
1281                                         &emac_rxhost_errcodes[cause][0], ch);
1282                 }
1283         } else if (num_rx_pkts < budget) {
1284                 napi_complete_done(napi, num_rx_pkts);
1285                 emac_int_enable(priv);
1286         }
1287 
1288         return num_rx_pkts;
1289 }
1290 
1291 #ifdef CONFIG_NET_POLL_CONTROLLER
1292 /**
1293  * emac_poll_controller - EMAC Poll controller function
1294  * @ndev: The DaVinci EMAC network adapter
1295  *
1296  * Polled functionality used by netconsole and others in non interrupt mode
1297  *
1298  */
1299 static void emac_poll_controller(struct net_device *ndev)
1300 {
1301         struct emac_priv *priv = netdev_priv(ndev);
1302 
1303         emac_int_disable(priv);
1304         emac_irq(ndev->irq, ndev);
1305         emac_int_enable(priv);
1306 }
1307 #endif
1308 
1309 static void emac_adjust_link(struct net_device *ndev)
1310 {
1311         struct emac_priv *priv = netdev_priv(ndev);
1312         struct phy_device *phydev = ndev->phydev;
1313         unsigned long flags;
1314         int new_state = 0;
1315 
1316         spin_lock_irqsave(&priv->lock, flags);
1317 
1318         if (phydev->link) {
1319                 /* check the mode of operation - full/half duplex */
1320                 if (phydev->duplex != priv->duplex) {
1321                         new_state = 1;
1322                         priv->duplex = phydev->duplex;
1323                 }
1324                 if (phydev->speed != priv->speed) {
1325                         new_state = 1;
1326                         priv->speed = phydev->speed;
1327                 }
1328                 if (!priv->link) {
1329                         new_state = 1;
1330                         priv->link = 1;
1331                 }
1332 
1333         } else if (priv->link) {
1334                 new_state = 1;
1335                 priv->link = 0;
1336                 priv->speed = 0;
1337                 priv->duplex = ~0;
1338         }
1339         if (new_state) {
1340                 emac_update_phystatus(priv);
1341                 phy_print_status(ndev->phydev);
1342         }
1343 
1344         spin_unlock_irqrestore(&priv->lock, flags);
1345 }
1346 
1347 /*************************************************************************
1348  *  Linux Driver Model
1349  *************************************************************************/
1350 
1351 /**
1352  * emac_devioctl - EMAC adapter ioctl
1353  * @ndev: The DaVinci EMAC network adapter
1354  * @ifrq: request parameter
1355  * @cmd: command parameter
1356  *
1357  * EMAC driver ioctl function
1358  *
1359  * Returns success(0) or appropriate error code
1360  */
1361 static int emac_devioctl(struct net_device *ndev, struct ifreq *ifrq, int cmd)
1362 {
1363         if (!(netif_running(ndev)))
1364                 return -EINVAL;
1365 
1366         /* TODO: Add phy read and write and private statistics get feature */
1367 
1368         if (ndev->phydev)
1369                 return phy_mii_ioctl(ndev->phydev, ifrq, cmd);
1370         else
1371                 return -EOPNOTSUPP;
1372 }
1373 
1374 static int match_first_device(struct device *dev, const void *data)
1375 {
1376         if (dev->parent && dev->parent->of_node)
1377                 return of_device_is_compatible(dev->parent->of_node,
1378                                                "ti,davinci_mdio");
1379 
1380         return !strncmp(dev_name(dev), "davinci_mdio", 12);
1381 }
1382 
1383 /**
1384  * emac_dev_open - EMAC device open
1385  * @ndev: The DaVinci EMAC network adapter
1386  *
1387  * Called when system wants to start the interface. We init TX/RX channels
1388  * and enable the hardware for packet reception/transmission and start the
1389  * network queue.
1390  *
1391  * Returns 0 for a successful open, or appropriate error code
1392  */
1393 static int emac_dev_open(struct net_device *ndev)
1394 {
1395         struct device *emac_dev = &ndev->dev;
1396         u32 cnt;
1397         struct resource *res;
1398         int q, m, ret;
1399         int res_num = 0, irq_num = 0;
1400         int i = 0;
1401         struct emac_priv *priv = netdev_priv(ndev);
1402         struct phy_device *phydev = NULL;
1403         struct device *phy = NULL;
1404 
1405         ret = pm_runtime_get_sync(&priv->pdev->dev);
1406         if (ret < 0) {
1407                 pm_runtime_put_noidle(&priv->pdev->dev);
1408                 dev_err(&priv->pdev->dev, "%s: failed to get_sync(%d)\n",
1409                         __func__, ret);
1410                 return ret;
1411         }
1412 
1413         netif_carrier_off(ndev);
1414         for (cnt = 0; cnt < ETH_ALEN; cnt++)
1415                 ndev->dev_addr[cnt] = priv->mac_addr[cnt];
1416 
1417         /* Configuration items */
1418         priv->rx_buf_size = EMAC_DEF_MAX_FRAME_SIZE + NET_IP_ALIGN;
1419 
1420         priv->mac_hash1 = 0;
1421         priv->mac_hash2 = 0;
1422         emac_write(EMAC_MACHASH1, 0);
1423         emac_write(EMAC_MACHASH2, 0);
1424 
1425         for (i = 0; i < EMAC_DEF_RX_NUM_DESC; i++) {
1426                 struct sk_buff *skb = emac_rx_alloc(priv);
1427 
1428                 if (!skb)
1429                         break;
1430 
1431                 ret = cpdma_chan_idle_submit(priv->rxchan, skb, skb->data,
1432                                              skb_tailroom(skb), 0);
1433                 if (WARN_ON(ret < 0))
1434                         break;
1435         }
1436 
1437         /* Request IRQ */
1438         while ((res = platform_get_resource(priv->pdev, IORESOURCE_IRQ,
1439                                             res_num))) {
1440                 for (irq_num = res->start; irq_num <= res->end; irq_num++) {
1441                         if (request_irq(irq_num, emac_irq, 0, ndev->name,
1442                                         ndev)) {
1443                                 dev_err(emac_dev,
1444                                         "DaVinci EMAC: request_irq() failed\n");
1445                                 ret = -EBUSY;
1446 
1447                                 goto rollback;
1448                         }
1449                 }
1450                 res_num++;
1451         }
1452         /* prepare counters for rollback in case of an error */
1453         res_num--;
1454         irq_num--;
1455 
1456         /* Start/Enable EMAC hardware */
1457         emac_hw_enable(priv);
1458 
1459         /* Enable Interrupt pacing if configured */
1460         if (priv->coal_intvl != 0) {
1461                 struct ethtool_coalesce coal;
1462 
1463                 coal.rx_coalesce_usecs = (priv->coal_intvl << 4);
1464                 emac_set_coalesce(ndev, &coal);
1465         }
1466 
1467         cpdma_ctlr_start(priv->dma);
1468 
1469         if (priv->phy_node) {
1470                 phydev = of_phy_connect(ndev, priv->phy_node,
1471                                         &emac_adjust_link, 0, 0);
1472                 if (!phydev) {
1473                         dev_err(emac_dev, "could not connect to phy %pOF\n",
1474                                 priv->phy_node);
1475                         ret = -ENODEV;
1476                         goto err;
1477                 }
1478         }
1479 
1480         /* use the first phy on the bus if pdata did not give us a phy id */
1481         if (!phydev && !priv->phy_id) {
1482                 /* NOTE: we can't use bus_find_device_by_name() here because
1483                  * the device name is not guaranteed to be 'davinci_mdio'. On
1484                  * some systems it can be 'davinci_mdio.0' so we need to use
1485                  * strncmp() against the first part of the string to correctly
1486                  * match it.
1487                  */
1488                 phy = bus_find_device(&mdio_bus_type, NULL, NULL,
1489                                       match_first_device);
1490                 if (phy) {
1491                         priv->phy_id = dev_name(phy);
1492                         if (!priv->phy_id || !*priv->phy_id)
1493                                 put_device(phy);
1494                 }
1495         }
1496 
1497         if (!phydev && priv->phy_id && *priv->phy_id) {
1498                 phydev = phy_connect(ndev, priv->phy_id,
1499                                      &emac_adjust_link,
1500                                      PHY_INTERFACE_MODE_MII);
1501                 put_device(phy);        /* reference taken by bus_find_device */
1502                 if (IS_ERR(phydev)) {
1503                         dev_err(emac_dev, "could not connect to phy %s\n",
1504                                 priv->phy_id);
1505                         ret = PTR_ERR(phydev);
1506                         goto err;
1507                 }
1508 
1509                 priv->link = 0;
1510                 priv->speed = 0;
1511                 priv->duplex = ~0;
1512 
1513                 phy_attached_info(phydev);
1514         }
1515 
1516         if (!phydev) {
1517                 /* No PHY , fix the link, speed and duplex settings */
1518                 dev_notice(emac_dev, "no phy, defaulting to 100/full\n");
1519                 priv->link = 1;
1520                 priv->speed = SPEED_100;
1521                 priv->duplex = DUPLEX_FULL;
1522                 emac_update_phystatus(priv);
1523         }
1524 
1525         if (netif_msg_drv(priv))
1526                 dev_notice(emac_dev, "DaVinci EMAC: Opened %s\n", ndev->name);
1527 
1528         if (phydev)
1529                 phy_start(phydev);
1530 
1531         return 0;
1532 
1533 err:
1534         emac_int_disable(priv);
1535         napi_disable(&priv->napi);
1536 
1537 rollback:
1538         for (q = res_num; q >= 0; q--) {
1539                 res = platform_get_resource(priv->pdev, IORESOURCE_IRQ, q);
1540                 /* at the first iteration, irq_num is already set to the
1541                  * right value
1542                  */
1543                 if (q != res_num)
1544                         irq_num = res->end;
1545 
1546                 for (m = irq_num; m >= res->start; m--)
1547                         free_irq(m, ndev);
1548         }
1549         cpdma_ctlr_stop(priv->dma);
1550         pm_runtime_put(&priv->pdev->dev);
1551         return ret;
1552 }
1553 
1554 /**
1555  * emac_dev_stop - EMAC device stop
1556  * @ndev: The DaVinci EMAC network adapter
1557  *
1558  * Called when system wants to stop or down the interface. We stop the network
1559  * queue, disable interrupts and cleanup TX/RX channels.
1560  *
1561  * We return the statistics in net_device_stats structure pulled from emac
1562  */
1563 static int emac_dev_stop(struct net_device *ndev)
1564 {
1565         struct resource *res;
1566         int i = 0;
1567         int irq_num;
1568         struct emac_priv *priv = netdev_priv(ndev);
1569         struct device *emac_dev = &ndev->dev;
1570 
1571         /* inform the upper layers. */
1572         netif_stop_queue(ndev);
1573         napi_disable(&priv->napi);
1574 
1575         netif_carrier_off(ndev);
1576         emac_int_disable(priv);
1577         cpdma_ctlr_stop(priv->dma);
1578         emac_write(EMAC_SOFTRESET, 1);
1579 
1580         if (ndev->phydev)
1581                 phy_disconnect(ndev->phydev);
1582 
1583         /* Free IRQ */
1584         while ((res = platform_get_resource(priv->pdev, IORESOURCE_IRQ, i))) {
1585                 for (irq_num = res->start; irq_num <= res->end; irq_num++)
1586                         free_irq(irq_num, priv->ndev);
1587                 i++;
1588         }
1589 
1590         if (netif_msg_drv(priv))
1591                 dev_notice(emac_dev, "DaVinci EMAC: %s stopped\n", ndev->name);
1592 
1593         pm_runtime_put(&priv->pdev->dev);
1594         return 0;
1595 }
1596 
1597 /**
1598  * emac_dev_getnetstats - EMAC get statistics function
1599  * @ndev: The DaVinci EMAC network adapter
1600  *
1601  * Called when system wants to get statistics from the device.
1602  *
1603  * We return the statistics in net_device_stats structure pulled from emac
1604  */
1605 static struct net_device_stats *emac_dev_getnetstats(struct net_device *ndev)
1606 {
1607         struct emac_priv *priv = netdev_priv(ndev);
1608         u32 mac_control;
1609         u32 stats_clear_mask;
1610         int err;
1611 
1612         err = pm_runtime_get_sync(&priv->pdev->dev);
1613         if (err < 0) {
1614                 pm_runtime_put_noidle(&priv->pdev->dev);
1615                 dev_err(&priv->pdev->dev, "%s: failed to get_sync(%d)\n",
1616                         __func__, err);
1617                 return &ndev->stats;
1618         }
1619 
1620         /* update emac hardware stats and reset the registers*/
1621 
1622         mac_control = emac_read(EMAC_MACCONTROL);
1623 
1624         if (mac_control & EMAC_MACCONTROL_GMIIEN)
1625                 stats_clear_mask = EMAC_STATS_CLR_MASK;
1626         else
1627                 stats_clear_mask = 0;
1628 
1629         ndev->stats.multicast += emac_read(EMAC_RXMCASTFRAMES);
1630         emac_write(EMAC_RXMCASTFRAMES, stats_clear_mask);
1631 
1632         ndev->stats.collisions += (emac_read(EMAC_TXCOLLISION) +
1633                                            emac_read(EMAC_TXSINGLECOLL) +
1634                                            emac_read(EMAC_TXMULTICOLL));
1635         emac_write(EMAC_TXCOLLISION, stats_clear_mask);
1636         emac_write(EMAC_TXSINGLECOLL, stats_clear_mask);
1637         emac_write(EMAC_TXMULTICOLL, stats_clear_mask);
1638 
1639         ndev->stats.rx_length_errors += (emac_read(EMAC_RXOVERSIZED) +
1640                                                 emac_read(EMAC_RXJABBER) +
1641                                                 emac_read(EMAC_RXUNDERSIZED));
1642         emac_write(EMAC_RXOVERSIZED, stats_clear_mask);
1643         emac_write(EMAC_RXJABBER, stats_clear_mask);
1644         emac_write(EMAC_RXUNDERSIZED, stats_clear_mask);
1645 
1646         ndev->stats.rx_over_errors += (emac_read(EMAC_RXSOFOVERRUNS) +
1647                                                emac_read(EMAC_RXMOFOVERRUNS));
1648         emac_write(EMAC_RXSOFOVERRUNS, stats_clear_mask);
1649         emac_write(EMAC_RXMOFOVERRUNS, stats_clear_mask);
1650 
1651         ndev->stats.rx_fifo_errors += emac_read(EMAC_RXDMAOVERRUNS);
1652         emac_write(EMAC_RXDMAOVERRUNS, stats_clear_mask);
1653 
1654         ndev->stats.tx_carrier_errors +=
1655                 emac_read(EMAC_TXCARRIERSENSE);
1656         emac_write(EMAC_TXCARRIERSENSE, stats_clear_mask);
1657 
1658         ndev->stats.tx_fifo_errors += emac_read(EMAC_TXUNDERRUN);
1659         emac_write(EMAC_TXUNDERRUN, stats_clear_mask);
1660 
1661         pm_runtime_put(&priv->pdev->dev);
1662 
1663         return &ndev->stats;
1664 }
1665 
1666 static const struct net_device_ops emac_netdev_ops = {
1667         .ndo_open               = emac_dev_open,
1668         .ndo_stop               = emac_dev_stop,
1669         .ndo_start_xmit         = emac_dev_xmit,
1670         .ndo_set_rx_mode        = emac_dev_mcast_set,
1671         .ndo_set_mac_address    = emac_dev_setmac_addr,
1672         .ndo_do_ioctl           = emac_devioctl,
1673         .ndo_tx_timeout         = emac_dev_tx_timeout,
1674         .ndo_get_stats          = emac_dev_getnetstats,
1675 #ifdef CONFIG_NET_POLL_CONTROLLER
1676         .ndo_poll_controller    = emac_poll_controller,
1677 #endif
1678 };
1679 
1680 static const struct of_device_id davinci_emac_of_match[];
1681 
1682 static struct emac_platform_data *
1683 davinci_emac_of_get_pdata(struct platform_device *pdev, struct emac_priv *priv)
1684 {
1685         struct device_node *np;
1686         const struct of_device_id *match;
1687         const struct emac_platform_data *auxdata;
1688         struct emac_platform_data *pdata = NULL;
1689         const u8 *mac_addr;
1690 
1691         if (!IS_ENABLED(CONFIG_OF) || !pdev->dev.of_node)
1692                 return dev_get_platdata(&pdev->dev);
1693 
1694         pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
1695         if (!pdata)
1696                 return NULL;
1697 
1698         np = pdev->dev.of_node;
1699         pdata->version = EMAC_VERSION_2;
1700 
1701         if (!is_valid_ether_addr(pdata->mac_addr)) {
1702                 mac_addr = of_get_mac_address(np);
1703                 if (!IS_ERR(mac_addr))
1704                         ether_addr_copy(pdata->mac_addr, mac_addr);
1705         }
1706 
1707         of_property_read_u32(np, "ti,davinci-ctrl-reg-offset",
1708                              &pdata->ctrl_reg_offset);
1709 
1710         of_property_read_u32(np, "ti,davinci-ctrl-mod-reg-offset",
1711                              &pdata->ctrl_mod_reg_offset);
1712 
1713         of_property_read_u32(np, "ti,davinci-ctrl-ram-offset",
1714                              &pdata->ctrl_ram_offset);
1715 
1716         of_property_read_u32(np, "ti,davinci-ctrl-ram-size",
1717                              &pdata->ctrl_ram_size);
1718 
1719         of_property_read_u8(np, "ti,davinci-rmii-en", &pdata->rmii_en);
1720 
1721         pdata->no_bd_ram = of_property_read_bool(np, "ti,davinci-no-bd-ram");
1722 
1723         priv->phy_node = of_parse_phandle(np, "phy-handle", 0);
1724         if (!priv->phy_node) {
1725                 if (!of_phy_is_fixed_link(np))
1726                         pdata->phy_id = NULL;
1727                 else if (of_phy_register_fixed_link(np) >= 0)
1728                         priv->phy_node = of_node_get(np);
1729         }
1730 
1731         auxdata = pdev->dev.platform_data;
1732         if (auxdata) {
1733                 pdata->interrupt_enable = auxdata->interrupt_enable;
1734                 pdata->interrupt_disable = auxdata->interrupt_disable;
1735         }
1736 
1737         match = of_match_device(davinci_emac_of_match, &pdev->dev);
1738         if (match && match->data) {
1739                 auxdata = match->data;
1740                 pdata->version = auxdata->version;
1741                 pdata->hw_ram_addr = auxdata->hw_ram_addr;
1742         }
1743 
1744         return  pdata;
1745 }
1746 
1747 static int davinci_emac_try_get_mac(struct platform_device *pdev,
1748                                     int instance, u8 *mac_addr)
1749 {
1750         if (!pdev->dev.of_node)
1751                 return -EINVAL;
1752 
1753         return ti_cm_get_macid(&pdev->dev, instance, mac_addr);
1754 }
1755 
1756 /**
1757  * davinci_emac_probe - EMAC device probe
1758  * @pdev: The DaVinci EMAC device that we are removing
1759  *
1760  * Called when probing for emac devicesr. We get details of instances and
1761  * resource information from platform init and register a network device
1762  * and allocate resources necessary for driver to perform
1763  */
1764 static int davinci_emac_probe(struct platform_device *pdev)
1765 {
1766         struct device_node *np = pdev->dev.of_node;
1767         int rc = 0;
1768         struct resource *res, *res_ctrl;
1769         struct net_device *ndev;
1770         struct emac_priv *priv;
1771         unsigned long hw_ram_addr;
1772         struct emac_platform_data *pdata;
1773         struct cpdma_params dma_params;
1774         struct clk *emac_clk;
1775         unsigned long emac_bus_frequency;
1776 
1777 
1778         /* obtain emac clock from kernel */
1779         emac_clk = devm_clk_get(&pdev->dev, NULL);
1780         if (IS_ERR(emac_clk)) {
1781                 dev_err(&pdev->dev, "failed to get EMAC clock\n");
1782                 return -EBUSY;
1783         }
1784         emac_bus_frequency = clk_get_rate(emac_clk);
1785         devm_clk_put(&pdev->dev, emac_clk);
1786 
1787         /* TODO: Probe PHY here if possible */
1788 
1789         ndev = alloc_etherdev(sizeof(struct emac_priv));
1790         if (!ndev)
1791                 return -ENOMEM;
1792 
1793         platform_set_drvdata(pdev, ndev);
1794         priv = netdev_priv(ndev);
1795         priv->pdev = pdev;
1796         priv->ndev = ndev;
1797         priv->msg_enable = netif_msg_init(debug_level, DAVINCI_EMAC_DEBUG);
1798 
1799         spin_lock_init(&priv->lock);
1800 
1801         pdata = davinci_emac_of_get_pdata(pdev, priv);
1802         if (!pdata) {
1803                 dev_err(&pdev->dev, "no platform data\n");
1804                 rc = -ENODEV;
1805                 goto err_free_netdev;
1806         }
1807 
1808         /* MAC addr and PHY mask , RMII enable info from platform_data */
1809         memcpy(priv->mac_addr, pdata->mac_addr, ETH_ALEN);
1810         priv->phy_id = pdata->phy_id;
1811         priv->rmii_en = pdata->rmii_en;
1812         priv->version = pdata->version;
1813         priv->int_enable = pdata->interrupt_enable;
1814         priv->int_disable = pdata->interrupt_disable;
1815 
1816         priv->coal_intvl = 0;
1817         priv->bus_freq_mhz = (u32)(emac_bus_frequency / 1000000);
1818 
1819         /* Get EMAC platform data */
1820         res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1821         priv->emac_base_phys = res->start + pdata->ctrl_reg_offset;
1822         priv->remap_addr = devm_ioremap_resource(&pdev->dev, res);
1823         if (IS_ERR(priv->remap_addr)) {
1824                 rc = PTR_ERR(priv->remap_addr);
1825                 goto no_pdata;
1826         }
1827 
1828         res_ctrl = platform_get_resource(pdev, IORESOURCE_MEM, 1);
1829         if (res_ctrl) {
1830                 priv->ctrl_base =
1831                         devm_ioremap_resource(&pdev->dev, res_ctrl);
1832                 if (IS_ERR(priv->ctrl_base)) {
1833                         rc = PTR_ERR(priv->ctrl_base);
1834                         goto no_pdata;
1835                 }
1836         } else {
1837                 priv->ctrl_base = priv->remap_addr + pdata->ctrl_mod_reg_offset;
1838         }
1839 
1840         priv->emac_base = priv->remap_addr + pdata->ctrl_reg_offset;
1841         ndev->base_addr = (unsigned long)priv->remap_addr;
1842 
1843         hw_ram_addr = pdata->hw_ram_addr;
1844         if (!hw_ram_addr)
1845                 hw_ram_addr = (u32 __force)res->start + pdata->ctrl_ram_offset;
1846 
1847         memset(&dma_params, 0, sizeof(dma_params));
1848         dma_params.dev                  = &pdev->dev;
1849         dma_params.dmaregs              = priv->emac_base;
1850         dma_params.rxthresh             = priv->emac_base + 0x120;
1851         dma_params.rxfree               = priv->emac_base + 0x140;
1852         dma_params.txhdp                = priv->emac_base + 0x600;
1853         dma_params.rxhdp                = priv->emac_base + 0x620;
1854         dma_params.txcp                 = priv->emac_base + 0x640;
1855         dma_params.rxcp                 = priv->emac_base + 0x660;
1856         dma_params.num_chan             = EMAC_MAX_TXRX_CHANNELS;
1857         dma_params.min_packet_size      = EMAC_DEF_MIN_ETHPKTSIZE;
1858         dma_params.desc_hw_addr         = hw_ram_addr;
1859         dma_params.desc_mem_size        = pdata->ctrl_ram_size;
1860         dma_params.desc_align           = 16;
1861 
1862         dma_params.desc_mem_phys = pdata->no_bd_ram ? 0 :
1863                         (u32 __force)res->start + pdata->ctrl_ram_offset;
1864 
1865         priv->dma = cpdma_ctlr_create(&dma_params);
1866         if (!priv->dma) {
1867                 dev_err(&pdev->dev, "error initializing DMA\n");
1868                 rc = -ENOMEM;
1869                 goto no_pdata;
1870         }
1871 
1872         priv->txchan = cpdma_chan_create(priv->dma, EMAC_DEF_TX_CH,
1873                                          emac_tx_handler, 0);
1874         if (IS_ERR(priv->txchan)) {
1875                 dev_err(&pdev->dev, "error initializing tx dma channel\n");
1876                 rc = PTR_ERR(priv->txchan);
1877                 goto err_free_dma;
1878         }
1879 
1880         priv->rxchan = cpdma_chan_create(priv->dma, EMAC_DEF_RX_CH,
1881                                          emac_rx_handler, 1);
1882         if (IS_ERR(priv->rxchan)) {
1883                 dev_err(&pdev->dev, "error initializing rx dma channel\n");
1884                 rc = PTR_ERR(priv->rxchan);
1885                 goto err_free_txchan;
1886         }
1887 
1888         res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
1889         if (!res) {
1890                 dev_err(&pdev->dev, "error getting irq res\n");
1891                 rc = -ENOENT;
1892                 goto err_free_rxchan;
1893         }
1894         ndev->irq = res->start;
1895 
1896         rc = davinci_emac_try_get_mac(pdev, res_ctrl ? 0 : 1, priv->mac_addr);
1897         if (!rc)
1898                 ether_addr_copy(ndev->dev_addr, priv->mac_addr);
1899 
1900         if (!is_valid_ether_addr(priv->mac_addr)) {
1901                 /* Use random MAC if still none obtained. */
1902                 eth_hw_addr_random(ndev);
1903                 memcpy(priv->mac_addr, ndev->dev_addr, ndev->addr_len);
1904                 dev_warn(&pdev->dev, "using random MAC addr: %pM\n",
1905                          priv->mac_addr);
1906         }
1907 
1908         ndev->netdev_ops = &emac_netdev_ops;
1909         ndev->ethtool_ops = &ethtool_ops;
1910         netif_napi_add(ndev, &priv->napi, emac_poll, EMAC_POLL_WEIGHT);
1911 
1912         pm_runtime_enable(&pdev->dev);
1913         rc = pm_runtime_get_sync(&pdev->dev);
1914         if (rc < 0) {
1915                 pm_runtime_put_noidle(&pdev->dev);
1916                 dev_err(&pdev->dev, "%s: failed to get_sync(%d)\n",
1917                         __func__, rc);
1918                 goto err_napi_del;
1919         }
1920 
1921         /* register the network device */
1922         SET_NETDEV_DEV(ndev, &pdev->dev);
1923         rc = register_netdev(ndev);
1924         if (rc) {
1925                 dev_err(&pdev->dev, "error in register_netdev\n");
1926                 rc = -ENODEV;
1927                 pm_runtime_put(&pdev->dev);
1928                 goto err_napi_del;
1929         }
1930 
1931 
1932         if (netif_msg_probe(priv)) {
1933                 dev_notice(&pdev->dev, "DaVinci EMAC Probe found device "
1934                            "(regs: %pa, irq: %d)\n",
1935                            &priv->emac_base_phys, ndev->irq);
1936         }
1937         pm_runtime_put(&pdev->dev);
1938 
1939         return 0;
1940 
1941 err_napi_del:
1942         netif_napi_del(&priv->napi);
1943 err_free_rxchan:
1944         cpdma_chan_destroy(priv->rxchan);
1945 err_free_txchan:
1946         cpdma_chan_destroy(priv->txchan);
1947 err_free_dma:
1948         cpdma_ctlr_destroy(priv->dma);
1949 no_pdata:
1950         if (of_phy_is_fixed_link(np))
1951                 of_phy_deregister_fixed_link(np);
1952         of_node_put(priv->phy_node);
1953 err_free_netdev:
1954         free_netdev(ndev);
1955         return rc;
1956 }
1957 
1958 /**
1959  * davinci_emac_remove - EMAC device remove
1960  * @pdev: The DaVinci EMAC device that we are removing
1961  *
1962  * Called when removing the device driver. We disable clock usage and release
1963  * the resources taken up by the driver and unregister network device
1964  */
1965 static int davinci_emac_remove(struct platform_device *pdev)
1966 {
1967         struct net_device *ndev = platform_get_drvdata(pdev);
1968         struct emac_priv *priv = netdev_priv(ndev);
1969         struct device_node *np = pdev->dev.of_node;
1970 
1971         dev_notice(&ndev->dev, "DaVinci EMAC: davinci_emac_remove()\n");
1972 
1973         if (priv->txchan)
1974                 cpdma_chan_destroy(priv->txchan);
1975         if (priv->rxchan)
1976                 cpdma_chan_destroy(priv->rxchan);
1977         cpdma_ctlr_destroy(priv->dma);
1978 
1979         unregister_netdev(ndev);
1980         of_node_put(priv->phy_node);
1981         pm_runtime_disable(&pdev->dev);
1982         if (of_phy_is_fixed_link(np))
1983                 of_phy_deregister_fixed_link(np);
1984         free_netdev(ndev);
1985 
1986         return 0;
1987 }
1988 
1989 static int davinci_emac_suspend(struct device *dev)
1990 {
1991         struct net_device *ndev = dev_get_drvdata(dev);
1992 
1993         if (netif_running(ndev))
1994                 emac_dev_stop(ndev);
1995 
1996         return 0;
1997 }
1998 
1999 static int davinci_emac_resume(struct device *dev)
2000 {
2001         struct net_device *ndev = dev_get_drvdata(dev);
2002 
2003         if (netif_running(ndev))
2004                 emac_dev_open(ndev);
2005 
2006         return 0;
2007 }
2008 
2009 static const struct dev_pm_ops davinci_emac_pm_ops = {
2010         .suspend        = davinci_emac_suspend,
2011         .resume         = davinci_emac_resume,
2012 };
2013 
2014 static const struct emac_platform_data am3517_emac_data = {
2015         .version                = EMAC_VERSION_2,
2016         .hw_ram_addr            = 0x01e20000,
2017 };
2018 
2019 static const struct emac_platform_data dm816_emac_data = {
2020         .version                = EMAC_VERSION_2,
2021 };
2022 
2023 static const struct of_device_id davinci_emac_of_match[] = {
2024         {.compatible = "ti,davinci-dm6467-emac", },
2025         {.compatible = "ti,am3517-emac", .data = &am3517_emac_data, },
2026         {.compatible = "ti,dm816-emac", .data = &dm816_emac_data, },
2027         {},
2028 };
2029 MODULE_DEVICE_TABLE(of, davinci_emac_of_match);
2030 
2031 /* davinci_emac_driver: EMAC platform driver structure */
2032 static struct platform_driver davinci_emac_driver = {
2033         .driver = {
2034                 .name    = "davinci_emac",
2035                 .pm      = &davinci_emac_pm_ops,
2036                 .of_match_table = davinci_emac_of_match,
2037         },
2038         .probe = davinci_emac_probe,
2039         .remove = davinci_emac_remove,
2040 };
2041 
2042 /**
2043  * davinci_emac_init - EMAC driver module init
2044  *
2045  * Called when initializing the driver. We register the driver with
2046  * the platform.
2047  */
2048 static int __init davinci_emac_init(void)
2049 {
2050         return platform_driver_register(&davinci_emac_driver);
2051 }
2052 late_initcall(davinci_emac_init);
2053 
2054 /**
2055  * davinci_emac_exit - EMAC driver module exit
2056  *
2057  * Called when exiting the driver completely. We unregister the driver with
2058  * the platform and exit
2059  */
2060 static void __exit davinci_emac_exit(void)
2061 {
2062         platform_driver_unregister(&davinci_emac_driver);
2063 }
2064 module_exit(davinci_emac_exit);
2065 
2066 MODULE_LICENSE("GPL");
2067 MODULE_AUTHOR("DaVinci EMAC Maintainer: Anant Gole <anantgole@ti.com>");
2068 MODULE_AUTHOR("DaVinci EMAC Maintainer: Chaithrika U S <chaithrika@ti.com>");
2069 MODULE_DESCRIPTION("DaVinci EMAC Ethernet driver");

/* [<][>][^][v][top][bottom][index][help] */