Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0+
0002 /*
0003  * DaVinci Ethernet Medium Access Controller
0004  *
0005  * DaVinci EMAC is based upon CPPI 3.0 TI DMA engine
0006  *
0007  * Copyright (C) 2009 Texas Instruments.
0008  *
0009  * ---------------------------------------------------------------------------
0010  * History:
0011  * 0-5 A number of folks worked on this driver in bits and pieces but the major
0012  *     contribution came from Suraj Iyer and Anant Gole
0013  * 6.0 Anant Gole - rewrote the driver as per Linux conventions
0014  * 6.1 Chaithrika U S - added support for Gigabit and RMII features,
0015  *     PHY layer usage
0016  */
0017 
0018 #include <linux/module.h>
0019 #include <linux/kernel.h>
0020 #include <linux/sched.h>
0021 #include <linux/string.h>
0022 #include <linux/timer.h>
0023 #include <linux/errno.h>
0024 #include <linux/in.h>
0025 #include <linux/ioport.h>
0026 #include <linux/slab.h>
0027 #include <linux/mm.h>
0028 #include <linux/interrupt.h>
0029 #include <linux/init.h>
0030 #include <linux/netdevice.h>
0031 #include <linux/etherdevice.h>
0032 #include <linux/skbuff.h>
0033 #include <linux/ethtool.h>
0034 #include <linux/highmem.h>
0035 #include <linux/proc_fs.h>
0036 #include <linux/ctype.h>
0037 #include <linux/spinlock.h>
0038 #include <linux/dma-mapping.h>
0039 #include <linux/clk.h>
0040 #include <linux/platform_device.h>
0041 #include <linux/regmap.h>
0042 #include <linux/semaphore.h>
0043 #include <linux/phy.h>
0044 #include <linux/bitops.h>
0045 #include <linux/io.h>
0046 #include <linux/uaccess.h>
0047 #include <linux/pm_runtime.h>
0048 #include <linux/davinci_emac.h>
0049 #include <linux/of.h>
0050 #include <linux/of_address.h>
0051 #include <linux/of_device.h>
0052 #include <linux/of_mdio.h>
0053 #include <linux/of_irq.h>
0054 #include <linux/of_net.h>
0055 #include <linux/mfd/syscon.h>
0056 
0057 #include <asm/irq.h>
0058 #include <asm/page.h>
0059 
0060 #include "cpsw.h"
0061 #include "davinci_cpdma.h"
0062 
0063 static int debug_level;
0064 module_param(debug_level, int, 0);
0065 MODULE_PARM_DESC(debug_level, "DaVinci EMAC debug level (NETIF_MSG bits)");
0066 
0067 /* Netif debug messages possible */
0068 #define DAVINCI_EMAC_DEBUG  (NETIF_MSG_DRV | \
0069                 NETIF_MSG_PROBE | \
0070                 NETIF_MSG_LINK | \
0071                 NETIF_MSG_TIMER | \
0072                 NETIF_MSG_IFDOWN | \
0073                 NETIF_MSG_IFUP | \
0074                 NETIF_MSG_RX_ERR | \
0075                 NETIF_MSG_TX_ERR | \
0076                 NETIF_MSG_TX_QUEUED | \
0077                 NETIF_MSG_INTR | \
0078                 NETIF_MSG_TX_DONE | \
0079                 NETIF_MSG_RX_STATUS | \
0080                 NETIF_MSG_PKTDATA | \
0081                 NETIF_MSG_HW | \
0082                 NETIF_MSG_WOL)
0083 
0084 /* version info */
0085 #define EMAC_MAJOR_VERSION  6
0086 #define EMAC_MINOR_VERSION  1
0087 #define EMAC_MODULE_VERSION "6.1"
0088 MODULE_VERSION(EMAC_MODULE_VERSION);
0089 static const char emac_version_string[] = "TI DaVinci EMAC Linux v6.1";
0090 
0091 /* Configuration items */
0092 #define EMAC_DEF_PASS_CRC       (0) /* Do not pass CRC up to frames */
0093 #define EMAC_DEF_QOS_EN         (0) /* EMAC proprietary QoS disabled */
0094 #define EMAC_DEF_NO_BUFF_CHAIN      (0) /* No buffer chain */
0095 #define EMAC_DEF_MACCTRL_FRAME_EN   (0) /* Discard Maccontrol frames */
0096 #define EMAC_DEF_SHORT_FRAME_EN     (0) /* Discard short frames */
0097 #define EMAC_DEF_ERROR_FRAME_EN     (0) /* Discard error frames */
0098 #define EMAC_DEF_PROM_EN        (0) /* Promiscuous disabled */
0099 #define EMAC_DEF_PROM_CH        (0) /* Promiscuous channel is 0 */
0100 #define EMAC_DEF_BCAST_EN       (1) /* Broadcast enabled */
0101 #define EMAC_DEF_BCAST_CH       (0) /* Broadcast channel is 0 */
0102 #define EMAC_DEF_MCAST_EN       (1) /* Multicast enabled */
0103 #define EMAC_DEF_MCAST_CH       (0) /* Multicast channel is 0 */
0104 
0105 #define EMAC_DEF_TXPRIO_FIXED       (1) /* TX Priority is fixed */
0106 #define EMAC_DEF_TXPACING_EN        (0) /* TX pacing NOT supported*/
0107 
0108 #define EMAC_DEF_BUFFER_OFFSET      (0) /* Buffer offset to DMA (future) */
0109 #define EMAC_DEF_MIN_ETHPKTSIZE     (60) /* Minimum ethernet pkt size */
0110 #define EMAC_DEF_MAX_FRAME_SIZE     (1500 + 14 + 4 + 4)
0111 #define EMAC_DEF_TX_CH          (0) /* Default 0th channel */
0112 #define EMAC_DEF_RX_CH          (0) /* Default 0th channel */
0113 #define EMAC_DEF_RX_NUM_DESC        (128)
0114 #define EMAC_DEF_MAX_TX_CH      (1) /* Max TX channels configured */
0115 #define EMAC_DEF_MAX_RX_CH      (1) /* Max RX channels configured */
0116 
0117 /* Buffer descriptor parameters */
0118 #define EMAC_DEF_TX_MAX_SERVICE     (32) /* TX max service BD's */
0119 #define EMAC_DEF_RX_MAX_SERVICE     (64) /* should = netdev->weight */
0120 
0121 /* EMAC register related defines */
0122 #define EMAC_ALL_MULTI_REG_VALUE    (0xFFFFFFFF)
0123 #define EMAC_NUM_MULTICAST_BITS     (64)
0124 #define EMAC_TX_CONTROL_TX_ENABLE_VAL   (0x1)
0125 #define EMAC_RX_CONTROL_RX_ENABLE_VAL   (0x1)
0126 #define EMAC_MAC_HOST_ERR_INTMASK_VAL   (0x2)
0127 #define EMAC_RX_UNICAST_CLEAR_ALL   (0xFF)
0128 #define EMAC_INT_MASK_CLEAR     (0xFF)
0129 
0130 /* RX MBP register bit positions */
0131 #define EMAC_RXMBP_PASSCRC_MASK     BIT(30)
0132 #define EMAC_RXMBP_QOSEN_MASK       BIT(29)
0133 #define EMAC_RXMBP_NOCHAIN_MASK     BIT(28)
0134 #define EMAC_RXMBP_CMFEN_MASK       BIT(24)
0135 #define EMAC_RXMBP_CSFEN_MASK       BIT(23)
0136 #define EMAC_RXMBP_CEFEN_MASK       BIT(22)
0137 #define EMAC_RXMBP_CAFEN_MASK       BIT(21)
0138 #define EMAC_RXMBP_PROMCH_SHIFT     (16)
0139 #define EMAC_RXMBP_PROMCH_MASK      (0x7 << 16)
0140 #define EMAC_RXMBP_BROADEN_MASK     BIT(13)
0141 #define EMAC_RXMBP_BROADCH_SHIFT    (8)
0142 #define EMAC_RXMBP_BROADCH_MASK     (0x7 << 8)
0143 #define EMAC_RXMBP_MULTIEN_MASK     BIT(5)
0144 #define EMAC_RXMBP_MULTICH_SHIFT    (0)
0145 #define EMAC_RXMBP_MULTICH_MASK     (0x7)
0146 #define EMAC_RXMBP_CHMASK       (0x7)
0147 
0148 /* EMAC register definitions/bit maps used */
0149 # define EMAC_MBP_RXPROMISC     (0x00200000)
0150 # define EMAC_MBP_PROMISCCH(ch)     (((ch) & 0x7) << 16)
0151 # define EMAC_MBP_RXBCAST       (0x00002000)
0152 # define EMAC_MBP_BCASTCHAN(ch)     (((ch) & 0x7) << 8)
0153 # define EMAC_MBP_RXMCAST       (0x00000020)
0154 # define EMAC_MBP_MCASTCHAN(ch)     ((ch) & 0x7)
0155 
0156 /* EMAC mac_control register */
0157 #define EMAC_MACCONTROL_TXPTYPE     BIT(9)
0158 #define EMAC_MACCONTROL_TXPACEEN    BIT(6)
0159 #define EMAC_MACCONTROL_GMIIEN      BIT(5)
0160 #define EMAC_MACCONTROL_GIGABITEN   BIT(7)
0161 #define EMAC_MACCONTROL_FULLDUPLEXEN    BIT(0)
0162 #define EMAC_MACCONTROL_RMIISPEED_MASK  BIT(15)
0163 
0164 /* GIGABIT MODE related bits */
0165 #define EMAC_DM646X_MACCONTORL_GIG  BIT(7)
0166 #define EMAC_DM646X_MACCONTORL_GIGFORCE BIT(17)
0167 
0168 /* EMAC mac_status register */
0169 #define EMAC_MACSTATUS_TXERRCODE_MASK   (0xF00000)
0170 #define EMAC_MACSTATUS_TXERRCODE_SHIFT  (20)
0171 #define EMAC_MACSTATUS_TXERRCH_MASK (0x70000)
0172 #define EMAC_MACSTATUS_TXERRCH_SHIFT    (16)
0173 #define EMAC_MACSTATUS_RXERRCODE_MASK   (0xF000)
0174 #define EMAC_MACSTATUS_RXERRCODE_SHIFT  (12)
0175 #define EMAC_MACSTATUS_RXERRCH_MASK (0x700)
0176 #define EMAC_MACSTATUS_RXERRCH_SHIFT    (8)
0177 
0178 /* EMAC RX register masks */
0179 #define EMAC_RX_MAX_LEN_MASK        (0xFFFF)
0180 #define EMAC_RX_BUFFER_OFFSET_MASK  (0xFFFF)
0181 
0182 /* MAC_IN_VECTOR (0x180) register bit fields */
0183 #define EMAC_DM644X_MAC_IN_VECTOR_HOST_INT  BIT(17)
0184 #define EMAC_DM644X_MAC_IN_VECTOR_STATPEND_INT  BIT(16)
0185 #define EMAC_DM644X_MAC_IN_VECTOR_RX_INT_VEC    BIT(8)
0186 #define EMAC_DM644X_MAC_IN_VECTOR_TX_INT_VEC    BIT(0)
0187 
0188 /** NOTE:: For DM646x the IN_VECTOR has changed */
0189 #define EMAC_DM646X_MAC_IN_VECTOR_RX_INT_VEC    BIT(EMAC_DEF_RX_CH)
0190 #define EMAC_DM646X_MAC_IN_VECTOR_TX_INT_VEC    BIT(16 + EMAC_DEF_TX_CH)
0191 #define EMAC_DM646X_MAC_IN_VECTOR_HOST_INT  BIT(26)
0192 #define EMAC_DM646X_MAC_IN_VECTOR_STATPEND_INT  BIT(27)
0193 
0194 /* CPPI bit positions */
0195 #define EMAC_CPPI_SOP_BIT       BIT(31)
0196 #define EMAC_CPPI_EOP_BIT       BIT(30)
0197 #define EMAC_CPPI_OWNERSHIP_BIT     BIT(29)
0198 #define EMAC_CPPI_EOQ_BIT       BIT(28)
0199 #define EMAC_CPPI_TEARDOWN_COMPLETE_BIT BIT(27)
0200 #define EMAC_CPPI_PASS_CRC_BIT      BIT(26)
0201 #define EMAC_RX_BD_BUF_SIZE     (0xFFFF)
0202 #define EMAC_BD_LENGTH_FOR_CACHE    (16) /* only CPPI bytes */
0203 #define EMAC_RX_BD_PKT_LENGTH_MASK  (0xFFFF)
0204 
0205 /* Max hardware defines */
0206 #define EMAC_MAX_TXRX_CHANNELS       (8)  /* Max hardware channels */
0207 #define EMAC_DEF_MAX_MULTICAST_ADDRESSES (64) /* Max mcast addr's */
0208 
0209 /* EMAC Peripheral Device Register Memory Layout structure */
0210 #define EMAC_MACINVECTOR    0x90
0211 
0212 #define EMAC_DM646X_MACEOIVECTOR    0x94
0213 
0214 #define EMAC_MACINTSTATRAW  0xB0
0215 #define EMAC_MACINTSTATMASKED   0xB4
0216 #define EMAC_MACINTMASKSET  0xB8
0217 #define EMAC_MACINTMASKCLEAR    0xBC
0218 
0219 #define EMAC_RXMBPENABLE    0x100
0220 #define EMAC_RXUNICASTSET   0x104
0221 #define EMAC_RXUNICASTCLEAR 0x108
0222 #define EMAC_RXMAXLEN       0x10C
0223 #define EMAC_RXBUFFEROFFSET 0x110
0224 #define EMAC_RXFILTERLOWTHRESH  0x114
0225 
0226 #define EMAC_MACCONTROL     0x160
0227 #define EMAC_MACSTATUS      0x164
0228 #define EMAC_EMCONTROL      0x168
0229 #define EMAC_FIFOCONTROL    0x16C
0230 #define EMAC_MACCONFIG      0x170
0231 #define EMAC_SOFTRESET      0x174
0232 #define EMAC_MACSRCADDRLO   0x1D0
0233 #define EMAC_MACSRCADDRHI   0x1D4
0234 #define EMAC_MACHASH1       0x1D8
0235 #define EMAC_MACHASH2       0x1DC
0236 #define EMAC_MACADDRLO      0x500
0237 #define EMAC_MACADDRHI      0x504
0238 #define EMAC_MACINDEX       0x508
0239 
0240 /* EMAC statistics registers */
0241 #define EMAC_RXGOODFRAMES   0x200
0242 #define EMAC_RXBCASTFRAMES  0x204
0243 #define EMAC_RXMCASTFRAMES  0x208
0244 #define EMAC_RXPAUSEFRAMES  0x20C
0245 #define EMAC_RXCRCERRORS    0x210
0246 #define EMAC_RXALIGNCODEERRORS  0x214
0247 #define EMAC_RXOVERSIZED    0x218
0248 #define EMAC_RXJABBER       0x21C
0249 #define EMAC_RXUNDERSIZED   0x220
0250 #define EMAC_RXFRAGMENTS    0x224
0251 #define EMAC_RXFILTERED     0x228
0252 #define EMAC_RXQOSFILTERED  0x22C
0253 #define EMAC_RXOCTETS       0x230
0254 #define EMAC_TXGOODFRAMES   0x234
0255 #define EMAC_TXBCASTFRAMES  0x238
0256 #define EMAC_TXMCASTFRAMES  0x23C
0257 #define EMAC_TXPAUSEFRAMES  0x240
0258 #define EMAC_TXDEFERRED     0x244
0259 #define EMAC_TXCOLLISION    0x248
0260 #define EMAC_TXSINGLECOLL   0x24C
0261 #define EMAC_TXMULTICOLL    0x250
0262 #define EMAC_TXEXCESSIVECOLL    0x254
0263 #define EMAC_TXLATECOLL     0x258
0264 #define EMAC_TXUNDERRUN     0x25C
0265 #define EMAC_TXCARRIERSENSE 0x260
0266 #define EMAC_TXOCTETS       0x264
0267 #define EMAC_NETOCTETS      0x280
0268 #define EMAC_RXSOFOVERRUNS  0x284
0269 #define EMAC_RXMOFOVERRUNS  0x288
0270 #define EMAC_RXDMAOVERRUNS  0x28C
0271 
0272 /* EMAC DM644x control registers */
0273 #define EMAC_CTRL_EWCTL     (0x4)
0274 #define EMAC_CTRL_EWINTTCNT (0x8)
0275 
0276 /* EMAC DM644x control module masks */
0277 #define EMAC_DM644X_EWINTCNT_MASK   0x1FFFF
0278 #define EMAC_DM644X_INTMIN_INTVL    0x1
0279 #define EMAC_DM644X_INTMAX_INTVL    (EMAC_DM644X_EWINTCNT_MASK)
0280 
0281 /* EMAC DM646X control module registers */
0282 #define EMAC_DM646X_CMINTCTRL   0x0C
0283 #define EMAC_DM646X_CMRXINTEN   0x14
0284 #define EMAC_DM646X_CMTXINTEN   0x18
0285 #define EMAC_DM646X_CMRXINTMAX  0x70
0286 #define EMAC_DM646X_CMTXINTMAX  0x74
0287 
0288 /* EMAC DM646X control module masks */
0289 #define EMAC_DM646X_INTPACEEN       (0x3 << 16)
0290 #define EMAC_DM646X_INTPRESCALE_MASK    (0x7FF << 0)
0291 #define EMAC_DM646X_CMINTMAX_CNT    63
0292 #define EMAC_DM646X_CMINTMIN_CNT    2
0293 #define EMAC_DM646X_CMINTMAX_INTVL  (1000 / EMAC_DM646X_CMINTMIN_CNT)
0294 #define EMAC_DM646X_CMINTMIN_INTVL  ((1000 / EMAC_DM646X_CMINTMAX_CNT) + 1)
0295 
0296 
0297 /* EMAC EOI codes for C0 */
0298 #define EMAC_DM646X_MAC_EOI_C0_RXEN (0x01)
0299 #define EMAC_DM646X_MAC_EOI_C0_TXEN (0x02)
0300 
0301 /* EMAC Stats Clear Mask */
0302 #define EMAC_STATS_CLR_MASK    (0xFFFFFFFF)
0303 
0304 /* emac_priv: EMAC private data structure
0305  *
0306  * EMAC adapter private data structure
0307  */
0308 struct emac_priv {
0309     u32 msg_enable;
0310     struct net_device *ndev;
0311     struct platform_device *pdev;
0312     struct napi_struct napi;
0313     char mac_addr[6];
0314     void __iomem *remap_addr;
0315     u32 emac_base_phys;
0316     void __iomem *emac_base;
0317     void __iomem *ctrl_base;
0318     struct cpdma_ctlr *dma;
0319     struct cpdma_chan *txchan;
0320     struct cpdma_chan *rxchan;
0321     u32 link; /* 1=link on, 0=link off */
0322     u32 speed; /* 0=Auto Neg, 1=No PHY, 10,100, 1000 - mbps */
0323     u32 duplex; /* Link duplex: 0=Half, 1=Full */
0324     u32 rx_buf_size;
0325     u32 isr_count;
0326     u32 coal_intvl;
0327     u32 bus_freq_mhz;
0328     u8 rmii_en;
0329     u8 version;
0330     u32 mac_hash1;
0331     u32 mac_hash2;
0332     u32 multicast_hash_cnt[EMAC_NUM_MULTICAST_BITS];
0333     u32 rx_addr_type;
0334     const char *phy_id;
0335     struct device_node *phy_node;
0336     spinlock_t lock;
0337     /*platform specific members*/
0338     void (*int_enable) (void);
0339     void (*int_disable) (void);
0340 };
0341 
0342 /* EMAC TX Host Error description strings */
0343 static char *emac_txhost_errcodes[16] = {
0344     "No error", "SOP error", "Ownership bit not set in SOP buffer",
0345     "Zero Next Buffer Descriptor Pointer Without EOP",
0346     "Zero Buffer Pointer", "Zero Buffer Length", "Packet Length Error",
0347     "Reserved", "Reserved", "Reserved", "Reserved", "Reserved",
0348     "Reserved", "Reserved", "Reserved", "Reserved"
0349 };
0350 
0351 /* EMAC RX Host Error description strings */
0352 static char *emac_rxhost_errcodes[16] = {
0353     "No error", "Reserved", "Ownership bit not set in input buffer",
0354     "Reserved", "Zero Buffer Pointer", "Reserved", "Reserved",
0355     "Reserved", "Reserved", "Reserved", "Reserved", "Reserved",
0356     "Reserved", "Reserved", "Reserved", "Reserved"
0357 };
0358 
0359 /* Helper macros */
0360 #define emac_read(reg)        ioread32(priv->emac_base + (reg))
0361 #define emac_write(reg, val)      iowrite32(val, priv->emac_base + (reg))
0362 
0363 #define emac_ctrl_read(reg)   ioread32((priv->ctrl_base + (reg)))
0364 #define emac_ctrl_write(reg, val) iowrite32(val, (priv->ctrl_base + (reg)))
0365 
0366 /**
0367  * emac_get_drvinfo - Get EMAC driver information
0368  * @ndev: The DaVinci EMAC network adapter
0369  * @info: ethtool info structure containing name and version
0370  *
0371  * Returns EMAC driver information (name and version)
0372  *
0373  */
0374 static void emac_get_drvinfo(struct net_device *ndev,
0375                  struct ethtool_drvinfo *info)
0376 {
0377     strlcpy(info->driver, emac_version_string, sizeof(info->driver));
0378     strlcpy(info->version, EMAC_MODULE_VERSION, sizeof(info->version));
0379 }
0380 
0381 /**
0382  * emac_get_coalesce - Get interrupt coalesce settings for this device
0383  * @ndev : The DaVinci EMAC network adapter
0384  * @coal : ethtool coalesce settings structure
0385  * @kernel_coal: ethtool CQE mode setting structure
0386  * @extack: extack for reporting error messages
0387  *
0388  * Fetch the current interrupt coalesce settings
0389  *
0390  */
0391 static int emac_get_coalesce(struct net_device *ndev,
0392                  struct ethtool_coalesce *coal,
0393                  struct kernel_ethtool_coalesce *kernel_coal,
0394                  struct netlink_ext_ack *extack)
0395 {
0396     struct emac_priv *priv = netdev_priv(ndev);
0397 
0398     coal->rx_coalesce_usecs = priv->coal_intvl;
0399     return 0;
0400 
0401 }
0402 
0403 /**
0404  * emac_set_coalesce - Set interrupt coalesce settings for this device
0405  * @ndev : The DaVinci EMAC network adapter
0406  * @coal : ethtool coalesce settings structure
0407  * @kernel_coal: ethtool CQE mode setting structure
0408  * @extack: extack for reporting error messages
0409  *
0410  * Set interrupt coalesce parameters
0411  *
0412  */
0413 static int emac_set_coalesce(struct net_device *ndev,
0414                  struct ethtool_coalesce *coal,
0415                  struct kernel_ethtool_coalesce *kernel_coal,
0416                  struct netlink_ext_ack *extack)
0417 {
0418     struct emac_priv *priv = netdev_priv(ndev);
0419     u32 int_ctrl, num_interrupts = 0;
0420     u32 prescale = 0, addnl_dvdr = 1, coal_intvl = 0;
0421 
0422     if (!coal->rx_coalesce_usecs) {
0423         priv->coal_intvl = 0;
0424 
0425         switch (priv->version) {
0426         case EMAC_VERSION_2:
0427             emac_ctrl_write(EMAC_DM646X_CMINTCTRL, 0);
0428             break;
0429         default:
0430             emac_ctrl_write(EMAC_CTRL_EWINTTCNT, 0);
0431             break;
0432         }
0433 
0434         return 0;
0435     }
0436 
0437     coal_intvl = coal->rx_coalesce_usecs;
0438 
0439     switch (priv->version) {
0440     case EMAC_VERSION_2:
0441         int_ctrl =  emac_ctrl_read(EMAC_DM646X_CMINTCTRL);
0442         prescale = priv->bus_freq_mhz * 4;
0443 
0444         if (coal_intvl < EMAC_DM646X_CMINTMIN_INTVL)
0445             coal_intvl = EMAC_DM646X_CMINTMIN_INTVL;
0446 
0447         if (coal_intvl > EMAC_DM646X_CMINTMAX_INTVL) {
0448             /*
0449              * Interrupt pacer works with 4us Pulse, we can
0450              * throttle further by dilating the 4us pulse.
0451              */
0452             addnl_dvdr = EMAC_DM646X_INTPRESCALE_MASK / prescale;
0453 
0454             if (addnl_dvdr > 1) {
0455                 prescale *= addnl_dvdr;
0456                 if (coal_intvl > (EMAC_DM646X_CMINTMAX_INTVL
0457                             * addnl_dvdr))
0458                     coal_intvl = (EMAC_DM646X_CMINTMAX_INTVL
0459                             * addnl_dvdr);
0460             } else {
0461                 addnl_dvdr = 1;
0462                 coal_intvl = EMAC_DM646X_CMINTMAX_INTVL;
0463             }
0464         }
0465 
0466         num_interrupts = (1000 * addnl_dvdr) / coal_intvl;
0467 
0468         int_ctrl |= EMAC_DM646X_INTPACEEN;
0469         int_ctrl &= (~EMAC_DM646X_INTPRESCALE_MASK);
0470         int_ctrl |= (prescale & EMAC_DM646X_INTPRESCALE_MASK);
0471         emac_ctrl_write(EMAC_DM646X_CMINTCTRL, int_ctrl);
0472 
0473         emac_ctrl_write(EMAC_DM646X_CMRXINTMAX, num_interrupts);
0474         emac_ctrl_write(EMAC_DM646X_CMTXINTMAX, num_interrupts);
0475 
0476         break;
0477     default:
0478         int_ctrl = emac_ctrl_read(EMAC_CTRL_EWINTTCNT);
0479         int_ctrl &= (~EMAC_DM644X_EWINTCNT_MASK);
0480         prescale = coal_intvl * priv->bus_freq_mhz;
0481         if (prescale > EMAC_DM644X_EWINTCNT_MASK) {
0482             prescale = EMAC_DM644X_EWINTCNT_MASK;
0483             coal_intvl = prescale / priv->bus_freq_mhz;
0484         }
0485         emac_ctrl_write(EMAC_CTRL_EWINTTCNT, (int_ctrl | prescale));
0486 
0487         break;
0488     }
0489 
0490     printk(KERN_INFO"Set coalesce to %d usecs.\n", coal_intvl);
0491     priv->coal_intvl = coal_intvl;
0492 
0493     return 0;
0494 
0495 }
0496 
0497 
0498 /* ethtool_ops: DaVinci EMAC Ethtool structure
0499  *
0500  * Ethtool support for EMAC adapter
0501  */
0502 static const struct ethtool_ops ethtool_ops = {
0503     .supported_coalesce_params = ETHTOOL_COALESCE_RX_USECS,
0504     .get_drvinfo = emac_get_drvinfo,
0505     .get_link = ethtool_op_get_link,
0506     .get_coalesce = emac_get_coalesce,
0507     .set_coalesce =  emac_set_coalesce,
0508     .get_ts_info = ethtool_op_get_ts_info,
0509     .get_link_ksettings = phy_ethtool_get_link_ksettings,
0510     .set_link_ksettings = phy_ethtool_set_link_ksettings,
0511 };
0512 
0513 /**
0514  * emac_update_phystatus - Update Phy status
0515  * @priv: The DaVinci EMAC private adapter structure
0516  *
0517  * Updates phy status and takes action for network queue if required
0518  * based upon link status
0519  *
0520  */
0521 static void emac_update_phystatus(struct emac_priv *priv)
0522 {
0523     u32 mac_control;
0524     u32 new_duplex;
0525     u32 cur_duplex;
0526     struct net_device *ndev = priv->ndev;
0527 
0528     mac_control = emac_read(EMAC_MACCONTROL);
0529     cur_duplex = (mac_control & EMAC_MACCONTROL_FULLDUPLEXEN) ?
0530             DUPLEX_FULL : DUPLEX_HALF;
0531     if (ndev->phydev)
0532         new_duplex = ndev->phydev->duplex;
0533     else
0534         new_duplex = DUPLEX_FULL;
0535 
0536     /* We get called only if link has changed (speed/duplex/status) */
0537     if ((priv->link) && (new_duplex != cur_duplex)) {
0538         priv->duplex = new_duplex;
0539         if (DUPLEX_FULL == priv->duplex)
0540             mac_control |= (EMAC_MACCONTROL_FULLDUPLEXEN);
0541         else
0542             mac_control &= ~(EMAC_MACCONTROL_FULLDUPLEXEN);
0543     }
0544 
0545     if (priv->speed == SPEED_1000 && (priv->version == EMAC_VERSION_2)) {
0546         mac_control = emac_read(EMAC_MACCONTROL);
0547         mac_control |= (EMAC_DM646X_MACCONTORL_GIG |
0548                 EMAC_DM646X_MACCONTORL_GIGFORCE);
0549     } else {
0550         /* Clear the GIG bit and GIGFORCE bit */
0551         mac_control &= ~(EMAC_DM646X_MACCONTORL_GIGFORCE |
0552                     EMAC_DM646X_MACCONTORL_GIG);
0553 
0554         if (priv->rmii_en && (priv->speed == SPEED_100))
0555             mac_control |= EMAC_MACCONTROL_RMIISPEED_MASK;
0556         else
0557             mac_control &= ~EMAC_MACCONTROL_RMIISPEED_MASK;
0558     }
0559 
0560     /* Update mac_control if changed */
0561     emac_write(EMAC_MACCONTROL, mac_control);
0562 
0563     if (priv->link) {
0564         /* link ON */
0565         if (!netif_carrier_ok(ndev))
0566             netif_carrier_on(ndev);
0567     /* reactivate the transmit queue if it is stopped */
0568         if (netif_running(ndev) && netif_queue_stopped(ndev))
0569             netif_wake_queue(ndev);
0570     } else {
0571         /* link OFF */
0572         if (netif_carrier_ok(ndev))
0573             netif_carrier_off(ndev);
0574         if (!netif_queue_stopped(ndev))
0575             netif_stop_queue(ndev);
0576     }
0577 }
0578 
0579 /**
0580  * hash_get - Calculate hash value from mac address
0581  * @addr: mac address to delete from hash table
0582  *
0583  * Calculates hash value from mac address
0584  *
0585  */
0586 static u32 hash_get(u8 *addr)
0587 {
0588     u32 hash;
0589     u8 tmpval;
0590     int cnt;
0591     hash = 0;
0592 
0593     for (cnt = 0; cnt < 2; cnt++) {
0594         tmpval = *addr++;
0595         hash ^= (tmpval >> 2) ^ (tmpval << 4);
0596         tmpval = *addr++;
0597         hash ^= (tmpval >> 4) ^ (tmpval << 2);
0598         tmpval = *addr++;
0599         hash ^= (tmpval >> 6) ^ (tmpval);
0600     }
0601 
0602     return hash & 0x3F;
0603 }
0604 
0605 /**
0606  * emac_hash_add - Hash function to add mac addr from hash table
0607  * @priv: The DaVinci EMAC private adapter structure
0608  * @mac_addr: mac address to delete from hash table
0609  *
0610  * Adds mac address to the internal hash table
0611  *
0612  */
0613 static int emac_hash_add(struct emac_priv *priv, u8 *mac_addr)
0614 {
0615     struct device *emac_dev = &priv->ndev->dev;
0616     u32 rc = 0;
0617     u32 hash_bit;
0618     u32 hash_value = hash_get(mac_addr);
0619 
0620     if (hash_value >= EMAC_NUM_MULTICAST_BITS) {
0621         if (netif_msg_drv(priv)) {
0622             dev_err(emac_dev, "DaVinci EMAC: emac_hash_add(): Invalid "\
0623                 "Hash %08x, should not be greater than %08x",
0624                 hash_value, (EMAC_NUM_MULTICAST_BITS - 1));
0625         }
0626         return -1;
0627     }
0628 
0629     /* set the hash bit only if not previously set */
0630     if (priv->multicast_hash_cnt[hash_value] == 0) {
0631         rc = 1; /* hash value changed */
0632         if (hash_value < 32) {
0633             hash_bit = BIT(hash_value);
0634             priv->mac_hash1 |= hash_bit;
0635         } else {
0636             hash_bit = BIT((hash_value - 32));
0637             priv->mac_hash2 |= hash_bit;
0638         }
0639     }
0640 
0641     /* incr counter for num of mcast addr's mapped to "this" hash bit */
0642     ++priv->multicast_hash_cnt[hash_value];
0643 
0644     return rc;
0645 }
0646 
0647 /**
0648  * emac_hash_del - Hash function to delete mac addr from hash table
0649  * @priv: The DaVinci EMAC private adapter structure
0650  * @mac_addr: mac address to delete from hash table
0651  *
0652  * Removes mac address from the internal hash table
0653  *
0654  */
0655 static int emac_hash_del(struct emac_priv *priv, u8 *mac_addr)
0656 {
0657     u32 hash_value;
0658     u32 hash_bit;
0659 
0660     hash_value = hash_get(mac_addr);
0661     if (priv->multicast_hash_cnt[hash_value] > 0) {
0662         /* dec cntr for num of mcast addr's mapped to this hash bit */
0663         --priv->multicast_hash_cnt[hash_value];
0664     }
0665 
0666     /* if counter still > 0, at least one multicast address refers
0667      * to this hash bit. so return 0 */
0668     if (priv->multicast_hash_cnt[hash_value] > 0)
0669         return 0;
0670 
0671     if (hash_value < 32) {
0672         hash_bit = BIT(hash_value);
0673         priv->mac_hash1 &= ~hash_bit;
0674     } else {
0675         hash_bit = BIT((hash_value - 32));
0676         priv->mac_hash2 &= ~hash_bit;
0677     }
0678 
0679     /* return 1 to indicate change in mac_hash registers reqd */
0680     return 1;
0681 }
0682 
0683 /* EMAC multicast operation */
0684 #define EMAC_MULTICAST_ADD  0
0685 #define EMAC_MULTICAST_DEL  1
0686 #define EMAC_ALL_MULTI_SET  2
0687 #define EMAC_ALL_MULTI_CLR  3
0688 
0689 /**
0690  * emac_add_mcast - Set multicast address in the EMAC adapter (Internal)
0691  * @priv: The DaVinci EMAC private adapter structure
0692  * @action: multicast operation to perform
0693  * @mac_addr: mac address to set
0694  *
0695  * Set multicast addresses in EMAC adapter - internal function
0696  *
0697  */
0698 static void emac_add_mcast(struct emac_priv *priv, u32 action, u8 *mac_addr)
0699 {
0700     struct device *emac_dev = &priv->ndev->dev;
0701     int update = -1;
0702 
0703     switch (action) {
0704     case EMAC_MULTICAST_ADD:
0705         update = emac_hash_add(priv, mac_addr);
0706         break;
0707     case EMAC_MULTICAST_DEL:
0708         update = emac_hash_del(priv, mac_addr);
0709         break;
0710     case EMAC_ALL_MULTI_SET:
0711         update = 1;
0712         priv->mac_hash1 = EMAC_ALL_MULTI_REG_VALUE;
0713         priv->mac_hash2 = EMAC_ALL_MULTI_REG_VALUE;
0714         break;
0715     case EMAC_ALL_MULTI_CLR:
0716         update = 1;
0717         priv->mac_hash1 = 0;
0718         priv->mac_hash2 = 0;
0719         memset(&(priv->multicast_hash_cnt[0]), 0,
0720         sizeof(priv->multicast_hash_cnt[0]) *
0721                EMAC_NUM_MULTICAST_BITS);
0722         break;
0723     default:
0724         if (netif_msg_drv(priv))
0725             dev_err(emac_dev, "DaVinci EMAC: add_mcast"\
0726                 ": bad operation %d", action);
0727         break;
0728     }
0729 
0730     /* write to the hardware only if the register status chances */
0731     if (update > 0) {
0732         emac_write(EMAC_MACHASH1, priv->mac_hash1);
0733         emac_write(EMAC_MACHASH2, priv->mac_hash2);
0734     }
0735 }
0736 
0737 /**
0738  * emac_dev_mcast_set - Set multicast address in the EMAC adapter
0739  * @ndev: The DaVinci EMAC network adapter
0740  *
0741  * Set multicast addresses in EMAC adapter
0742  *
0743  */
0744 static void emac_dev_mcast_set(struct net_device *ndev)
0745 {
0746     u32 mbp_enable;
0747     struct emac_priv *priv = netdev_priv(ndev);
0748 
0749     mbp_enable = emac_read(EMAC_RXMBPENABLE);
0750     if (ndev->flags & IFF_PROMISC) {
0751         mbp_enable &= (~EMAC_MBP_PROMISCCH(EMAC_DEF_PROM_CH));
0752         mbp_enable |= (EMAC_MBP_RXPROMISC);
0753     } else {
0754         mbp_enable = (mbp_enable & ~EMAC_MBP_RXPROMISC);
0755         if ((ndev->flags & IFF_ALLMULTI) ||
0756             netdev_mc_count(ndev) > EMAC_DEF_MAX_MULTICAST_ADDRESSES) {
0757             mbp_enable = (mbp_enable | EMAC_MBP_RXMCAST);
0758             emac_add_mcast(priv, EMAC_ALL_MULTI_SET, NULL);
0759         } else if (!netdev_mc_empty(ndev)) {
0760             struct netdev_hw_addr *ha;
0761 
0762             mbp_enable = (mbp_enable | EMAC_MBP_RXMCAST);
0763             emac_add_mcast(priv, EMAC_ALL_MULTI_CLR, NULL);
0764             /* program multicast address list into EMAC hardware */
0765             netdev_for_each_mc_addr(ha, ndev) {
0766                 emac_add_mcast(priv, EMAC_MULTICAST_ADD,
0767                            (u8 *) ha->addr);
0768             }
0769         } else {
0770             mbp_enable = (mbp_enable & ~EMAC_MBP_RXMCAST);
0771             emac_add_mcast(priv, EMAC_ALL_MULTI_CLR, NULL);
0772         }
0773     }
0774     /* Set mbp config register */
0775     emac_write(EMAC_RXMBPENABLE, mbp_enable);
0776 }
0777 
0778 /*************************************************************************
0779  *  EMAC Hardware manipulation
0780  *************************************************************************/
0781 
0782 /**
0783  * emac_int_disable - Disable EMAC module interrupt (from adapter)
0784  * @priv: The DaVinci EMAC private adapter structure
0785  *
0786  * Disable EMAC interrupt on the adapter
0787  *
0788  */
0789 static void emac_int_disable(struct emac_priv *priv)
0790 {
0791     if (priv->version == EMAC_VERSION_2) {
0792         unsigned long flags;
0793 
0794         local_irq_save(flags);
0795 
0796         /* Program C0_Int_En to zero to turn off
0797         * interrupts to the CPU */
0798         emac_ctrl_write(EMAC_DM646X_CMRXINTEN, 0x0);
0799         emac_ctrl_write(EMAC_DM646X_CMTXINTEN, 0x0);
0800         /* NOTE: Rx Threshold and Misc interrupts are not disabled */
0801         if (priv->int_disable)
0802             priv->int_disable();
0803 
0804         /* NOTE: Rx Threshold and Misc interrupts are not enabled */
0805 
0806         /* ack rxen only then a new pulse will be generated */
0807         emac_write(EMAC_DM646X_MACEOIVECTOR,
0808             EMAC_DM646X_MAC_EOI_C0_RXEN);
0809 
0810         /* ack txen- only then a new pulse will be generated */
0811         emac_write(EMAC_DM646X_MACEOIVECTOR,
0812             EMAC_DM646X_MAC_EOI_C0_TXEN);
0813 
0814         local_irq_restore(flags);
0815 
0816     } else {
0817         /* Set DM644x control registers for interrupt control */
0818         emac_ctrl_write(EMAC_CTRL_EWCTL, 0x0);
0819     }
0820 }
0821 
0822 /**
0823  * emac_int_enable - Enable EMAC module interrupt (from adapter)
0824  * @priv: The DaVinci EMAC private adapter structure
0825  *
0826  * Enable EMAC interrupt on the adapter
0827  *
0828  */
0829 static void emac_int_enable(struct emac_priv *priv)
0830 {
0831     if (priv->version == EMAC_VERSION_2) {
0832         if (priv->int_enable)
0833             priv->int_enable();
0834 
0835         emac_ctrl_write(EMAC_DM646X_CMRXINTEN, 0xff);
0836         emac_ctrl_write(EMAC_DM646X_CMTXINTEN, 0xff);
0837 
0838         /* In addition to turning on interrupt Enable, we need
0839          * ack by writing appropriate values to the EOI
0840          * register */
0841 
0842         /* NOTE: Rx Threshold and Misc interrupts are not enabled */
0843     } else {
0844         /* Set DM644x control registers for interrupt control */
0845         emac_ctrl_write(EMAC_CTRL_EWCTL, 0x1);
0846     }
0847 }
0848 
0849 /**
0850  * emac_irq - EMAC interrupt handler
0851  * @irq: interrupt number
0852  * @dev_id: EMAC network adapter data structure ptr
0853  *
0854  * EMAC Interrupt handler - we only schedule NAPI and not process any packets
0855  * here. EVen the interrupt status is checked (TX/RX/Err) in NAPI poll function
0856  *
0857  * Returns interrupt handled condition
0858  */
0859 static irqreturn_t emac_irq(int irq, void *dev_id)
0860 {
0861     struct net_device *ndev = (struct net_device *)dev_id;
0862     struct emac_priv *priv = netdev_priv(ndev);
0863 
0864     ++priv->isr_count;
0865     if (likely(netif_running(priv->ndev))) {
0866         emac_int_disable(priv);
0867         napi_schedule(&priv->napi);
0868     } else {
0869         /* we are closing down, so dont process anything */
0870     }
0871     return IRQ_HANDLED;
0872 }
0873 
0874 static struct sk_buff *emac_rx_alloc(struct emac_priv *priv)
0875 {
0876     struct sk_buff *skb = netdev_alloc_skb(priv->ndev, priv->rx_buf_size);
0877     if (WARN_ON(!skb))
0878         return NULL;
0879     skb_reserve(skb, NET_IP_ALIGN);
0880     return skb;
0881 }
0882 
0883 static void emac_rx_handler(void *token, int len, int status)
0884 {
0885     struct sk_buff      *skb = token;
0886     struct net_device   *ndev = skb->dev;
0887     struct emac_priv    *priv = netdev_priv(ndev);
0888     struct device       *emac_dev = &ndev->dev;
0889     int         ret;
0890 
0891     /* free and bail if we are shutting down */
0892     if (unlikely(!netif_running(ndev))) {
0893         dev_kfree_skb_any(skb);
0894         return;
0895     }
0896 
0897     /* recycle on receive error */
0898     if (status < 0) {
0899         ndev->stats.rx_errors++;
0900         goto recycle;
0901     }
0902 
0903     /* feed received packet up the stack */
0904     skb_put(skb, len);
0905     skb->protocol = eth_type_trans(skb, ndev);
0906     netif_receive_skb(skb);
0907     ndev->stats.rx_bytes += len;
0908     ndev->stats.rx_packets++;
0909 
0910     /* alloc a new packet for receive */
0911     skb = emac_rx_alloc(priv);
0912     if (!skb) {
0913         if (netif_msg_rx_err(priv) && net_ratelimit())
0914             dev_err(emac_dev, "failed rx buffer alloc\n");
0915         return;
0916     }
0917 
0918 recycle:
0919     ret = cpdma_chan_submit(priv->rxchan, skb, skb->data,
0920             skb_tailroom(skb), 0);
0921 
0922     WARN_ON(ret == -ENOMEM);
0923     if (unlikely(ret < 0))
0924         dev_kfree_skb_any(skb);
0925 }
0926 
0927 static void emac_tx_handler(void *token, int len, int status)
0928 {
0929     struct sk_buff      *skb = token;
0930     struct net_device   *ndev = skb->dev;
0931 
0932     /* Check whether the queue is stopped due to stalled tx dma, if the
0933      * queue is stopped then start the queue as we have free desc for tx
0934      */
0935     if (unlikely(netif_queue_stopped(ndev)))
0936         netif_wake_queue(ndev);
0937     ndev->stats.tx_packets++;
0938     ndev->stats.tx_bytes += len;
0939     dev_kfree_skb_any(skb);
0940 }
0941 
0942 /**
0943  * emac_dev_xmit - EMAC Transmit function
0944  * @skb: SKB pointer
0945  * @ndev: The DaVinci EMAC network adapter
0946  *
0947  * Called by the system to transmit a packet  - we queue the packet in
0948  * EMAC hardware transmit queue
0949  *
0950  * Returns success(NETDEV_TX_OK) or error code (typically out of desc's)
0951  */
0952 static int emac_dev_xmit(struct sk_buff *skb, struct net_device *ndev)
0953 {
0954     struct device *emac_dev = &ndev->dev;
0955     int ret_code;
0956     struct emac_priv *priv = netdev_priv(ndev);
0957 
0958     /* If no link, return */
0959     if (unlikely(!priv->link)) {
0960         if (netif_msg_tx_err(priv) && net_ratelimit())
0961             dev_err(emac_dev, "DaVinci EMAC: No link to transmit");
0962         goto fail_tx;
0963     }
0964 
0965     ret_code = skb_put_padto(skb, EMAC_DEF_MIN_ETHPKTSIZE);
0966     if (unlikely(ret_code < 0)) {
0967         if (netif_msg_tx_err(priv) && net_ratelimit())
0968             dev_err(emac_dev, "DaVinci EMAC: packet pad failed");
0969         goto fail_tx;
0970     }
0971 
0972     skb_tx_timestamp(skb);
0973 
0974     ret_code = cpdma_chan_submit(priv->txchan, skb, skb->data, skb->len,
0975                      0);
0976     if (unlikely(ret_code != 0)) {
0977         if (netif_msg_tx_err(priv) && net_ratelimit())
0978             dev_err(emac_dev, "DaVinci EMAC: desc submit failed");
0979         goto fail_tx;
0980     }
0981 
0982     /* If there is no more tx desc left free then we need to
0983      * tell the kernel to stop sending us tx frames.
0984      */
0985     if (unlikely(!cpdma_check_free_tx_desc(priv->txchan)))
0986         netif_stop_queue(ndev);
0987 
0988     return NETDEV_TX_OK;
0989 
0990 fail_tx:
0991     ndev->stats.tx_dropped++;
0992     netif_stop_queue(ndev);
0993     return NETDEV_TX_BUSY;
0994 }
0995 
0996 /**
0997  * emac_dev_tx_timeout - EMAC Transmit timeout function
0998  * @ndev: The DaVinci EMAC network adapter
0999  * @txqueue: the index of the hung transmit queue
1000  *
1001  * Called when system detects that a skb timeout period has expired
1002  * potentially due to a fault in the adapter in not being able to send
1003  * it out on the wire. We teardown the TX channel assuming a hardware
1004  * error and re-initialize the TX channel for hardware operation
1005  *
1006  */
1007 static void emac_dev_tx_timeout(struct net_device *ndev, unsigned int txqueue)
1008 {
1009     struct emac_priv *priv = netdev_priv(ndev);
1010     struct device *emac_dev = &ndev->dev;
1011 
1012     if (netif_msg_tx_err(priv))
1013         dev_err(emac_dev, "DaVinci EMAC: xmit timeout, restarting TX");
1014 
1015     ndev->stats.tx_errors++;
1016     emac_int_disable(priv);
1017     cpdma_chan_stop(priv->txchan);
1018     cpdma_chan_start(priv->txchan);
1019     emac_int_enable(priv);
1020 }
1021 
1022 /**
1023  * emac_set_type0addr - Set EMAC Type0 mac address
1024  * @priv: The DaVinci EMAC private adapter structure
1025  * @ch: RX channel number
1026  * @mac_addr: MAC address to set in device
1027  *
1028  * Called internally to set Type0 mac address of the adapter (Device)
1029  *
1030  * Returns success (0) or appropriate error code (none as of now)
1031  */
1032 static void emac_set_type0addr(struct emac_priv *priv, u32 ch, char *mac_addr)
1033 {
1034     u32 val;
1035     val = ((mac_addr[5] << 8) | (mac_addr[4]));
1036     emac_write(EMAC_MACSRCADDRLO, val);
1037 
1038     val = ((mac_addr[3] << 24) | (mac_addr[2] << 16) | \
1039            (mac_addr[1] << 8) | (mac_addr[0]));
1040     emac_write(EMAC_MACSRCADDRHI, val);
1041     val = emac_read(EMAC_RXUNICASTSET);
1042     val |= BIT(ch);
1043     emac_write(EMAC_RXUNICASTSET, val);
1044     val = emac_read(EMAC_RXUNICASTCLEAR);
1045     val &= ~BIT(ch);
1046     emac_write(EMAC_RXUNICASTCLEAR, val);
1047 }
1048 
1049 /**
1050  * emac_set_type1addr - Set EMAC Type1 mac address
1051  * @priv: The DaVinci EMAC private adapter structure
1052  * @ch: RX channel number
1053  * @mac_addr: MAC address to set in device
1054  *
1055  * Called internally to set Type1 mac address of the adapter (Device)
1056  *
1057  * Returns success (0) or appropriate error code (none as of now)
1058  */
1059 static void emac_set_type1addr(struct emac_priv *priv, u32 ch, char *mac_addr)
1060 {
1061     u32 val;
1062     emac_write(EMAC_MACINDEX, ch);
1063     val = ((mac_addr[5] << 8) | mac_addr[4]);
1064     emac_write(EMAC_MACADDRLO, val);
1065     val = ((mac_addr[3] << 24) | (mac_addr[2] << 16) | \
1066            (mac_addr[1] << 8) | (mac_addr[0]));
1067     emac_write(EMAC_MACADDRHI, val);
1068     emac_set_type0addr(priv, ch, mac_addr);
1069 }
1070 
1071 /**
1072  * emac_set_type2addr - Set EMAC Type2 mac address
1073  * @priv: The DaVinci EMAC private adapter structure
1074  * @ch: RX channel number
1075  * @mac_addr: MAC address to set in device
1076  * @index: index into RX address entries
1077  * @match: match parameter for RX address matching logic
1078  *
1079  * Called internally to set Type2 mac address of the adapter (Device)
1080  *
1081  * Returns success (0) or appropriate error code (none as of now)
1082  */
1083 static void emac_set_type2addr(struct emac_priv *priv, u32 ch,
1084                    char *mac_addr, int index, int match)
1085 {
1086     u32 val;
1087     emac_write(EMAC_MACINDEX, index);
1088     val = ((mac_addr[3] << 24) | (mac_addr[2] << 16) | \
1089            (mac_addr[1] << 8) | (mac_addr[0]));
1090     emac_write(EMAC_MACADDRHI, val);
1091     val = ((mac_addr[5] << 8) | mac_addr[4] | ((ch & 0x7) << 16) | \
1092            (match << 19) | BIT(20));
1093     emac_write(EMAC_MACADDRLO, val);
1094     emac_set_type0addr(priv, ch, mac_addr);
1095 }
1096 
1097 /**
1098  * emac_setmac - Set mac address in the adapter (internal function)
1099  * @priv: The DaVinci EMAC private adapter structure
1100  * @ch: RX channel number
1101  * @mac_addr: MAC address to set in device
1102  *
1103  * Called internally to set the mac address of the adapter (Device)
1104  *
1105  * Returns success (0) or appropriate error code (none as of now)
1106  */
1107 static void emac_setmac(struct emac_priv *priv, u32 ch, char *mac_addr)
1108 {
1109     struct device *emac_dev = &priv->ndev->dev;
1110 
1111     if (priv->rx_addr_type == 0) {
1112         emac_set_type0addr(priv, ch, mac_addr);
1113     } else if (priv->rx_addr_type == 1) {
1114         u32 cnt;
1115         for (cnt = 0; cnt < EMAC_MAX_TXRX_CHANNELS; cnt++)
1116             emac_set_type1addr(priv, ch, mac_addr);
1117     } else if (priv->rx_addr_type == 2) {
1118         emac_set_type2addr(priv, ch, mac_addr, ch, 1);
1119         emac_set_type0addr(priv, ch, mac_addr);
1120     } else {
1121         if (netif_msg_drv(priv))
1122             dev_err(emac_dev, "DaVinci EMAC: Wrong addressing\n");
1123     }
1124 }
1125 
1126 /**
1127  * emac_dev_setmac_addr - Set mac address in the adapter
1128  * @ndev: The DaVinci EMAC network adapter
1129  * @addr: MAC address to set in device
1130  *
1131  * Called by the system to set the mac address of the adapter (Device)
1132  *
1133  * Returns success (0) or appropriate error code (none as of now)
1134  */
1135 static int emac_dev_setmac_addr(struct net_device *ndev, void *addr)
1136 {
1137     struct emac_priv *priv = netdev_priv(ndev);
1138     struct device *emac_dev = &priv->ndev->dev;
1139     struct sockaddr *sa = addr;
1140 
1141     if (!is_valid_ether_addr(sa->sa_data))
1142         return -EADDRNOTAVAIL;
1143 
1144     /* Store mac addr in priv and rx channel and set it in EMAC hw */
1145     memcpy(priv->mac_addr, sa->sa_data, ndev->addr_len);
1146     eth_hw_addr_set(ndev, sa->sa_data);
1147 
1148     /* MAC address is configured only after the interface is enabled. */
1149     if (netif_running(ndev)) {
1150         emac_setmac(priv, EMAC_DEF_RX_CH, priv->mac_addr);
1151     }
1152 
1153     if (netif_msg_drv(priv))
1154         dev_notice(emac_dev, "DaVinci EMAC: emac_dev_setmac_addr %pM\n",
1155                     priv->mac_addr);
1156 
1157     return 0;
1158 }
1159 
1160 /**
1161  * emac_hw_enable - Enable EMAC hardware for packet transmission/reception
1162  * @priv: The DaVinci EMAC private adapter structure
1163  *
1164  * Enables EMAC hardware for packet processing - enables PHY, enables RX
1165  * for packet reception and enables device interrupts and then NAPI
1166  *
1167  * Returns success (0) or appropriate error code (none right now)
1168  */
1169 static int emac_hw_enable(struct emac_priv *priv)
1170 {
1171     u32 val, mbp_enable, mac_control;
1172 
1173     /* Soft reset */
1174     emac_write(EMAC_SOFTRESET, 1);
1175     while (emac_read(EMAC_SOFTRESET))
1176         cpu_relax();
1177 
1178     /* Disable interrupt & Set pacing for more interrupts initially */
1179     emac_int_disable(priv);
1180 
1181     /* Full duplex enable bit set when auto negotiation happens */
1182     mac_control =
1183         (((EMAC_DEF_TXPRIO_FIXED) ? (EMAC_MACCONTROL_TXPTYPE) : 0x0) |
1184         ((priv->speed == 1000) ? EMAC_MACCONTROL_GIGABITEN : 0x0) |
1185         ((EMAC_DEF_TXPACING_EN) ? (EMAC_MACCONTROL_TXPACEEN) : 0x0) |
1186         ((priv->duplex == DUPLEX_FULL) ? 0x1 : 0));
1187     emac_write(EMAC_MACCONTROL, mac_control);
1188 
1189     mbp_enable =
1190         (((EMAC_DEF_PASS_CRC) ? (EMAC_RXMBP_PASSCRC_MASK) : 0x0) |
1191         ((EMAC_DEF_QOS_EN) ? (EMAC_RXMBP_QOSEN_MASK) : 0x0) |
1192          ((EMAC_DEF_NO_BUFF_CHAIN) ? (EMAC_RXMBP_NOCHAIN_MASK) : 0x0) |
1193          ((EMAC_DEF_MACCTRL_FRAME_EN) ? (EMAC_RXMBP_CMFEN_MASK) : 0x0) |
1194          ((EMAC_DEF_SHORT_FRAME_EN) ? (EMAC_RXMBP_CSFEN_MASK) : 0x0) |
1195          ((EMAC_DEF_ERROR_FRAME_EN) ? (EMAC_RXMBP_CEFEN_MASK) : 0x0) |
1196          ((EMAC_DEF_PROM_EN) ? (EMAC_RXMBP_CAFEN_MASK) : 0x0) |
1197          ((EMAC_DEF_PROM_CH & EMAC_RXMBP_CHMASK) << \
1198             EMAC_RXMBP_PROMCH_SHIFT) |
1199          ((EMAC_DEF_BCAST_EN) ? (EMAC_RXMBP_BROADEN_MASK) : 0x0) |
1200          ((EMAC_DEF_BCAST_CH & EMAC_RXMBP_CHMASK) << \
1201             EMAC_RXMBP_BROADCH_SHIFT) |
1202          ((EMAC_DEF_MCAST_EN) ? (EMAC_RXMBP_MULTIEN_MASK) : 0x0) |
1203          ((EMAC_DEF_MCAST_CH & EMAC_RXMBP_CHMASK) << \
1204             EMAC_RXMBP_MULTICH_SHIFT));
1205     emac_write(EMAC_RXMBPENABLE, mbp_enable);
1206     emac_write(EMAC_RXMAXLEN, (EMAC_DEF_MAX_FRAME_SIZE &
1207                    EMAC_RX_MAX_LEN_MASK));
1208     emac_write(EMAC_RXBUFFEROFFSET, (EMAC_DEF_BUFFER_OFFSET &
1209                      EMAC_RX_BUFFER_OFFSET_MASK));
1210     emac_write(EMAC_RXFILTERLOWTHRESH, 0);
1211     emac_write(EMAC_RXUNICASTCLEAR, EMAC_RX_UNICAST_CLEAR_ALL);
1212     priv->rx_addr_type = (emac_read(EMAC_MACCONFIG) >> 8) & 0xFF;
1213 
1214     emac_write(EMAC_MACINTMASKSET, EMAC_MAC_HOST_ERR_INTMASK_VAL);
1215 
1216     emac_setmac(priv, EMAC_DEF_RX_CH, priv->mac_addr);
1217 
1218     /* Enable MII */
1219     val = emac_read(EMAC_MACCONTROL);
1220     val |= (EMAC_MACCONTROL_GMIIEN);
1221     emac_write(EMAC_MACCONTROL, val);
1222 
1223     /* Enable NAPI and interrupts */
1224     napi_enable(&priv->napi);
1225     emac_int_enable(priv);
1226     return 0;
1227 
1228 }
1229 
1230 /**
1231  * emac_poll - EMAC NAPI Poll function
1232  * @napi: pointer to the napi_struct containing The DaVinci EMAC network adapter
1233  * @budget: Number of receive packets to process (as told by NAPI layer)
1234  *
1235  * NAPI Poll function implemented to process packets as per budget. We check
1236  * the type of interrupt on the device and accordingly call the TX or RX
1237  * packet processing functions. We follow the budget for RX processing and
1238  * also put a cap on number of TX pkts processed through config param. The
1239  * NAPI schedule function is called if more packets pending.
1240  *
1241  * Returns number of packets received (in most cases; else TX pkts - rarely)
1242  */
1243 static int emac_poll(struct napi_struct *napi, int budget)
1244 {
1245     unsigned int mask;
1246     struct emac_priv *priv = container_of(napi, struct emac_priv, napi);
1247     struct net_device *ndev = priv->ndev;
1248     struct device *emac_dev = &ndev->dev;
1249     u32 status = 0;
1250     u32 num_rx_pkts = 0;
1251 
1252     /* Check interrupt vectors and call packet processing */
1253     status = emac_read(EMAC_MACINVECTOR);
1254 
1255     mask = EMAC_DM644X_MAC_IN_VECTOR_TX_INT_VEC;
1256 
1257     if (priv->version == EMAC_VERSION_2)
1258         mask = EMAC_DM646X_MAC_IN_VECTOR_TX_INT_VEC;
1259 
1260     if (status & mask) {
1261         cpdma_chan_process(priv->txchan, EMAC_DEF_TX_MAX_SERVICE);
1262     } /* TX processing */
1263 
1264     mask = EMAC_DM644X_MAC_IN_VECTOR_RX_INT_VEC;
1265 
1266     if (priv->version == EMAC_VERSION_2)
1267         mask = EMAC_DM646X_MAC_IN_VECTOR_RX_INT_VEC;
1268 
1269     if (status & mask) {
1270         num_rx_pkts = cpdma_chan_process(priv->rxchan, budget);
1271     } /* RX processing */
1272 
1273     mask = EMAC_DM644X_MAC_IN_VECTOR_HOST_INT;
1274     if (priv->version == EMAC_VERSION_2)
1275         mask = EMAC_DM646X_MAC_IN_VECTOR_HOST_INT;
1276 
1277     if (unlikely(status & mask)) {
1278         u32 ch, cause;
1279         dev_err(emac_dev, "DaVinci EMAC: Fatal Hardware Error\n");
1280         netif_stop_queue(ndev);
1281         napi_disable(&priv->napi);
1282 
1283         status = emac_read(EMAC_MACSTATUS);
1284         cause = ((status & EMAC_MACSTATUS_TXERRCODE_MASK) >>
1285              EMAC_MACSTATUS_TXERRCODE_SHIFT);
1286         if (cause) {
1287             ch = ((status & EMAC_MACSTATUS_TXERRCH_MASK) >>
1288                   EMAC_MACSTATUS_TXERRCH_SHIFT);
1289             if (net_ratelimit()) {
1290                 dev_err(emac_dev, "TX Host error %s on ch=%d\n",
1291                     &emac_txhost_errcodes[cause][0], ch);
1292             }
1293         }
1294         cause = ((status & EMAC_MACSTATUS_RXERRCODE_MASK) >>
1295              EMAC_MACSTATUS_RXERRCODE_SHIFT);
1296         if (cause) {
1297             ch = ((status & EMAC_MACSTATUS_RXERRCH_MASK) >>
1298                   EMAC_MACSTATUS_RXERRCH_SHIFT);
1299             if (netif_msg_hw(priv) && net_ratelimit())
1300                 dev_err(emac_dev, "RX Host error %s on ch=%d\n",
1301                     &emac_rxhost_errcodes[cause][0], ch);
1302         }
1303     } else if (num_rx_pkts < budget) {
1304         napi_complete_done(napi, num_rx_pkts);
1305         emac_int_enable(priv);
1306     }
1307 
1308     return num_rx_pkts;
1309 }
1310 
1311 #ifdef CONFIG_NET_POLL_CONTROLLER
1312 /**
1313  * emac_poll_controller - EMAC Poll controller function
1314  * @ndev: The DaVinci EMAC network adapter
1315  *
1316  * Polled functionality used by netconsole and others in non interrupt mode
1317  *
1318  */
1319 static void emac_poll_controller(struct net_device *ndev)
1320 {
1321     struct emac_priv *priv = netdev_priv(ndev);
1322 
1323     emac_int_disable(priv);
1324     emac_irq(ndev->irq, ndev);
1325     emac_int_enable(priv);
1326 }
1327 #endif
1328 
1329 static void emac_adjust_link(struct net_device *ndev)
1330 {
1331     struct emac_priv *priv = netdev_priv(ndev);
1332     struct phy_device *phydev = ndev->phydev;
1333     unsigned long flags;
1334     int new_state = 0;
1335 
1336     spin_lock_irqsave(&priv->lock, flags);
1337 
1338     if (phydev->link) {
1339         /* check the mode of operation - full/half duplex */
1340         if (phydev->duplex != priv->duplex) {
1341             new_state = 1;
1342             priv->duplex = phydev->duplex;
1343         }
1344         if (phydev->speed != priv->speed) {
1345             new_state = 1;
1346             priv->speed = phydev->speed;
1347         }
1348         if (!priv->link) {
1349             new_state = 1;
1350             priv->link = 1;
1351         }
1352 
1353     } else if (priv->link) {
1354         new_state = 1;
1355         priv->link = 0;
1356         priv->speed = 0;
1357         priv->duplex = ~0;
1358     }
1359     if (new_state) {
1360         emac_update_phystatus(priv);
1361         phy_print_status(ndev->phydev);
1362     }
1363 
1364     spin_unlock_irqrestore(&priv->lock, flags);
1365 }
1366 
1367 /*************************************************************************
1368  *  Linux Driver Model
1369  *************************************************************************/
1370 
1371 /**
1372  * emac_devioctl - EMAC adapter ioctl
1373  * @ndev: The DaVinci EMAC network adapter
1374  * @ifrq: request parameter
1375  * @cmd: command parameter
1376  *
1377  * EMAC driver ioctl function
1378  *
1379  * Returns success(0) or appropriate error code
1380  */
1381 static int emac_devioctl(struct net_device *ndev, struct ifreq *ifrq, int cmd)
1382 {
1383     if (!(netif_running(ndev)))
1384         return -EINVAL;
1385 
1386     /* TODO: Add phy read and write and private statistics get feature */
1387 
1388     if (ndev->phydev)
1389         return phy_mii_ioctl(ndev->phydev, ifrq, cmd);
1390     else
1391         return -EOPNOTSUPP;
1392 }
1393 
1394 static int match_first_device(struct device *dev, const void *data)
1395 {
1396     if (dev->parent && dev->parent->of_node)
1397         return of_device_is_compatible(dev->parent->of_node,
1398                            "ti,davinci_mdio");
1399 
1400     return !strncmp(dev_name(dev), "davinci_mdio", 12);
1401 }
1402 
1403 /**
1404  * emac_dev_open - EMAC device open
1405  * @ndev: The DaVinci EMAC network adapter
1406  *
1407  * Called when system wants to start the interface. We init TX/RX channels
1408  * and enable the hardware for packet reception/transmission and start the
1409  * network queue.
1410  *
1411  * Returns 0 for a successful open, or appropriate error code
1412  */
1413 static int emac_dev_open(struct net_device *ndev)
1414 {
1415     struct device *emac_dev = &ndev->dev;
1416     struct resource *res;
1417     int q, m, ret;
1418     int res_num = 0, irq_num = 0;
1419     int i = 0;
1420     struct emac_priv *priv = netdev_priv(ndev);
1421     struct phy_device *phydev = NULL;
1422     struct device *phy = NULL;
1423 
1424     ret = pm_runtime_resume_and_get(&priv->pdev->dev);
1425     if (ret < 0) {
1426         dev_err(&priv->pdev->dev, "%s: failed to get_sync(%d)\n",
1427             __func__, ret);
1428         return ret;
1429     }
1430 
1431     netif_carrier_off(ndev);
1432     eth_hw_addr_set(ndev, priv->mac_addr);
1433 
1434     /* Configuration items */
1435     priv->rx_buf_size = EMAC_DEF_MAX_FRAME_SIZE + NET_IP_ALIGN;
1436 
1437     priv->mac_hash1 = 0;
1438     priv->mac_hash2 = 0;
1439     emac_write(EMAC_MACHASH1, 0);
1440     emac_write(EMAC_MACHASH2, 0);
1441 
1442     for (i = 0; i < EMAC_DEF_RX_NUM_DESC; i++) {
1443         struct sk_buff *skb = emac_rx_alloc(priv);
1444 
1445         if (!skb)
1446             break;
1447 
1448         ret = cpdma_chan_idle_submit(priv->rxchan, skb, skb->data,
1449                          skb_tailroom(skb), 0);
1450         if (WARN_ON(ret < 0))
1451             break;
1452     }
1453 
1454     /* Request IRQ */
1455     if (dev_of_node(&priv->pdev->dev)) {
1456         while ((ret = platform_get_irq_optional(priv->pdev, res_num)) != -ENXIO) {
1457             if (ret < 0)
1458                 goto rollback;
1459 
1460             ret = request_irq(ret, emac_irq, 0, ndev->name, ndev);
1461             if (ret) {
1462                 dev_err(emac_dev, "DaVinci EMAC: request_irq() failed\n");
1463                 goto rollback;
1464             }
1465             res_num++;
1466         }
1467     } else {
1468         while ((res = platform_get_resource(priv->pdev, IORESOURCE_IRQ, res_num))) {
1469             for (irq_num = res->start; irq_num <= res->end; irq_num++) {
1470                 ret = request_irq(irq_num, emac_irq, 0, ndev->name, ndev);
1471                 if (ret) {
1472                     dev_err(emac_dev, "DaVinci EMAC: request_irq() failed\n");
1473                     goto rollback;
1474                 }
1475             }
1476             res_num++;
1477         }
1478         /* prepare counters for rollback in case of an error */
1479         res_num--;
1480         irq_num--;
1481     }
1482 
1483     /* Start/Enable EMAC hardware */
1484     emac_hw_enable(priv);
1485 
1486     /* Enable Interrupt pacing if configured */
1487     if (priv->coal_intvl != 0) {
1488         struct ethtool_coalesce coal;
1489 
1490         coal.rx_coalesce_usecs = (priv->coal_intvl << 4);
1491         emac_set_coalesce(ndev, &coal, NULL, NULL);
1492     }
1493 
1494     cpdma_ctlr_start(priv->dma);
1495 
1496     if (priv->phy_node) {
1497         phydev = of_phy_connect(ndev, priv->phy_node,
1498                     &emac_adjust_link, 0, 0);
1499         if (!phydev) {
1500             dev_err(emac_dev, "could not connect to phy %pOF\n",
1501                 priv->phy_node);
1502             ret = -ENODEV;
1503             goto err;
1504         }
1505     }
1506 
1507     /* use the first phy on the bus if pdata did not give us a phy id */
1508     if (!phydev && !priv->phy_id) {
1509         /* NOTE: we can't use bus_find_device_by_name() here because
1510          * the device name is not guaranteed to be 'davinci_mdio'. On
1511          * some systems it can be 'davinci_mdio.0' so we need to use
1512          * strncmp() against the first part of the string to correctly
1513          * match it.
1514          */
1515         phy = bus_find_device(&mdio_bus_type, NULL, NULL,
1516                       match_first_device);
1517         if (phy) {
1518             priv->phy_id = dev_name(phy);
1519             if (!priv->phy_id || !*priv->phy_id)
1520                 put_device(phy);
1521         }
1522     }
1523 
1524     if (!phydev && priv->phy_id && *priv->phy_id) {
1525         phydev = phy_connect(ndev, priv->phy_id,
1526                      &emac_adjust_link,
1527                      PHY_INTERFACE_MODE_MII);
1528         put_device(phy);    /* reference taken by bus_find_device */
1529         if (IS_ERR(phydev)) {
1530             dev_err(emac_dev, "could not connect to phy %s\n",
1531                 priv->phy_id);
1532             ret = PTR_ERR(phydev);
1533             goto err;
1534         }
1535 
1536         priv->link = 0;
1537         priv->speed = 0;
1538         priv->duplex = ~0;
1539 
1540         phy_attached_info(phydev);
1541     }
1542 
1543     if (!phydev) {
1544         /* No PHY , fix the link, speed and duplex settings */
1545         dev_notice(emac_dev, "no phy, defaulting to 100/full\n");
1546         priv->link = 1;
1547         priv->speed = SPEED_100;
1548         priv->duplex = DUPLEX_FULL;
1549         emac_update_phystatus(priv);
1550     }
1551 
1552     if (netif_msg_drv(priv))
1553         dev_notice(emac_dev, "DaVinci EMAC: Opened %s\n", ndev->name);
1554 
1555     if (phydev)
1556         phy_start(phydev);
1557 
1558     return 0;
1559 
1560 err:
1561     emac_int_disable(priv);
1562     napi_disable(&priv->napi);
1563 
1564 rollback:
1565     if (dev_of_node(&priv->pdev->dev)) {
1566         for (q = res_num - 1; q >= 0; q--) {
1567             irq_num = platform_get_irq(priv->pdev, q);
1568             if (irq_num > 0)
1569                 free_irq(irq_num, ndev);
1570         }
1571     } else {
1572         for (q = res_num; q >= 0; q--) {
1573             res = platform_get_resource(priv->pdev, IORESOURCE_IRQ, q);
1574             /* at the first iteration, irq_num is already set to the
1575              * right value
1576              */
1577             if (q != res_num)
1578                 irq_num = res->end;
1579 
1580             for (m = irq_num; m >= res->start; m--)
1581                 free_irq(m, ndev);
1582         }
1583     }
1584     cpdma_ctlr_stop(priv->dma);
1585     pm_runtime_put(&priv->pdev->dev);
1586     return ret;
1587 }
1588 
1589 /**
1590  * emac_dev_stop - EMAC device stop
1591  * @ndev: The DaVinci EMAC network adapter
1592  *
1593  * Called when system wants to stop or down the interface. We stop the network
1594  * queue, disable interrupts and cleanup TX/RX channels.
1595  *
1596  * We return the statistics in net_device_stats structure pulled from emac
1597  */
1598 static int emac_dev_stop(struct net_device *ndev)
1599 {
1600     struct resource *res;
1601     int i = 0;
1602     int irq_num;
1603     struct emac_priv *priv = netdev_priv(ndev);
1604     struct device *emac_dev = &ndev->dev;
1605     int ret = 0;
1606 
1607     /* inform the upper layers. */
1608     netif_stop_queue(ndev);
1609     napi_disable(&priv->napi);
1610 
1611     netif_carrier_off(ndev);
1612     emac_int_disable(priv);
1613     cpdma_ctlr_stop(priv->dma);
1614     emac_write(EMAC_SOFTRESET, 1);
1615 
1616     if (ndev->phydev)
1617         phy_disconnect(ndev->phydev);
1618 
1619     /* Free IRQ */
1620     if (dev_of_node(&priv->pdev->dev)) {
1621         do {
1622             ret = platform_get_irq_optional(priv->pdev, i);
1623             if (ret < 0 && ret != -ENXIO)
1624                 break;
1625             if (ret > 0) {
1626                 free_irq(ret, priv->ndev);
1627             } else {
1628                 ret = 0;
1629                 break;
1630             }
1631         } while (++i);
1632     } else {
1633         while ((res = platform_get_resource(priv->pdev, IORESOURCE_IRQ, i))) {
1634             for (irq_num = res->start; irq_num <= res->end; irq_num++)
1635                 free_irq(irq_num, priv->ndev);
1636             i++;
1637         }
1638     }
1639 
1640     if (netif_msg_drv(priv))
1641         dev_notice(emac_dev, "DaVinci EMAC: %s stopped\n", ndev->name);
1642 
1643     pm_runtime_put(&priv->pdev->dev);
1644     return ret;
1645 }
1646 
1647 /**
1648  * emac_dev_getnetstats - EMAC get statistics function
1649  * @ndev: The DaVinci EMAC network adapter
1650  *
1651  * Called when system wants to get statistics from the device.
1652  *
1653  * We return the statistics in net_device_stats structure pulled from emac
1654  */
1655 static struct net_device_stats *emac_dev_getnetstats(struct net_device *ndev)
1656 {
1657     struct emac_priv *priv = netdev_priv(ndev);
1658     u32 mac_control;
1659     u32 stats_clear_mask;
1660     int err;
1661 
1662     err = pm_runtime_resume_and_get(&priv->pdev->dev);
1663     if (err < 0) {
1664         dev_err(&priv->pdev->dev, "%s: failed to get_sync(%d)\n",
1665             __func__, err);
1666         return &ndev->stats;
1667     }
1668 
1669     /* update emac hardware stats and reset the registers*/
1670 
1671     mac_control = emac_read(EMAC_MACCONTROL);
1672 
1673     if (mac_control & EMAC_MACCONTROL_GMIIEN)
1674         stats_clear_mask = EMAC_STATS_CLR_MASK;
1675     else
1676         stats_clear_mask = 0;
1677 
1678     ndev->stats.multicast += emac_read(EMAC_RXMCASTFRAMES);
1679     emac_write(EMAC_RXMCASTFRAMES, stats_clear_mask);
1680 
1681     ndev->stats.collisions += (emac_read(EMAC_TXCOLLISION) +
1682                        emac_read(EMAC_TXSINGLECOLL) +
1683                        emac_read(EMAC_TXMULTICOLL));
1684     emac_write(EMAC_TXCOLLISION, stats_clear_mask);
1685     emac_write(EMAC_TXSINGLECOLL, stats_clear_mask);
1686     emac_write(EMAC_TXMULTICOLL, stats_clear_mask);
1687 
1688     ndev->stats.rx_length_errors += (emac_read(EMAC_RXOVERSIZED) +
1689                         emac_read(EMAC_RXJABBER) +
1690                         emac_read(EMAC_RXUNDERSIZED));
1691     emac_write(EMAC_RXOVERSIZED, stats_clear_mask);
1692     emac_write(EMAC_RXJABBER, stats_clear_mask);
1693     emac_write(EMAC_RXUNDERSIZED, stats_clear_mask);
1694 
1695     ndev->stats.rx_over_errors += (emac_read(EMAC_RXSOFOVERRUNS) +
1696                            emac_read(EMAC_RXMOFOVERRUNS));
1697     emac_write(EMAC_RXSOFOVERRUNS, stats_clear_mask);
1698     emac_write(EMAC_RXMOFOVERRUNS, stats_clear_mask);
1699 
1700     ndev->stats.rx_fifo_errors += emac_read(EMAC_RXDMAOVERRUNS);
1701     emac_write(EMAC_RXDMAOVERRUNS, stats_clear_mask);
1702 
1703     ndev->stats.tx_carrier_errors +=
1704         emac_read(EMAC_TXCARRIERSENSE);
1705     emac_write(EMAC_TXCARRIERSENSE, stats_clear_mask);
1706 
1707     ndev->stats.tx_fifo_errors += emac_read(EMAC_TXUNDERRUN);
1708     emac_write(EMAC_TXUNDERRUN, stats_clear_mask);
1709 
1710     pm_runtime_put(&priv->pdev->dev);
1711 
1712     return &ndev->stats;
1713 }
1714 
1715 static const struct net_device_ops emac_netdev_ops = {
1716     .ndo_open       = emac_dev_open,
1717     .ndo_stop       = emac_dev_stop,
1718     .ndo_start_xmit     = emac_dev_xmit,
1719     .ndo_set_rx_mode    = emac_dev_mcast_set,
1720     .ndo_set_mac_address    = emac_dev_setmac_addr,
1721     .ndo_eth_ioctl      = emac_devioctl,
1722     .ndo_tx_timeout     = emac_dev_tx_timeout,
1723     .ndo_get_stats      = emac_dev_getnetstats,
1724 #ifdef CONFIG_NET_POLL_CONTROLLER
1725     .ndo_poll_controller    = emac_poll_controller,
1726 #endif
1727 };
1728 
1729 static const struct of_device_id davinci_emac_of_match[];
1730 
1731 static struct emac_platform_data *
1732 davinci_emac_of_get_pdata(struct platform_device *pdev, struct emac_priv *priv)
1733 {
1734     struct device_node *np;
1735     const struct of_device_id *match;
1736     const struct emac_platform_data *auxdata;
1737     struct emac_platform_data *pdata = NULL;
1738 
1739     if (!IS_ENABLED(CONFIG_OF) || !pdev->dev.of_node)
1740         return dev_get_platdata(&pdev->dev);
1741 
1742     pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
1743     if (!pdata)
1744         return NULL;
1745 
1746     np = pdev->dev.of_node;
1747     pdata->version = EMAC_VERSION_2;
1748 
1749     if (!is_valid_ether_addr(pdata->mac_addr))
1750         of_get_mac_address(np, pdata->mac_addr);
1751 
1752     of_property_read_u32(np, "ti,davinci-ctrl-reg-offset",
1753                  &pdata->ctrl_reg_offset);
1754 
1755     of_property_read_u32(np, "ti,davinci-ctrl-mod-reg-offset",
1756                  &pdata->ctrl_mod_reg_offset);
1757 
1758     of_property_read_u32(np, "ti,davinci-ctrl-ram-offset",
1759                  &pdata->ctrl_ram_offset);
1760 
1761     of_property_read_u32(np, "ti,davinci-ctrl-ram-size",
1762                  &pdata->ctrl_ram_size);
1763 
1764     of_property_read_u8(np, "ti,davinci-rmii-en", &pdata->rmii_en);
1765 
1766     pdata->no_bd_ram = of_property_read_bool(np, "ti,davinci-no-bd-ram");
1767 
1768     priv->phy_node = of_parse_phandle(np, "phy-handle", 0);
1769     if (!priv->phy_node) {
1770         if (!of_phy_is_fixed_link(np))
1771             pdata->phy_id = NULL;
1772         else if (of_phy_register_fixed_link(np) >= 0)
1773             priv->phy_node = of_node_get(np);
1774     }
1775 
1776     auxdata = pdev->dev.platform_data;
1777     if (auxdata) {
1778         pdata->interrupt_enable = auxdata->interrupt_enable;
1779         pdata->interrupt_disable = auxdata->interrupt_disable;
1780     }
1781 
1782     match = of_match_device(davinci_emac_of_match, &pdev->dev);
1783     if (match && match->data) {
1784         auxdata = match->data;
1785         pdata->version = auxdata->version;
1786         pdata->hw_ram_addr = auxdata->hw_ram_addr;
1787     }
1788 
1789     return  pdata;
1790 }
1791 
1792 static int davinci_emac_try_get_mac(struct platform_device *pdev,
1793                     int instance, u8 *mac_addr)
1794 {
1795     if (!pdev->dev.of_node)
1796         return -EINVAL;
1797 
1798     return ti_cm_get_macid(&pdev->dev, instance, mac_addr);
1799 }
1800 
1801 /**
1802  * davinci_emac_probe - EMAC device probe
1803  * @pdev: The DaVinci EMAC device that we are removing
1804  *
1805  * Called when probing for emac devicesr. We get details of instances and
1806  * resource information from platform init and register a network device
1807  * and allocate resources necessary for driver to perform
1808  */
1809 static int davinci_emac_probe(struct platform_device *pdev)
1810 {
1811     struct device_node *np = pdev->dev.of_node;
1812     int rc = 0;
1813     struct resource *res, *res_ctrl;
1814     struct net_device *ndev;
1815     struct emac_priv *priv;
1816     unsigned long hw_ram_addr;
1817     struct emac_platform_data *pdata;
1818     struct cpdma_params dma_params;
1819     struct clk *emac_clk;
1820     unsigned long emac_bus_frequency;
1821 
1822 
1823     /* obtain emac clock from kernel */
1824     emac_clk = devm_clk_get(&pdev->dev, NULL);
1825     if (IS_ERR(emac_clk)) {
1826         dev_err(&pdev->dev, "failed to get EMAC clock\n");
1827         return -EBUSY;
1828     }
1829     emac_bus_frequency = clk_get_rate(emac_clk);
1830     devm_clk_put(&pdev->dev, emac_clk);
1831 
1832     /* TODO: Probe PHY here if possible */
1833 
1834     ndev = alloc_etherdev(sizeof(struct emac_priv));
1835     if (!ndev)
1836         return -ENOMEM;
1837 
1838     platform_set_drvdata(pdev, ndev);
1839     priv = netdev_priv(ndev);
1840     priv->pdev = pdev;
1841     priv->ndev = ndev;
1842     priv->msg_enable = netif_msg_init(debug_level, DAVINCI_EMAC_DEBUG);
1843 
1844     spin_lock_init(&priv->lock);
1845 
1846     pdata = davinci_emac_of_get_pdata(pdev, priv);
1847     if (!pdata) {
1848         dev_err(&pdev->dev, "no platform data\n");
1849         rc = -ENODEV;
1850         goto err_free_netdev;
1851     }
1852 
1853     /* MAC addr and PHY mask , RMII enable info from platform_data */
1854     memcpy(priv->mac_addr, pdata->mac_addr, ETH_ALEN);
1855     priv->phy_id = pdata->phy_id;
1856     priv->rmii_en = pdata->rmii_en;
1857     priv->version = pdata->version;
1858     priv->int_enable = pdata->interrupt_enable;
1859     priv->int_disable = pdata->interrupt_disable;
1860 
1861     priv->coal_intvl = 0;
1862     priv->bus_freq_mhz = (u32)(emac_bus_frequency / 1000000);
1863 
1864     /* Get EMAC platform data */
1865     priv->remap_addr = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
1866     if (IS_ERR(priv->remap_addr)) {
1867         rc = PTR_ERR(priv->remap_addr);
1868         goto no_pdata;
1869     }
1870     priv->emac_base_phys = res->start + pdata->ctrl_reg_offset;
1871 
1872     res_ctrl = platform_get_resource(pdev, IORESOURCE_MEM, 1);
1873     if (res_ctrl) {
1874         priv->ctrl_base =
1875             devm_ioremap_resource(&pdev->dev, res_ctrl);
1876         if (IS_ERR(priv->ctrl_base)) {
1877             rc = PTR_ERR(priv->ctrl_base);
1878             goto no_pdata;
1879         }
1880     } else {
1881         priv->ctrl_base = priv->remap_addr + pdata->ctrl_mod_reg_offset;
1882     }
1883 
1884     priv->emac_base = priv->remap_addr + pdata->ctrl_reg_offset;
1885     ndev->base_addr = (unsigned long)priv->remap_addr;
1886 
1887     hw_ram_addr = pdata->hw_ram_addr;
1888     if (!hw_ram_addr)
1889         hw_ram_addr = (u32 __force)res->start + pdata->ctrl_ram_offset;
1890 
1891     memset(&dma_params, 0, sizeof(dma_params));
1892     dma_params.dev          = &pdev->dev;
1893     dma_params.dmaregs      = priv->emac_base;
1894     dma_params.rxthresh     = priv->emac_base + 0x120;
1895     dma_params.rxfree       = priv->emac_base + 0x140;
1896     dma_params.txhdp        = priv->emac_base + 0x600;
1897     dma_params.rxhdp        = priv->emac_base + 0x620;
1898     dma_params.txcp         = priv->emac_base + 0x640;
1899     dma_params.rxcp         = priv->emac_base + 0x660;
1900     dma_params.num_chan     = EMAC_MAX_TXRX_CHANNELS;
1901     dma_params.min_packet_size  = EMAC_DEF_MIN_ETHPKTSIZE;
1902     dma_params.desc_hw_addr     = hw_ram_addr;
1903     dma_params.desc_mem_size    = pdata->ctrl_ram_size;
1904     dma_params.desc_align       = 16;
1905 
1906     dma_params.desc_mem_phys = pdata->no_bd_ram ? 0 :
1907             (u32 __force)res->start + pdata->ctrl_ram_offset;
1908 
1909     priv->dma = cpdma_ctlr_create(&dma_params);
1910     if (!priv->dma) {
1911         dev_err(&pdev->dev, "error initializing DMA\n");
1912         rc = -ENOMEM;
1913         goto no_pdata;
1914     }
1915 
1916     priv->txchan = cpdma_chan_create(priv->dma, EMAC_DEF_TX_CH,
1917                      emac_tx_handler, 0);
1918     if (IS_ERR(priv->txchan)) {
1919         dev_err(&pdev->dev, "error initializing tx dma channel\n");
1920         rc = PTR_ERR(priv->txchan);
1921         goto err_free_dma;
1922     }
1923 
1924     priv->rxchan = cpdma_chan_create(priv->dma, EMAC_DEF_RX_CH,
1925                      emac_rx_handler, 1);
1926     if (IS_ERR(priv->rxchan)) {
1927         dev_err(&pdev->dev, "error initializing rx dma channel\n");
1928         rc = PTR_ERR(priv->rxchan);
1929         goto err_free_txchan;
1930     }
1931 
1932     rc = platform_get_irq(pdev, 0);
1933     if (rc < 0)
1934         goto err_free_rxchan;
1935     ndev->irq = rc;
1936 
1937     rc = davinci_emac_try_get_mac(pdev, res_ctrl ? 0 : 1, priv->mac_addr);
1938     if (!rc)
1939         eth_hw_addr_set(ndev, priv->mac_addr);
1940 
1941     if (!is_valid_ether_addr(priv->mac_addr)) {
1942         /* Use random MAC if still none obtained. */
1943         eth_hw_addr_random(ndev);
1944         memcpy(priv->mac_addr, ndev->dev_addr, ndev->addr_len);
1945         dev_warn(&pdev->dev, "using random MAC addr: %pM\n",
1946              priv->mac_addr);
1947     }
1948 
1949     ndev->netdev_ops = &emac_netdev_ops;
1950     ndev->ethtool_ops = &ethtool_ops;
1951     netif_napi_add(ndev, &priv->napi, emac_poll, NAPI_POLL_WEIGHT);
1952 
1953     pm_runtime_enable(&pdev->dev);
1954     rc = pm_runtime_resume_and_get(&pdev->dev);
1955     if (rc < 0) {
1956         dev_err(&pdev->dev, "%s: failed to get_sync(%d)\n",
1957             __func__, rc);
1958         goto err_napi_del;
1959     }
1960 
1961     /* register the network device */
1962     SET_NETDEV_DEV(ndev, &pdev->dev);
1963     rc = register_netdev(ndev);
1964     if (rc) {
1965         dev_err(&pdev->dev, "error in register_netdev\n");
1966         rc = -ENODEV;
1967         pm_runtime_put(&pdev->dev);
1968         goto err_napi_del;
1969     }
1970 
1971 
1972     if (netif_msg_probe(priv)) {
1973         dev_notice(&pdev->dev, "DaVinci EMAC Probe found device "
1974                "(regs: %pa, irq: %d)\n",
1975                &priv->emac_base_phys, ndev->irq);
1976     }
1977     pm_runtime_put(&pdev->dev);
1978 
1979     return 0;
1980 
1981 err_napi_del:
1982     netif_napi_del(&priv->napi);
1983 err_free_rxchan:
1984     cpdma_chan_destroy(priv->rxchan);
1985 err_free_txchan:
1986     cpdma_chan_destroy(priv->txchan);
1987 err_free_dma:
1988     cpdma_ctlr_destroy(priv->dma);
1989 no_pdata:
1990     if (of_phy_is_fixed_link(np))
1991         of_phy_deregister_fixed_link(np);
1992     of_node_put(priv->phy_node);
1993 err_free_netdev:
1994     free_netdev(ndev);
1995     return rc;
1996 }
1997 
1998 /**
1999  * davinci_emac_remove - EMAC device remove
2000  * @pdev: The DaVinci EMAC device that we are removing
2001  *
2002  * Called when removing the device driver. We disable clock usage and release
2003  * the resources taken up by the driver and unregister network device
2004  */
2005 static int davinci_emac_remove(struct platform_device *pdev)
2006 {
2007     struct net_device *ndev = platform_get_drvdata(pdev);
2008     struct emac_priv *priv = netdev_priv(ndev);
2009     struct device_node *np = pdev->dev.of_node;
2010 
2011     dev_notice(&ndev->dev, "DaVinci EMAC: davinci_emac_remove()\n");
2012 
2013     if (priv->txchan)
2014         cpdma_chan_destroy(priv->txchan);
2015     if (priv->rxchan)
2016         cpdma_chan_destroy(priv->rxchan);
2017     cpdma_ctlr_destroy(priv->dma);
2018 
2019     unregister_netdev(ndev);
2020     of_node_put(priv->phy_node);
2021     pm_runtime_disable(&pdev->dev);
2022     if (of_phy_is_fixed_link(np))
2023         of_phy_deregister_fixed_link(np);
2024     free_netdev(ndev);
2025 
2026     return 0;
2027 }
2028 
2029 static int davinci_emac_suspend(struct device *dev)
2030 {
2031     struct net_device *ndev = dev_get_drvdata(dev);
2032 
2033     if (netif_running(ndev))
2034         emac_dev_stop(ndev);
2035 
2036     return 0;
2037 }
2038 
2039 static int davinci_emac_resume(struct device *dev)
2040 {
2041     struct net_device *ndev = dev_get_drvdata(dev);
2042 
2043     if (netif_running(ndev))
2044         emac_dev_open(ndev);
2045 
2046     return 0;
2047 }
2048 
2049 static const struct dev_pm_ops davinci_emac_pm_ops = {
2050     .suspend    = davinci_emac_suspend,
2051     .resume     = davinci_emac_resume,
2052 };
2053 
2054 static const struct emac_platform_data am3517_emac_data = {
2055     .version        = EMAC_VERSION_2,
2056     .hw_ram_addr        = 0x01e20000,
2057 };
2058 
2059 static const struct emac_platform_data dm816_emac_data = {
2060     .version        = EMAC_VERSION_2,
2061 };
2062 
2063 static const struct of_device_id davinci_emac_of_match[] = {
2064     {.compatible = "ti,davinci-dm6467-emac", },
2065     {.compatible = "ti,am3517-emac", .data = &am3517_emac_data, },
2066     {.compatible = "ti,dm816-emac", .data = &dm816_emac_data, },
2067     {},
2068 };
2069 MODULE_DEVICE_TABLE(of, davinci_emac_of_match);
2070 
2071 /* davinci_emac_driver: EMAC platform driver structure */
2072 static struct platform_driver davinci_emac_driver = {
2073     .driver = {
2074         .name    = "davinci_emac",
2075         .pm  = &davinci_emac_pm_ops,
2076         .of_match_table = davinci_emac_of_match,
2077     },
2078     .probe = davinci_emac_probe,
2079     .remove = davinci_emac_remove,
2080 };
2081 
2082 /**
2083  * davinci_emac_init - EMAC driver module init
2084  *
2085  * Called when initializing the driver. We register the driver with
2086  * the platform.
2087  */
2088 static int __init davinci_emac_init(void)
2089 {
2090     return platform_driver_register(&davinci_emac_driver);
2091 }
2092 late_initcall(davinci_emac_init);
2093 
2094 /**
2095  * davinci_emac_exit - EMAC driver module exit
2096  *
2097  * Called when exiting the driver completely. We unregister the driver with
2098  * the platform and exit
2099  */
2100 static void __exit davinci_emac_exit(void)
2101 {
2102     platform_driver_unregister(&davinci_emac_driver);
2103 }
2104 module_exit(davinci_emac_exit);
2105 
2106 MODULE_LICENSE("GPL");
2107 MODULE_AUTHOR("DaVinci EMAC Maintainer: Anant Gole <anantgole@ti.com>");
2108 MODULE_AUTHOR("DaVinci EMAC Maintainer: Chaithrika U S <chaithrika@ti.com>");
2109 MODULE_DESCRIPTION("DaVinci EMAC Ethernet driver");