1 /******************************************************************************* 2 This is the driver for the ST MAC 10/100/1000 on-chip Ethernet controllers. 3 ST Ethernet IPs are built around a Synopsys IP Core. 4 5 Copyright(C) 2007-2011 STMicroelectronics Ltd 6 7 This program is free software; you can redistribute it and/or modify it 8 under the terms and conditions of the GNU General Public License, 9 version 2, as published by the Free Software Foundation. 10 11 This program is distributed in the hope it will be useful, but WITHOUT 12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 14 more details. 15 16 The full GNU General Public License is included in this distribution in 17 the file called "COPYING". 18 19 Author: Giuseppe Cavallaro <peppe.cavallaro@st.com> 20 21 Documentation available at: 22 http://www.stlinux.com 23 Support available at: 24 https://bugzilla.stlinux.com/ 25 *******************************************************************************/ 26 27 #include <linux/clk.h> 28 #include <linux/kernel.h> 29 #include <linux/interrupt.h> 30 #include <linux/ip.h> 31 #include <linux/tcp.h> 32 #include <linux/skbuff.h> 33 #include <linux/ethtool.h> 34 #include <linux/if_ether.h> 35 #include <linux/crc32.h> 36 #include <linux/mii.h> 37 #include <linux/if.h> 38 #include <linux/if_vlan.h> 39 #include <linux/dma-mapping.h> 40 #include <linux/slab.h> 41 #include <linux/prefetch.h> 42 #include <linux/pinctrl/consumer.h> 43 #ifdef CONFIG_DEBUG_FS 44 #include <linux/debugfs.h> 45 #include <linux/seq_file.h> 46 #endif /* CONFIG_DEBUG_FS */ 47 #include <linux/net_tstamp.h> 48 #include <net/pkt_cls.h> 49 #include "stmmac_ptp.h" 50 #include "stmmac.h" 51 #include <linux/reset.h> 52 #include <linux/of_mdio.h> 53 #include "dwmac1000.h" 54 #include "dwxgmac2.h" 55 #include "hwif.h" 56 57 #define STMMAC_ALIGN(x) __ALIGN_KERNEL(x, SMP_CACHE_BYTES) 58 #define TSO_MAX_BUFF_SIZE (SZ_16K - 1) 59 60 /* Module parameters */ 61 #define TX_TIMEO 5000 62 static int watchdog = TX_TIMEO; 63 module_param(watchdog, int, 0644); 64 MODULE_PARM_DESC(watchdog, "Transmit timeout in milliseconds (default 5s)"); 65 66 static int debug = -1; 67 module_param(debug, int, 0644); 68 MODULE_PARM_DESC(debug, "Message Level (-1: default, 0: no output, 16: all)"); 69 70 static int phyaddr = -1; 71 module_param(phyaddr, int, 0444); 72 MODULE_PARM_DESC(phyaddr, "Physical device address"); 73 74 #define STMMAC_TX_THRESH (DMA_TX_SIZE / 4) 75 #define STMMAC_RX_THRESH (DMA_RX_SIZE / 4) 76 77 static int flow_ctrl = FLOW_OFF; 78 module_param(flow_ctrl, int, 0644); 79 MODULE_PARM_DESC(flow_ctrl, "Flow control ability [on/off]"); 80 81 static int pause = PAUSE_TIME; 82 module_param(pause, int, 0644); 83 MODULE_PARM_DESC(pause, "Flow Control Pause Time"); 84 85 #define TC_DEFAULT 64 86 static int tc = TC_DEFAULT; 87 module_param(tc, int, 0644); 88 MODULE_PARM_DESC(tc, "DMA threshold control value"); 89 90 #define DEFAULT_BUFSIZE 1536 91 static int buf_sz = DEFAULT_BUFSIZE; 92 module_param(buf_sz, int, 0644); 93 MODULE_PARM_DESC(buf_sz, "DMA buffer size"); 94 95 #define STMMAC_RX_COPYBREAK 256 96 97 static const u32 default_msg_level = (NETIF_MSG_DRV | NETIF_MSG_PROBE | 98 NETIF_MSG_LINK | NETIF_MSG_IFUP | 99 NETIF_MSG_IFDOWN | NETIF_MSG_TIMER); 100 101 #define STMMAC_DEFAULT_LPI_TIMER 1000 102 static int eee_timer = STMMAC_DEFAULT_LPI_TIMER; 103 module_param(eee_timer, int, 0644); 104 MODULE_PARM_DESC(eee_timer, "LPI tx expiration time in msec"); 105 #define STMMAC_LPI_T(x) (jiffies + msecs_to_jiffies(x)) 106 107 /* By default the driver will use the ring mode to manage tx and rx descriptors, 108 * but allow user to force to use the chain instead of the ring 109 */ 110 static unsigned int chain_mode; 111 module_param(chain_mode, int, 0444); 112 MODULE_PARM_DESC(chain_mode, "To use chain instead of ring mode"); 113 114 static irqreturn_t stmmac_interrupt(int irq, void *dev_id); 115 116 #ifdef CONFIG_DEBUG_FS 117 static int stmmac_init_fs(struct net_device *dev); 118 static void stmmac_exit_fs(struct net_device *dev); 119 #endif 120 121 #define STMMAC_COAL_TIMER(x) (jiffies + usecs_to_jiffies(x)) 122 123 /** 124 * stmmac_verify_args - verify the driver parameters. 125 * Description: it checks the driver parameters and set a default in case of 126 * errors. 127 */ 128 static void stmmac_verify_args(void) 129 { 130 if (unlikely(watchdog < 0)) 131 watchdog = TX_TIMEO; 132 if (unlikely((buf_sz < DEFAULT_BUFSIZE) || (buf_sz > BUF_SIZE_16KiB))) 133 buf_sz = DEFAULT_BUFSIZE; 134 if (unlikely(flow_ctrl > 1)) 135 flow_ctrl = FLOW_AUTO; 136 else if (likely(flow_ctrl < 0)) 137 flow_ctrl = FLOW_OFF; 138 if (unlikely((pause < 0) || (pause > 0xffff))) 139 pause = PAUSE_TIME; 140 if (eee_timer < 0) 141 eee_timer = STMMAC_DEFAULT_LPI_TIMER; 142 } 143 144 /** 145 * stmmac_disable_all_queues - Disable all queues 146 * @priv: driver private structure 147 */ 148 static void stmmac_disable_all_queues(struct stmmac_priv *priv) 149 { 150 u32 rx_queues_cnt = priv->plat->rx_queues_to_use; 151 u32 queue; 152 153 for (queue = 0; queue < rx_queues_cnt; queue++) { 154 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue]; 155 156 napi_disable(&rx_q->napi); 157 } 158 } 159 160 /** 161 * stmmac_enable_all_queues - Enable all queues 162 * @priv: driver private structure 163 */ 164 static void stmmac_enable_all_queues(struct stmmac_priv *priv) 165 { 166 u32 rx_queues_cnt = priv->plat->rx_queues_to_use; 167 u32 queue; 168 169 for (queue = 0; queue < rx_queues_cnt; queue++) { 170 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue]; 171 172 napi_enable(&rx_q->napi); 173 } 174 } 175 176 /** 177 * stmmac_stop_all_queues - Stop all queues 178 * @priv: driver private structure 179 */ 180 static void stmmac_stop_all_queues(struct stmmac_priv *priv) 181 { 182 u32 tx_queues_cnt = priv->plat->tx_queues_to_use; 183 u32 queue; 184 185 for (queue = 0; queue < tx_queues_cnt; queue++) 186 netif_tx_stop_queue(netdev_get_tx_queue(priv->dev, queue)); 187 } 188 189 /** 190 * stmmac_start_all_queues - Start all queues 191 * @priv: driver private structure 192 */ 193 static void stmmac_start_all_queues(struct stmmac_priv *priv) 194 { 195 u32 tx_queues_cnt = priv->plat->tx_queues_to_use; 196 u32 queue; 197 198 for (queue = 0; queue < tx_queues_cnt; queue++) 199 netif_tx_start_queue(netdev_get_tx_queue(priv->dev, queue)); 200 } 201 202 static void stmmac_service_event_schedule(struct stmmac_priv *priv) 203 { 204 if (!test_bit(STMMAC_DOWN, &priv->state) && 205 !test_and_set_bit(STMMAC_SERVICE_SCHED, &priv->state)) 206 queue_work(priv->wq, &priv->service_task); 207 } 208 209 static void stmmac_global_err(struct stmmac_priv *priv) 210 { 211 netif_carrier_off(priv->dev); 212 set_bit(STMMAC_RESET_REQUESTED, &priv->state); 213 stmmac_service_event_schedule(priv); 214 } 215 216 /** 217 * stmmac_clk_csr_set - dynamically set the MDC clock 218 * @priv: driver private structure 219 * Description: this is to dynamically set the MDC clock according to the csr 220 * clock input. 221 * Note: 222 * If a specific clk_csr value is passed from the platform 223 * this means that the CSR Clock Range selection cannot be 224 * changed at run-time and it is fixed (as reported in the driver 225 * documentation). Viceversa the driver will try to set the MDC 226 * clock dynamically according to the actual clock input. 227 */ 228 static void stmmac_clk_csr_set(struct stmmac_priv *priv) 229 { 230 u32 clk_rate; 231 232 clk_rate = clk_get_rate(priv->plat->stmmac_clk); 233 234 /* Platform provided default clk_csr would be assumed valid 235 * for all other cases except for the below mentioned ones. 236 * For values higher than the IEEE 802.3 specified frequency 237 * we can not estimate the proper divider as it is not known 238 * the frequency of clk_csr_i. So we do not change the default 239 * divider. 240 */ 241 if (!(priv->clk_csr & MAC_CSR_H_FRQ_MASK)) { 242 if (clk_rate < CSR_F_35M) 243 priv->clk_csr = STMMAC_CSR_20_35M; 244 else if ((clk_rate >= CSR_F_35M) && (clk_rate < CSR_F_60M)) 245 priv->clk_csr = STMMAC_CSR_35_60M; 246 else if ((clk_rate >= CSR_F_60M) && (clk_rate < CSR_F_100M)) 247 priv->clk_csr = STMMAC_CSR_60_100M; 248 else if ((clk_rate >= CSR_F_100M) && (clk_rate < CSR_F_150M)) 249 priv->clk_csr = STMMAC_CSR_100_150M; 250 else if ((clk_rate >= CSR_F_150M) && (clk_rate < CSR_F_250M)) 251 priv->clk_csr = STMMAC_CSR_150_250M; 252 else if ((clk_rate >= CSR_F_250M) && (clk_rate < CSR_F_300M)) 253 priv->clk_csr = STMMAC_CSR_250_300M; 254 } 255 256 if (priv->plat->has_sun8i) { 257 if (clk_rate > 160000000) 258 priv->clk_csr = 0x03; 259 else if (clk_rate > 80000000) 260 priv->clk_csr = 0x02; 261 else if (clk_rate > 40000000) 262 priv->clk_csr = 0x01; 263 else 264 priv->clk_csr = 0; 265 } 266 267 if (priv->plat->has_xgmac) { 268 if (clk_rate > 400000000) 269 priv->clk_csr = 0x5; 270 else if (clk_rate > 350000000) 271 priv->clk_csr = 0x4; 272 else if (clk_rate > 300000000) 273 priv->clk_csr = 0x3; 274 else if (clk_rate > 250000000) 275 priv->clk_csr = 0x2; 276 else if (clk_rate > 150000000) 277 priv->clk_csr = 0x1; 278 else 279 priv->clk_csr = 0x0; 280 } 281 } 282 283 static void print_pkt(unsigned char *buf, int len) 284 { 285 pr_debug("len = %d byte, buf addr: 0x%p\n", len, buf); 286 print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, buf, len); 287 } 288 289 static inline u32 stmmac_tx_avail(struct stmmac_priv *priv, u32 queue) 290 { 291 struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue]; 292 u32 avail; 293 294 if (tx_q->dirty_tx > tx_q->cur_tx) 295 avail = tx_q->dirty_tx - tx_q->cur_tx - 1; 296 else 297 avail = DMA_TX_SIZE - tx_q->cur_tx + tx_q->dirty_tx - 1; 298 299 return avail; 300 } 301 302 /** 303 * stmmac_rx_dirty - Get RX queue dirty 304 * @priv: driver private structure 305 * @queue: RX queue index 306 */ 307 static inline u32 stmmac_rx_dirty(struct stmmac_priv *priv, u32 queue) 308 { 309 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue]; 310 u32 dirty; 311 312 if (rx_q->dirty_rx <= rx_q->cur_rx) 313 dirty = rx_q->cur_rx - rx_q->dirty_rx; 314 else 315 dirty = DMA_RX_SIZE - rx_q->dirty_rx + rx_q->cur_rx; 316 317 return dirty; 318 } 319 320 /** 321 * stmmac_hw_fix_mac_speed - callback for speed selection 322 * @priv: driver private structure 323 * Description: on some platforms (e.g. ST), some HW system configuration 324 * registers have to be set according to the link speed negotiated. 325 */ 326 static inline void stmmac_hw_fix_mac_speed(struct stmmac_priv *priv) 327 { 328 struct net_device *ndev = priv->dev; 329 struct phy_device *phydev = ndev->phydev; 330 331 if (likely(priv->plat->fix_mac_speed)) 332 priv->plat->fix_mac_speed(priv->plat->bsp_priv, phydev->speed); 333 } 334 335 /** 336 * stmmac_enable_eee_mode - check and enter in LPI mode 337 * @priv: driver private structure 338 * Description: this function is to verify and enter in LPI mode in case of 339 * EEE. 340 */ 341 static void stmmac_enable_eee_mode(struct stmmac_priv *priv) 342 { 343 u32 tx_cnt = priv->plat->tx_queues_to_use; 344 u32 queue; 345 346 /* check if all TX queues have the work finished */ 347 for (queue = 0; queue < tx_cnt; queue++) { 348 struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue]; 349 350 if (tx_q->dirty_tx != tx_q->cur_tx) 351 return; /* still unfinished work */ 352 } 353 354 /* Check and enter in LPI mode */ 355 if (!priv->tx_path_in_lpi_mode) 356 stmmac_set_eee_mode(priv, priv->hw, 357 priv->plat->en_tx_lpi_clockgating); 358 } 359 360 /** 361 * stmmac_disable_eee_mode - disable and exit from LPI mode 362 * @priv: driver private structure 363 * Description: this function is to exit and disable EEE in case of 364 * LPI state is true. This is called by the xmit. 365 */ 366 void stmmac_disable_eee_mode(struct stmmac_priv *priv) 367 { 368 stmmac_reset_eee_mode(priv, priv->hw); 369 del_timer_sync(&priv->eee_ctrl_timer); 370 priv->tx_path_in_lpi_mode = false; 371 } 372 373 /** 374 * stmmac_eee_ctrl_timer - EEE TX SW timer. 375 * @arg : data hook 376 * Description: 377 * if there is no data transfer and if we are not in LPI state, 378 * then MAC Transmitter can be moved to LPI state. 379 */ 380 static void stmmac_eee_ctrl_timer(struct timer_list *t) 381 { 382 struct stmmac_priv *priv = from_timer(priv, t, eee_ctrl_timer); 383 384 stmmac_enable_eee_mode(priv); 385 mod_timer(&priv->eee_ctrl_timer, STMMAC_LPI_T(eee_timer)); 386 } 387 388 /** 389 * stmmac_eee_init - init EEE 390 * @priv: driver private structure 391 * Description: 392 * if the GMAC supports the EEE (from the HW cap reg) and the phy device 393 * can also manage EEE, this function enable the LPI state and start related 394 * timer. 395 */ 396 bool stmmac_eee_init(struct stmmac_priv *priv) 397 { 398 struct net_device *ndev = priv->dev; 399 int interface = priv->plat->interface; 400 bool ret = false; 401 402 if ((interface != PHY_INTERFACE_MODE_MII) && 403 (interface != PHY_INTERFACE_MODE_GMII) && 404 !phy_interface_mode_is_rgmii(interface)) 405 goto out; 406 407 /* Using PCS we cannot dial with the phy registers at this stage 408 * so we do not support extra feature like EEE. 409 */ 410 if ((priv->hw->pcs == STMMAC_PCS_RGMII) || 411 (priv->hw->pcs == STMMAC_PCS_TBI) || 412 (priv->hw->pcs == STMMAC_PCS_RTBI)) 413 goto out; 414 415 /* MAC core supports the EEE feature. */ 416 if (priv->dma_cap.eee) { 417 int tx_lpi_timer = priv->tx_lpi_timer; 418 419 /* Check if the PHY supports EEE */ 420 if (phy_init_eee(ndev->phydev, 1)) { 421 /* To manage at run-time if the EEE cannot be supported 422 * anymore (for example because the lp caps have been 423 * changed). 424 * In that case the driver disable own timers. 425 */ 426 mutex_lock(&priv->lock); 427 if (priv->eee_active) { 428 netdev_dbg(priv->dev, "disable EEE\n"); 429 del_timer_sync(&priv->eee_ctrl_timer); 430 stmmac_set_eee_timer(priv, priv->hw, 0, 431 tx_lpi_timer); 432 } 433 priv->eee_active = 0; 434 mutex_unlock(&priv->lock); 435 goto out; 436 } 437 /* Activate the EEE and start timers */ 438 mutex_lock(&priv->lock); 439 if (!priv->eee_active) { 440 priv->eee_active = 1; 441 timer_setup(&priv->eee_ctrl_timer, 442 stmmac_eee_ctrl_timer, 0); 443 mod_timer(&priv->eee_ctrl_timer, 444 STMMAC_LPI_T(eee_timer)); 445 446 stmmac_set_eee_timer(priv, priv->hw, 447 STMMAC_DEFAULT_LIT_LS, tx_lpi_timer); 448 } 449 /* Set HW EEE according to the speed */ 450 stmmac_set_eee_pls(priv, priv->hw, ndev->phydev->link); 451 452 ret = true; 453 mutex_unlock(&priv->lock); 454 455 netdev_dbg(priv->dev, "Energy-Efficient Ethernet initialized\n"); 456 } 457 out: 458 return ret; 459 } 460 461 /* stmmac_get_tx_hwtstamp - get HW TX timestamps 462 * @priv: driver private structure 463 * @p : descriptor pointer 464 * @skb : the socket buffer 465 * Description : 466 * This function will read timestamp from the descriptor & pass it to stack. 467 * and also perform some sanity checks. 468 */ 469 static void stmmac_get_tx_hwtstamp(struct stmmac_priv *priv, 470 struct dma_desc *p, struct sk_buff *skb) 471 { 472 struct skb_shared_hwtstamps shhwtstamp; 473 u64 ns; 474 475 if (!priv->hwts_tx_en) 476 return; 477 478 /* exit if skb doesn't support hw tstamp */ 479 if (likely(!skb || !(skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS))) 480 return; 481 482 /* check tx tstamp status */ 483 if (stmmac_get_tx_timestamp_status(priv, p)) { 484 /* get the valid tstamp */ 485 stmmac_get_timestamp(priv, p, priv->adv_ts, &ns); 486 487 memset(&shhwtstamp, 0, sizeof(struct skb_shared_hwtstamps)); 488 shhwtstamp.hwtstamp = ns_to_ktime(ns); 489 490 netdev_dbg(priv->dev, "get valid TX hw timestamp %llu\n", ns); 491 /* pass tstamp to stack */ 492 skb_tstamp_tx(skb, &shhwtstamp); 493 } 494 495 return; 496 } 497 498 /* stmmac_get_rx_hwtstamp - get HW RX timestamps 499 * @priv: driver private structure 500 * @p : descriptor pointer 501 * @np : next descriptor pointer 502 * @skb : the socket buffer 503 * Description : 504 * This function will read received packet's timestamp from the descriptor 505 * and pass it to stack. It also perform some sanity checks. 506 */ 507 static void stmmac_get_rx_hwtstamp(struct stmmac_priv *priv, struct dma_desc *p, 508 struct dma_desc *np, struct sk_buff *skb) 509 { 510 struct skb_shared_hwtstamps *shhwtstamp = NULL; 511 struct dma_desc *desc = p; 512 u64 ns; 513 514 if (!priv->hwts_rx_en) 515 return; 516 /* For GMAC4, the valid timestamp is from CTX next desc. */ 517 if (priv->plat->has_gmac4 || priv->plat->has_xgmac) 518 desc = np; 519 520 /* Check if timestamp is available */ 521 if (stmmac_get_rx_timestamp_status(priv, p, np, priv->adv_ts)) { 522 stmmac_get_timestamp(priv, desc, priv->adv_ts, &ns); 523 netdev_dbg(priv->dev, "get valid RX hw timestamp %llu\n", ns); 524 shhwtstamp = skb_hwtstamps(skb); 525 memset(shhwtstamp, 0, sizeof(struct skb_shared_hwtstamps)); 526 shhwtstamp->hwtstamp = ns_to_ktime(ns); 527 } else { 528 netdev_dbg(priv->dev, "cannot get RX hw timestamp\n"); 529 } 530 } 531 532 /** 533 * stmmac_hwtstamp_ioctl - control hardware timestamping. 534 * @dev: device pointer. 535 * @ifr: An IOCTL specific structure, that can contain a pointer to 536 * a proprietary structure used to pass information to the driver. 537 * Description: 538 * This function configures the MAC to enable/disable both outgoing(TX) 539 * and incoming(RX) packets time stamping based on user input. 540 * Return Value: 541 * 0 on success and an appropriate -ve integer on failure. 542 */ 543 static int stmmac_hwtstamp_ioctl(struct net_device *dev, struct ifreq *ifr) 544 { 545 struct stmmac_priv *priv = netdev_priv(dev); 546 struct hwtstamp_config config; 547 struct timespec64 now; 548 u64 temp = 0; 549 u32 ptp_v2 = 0; 550 u32 tstamp_all = 0; 551 u32 ptp_over_ipv4_udp = 0; 552 u32 ptp_over_ipv6_udp = 0; 553 u32 ptp_over_ethernet = 0; 554 u32 snap_type_sel = 0; 555 u32 ts_master_en = 0; 556 u32 ts_event_en = 0; 557 u32 value = 0; 558 u32 sec_inc; 559 bool xmac; 560 561 xmac = priv->plat->has_gmac4 || priv->plat->has_xgmac; 562 563 if (!(priv->dma_cap.time_stamp || priv->adv_ts)) { 564 netdev_alert(priv->dev, "No support for HW time stamping\n"); 565 priv->hwts_tx_en = 0; 566 priv->hwts_rx_en = 0; 567 568 return -EOPNOTSUPP; 569 } 570 571 if (copy_from_user(&config, ifr->ifr_data, 572 sizeof(struct hwtstamp_config))) 573 return -EFAULT; 574 575 netdev_dbg(priv->dev, "%s config flags:0x%x, tx_type:0x%x, rx_filter:0x%x\n", 576 __func__, config.flags, config.tx_type, config.rx_filter); 577 578 /* reserved for future extensions */ 579 if (config.flags) 580 return -EINVAL; 581 582 if (config.tx_type != HWTSTAMP_TX_OFF && 583 config.tx_type != HWTSTAMP_TX_ON) 584 return -ERANGE; 585 586 if (priv->adv_ts) { 587 switch (config.rx_filter) { 588 case HWTSTAMP_FILTER_NONE: 589 /* time stamp no incoming packet at all */ 590 config.rx_filter = HWTSTAMP_FILTER_NONE; 591 break; 592 593 case HWTSTAMP_FILTER_PTP_V1_L4_EVENT: 594 /* PTP v1, UDP, any kind of event packet */ 595 config.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT; 596 /* take time stamp for all event messages */ 597 if (xmac) 598 snap_type_sel = PTP_GMAC4_TCR_SNAPTYPSEL_1; 599 else 600 snap_type_sel = PTP_TCR_SNAPTYPSEL_1; 601 602 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA; 603 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA; 604 break; 605 606 case HWTSTAMP_FILTER_PTP_V1_L4_SYNC: 607 /* PTP v1, UDP, Sync packet */ 608 config.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_SYNC; 609 /* take time stamp for SYNC messages only */ 610 ts_event_en = PTP_TCR_TSEVNTENA; 611 612 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA; 613 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA; 614 break; 615 616 case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ: 617 /* PTP v1, UDP, Delay_req packet */ 618 config.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ; 619 /* take time stamp for Delay_Req messages only */ 620 ts_master_en = PTP_TCR_TSMSTRENA; 621 ts_event_en = PTP_TCR_TSEVNTENA; 622 623 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA; 624 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA; 625 break; 626 627 case HWTSTAMP_FILTER_PTP_V2_L4_EVENT: 628 /* PTP v2, UDP, any kind of event packet */ 629 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_EVENT; 630 ptp_v2 = PTP_TCR_TSVER2ENA; 631 /* take time stamp for all event messages */ 632 if (xmac) 633 snap_type_sel = PTP_GMAC4_TCR_SNAPTYPSEL_1; 634 else 635 snap_type_sel = PTP_TCR_SNAPTYPSEL_1; 636 637 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA; 638 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA; 639 break; 640 641 case HWTSTAMP_FILTER_PTP_V2_L4_SYNC: 642 /* PTP v2, UDP, Sync packet */ 643 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_SYNC; 644 ptp_v2 = PTP_TCR_TSVER2ENA; 645 /* take time stamp for SYNC messages only */ 646 ts_event_en = PTP_TCR_TSEVNTENA; 647 648 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA; 649 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA; 650 break; 651 652 case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ: 653 /* PTP v2, UDP, Delay_req packet */ 654 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ; 655 ptp_v2 = PTP_TCR_TSVER2ENA; 656 /* take time stamp for Delay_Req messages only */ 657 ts_master_en = PTP_TCR_TSMSTRENA; 658 ts_event_en = PTP_TCR_TSEVNTENA; 659 660 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA; 661 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA; 662 break; 663 664 case HWTSTAMP_FILTER_PTP_V2_EVENT: 665 /* PTP v2/802.AS1 any layer, any kind of event packet */ 666 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT; 667 ptp_v2 = PTP_TCR_TSVER2ENA; 668 /* take time stamp for all event messages */ 669 if (xmac) 670 snap_type_sel = PTP_GMAC4_TCR_SNAPTYPSEL_1; 671 else 672 snap_type_sel = PTP_TCR_SNAPTYPSEL_1; 673 674 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA; 675 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA; 676 ptp_over_ethernet = PTP_TCR_TSIPENA; 677 break; 678 679 case HWTSTAMP_FILTER_PTP_V2_SYNC: 680 /* PTP v2/802.AS1, any layer, Sync packet */ 681 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_SYNC; 682 ptp_v2 = PTP_TCR_TSVER2ENA; 683 /* take time stamp for SYNC messages only */ 684 ts_event_en = PTP_TCR_TSEVNTENA; 685 686 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA; 687 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA; 688 ptp_over_ethernet = PTP_TCR_TSIPENA; 689 break; 690 691 case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ: 692 /* PTP v2/802.AS1, any layer, Delay_req packet */ 693 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_DELAY_REQ; 694 ptp_v2 = PTP_TCR_TSVER2ENA; 695 /* take time stamp for Delay_Req messages only */ 696 ts_master_en = PTP_TCR_TSMSTRENA; 697 ts_event_en = PTP_TCR_TSEVNTENA; 698 699 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA; 700 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA; 701 ptp_over_ethernet = PTP_TCR_TSIPENA; 702 break; 703 704 case HWTSTAMP_FILTER_NTP_ALL: 705 case HWTSTAMP_FILTER_ALL: 706 /* time stamp any incoming packet */ 707 config.rx_filter = HWTSTAMP_FILTER_ALL; 708 tstamp_all = PTP_TCR_TSENALL; 709 break; 710 711 default: 712 return -ERANGE; 713 } 714 } else { 715 switch (config.rx_filter) { 716 case HWTSTAMP_FILTER_NONE: 717 config.rx_filter = HWTSTAMP_FILTER_NONE; 718 break; 719 default: 720 /* PTP v1, UDP, any kind of event packet */ 721 config.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT; 722 break; 723 } 724 } 725 priv->hwts_rx_en = ((config.rx_filter == HWTSTAMP_FILTER_NONE) ? 0 : 1); 726 priv->hwts_tx_en = config.tx_type == HWTSTAMP_TX_ON; 727 728 if (!priv->hwts_tx_en && !priv->hwts_rx_en) 729 stmmac_config_hw_tstamping(priv, priv->ptpaddr, 0); 730 else { 731 value = (PTP_TCR_TSENA | PTP_TCR_TSCFUPDT | PTP_TCR_TSCTRLSSR | 732 tstamp_all | ptp_v2 | ptp_over_ethernet | 733 ptp_over_ipv6_udp | ptp_over_ipv4_udp | ts_event_en | 734 ts_master_en | snap_type_sel); 735 stmmac_config_hw_tstamping(priv, priv->ptpaddr, value); 736 737 /* program Sub Second Increment reg */ 738 stmmac_config_sub_second_increment(priv, 739 priv->ptpaddr, priv->plat->clk_ptp_rate, 740 xmac, &sec_inc); 741 temp = div_u64(1000000000ULL, sec_inc); 742 743 /* Store sub second increment and flags for later use */ 744 priv->sub_second_inc = sec_inc; 745 priv->systime_flags = value; 746 747 /* calculate default added value: 748 * formula is : 749 * addend = (2^32)/freq_div_ratio; 750 * where, freq_div_ratio = 1e9ns/sec_inc 751 */ 752 temp = (u64)(temp << 32); 753 priv->default_addend = div_u64(temp, priv->plat->clk_ptp_rate); 754 stmmac_config_addend(priv, priv->ptpaddr, priv->default_addend); 755 756 /* initialize system time */ 757 ktime_get_real_ts64(&now); 758 759 /* lower 32 bits of tv_sec are safe until y2106 */ 760 stmmac_init_systime(priv, priv->ptpaddr, 761 (u32)now.tv_sec, now.tv_nsec); 762 } 763 764 return copy_to_user(ifr->ifr_data, &config, 765 sizeof(struct hwtstamp_config)) ? -EFAULT : 0; 766 } 767 768 /** 769 * stmmac_init_ptp - init PTP 770 * @priv: driver private structure 771 * Description: this is to verify if the HW supports the PTPv1 or PTPv2. 772 * This is done by looking at the HW cap. register. 773 * This function also registers the ptp driver. 774 */ 775 static int stmmac_init_ptp(struct stmmac_priv *priv) 776 { 777 bool xmac = priv->plat->has_gmac4 || priv->plat->has_xgmac; 778 779 if (!(priv->dma_cap.time_stamp || priv->dma_cap.atime_stamp)) 780 return -EOPNOTSUPP; 781 782 priv->adv_ts = 0; 783 /* Check if adv_ts can be enabled for dwmac 4.x / xgmac core */ 784 if (xmac && priv->dma_cap.atime_stamp) 785 priv->adv_ts = 1; 786 /* Dwmac 3.x core with extend_desc can support adv_ts */ 787 else if (priv->extend_desc && priv->dma_cap.atime_stamp) 788 priv->adv_ts = 1; 789 790 if (priv->dma_cap.time_stamp) 791 netdev_info(priv->dev, "IEEE 1588-2002 Timestamp supported\n"); 792 793 if (priv->adv_ts) 794 netdev_info(priv->dev, 795 "IEEE 1588-2008 Advanced Timestamp supported\n"); 796 797 priv->hwts_tx_en = 0; 798 priv->hwts_rx_en = 0; 799 800 stmmac_ptp_register(priv); 801 802 return 0; 803 } 804 805 static void stmmac_release_ptp(struct stmmac_priv *priv) 806 { 807 if (priv->plat->clk_ptp_ref) 808 clk_disable_unprepare(priv->plat->clk_ptp_ref); 809 stmmac_ptp_unregister(priv); 810 } 811 812 /** 813 * stmmac_mac_flow_ctrl - Configure flow control in all queues 814 * @priv: driver private structure 815 * Description: It is used for configuring the flow control in all queues 816 */ 817 static void stmmac_mac_flow_ctrl(struct stmmac_priv *priv, u32 duplex) 818 { 819 u32 tx_cnt = priv->plat->tx_queues_to_use; 820 821 stmmac_flow_ctrl(priv, priv->hw, duplex, priv->flow_ctrl, 822 priv->pause, tx_cnt); 823 } 824 825 /** 826 * stmmac_adjust_link - adjusts the link parameters 827 * @dev: net device structure 828 * Description: this is the helper called by the physical abstraction layer 829 * drivers to communicate the phy link status. According the speed and duplex 830 * this driver can invoke registered glue-logic as well. 831 * It also invoke the eee initialization because it could happen when switch 832 * on different networks (that are eee capable). 833 */ 834 static void stmmac_adjust_link(struct net_device *dev) 835 { 836 struct stmmac_priv *priv = netdev_priv(dev); 837 struct phy_device *phydev = dev->phydev; 838 bool new_state = false; 839 840 if (!phydev) 841 return; 842 843 mutex_lock(&priv->lock); 844 845 if (phydev->link) { 846 u32 ctrl = readl(priv->ioaddr + MAC_CTRL_REG); 847 848 /* Now we make sure that we can be in full duplex mode. 849 * If not, we operate in half-duplex mode. */ 850 if (phydev->duplex != priv->oldduplex) { 851 new_state = true; 852 if (!phydev->duplex) 853 ctrl &= ~priv->hw->link.duplex; 854 else 855 ctrl |= priv->hw->link.duplex; 856 priv->oldduplex = phydev->duplex; 857 } 858 /* Flow Control operation */ 859 if (phydev->pause) 860 stmmac_mac_flow_ctrl(priv, phydev->duplex); 861 862 if (phydev->speed != priv->speed) { 863 new_state = true; 864 ctrl &= ~priv->hw->link.speed_mask; 865 switch (phydev->speed) { 866 case SPEED_1000: 867 ctrl |= priv->hw->link.speed1000; 868 break; 869 case SPEED_100: 870 ctrl |= priv->hw->link.speed100; 871 break; 872 case SPEED_10: 873 ctrl |= priv->hw->link.speed10; 874 break; 875 default: 876 netif_warn(priv, link, priv->dev, 877 "broken speed: %d\n", phydev->speed); 878 phydev->speed = SPEED_UNKNOWN; 879 break; 880 } 881 if (phydev->speed != SPEED_UNKNOWN) 882 stmmac_hw_fix_mac_speed(priv); 883 priv->speed = phydev->speed; 884 } 885 886 writel(ctrl, priv->ioaddr + MAC_CTRL_REG); 887 888 if (!priv->oldlink) { 889 new_state = true; 890 priv->oldlink = true; 891 } 892 } else if (priv->oldlink) { 893 new_state = true; 894 priv->oldlink = false; 895 priv->speed = SPEED_UNKNOWN; 896 priv->oldduplex = DUPLEX_UNKNOWN; 897 } 898 899 if (new_state && netif_msg_link(priv)) 900 phy_print_status(phydev); 901 902 mutex_unlock(&priv->lock); 903 904 if (phydev->is_pseudo_fixed_link) 905 /* Stop PHY layer to call the hook to adjust the link in case 906 * of a switch is attached to the stmmac driver. 907 */ 908 phydev->irq = PHY_IGNORE_INTERRUPT; 909 else 910 /* At this stage, init the EEE if supported. 911 * Never called in case of fixed_link. 912 */ 913 priv->eee_enabled = stmmac_eee_init(priv); 914 } 915 916 /** 917 * stmmac_check_pcs_mode - verify if RGMII/SGMII is supported 918 * @priv: driver private structure 919 * Description: this is to verify if the HW supports the PCS. 920 * Physical Coding Sublayer (PCS) interface that can be used when the MAC is 921 * configured for the TBI, RTBI, or SGMII PHY interface. 922 */ 923 static void stmmac_check_pcs_mode(struct stmmac_priv *priv) 924 { 925 int interface = priv->plat->interface; 926 927 if (priv->dma_cap.pcs) { 928 if ((interface == PHY_INTERFACE_MODE_RGMII) || 929 (interface == PHY_INTERFACE_MODE_RGMII_ID) || 930 (interface == PHY_INTERFACE_MODE_RGMII_RXID) || 931 (interface == PHY_INTERFACE_MODE_RGMII_TXID)) { 932 netdev_dbg(priv->dev, "PCS RGMII support enabled\n"); 933 priv->hw->pcs = STMMAC_PCS_RGMII; 934 } else if (interface == PHY_INTERFACE_MODE_SGMII) { 935 netdev_dbg(priv->dev, "PCS SGMII support enabled\n"); 936 priv->hw->pcs = STMMAC_PCS_SGMII; 937 } 938 } 939 } 940 941 /** 942 * stmmac_init_phy - PHY initialization 943 * @dev: net device structure 944 * Description: it initializes the driver's PHY state, and attaches the PHY 945 * to the mac driver. 946 * Return value: 947 * 0 on success 948 */ 949 static int stmmac_init_phy(struct net_device *dev) 950 { 951 struct stmmac_priv *priv = netdev_priv(dev); 952 u32 tx_cnt = priv->plat->tx_queues_to_use; 953 struct phy_device *phydev; 954 char phy_id_fmt[MII_BUS_ID_SIZE + 3]; 955 char bus_id[MII_BUS_ID_SIZE]; 956 int interface = priv->plat->interface; 957 int max_speed = priv->plat->max_speed; 958 priv->oldlink = false; 959 priv->speed = SPEED_UNKNOWN; 960 priv->oldduplex = DUPLEX_UNKNOWN; 961 962 if (priv->plat->phy_node) { 963 phydev = of_phy_connect(dev, priv->plat->phy_node, 964 &stmmac_adjust_link, 0, interface); 965 } else { 966 snprintf(bus_id, MII_BUS_ID_SIZE, "stmmac-%x", 967 priv->plat->bus_id); 968 969 snprintf(phy_id_fmt, MII_BUS_ID_SIZE + 3, PHY_ID_FMT, bus_id, 970 priv->plat->phy_addr); 971 netdev_dbg(priv->dev, "%s: trying to attach to %s\n", __func__, 972 phy_id_fmt); 973 974 phydev = phy_connect(dev, phy_id_fmt, &stmmac_adjust_link, 975 interface); 976 } 977 978 if (IS_ERR_OR_NULL(phydev)) { 979 netdev_err(priv->dev, "Could not attach to PHY\n"); 980 if (!phydev) 981 return -ENODEV; 982 983 return PTR_ERR(phydev); 984 } 985 986 /* Stop Advertising 1000BASE Capability if interface is not GMII */ 987 if ((interface == PHY_INTERFACE_MODE_MII) || 988 (interface == PHY_INTERFACE_MODE_RMII) || 989 (max_speed < 1000 && max_speed > 0)) 990 phydev->advertising &= ~(SUPPORTED_1000baseT_Half | 991 SUPPORTED_1000baseT_Full); 992 993 /* 994 * Half-duplex mode not supported with multiqueue 995 * half-duplex can only works with single queue 996 */ 997 if (tx_cnt > 1) 998 phydev->supported &= ~(SUPPORTED_1000baseT_Half | 999 SUPPORTED_100baseT_Half | 1000 SUPPORTED_10baseT_Half); 1001 1002 /* 1003 * Broken HW is sometimes missing the pull-up resistor on the 1004 * MDIO line, which results in reads to non-existent devices returning 1005 * 0 rather than 0xffff. Catch this here and treat 0 as a non-existent 1006 * device as well. 1007 * Note: phydev->phy_id is the result of reading the UID PHY registers. 1008 */ 1009 if (!priv->plat->phy_node && phydev->phy_id == 0) { 1010 phy_disconnect(phydev); 1011 return -ENODEV; 1012 } 1013 1014 /* stmmac_adjust_link will change this to PHY_IGNORE_INTERRUPT to avoid 1015 * subsequent PHY polling, make sure we force a link transition if 1016 * we have a UP/DOWN/UP transition 1017 */ 1018 if (phydev->is_pseudo_fixed_link) 1019 phydev->irq = PHY_POLL; 1020 1021 phy_attached_info(phydev); 1022 return 0; 1023 } 1024 1025 static void stmmac_display_rx_rings(struct stmmac_priv *priv) 1026 { 1027 u32 rx_cnt = priv->plat->rx_queues_to_use; 1028 void *head_rx; 1029 u32 queue; 1030 1031 /* Display RX rings */ 1032 for (queue = 0; queue < rx_cnt; queue++) { 1033 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue]; 1034 1035 pr_info("\tRX Queue %u rings\n", queue); 1036 1037 if (priv->extend_desc) 1038 head_rx = (void *)rx_q->dma_erx; 1039 else 1040 head_rx = (void *)rx_q->dma_rx; 1041 1042 /* Display RX ring */ 1043 stmmac_display_ring(priv, head_rx, DMA_RX_SIZE, true); 1044 } 1045 } 1046 1047 static void stmmac_display_tx_rings(struct stmmac_priv *priv) 1048 { 1049 u32 tx_cnt = priv->plat->tx_queues_to_use; 1050 void *head_tx; 1051 u32 queue; 1052 1053 /* Display TX rings */ 1054 for (queue = 0; queue < tx_cnt; queue++) { 1055 struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue]; 1056 1057 pr_info("\tTX Queue %d rings\n", queue); 1058 1059 if (priv->extend_desc) 1060 head_tx = (void *)tx_q->dma_etx; 1061 else 1062 head_tx = (void *)tx_q->dma_tx; 1063 1064 stmmac_display_ring(priv, head_tx, DMA_TX_SIZE, false); 1065 } 1066 } 1067 1068 static void stmmac_display_rings(struct stmmac_priv *priv) 1069 { 1070 /* Display RX ring */ 1071 stmmac_display_rx_rings(priv); 1072 1073 /* Display TX ring */ 1074 stmmac_display_tx_rings(priv); 1075 } 1076 1077 static int stmmac_set_bfsize(int mtu, int bufsize) 1078 { 1079 int ret = bufsize; 1080 1081 if (mtu >= BUF_SIZE_4KiB) 1082 ret = BUF_SIZE_8KiB; 1083 else if (mtu >= BUF_SIZE_2KiB) 1084 ret = BUF_SIZE_4KiB; 1085 else if (mtu > DEFAULT_BUFSIZE) 1086 ret = BUF_SIZE_2KiB; 1087 else 1088 ret = DEFAULT_BUFSIZE; 1089 1090 return ret; 1091 } 1092 1093 /** 1094 * stmmac_clear_rx_descriptors - clear RX descriptors 1095 * @priv: driver private structure 1096 * @queue: RX queue index 1097 * Description: this function is called to clear the RX descriptors 1098 * in case of both basic and extended descriptors are used. 1099 */ 1100 static void stmmac_clear_rx_descriptors(struct stmmac_priv *priv, u32 queue) 1101 { 1102 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue]; 1103 int i; 1104 1105 /* Clear the RX descriptors */ 1106 for (i = 0; i < DMA_RX_SIZE; i++) 1107 if (priv->extend_desc) 1108 stmmac_init_rx_desc(priv, &rx_q->dma_erx[i].basic, 1109 priv->use_riwt, priv->mode, 1110 (i == DMA_RX_SIZE - 1)); 1111 else 1112 stmmac_init_rx_desc(priv, &rx_q->dma_rx[i], 1113 priv->use_riwt, priv->mode, 1114 (i == DMA_RX_SIZE - 1)); 1115 } 1116 1117 /** 1118 * stmmac_clear_tx_descriptors - clear tx descriptors 1119 * @priv: driver private structure 1120 * @queue: TX queue index. 1121 * Description: this function is called to clear the TX descriptors 1122 * in case of both basic and extended descriptors are used. 1123 */ 1124 static void stmmac_clear_tx_descriptors(struct stmmac_priv *priv, u32 queue) 1125 { 1126 struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue]; 1127 int i; 1128 1129 /* Clear the TX descriptors */ 1130 for (i = 0; i < DMA_TX_SIZE; i++) 1131 if (priv->extend_desc) 1132 stmmac_init_tx_desc(priv, &tx_q->dma_etx[i].basic, 1133 priv->mode, (i == DMA_TX_SIZE - 1)); 1134 else 1135 stmmac_init_tx_desc(priv, &tx_q->dma_tx[i], 1136 priv->mode, (i == DMA_TX_SIZE - 1)); 1137 } 1138 1139 /** 1140 * stmmac_clear_descriptors - clear descriptors 1141 * @priv: driver private structure 1142 * Description: this function is called to clear the TX and RX descriptors 1143 * in case of both basic and extended descriptors are used. 1144 */ 1145 static void stmmac_clear_descriptors(struct stmmac_priv *priv) 1146 { 1147 u32 rx_queue_cnt = priv->plat->rx_queues_to_use; 1148 u32 tx_queue_cnt = priv->plat->tx_queues_to_use; 1149 u32 queue; 1150 1151 /* Clear the RX descriptors */ 1152 for (queue = 0; queue < rx_queue_cnt; queue++) 1153 stmmac_clear_rx_descriptors(priv, queue); 1154 1155 /* Clear the TX descriptors */ 1156 for (queue = 0; queue < tx_queue_cnt; queue++) 1157 stmmac_clear_tx_descriptors(priv, queue); 1158 } 1159 1160 /** 1161 * stmmac_init_rx_buffers - init the RX descriptor buffer. 1162 * @priv: driver private structure 1163 * @p: descriptor pointer 1164 * @i: descriptor index 1165 * @flags: gfp flag 1166 * @queue: RX queue index 1167 * Description: this function is called to allocate a receive buffer, perform 1168 * the DMA mapping and init the descriptor. 1169 */ 1170 static int stmmac_init_rx_buffers(struct stmmac_priv *priv, struct dma_desc *p, 1171 int i, gfp_t flags, u32 queue) 1172 { 1173 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue]; 1174 struct sk_buff *skb; 1175 1176 skb = __netdev_alloc_skb_ip_align(priv->dev, priv->dma_buf_sz, flags); 1177 if (!skb) { 1178 netdev_err(priv->dev, 1179 "%s: Rx init fails; skb is NULL\n", __func__); 1180 return -ENOMEM; 1181 } 1182 rx_q->rx_skbuff[i] = skb; 1183 rx_q->rx_skbuff_dma[i] = dma_map_single(priv->device, skb->data, 1184 priv->dma_buf_sz, 1185 DMA_FROM_DEVICE); 1186 if (dma_mapping_error(priv->device, rx_q->rx_skbuff_dma[i])) { 1187 netdev_err(priv->dev, "%s: DMA mapping error\n", __func__); 1188 dev_kfree_skb_any(skb); 1189 return -EINVAL; 1190 } 1191 1192 stmmac_set_desc_addr(priv, p, rx_q->rx_skbuff_dma[i]); 1193 1194 if (priv->dma_buf_sz == BUF_SIZE_16KiB) 1195 stmmac_init_desc3(priv, p); 1196 1197 return 0; 1198 } 1199 1200 /** 1201 * stmmac_free_rx_buffer - free RX dma buffers 1202 * @priv: private structure 1203 * @queue: RX queue index 1204 * @i: buffer index. 1205 */ 1206 static void stmmac_free_rx_buffer(struct stmmac_priv *priv, u32 queue, int i) 1207 { 1208 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue]; 1209 1210 if (rx_q->rx_skbuff[i]) { 1211 dma_unmap_single(priv->device, rx_q->rx_skbuff_dma[i], 1212 priv->dma_buf_sz, DMA_FROM_DEVICE); 1213 dev_kfree_skb_any(rx_q->rx_skbuff[i]); 1214 } 1215 rx_q->rx_skbuff[i] = NULL; 1216 } 1217 1218 /** 1219 * stmmac_free_tx_buffer - free RX dma buffers 1220 * @priv: private structure 1221 * @queue: RX queue index 1222 * @i: buffer index. 1223 */ 1224 static void stmmac_free_tx_buffer(struct stmmac_priv *priv, u32 queue, int i) 1225 { 1226 struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue]; 1227 1228 if (tx_q->tx_skbuff_dma[i].buf) { 1229 if (tx_q->tx_skbuff_dma[i].map_as_page) 1230 dma_unmap_page(priv->device, 1231 tx_q->tx_skbuff_dma[i].buf, 1232 tx_q->tx_skbuff_dma[i].len, 1233 DMA_TO_DEVICE); 1234 else 1235 dma_unmap_single(priv->device, 1236 tx_q->tx_skbuff_dma[i].buf, 1237 tx_q->tx_skbuff_dma[i].len, 1238 DMA_TO_DEVICE); 1239 } 1240 1241 if (tx_q->tx_skbuff[i]) { 1242 dev_kfree_skb_any(tx_q->tx_skbuff[i]); 1243 tx_q->tx_skbuff[i] = NULL; 1244 tx_q->tx_skbuff_dma[i].buf = 0; 1245 tx_q->tx_skbuff_dma[i].map_as_page = false; 1246 } 1247 } 1248 1249 /** 1250 * init_dma_rx_desc_rings - init the RX descriptor rings 1251 * @dev: net device structure 1252 * @flags: gfp flag. 1253 * Description: this function initializes the DMA RX descriptors 1254 * and allocates the socket buffers. It supports the chained and ring 1255 * modes. 1256 */ 1257 static int init_dma_rx_desc_rings(struct net_device *dev, gfp_t flags) 1258 { 1259 struct stmmac_priv *priv = netdev_priv(dev); 1260 u32 rx_count = priv->plat->rx_queues_to_use; 1261 int ret = -ENOMEM; 1262 int bfsize = 0; 1263 int queue; 1264 int i; 1265 1266 bfsize = stmmac_set_16kib_bfsize(priv, dev->mtu); 1267 if (bfsize < 0) 1268 bfsize = 0; 1269 1270 if (bfsize < BUF_SIZE_16KiB) 1271 bfsize = stmmac_set_bfsize(dev->mtu, priv->dma_buf_sz); 1272 1273 priv->dma_buf_sz = bfsize; 1274 1275 /* RX INITIALIZATION */ 1276 netif_dbg(priv, probe, priv->dev, 1277 "SKB addresses:\nskb\t\tskb data\tdma data\n"); 1278 1279 for (queue = 0; queue < rx_count; queue++) { 1280 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue]; 1281 1282 netif_dbg(priv, probe, priv->dev, 1283 "(%s) dma_rx_phy=0x%08x\n", __func__, 1284 (u32)rx_q->dma_rx_phy); 1285 1286 for (i = 0; i < DMA_RX_SIZE; i++) { 1287 struct dma_desc *p; 1288 1289 if (priv->extend_desc) 1290 p = &((rx_q->dma_erx + i)->basic); 1291 else 1292 p = rx_q->dma_rx + i; 1293 1294 ret = stmmac_init_rx_buffers(priv, p, i, flags, 1295 queue); 1296 if (ret) 1297 goto err_init_rx_buffers; 1298 1299 netif_dbg(priv, probe, priv->dev, "[%p]\t[%p]\t[%x]\n", 1300 rx_q->rx_skbuff[i], rx_q->rx_skbuff[i]->data, 1301 (unsigned int)rx_q->rx_skbuff_dma[i]); 1302 } 1303 1304 rx_q->cur_rx = 0; 1305 rx_q->dirty_rx = (unsigned int)(i - DMA_RX_SIZE); 1306 1307 stmmac_clear_rx_descriptors(priv, queue); 1308 1309 /* Setup the chained descriptor addresses */ 1310 if (priv->mode == STMMAC_CHAIN_MODE) { 1311 if (priv->extend_desc) 1312 stmmac_mode_init(priv, rx_q->dma_erx, 1313 rx_q->dma_rx_phy, DMA_RX_SIZE, 1); 1314 else 1315 stmmac_mode_init(priv, rx_q->dma_rx, 1316 rx_q->dma_rx_phy, DMA_RX_SIZE, 0); 1317 } 1318 } 1319 1320 buf_sz = bfsize; 1321 1322 return 0; 1323 1324 err_init_rx_buffers: 1325 while (queue >= 0) { 1326 while (--i >= 0) 1327 stmmac_free_rx_buffer(priv, queue, i); 1328 1329 if (queue == 0) 1330 break; 1331 1332 i = DMA_RX_SIZE; 1333 queue--; 1334 } 1335 1336 return ret; 1337 } 1338 1339 /** 1340 * init_dma_tx_desc_rings - init the TX descriptor rings 1341 * @dev: net device structure. 1342 * Description: this function initializes the DMA TX descriptors 1343 * and allocates the socket buffers. It supports the chained and ring 1344 * modes. 1345 */ 1346 static int init_dma_tx_desc_rings(struct net_device *dev) 1347 { 1348 struct stmmac_priv *priv = netdev_priv(dev); 1349 u32 tx_queue_cnt = priv->plat->tx_queues_to_use; 1350 u32 queue; 1351 int i; 1352 1353 for (queue = 0; queue < tx_queue_cnt; queue++) { 1354 struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue]; 1355 1356 netif_dbg(priv, probe, priv->dev, 1357 "(%s) dma_tx_phy=0x%08x\n", __func__, 1358 (u32)tx_q->dma_tx_phy); 1359 1360 /* Setup the chained descriptor addresses */ 1361 if (priv->mode == STMMAC_CHAIN_MODE) { 1362 if (priv->extend_desc) 1363 stmmac_mode_init(priv, tx_q->dma_etx, 1364 tx_q->dma_tx_phy, DMA_TX_SIZE, 1); 1365 else 1366 stmmac_mode_init(priv, tx_q->dma_tx, 1367 tx_q->dma_tx_phy, DMA_TX_SIZE, 0); 1368 } 1369 1370 for (i = 0; i < DMA_TX_SIZE; i++) { 1371 struct dma_desc *p; 1372 if (priv->extend_desc) 1373 p = &((tx_q->dma_etx + i)->basic); 1374 else 1375 p = tx_q->dma_tx + i; 1376 1377 stmmac_clear_desc(priv, p); 1378 1379 tx_q->tx_skbuff_dma[i].buf = 0; 1380 tx_q->tx_skbuff_dma[i].map_as_page = false; 1381 tx_q->tx_skbuff_dma[i].len = 0; 1382 tx_q->tx_skbuff_dma[i].last_segment = false; 1383 tx_q->tx_skbuff[i] = NULL; 1384 } 1385 1386 tx_q->dirty_tx = 0; 1387 tx_q->cur_tx = 0; 1388 tx_q->mss = 0; 1389 1390 netdev_tx_reset_queue(netdev_get_tx_queue(priv->dev, queue)); 1391 } 1392 1393 return 0; 1394 } 1395 1396 /** 1397 * init_dma_desc_rings - init the RX/TX descriptor rings 1398 * @dev: net device structure 1399 * @flags: gfp flag. 1400 * Description: this function initializes the DMA RX/TX descriptors 1401 * and allocates the socket buffers. It supports the chained and ring 1402 * modes. 1403 */ 1404 static int init_dma_desc_rings(struct net_device *dev, gfp_t flags) 1405 { 1406 struct stmmac_priv *priv = netdev_priv(dev); 1407 int ret; 1408 1409 ret = init_dma_rx_desc_rings(dev, flags); 1410 if (ret) 1411 return ret; 1412 1413 ret = init_dma_tx_desc_rings(dev); 1414 1415 stmmac_clear_descriptors(priv); 1416 1417 if (netif_msg_hw(priv)) 1418 stmmac_display_rings(priv); 1419 1420 return ret; 1421 } 1422 1423 /** 1424 * dma_free_rx_skbufs - free RX dma buffers 1425 * @priv: private structure 1426 * @queue: RX queue index 1427 */ 1428 static void dma_free_rx_skbufs(struct stmmac_priv *priv, u32 queue) 1429 { 1430 int i; 1431 1432 for (i = 0; i < DMA_RX_SIZE; i++) 1433 stmmac_free_rx_buffer(priv, queue, i); 1434 } 1435 1436 /** 1437 * dma_free_tx_skbufs - free TX dma buffers 1438 * @priv: private structure 1439 * @queue: TX queue index 1440 */ 1441 static void dma_free_tx_skbufs(struct stmmac_priv *priv, u32 queue) 1442 { 1443 int i; 1444 1445 for (i = 0; i < DMA_TX_SIZE; i++) 1446 stmmac_free_tx_buffer(priv, queue, i); 1447 } 1448 1449 /** 1450 * free_dma_rx_desc_resources - free RX dma desc resources 1451 * @priv: private structure 1452 */ 1453 static void free_dma_rx_desc_resources(struct stmmac_priv *priv) 1454 { 1455 u32 rx_count = priv->plat->rx_queues_to_use; 1456 u32 queue; 1457 1458 /* Free RX queue resources */ 1459 for (queue = 0; queue < rx_count; queue++) { 1460 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue]; 1461 1462 /* Release the DMA RX socket buffers */ 1463 dma_free_rx_skbufs(priv, queue); 1464 1465 /* Free DMA regions of consistent memory previously allocated */ 1466 if (!priv->extend_desc) 1467 dma_free_coherent(priv->device, 1468 DMA_RX_SIZE * sizeof(struct dma_desc), 1469 rx_q->dma_rx, rx_q->dma_rx_phy); 1470 else 1471 dma_free_coherent(priv->device, DMA_RX_SIZE * 1472 sizeof(struct dma_extended_desc), 1473 rx_q->dma_erx, rx_q->dma_rx_phy); 1474 1475 kfree(rx_q->rx_skbuff_dma); 1476 kfree(rx_q->rx_skbuff); 1477 } 1478 } 1479 1480 /** 1481 * free_dma_tx_desc_resources - free TX dma desc resources 1482 * @priv: private structure 1483 */ 1484 static void free_dma_tx_desc_resources(struct stmmac_priv *priv) 1485 { 1486 u32 tx_count = priv->plat->tx_queues_to_use; 1487 u32 queue; 1488 1489 /* Free TX queue resources */ 1490 for (queue = 0; queue < tx_count; queue++) { 1491 struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue]; 1492 1493 /* Release the DMA TX socket buffers */ 1494 dma_free_tx_skbufs(priv, queue); 1495 1496 /* Free DMA regions of consistent memory previously allocated */ 1497 if (!priv->extend_desc) 1498 dma_free_coherent(priv->device, 1499 DMA_TX_SIZE * sizeof(struct dma_desc), 1500 tx_q->dma_tx, tx_q->dma_tx_phy); 1501 else 1502 dma_free_coherent(priv->device, DMA_TX_SIZE * 1503 sizeof(struct dma_extended_desc), 1504 tx_q->dma_etx, tx_q->dma_tx_phy); 1505 1506 kfree(tx_q->tx_skbuff_dma); 1507 kfree(tx_q->tx_skbuff); 1508 } 1509 } 1510 1511 /** 1512 * alloc_dma_rx_desc_resources - alloc RX resources. 1513 * @priv: private structure 1514 * Description: according to which descriptor can be used (extend or basic) 1515 * this function allocates the resources for TX and RX paths. In case of 1516 * reception, for example, it pre-allocated the RX socket buffer in order to 1517 * allow zero-copy mechanism. 1518 */ 1519 static int alloc_dma_rx_desc_resources(struct stmmac_priv *priv) 1520 { 1521 u32 rx_count = priv->plat->rx_queues_to_use; 1522 int ret = -ENOMEM; 1523 u32 queue; 1524 1525 /* RX queues buffers and DMA */ 1526 for (queue = 0; queue < rx_count; queue++) { 1527 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue]; 1528 1529 rx_q->queue_index = queue; 1530 rx_q->priv_data = priv; 1531 1532 rx_q->rx_skbuff_dma = kmalloc_array(DMA_RX_SIZE, 1533 sizeof(dma_addr_t), 1534 GFP_KERNEL); 1535 if (!rx_q->rx_skbuff_dma) 1536 goto err_dma; 1537 1538 rx_q->rx_skbuff = kmalloc_array(DMA_RX_SIZE, 1539 sizeof(struct sk_buff *), 1540 GFP_KERNEL); 1541 if (!rx_q->rx_skbuff) 1542 goto err_dma; 1543 1544 if (priv->extend_desc) { 1545 rx_q->dma_erx = dma_zalloc_coherent(priv->device, 1546 DMA_RX_SIZE * 1547 sizeof(struct 1548 dma_extended_desc), 1549 &rx_q->dma_rx_phy, 1550 GFP_KERNEL); 1551 if (!rx_q->dma_erx) 1552 goto err_dma; 1553 1554 } else { 1555 rx_q->dma_rx = dma_zalloc_coherent(priv->device, 1556 DMA_RX_SIZE * 1557 sizeof(struct 1558 dma_desc), 1559 &rx_q->dma_rx_phy, 1560 GFP_KERNEL); 1561 if (!rx_q->dma_rx) 1562 goto err_dma; 1563 } 1564 } 1565 1566 return 0; 1567 1568 err_dma: 1569 free_dma_rx_desc_resources(priv); 1570 1571 return ret; 1572 } 1573 1574 /** 1575 * alloc_dma_tx_desc_resources - alloc TX resources. 1576 * @priv: private structure 1577 * Description: according to which descriptor can be used (extend or basic) 1578 * this function allocates the resources for TX and RX paths. In case of 1579 * reception, for example, it pre-allocated the RX socket buffer in order to 1580 * allow zero-copy mechanism. 1581 */ 1582 static int alloc_dma_tx_desc_resources(struct stmmac_priv *priv) 1583 { 1584 u32 tx_count = priv->plat->tx_queues_to_use; 1585 int ret = -ENOMEM; 1586 u32 queue; 1587 1588 /* TX queues buffers and DMA */ 1589 for (queue = 0; queue < tx_count; queue++) { 1590 struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue]; 1591 1592 tx_q->queue_index = queue; 1593 tx_q->priv_data = priv; 1594 1595 tx_q->tx_skbuff_dma = kmalloc_array(DMA_TX_SIZE, 1596 sizeof(*tx_q->tx_skbuff_dma), 1597 GFP_KERNEL); 1598 if (!tx_q->tx_skbuff_dma) 1599 goto err_dma; 1600 1601 tx_q->tx_skbuff = kmalloc_array(DMA_TX_SIZE, 1602 sizeof(struct sk_buff *), 1603 GFP_KERNEL); 1604 if (!tx_q->tx_skbuff) 1605 goto err_dma; 1606 1607 if (priv->extend_desc) { 1608 tx_q->dma_etx = dma_zalloc_coherent(priv->device, 1609 DMA_TX_SIZE * 1610 sizeof(struct 1611 dma_extended_desc), 1612 &tx_q->dma_tx_phy, 1613 GFP_KERNEL); 1614 if (!tx_q->dma_etx) 1615 goto err_dma; 1616 } else { 1617 tx_q->dma_tx = dma_zalloc_coherent(priv->device, 1618 DMA_TX_SIZE * 1619 sizeof(struct 1620 dma_desc), 1621 &tx_q->dma_tx_phy, 1622 GFP_KERNEL); 1623 if (!tx_q->dma_tx) 1624 goto err_dma; 1625 } 1626 } 1627 1628 return 0; 1629 1630 err_dma: 1631 free_dma_tx_desc_resources(priv); 1632 1633 return ret; 1634 } 1635 1636 /** 1637 * alloc_dma_desc_resources - alloc TX/RX resources. 1638 * @priv: private structure 1639 * Description: according to which descriptor can be used (extend or basic) 1640 * this function allocates the resources for TX and RX paths. In case of 1641 * reception, for example, it pre-allocated the RX socket buffer in order to 1642 * allow zero-copy mechanism. 1643 */ 1644 static int alloc_dma_desc_resources(struct stmmac_priv *priv) 1645 { 1646 /* RX Allocation */ 1647 int ret = alloc_dma_rx_desc_resources(priv); 1648 1649 if (ret) 1650 return ret; 1651 1652 ret = alloc_dma_tx_desc_resources(priv); 1653 1654 return ret; 1655 } 1656 1657 /** 1658 * free_dma_desc_resources - free dma desc resources 1659 * @priv: private structure 1660 */ 1661 static void free_dma_desc_resources(struct stmmac_priv *priv) 1662 { 1663 /* Release the DMA RX socket buffers */ 1664 free_dma_rx_desc_resources(priv); 1665 1666 /* Release the DMA TX socket buffers */ 1667 free_dma_tx_desc_resources(priv); 1668 } 1669 1670 /** 1671 * stmmac_mac_enable_rx_queues - Enable MAC rx queues 1672 * @priv: driver private structure 1673 * Description: It is used for enabling the rx queues in the MAC 1674 */ 1675 static void stmmac_mac_enable_rx_queues(struct stmmac_priv *priv) 1676 { 1677 u32 rx_queues_count = priv->plat->rx_queues_to_use; 1678 int queue; 1679 u8 mode; 1680 1681 for (queue = 0; queue < rx_queues_count; queue++) { 1682 mode = priv->plat->rx_queues_cfg[queue].mode_to_use; 1683 stmmac_rx_queue_enable(priv, priv->hw, mode, queue); 1684 } 1685 } 1686 1687 /** 1688 * stmmac_start_rx_dma - start RX DMA channel 1689 * @priv: driver private structure 1690 * @chan: RX channel index 1691 * Description: 1692 * This starts a RX DMA channel 1693 */ 1694 static void stmmac_start_rx_dma(struct stmmac_priv *priv, u32 chan) 1695 { 1696 netdev_dbg(priv->dev, "DMA RX processes started in channel %d\n", chan); 1697 stmmac_start_rx(priv, priv->ioaddr, chan); 1698 } 1699 1700 /** 1701 * stmmac_start_tx_dma - start TX DMA channel 1702 * @priv: driver private structure 1703 * @chan: TX channel index 1704 * Description: 1705 * This starts a TX DMA channel 1706 */ 1707 static void stmmac_start_tx_dma(struct stmmac_priv *priv, u32 chan) 1708 { 1709 netdev_dbg(priv->dev, "DMA TX processes started in channel %d\n", chan); 1710 stmmac_start_tx(priv, priv->ioaddr, chan); 1711 } 1712 1713 /** 1714 * stmmac_stop_rx_dma - stop RX DMA channel 1715 * @priv: driver private structure 1716 * @chan: RX channel index 1717 * Description: 1718 * This stops a RX DMA channel 1719 */ 1720 static void stmmac_stop_rx_dma(struct stmmac_priv *priv, u32 chan) 1721 { 1722 netdev_dbg(priv->dev, "DMA RX processes stopped in channel %d\n", chan); 1723 stmmac_stop_rx(priv, priv->ioaddr, chan); 1724 } 1725 1726 /** 1727 * stmmac_stop_tx_dma - stop TX DMA channel 1728 * @priv: driver private structure 1729 * @chan: TX channel index 1730 * Description: 1731 * This stops a TX DMA channel 1732 */ 1733 static void stmmac_stop_tx_dma(struct stmmac_priv *priv, u32 chan) 1734 { 1735 netdev_dbg(priv->dev, "DMA TX processes stopped in channel %d\n", chan); 1736 stmmac_stop_tx(priv, priv->ioaddr, chan); 1737 } 1738 1739 /** 1740 * stmmac_start_all_dma - start all RX and TX DMA channels 1741 * @priv: driver private structure 1742 * Description: 1743 * This starts all the RX and TX DMA channels 1744 */ 1745 static void stmmac_start_all_dma(struct stmmac_priv *priv) 1746 { 1747 u32 rx_channels_count = priv->plat->rx_queues_to_use; 1748 u32 tx_channels_count = priv->plat->tx_queues_to_use; 1749 u32 chan = 0; 1750 1751 for (chan = 0; chan < rx_channels_count; chan++) 1752 stmmac_start_rx_dma(priv, chan); 1753 1754 for (chan = 0; chan < tx_channels_count; chan++) 1755 stmmac_start_tx_dma(priv, chan); 1756 } 1757 1758 /** 1759 * stmmac_stop_all_dma - stop all RX and TX DMA channels 1760 * @priv: driver private structure 1761 * Description: 1762 * This stops the RX and TX DMA channels 1763 */ 1764 static void stmmac_stop_all_dma(struct stmmac_priv *priv) 1765 { 1766 u32 rx_channels_count = priv->plat->rx_queues_to_use; 1767 u32 tx_channels_count = priv->plat->tx_queues_to_use; 1768 u32 chan = 0; 1769 1770 for (chan = 0; chan < rx_channels_count; chan++) 1771 stmmac_stop_rx_dma(priv, chan); 1772 1773 for (chan = 0; chan < tx_channels_count; chan++) 1774 stmmac_stop_tx_dma(priv, chan); 1775 } 1776 1777 /** 1778 * stmmac_dma_operation_mode - HW DMA operation mode 1779 * @priv: driver private structure 1780 * Description: it is used for configuring the DMA operation mode register in 1781 * order to program the tx/rx DMA thresholds or Store-And-Forward mode. 1782 */ 1783 static void stmmac_dma_operation_mode(struct stmmac_priv *priv) 1784 { 1785 u32 rx_channels_count = priv->plat->rx_queues_to_use; 1786 u32 tx_channels_count = priv->plat->tx_queues_to_use; 1787 int rxfifosz = priv->plat->rx_fifo_size; 1788 int txfifosz = priv->plat->tx_fifo_size; 1789 u32 txmode = 0; 1790 u32 rxmode = 0; 1791 u32 chan = 0; 1792 u8 qmode = 0; 1793 1794 if (rxfifosz == 0) 1795 rxfifosz = priv->dma_cap.rx_fifo_size; 1796 if (txfifosz == 0) 1797 txfifosz = priv->dma_cap.tx_fifo_size; 1798 1799 /* Adjust for real per queue fifo size */ 1800 rxfifosz /= rx_channels_count; 1801 txfifosz /= tx_channels_count; 1802 1803 if (priv->plat->force_thresh_dma_mode) { 1804 txmode = tc; 1805 rxmode = tc; 1806 } else if (priv->plat->force_sf_dma_mode || priv->plat->tx_coe) { 1807 /* 1808 * In case of GMAC, SF mode can be enabled 1809 * to perform the TX COE in HW. This depends on: 1810 * 1) TX COE if actually supported 1811 * 2) There is no bugged Jumbo frame support 1812 * that needs to not insert csum in the TDES. 1813 */ 1814 txmode = SF_DMA_MODE; 1815 rxmode = SF_DMA_MODE; 1816 priv->xstats.threshold = SF_DMA_MODE; 1817 } else { 1818 txmode = tc; 1819 rxmode = SF_DMA_MODE; 1820 } 1821 1822 /* configure all channels */ 1823 for (chan = 0; chan < rx_channels_count; chan++) { 1824 qmode = priv->plat->rx_queues_cfg[chan].mode_to_use; 1825 1826 stmmac_dma_rx_mode(priv, priv->ioaddr, rxmode, chan, 1827 rxfifosz, qmode); 1828 stmmac_set_dma_bfsize(priv, priv->ioaddr, priv->dma_buf_sz, 1829 chan); 1830 } 1831 1832 for (chan = 0; chan < tx_channels_count; chan++) { 1833 qmode = priv->plat->tx_queues_cfg[chan].mode_to_use; 1834 1835 stmmac_dma_tx_mode(priv, priv->ioaddr, txmode, chan, 1836 txfifosz, qmode); 1837 } 1838 } 1839 1840 /** 1841 * stmmac_tx_clean - to manage the transmission completion 1842 * @priv: driver private structure 1843 * @queue: TX queue index 1844 * Description: it reclaims the transmit resources after transmission completes. 1845 */ 1846 static void stmmac_tx_clean(struct stmmac_priv *priv, u32 queue) 1847 { 1848 struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue]; 1849 unsigned int bytes_compl = 0, pkts_compl = 0; 1850 unsigned int entry; 1851 1852 netif_tx_lock(priv->dev); 1853 1854 priv->xstats.tx_clean++; 1855 1856 entry = tx_q->dirty_tx; 1857 while (entry != tx_q->cur_tx) { 1858 struct sk_buff *skb = tx_q->tx_skbuff[entry]; 1859 struct dma_desc *p; 1860 int status; 1861 1862 if (priv->extend_desc) 1863 p = (struct dma_desc *)(tx_q->dma_etx + entry); 1864 else 1865 p = tx_q->dma_tx + entry; 1866 1867 status = stmmac_tx_status(priv, &priv->dev->stats, 1868 &priv->xstats, p, priv->ioaddr); 1869 /* Check if the descriptor is owned by the DMA */ 1870 if (unlikely(status & tx_dma_own)) 1871 break; 1872 1873 /* Make sure descriptor fields are read after reading 1874 * the own bit. 1875 */ 1876 dma_rmb(); 1877 1878 /* Just consider the last segment and ...*/ 1879 if (likely(!(status & tx_not_ls))) { 1880 /* ... verify the status error condition */ 1881 if (unlikely(status & tx_err)) { 1882 priv->dev->stats.tx_errors++; 1883 } else { 1884 priv->dev->stats.tx_packets++; 1885 priv->xstats.tx_pkt_n++; 1886 } 1887 stmmac_get_tx_hwtstamp(priv, p, skb); 1888 } 1889 1890 if (likely(tx_q->tx_skbuff_dma[entry].buf)) { 1891 if (tx_q->tx_skbuff_dma[entry].map_as_page) 1892 dma_unmap_page(priv->device, 1893 tx_q->tx_skbuff_dma[entry].buf, 1894 tx_q->tx_skbuff_dma[entry].len, 1895 DMA_TO_DEVICE); 1896 else 1897 dma_unmap_single(priv->device, 1898 tx_q->tx_skbuff_dma[entry].buf, 1899 tx_q->tx_skbuff_dma[entry].len, 1900 DMA_TO_DEVICE); 1901 tx_q->tx_skbuff_dma[entry].buf = 0; 1902 tx_q->tx_skbuff_dma[entry].len = 0; 1903 tx_q->tx_skbuff_dma[entry].map_as_page = false; 1904 } 1905 1906 stmmac_clean_desc3(priv, tx_q, p); 1907 1908 tx_q->tx_skbuff_dma[entry].last_segment = false; 1909 tx_q->tx_skbuff_dma[entry].is_jumbo = false; 1910 1911 if (likely(skb != NULL)) { 1912 pkts_compl++; 1913 bytes_compl += skb->len; 1914 dev_consume_skb_any(skb); 1915 tx_q->tx_skbuff[entry] = NULL; 1916 } 1917 1918 stmmac_release_tx_desc(priv, p, priv->mode); 1919 1920 entry = STMMAC_GET_ENTRY(entry, DMA_TX_SIZE); 1921 } 1922 tx_q->dirty_tx = entry; 1923 1924 netdev_tx_completed_queue(netdev_get_tx_queue(priv->dev, queue), 1925 pkts_compl, bytes_compl); 1926 1927 if (unlikely(netif_tx_queue_stopped(netdev_get_tx_queue(priv->dev, 1928 queue))) && 1929 stmmac_tx_avail(priv, queue) > STMMAC_TX_THRESH) { 1930 1931 netif_dbg(priv, tx_done, priv->dev, 1932 "%s: restart transmit\n", __func__); 1933 netif_tx_wake_queue(netdev_get_tx_queue(priv->dev, queue)); 1934 } 1935 1936 if ((priv->eee_enabled) && (!priv->tx_path_in_lpi_mode)) { 1937 stmmac_enable_eee_mode(priv); 1938 mod_timer(&priv->eee_ctrl_timer, STMMAC_LPI_T(eee_timer)); 1939 } 1940 netif_tx_unlock(priv->dev); 1941 } 1942 1943 /** 1944 * stmmac_tx_err - to manage the tx error 1945 * @priv: driver private structure 1946 * @chan: channel index 1947 * Description: it cleans the descriptors and restarts the transmission 1948 * in case of transmission errors. 1949 */ 1950 static void stmmac_tx_err(struct stmmac_priv *priv, u32 chan) 1951 { 1952 struct stmmac_tx_queue *tx_q = &priv->tx_queue[chan]; 1953 int i; 1954 1955 netif_tx_stop_queue(netdev_get_tx_queue(priv->dev, chan)); 1956 1957 stmmac_stop_tx_dma(priv, chan); 1958 dma_free_tx_skbufs(priv, chan); 1959 for (i = 0; i < DMA_TX_SIZE; i++) 1960 if (priv->extend_desc) 1961 stmmac_init_tx_desc(priv, &tx_q->dma_etx[i].basic, 1962 priv->mode, (i == DMA_TX_SIZE - 1)); 1963 else 1964 stmmac_init_tx_desc(priv, &tx_q->dma_tx[i], 1965 priv->mode, (i == DMA_TX_SIZE - 1)); 1966 tx_q->dirty_tx = 0; 1967 tx_q->cur_tx = 0; 1968 tx_q->mss = 0; 1969 netdev_tx_reset_queue(netdev_get_tx_queue(priv->dev, chan)); 1970 stmmac_start_tx_dma(priv, chan); 1971 1972 priv->dev->stats.tx_errors++; 1973 netif_tx_wake_queue(netdev_get_tx_queue(priv->dev, chan)); 1974 } 1975 1976 /** 1977 * stmmac_set_dma_operation_mode - Set DMA operation mode by channel 1978 * @priv: driver private structure 1979 * @txmode: TX operating mode 1980 * @rxmode: RX operating mode 1981 * @chan: channel index 1982 * Description: it is used for configuring of the DMA operation mode in 1983 * runtime in order to program the tx/rx DMA thresholds or Store-And-Forward 1984 * mode. 1985 */ 1986 static void stmmac_set_dma_operation_mode(struct stmmac_priv *priv, u32 txmode, 1987 u32 rxmode, u32 chan) 1988 { 1989 u8 rxqmode = priv->plat->rx_queues_cfg[chan].mode_to_use; 1990 u8 txqmode = priv->plat->tx_queues_cfg[chan].mode_to_use; 1991 u32 rx_channels_count = priv->plat->rx_queues_to_use; 1992 u32 tx_channels_count = priv->plat->tx_queues_to_use; 1993 int rxfifosz = priv->plat->rx_fifo_size; 1994 int txfifosz = priv->plat->tx_fifo_size; 1995 1996 if (rxfifosz == 0) 1997 rxfifosz = priv->dma_cap.rx_fifo_size; 1998 if (txfifosz == 0) 1999 txfifosz = priv->dma_cap.tx_fifo_size; 2000 2001 /* Adjust for real per queue fifo size */ 2002 rxfifosz /= rx_channels_count; 2003 txfifosz /= tx_channels_count; 2004 2005 stmmac_dma_rx_mode(priv, priv->ioaddr, rxmode, chan, rxfifosz, rxqmode); 2006 stmmac_dma_tx_mode(priv, priv->ioaddr, txmode, chan, txfifosz, txqmode); 2007 } 2008 2009 static bool stmmac_safety_feat_interrupt(struct stmmac_priv *priv) 2010 { 2011 int ret; 2012 2013 ret = stmmac_safety_feat_irq_status(priv, priv->dev, 2014 priv->ioaddr, priv->dma_cap.asp, &priv->sstats); 2015 if (ret && (ret != -EINVAL)) { 2016 stmmac_global_err(priv); 2017 return true; 2018 } 2019 2020 return false; 2021 } 2022 2023 /** 2024 * stmmac_dma_interrupt - DMA ISR 2025 * @priv: driver private structure 2026 * Description: this is the DMA ISR. It is called by the main ISR. 2027 * It calls the dwmac dma routine and schedule poll method in case of some 2028 * work can be done. 2029 */ 2030 static void stmmac_dma_interrupt(struct stmmac_priv *priv) 2031 { 2032 u32 tx_channel_count = priv->plat->tx_queues_to_use; 2033 u32 rx_channel_count = priv->plat->rx_queues_to_use; 2034 u32 channels_to_check = tx_channel_count > rx_channel_count ? 2035 tx_channel_count : rx_channel_count; 2036 u32 chan; 2037 bool poll_scheduled = false; 2038 int status[max_t(u32, MTL_MAX_TX_QUEUES, MTL_MAX_RX_QUEUES)]; 2039 2040 /* Make sure we never check beyond our status buffer. */ 2041 if (WARN_ON_ONCE(channels_to_check > ARRAY_SIZE(status))) 2042 channels_to_check = ARRAY_SIZE(status); 2043 2044 /* Each DMA channel can be used for rx and tx simultaneously, yet 2045 * napi_struct is embedded in struct stmmac_rx_queue rather than in a 2046 * stmmac_channel struct. 2047 * Because of this, stmmac_poll currently checks (and possibly wakes) 2048 * all tx queues rather than just a single tx queue. 2049 */ 2050 for (chan = 0; chan < channels_to_check; chan++) 2051 status[chan] = stmmac_dma_interrupt_status(priv, priv->ioaddr, 2052 &priv->xstats, chan); 2053 2054 for (chan = 0; chan < rx_channel_count; chan++) { 2055 if (likely(status[chan] & handle_rx)) { 2056 struct stmmac_rx_queue *rx_q = &priv->rx_queue[chan]; 2057 2058 if (likely(napi_schedule_prep(&rx_q->napi))) { 2059 stmmac_disable_dma_irq(priv, priv->ioaddr, chan); 2060 __napi_schedule(&rx_q->napi); 2061 poll_scheduled = true; 2062 } 2063 } 2064 } 2065 2066 /* If we scheduled poll, we already know that tx queues will be checked. 2067 * If we didn't schedule poll, see if any DMA channel (used by tx) has a 2068 * completed transmission, if so, call stmmac_poll (once). 2069 */ 2070 if (!poll_scheduled) { 2071 for (chan = 0; chan < tx_channel_count; chan++) { 2072 if (status[chan] & handle_tx) { 2073 /* It doesn't matter what rx queue we choose 2074 * here. We use 0 since it always exists. 2075 */ 2076 struct stmmac_rx_queue *rx_q = 2077 &priv->rx_queue[0]; 2078 2079 if (likely(napi_schedule_prep(&rx_q->napi))) { 2080 stmmac_disable_dma_irq(priv, 2081 priv->ioaddr, chan); 2082 __napi_schedule(&rx_q->napi); 2083 } 2084 break; 2085 } 2086 } 2087 } 2088 2089 for (chan = 0; chan < tx_channel_count; chan++) { 2090 if (unlikely(status[chan] & tx_hard_error_bump_tc)) { 2091 /* Try to bump up the dma threshold on this failure */ 2092 if (unlikely(priv->xstats.threshold != SF_DMA_MODE) && 2093 (tc <= 256)) { 2094 tc += 64; 2095 if (priv->plat->force_thresh_dma_mode) 2096 stmmac_set_dma_operation_mode(priv, 2097 tc, 2098 tc, 2099 chan); 2100 else 2101 stmmac_set_dma_operation_mode(priv, 2102 tc, 2103 SF_DMA_MODE, 2104 chan); 2105 priv->xstats.threshold = tc; 2106 } 2107 } else if (unlikely(status[chan] == tx_hard_error)) { 2108 stmmac_tx_err(priv, chan); 2109 } 2110 } 2111 } 2112 2113 /** 2114 * stmmac_mmc_setup: setup the Mac Management Counters (MMC) 2115 * @priv: driver private structure 2116 * Description: this masks the MMC irq, in fact, the counters are managed in SW. 2117 */ 2118 static void stmmac_mmc_setup(struct stmmac_priv *priv) 2119 { 2120 unsigned int mode = MMC_CNTRL_RESET_ON_READ | MMC_CNTRL_COUNTER_RESET | 2121 MMC_CNTRL_PRESET | MMC_CNTRL_FULL_HALF_PRESET; 2122 2123 dwmac_mmc_intr_all_mask(priv->mmcaddr); 2124 2125 if (priv->dma_cap.rmon) { 2126 dwmac_mmc_ctrl(priv->mmcaddr, mode); 2127 memset(&priv->mmc, 0, sizeof(struct stmmac_counters)); 2128 } else 2129 netdev_info(priv->dev, "No MAC Management Counters available\n"); 2130 } 2131 2132 /** 2133 * stmmac_get_hw_features - get MAC capabilities from the HW cap. register. 2134 * @priv: driver private structure 2135 * Description: 2136 * new GMAC chip generations have a new register to indicate the 2137 * presence of the optional feature/functions. 2138 * This can be also used to override the value passed through the 2139 * platform and necessary for old MAC10/100 and GMAC chips. 2140 */ 2141 static int stmmac_get_hw_features(struct stmmac_priv *priv) 2142 { 2143 return stmmac_get_hw_feature(priv, priv->ioaddr, &priv->dma_cap) == 0; 2144 } 2145 2146 /** 2147 * stmmac_check_ether_addr - check if the MAC addr is valid 2148 * @priv: driver private structure 2149 * Description: 2150 * it is to verify if the MAC address is valid, in case of failures it 2151 * generates a random MAC address 2152 */ 2153 static void stmmac_check_ether_addr(struct stmmac_priv *priv) 2154 { 2155 if (!is_valid_ether_addr(priv->dev->dev_addr)) { 2156 stmmac_get_umac_addr(priv, priv->hw, priv->dev->dev_addr, 0); 2157 if (!is_valid_ether_addr(priv->dev->dev_addr)) 2158 eth_hw_addr_random(priv->dev); 2159 netdev_info(priv->dev, "device MAC address %pM\n", 2160 priv->dev->dev_addr); 2161 } 2162 } 2163 2164 /** 2165 * stmmac_init_dma_engine - DMA init. 2166 * @priv: driver private structure 2167 * Description: 2168 * It inits the DMA invoking the specific MAC/GMAC callback. 2169 * Some DMA parameters can be passed from the platform; 2170 * in case of these are not passed a default is kept for the MAC or GMAC. 2171 */ 2172 static int stmmac_init_dma_engine(struct stmmac_priv *priv) 2173 { 2174 u32 rx_channels_count = priv->plat->rx_queues_to_use; 2175 u32 tx_channels_count = priv->plat->tx_queues_to_use; 2176 u32 dma_csr_ch = max(rx_channels_count, tx_channels_count); 2177 struct stmmac_rx_queue *rx_q; 2178 struct stmmac_tx_queue *tx_q; 2179 u32 chan = 0; 2180 int atds = 0; 2181 int ret = 0; 2182 2183 if (!priv->plat->dma_cfg || !priv->plat->dma_cfg->pbl) { 2184 dev_err(priv->device, "Invalid DMA configuration\n"); 2185 return -EINVAL; 2186 } 2187 2188 if (priv->extend_desc && (priv->mode == STMMAC_RING_MODE)) 2189 atds = 1; 2190 2191 ret = stmmac_reset(priv, priv->ioaddr); 2192 if (ret) { 2193 dev_err(priv->device, "Failed to reset the dma\n"); 2194 return ret; 2195 } 2196 2197 /* DMA Configuration */ 2198 stmmac_dma_init(priv, priv->ioaddr, priv->plat->dma_cfg, atds); 2199 2200 if (priv->plat->axi) 2201 stmmac_axi(priv, priv->ioaddr, priv->plat->axi); 2202 2203 /* DMA RX Channel Configuration */ 2204 for (chan = 0; chan < rx_channels_count; chan++) { 2205 rx_q = &priv->rx_queue[chan]; 2206 2207 stmmac_init_rx_chan(priv, priv->ioaddr, priv->plat->dma_cfg, 2208 rx_q->dma_rx_phy, chan); 2209 2210 rx_q->rx_tail_addr = rx_q->dma_rx_phy + 2211 (DMA_RX_SIZE * sizeof(struct dma_desc)); 2212 stmmac_set_rx_tail_ptr(priv, priv->ioaddr, 2213 rx_q->rx_tail_addr, chan); 2214 } 2215 2216 /* DMA TX Channel Configuration */ 2217 for (chan = 0; chan < tx_channels_count; chan++) { 2218 tx_q = &priv->tx_queue[chan]; 2219 2220 stmmac_init_tx_chan(priv, priv->ioaddr, priv->plat->dma_cfg, 2221 tx_q->dma_tx_phy, chan); 2222 2223 tx_q->tx_tail_addr = tx_q->dma_tx_phy + 2224 (DMA_TX_SIZE * sizeof(struct dma_desc)); 2225 stmmac_set_tx_tail_ptr(priv, priv->ioaddr, 2226 tx_q->tx_tail_addr, chan); 2227 } 2228 2229 /* DMA CSR Channel configuration */ 2230 for (chan = 0; chan < dma_csr_ch; chan++) 2231 stmmac_init_chan(priv, priv->ioaddr, priv->plat->dma_cfg, chan); 2232 2233 return ret; 2234 } 2235 2236 /** 2237 * stmmac_tx_timer - mitigation sw timer for tx. 2238 * @data: data pointer 2239 * Description: 2240 * This is the timer handler to directly invoke the stmmac_tx_clean. 2241 */ 2242 static void stmmac_tx_timer(struct timer_list *t) 2243 { 2244 struct stmmac_priv *priv = from_timer(priv, t, txtimer); 2245 u32 tx_queues_count = priv->plat->tx_queues_to_use; 2246 u32 queue; 2247 2248 /* let's scan all the tx queues */ 2249 for (queue = 0; queue < tx_queues_count; queue++) 2250 stmmac_tx_clean(priv, queue); 2251 } 2252 2253 /** 2254 * stmmac_init_tx_coalesce - init tx mitigation options. 2255 * @priv: driver private structure 2256 * Description: 2257 * This inits the transmit coalesce parameters: i.e. timer rate, 2258 * timer handler and default threshold used for enabling the 2259 * interrupt on completion bit. 2260 */ 2261 static void stmmac_init_tx_coalesce(struct stmmac_priv *priv) 2262 { 2263 priv->tx_coal_frames = STMMAC_TX_FRAMES; 2264 priv->tx_coal_timer = STMMAC_COAL_TX_TIMER; 2265 timer_setup(&priv->txtimer, stmmac_tx_timer, 0); 2266 priv->txtimer.expires = STMMAC_COAL_TIMER(priv->tx_coal_timer); 2267 add_timer(&priv->txtimer); 2268 } 2269 2270 static void stmmac_set_rings_length(struct stmmac_priv *priv) 2271 { 2272 u32 rx_channels_count = priv->plat->rx_queues_to_use; 2273 u32 tx_channels_count = priv->plat->tx_queues_to_use; 2274 u32 chan; 2275 2276 /* set TX ring length */ 2277 for (chan = 0; chan < tx_channels_count; chan++) 2278 stmmac_set_tx_ring_len(priv, priv->ioaddr, 2279 (DMA_TX_SIZE - 1), chan); 2280 2281 /* set RX ring length */ 2282 for (chan = 0; chan < rx_channels_count; chan++) 2283 stmmac_set_rx_ring_len(priv, priv->ioaddr, 2284 (DMA_RX_SIZE - 1), chan); 2285 } 2286 2287 /** 2288 * stmmac_set_tx_queue_weight - Set TX queue weight 2289 * @priv: driver private structure 2290 * Description: It is used for setting TX queues weight 2291 */ 2292 static void stmmac_set_tx_queue_weight(struct stmmac_priv *priv) 2293 { 2294 u32 tx_queues_count = priv->plat->tx_queues_to_use; 2295 u32 weight; 2296 u32 queue; 2297 2298 for (queue = 0; queue < tx_queues_count; queue++) { 2299 weight = priv->plat->tx_queues_cfg[queue].weight; 2300 stmmac_set_mtl_tx_queue_weight(priv, priv->hw, weight, queue); 2301 } 2302 } 2303 2304 /** 2305 * stmmac_configure_cbs - Configure CBS in TX queue 2306 * @priv: driver private structure 2307 * Description: It is used for configuring CBS in AVB TX queues 2308 */ 2309 static void stmmac_configure_cbs(struct stmmac_priv *priv) 2310 { 2311 u32 tx_queues_count = priv->plat->tx_queues_to_use; 2312 u32 mode_to_use; 2313 u32 queue; 2314 2315 /* queue 0 is reserved for legacy traffic */ 2316 for (queue = 1; queue < tx_queues_count; queue++) { 2317 mode_to_use = priv->plat->tx_queues_cfg[queue].mode_to_use; 2318 if (mode_to_use == MTL_QUEUE_DCB) 2319 continue; 2320 2321 stmmac_config_cbs(priv, priv->hw, 2322 priv->plat->tx_queues_cfg[queue].send_slope, 2323 priv->plat->tx_queues_cfg[queue].idle_slope, 2324 priv->plat->tx_queues_cfg[queue].high_credit, 2325 priv->plat->tx_queues_cfg[queue].low_credit, 2326 queue); 2327 } 2328 } 2329 2330 /** 2331 * stmmac_rx_queue_dma_chan_map - Map RX queue to RX dma channel 2332 * @priv: driver private structure 2333 * Description: It is used for mapping RX queues to RX dma channels 2334 */ 2335 static void stmmac_rx_queue_dma_chan_map(struct stmmac_priv *priv) 2336 { 2337 u32 rx_queues_count = priv->plat->rx_queues_to_use; 2338 u32 queue; 2339 u32 chan; 2340 2341 for (queue = 0; queue < rx_queues_count; queue++) { 2342 chan = priv->plat->rx_queues_cfg[queue].chan; 2343 stmmac_map_mtl_to_dma(priv, priv->hw, queue, chan); 2344 } 2345 } 2346 2347 /** 2348 * stmmac_mac_config_rx_queues_prio - Configure RX Queue priority 2349 * @priv: driver private structure 2350 * Description: It is used for configuring the RX Queue Priority 2351 */ 2352 static void stmmac_mac_config_rx_queues_prio(struct stmmac_priv *priv) 2353 { 2354 u32 rx_queues_count = priv->plat->rx_queues_to_use; 2355 u32 queue; 2356 u32 prio; 2357 2358 for (queue = 0; queue < rx_queues_count; queue++) { 2359 if (!priv->plat->rx_queues_cfg[queue].use_prio) 2360 continue; 2361 2362 prio = priv->plat->rx_queues_cfg[queue].prio; 2363 stmmac_rx_queue_prio(priv, priv->hw, prio, queue); 2364 } 2365 } 2366 2367 /** 2368 * stmmac_mac_config_tx_queues_prio - Configure TX Queue priority 2369 * @priv: driver private structure 2370 * Description: It is used for configuring the TX Queue Priority 2371 */ 2372 static void stmmac_mac_config_tx_queues_prio(struct stmmac_priv *priv) 2373 { 2374 u32 tx_queues_count = priv->plat->tx_queues_to_use; 2375 u32 queue; 2376 u32 prio; 2377 2378 for (queue = 0; queue < tx_queues_count; queue++) { 2379 if (!priv->plat->tx_queues_cfg[queue].use_prio) 2380 continue; 2381 2382 prio = priv->plat->tx_queues_cfg[queue].prio; 2383 stmmac_tx_queue_prio(priv, priv->hw, prio, queue); 2384 } 2385 } 2386 2387 /** 2388 * stmmac_mac_config_rx_queues_routing - Configure RX Queue Routing 2389 * @priv: driver private structure 2390 * Description: It is used for configuring the RX queue routing 2391 */ 2392 static void stmmac_mac_config_rx_queues_routing(struct stmmac_priv *priv) 2393 { 2394 u32 rx_queues_count = priv->plat->rx_queues_to_use; 2395 u32 queue; 2396 u8 packet; 2397 2398 for (queue = 0; queue < rx_queues_count; queue++) { 2399 /* no specific packet type routing specified for the queue */ 2400 if (priv->plat->rx_queues_cfg[queue].pkt_route == 0x0) 2401 continue; 2402 2403 packet = priv->plat->rx_queues_cfg[queue].pkt_route; 2404 stmmac_rx_queue_routing(priv, priv->hw, packet, queue); 2405 } 2406 } 2407 2408 /** 2409 * stmmac_mtl_configuration - Configure MTL 2410 * @priv: driver private structure 2411 * Description: It is used for configurring MTL 2412 */ 2413 static void stmmac_mtl_configuration(struct stmmac_priv *priv) 2414 { 2415 u32 rx_queues_count = priv->plat->rx_queues_to_use; 2416 u32 tx_queues_count = priv->plat->tx_queues_to_use; 2417 2418 if (tx_queues_count > 1) 2419 stmmac_set_tx_queue_weight(priv); 2420 2421 /* Configure MTL RX algorithms */ 2422 if (rx_queues_count > 1) 2423 stmmac_prog_mtl_rx_algorithms(priv, priv->hw, 2424 priv->plat->rx_sched_algorithm); 2425 2426 /* Configure MTL TX algorithms */ 2427 if (tx_queues_count > 1) 2428 stmmac_prog_mtl_tx_algorithms(priv, priv->hw, 2429 priv->plat->tx_sched_algorithm); 2430 2431 /* Configure CBS in AVB TX queues */ 2432 if (tx_queues_count > 1) 2433 stmmac_configure_cbs(priv); 2434 2435 /* Map RX MTL to DMA channels */ 2436 stmmac_rx_queue_dma_chan_map(priv); 2437 2438 /* Enable MAC RX Queues */ 2439 stmmac_mac_enable_rx_queues(priv); 2440 2441 /* Set RX priorities */ 2442 if (rx_queues_count > 1) 2443 stmmac_mac_config_rx_queues_prio(priv); 2444 2445 /* Set TX priorities */ 2446 if (tx_queues_count > 1) 2447 stmmac_mac_config_tx_queues_prio(priv); 2448 2449 /* Set RX routing */ 2450 if (rx_queues_count > 1) 2451 stmmac_mac_config_rx_queues_routing(priv); 2452 } 2453 2454 static void stmmac_safety_feat_configuration(struct stmmac_priv *priv) 2455 { 2456 if (priv->dma_cap.asp) { 2457 netdev_info(priv->dev, "Enabling Safety Features\n"); 2458 stmmac_safety_feat_config(priv, priv->ioaddr, priv->dma_cap.asp); 2459 } else { 2460 netdev_info(priv->dev, "No Safety Features support found\n"); 2461 } 2462 } 2463 2464 /** 2465 * stmmac_hw_setup - setup mac in a usable state. 2466 * @dev : pointer to the device structure. 2467 * Description: 2468 * this is the main function to setup the HW in a usable state because the 2469 * dma engine is reset, the core registers are configured (e.g. AXI, 2470 * Checksum features, timers). The DMA is ready to start receiving and 2471 * transmitting. 2472 * Return value: 2473 * 0 on success and an appropriate (-)ve integer as defined in errno.h 2474 * file on failure. 2475 */ 2476 static int stmmac_hw_setup(struct net_device *dev, bool init_ptp) 2477 { 2478 struct stmmac_priv *priv = netdev_priv(dev); 2479 u32 rx_cnt = priv->plat->rx_queues_to_use; 2480 u32 tx_cnt = priv->plat->tx_queues_to_use; 2481 u32 chan; 2482 int ret; 2483 2484 /* DMA initialization and SW reset */ 2485 ret = stmmac_init_dma_engine(priv); 2486 if (ret < 0) { 2487 netdev_err(priv->dev, "%s: DMA engine initialization failed\n", 2488 __func__); 2489 return ret; 2490 } 2491 2492 /* Copy the MAC addr into the HW */ 2493 stmmac_set_umac_addr(priv, priv->hw, dev->dev_addr, 0); 2494 2495 /* PS and related bits will be programmed according to the speed */ 2496 if (priv->hw->pcs) { 2497 int speed = priv->plat->mac_port_sel_speed; 2498 2499 if ((speed == SPEED_10) || (speed == SPEED_100) || 2500 (speed == SPEED_1000)) { 2501 priv->hw->ps = speed; 2502 } else { 2503 dev_warn(priv->device, "invalid port speed\n"); 2504 priv->hw->ps = 0; 2505 } 2506 } 2507 2508 /* Initialize the MAC Core */ 2509 stmmac_core_init(priv, priv->hw, dev); 2510 2511 /* Initialize MTL*/ 2512 stmmac_mtl_configuration(priv); 2513 2514 /* Initialize Safety Features */ 2515 stmmac_safety_feat_configuration(priv); 2516 2517 ret = stmmac_rx_ipc(priv, priv->hw); 2518 if (!ret) { 2519 netdev_warn(priv->dev, "RX IPC Checksum Offload disabled\n"); 2520 priv->plat->rx_coe = STMMAC_RX_COE_NONE; 2521 priv->hw->rx_csum = 0; 2522 } 2523 2524 /* Enable the MAC Rx/Tx */ 2525 stmmac_mac_set(priv, priv->ioaddr, true); 2526 2527 /* Set the HW DMA mode and the COE */ 2528 stmmac_dma_operation_mode(priv); 2529 2530 stmmac_mmc_setup(priv); 2531 2532 if (init_ptp) { 2533 ret = clk_prepare_enable(priv->plat->clk_ptp_ref); 2534 if (ret < 0) 2535 netdev_warn(priv->dev, "failed to enable PTP reference clock: %d\n", ret); 2536 2537 ret = stmmac_init_ptp(priv); 2538 if (ret == -EOPNOTSUPP) 2539 netdev_warn(priv->dev, "PTP not supported by HW\n"); 2540 else if (ret) 2541 netdev_warn(priv->dev, "PTP init failed\n"); 2542 } 2543 2544 #ifdef CONFIG_DEBUG_FS 2545 ret = stmmac_init_fs(dev); 2546 if (ret < 0) 2547 netdev_warn(priv->dev, "%s: failed debugFS registration\n", 2548 __func__); 2549 #endif 2550 priv->tx_lpi_timer = STMMAC_DEFAULT_TWT_LS; 2551 2552 if (priv->use_riwt) { 2553 ret = stmmac_rx_watchdog(priv, priv->ioaddr, MAX_DMA_RIWT, rx_cnt); 2554 if (!ret) 2555 priv->rx_riwt = MAX_DMA_RIWT; 2556 } 2557 2558 if (priv->hw->pcs) 2559 stmmac_pcs_ctrl_ane(priv, priv->hw, 1, priv->hw->ps, 0); 2560 2561 /* set TX and RX rings length */ 2562 stmmac_set_rings_length(priv); 2563 2564 /* Enable TSO */ 2565 if (priv->tso) { 2566 for (chan = 0; chan < tx_cnt; chan++) 2567 stmmac_enable_tso(priv, priv->ioaddr, 1, chan); 2568 } 2569 2570 /* Start the ball rolling... */ 2571 stmmac_start_all_dma(priv); 2572 2573 return 0; 2574 } 2575 2576 static void stmmac_hw_teardown(struct net_device *dev) 2577 { 2578 struct stmmac_priv *priv = netdev_priv(dev); 2579 2580 clk_disable_unprepare(priv->plat->clk_ptp_ref); 2581 } 2582 2583 /** 2584 * stmmac_open - open entry point of the driver 2585 * @dev : pointer to the device structure. 2586 * Description: 2587 * This function is the open entry point of the driver. 2588 * Return value: 2589 * 0 on success and an appropriate (-)ve integer as defined in errno.h 2590 * file on failure. 2591 */ 2592 static int stmmac_open(struct net_device *dev) 2593 { 2594 struct stmmac_priv *priv = netdev_priv(dev); 2595 int ret; 2596 2597 stmmac_check_ether_addr(priv); 2598 2599 if (priv->hw->pcs != STMMAC_PCS_RGMII && 2600 priv->hw->pcs != STMMAC_PCS_TBI && 2601 priv->hw->pcs != STMMAC_PCS_RTBI) { 2602 ret = stmmac_init_phy(dev); 2603 if (ret) { 2604 netdev_err(priv->dev, 2605 "%s: Cannot attach to PHY (error: %d)\n", 2606 __func__, ret); 2607 return ret; 2608 } 2609 } 2610 2611 /* Extra statistics */ 2612 memset(&priv->xstats, 0, sizeof(struct stmmac_extra_stats)); 2613 priv->xstats.threshold = tc; 2614 2615 priv->dma_buf_sz = STMMAC_ALIGN(buf_sz); 2616 priv->rx_copybreak = STMMAC_RX_COPYBREAK; 2617 2618 ret = alloc_dma_desc_resources(priv); 2619 if (ret < 0) { 2620 netdev_err(priv->dev, "%s: DMA descriptors allocation failed\n", 2621 __func__); 2622 goto dma_desc_error; 2623 } 2624 2625 ret = init_dma_desc_rings(dev, GFP_KERNEL); 2626 if (ret < 0) { 2627 netdev_err(priv->dev, "%s: DMA descriptors initialization failed\n", 2628 __func__); 2629 goto init_error; 2630 } 2631 2632 ret = stmmac_hw_setup(dev, true); 2633 if (ret < 0) { 2634 netdev_err(priv->dev, "%s: Hw setup failed\n", __func__); 2635 goto init_error; 2636 } 2637 2638 stmmac_init_tx_coalesce(priv); 2639 2640 if (dev->phydev) 2641 phy_start(dev->phydev); 2642 2643 /* Request the IRQ lines */ 2644 ret = request_irq(dev->irq, stmmac_interrupt, 2645 IRQF_SHARED, dev->name, dev); 2646 if (unlikely(ret < 0)) { 2647 netdev_err(priv->dev, 2648 "%s: ERROR: allocating the IRQ %d (error: %d)\n", 2649 __func__, dev->irq, ret); 2650 goto irq_error; 2651 } 2652 2653 /* Request the Wake IRQ in case of another line is used for WoL */ 2654 if (priv->wol_irq != dev->irq) { 2655 ret = request_irq(priv->wol_irq, stmmac_interrupt, 2656 IRQF_SHARED, dev->name, dev); 2657 if (unlikely(ret < 0)) { 2658 netdev_err(priv->dev, 2659 "%s: ERROR: allocating the WoL IRQ %d (%d)\n", 2660 __func__, priv->wol_irq, ret); 2661 goto wolirq_error; 2662 } 2663 } 2664 2665 /* Request the IRQ lines */ 2666 if (priv->lpi_irq > 0) { 2667 ret = request_irq(priv->lpi_irq, stmmac_interrupt, IRQF_SHARED, 2668 dev->name, dev); 2669 if (unlikely(ret < 0)) { 2670 netdev_err(priv->dev, 2671 "%s: ERROR: allocating the LPI IRQ %d (%d)\n", 2672 __func__, priv->lpi_irq, ret); 2673 goto lpiirq_error; 2674 } 2675 } 2676 2677 stmmac_enable_all_queues(priv); 2678 stmmac_start_all_queues(priv); 2679 2680 return 0; 2681 2682 lpiirq_error: 2683 if (priv->wol_irq != dev->irq) 2684 free_irq(priv->wol_irq, dev); 2685 wolirq_error: 2686 free_irq(dev->irq, dev); 2687 irq_error: 2688 if (dev->phydev) 2689 phy_stop(dev->phydev); 2690 2691 del_timer_sync(&priv->txtimer); 2692 stmmac_hw_teardown(dev); 2693 init_error: 2694 free_dma_desc_resources(priv); 2695 dma_desc_error: 2696 if (dev->phydev) 2697 phy_disconnect(dev->phydev); 2698 2699 return ret; 2700 } 2701 2702 /** 2703 * stmmac_release - close entry point of the driver 2704 * @dev : device pointer. 2705 * Description: 2706 * This is the stop entry point of the driver. 2707 */ 2708 static int stmmac_release(struct net_device *dev) 2709 { 2710 struct stmmac_priv *priv = netdev_priv(dev); 2711 2712 if (priv->eee_enabled) 2713 del_timer_sync(&priv->eee_ctrl_timer); 2714 2715 /* Stop and disconnect the PHY */ 2716 if (dev->phydev) { 2717 phy_stop(dev->phydev); 2718 phy_disconnect(dev->phydev); 2719 } 2720 2721 stmmac_stop_all_queues(priv); 2722 2723 stmmac_disable_all_queues(priv); 2724 2725 del_timer_sync(&priv->txtimer); 2726 2727 /* Free the IRQ lines */ 2728 free_irq(dev->irq, dev); 2729 if (priv->wol_irq != dev->irq) 2730 free_irq(priv->wol_irq, dev); 2731 if (priv->lpi_irq > 0) 2732 free_irq(priv->lpi_irq, dev); 2733 2734 /* Stop TX/RX DMA and clear the descriptors */ 2735 stmmac_stop_all_dma(priv); 2736 2737 /* Release and free the Rx/Tx resources */ 2738 free_dma_desc_resources(priv); 2739 2740 /* Disable the MAC Rx/Tx */ 2741 stmmac_mac_set(priv, priv->ioaddr, false); 2742 2743 netif_carrier_off(dev); 2744 2745 #ifdef CONFIG_DEBUG_FS 2746 stmmac_exit_fs(dev); 2747 #endif 2748 2749 stmmac_release_ptp(priv); 2750 2751 return 0; 2752 } 2753 2754 /** 2755 * stmmac_tso_allocator - close entry point of the driver 2756 * @priv: driver private structure 2757 * @des: buffer start address 2758 * @total_len: total length to fill in descriptors 2759 * @last_segmant: condition for the last descriptor 2760 * @queue: TX queue index 2761 * Description: 2762 * This function fills descriptor and request new descriptors according to 2763 * buffer length to fill 2764 */ 2765 static void stmmac_tso_allocator(struct stmmac_priv *priv, unsigned int des, 2766 int total_len, bool last_segment, u32 queue) 2767 { 2768 struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue]; 2769 struct dma_desc *desc; 2770 u32 buff_size; 2771 int tmp_len; 2772 2773 tmp_len = total_len; 2774 2775 while (tmp_len > 0) { 2776 tx_q->cur_tx = STMMAC_GET_ENTRY(tx_q->cur_tx, DMA_TX_SIZE); 2777 WARN_ON(tx_q->tx_skbuff[tx_q->cur_tx]); 2778 desc = tx_q->dma_tx + tx_q->cur_tx; 2779 2780 desc->des0 = cpu_to_le32(des + (total_len - tmp_len)); 2781 buff_size = tmp_len >= TSO_MAX_BUFF_SIZE ? 2782 TSO_MAX_BUFF_SIZE : tmp_len; 2783 2784 stmmac_prepare_tso_tx_desc(priv, desc, 0, buff_size, 2785 0, 1, 2786 (last_segment) && (tmp_len <= TSO_MAX_BUFF_SIZE), 2787 0, 0); 2788 2789 tmp_len -= TSO_MAX_BUFF_SIZE; 2790 } 2791 } 2792 2793 /** 2794 * stmmac_tso_xmit - Tx entry point of the driver for oversized frames (TSO) 2795 * @skb : the socket buffer 2796 * @dev : device pointer 2797 * Description: this is the transmit function that is called on TSO frames 2798 * (support available on GMAC4 and newer chips). 2799 * Diagram below show the ring programming in case of TSO frames: 2800 * 2801 * First Descriptor 2802 * -------- 2803 * | DES0 |---> buffer1 = L2/L3/L4 header 2804 * | DES1 |---> TCP Payload (can continue on next descr...) 2805 * | DES2 |---> buffer 1 and 2 len 2806 * | DES3 |---> must set TSE, TCP hdr len-> [22:19]. TCP payload len [17:0] 2807 * -------- 2808 * | 2809 * ... 2810 * | 2811 * -------- 2812 * | DES0 | --| Split TCP Payload on Buffers 1 and 2 2813 * | DES1 | --| 2814 * | DES2 | --> buffer 1 and 2 len 2815 * | DES3 | 2816 * -------- 2817 * 2818 * mss is fixed when enable tso, so w/o programming the TDES3 ctx field. 2819 */ 2820 static netdev_tx_t stmmac_tso_xmit(struct sk_buff *skb, struct net_device *dev) 2821 { 2822 struct dma_desc *desc, *first, *mss_desc = NULL; 2823 struct stmmac_priv *priv = netdev_priv(dev); 2824 int nfrags = skb_shinfo(skb)->nr_frags; 2825 u32 queue = skb_get_queue_mapping(skb); 2826 unsigned int first_entry, des; 2827 struct stmmac_tx_queue *tx_q; 2828 int tmp_pay_len = 0; 2829 u32 pay_len, mss; 2830 u8 proto_hdr_len; 2831 int i; 2832 2833 tx_q = &priv->tx_queue[queue]; 2834 2835 /* Compute header lengths */ 2836 proto_hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb); 2837 2838 /* Desc availability based on threshold should be enough safe */ 2839 if (unlikely(stmmac_tx_avail(priv, queue) < 2840 (((skb->len - proto_hdr_len) / TSO_MAX_BUFF_SIZE + 1)))) { 2841 if (!netif_tx_queue_stopped(netdev_get_tx_queue(dev, queue))) { 2842 netif_tx_stop_queue(netdev_get_tx_queue(priv->dev, 2843 queue)); 2844 /* This is a hard error, log it. */ 2845 netdev_err(priv->dev, 2846 "%s: Tx Ring full when queue awake\n", 2847 __func__); 2848 } 2849 return NETDEV_TX_BUSY; 2850 } 2851 2852 pay_len = skb_headlen(skb) - proto_hdr_len; /* no frags */ 2853 2854 mss = skb_shinfo(skb)->gso_size; 2855 2856 /* set new MSS value if needed */ 2857 if (mss != tx_q->mss) { 2858 mss_desc = tx_q->dma_tx + tx_q->cur_tx; 2859 stmmac_set_mss(priv, mss_desc, mss); 2860 tx_q->mss = mss; 2861 tx_q->cur_tx = STMMAC_GET_ENTRY(tx_q->cur_tx, DMA_TX_SIZE); 2862 WARN_ON(tx_q->tx_skbuff[tx_q->cur_tx]); 2863 } 2864 2865 if (netif_msg_tx_queued(priv)) { 2866 pr_info("%s: tcphdrlen %d, hdr_len %d, pay_len %d, mss %d\n", 2867 __func__, tcp_hdrlen(skb), proto_hdr_len, pay_len, mss); 2868 pr_info("\tskb->len %d, skb->data_len %d\n", skb->len, 2869 skb->data_len); 2870 } 2871 2872 first_entry = tx_q->cur_tx; 2873 WARN_ON(tx_q->tx_skbuff[first_entry]); 2874 2875 desc = tx_q->dma_tx + first_entry; 2876 first = desc; 2877 2878 /* first descriptor: fill Headers on Buf1 */ 2879 des = dma_map_single(priv->device, skb->data, skb_headlen(skb), 2880 DMA_TO_DEVICE); 2881 if (dma_mapping_error(priv->device, des)) 2882 goto dma_map_err; 2883 2884 tx_q->tx_skbuff_dma[first_entry].buf = des; 2885 tx_q->tx_skbuff_dma[first_entry].len = skb_headlen(skb); 2886 2887 first->des0 = cpu_to_le32(des); 2888 2889 /* Fill start of payload in buff2 of first descriptor */ 2890 if (pay_len) 2891 first->des1 = cpu_to_le32(des + proto_hdr_len); 2892 2893 /* If needed take extra descriptors to fill the remaining payload */ 2894 tmp_pay_len = pay_len - TSO_MAX_BUFF_SIZE; 2895 2896 stmmac_tso_allocator(priv, des, tmp_pay_len, (nfrags == 0), queue); 2897 2898 /* Prepare fragments */ 2899 for (i = 0; i < nfrags; i++) { 2900 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; 2901 2902 des = skb_frag_dma_map(priv->device, frag, 0, 2903 skb_frag_size(frag), 2904 DMA_TO_DEVICE); 2905 if (dma_mapping_error(priv->device, des)) 2906 goto dma_map_err; 2907 2908 stmmac_tso_allocator(priv, des, skb_frag_size(frag), 2909 (i == nfrags - 1), queue); 2910 2911 tx_q->tx_skbuff_dma[tx_q->cur_tx].buf = des; 2912 tx_q->tx_skbuff_dma[tx_q->cur_tx].len = skb_frag_size(frag); 2913 tx_q->tx_skbuff_dma[tx_q->cur_tx].map_as_page = true; 2914 } 2915 2916 tx_q->tx_skbuff_dma[tx_q->cur_tx].last_segment = true; 2917 2918 /* Only the last descriptor gets to point to the skb. */ 2919 tx_q->tx_skbuff[tx_q->cur_tx] = skb; 2920 2921 /* We've used all descriptors we need for this skb, however, 2922 * advance cur_tx so that it references a fresh descriptor. 2923 * ndo_start_xmit will fill this descriptor the next time it's 2924 * called and stmmac_tx_clean may clean up to this descriptor. 2925 */ 2926 tx_q->cur_tx = STMMAC_GET_ENTRY(tx_q->cur_tx, DMA_TX_SIZE); 2927 2928 if (unlikely(stmmac_tx_avail(priv, queue) <= (MAX_SKB_FRAGS + 1))) { 2929 netif_dbg(priv, hw, priv->dev, "%s: stop transmitted packets\n", 2930 __func__); 2931 netif_tx_stop_queue(netdev_get_tx_queue(priv->dev, queue)); 2932 } 2933 2934 dev->stats.tx_bytes += skb->len; 2935 priv->xstats.tx_tso_frames++; 2936 priv->xstats.tx_tso_nfrags += nfrags; 2937 2938 /* Manage tx mitigation */ 2939 priv->tx_count_frames += nfrags + 1; 2940 if (likely(priv->tx_coal_frames > priv->tx_count_frames)) { 2941 mod_timer(&priv->txtimer, 2942 STMMAC_COAL_TIMER(priv->tx_coal_timer)); 2943 } else { 2944 priv->tx_count_frames = 0; 2945 stmmac_set_tx_ic(priv, desc); 2946 priv->xstats.tx_set_ic_bit++; 2947 } 2948 2949 skb_tx_timestamp(skb); 2950 2951 if (unlikely((skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) && 2952 priv->hwts_tx_en)) { 2953 /* declare that device is doing timestamping */ 2954 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; 2955 stmmac_enable_tx_timestamp(priv, first); 2956 } 2957 2958 /* Complete the first descriptor before granting the DMA */ 2959 stmmac_prepare_tso_tx_desc(priv, first, 1, 2960 proto_hdr_len, 2961 pay_len, 2962 1, tx_q->tx_skbuff_dma[first_entry].last_segment, 2963 tcp_hdrlen(skb) / 4, (skb->len - proto_hdr_len)); 2964 2965 /* If context desc is used to change MSS */ 2966 if (mss_desc) { 2967 /* Make sure that first descriptor has been completely 2968 * written, including its own bit. This is because MSS is 2969 * actually before first descriptor, so we need to make 2970 * sure that MSS's own bit is the last thing written. 2971 */ 2972 dma_wmb(); 2973 stmmac_set_tx_owner(priv, mss_desc); 2974 } 2975 2976 /* The own bit must be the latest setting done when prepare the 2977 * descriptor and then barrier is needed to make sure that 2978 * all is coherent before granting the DMA engine. 2979 */ 2980 wmb(); 2981 2982 if (netif_msg_pktdata(priv)) { 2983 pr_info("%s: curr=%d dirty=%d f=%d, e=%d, f_p=%p, nfrags %d\n", 2984 __func__, tx_q->cur_tx, tx_q->dirty_tx, first_entry, 2985 tx_q->cur_tx, first, nfrags); 2986 2987 stmmac_display_ring(priv, (void *)tx_q->dma_tx, DMA_TX_SIZE, 0); 2988 2989 pr_info(">>> frame to be transmitted: "); 2990 print_pkt(skb->data, skb_headlen(skb)); 2991 } 2992 2993 netdev_tx_sent_queue(netdev_get_tx_queue(dev, queue), skb->len); 2994 2995 stmmac_set_tx_tail_ptr(priv, priv->ioaddr, tx_q->tx_tail_addr, queue); 2996 2997 return NETDEV_TX_OK; 2998 2999 dma_map_err: 3000 dev_err(priv->device, "Tx dma map failed\n"); 3001 dev_kfree_skb(skb); 3002 priv->dev->stats.tx_dropped++; 3003 return NETDEV_TX_OK; 3004 } 3005 3006 /** 3007 * stmmac_xmit - Tx entry point of the driver 3008 * @skb : the socket buffer 3009 * @dev : device pointer 3010 * Description : this is the tx entry point of the driver. 3011 * It programs the chain or the ring and supports oversized frames 3012 * and SG feature. 3013 */ 3014 static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev) 3015 { 3016 struct stmmac_priv *priv = netdev_priv(dev); 3017 unsigned int nopaged_len = skb_headlen(skb); 3018 int i, csum_insertion = 0, is_jumbo = 0; 3019 u32 queue = skb_get_queue_mapping(skb); 3020 int nfrags = skb_shinfo(skb)->nr_frags; 3021 int entry; 3022 unsigned int first_entry; 3023 struct dma_desc *desc, *first; 3024 struct stmmac_tx_queue *tx_q; 3025 unsigned int enh_desc; 3026 unsigned int des; 3027 3028 tx_q = &priv->tx_queue[queue]; 3029 3030 /* Manage oversized TCP frames for GMAC4 device */ 3031 if (skb_is_gso(skb) && priv->tso) { 3032 if (skb_shinfo(skb)->gso_type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6)) 3033 return stmmac_tso_xmit(skb, dev); 3034 } 3035 3036 if (unlikely(stmmac_tx_avail(priv, queue) < nfrags + 1)) { 3037 if (!netif_tx_queue_stopped(netdev_get_tx_queue(dev, queue))) { 3038 netif_tx_stop_queue(netdev_get_tx_queue(priv->dev, 3039 queue)); 3040 /* This is a hard error, log it. */ 3041 netdev_err(priv->dev, 3042 "%s: Tx Ring full when queue awake\n", 3043 __func__); 3044 } 3045 return NETDEV_TX_BUSY; 3046 } 3047 3048 if (priv->tx_path_in_lpi_mode) 3049 stmmac_disable_eee_mode(priv); 3050 3051 entry = tx_q->cur_tx; 3052 first_entry = entry; 3053 WARN_ON(tx_q->tx_skbuff[first_entry]); 3054 3055 csum_insertion = (skb->ip_summed == CHECKSUM_PARTIAL); 3056 3057 if (likely(priv->extend_desc)) 3058 desc = (struct dma_desc *)(tx_q->dma_etx + entry); 3059 else 3060 desc = tx_q->dma_tx + entry; 3061 3062 first = desc; 3063 3064 enh_desc = priv->plat->enh_desc; 3065 /* To program the descriptors according to the size of the frame */ 3066 if (enh_desc) 3067 is_jumbo = stmmac_is_jumbo_frm(priv, skb->len, enh_desc); 3068 3069 if (unlikely(is_jumbo)) { 3070 entry = stmmac_jumbo_frm(priv, tx_q, skb, csum_insertion); 3071 if (unlikely(entry < 0) && (entry != -EINVAL)) 3072 goto dma_map_err; 3073 } 3074 3075 for (i = 0; i < nfrags; i++) { 3076 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; 3077 int len = skb_frag_size(frag); 3078 bool last_segment = (i == (nfrags - 1)); 3079 3080 entry = STMMAC_GET_ENTRY(entry, DMA_TX_SIZE); 3081 WARN_ON(tx_q->tx_skbuff[entry]); 3082 3083 if (likely(priv->extend_desc)) 3084 desc = (struct dma_desc *)(tx_q->dma_etx + entry); 3085 else 3086 desc = tx_q->dma_tx + entry; 3087 3088 des = skb_frag_dma_map(priv->device, frag, 0, len, 3089 DMA_TO_DEVICE); 3090 if (dma_mapping_error(priv->device, des)) 3091 goto dma_map_err; /* should reuse desc w/o issues */ 3092 3093 tx_q->tx_skbuff_dma[entry].buf = des; 3094 3095 stmmac_set_desc_addr(priv, desc, des); 3096 3097 tx_q->tx_skbuff_dma[entry].map_as_page = true; 3098 tx_q->tx_skbuff_dma[entry].len = len; 3099 tx_q->tx_skbuff_dma[entry].last_segment = last_segment; 3100 3101 /* Prepare the descriptor and set the own bit too */ 3102 stmmac_prepare_tx_desc(priv, desc, 0, len, csum_insertion, 3103 priv->mode, 1, last_segment, skb->len); 3104 } 3105 3106 /* Only the last descriptor gets to point to the skb. */ 3107 tx_q->tx_skbuff[entry] = skb; 3108 3109 /* We've used all descriptors we need for this skb, however, 3110 * advance cur_tx so that it references a fresh descriptor. 3111 * ndo_start_xmit will fill this descriptor the next time it's 3112 * called and stmmac_tx_clean may clean up to this descriptor. 3113 */ 3114 entry = STMMAC_GET_ENTRY(entry, DMA_TX_SIZE); 3115 tx_q->cur_tx = entry; 3116 3117 if (netif_msg_pktdata(priv)) { 3118 void *tx_head; 3119 3120 netdev_dbg(priv->dev, 3121 "%s: curr=%d dirty=%d f=%d, e=%d, first=%p, nfrags=%d", 3122 __func__, tx_q->cur_tx, tx_q->dirty_tx, first_entry, 3123 entry, first, nfrags); 3124 3125 if (priv->extend_desc) 3126 tx_head = (void *)tx_q->dma_etx; 3127 else 3128 tx_head = (void *)tx_q->dma_tx; 3129 3130 stmmac_display_ring(priv, tx_head, DMA_TX_SIZE, false); 3131 3132 netdev_dbg(priv->dev, ">>> frame to be transmitted: "); 3133 print_pkt(skb->data, skb->len); 3134 } 3135 3136 if (unlikely(stmmac_tx_avail(priv, queue) <= (MAX_SKB_FRAGS + 1))) { 3137 netif_dbg(priv, hw, priv->dev, "%s: stop transmitted packets\n", 3138 __func__); 3139 netif_tx_stop_queue(netdev_get_tx_queue(priv->dev, queue)); 3140 } 3141 3142 dev->stats.tx_bytes += skb->len; 3143 3144 /* According to the coalesce parameter the IC bit for the latest 3145 * segment is reset and the timer re-started to clean the tx status. 3146 * This approach takes care about the fragments: desc is the first 3147 * element in case of no SG. 3148 */ 3149 priv->tx_count_frames += nfrags + 1; 3150 if (likely(priv->tx_coal_frames > priv->tx_count_frames) && 3151 !priv->tx_timer_armed) { 3152 mod_timer(&priv->txtimer, 3153 STMMAC_COAL_TIMER(priv->tx_coal_timer)); 3154 priv->tx_timer_armed = true; 3155 } else { 3156 priv->tx_count_frames = 0; 3157 stmmac_set_tx_ic(priv, desc); 3158 priv->xstats.tx_set_ic_bit++; 3159 priv->tx_timer_armed = false; 3160 } 3161 3162 skb_tx_timestamp(skb); 3163 3164 /* Ready to fill the first descriptor and set the OWN bit w/o any 3165 * problems because all the descriptors are actually ready to be 3166 * passed to the DMA engine. 3167 */ 3168 if (likely(!is_jumbo)) { 3169 bool last_segment = (nfrags == 0); 3170 3171 des = dma_map_single(priv->device, skb->data, 3172 nopaged_len, DMA_TO_DEVICE); 3173 if (dma_mapping_error(priv->device, des)) 3174 goto dma_map_err; 3175 3176 tx_q->tx_skbuff_dma[first_entry].buf = des; 3177 3178 stmmac_set_desc_addr(priv, first, des); 3179 3180 tx_q->tx_skbuff_dma[first_entry].len = nopaged_len; 3181 tx_q->tx_skbuff_dma[first_entry].last_segment = last_segment; 3182 3183 if (unlikely((skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) && 3184 priv->hwts_tx_en)) { 3185 /* declare that device is doing timestamping */ 3186 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; 3187 stmmac_enable_tx_timestamp(priv, first); 3188 } 3189 3190 /* Prepare the first descriptor setting the OWN bit too */ 3191 stmmac_prepare_tx_desc(priv, first, 1, nopaged_len, 3192 csum_insertion, priv->mode, 1, last_segment, 3193 skb->len); 3194 3195 /* The own bit must be the latest setting done when prepare the 3196 * descriptor and then barrier is needed to make sure that 3197 * all is coherent before granting the DMA engine. 3198 */ 3199 wmb(); 3200 } 3201 3202 netdev_tx_sent_queue(netdev_get_tx_queue(dev, queue), skb->len); 3203 3204 stmmac_enable_dma_transmission(priv, priv->ioaddr); 3205 stmmac_set_tx_tail_ptr(priv, priv->ioaddr, tx_q->tx_tail_addr, queue); 3206 3207 return NETDEV_TX_OK; 3208 3209 dma_map_err: 3210 netdev_err(priv->dev, "Tx DMA map failed\n"); 3211 dev_kfree_skb(skb); 3212 priv->dev->stats.tx_dropped++; 3213 return NETDEV_TX_OK; 3214 } 3215 3216 static void stmmac_rx_vlan(struct net_device *dev, struct sk_buff *skb) 3217 { 3218 struct vlan_ethhdr *veth; 3219 __be16 vlan_proto; 3220 u16 vlanid; 3221 3222 veth = (struct vlan_ethhdr *)skb->data; 3223 vlan_proto = veth->h_vlan_proto; 3224 3225 if ((vlan_proto == htons(ETH_P_8021Q) && 3226 dev->features & NETIF_F_HW_VLAN_CTAG_RX) || 3227 (vlan_proto == htons(ETH_P_8021AD) && 3228 dev->features & NETIF_F_HW_VLAN_STAG_RX)) { 3229 /* pop the vlan tag */ 3230 vlanid = ntohs(veth->h_vlan_TCI); 3231 memmove(skb->data + VLAN_HLEN, veth, ETH_ALEN * 2); 3232 skb_pull(skb, VLAN_HLEN); 3233 __vlan_hwaccel_put_tag(skb, vlan_proto, vlanid); 3234 } 3235 } 3236 3237 3238 static inline int stmmac_rx_threshold_count(struct stmmac_rx_queue *rx_q) 3239 { 3240 if (rx_q->rx_zeroc_thresh < STMMAC_RX_THRESH) 3241 return 0; 3242 3243 return 1; 3244 } 3245 3246 /** 3247 * stmmac_rx_refill - refill used skb preallocated buffers 3248 * @priv: driver private structure 3249 * @queue: RX queue index 3250 * Description : this is to reallocate the skb for the reception process 3251 * that is based on zero-copy. 3252 */ 3253 static inline void stmmac_rx_refill(struct stmmac_priv *priv, u32 queue) 3254 { 3255 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue]; 3256 int dirty = stmmac_rx_dirty(priv, queue); 3257 unsigned int entry = rx_q->dirty_rx; 3258 3259 int bfsize = priv->dma_buf_sz; 3260 3261 while (dirty-- > 0) { 3262 struct dma_desc *p; 3263 3264 if (priv->extend_desc) 3265 p = (struct dma_desc *)(rx_q->dma_erx + entry); 3266 else 3267 p = rx_q->dma_rx + entry; 3268 3269 if (likely(!rx_q->rx_skbuff[entry])) { 3270 struct sk_buff *skb; 3271 3272 skb = netdev_alloc_skb_ip_align(priv->dev, bfsize); 3273 if (unlikely(!skb)) { 3274 /* so for a while no zero-copy! */ 3275 rx_q->rx_zeroc_thresh = STMMAC_RX_THRESH; 3276 if (unlikely(net_ratelimit())) 3277 dev_err(priv->device, 3278 "fail to alloc skb entry %d\n", 3279 entry); 3280 break; 3281 } 3282 3283 rx_q->rx_skbuff[entry] = skb; 3284 rx_q->rx_skbuff_dma[entry] = 3285 dma_map_single(priv->device, skb->data, bfsize, 3286 DMA_FROM_DEVICE); 3287 if (dma_mapping_error(priv->device, 3288 rx_q->rx_skbuff_dma[entry])) { 3289 netdev_err(priv->dev, "Rx DMA map failed\n"); 3290 dev_kfree_skb(skb); 3291 break; 3292 } 3293 3294 stmmac_set_desc_addr(priv, p, rx_q->rx_skbuff_dma[entry]); 3295 stmmac_refill_desc3(priv, rx_q, p); 3296 3297 if (rx_q->rx_zeroc_thresh > 0) 3298 rx_q->rx_zeroc_thresh--; 3299 3300 netif_dbg(priv, rx_status, priv->dev, 3301 "refill entry #%d\n", entry); 3302 } 3303 dma_wmb(); 3304 3305 stmmac_set_rx_owner(priv, p, priv->use_riwt); 3306 3307 dma_wmb(); 3308 3309 entry = STMMAC_GET_ENTRY(entry, DMA_RX_SIZE); 3310 } 3311 rx_q->dirty_rx = entry; 3312 } 3313 3314 /** 3315 * stmmac_rx - manage the receive process 3316 * @priv: driver private structure 3317 * @limit: napi bugget 3318 * @queue: RX queue index. 3319 * Description : this the function called by the napi poll method. 3320 * It gets all the frames inside the ring. 3321 */ 3322 static int stmmac_rx(struct stmmac_priv *priv, int limit, u32 queue) 3323 { 3324 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue]; 3325 unsigned int entry = rx_q->cur_rx; 3326 int coe = priv->hw->rx_csum; 3327 unsigned int next_entry; 3328 unsigned int count = 0; 3329 bool xmac; 3330 3331 xmac = priv->plat->has_gmac4 || priv->plat->has_xgmac; 3332 3333 if (netif_msg_rx_status(priv)) { 3334 void *rx_head; 3335 3336 netdev_dbg(priv->dev, "%s: descriptor ring:\n", __func__); 3337 if (priv->extend_desc) 3338 rx_head = (void *)rx_q->dma_erx; 3339 else 3340 rx_head = (void *)rx_q->dma_rx; 3341 3342 stmmac_display_ring(priv, rx_head, DMA_RX_SIZE, true); 3343 } 3344 while (count < limit) { 3345 int status; 3346 struct dma_desc *p; 3347 struct dma_desc *np; 3348 3349 if (priv->extend_desc) 3350 p = (struct dma_desc *)(rx_q->dma_erx + entry); 3351 else 3352 p = rx_q->dma_rx + entry; 3353 3354 /* read the status of the incoming frame */ 3355 status = stmmac_rx_status(priv, &priv->dev->stats, 3356 &priv->xstats, p); 3357 /* check if managed by the DMA otherwise go ahead */ 3358 if (unlikely(status & dma_own)) 3359 break; 3360 3361 count++; 3362 3363 rx_q->cur_rx = STMMAC_GET_ENTRY(rx_q->cur_rx, DMA_RX_SIZE); 3364 next_entry = rx_q->cur_rx; 3365 3366 if (priv->extend_desc) 3367 np = (struct dma_desc *)(rx_q->dma_erx + next_entry); 3368 else 3369 np = rx_q->dma_rx + next_entry; 3370 3371 prefetch(np); 3372 3373 if (priv->extend_desc) 3374 stmmac_rx_extended_status(priv, &priv->dev->stats, 3375 &priv->xstats, rx_q->dma_erx + entry); 3376 if (unlikely(status == discard_frame)) { 3377 priv->dev->stats.rx_errors++; 3378 if (priv->hwts_rx_en && !priv->extend_desc) { 3379 /* DESC2 & DESC3 will be overwritten by device 3380 * with timestamp value, hence reinitialize 3381 * them in stmmac_rx_refill() function so that 3382 * device can reuse it. 3383 */ 3384 dev_kfree_skb_any(rx_q->rx_skbuff[entry]); 3385 rx_q->rx_skbuff[entry] = NULL; 3386 dma_unmap_single(priv->device, 3387 rx_q->rx_skbuff_dma[entry], 3388 priv->dma_buf_sz, 3389 DMA_FROM_DEVICE); 3390 } 3391 } else { 3392 struct sk_buff *skb; 3393 int frame_len; 3394 unsigned int des; 3395 3396 stmmac_get_desc_addr(priv, p, &des); 3397 frame_len = stmmac_get_rx_frame_len(priv, p, coe); 3398 3399 /* If frame length is greater than skb buffer size 3400 * (preallocated during init) then the packet is 3401 * ignored 3402 */ 3403 if (frame_len > priv->dma_buf_sz) { 3404 netdev_err(priv->dev, 3405 "len %d larger than size (%d)\n", 3406 frame_len, priv->dma_buf_sz); 3407 priv->dev->stats.rx_length_errors++; 3408 break; 3409 } 3410 3411 /* ACS is set; GMAC core strips PAD/FCS for IEEE 802.3 3412 * Type frames (LLC/LLC-SNAP) 3413 * 3414 * llc_snap is never checked in GMAC >= 4, so this ACS 3415 * feature is always disabled and packets need to be 3416 * stripped manually. 3417 */ 3418 if (unlikely(priv->synopsys_id >= DWMAC_CORE_4_00) || 3419 unlikely(status != llc_snap)) 3420 frame_len -= ETH_FCS_LEN; 3421 3422 if (netif_msg_rx_status(priv)) { 3423 netdev_dbg(priv->dev, "\tdesc: %p [entry %d] buff=0x%x\n", 3424 p, entry, des); 3425 netdev_dbg(priv->dev, "frame size %d, COE: %d\n", 3426 frame_len, status); 3427 } 3428 3429 /* The zero-copy is always used for all the sizes 3430 * in case of GMAC4 because it needs 3431 * to refill the used descriptors, always. 3432 */ 3433 if (unlikely(!xmac && 3434 ((frame_len < priv->rx_copybreak) || 3435 stmmac_rx_threshold_count(rx_q)))) { 3436 skb = netdev_alloc_skb_ip_align(priv->dev, 3437 frame_len); 3438 if (unlikely(!skb)) { 3439 if (net_ratelimit()) 3440 dev_warn(priv->device, 3441 "packet dropped\n"); 3442 priv->dev->stats.rx_dropped++; 3443 break; 3444 } 3445 3446 dma_sync_single_for_cpu(priv->device, 3447 rx_q->rx_skbuff_dma 3448 [entry], frame_len, 3449 DMA_FROM_DEVICE); 3450 skb_copy_to_linear_data(skb, 3451 rx_q-> 3452 rx_skbuff[entry]->data, 3453 frame_len); 3454 3455 skb_put(skb, frame_len); 3456 dma_sync_single_for_device(priv->device, 3457 rx_q->rx_skbuff_dma 3458 [entry], frame_len, 3459 DMA_FROM_DEVICE); 3460 } else { 3461 skb = rx_q->rx_skbuff[entry]; 3462 if (unlikely(!skb)) { 3463 netdev_err(priv->dev, 3464 "%s: Inconsistent Rx chain\n", 3465 priv->dev->name); 3466 priv->dev->stats.rx_dropped++; 3467 break; 3468 } 3469 prefetch(skb->data - NET_IP_ALIGN); 3470 rx_q->rx_skbuff[entry] = NULL; 3471 rx_q->rx_zeroc_thresh++; 3472 3473 skb_put(skb, frame_len); 3474 dma_unmap_single(priv->device, 3475 rx_q->rx_skbuff_dma[entry], 3476 priv->dma_buf_sz, 3477 DMA_FROM_DEVICE); 3478 } 3479 3480 if (netif_msg_pktdata(priv)) { 3481 netdev_dbg(priv->dev, "frame received (%dbytes)", 3482 frame_len); 3483 print_pkt(skb->data, frame_len); 3484 } 3485 3486 stmmac_get_rx_hwtstamp(priv, p, np, skb); 3487 3488 stmmac_rx_vlan(priv->dev, skb); 3489 3490 skb->protocol = eth_type_trans(skb, priv->dev); 3491 3492 if (unlikely(!coe)) 3493 skb_checksum_none_assert(skb); 3494 else 3495 skb->ip_summed = CHECKSUM_UNNECESSARY; 3496 3497 napi_gro_receive(&rx_q->napi, skb); 3498 3499 priv->dev->stats.rx_packets++; 3500 priv->dev->stats.rx_bytes += frame_len; 3501 } 3502 entry = next_entry; 3503 } 3504 3505 stmmac_rx_refill(priv, queue); 3506 3507 priv->xstats.rx_pkt_n += count; 3508 3509 return count; 3510 } 3511 3512 /** 3513 * stmmac_poll - stmmac poll method (NAPI) 3514 * @napi : pointer to the napi structure. 3515 * @budget : maximum number of packets that the current CPU can receive from 3516 * all interfaces. 3517 * Description : 3518 * To look at the incoming frames and clear the tx resources. 3519 */ 3520 static int stmmac_poll(struct napi_struct *napi, int budget) 3521 { 3522 struct stmmac_rx_queue *rx_q = 3523 container_of(napi, struct stmmac_rx_queue, napi); 3524 struct stmmac_priv *priv = rx_q->priv_data; 3525 u32 tx_count = priv->plat->tx_queues_to_use; 3526 u32 chan = rx_q->queue_index; 3527 int work_done = 0; 3528 u32 queue; 3529 3530 priv->xstats.napi_poll++; 3531 3532 /* check all the queues */ 3533 for (queue = 0; queue < tx_count; queue++) 3534 stmmac_tx_clean(priv, queue); 3535 3536 work_done = stmmac_rx(priv, budget, rx_q->queue_index); 3537 if (work_done < budget) { 3538 napi_complete_done(napi, work_done); 3539 stmmac_enable_dma_irq(priv, priv->ioaddr, chan); 3540 } 3541 return work_done; 3542 } 3543 3544 /** 3545 * stmmac_tx_timeout 3546 * @dev : Pointer to net device structure 3547 * Description: this function is called when a packet transmission fails to 3548 * complete within a reasonable time. The driver will mark the error in the 3549 * netdev structure and arrange for the device to be reset to a sane state 3550 * in order to transmit a new packet. 3551 */ 3552 static void stmmac_tx_timeout(struct net_device *dev) 3553 { 3554 struct stmmac_priv *priv = netdev_priv(dev); 3555 3556 stmmac_global_err(priv); 3557 } 3558 3559 /** 3560 * stmmac_set_rx_mode - entry point for multicast addressing 3561 * @dev : pointer to the device structure 3562 * Description: 3563 * This function is a driver entry point which gets called by the kernel 3564 * whenever multicast addresses must be enabled/disabled. 3565 * Return value: 3566 * void. 3567 */ 3568 static void stmmac_set_rx_mode(struct net_device *dev) 3569 { 3570 struct stmmac_priv *priv = netdev_priv(dev); 3571 3572 stmmac_set_filter(priv, priv->hw, dev); 3573 } 3574 3575 /** 3576 * stmmac_change_mtu - entry point to change MTU size for the device. 3577 * @dev : device pointer. 3578 * @new_mtu : the new MTU size for the device. 3579 * Description: the Maximum Transfer Unit (MTU) is used by the network layer 3580 * to drive packet transmission. Ethernet has an MTU of 1500 octets 3581 * (ETH_DATA_LEN). This value can be changed with ifconfig. 3582 * Return value: 3583 * 0 on success and an appropriate (-)ve integer as defined in errno.h 3584 * file on failure. 3585 */ 3586 static int stmmac_change_mtu(struct net_device *dev, int new_mtu) 3587 { 3588 struct stmmac_priv *priv = netdev_priv(dev); 3589 3590 if (netif_running(dev)) { 3591 netdev_err(priv->dev, "must be stopped to change its MTU\n"); 3592 return -EBUSY; 3593 } 3594 3595 dev->mtu = new_mtu; 3596 3597 netdev_update_features(dev); 3598 3599 return 0; 3600 } 3601 3602 static netdev_features_t stmmac_fix_features(struct net_device *dev, 3603 netdev_features_t features) 3604 { 3605 struct stmmac_priv *priv = netdev_priv(dev); 3606 3607 if (priv->plat->rx_coe == STMMAC_RX_COE_NONE) 3608 features &= ~NETIF_F_RXCSUM; 3609 3610 if (!priv->plat->tx_coe) 3611 features &= ~NETIF_F_CSUM_MASK; 3612 3613 /* Some GMAC devices have a bugged Jumbo frame support that 3614 * needs to have the Tx COE disabled for oversized frames 3615 * (due to limited buffer sizes). In this case we disable 3616 * the TX csum insertion in the TDES and not use SF. 3617 */ 3618 if (priv->plat->bugged_jumbo && (dev->mtu > ETH_DATA_LEN)) 3619 features &= ~NETIF_F_CSUM_MASK; 3620 3621 /* Disable tso if asked by ethtool */ 3622 if ((priv->plat->tso_en) && (priv->dma_cap.tsoen)) { 3623 if (features & NETIF_F_TSO) 3624 priv->tso = true; 3625 else 3626 priv->tso = false; 3627 } 3628 3629 return features; 3630 } 3631 3632 static int stmmac_set_features(struct net_device *netdev, 3633 netdev_features_t features) 3634 { 3635 struct stmmac_priv *priv = netdev_priv(netdev); 3636 3637 /* Keep the COE Type in case of csum is supporting */ 3638 if (features & NETIF_F_RXCSUM) 3639 priv->hw->rx_csum = priv->plat->rx_coe; 3640 else 3641 priv->hw->rx_csum = 0; 3642 /* No check needed because rx_coe has been set before and it will be 3643 * fixed in case of issue. 3644 */ 3645 stmmac_rx_ipc(priv, priv->hw); 3646 3647 return 0; 3648 } 3649 3650 /** 3651 * stmmac_interrupt - main ISR 3652 * @irq: interrupt number. 3653 * @dev_id: to pass the net device pointer. 3654 * Description: this is the main driver interrupt service routine. 3655 * It can call: 3656 * o DMA service routine (to manage incoming frame reception and transmission 3657 * status) 3658 * o Core interrupts to manage: remote wake-up, management counter, LPI 3659 * interrupts. 3660 */ 3661 static irqreturn_t stmmac_interrupt(int irq, void *dev_id) 3662 { 3663 struct net_device *dev = (struct net_device *)dev_id; 3664 struct stmmac_priv *priv = netdev_priv(dev); 3665 u32 rx_cnt = priv->plat->rx_queues_to_use; 3666 u32 tx_cnt = priv->plat->tx_queues_to_use; 3667 u32 queues_count; 3668 u32 queue; 3669 bool xmac; 3670 3671 xmac = priv->plat->has_gmac4 || priv->plat->has_xgmac; 3672 queues_count = (rx_cnt > tx_cnt) ? rx_cnt : tx_cnt; 3673 3674 if (priv->irq_wake) 3675 pm_wakeup_event(priv->device, 0); 3676 3677 if (unlikely(!dev)) { 3678 netdev_err(priv->dev, "%s: invalid dev pointer\n", __func__); 3679 return IRQ_NONE; 3680 } 3681 3682 /* Check if adapter is up */ 3683 if (test_bit(STMMAC_DOWN, &priv->state)) 3684 return IRQ_HANDLED; 3685 /* Check if a fatal error happened */ 3686 if (stmmac_safety_feat_interrupt(priv)) 3687 return IRQ_HANDLED; 3688 3689 /* To handle GMAC own interrupts */ 3690 if ((priv->plat->has_gmac) || xmac) { 3691 int status = stmmac_host_irq_status(priv, priv->hw, &priv->xstats); 3692 int mtl_status; 3693 3694 if (unlikely(status)) { 3695 /* For LPI we need to save the tx status */ 3696 if (status & CORE_IRQ_TX_PATH_IN_LPI_MODE) 3697 priv->tx_path_in_lpi_mode = true; 3698 if (status & CORE_IRQ_TX_PATH_EXIT_LPI_MODE) 3699 priv->tx_path_in_lpi_mode = false; 3700 } 3701 3702 for (queue = 0; queue < queues_count; queue++) { 3703 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue]; 3704 3705 mtl_status = stmmac_host_mtl_irq_status(priv, priv->hw, 3706 queue); 3707 if (mtl_status != -EINVAL) 3708 status |= mtl_status; 3709 3710 if (status & CORE_IRQ_MTL_RX_OVERFLOW) 3711 stmmac_set_rx_tail_ptr(priv, priv->ioaddr, 3712 rx_q->rx_tail_addr, 3713 queue); 3714 } 3715 3716 /* PCS link status */ 3717 if (priv->hw->pcs) { 3718 if (priv->xstats.pcs_link) 3719 netif_carrier_on(dev); 3720 else 3721 netif_carrier_off(dev); 3722 } 3723 } 3724 3725 /* To handle DMA interrupts */ 3726 stmmac_dma_interrupt(priv); 3727 3728 return IRQ_HANDLED; 3729 } 3730 3731 #ifdef CONFIG_NET_POLL_CONTROLLER 3732 /* Polling receive - used by NETCONSOLE and other diagnostic tools 3733 * to allow network I/O with interrupts disabled. 3734 */ 3735 static void stmmac_poll_controller(struct net_device *dev) 3736 { 3737 disable_irq(dev->irq); 3738 stmmac_interrupt(dev->irq, dev); 3739 enable_irq(dev->irq); 3740 } 3741 #endif 3742 3743 /** 3744 * stmmac_ioctl - Entry point for the Ioctl 3745 * @dev: Device pointer. 3746 * @rq: An IOCTL specefic structure, that can contain a pointer to 3747 * a proprietary structure used to pass information to the driver. 3748 * @cmd: IOCTL command 3749 * Description: 3750 * Currently it supports the phy_mii_ioctl(...) and HW time stamping. 3751 */ 3752 static int stmmac_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) 3753 { 3754 int ret = -EOPNOTSUPP; 3755 3756 if (!netif_running(dev)) 3757 return -EINVAL; 3758 3759 switch (cmd) { 3760 case SIOCGMIIPHY: 3761 case SIOCGMIIREG: 3762 case SIOCSMIIREG: 3763 if (!dev->phydev) 3764 return -EINVAL; 3765 ret = phy_mii_ioctl(dev->phydev, rq, cmd); 3766 break; 3767 case SIOCSHWTSTAMP: 3768 ret = stmmac_hwtstamp_ioctl(dev, rq); 3769 break; 3770 default: 3771 break; 3772 } 3773 3774 return ret; 3775 } 3776 3777 static int stmmac_setup_tc_block_cb(enum tc_setup_type type, void *type_data, 3778 void *cb_priv) 3779 { 3780 struct stmmac_priv *priv = cb_priv; 3781 int ret = -EOPNOTSUPP; 3782 3783 stmmac_disable_all_queues(priv); 3784 3785 switch (type) { 3786 case TC_SETUP_CLSU32: 3787 if (tc_cls_can_offload_and_chain0(priv->dev, type_data)) 3788 ret = stmmac_tc_setup_cls_u32(priv, priv, type_data); 3789 break; 3790 default: 3791 break; 3792 } 3793 3794 stmmac_enable_all_queues(priv); 3795 return ret; 3796 } 3797 3798 static int stmmac_setup_tc_block(struct stmmac_priv *priv, 3799 struct tc_block_offload *f) 3800 { 3801 if (f->binder_type != TCF_BLOCK_BINDER_TYPE_CLSACT_INGRESS) 3802 return -EOPNOTSUPP; 3803 3804 switch (f->command) { 3805 case TC_BLOCK_BIND: 3806 return tcf_block_cb_register(f->block, stmmac_setup_tc_block_cb, 3807 priv, priv, f->extack); 3808 case TC_BLOCK_UNBIND: 3809 tcf_block_cb_unregister(f->block, stmmac_setup_tc_block_cb, priv); 3810 return 0; 3811 default: 3812 return -EOPNOTSUPP; 3813 } 3814 } 3815 3816 static int stmmac_setup_tc(struct net_device *ndev, enum tc_setup_type type, 3817 void *type_data) 3818 { 3819 struct stmmac_priv *priv = netdev_priv(ndev); 3820 3821 switch (type) { 3822 case TC_SETUP_BLOCK: 3823 return stmmac_setup_tc_block(priv, type_data); 3824 case TC_SETUP_QDISC_CBS: 3825 return stmmac_tc_setup_cbs(priv, priv, type_data); 3826 default: 3827 return -EOPNOTSUPP; 3828 } 3829 } 3830 3831 static int stmmac_set_mac_address(struct net_device *ndev, void *addr) 3832 { 3833 struct stmmac_priv *priv = netdev_priv(ndev); 3834 int ret = 0; 3835 3836 ret = eth_mac_addr(ndev, addr); 3837 if (ret) 3838 return ret; 3839 3840 stmmac_set_umac_addr(priv, priv->hw, ndev->dev_addr, 0); 3841 3842 return ret; 3843 } 3844 3845 #ifdef CONFIG_DEBUG_FS 3846 static struct dentry *stmmac_fs_dir; 3847 3848 static void sysfs_display_ring(void *head, int size, int extend_desc, 3849 struct seq_file *seq) 3850 { 3851 int i; 3852 struct dma_extended_desc *ep = (struct dma_extended_desc *)head; 3853 struct dma_desc *p = (struct dma_desc *)head; 3854 3855 for (i = 0; i < size; i++) { 3856 if (extend_desc) { 3857 seq_printf(seq, "%d [0x%x]: 0x%x 0x%x 0x%x 0x%x\n", 3858 i, (unsigned int)virt_to_phys(ep), 3859 le32_to_cpu(ep->basic.des0), 3860 le32_to_cpu(ep->basic.des1), 3861 le32_to_cpu(ep->basic.des2), 3862 le32_to_cpu(ep->basic.des3)); 3863 ep++; 3864 } else { 3865 seq_printf(seq, "%d [0x%x]: 0x%x 0x%x 0x%x 0x%x\n", 3866 i, (unsigned int)virt_to_phys(p), 3867 le32_to_cpu(p->des0), le32_to_cpu(p->des1), 3868 le32_to_cpu(p->des2), le32_to_cpu(p->des3)); 3869 p++; 3870 } 3871 seq_printf(seq, "\n"); 3872 } 3873 } 3874 3875 static int stmmac_sysfs_ring_read(struct seq_file *seq, void *v) 3876 { 3877 struct net_device *dev = seq->private; 3878 struct stmmac_priv *priv = netdev_priv(dev); 3879 u32 rx_count = priv->plat->rx_queues_to_use; 3880 u32 tx_count = priv->plat->tx_queues_to_use; 3881 u32 queue; 3882 3883 for (queue = 0; queue < rx_count; queue++) { 3884 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue]; 3885 3886 seq_printf(seq, "RX Queue %d:\n", queue); 3887 3888 if (priv->extend_desc) { 3889 seq_printf(seq, "Extended descriptor ring:\n"); 3890 sysfs_display_ring((void *)rx_q->dma_erx, 3891 DMA_RX_SIZE, 1, seq); 3892 } else { 3893 seq_printf(seq, "Descriptor ring:\n"); 3894 sysfs_display_ring((void *)rx_q->dma_rx, 3895 DMA_RX_SIZE, 0, seq); 3896 } 3897 } 3898 3899 for (queue = 0; queue < tx_count; queue++) { 3900 struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue]; 3901 3902 seq_printf(seq, "TX Queue %d:\n", queue); 3903 3904 if (priv->extend_desc) { 3905 seq_printf(seq, "Extended descriptor ring:\n"); 3906 sysfs_display_ring((void *)tx_q->dma_etx, 3907 DMA_TX_SIZE, 1, seq); 3908 } else { 3909 seq_printf(seq, "Descriptor ring:\n"); 3910 sysfs_display_ring((void *)tx_q->dma_tx, 3911 DMA_TX_SIZE, 0, seq); 3912 } 3913 } 3914 3915 return 0; 3916 } 3917 3918 static int stmmac_sysfs_ring_open(struct inode *inode, struct file *file) 3919 { 3920 return single_open(file, stmmac_sysfs_ring_read, inode->i_private); 3921 } 3922 3923 /* Debugfs files, should appear in /sys/kernel/debug/stmmaceth/eth0 */ 3924 3925 static const struct file_operations stmmac_rings_status_fops = { 3926 .owner = THIS_MODULE, 3927 .open = stmmac_sysfs_ring_open, 3928 .read = seq_read, 3929 .llseek = seq_lseek, 3930 .release = single_release, 3931 }; 3932 3933 static int stmmac_sysfs_dma_cap_read(struct seq_file *seq, void *v) 3934 { 3935 struct net_device *dev = seq->private; 3936 struct stmmac_priv *priv = netdev_priv(dev); 3937 3938 if (!priv->hw_cap_support) { 3939 seq_printf(seq, "DMA HW features not supported\n"); 3940 return 0; 3941 } 3942 3943 seq_printf(seq, "==============================\n"); 3944 seq_printf(seq, "\tDMA HW features\n"); 3945 seq_printf(seq, "==============================\n"); 3946 3947 seq_printf(seq, "\t10/100 Mbps: %s\n", 3948 (priv->dma_cap.mbps_10_100) ? "Y" : "N"); 3949 seq_printf(seq, "\t1000 Mbps: %s\n", 3950 (priv->dma_cap.mbps_1000) ? "Y" : "N"); 3951 seq_printf(seq, "\tHalf duplex: %s\n", 3952 (priv->dma_cap.half_duplex) ? "Y" : "N"); 3953 seq_printf(seq, "\tHash Filter: %s\n", 3954 (priv->dma_cap.hash_filter) ? "Y" : "N"); 3955 seq_printf(seq, "\tMultiple MAC address registers: %s\n", 3956 (priv->dma_cap.multi_addr) ? "Y" : "N"); 3957 seq_printf(seq, "\tPCS (TBI/SGMII/RTBI PHY interfaces): %s\n", 3958 (priv->dma_cap.pcs) ? "Y" : "N"); 3959 seq_printf(seq, "\tSMA (MDIO) Interface: %s\n", 3960 (priv->dma_cap.sma_mdio) ? "Y" : "N"); 3961 seq_printf(seq, "\tPMT Remote wake up: %s\n", 3962 (priv->dma_cap.pmt_remote_wake_up) ? "Y" : "N"); 3963 seq_printf(seq, "\tPMT Magic Frame: %s\n", 3964 (priv->dma_cap.pmt_magic_frame) ? "Y" : "N"); 3965 seq_printf(seq, "\tRMON module: %s\n", 3966 (priv->dma_cap.rmon) ? "Y" : "N"); 3967 seq_printf(seq, "\tIEEE 1588-2002 Time Stamp: %s\n", 3968 (priv->dma_cap.time_stamp) ? "Y" : "N"); 3969 seq_printf(seq, "\tIEEE 1588-2008 Advanced Time Stamp: %s\n", 3970 (priv->dma_cap.atime_stamp) ? "Y" : "N"); 3971 seq_printf(seq, "\t802.3az - Energy-Efficient Ethernet (EEE): %s\n", 3972 (priv->dma_cap.eee) ? "Y" : "N"); 3973 seq_printf(seq, "\tAV features: %s\n", (priv->dma_cap.av) ? "Y" : "N"); 3974 seq_printf(seq, "\tChecksum Offload in TX: %s\n", 3975 (priv->dma_cap.tx_coe) ? "Y" : "N"); 3976 if (priv->synopsys_id >= DWMAC_CORE_4_00) { 3977 seq_printf(seq, "\tIP Checksum Offload in RX: %s\n", 3978 (priv->dma_cap.rx_coe) ? "Y" : "N"); 3979 } else { 3980 seq_printf(seq, "\tIP Checksum Offload (type1) in RX: %s\n", 3981 (priv->dma_cap.rx_coe_type1) ? "Y" : "N"); 3982 seq_printf(seq, "\tIP Checksum Offload (type2) in RX: %s\n", 3983 (priv->dma_cap.rx_coe_type2) ? "Y" : "N"); 3984 } 3985 seq_printf(seq, "\tRXFIFO > 2048bytes: %s\n", 3986 (priv->dma_cap.rxfifo_over_2048) ? "Y" : "N"); 3987 seq_printf(seq, "\tNumber of Additional RX channel: %d\n", 3988 priv->dma_cap.number_rx_channel); 3989 seq_printf(seq, "\tNumber of Additional TX channel: %d\n", 3990 priv->dma_cap.number_tx_channel); 3991 seq_printf(seq, "\tEnhanced descriptors: %s\n", 3992 (priv->dma_cap.enh_desc) ? "Y" : "N"); 3993 3994 return 0; 3995 } 3996 3997 static int stmmac_sysfs_dma_cap_open(struct inode *inode, struct file *file) 3998 { 3999 return single_open(file, stmmac_sysfs_dma_cap_read, inode->i_private); 4000 } 4001 4002 static const struct file_operations stmmac_dma_cap_fops = { 4003 .owner = THIS_MODULE, 4004 .open = stmmac_sysfs_dma_cap_open, 4005 .read = seq_read, 4006 .llseek = seq_lseek, 4007 .release = single_release, 4008 }; 4009 4010 static int stmmac_init_fs(struct net_device *dev) 4011 { 4012 struct stmmac_priv *priv = netdev_priv(dev); 4013 4014 /* Create per netdev entries */ 4015 priv->dbgfs_dir = debugfs_create_dir(dev->name, stmmac_fs_dir); 4016 4017 if (!priv->dbgfs_dir || IS_ERR(priv->dbgfs_dir)) { 4018 netdev_err(priv->dev, "ERROR failed to create debugfs directory\n"); 4019 4020 return -ENOMEM; 4021 } 4022 4023 /* Entry to report DMA RX/TX rings */ 4024 priv->dbgfs_rings_status = 4025 debugfs_create_file("descriptors_status", 0444, 4026 priv->dbgfs_dir, dev, 4027 &stmmac_rings_status_fops); 4028 4029 if (!priv->dbgfs_rings_status || IS_ERR(priv->dbgfs_rings_status)) { 4030 netdev_err(priv->dev, "ERROR creating stmmac ring debugfs file\n"); 4031 debugfs_remove_recursive(priv->dbgfs_dir); 4032 4033 return -ENOMEM; 4034 } 4035 4036 /* Entry to report the DMA HW features */ 4037 priv->dbgfs_dma_cap = debugfs_create_file("dma_cap", 0444, 4038 priv->dbgfs_dir, 4039 dev, &stmmac_dma_cap_fops); 4040 4041 if (!priv->dbgfs_dma_cap || IS_ERR(priv->dbgfs_dma_cap)) { 4042 netdev_err(priv->dev, "ERROR creating stmmac MMC debugfs file\n"); 4043 debugfs_remove_recursive(priv->dbgfs_dir); 4044 4045 return -ENOMEM; 4046 } 4047 4048 return 0; 4049 } 4050 4051 static void stmmac_exit_fs(struct net_device *dev) 4052 { 4053 struct stmmac_priv *priv = netdev_priv(dev); 4054 4055 debugfs_remove_recursive(priv->dbgfs_dir); 4056 } 4057 #endif /* CONFIG_DEBUG_FS */ 4058 4059 static const struct net_device_ops stmmac_netdev_ops = { 4060 .ndo_open = stmmac_open, 4061 .ndo_start_xmit = stmmac_xmit, 4062 .ndo_stop = stmmac_release, 4063 .ndo_change_mtu = stmmac_change_mtu, 4064 .ndo_fix_features = stmmac_fix_features, 4065 .ndo_set_features = stmmac_set_features, 4066 .ndo_set_rx_mode = stmmac_set_rx_mode, 4067 .ndo_tx_timeout = stmmac_tx_timeout, 4068 .ndo_do_ioctl = stmmac_ioctl, 4069 .ndo_setup_tc = stmmac_setup_tc, 4070 #ifdef CONFIG_NET_POLL_CONTROLLER 4071 .ndo_poll_controller = stmmac_poll_controller, 4072 #endif 4073 .ndo_set_mac_address = stmmac_set_mac_address, 4074 }; 4075 4076 static void stmmac_reset_subtask(struct stmmac_priv *priv) 4077 { 4078 if (!test_and_clear_bit(STMMAC_RESET_REQUESTED, &priv->state)) 4079 return; 4080 if (test_bit(STMMAC_DOWN, &priv->state)) 4081 return; 4082 4083 netdev_err(priv->dev, "Reset adapter.\n"); 4084 4085 rtnl_lock(); 4086 netif_trans_update(priv->dev); 4087 while (test_and_set_bit(STMMAC_RESETING, &priv->state)) 4088 usleep_range(1000, 2000); 4089 4090 set_bit(STMMAC_DOWN, &priv->state); 4091 dev_close(priv->dev); 4092 dev_open(priv->dev); 4093 clear_bit(STMMAC_DOWN, &priv->state); 4094 clear_bit(STMMAC_RESETING, &priv->state); 4095 rtnl_unlock(); 4096 } 4097 4098 static void stmmac_service_task(struct work_struct *work) 4099 { 4100 struct stmmac_priv *priv = container_of(work, struct stmmac_priv, 4101 service_task); 4102 4103 stmmac_reset_subtask(priv); 4104 clear_bit(STMMAC_SERVICE_SCHED, &priv->state); 4105 } 4106 4107 /** 4108 * stmmac_hw_init - Init the MAC device 4109 * @priv: driver private structure 4110 * Description: this function is to configure the MAC device according to 4111 * some platform parameters or the HW capability register. It prepares the 4112 * driver to use either ring or chain modes and to setup either enhanced or 4113 * normal descriptors. 4114 */ 4115 static int stmmac_hw_init(struct stmmac_priv *priv) 4116 { 4117 int ret; 4118 4119 /* dwmac-sun8i only work in chain mode */ 4120 if (priv->plat->has_sun8i) 4121 chain_mode = 1; 4122 priv->chain_mode = chain_mode; 4123 4124 /* Initialize HW Interface */ 4125 ret = stmmac_hwif_init(priv); 4126 if (ret) 4127 return ret; 4128 4129 /* Get the HW capability (new GMAC newer than 3.50a) */ 4130 priv->hw_cap_support = stmmac_get_hw_features(priv); 4131 if (priv->hw_cap_support) { 4132 dev_info(priv->device, "DMA HW capability register supported\n"); 4133 4134 /* We can override some gmac/dma configuration fields: e.g. 4135 * enh_desc, tx_coe (e.g. that are passed through the 4136 * platform) with the values from the HW capability 4137 * register (if supported). 4138 */ 4139 priv->plat->enh_desc = priv->dma_cap.enh_desc; 4140 priv->plat->pmt = priv->dma_cap.pmt_remote_wake_up; 4141 priv->hw->pmt = priv->plat->pmt; 4142 4143 /* TXCOE doesn't work in thresh DMA mode */ 4144 if (priv->plat->force_thresh_dma_mode) 4145 priv->plat->tx_coe = 0; 4146 else 4147 priv->plat->tx_coe = priv->dma_cap.tx_coe; 4148 4149 /* In case of GMAC4 rx_coe is from HW cap register. */ 4150 priv->plat->rx_coe = priv->dma_cap.rx_coe; 4151 4152 if (priv->dma_cap.rx_coe_type2) 4153 priv->plat->rx_coe = STMMAC_RX_COE_TYPE2; 4154 else if (priv->dma_cap.rx_coe_type1) 4155 priv->plat->rx_coe = STMMAC_RX_COE_TYPE1; 4156 4157 } else { 4158 dev_info(priv->device, "No HW DMA feature register supported\n"); 4159 } 4160 4161 if (priv->plat->rx_coe) { 4162 priv->hw->rx_csum = priv->plat->rx_coe; 4163 dev_info(priv->device, "RX Checksum Offload Engine supported\n"); 4164 if (priv->synopsys_id < DWMAC_CORE_4_00) 4165 dev_info(priv->device, "COE Type %d\n", priv->hw->rx_csum); 4166 } 4167 if (priv->plat->tx_coe) 4168 dev_info(priv->device, "TX Checksum insertion supported\n"); 4169 4170 if (priv->plat->pmt) { 4171 dev_info(priv->device, "Wake-Up On Lan supported\n"); 4172 device_set_wakeup_capable(priv->device, 1); 4173 } 4174 4175 if (priv->dma_cap.tsoen) 4176 dev_info(priv->device, "TSO supported\n"); 4177 4178 /* Run HW quirks, if any */ 4179 if (priv->hwif_quirks) { 4180 ret = priv->hwif_quirks(priv); 4181 if (ret) 4182 return ret; 4183 } 4184 4185 return 0; 4186 } 4187 4188 /** 4189 * stmmac_dvr_probe 4190 * @device: device pointer 4191 * @plat_dat: platform data pointer 4192 * @res: stmmac resource pointer 4193 * Description: this is the main probe function used to 4194 * call the alloc_etherdev, allocate the priv structure. 4195 * Return: 4196 * returns 0 on success, otherwise errno. 4197 */ 4198 int stmmac_dvr_probe(struct device *device, 4199 struct plat_stmmacenet_data *plat_dat, 4200 struct stmmac_resources *res) 4201 { 4202 struct net_device *ndev = NULL; 4203 struct stmmac_priv *priv; 4204 int ret = 0; 4205 u32 queue; 4206 4207 ndev = alloc_etherdev_mqs(sizeof(struct stmmac_priv), 4208 MTL_MAX_TX_QUEUES, 4209 MTL_MAX_RX_QUEUES); 4210 if (!ndev) 4211 return -ENOMEM; 4212 4213 SET_NETDEV_DEV(ndev, device); 4214 4215 priv = netdev_priv(ndev); 4216 priv->device = device; 4217 priv->dev = ndev; 4218 4219 stmmac_set_ethtool_ops(ndev); 4220 priv->pause = pause; 4221 priv->plat = plat_dat; 4222 priv->ioaddr = res->addr; 4223 priv->dev->base_addr = (unsigned long)res->addr; 4224 4225 priv->dev->irq = res->irq; 4226 priv->wol_irq = res->wol_irq; 4227 priv->lpi_irq = res->lpi_irq; 4228 4229 if (res->mac) 4230 memcpy(priv->dev->dev_addr, res->mac, ETH_ALEN); 4231 4232 dev_set_drvdata(device, priv->dev); 4233 4234 /* Verify driver arguments */ 4235 stmmac_verify_args(); 4236 4237 /* Allocate workqueue */ 4238 priv->wq = create_singlethread_workqueue("stmmac_wq"); 4239 if (!priv->wq) { 4240 dev_err(priv->device, "failed to create workqueue\n"); 4241 goto error_wq; 4242 } 4243 4244 INIT_WORK(&priv->service_task, stmmac_service_task); 4245 4246 /* Override with kernel parameters if supplied XXX CRS XXX 4247 * this needs to have multiple instances 4248 */ 4249 if ((phyaddr >= 0) && (phyaddr <= 31)) 4250 priv->plat->phy_addr = phyaddr; 4251 4252 if (priv->plat->stmmac_rst) { 4253 ret = reset_control_assert(priv->plat->stmmac_rst); 4254 reset_control_deassert(priv->plat->stmmac_rst); 4255 /* Some reset controllers have only reset callback instead of 4256 * assert + deassert callbacks pair. 4257 */ 4258 if (ret == -ENOTSUPP) 4259 reset_control_reset(priv->plat->stmmac_rst); 4260 } 4261 4262 /* Init MAC and get the capabilities */ 4263 ret = stmmac_hw_init(priv); 4264 if (ret) 4265 goto error_hw_init; 4266 4267 /* Configure real RX and TX queues */ 4268 netif_set_real_num_rx_queues(ndev, priv->plat->rx_queues_to_use); 4269 netif_set_real_num_tx_queues(ndev, priv->plat->tx_queues_to_use); 4270 4271 ndev->netdev_ops = &stmmac_netdev_ops; 4272 4273 ndev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | 4274 NETIF_F_RXCSUM; 4275 4276 ret = stmmac_tc_init(priv, priv); 4277 if (!ret) { 4278 ndev->hw_features |= NETIF_F_HW_TC; 4279 } 4280 4281 if ((priv->plat->tso_en) && (priv->dma_cap.tsoen)) { 4282 ndev->hw_features |= NETIF_F_TSO | NETIF_F_TSO6; 4283 priv->tso = true; 4284 dev_info(priv->device, "TSO feature enabled\n"); 4285 } 4286 ndev->features |= ndev->hw_features | NETIF_F_HIGHDMA; 4287 ndev->watchdog_timeo = msecs_to_jiffies(watchdog); 4288 #ifdef STMMAC_VLAN_TAG_USED 4289 /* Both mac100 and gmac support receive VLAN tag detection */ 4290 ndev->features |= NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_HW_VLAN_STAG_RX; 4291 #endif 4292 priv->msg_enable = netif_msg_init(debug, default_msg_level); 4293 4294 /* MTU range: 46 - hw-specific max */ 4295 ndev->min_mtu = ETH_ZLEN - ETH_HLEN; 4296 if ((priv->plat->enh_desc) || (priv->synopsys_id >= DWMAC_CORE_4_00)) 4297 ndev->max_mtu = JUMBO_LEN; 4298 else if (priv->plat->has_xgmac) 4299 ndev->max_mtu = XGMAC_JUMBO_LEN; 4300 else 4301 ndev->max_mtu = SKB_MAX_HEAD(NET_SKB_PAD + NET_IP_ALIGN); 4302 /* Will not overwrite ndev->max_mtu if plat->maxmtu > ndev->max_mtu 4303 * as well as plat->maxmtu < ndev->min_mtu which is a invalid range. 4304 */ 4305 if ((priv->plat->maxmtu < ndev->max_mtu) && 4306 (priv->plat->maxmtu >= ndev->min_mtu)) 4307 ndev->max_mtu = priv->plat->maxmtu; 4308 else if (priv->plat->maxmtu < ndev->min_mtu) 4309 dev_warn(priv->device, 4310 "%s: warning: maxmtu having invalid value (%d)\n", 4311 __func__, priv->plat->maxmtu); 4312 4313 if (flow_ctrl) 4314 priv->flow_ctrl = FLOW_AUTO; /* RX/TX pause on */ 4315 4316 /* Rx Watchdog is available in the COREs newer than the 3.40. 4317 * In some case, for example on bugged HW this feature 4318 * has to be disable and this can be done by passing the 4319 * riwt_off field from the platform. 4320 */ 4321 if (((priv->synopsys_id >= DWMAC_CORE_3_50) || 4322 (priv->plat->has_xgmac)) && (!priv->plat->riwt_off)) { 4323 priv->use_riwt = 1; 4324 dev_info(priv->device, 4325 "Enable RX Mitigation via HW Watchdog Timer\n"); 4326 } 4327 4328 for (queue = 0; queue < priv->plat->rx_queues_to_use; queue++) { 4329 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue]; 4330 4331 netif_napi_add(ndev, &rx_q->napi, stmmac_poll, 4332 (8 * priv->plat->rx_queues_to_use)); 4333 } 4334 4335 mutex_init(&priv->lock); 4336 4337 /* If a specific clk_csr value is passed from the platform 4338 * this means that the CSR Clock Range selection cannot be 4339 * changed at run-time and it is fixed. Viceversa the driver'll try to 4340 * set the MDC clock dynamically according to the csr actual 4341 * clock input. 4342 */ 4343 if (!priv->plat->clk_csr) 4344 stmmac_clk_csr_set(priv); 4345 else 4346 priv->clk_csr = priv->plat->clk_csr; 4347 4348 stmmac_check_pcs_mode(priv); 4349 4350 if (priv->hw->pcs != STMMAC_PCS_RGMII && 4351 priv->hw->pcs != STMMAC_PCS_TBI && 4352 priv->hw->pcs != STMMAC_PCS_RTBI) { 4353 /* MDIO bus Registration */ 4354 ret = stmmac_mdio_register(ndev); 4355 if (ret < 0) { 4356 dev_err(priv->device, 4357 "%s: MDIO bus (id: %d) registration failed", 4358 __func__, priv->plat->bus_id); 4359 goto error_mdio_register; 4360 } 4361 } 4362 4363 ret = register_netdev(ndev); 4364 if (ret) { 4365 dev_err(priv->device, "%s: ERROR %i registering the device\n", 4366 __func__, ret); 4367 goto error_netdev_register; 4368 } 4369 4370 return ret; 4371 4372 error_netdev_register: 4373 if (priv->hw->pcs != STMMAC_PCS_RGMII && 4374 priv->hw->pcs != STMMAC_PCS_TBI && 4375 priv->hw->pcs != STMMAC_PCS_RTBI) 4376 stmmac_mdio_unregister(ndev); 4377 error_mdio_register: 4378 for (queue = 0; queue < priv->plat->rx_queues_to_use; queue++) { 4379 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue]; 4380 4381 netif_napi_del(&rx_q->napi); 4382 } 4383 error_hw_init: 4384 destroy_workqueue(priv->wq); 4385 error_wq: 4386 free_netdev(ndev); 4387 4388 return ret; 4389 } 4390 EXPORT_SYMBOL_GPL(stmmac_dvr_probe); 4391 4392 /** 4393 * stmmac_dvr_remove 4394 * @dev: device pointer 4395 * Description: this function resets the TX/RX processes, disables the MAC RX/TX 4396 * changes the link status, releases the DMA descriptor rings. 4397 */ 4398 int stmmac_dvr_remove(struct device *dev) 4399 { 4400 struct net_device *ndev = dev_get_drvdata(dev); 4401 struct stmmac_priv *priv = netdev_priv(ndev); 4402 4403 netdev_info(priv->dev, "%s: removing driver", __func__); 4404 4405 stmmac_stop_all_dma(priv); 4406 4407 stmmac_mac_set(priv, priv->ioaddr, false); 4408 netif_carrier_off(ndev); 4409 unregister_netdev(ndev); 4410 if (priv->plat->stmmac_rst) 4411 reset_control_assert(priv->plat->stmmac_rst); 4412 clk_disable_unprepare(priv->plat->pclk); 4413 clk_disable_unprepare(priv->plat->stmmac_clk); 4414 if (priv->hw->pcs != STMMAC_PCS_RGMII && 4415 priv->hw->pcs != STMMAC_PCS_TBI && 4416 priv->hw->pcs != STMMAC_PCS_RTBI) 4417 stmmac_mdio_unregister(ndev); 4418 destroy_workqueue(priv->wq); 4419 mutex_destroy(&priv->lock); 4420 free_netdev(ndev); 4421 4422 return 0; 4423 } 4424 EXPORT_SYMBOL_GPL(stmmac_dvr_remove); 4425 4426 /** 4427 * stmmac_suspend - suspend callback 4428 * @dev: device pointer 4429 * Description: this is the function to suspend the device and it is called 4430 * by the platform driver to stop the network queue, release the resources, 4431 * program the PMT register (for WoL), clean and release driver resources. 4432 */ 4433 int stmmac_suspend(struct device *dev) 4434 { 4435 struct net_device *ndev = dev_get_drvdata(dev); 4436 struct stmmac_priv *priv = netdev_priv(ndev); 4437 4438 if (!ndev || !netif_running(ndev)) 4439 return 0; 4440 4441 if (ndev->phydev) 4442 phy_stop(ndev->phydev); 4443 4444 mutex_lock(&priv->lock); 4445 4446 netif_device_detach(ndev); 4447 stmmac_stop_all_queues(priv); 4448 4449 stmmac_disable_all_queues(priv); 4450 4451 /* Stop TX/RX DMA */ 4452 stmmac_stop_all_dma(priv); 4453 4454 /* Enable Power down mode by programming the PMT regs */ 4455 if (device_may_wakeup(priv->device)) { 4456 stmmac_pmt(priv, priv->hw, priv->wolopts); 4457 priv->irq_wake = 1; 4458 } else { 4459 stmmac_mac_set(priv, priv->ioaddr, false); 4460 pinctrl_pm_select_sleep_state(priv->device); 4461 /* Disable clock in case of PWM is off */ 4462 clk_disable(priv->plat->pclk); 4463 clk_disable(priv->plat->stmmac_clk); 4464 } 4465 mutex_unlock(&priv->lock); 4466 4467 priv->oldlink = false; 4468 priv->speed = SPEED_UNKNOWN; 4469 priv->oldduplex = DUPLEX_UNKNOWN; 4470 return 0; 4471 } 4472 EXPORT_SYMBOL_GPL(stmmac_suspend); 4473 4474 /** 4475 * stmmac_reset_queues_param - reset queue parameters 4476 * @dev: device pointer 4477 */ 4478 static void stmmac_reset_queues_param(struct stmmac_priv *priv) 4479 { 4480 u32 rx_cnt = priv->plat->rx_queues_to_use; 4481 u32 tx_cnt = priv->plat->tx_queues_to_use; 4482 u32 queue; 4483 4484 for (queue = 0; queue < rx_cnt; queue++) { 4485 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue]; 4486 4487 rx_q->cur_rx = 0; 4488 rx_q->dirty_rx = 0; 4489 } 4490 4491 for (queue = 0; queue < tx_cnt; queue++) { 4492 struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue]; 4493 4494 tx_q->cur_tx = 0; 4495 tx_q->dirty_tx = 0; 4496 tx_q->mss = 0; 4497 } 4498 } 4499 4500 /** 4501 * stmmac_resume - resume callback 4502 * @dev: device pointer 4503 * Description: when resume this function is invoked to setup the DMA and CORE 4504 * in a usable state. 4505 */ 4506 int stmmac_resume(struct device *dev) 4507 { 4508 struct net_device *ndev = dev_get_drvdata(dev); 4509 struct stmmac_priv *priv = netdev_priv(ndev); 4510 4511 if (!netif_running(ndev)) 4512 return 0; 4513 4514 /* Power Down bit, into the PM register, is cleared 4515 * automatically as soon as a magic packet or a Wake-up frame 4516 * is received. Anyway, it's better to manually clear 4517 * this bit because it can generate problems while resuming 4518 * from another devices (e.g. serial console). 4519 */ 4520 if (device_may_wakeup(priv->device)) { 4521 mutex_lock(&priv->lock); 4522 stmmac_pmt(priv, priv->hw, 0); 4523 mutex_unlock(&priv->lock); 4524 priv->irq_wake = 0; 4525 } else { 4526 pinctrl_pm_select_default_state(priv->device); 4527 /* enable the clk previously disabled */ 4528 clk_enable(priv->plat->stmmac_clk); 4529 clk_enable(priv->plat->pclk); 4530 /* reset the phy so that it's ready */ 4531 if (priv->mii) 4532 stmmac_mdio_reset(priv->mii); 4533 } 4534 4535 netif_device_attach(ndev); 4536 4537 mutex_lock(&priv->lock); 4538 4539 stmmac_reset_queues_param(priv); 4540 4541 stmmac_clear_descriptors(priv); 4542 4543 stmmac_hw_setup(ndev, false); 4544 stmmac_init_tx_coalesce(priv); 4545 stmmac_set_rx_mode(ndev); 4546 4547 stmmac_enable_all_queues(priv); 4548 4549 stmmac_start_all_queues(priv); 4550 4551 mutex_unlock(&priv->lock); 4552 4553 if (ndev->phydev) 4554 phy_start(ndev->phydev); 4555 4556 return 0; 4557 } 4558 EXPORT_SYMBOL_GPL(stmmac_resume); 4559 4560 #ifndef MODULE 4561 static int __init stmmac_cmdline_opt(char *str) 4562 { 4563 char *opt; 4564 4565 if (!str || !*str) 4566 return -EINVAL; 4567 while ((opt = strsep(&str, ",")) != NULL) { 4568 if (!strncmp(opt, "debug:", 6)) { 4569 if (kstrtoint(opt + 6, 0, &debug)) 4570 goto err; 4571 } else if (!strncmp(opt, "phyaddr:", 8)) { 4572 if (kstrtoint(opt + 8, 0, &phyaddr)) 4573 goto err; 4574 } else if (!strncmp(opt, "buf_sz:", 7)) { 4575 if (kstrtoint(opt + 7, 0, &buf_sz)) 4576 goto err; 4577 } else if (!strncmp(opt, "tc:", 3)) { 4578 if (kstrtoint(opt + 3, 0, &tc)) 4579 goto err; 4580 } else if (!strncmp(opt, "watchdog:", 9)) { 4581 if (kstrtoint(opt + 9, 0, &watchdog)) 4582 goto err; 4583 } else if (!strncmp(opt, "flow_ctrl:", 10)) { 4584 if (kstrtoint(opt + 10, 0, &flow_ctrl)) 4585 goto err; 4586 } else if (!strncmp(opt, "pause:", 6)) { 4587 if (kstrtoint(opt + 6, 0, &pause)) 4588 goto err; 4589 } else if (!strncmp(opt, "eee_timer:", 10)) { 4590 if (kstrtoint(opt + 10, 0, &eee_timer)) 4591 goto err; 4592 } else if (!strncmp(opt, "chain_mode:", 11)) { 4593 if (kstrtoint(opt + 11, 0, &chain_mode)) 4594 goto err; 4595 } 4596 } 4597 return 0; 4598 4599 err: 4600 pr_err("%s: ERROR broken module parameter conversion", __func__); 4601 return -EINVAL; 4602 } 4603 4604 __setup("stmmaceth=", stmmac_cmdline_opt); 4605 #endif /* MODULE */ 4606 4607 static int __init stmmac_init(void) 4608 { 4609 #ifdef CONFIG_DEBUG_FS 4610 /* Create debugfs main directory if it doesn't exist yet */ 4611 if (!stmmac_fs_dir) { 4612 stmmac_fs_dir = debugfs_create_dir(STMMAC_RESOURCE_NAME, NULL); 4613 4614 if (!stmmac_fs_dir || IS_ERR(stmmac_fs_dir)) { 4615 pr_err("ERROR %s, debugfs create directory failed\n", 4616 STMMAC_RESOURCE_NAME); 4617 4618 return -ENOMEM; 4619 } 4620 } 4621 #endif 4622 4623 return 0; 4624 } 4625 4626 static void __exit stmmac_exit(void) 4627 { 4628 #ifdef CONFIG_DEBUG_FS 4629 debugfs_remove_recursive(stmmac_fs_dir); 4630 #endif 4631 } 4632 4633 module_init(stmmac_init) 4634 module_exit(stmmac_exit) 4635 4636 MODULE_DESCRIPTION("STMMAC 10/100/1000 Ethernet device driver"); 4637 MODULE_AUTHOR("Giuseppe Cavallaro <peppe.cavallaro@st.com>"); 4638 MODULE_LICENSE("GPL"); 4639