FILE
xilinx_axienet_main.c
File preview with syntax highlighting.
linux-6.19.14/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Xilinx Axi Ethernet device driver 4 * 5 * Copyright (c) 2008 Nissin Systems Co., Ltd., Yoshio Kashiwagi 6 * Copyright (c) 2005-2008 DLA Systems, David H. Lynch Jr. <dhlii@dlasys.net> 7 * Copyright (c) 2008-2009 Secret Lab Technologies Ltd. 8 * Copyright (c) 2010 - 2011 Michal Simek <monstr@monstr.eu> 9 * Copyright (c) 2010 - 2011 PetaLogix 10 * Copyright (c) 2019 - 2022 Calian Advanced Technologies 11 * Copyright (c) 2010 - 2012 Xilinx, Inc. All rights reserved. 12 * 13 * This is a driver for the Xilinx Axi Ethernet which is used in the Virtex6 14 * and Spartan6. 15 * 16 * TODO: 17 * - Add Axi Fifo support. 18 * - Factor out Axi DMA code into separate driver. 19 * - Test and fix basic multicast filtering. 20 * - Add support for extended multicast filtering. 21 * - Test basic VLAN support. 22 * - Add support for extended VLAN support. 23 */ 24 25#include <linux/clk.h> 26#include <linux/delay.h> 27#include <linux/etherdevice.h> 28#include <linux/module.h> 29#include <linux/netdevice.h> 30#include <linux/of.h> 31#include <linux/of_mdio.h> 32#include <linux/of_net.h> 33#include <linux/of_irq.h> 34#include <linux/of_address.h> 35#include <linux/platform_device.h> 36#include <linux/skbuff.h> 37#include <linux/math64.h> 38#include <linux/phy.h> 39#include <linux/mii.h> 40#include <linux/ethtool.h> 41#include <linux/dmaengine.h> 42#include <linux/dma-mapping.h> 43#include <linux/dma/xilinx_dma.h> 44#include <linux/circ_buf.h> 45#include <net/netdev_queues.h> 46 47#include "xilinx_axienet.h" 48 49/* Descriptors defines for Tx and Rx DMA */ 50#define TX_BD_NUM_DEFAULT 128 51#define RX_BD_NUM_DEFAULT 1024 52#define TX_BD_NUM_MIN (MAX_SKB_FRAGS + 1) 53#define TX_BD_NUM_MAX 4096 54#define RX_BD_NUM_MAX 4096 55#define DMA_NUM_APP_WORDS 5 56#define LEN_APP 4 57#define RX_BUF_NUM_DEFAULT 128 58 59/* Must be shorter than length of ethtool_drvinfo.driver field to fit */ 60#define DRIVER_NAME "xaxienet" 61#define DRIVER_DESCRIPTION "Xilinx Axi Ethernet driver" 62#define DRIVER_VERSION "1.00a" 63 64#define AXIENET_REGS_N 40 65 66static void axienet_rx_submit_desc(struct net_device *ndev); 67 68/* Match table for of_platform binding */ 69static const struct of_device_id axienet_of_match[] = { 70 { .compatible = "xlnx,axi-ethernet-1.00.a", }, 71 { .compatible = "xlnx,axi-ethernet-1.01.a", }, 72 { .compatible = "xlnx,axi-ethernet-2.01.a", }, 73 {}, 74}; 75 76MODULE_DEVICE_TABLE(of, axienet_of_match); 77 78/* Option table for setting up Axi Ethernet hardware options */ 79static struct axienet_option axienet_options[] = { 80 /* Turn on jumbo packet support for both Rx and Tx */ 81 { 82 .opt = XAE_OPTION_JUMBO, 83 .reg = XAE_TC_OFFSET, 84 .m_or = XAE_TC_JUM_MASK, 85 }, { 86 .opt = XAE_OPTION_JUMBO, 87 .reg = XAE_RCW1_OFFSET, 88 .m_or = XAE_RCW1_JUM_MASK, 89 }, { /* Turn on VLAN packet support for both Rx and Tx */ 90 .opt = XAE_OPTION_VLAN, 91 .reg = XAE_TC_OFFSET, 92 .m_or = XAE_TC_VLAN_MASK, 93 }, { 94 .opt = XAE_OPTION_VLAN, 95 .reg = XAE_RCW1_OFFSET, 96 .m_or = XAE_RCW1_VLAN_MASK, 97 }, { /* Turn on FCS stripping on receive packets */ 98 .opt = XAE_OPTION_FCS_STRIP, 99 .reg = XAE_RCW1_OFFSET, 100 .m_or = XAE_RCW1_FCS_MASK, 101 }, { /* Turn on FCS insertion on transmit packets */ 102 .opt = XAE_OPTION_FCS_INSERT, 103 .reg = XAE_TC_OFFSET, 104 .m_or = XAE_TC_FCS_MASK, 105 }, { /* Turn off length/type field checking on receive packets */ 106 .opt = XAE_OPTION_LENTYPE_ERR, 107 .reg = XAE_RCW1_OFFSET, 108 .m_or = XAE_RCW1_LT_DIS_MASK, 109 }, { /* Turn on Rx flow control */ 110 .opt = XAE_OPTION_FLOW_CONTROL, 111 .reg = XAE_FCC_OFFSET, 112 .m_or = XAE_FCC_FCRX_MASK, 113 }, { /* Turn on Tx flow control */ 114 .opt = XAE_OPTION_FLOW_CONTROL, 115 .reg = XAE_FCC_OFFSET, 116 .m_or = XAE_FCC_FCTX_MASK, 117 }, { /* Turn on promiscuous frame filtering */ 118 .opt = XAE_OPTION_PROMISC, 119 .reg = XAE_FMI_OFFSET, 120 .m_or = XAE_FMI_PM_MASK, 121 }, { /* Enable transmitter */ 122 .opt = XAE_OPTION_TXEN, 123 .reg = XAE_TC_OFFSET, 124 .m_or = XAE_TC_TX_MASK, 125 }, { /* Enable receiver */ 126 .opt = XAE_OPTION_RXEN, 127 .reg = XAE_RCW1_OFFSET, 128 .m_or = XAE_RCW1_RX_MASK, 129 }, 130 {} 131}; 132 133static struct skbuf_dma_descriptor *axienet_get_rx_desc(struct axienet_local *lp, int i) 134{ 135 return lp->rx_skb_ring[i & (RX_BUF_NUM_DEFAULT - 1)]; 136} 137 138static struct skbuf_dma_descriptor *axienet_get_tx_desc(struct axienet_local *lp, int i) 139{ 140 return lp->tx_skb_ring[i & (TX_BD_NUM_MAX - 1)]; 141} 142 143/** 144 * axienet_dma_in32 - Memory mapped Axi DMA register read 145 * @lp: Pointer to axienet local structure 146 * @reg: Address offset from the base address of the Axi DMA core 147 * 148 * Return: The contents of the Axi DMA register 149 * 150 * This function returns the contents of the corresponding Axi DMA register. 151 */ 152static inline u32 axienet_dma_in32(struct axienet_local *lp, off_t reg) 153{ 154 return ioread32(lp->dma_regs + reg); 155} 156 157static void desc_set_phys_addr(struct axienet_local *lp, dma_addr_t addr, 158 struct axidma_bd *desc) 159{ 160 desc->phys = lower_32_bits(addr); 161 if (lp->features & XAE_FEATURE_DMA_64BIT) 162 desc->phys_msb = upper_32_bits(addr); 163} 164 165static dma_addr_t desc_get_phys_addr(struct axienet_local *lp, 166 struct axidma_bd *desc) 167{ 168 dma_addr_t ret = desc->phys; 169 170 if (lp->features & XAE_FEATURE_DMA_64BIT) 171 ret |= ((dma_addr_t)desc->phys_msb << 16) << 16; 172 173 return ret; 174} 175 176/** 177 * axienet_dma_bd_release - Release buffer descriptor rings 178 * @ndev: Pointer to the net_device structure 179 * 180 * This function is used to release the descriptors allocated in 181 * axienet_dma_bd_init. axienet_dma_bd_release is called when Axi Ethernet 182 * driver stop api is called. 183 */ 184static void axienet_dma_bd_release(struct net_device *ndev) 185{ 186 int i; 187 struct axienet_local *lp = netdev_priv(ndev); 188 189 /* If we end up here, tx_bd_v must have been DMA allocated. */ 190 dma_free_coherent(lp->dev, 191 sizeof(*lp->tx_bd_v) * lp->tx_bd_num, 192 lp->tx_bd_v, 193 lp->tx_bd_p); 194 195 if (!lp->rx_bd_v) 196 return; 197 198 for (i = 0; i < lp->rx_bd_num; i++) { 199 dma_addr_t phys; 200 201 /* A NULL skb means this descriptor has not been initialised 202 * at all. 203 */ 204 if (!lp->rx_bd_v[i].skb) 205 break; 206 207 dev_kfree_skb(lp->rx_bd_v[i].skb); 208 209 /* For each descriptor, we programmed cntrl with the (non-zero) 210 * descriptor size, after it had been successfully allocated. 211 * So a non-zero value in there means we need to unmap it. 212 */ 213 if (lp->rx_bd_v[i].cntrl) { 214 phys = desc_get_phys_addr(lp, &lp->rx_bd_v[i]); 215 dma_unmap_single(lp->dev, phys, 216 lp->max_frm_size, DMA_FROM_DEVICE); 217 } 218 } 219 220 dma_free_coherent(lp->dev, 221 sizeof(*lp->rx_bd_v) * lp->rx_bd_num, 222 lp->rx_bd_v, 223 lp->rx_bd_p); 224} 225 226static u64 axienet_dma_rate(struct axienet_local *lp) 227{ 228 if (lp->axi_clk) 229 return clk_get_rate(lp->axi_clk); 230 return 125000000; /* arbitrary guess if no clock rate set */ 231} 232 233/** 234 * axienet_calc_cr() - Calculate control register value 235 * @lp: Device private data 236 * @count: Number of completions before an interrupt 237 * @usec: Microseconds after the last completion before an interrupt 238 * 239 * Calculate a control register value based on the coalescing settings. The 240 * run/stop bit is not set. 241 * 242 * Return: Control register value with coalescing settings configured. 243 */ 244static u32 axienet_calc_cr(struct axienet_local *lp, u32 count, u32 usec) 245{ 246 u32 cr; 247 248 cr = FIELD_PREP(XAXIDMA_COALESCE_MASK, count) | XAXIDMA_IRQ_IOC_MASK | 249 XAXIDMA_IRQ_ERROR_MASK; 250 /* Only set interrupt delay timer if not generating an interrupt on 251 * the first packet. Otherwise leave at 0 to disable delay interrupt. 252 */ 253 if (count > 1) { 254 u64 clk_rate = axienet_dma_rate(lp); 255 u32 timer; 256 257 /* 1 Timeout Interval = 125 * (clock period of SG clock) */ 258 timer = DIV64_U64_ROUND_CLOSEST((u64)usec * clk_rate, 259 XAXIDMA_DELAY_SCALE); 260 261 timer = min(timer, FIELD_MAX(XAXIDMA_DELAY_MASK)); 262 cr |= FIELD_PREP(XAXIDMA_DELAY_MASK, timer) | 263 XAXIDMA_IRQ_DELAY_MASK; 264 } 265 266 return cr; 267} 268 269/** 270 * axienet_coalesce_params() - Extract coalesce parameters from the CR 271 * @lp: Device private data 272 * @cr: The control register to parse 273 * @count: Number of packets before an interrupt 274 * @usec: Idle time (in usec) before an interrupt 275 */ 276static void axienet_coalesce_params(struct axienet_local *lp, u32 cr, 277 u32 *count, u32 *usec) 278{ 279 u64 clk_rate = axienet_dma_rate(lp); 280 u64 timer = FIELD_GET(XAXIDMA_DELAY_MASK, cr); 281 282 *count = FIELD_GET(XAXIDMA_COALESCE_MASK, cr); 283 *usec = DIV64_U64_ROUND_CLOSEST(timer * XAXIDMA_DELAY_SCALE, clk_rate); 284} 285 286/** 287 * axienet_dma_start - Set up DMA registers and start DMA operation 288 * @lp: Pointer to the axienet_local structure 289 */ 290static void axienet_dma_start(struct axienet_local *lp) 291{ 292 spin_lock_irq(&lp->rx_cr_lock); 293 294 /* Start updating the Rx channel control register */ 295 lp->rx_dma_cr &= ~XAXIDMA_CR_RUNSTOP_MASK; 296 axienet_dma_out32(lp, XAXIDMA_RX_CR_OFFSET, lp->rx_dma_cr); 297 298 /* Populate the tail pointer and bring the Rx Axi DMA engine out of 299 * halted state. This will make the Rx side ready for reception. 300 */ 301 axienet_dma_out_addr(lp, XAXIDMA_RX_CDESC_OFFSET, lp->rx_bd_p); 302 lp->rx_dma_cr |= XAXIDMA_CR_RUNSTOP_MASK; 303 axienet_dma_out32(lp, XAXIDMA_RX_CR_OFFSET, lp->rx_dma_cr); 304 axienet_dma_out_addr(lp, XAXIDMA_RX_TDESC_OFFSET, lp->rx_bd_p + 305 (sizeof(*lp->rx_bd_v) * (lp->rx_bd_num - 1))); 306 lp->rx_dma_started = true; 307 308 spin_unlock_irq(&lp->rx_cr_lock); 309 spin_lock_irq(&lp->tx_cr_lock); 310 311 /* Start updating the Tx channel control register */ 312 lp->tx_dma_cr &= ~XAXIDMA_CR_RUNSTOP_MASK; 313 axienet_dma_out32(lp, XAXIDMA_TX_CR_OFFSET, lp->tx_dma_cr); 314 315 /* Write to the RS (Run-stop) bit in the Tx channel control register. 316 * Tx channel is now ready to run. But only after we write to the 317 * tail pointer register that the Tx channel will start transmitting. 318 */ 319 axienet_dma_out_addr(lp, XAXIDMA_TX_CDESC_OFFSET, lp->tx_bd_p); 320 lp->tx_dma_cr |= XAXIDMA_CR_RUNSTOP_MASK; 321 axienet_dma_out32(lp, XAXIDMA_TX_CR_OFFSET, lp->tx_dma_cr); 322 lp->tx_dma_started = true; 323 324 spin_unlock_irq(&lp->tx_cr_lock); 325} 326 327/** 328 * axienet_dma_bd_init - Setup buffer descriptor rings for Axi DMA 329 * @ndev: Pointer to the net_device structure 330 * 331 * Return: 0, on success -ENOMEM, on failure 332 * 333 * This function is called to initialize the Rx and Tx DMA descriptor 334 * rings. This initializes the descriptors with required default values 335 * and is called when Axi Ethernet driver reset is called. 336 */ 337static int axienet_dma_bd_init(struct net_device *ndev) 338{ 339 int i; 340 struct sk_buff *skb; 341 struct axienet_local *lp = netdev_priv(ndev); 342 343 /* Reset the indexes which are used for accessing the BDs */ 344 lp->tx_bd_ci = 0; 345 lp->tx_bd_tail = 0; 346 lp->rx_bd_ci = 0; 347 348 /* Allocate the Tx and Rx buffer descriptors. */ 349 lp->tx_bd_v = dma_alloc_coherent(lp->dev, 350 sizeof(*lp->tx_bd_v) * lp->tx_bd_num, 351 &lp->tx_bd_p, GFP_KERNEL); 352 if (!lp->tx_bd_v) 353 return -ENOMEM; 354 355 lp->rx_bd_v = dma_alloc_coherent(lp->dev, 356 sizeof(*lp->rx_bd_v) * lp->rx_bd_num, 357 &lp->rx_bd_p, GFP_KERNEL); 358 if (!lp->rx_bd_v) 359 goto out; 360 361 for (i = 0; i < lp->tx_bd_num; i++) { 362 dma_addr_t addr = lp->tx_bd_p + 363 sizeof(*lp->tx_bd_v) * 364 ((i + 1) % lp->tx_bd_num); 365 366 lp->tx_bd_v[i].next = lower_32_bits(addr); 367 if (lp->features & XAE_FEATURE_DMA_64BIT) 368 lp->tx_bd_v[i].next_msb = upper_32_bits(addr); 369 } 370 371 for (i = 0; i < lp->rx_bd_num; i++) { 372 dma_addr_t addr; 373 374 addr = lp->rx_bd_p + sizeof(*lp->rx_bd_v) * 375 ((i + 1) % lp->rx_bd_num); 376 lp->rx_bd_v[i].next = lower_32_bits(addr); 377 if (lp->features & XAE_FEATURE_DMA_64BIT) 378 lp->rx_bd_v[i].next_msb = upper_32_bits(addr); 379 380 skb = netdev_alloc_skb_ip_align(ndev, lp->max_frm_size); 381 if (!skb) 382 goto out; 383 384 lp->rx_bd_v[i].skb = skb; 385 addr = dma_map_single(lp->dev, skb->data, 386 lp->max_frm_size, DMA_FROM_DEVICE); 387 if (dma_mapping_error(lp->dev, addr)) { 388 netdev_err(ndev, "DMA mapping error\n"); 389 goto out; 390 } 391 desc_set_phys_addr(lp, addr, &lp->rx_bd_v[i]); 392 393 lp->rx_bd_v[i].cntrl = lp->max_frm_size; 394 } 395 396 axienet_dma_start(lp); 397 398 return 0; 399out: 400 axienet_dma_bd_release(ndev); 401 return -ENOMEM; 402} 403 404/** 405 * axienet_set_mac_address - Write the MAC address 406 * @ndev: Pointer to the net_device structure 407 * @address: 6 byte Address to be written as MAC address 408 * 409 * This function is called to initialize the MAC address of the Axi Ethernet 410 * core. It writes to the UAW0 and UAW1 registers of the core. 411 */ 412static void axienet_set_mac_address(struct net_device *ndev, 413 const void *address) 414{ 415 struct axienet_local *lp = netdev_priv(ndev); 416 417 if (address) 418 eth_hw_addr_set(ndev, address); 419 if (!is_valid_ether_addr(ndev->dev_addr)) 420 eth_hw_addr_random(ndev); 421 422 /* Set up unicast MAC address filter set its mac address */ 423 axienet_iow(lp, XAE_UAW0_OFFSET, 424 (ndev->dev_addr[0]) | 425 (ndev->dev_addr[1] << 8) | 426 (ndev->dev_addr[2] << 16) | 427 (ndev->dev_addr[3] << 24)); 428 axienet_iow(lp, XAE_UAW1_OFFSET, 429 (((axienet_ior(lp, XAE_UAW1_OFFSET)) & 430 ~XAE_UAW1_UNICASTADDR_MASK) | 431 (ndev->dev_addr[4] | 432 (ndev->dev_addr[5] << 8)))); 433} 434 435/** 436 * netdev_set_mac_address - Write the MAC address (from outside the driver) 437 * @ndev: Pointer to the net_device structure 438 * @p: 6 byte Address to be written as MAC address 439 * 440 * Return: 0 for all conditions. Presently, there is no failure case. 441 * 442 * This function is called to initialize the MAC address of the Axi Ethernet 443 * core. It calls the core specific axienet_set_mac_address. This is the 444 * function that goes into net_device_ops structure entry ndo_set_mac_address. 445 */ 446static int netdev_set_mac_address(struct net_device *ndev, void *p) 447{ 448 struct sockaddr *addr = p; 449 450 axienet_set_mac_address(ndev, addr->sa_data); 451 return 0; 452} 453 454/** 455 * axienet_set_multicast_list - Prepare the multicast table 456 * @ndev: Pointer to the net_device structure 457 * 458 * This function is called to initialize the multicast table during 459 * initialization. The Axi Ethernet basic multicast support has a four-entry 460 * multicast table which is initialized here. Additionally this function 461 * goes into the net_device_ops structure entry ndo_set_multicast_list. This 462 * means whenever the multicast table entries need to be updated this 463 * function gets called. 464 */ 465static void axienet_set_multicast_list(struct net_device *ndev) 466{ 467 int i = 0; 468 u32 reg, af0reg, af1reg; 469 struct axienet_local *lp = netdev_priv(ndev); 470 471 reg = axienet_ior(lp, XAE_FMI_OFFSET); 472 reg &= ~XAE_FMI_PM_MASK; 473 if (ndev->flags & IFF_PROMISC) 474 reg |= XAE_FMI_PM_MASK; 475 else 476 reg &= ~XAE_FMI_PM_MASK; 477 axienet_iow(lp, XAE_FMI_OFFSET, reg); 478 479 if (ndev->flags & IFF_ALLMULTI || 480 netdev_mc_count(ndev) > XAE_MULTICAST_CAM_TABLE_NUM) { 481 reg &= 0xFFFFFF00; 482 axienet_iow(lp, XAE_FMI_OFFSET, reg); 483 axienet_iow(lp, XAE_AF0_OFFSET, 1); /* Multicast bit */ 484 axienet_iow(lp, XAE_AF1_OFFSET, 0); 485 axienet_iow(lp, XAE_AM0_OFFSET, 1); /* ditto */ 486 axienet_iow(lp, XAE_AM1_OFFSET, 0); 487 axienet_iow(lp, XAE_FFE_OFFSET, 1); 488 i = 1; 489 } else if (!netdev_mc_empty(ndev)) { 490 struct netdev_hw_addr *ha; 491 492 netdev_for_each_mc_addr(ha, ndev) { 493 if (i >= XAE_MULTICAST_CAM_TABLE_NUM) 494 break; 495 496 af0reg = (ha->addr[0]); 497 af0reg |= (ha->addr[1] << 8); 498 af0reg |= (ha->addr[2] << 16); 499 af0reg |= (ha->addr[3] << 24); 500 501 af1reg = (ha->addr[4]); 502 af1reg |= (ha->addr[5] << 8); 503 504 reg &= 0xFFFFFF00; 505 reg |= i; 506 507 axienet_iow(lp, XAE_FMI_OFFSET, reg); 508 axienet_iow(lp, XAE_AF0_OFFSET, af0reg); 509 axienet_iow(lp, XAE_AF1_OFFSET, af1reg); 510 axienet_iow(lp, XAE_AM0_OFFSET, 0xffffffff); 511 axienet_iow(lp, XAE_AM1_OFFSET, 0x0000ffff); 512 axienet_iow(lp, XAE_FFE_OFFSET, 1); 513 i++; 514 } 515 } 516 517 for (; i < XAE_MULTICAST_CAM_TABLE_NUM; i++) { 518 reg &= 0xFFFFFF00; 519 reg |= i; 520 axienet_iow(lp, XAE_FMI_OFFSET, reg); 521 axienet_iow(lp, XAE_FFE_OFFSET, 0); 522 } 523} 524 525/** 526 * axienet_setoptions - Set an Axi Ethernet option 527 * @ndev: Pointer to the net_device structure 528 * @options: Option to be enabled/disabled 529 * 530 * The Axi Ethernet core has multiple features which can be selectively turned 531 * on or off. The typical options could be jumbo frame option, basic VLAN 532 * option, promiscuous mode option etc. This function is used to set or clear 533 * these options in the Axi Ethernet hardware. This is done through 534 * axienet_option structure . 535 */ 536static void axienet_setoptions(struct net_device *ndev, u32 options) 537{ 538 int reg; 539 struct axienet_local *lp = netdev_priv(ndev); 540 struct axienet_option *tp = &axienet_options[0]; 541 542 while (tp->opt) { 543 reg = ((axienet_ior(lp, tp->reg)) & ~(tp->m_or)); 544 if (options & tp->opt) 545 reg |= tp->m_or; 546 axienet_iow(lp, tp->reg, reg); 547 tp++; 548 } 549 550 lp->options |= options; 551} 552 553static u64 axienet_stat(struct axienet_local *lp, enum temac_stat stat) 554{ 555 u32 counter; 556 557 if (lp->reset_in_progress) 558 return lp->hw_stat_base[stat]; 559 560 counter = axienet_ior(lp, XAE_STATS_OFFSET + stat * 8); 561 return lp->hw_stat_base[stat] + (counter - lp->hw_last_counter[stat]); 562} 563 564static void axienet_stats_update(struct axienet_local *lp, bool reset) 565{ 566 enum temac_stat stat; 567 568 write_seqcount_begin(&lp->hw_stats_seqcount); 569 lp->reset_in_progress = reset; 570 for (stat = 0; stat < STAT_COUNT; stat++) { 571 u32 counter = axienet_ior(lp, XAE_STATS_OFFSET + stat * 8); 572 573 lp->hw_stat_base[stat] += counter - lp->hw_last_counter[stat]; 574 lp->hw_last_counter[stat] = counter; 575 } 576 write_seqcount_end(&lp->hw_stats_seqcount); 577} 578 579static void axienet_refresh_stats(struct work_struct *work) 580{ 581 struct axienet_local *lp = container_of(work, struct axienet_local, 582 stats_work.work); 583 584 mutex_lock(&lp->stats_lock); 585 axienet_stats_update(lp, false); 586 mutex_unlock(&lp->stats_lock); 587 588 /* Just less than 2^32 bytes at 2.5 GBit/s */ 589 schedule_delayed_work(&lp->stats_work, 13 * HZ); 590} 591 592static int __axienet_device_reset(struct axienet_local *lp) 593{ 594 u32 value; 595 int ret; 596 597 /* Save statistics counters in case they will be reset */ 598 mutex_lock(&lp->stats_lock); 599 if (lp->features & XAE_FEATURE_STATS) 600 axienet_stats_update(lp, true); 601 602 /* Reset Axi DMA. This would reset Axi Ethernet core as well. The reset 603 * process of Axi DMA takes a while to complete as all pending 604 * commands/transfers will be flushed or completed during this 605 * reset process. 606 * Note that even though both TX and RX have their own reset register, 607 * they both reset the entire DMA core, so only one needs to be used. 608 */ 609 axienet_dma_out32(lp, XAXIDMA_TX_CR_OFFSET, XAXIDMA_CR_RESET_MASK); 610 ret = read_poll_timeout(axienet_dma_in32, value, 611 !(value & XAXIDMA_CR_RESET_MASK), 612 DELAY_OF_ONE_MILLISEC, 50000, false, lp, 613 XAXIDMA_TX_CR_OFFSET); 614 if (ret) { 615 dev_err(lp->dev, "%s: DMA reset timeout!\n", __func__); 616 goto out; 617 } 618 619 /* Wait for PhyRstCmplt bit to be set, indicating the PHY reset has finished */ 620 ret = read_poll_timeout(axienet_ior, value, 621 value & XAE_INT_PHYRSTCMPLT_MASK, 622 DELAY_OF_ONE_MILLISEC, 50000, false, lp, 623 XAE_IS_OFFSET); 624 if (ret) { 625 dev_err(lp->dev, "%s: timeout waiting for PhyRstCmplt\n", __func__); 626 goto out; 627 } 628 629 /* Update statistics counters with new values */ 630 if (lp->features & XAE_FEATURE_STATS) { 631 enum temac_stat stat; 632 633 write_seqcount_begin(&lp->hw_stats_seqcount); 634 lp->reset_in_progress = false; 635 for (stat = 0; stat < STAT_COUNT; stat++) { 636 u32 counter = 637 axienet_ior(lp, XAE_STATS_OFFSET + stat * 8); 638 639 lp->hw_stat_base[stat] += 640 lp->hw_last_counter[stat] - counter; 641 lp->hw_last_counter[stat] = counter; 642 } 643 write_seqcount_end(&lp->hw_stats_seqcount); 644 } 645 646out: 647 mutex_unlock(&lp->stats_lock); 648 return ret; 649} 650 651/** 652 * axienet_dma_stop - Stop DMA operation 653 * @lp: Pointer to the axienet_local structure 654 */ 655static void axienet_dma_stop(struct axienet_local *lp) 656{ 657 int count; 658 u32 cr, sr; 659 660 spin_lock_irq(&lp->rx_cr_lock); 661 662 cr = lp->rx_dma_cr & ~(XAXIDMA_CR_RUNSTOP_MASK | XAXIDMA_IRQ_ALL_MASK); 663 axienet_dma_out32(lp, XAXIDMA_RX_CR_OFFSET, cr); 664 lp->rx_dma_started = false; 665 666 spin_unlock_irq(&lp->rx_cr_lock); 667 synchronize_irq(lp->rx_irq); 668 669 spin_lock_irq(&lp->tx_cr_lock); 670 671 cr = lp->tx_dma_cr & ~(XAXIDMA_CR_RUNSTOP_MASK | XAXIDMA_IRQ_ALL_MASK); 672 axienet_dma_out32(lp, XAXIDMA_TX_CR_OFFSET, cr); 673 lp->tx_dma_started = false; 674 675 spin_unlock_irq(&lp->tx_cr_lock); 676 synchronize_irq(lp->tx_irq); 677 678 /* Give DMAs a chance to halt gracefully */ 679 sr = axienet_dma_in32(lp, XAXIDMA_RX_SR_OFFSET); 680 for (count = 0; !(sr & XAXIDMA_SR_HALT_MASK) && count < 5; ++count) { 681 msleep(20); 682 sr = axienet_dma_in32(lp, XAXIDMA_RX_SR_OFFSET); 683 } 684 685 sr = axienet_dma_in32(lp, XAXIDMA_TX_SR_OFFSET); 686 for (count = 0; !(sr & XAXIDMA_SR_HALT_MASK) && count < 5; ++count) { 687 msleep(20); 688 sr = axienet_dma_in32(lp, XAXIDMA_TX_SR_OFFSET); 689 } 690 691 /* Do a reset to ensure DMA is really stopped */ 692 axienet_lock_mii(lp); 693 __axienet_device_reset(lp); 694 axienet_unlock_mii(lp); 695} 696 697/** 698 * axienet_device_reset - Reset and initialize the Axi Ethernet hardware. 699 * @ndev: Pointer to the net_device structure 700 * 701 * This function is called to reset and initialize the Axi Ethernet core. This 702 * is typically called during initialization. It does a reset of the Axi DMA 703 * Rx/Tx channels and initializes the Axi DMA BDs. Since Axi DMA reset lines 704 * are connected to Axi Ethernet reset lines, this in turn resets the Axi 705 * Ethernet core. No separate hardware reset is done for the Axi Ethernet 706 * core. 707 * 708 * Return: 0 on success or a negative error number otherwise. 709 */ 710static int axienet_device_reset(struct net_device *ndev) 711{ 712 u32 axienet_status; 713 struct axienet_local *lp = netdev_priv(ndev); 714 int ret; 715 716 lp->max_frm_size = XAE_MAX_VLAN_FRAME_SIZE; 717 lp->options |= XAE_OPTION_VLAN; 718 lp->options &= (~XAE_OPTION_JUMBO); 719 720 if (ndev->mtu > XAE_MTU && ndev->mtu <= XAE_JUMBO_MTU) { 721 lp->max_frm_size = ndev->mtu + VLAN_ETH_HLEN + 722 XAE_TRL_SIZE; 723 724 if (lp->max_frm_size <= lp->rxmem) 725 lp->options |= XAE_OPTION_JUMBO; 726 } 727 728 if (!lp->use_dmaengine) { 729 ret = __axienet_device_reset(lp); 730 if (ret) 731 return ret; 732 733 ret = axienet_dma_bd_init(ndev); 734 if (ret) { 735 netdev_err(ndev, "%s: descriptor allocation failed\n", 736 __func__); 737 return ret; 738 } 739 } 740 741 axienet_status = axienet_ior(lp, XAE_RCW1_OFFSET); 742 axienet_status &= ~XAE_RCW1_RX_MASK; 743 axienet_iow(lp, XAE_RCW1_OFFSET, axienet_status); 744 745 axienet_status = axienet_ior(lp, XAE_IP_OFFSET); 746 if (axienet_status & XAE_INT_RXRJECT_MASK) 747 axienet_iow(lp, XAE_IS_OFFSET, XAE_INT_RXRJECT_MASK); 748 axienet_iow(lp, XAE_IE_OFFSET, lp->eth_irq > 0 ? 749 XAE_INT_RECV_ERROR_MASK : 0); 750 751 axienet_iow(lp, XAE_FCC_OFFSET, XAE_FCC_FCRX_MASK); 752 753 /* Sync default options with HW but leave receiver and 754 * transmitter disabled. 755 */ 756 axienet_setoptions(ndev, lp->options & 757 ~(XAE_OPTION_TXEN | XAE_OPTION_RXEN)); 758 axienet_set_mac_address(ndev, NULL); 759 axienet_set_multicast_list(ndev); 760 axienet_setoptions(ndev, lp->options); 761 762 netif_trans_update(ndev); 763 764 return 0; 765} 766 767/** 768 * axienet_free_tx_chain - Clean up a series of linked TX descriptors. 769 * @lp: Pointer to the axienet_local structure 770 * @first_bd: Index of first descriptor to clean up 771 * @nr_bds: Max number of descriptors to clean up 772 * @force: Whether to clean descriptors even if not complete 773 * @sizep: Pointer to a u32 accumulating the total byte count of 774 * completed packets (using skb->len). Ignored if NULL. 775 * @budget: NAPI budget (use 0 when not called from NAPI poll) 776 * 777 * Would either be called after a successful transmit operation, or after 778 * there was an error when setting up the chain. 779 * 780 * Return: The number of packets handled. 781 */ 782static int axienet_free_tx_chain(struct axienet_local *lp, u32 first_bd, 783 int nr_bds, bool force, u32 *sizep, int budget) 784{ 785 struct axidma_bd *cur_p; 786 unsigned int status; 787 int i, packets = 0; 788 dma_addr_t phys; 789 790 for (i = 0; i < nr_bds; i++) { 791 cur_p = &lp->tx_bd_v[(first_bd + i) % lp->tx_bd_num]; 792 status = cur_p->status; 793 794 /* If force is not specified, clean up only descriptors 795 * that have been completed by the MAC. 796 */ 797 if (!force && !(status & XAXIDMA_BD_STS_COMPLETE_MASK)) 798 break; 799 800 /* Ensure we see complete descriptor update */ 801 dma_rmb(); 802 phys = desc_get_phys_addr(lp, cur_p); 803 dma_unmap_single(lp->dev, phys, 804 (cur_p->cntrl & XAXIDMA_BD_CTRL_LENGTH_MASK), 805 DMA_TO_DEVICE); 806 807 if (cur_p->skb && (status & XAXIDMA_BD_STS_COMPLETE_MASK)) { 808 if (sizep) 809 *sizep += cur_p->skb->len; 810 napi_consume_skb(cur_p->skb, budget); 811 packets++; 812 } 813 814 cur_p->app0 = 0; 815 cur_p->app1 = 0; 816 cur_p->app2 = 0; 817 cur_p->app4 = 0; 818 cur_p->skb = NULL; 819 /* ensure our transmit path and device don't prematurely see status cleared */ 820 wmb(); 821 cur_p->cntrl = 0; 822 cur_p->status = 0; 823 } 824 825 if (!force) { 826 lp->tx_bd_ci += i; 827 if (lp->tx_bd_ci >= lp->tx_bd_num) 828 lp->tx_bd_ci %= lp->tx_bd_num; 829 } 830 831 return packets; 832} 833 834/** 835 * axienet_check_tx_bd_space - Checks if a BD/group of BDs are currently busy 836 * @lp: Pointer to the axienet_local structure 837 * @num_frag: The number of BDs to check for 838 * 839 * Return: 0, on success 840 * NETDEV_TX_BUSY, if any of the descriptors are not free 841 * 842 * This function is invoked before BDs are allocated and transmission starts. 843 * This function returns 0 if a BD or group of BDs can be allocated for 844 * transmission. If the BD or any of the BDs are not free the function 845 * returns a busy status. 846 */ 847static inline int axienet_check_tx_bd_space(struct axienet_local *lp, 848 int num_frag) 849{ 850 struct axidma_bd *cur_p; 851 852 /* Ensure we see all descriptor updates from device or TX polling */ 853 rmb(); 854 cur_p = &lp->tx_bd_v[(READ_ONCE(lp->tx_bd_tail) + num_frag) % 855 lp->tx_bd_num]; 856 if (cur_p->cntrl) 857 return NETDEV_TX_BUSY; 858 return 0; 859} 860 861/** 862 * axienet_dma_tx_cb - DMA engine callback for TX channel. 863 * @data: Pointer to the axienet_local structure. 864 * @result: error reporting through dmaengine_result. 865 * This function is called by dmaengine driver for TX channel to notify 866 * that the transmit is done. 867 */ 868static void axienet_dma_tx_cb(void *data, const struct dmaengine_result *result) 869{ 870 struct skbuf_dma_descriptor *skbuf_dma; 871 struct axienet_local *lp = data; 872 struct netdev_queue *txq; 873 int len; 874 875 skbuf_dma = axienet_get_tx_desc(lp, lp->tx_ring_tail++); 876 len = skbuf_dma->skb->len; 877 txq = skb_get_tx_queue(lp->ndev, skbuf_dma->skb); 878 u64_stats_update_begin(&lp->tx_stat_sync); 879 u64_stats_add(&lp->tx_bytes, len); 880 u64_stats_add(&lp->tx_packets, 1); 881 u64_stats_update_end(&lp->tx_stat_sync); 882 dma_unmap_sg(lp->dev, skbuf_dma->sgl, skbuf_dma->sg_len, DMA_TO_DEVICE); 883 dev_consume_skb_any(skbuf_dma->skb); 884 netif_txq_completed_wake(txq, 1, len, 885 CIRC_SPACE(lp->tx_ring_head, lp->tx_ring_tail, TX_BD_NUM_MAX), 886 2); 887} 888 889/** 890 * axienet_start_xmit_dmaengine - Starts the transmission. 891 * @skb: sk_buff pointer that contains data to be Txed. 892 * @ndev: Pointer to net_device structure. 893 * 894 * Return: NETDEV_TX_OK on success or any non space errors. 895 * NETDEV_TX_BUSY when free element in TX skb ring buffer 896 * is not available. 897 * 898 * This function is invoked to initiate transmission. The 899 * function sets the skbs, register dma callback API and submit 900 * the dma transaction. 901 * Additionally if checksum offloading is supported, 902 * it populates AXI Stream Control fields with appropriate values. 903 */ 904static netdev_tx_t 905axienet_start_xmit_dmaengine(struct sk_buff *skb, struct net_device *ndev) 906{ 907 struct dma_async_tx_descriptor *dma_tx_desc = NULL; 908 struct axienet_local *lp = netdev_priv(ndev); 909 u32 app_metadata[DMA_NUM_APP_WORDS] = {0}; 910 struct skbuf_dma_descriptor *skbuf_dma; 911 struct dma_device *dma_dev; 912 struct netdev_queue *txq; 913 u32 csum_start_off; 914 u32 csum_index_off; 915 int sg_len; 916 int ret; 917 918 dma_dev = lp->tx_chan->device; 919 sg_len = skb_shinfo(skb)->nr_frags + 1; 920 if (CIRC_SPACE(lp->tx_ring_head, lp->tx_ring_tail, TX_BD_NUM_MAX) <= 1) { 921 netif_stop_queue(ndev); 922 if (net_ratelimit()) 923 netdev_warn(ndev, "TX ring unexpectedly full\n"); 924 return NETDEV_TX_BUSY; 925 } 926 927 skbuf_dma = axienet_get_tx_desc(lp, lp->tx_ring_head); 928 if (!skbuf_dma) 929 goto xmit_error_drop_skb; 930 931 lp->tx_ring_head++; 932 sg_init_table(skbuf_dma->sgl, sg_len); 933 ret = skb_to_sgvec(skb, skbuf_dma->sgl, 0, skb->len); 934 if (ret < 0) 935 goto xmit_error_drop_skb; 936 937 ret = dma_map_sg(lp->dev, skbuf_dma->sgl, sg_len, DMA_TO_DEVICE); 938 if (!ret) 939 goto xmit_error_drop_skb; 940 941 /* Fill up app fields for checksum */ 942 if (skb->ip_summed == CHECKSUM_PARTIAL) { 943 if (lp->features & XAE_FEATURE_FULL_TX_CSUM) { 944 /* Tx Full Checksum Offload Enabled */ 945 app_metadata[0] |= 2; 946 } else if (lp->features & XAE_FEATURE_PARTIAL_TX_CSUM) { 947 csum_start_off = skb_transport_offset(skb); 948 csum_index_off = csum_start_off + skb->csum_offset; 949 /* Tx Partial Checksum Offload Enabled */ 950 app_metadata[0] |= 1; 951 app_metadata[1] = (csum_start_off << 16) | csum_index_off; 952 } 953 } else if (skb->ip_summed == CHECKSUM_UNNECESSARY) { 954 app_metadata[0] |= 2; /* Tx Full Checksum Offload Enabled */ 955 } 956 957 dma_tx_desc = dma_dev->device_prep_slave_sg(lp->tx_chan, skbuf_dma->sgl, 958 sg_len, DMA_MEM_TO_DEV, 959 DMA_PREP_INTERRUPT, (void *)app_metadata); 960 if (!dma_tx_desc) 961 goto xmit_error_unmap_sg; 962 963 skbuf_dma->skb = skb; 964 skbuf_dma->sg_len = sg_len; 965 dma_tx_desc->callback_param = lp; 966 dma_tx_desc->callback_result = axienet_dma_tx_cb; 967 txq = skb_get_tx_queue(lp->ndev, skb); 968 netdev_tx_sent_queue(txq, skb->len); 969 netif_txq_maybe_stop(txq, CIRC_SPACE(lp->tx_ring_head, lp->tx_ring_tail, TX_BD_NUM_MAX), 970 1, 2); 971 972 dmaengine_submit(dma_tx_desc); 973 dma_async_issue_pending(lp->tx_chan); 974 return NETDEV_TX_OK; 975 976xmit_error_unmap_sg: 977 dma_unmap_sg(lp->dev, skbuf_dma->sgl, sg_len, DMA_TO_DEVICE); 978xmit_error_drop_skb: 979 dev_kfree_skb_any(skb); 980 return NETDEV_TX_OK; 981} 982 983/** 984 * axienet_tx_poll - Invoked once a transmit is completed by the 985 * Axi DMA Tx channel. 986 * @napi: Pointer to NAPI structure. 987 * @budget: Max number of TX packets to process. 988 * 989 * Return: Number of TX packets processed. 990 * 991 * This function is invoked from the NAPI processing to notify the completion 992 * of transmit operation. It clears fields in the corresponding Tx BDs and 993 * unmaps the corresponding buffer so that CPU can regain ownership of the 994 * buffer. It finally invokes "netif_wake_queue" to restart transmission if 995 * required. 996 */ 997static int axienet_tx_poll(struct napi_struct *napi, int budget) 998{ 999 struct axienet_local *lp = container_of(napi, struct axienet_local, napi_tx); 1000 struct net_device *ndev = lp->ndev; 1001 u32 size = 0; 1002 int packets; 1003 1004 packets = axienet_free_tx_chain(lp, lp->tx_bd_ci, lp->tx_bd_num, false, 1005 &size, budget); 1006 1007 if (packets) { 1008 netdev_completed_queue(ndev, packets, size); 1009 u64_stats_update_begin(&lp->tx_stat_sync); 1010 u64_stats_add(&lp->tx_packets, packets); 1011 u64_stats_add(&lp->tx_bytes, size); 1012 u64_stats_update_end(&lp->tx_stat_sync); 1013 1014 /* Matches barrier in axienet_start_xmit */ 1015 smp_mb(); 1016 1017 if (!axienet_check_tx_bd_space(lp, MAX_SKB_FRAGS + 1)) 1018 netif_wake_queue(ndev); 1019 } 1020 1021 if (packets < budget && napi_complete_done(napi, packets)) { 1022 /* Re-enable TX completion interrupts. This should 1023 * cause an immediate interrupt if any TX packets are 1024 * already pending. 1025 */ 1026 spin_lock_irq(&lp->tx_cr_lock); 1027 axienet_dma_out32(lp, XAXIDMA_TX_CR_OFFSET, lp->tx_dma_cr); 1028 spin_unlock_irq(&lp->tx_cr_lock); 1029 } 1030 return packets; 1031} 1032 1033/** 1034 * axienet_start_xmit - Starts the transmission. 1035 * @skb: sk_buff pointer that contains data to be Txed. 1036 * @ndev: Pointer to net_device structure. 1037 * 1038 * Return: NETDEV_TX_OK, on success 1039 * NETDEV_TX_BUSY, if any of the descriptors are not free 1040 * 1041 * This function is invoked from upper layers to initiate transmission. The 1042 * function uses the next available free BDs and populates their fields to 1043 * start the transmission. Additionally if checksum offloading is supported, 1044 * it populates AXI Stream Control fields with appropriate values. 1045 */ 1046static netdev_tx_t 1047axienet_start_xmit(struct sk_buff *skb, struct net_device *ndev) 1048{ 1049 u32 ii; 1050 u32 num_frag; 1051 u32 csum_start_off; 1052 u32 csum_index_off; 1053 skb_frag_t *frag; 1054 dma_addr_t tail_p, phys; 1055 u32 orig_tail_ptr, new_tail_ptr; 1056 struct axienet_local *lp = netdev_priv(ndev); 1057 struct axidma_bd *cur_p; 1058 1059 orig_tail_ptr = lp->tx_bd_tail; 1060 new_tail_ptr = orig_tail_ptr; 1061 1062 num_frag = skb_shinfo(skb)->nr_frags; 1063 cur_p = &lp->tx_bd_v[orig_tail_ptr]; 1064 1065 if (axienet_check_tx_bd_space(lp, num_frag + 1)) { 1066 /* Should not happen as last start_xmit call should have 1067 * checked for sufficient space and queue should only be 1068 * woken when sufficient space is available. 1069 */ 1070 netif_stop_queue(ndev); 1071 if (net_ratelimit()) 1072 netdev_warn(ndev, "TX ring unexpectedly full\n"); 1073 return NETDEV_TX_BUSY; 1074 } 1075 1076 if (skb->ip_summed == CHECKSUM_PARTIAL) { 1077 if (lp->features & XAE_FEATURE_FULL_TX_CSUM) { 1078 /* Tx Full Checksum Offload Enabled */ 1079 cur_p->app0 |= 2; 1080 } else if (lp->features & XAE_FEATURE_PARTIAL_TX_CSUM) { 1081 csum_start_off = skb_transport_offset(skb); 1082 csum_index_off = csum_start_off + skb->csum_offset; 1083 /* Tx Partial Checksum Offload Enabled */ 1084 cur_p->app0 |= 1; 1085 cur_p->app1 = (csum_start_off << 16) | csum_index_off; 1086 } 1087 } else if (skb->ip_summed == CHECKSUM_UNNECESSARY) { 1088 cur_p->app0 |= 2; /* Tx Full Checksum Offload Enabled */ 1089 } 1090 1091 phys = dma_map_single(lp->dev, skb->data, 1092 skb_headlen(skb), DMA_TO_DEVICE); 1093 if (unlikely(dma_mapping_error(lp->dev, phys))) { 1094 if (net_ratelimit()) 1095 netdev_err(ndev, "TX DMA mapping error\n"); 1096 ndev->stats.tx_dropped++; 1097 dev_kfree_skb_any(skb); 1098 return NETDEV_TX_OK; 1099 } 1100 desc_set_phys_addr(lp, phys, cur_p); 1101 cur_p->cntrl = skb_headlen(skb) | XAXIDMA_BD_CTRL_TXSOF_MASK; 1102 1103 for (ii = 0; ii < num_frag; ii++) { 1104 if (++new_tail_ptr >= lp->tx_bd_num) 1105 new_tail_ptr = 0; 1106 cur_p = &lp->tx_bd_v[new_tail_ptr]; 1107 frag = &skb_shinfo(skb)->frags[ii]; 1108 phys = dma_map_single(lp->dev, 1109 skb_frag_address(frag), 1110 skb_frag_size(frag), 1111 DMA_TO_DEVICE); 1112 if (unlikely(dma_mapping_error(lp->dev, phys))) { 1113 if (net_ratelimit()) 1114 netdev_err(ndev, "TX DMA mapping error\n"); 1115 ndev->stats.tx_dropped++; 1116 axienet_free_tx_chain(lp, orig_tail_ptr, ii + 1, 1117 true, NULL, 0); 1118 dev_kfree_skb_any(skb); 1119 return NETDEV_TX_OK; 1120 } 1121 desc_set_phys_addr(lp, phys, cur_p); 1122 cur_p->cntrl = skb_frag_size(frag); 1123 } 1124 1125 cur_p->cntrl |= XAXIDMA_BD_CTRL_TXEOF_MASK; 1126 cur_p->skb = skb; 1127 1128 tail_p = lp->tx_bd_p + sizeof(*lp->tx_bd_v) * new_tail_ptr; 1129 if (++new_tail_ptr >= lp->tx_bd_num) 1130 new_tail_ptr = 0; 1131 WRITE_ONCE(lp->tx_bd_tail, new_tail_ptr); 1132 netdev_sent_queue(ndev, skb->len); 1133 1134 /* Start the transfer */ 1135 axienet_dma_out_addr(lp, XAXIDMA_TX_TDESC_OFFSET, tail_p); 1136 1137 /* Stop queue if next transmit may not have space */ 1138 if (axienet_check_tx_bd_space(lp, MAX_SKB_FRAGS + 1)) { 1139 netif_stop_queue(ndev); 1140 1141 /* Matches barrier in axienet_tx_poll */ 1142 smp_mb(); 1143 1144 /* Space might have just been freed - check again */ 1145 if (!axienet_check_tx_bd_space(lp, MAX_SKB_FRAGS + 1)) 1146 netif_wake_queue(ndev); 1147 } 1148 1149 return NETDEV_TX_OK; 1150} 1151 1152/** 1153 * axienet_dma_rx_cb - DMA engine callback for RX channel. 1154 * @data: Pointer to the skbuf_dma_descriptor structure. 1155 * @result: error reporting through dmaengine_result. 1156 * This function is called by dmaengine driver for RX channel to notify 1157 * that the packet is received. 1158 */ 1159static void axienet_dma_rx_cb(void *data, const struct dmaengine_result *result) 1160{ 1161 struct skbuf_dma_descriptor *skbuf_dma; 1162 size_t meta_len, meta_max_len, rx_len; 1163 struct axienet_local *lp = data; 1164 struct sk_buff *skb; 1165 u32 *app_metadata; 1166 int i; 1167 1168 skbuf_dma = axienet_get_rx_desc(lp, lp->rx_ring_tail++); 1169 skb = skbuf_dma->skb; 1170 app_metadata = dmaengine_desc_get_metadata_ptr(skbuf_dma->desc, &meta_len, 1171 &meta_max_len); 1172 dma_unmap_single(lp->dev, skbuf_dma->dma_address, lp->max_frm_size, 1173 DMA_FROM_DEVICE); 1174 1175 if (IS_ERR(app_metadata)) { 1176 if (net_ratelimit()) 1177 netdev_err(lp->ndev, "Failed to get RX metadata pointer\n"); 1178 dev_kfree_skb_any(skb); 1179 lp->ndev->stats.rx_dropped++; 1180 goto rx_submit; 1181 } 1182 1183 /* TODO: Derive app word index programmatically */ 1184 rx_len = (app_metadata[LEN_APP] & 0xFFFF); 1185 skb_put(skb, rx_len); 1186 skb->protocol = eth_type_trans(skb, lp->ndev); 1187 skb->ip_summed = CHECKSUM_NONE; 1188 1189 __netif_rx(skb); 1190 u64_stats_update_begin(&lp->rx_stat_sync); 1191 u64_stats_add(&lp->rx_packets, 1); 1192 u64_stats_add(&lp->rx_bytes, rx_len); 1193 u64_stats_update_end(&lp->rx_stat_sync); 1194 1195rx_submit: 1196 for (i = 0; i < CIRC_SPACE(lp->rx_ring_head, lp->rx_ring_tail, 1197 RX_BUF_NUM_DEFAULT); i++) 1198 axienet_rx_submit_desc(lp->ndev); 1199 dma_async_issue_pending(lp->rx_chan); 1200} 1201 1202/** 1203 * axienet_rx_poll - Triggered by RX ISR to complete the BD processing. 1204 * @napi: Pointer to NAPI structure. 1205 * @budget: Max number of RX packets to process. 1206 * 1207 * Return: Number of RX packets processed. 1208 */ 1209static int axienet_rx_poll(struct napi_struct *napi, int budget) 1210{ 1211 u32 length; 1212 u32 csumstatus; 1213 u32 size = 0; 1214 int packets = 0; 1215 dma_addr_t tail_p = 0; 1216 struct axidma_bd *cur_p; 1217 struct sk_buff *skb, *new_skb; 1218 struct axienet_local *lp = container_of(napi, struct axienet_local, napi_rx); 1219 1220 cur_p = &lp->rx_bd_v[lp->rx_bd_ci]; 1221 1222 while (packets < budget && (cur_p->status & XAXIDMA_BD_STS_COMPLETE_MASK)) { 1223 dma_addr_t phys; 1224 1225 /* Ensure we see complete descriptor update */ 1226 dma_rmb(); 1227 1228 skb = cur_p->skb; 1229 cur_p->skb = NULL; 1230 1231 /* skb could be NULL if a previous pass already received the 1232 * packet for this slot in the ring, but failed to refill it 1233 * with a newly allocated buffer. In this case, don't try to 1234 * receive it again. 1235 */ 1236 if (likely(skb)) { 1237 length = cur_p->app4 & 0x0000FFFF; 1238 1239 phys = desc_get_phys_addr(lp, cur_p); 1240 dma_unmap_single(lp->dev, phys, lp->max_frm_size, 1241 DMA_FROM_DEVICE); 1242 1243 skb_put(skb, length); 1244 skb->protocol = eth_type_trans(skb, lp->ndev); 1245 /*skb_checksum_none_assert(skb);*/ 1246 skb->ip_summed = CHECKSUM_NONE; 1247 1248 /* if we're doing Rx csum offload, set it up */ 1249 if (lp->features & XAE_FEATURE_FULL_RX_CSUM) { 1250 csumstatus = (cur_p->app2 & 1251 XAE_FULL_CSUM_STATUS_MASK) >> 3; 1252 if (csumstatus == XAE_IP_TCP_CSUM_VALIDATED || 1253 csumstatus == XAE_IP_UDP_CSUM_VALIDATED) { 1254 skb->ip_summed = CHECKSUM_UNNECESSARY; 1255 } 1256 } else if (lp->features & XAE_FEATURE_PARTIAL_RX_CSUM) { 1257 skb->csum = be32_to_cpu(cur_p->app3 & 0xFFFF); 1258 skb->ip_summed = CHECKSUM_COMPLETE; 1259 } 1260 1261 napi_gro_receive(napi, skb); 1262 1263 size += length; 1264 packets++; 1265 } 1266 1267 new_skb = napi_alloc_skb(napi, lp->max_frm_size); 1268 if (!new_skb) 1269 break; 1270 1271 phys = dma_map_single(lp->dev, new_skb->data, 1272 lp->max_frm_size, 1273 DMA_FROM_DEVICE); 1274 if (unlikely(dma_mapping_error(lp->dev, phys))) { 1275 if (net_ratelimit()) 1276 netdev_err(lp->ndev, "RX DMA mapping error\n"); 1277 dev_kfree_skb(new_skb); 1278 break; 1279 } 1280 desc_set_phys_addr(lp, phys, cur_p); 1281 1282 cur_p->cntrl = lp->max_frm_size; 1283 cur_p->status = 0; 1284 cur_p->skb = new_skb; 1285 1286 /* Only update tail_p to mark this slot as usable after it has 1287 * been successfully refilled. 1288 */ 1289 tail_p = lp->rx_bd_p + sizeof(*lp->rx_bd_v) * lp->rx_bd_ci; 1290 1291 if (++lp->rx_bd_ci >= lp->rx_bd_num) 1292 lp->rx_bd_ci = 0; 1293 cur_p = &lp->rx_bd_v[lp->rx_bd_ci]; 1294 } 1295 1296 u64_stats_update_begin(&lp->rx_stat_sync); 1297 u64_stats_add(&lp->rx_packets, packets); 1298 u64_stats_add(&lp->rx_bytes, size); 1299 u64_stats_update_end(&lp->rx_stat_sync); 1300 1301 if (tail_p) 1302 axienet_dma_out_addr(lp, XAXIDMA_RX_TDESC_OFFSET, tail_p); 1303 1304 if (packets < budget && napi_complete_done(napi, packets)) { 1305 if (READ_ONCE(lp->rx_dim_enabled)) { 1306 struct dim_sample sample = { 1307 .time = ktime_get(), 1308 /* Safe because we are the only writer */ 1309 .pkt_ctr = u64_stats_read(&lp->rx_packets), 1310 .byte_ctr = u64_stats_read(&lp->rx_bytes), 1311 .event_ctr = READ_ONCE(lp->rx_irqs), 1312 }; 1313 1314 net_dim(&lp->rx_dim, &sample); 1315 } 1316 1317 /* Re-enable RX completion interrupts. This should 1318 * cause an immediate interrupt if any RX packets are 1319 * already pending. 1320 */ 1321 spin_lock_irq(&lp->rx_cr_lock); 1322 axienet_dma_out32(lp, XAXIDMA_RX_CR_OFFSET, lp->rx_dma_cr); 1323 spin_unlock_irq(&lp->rx_cr_lock); 1324 } 1325 return packets; 1326} 1327 1328/** 1329 * axienet_tx_irq - Tx Done Isr. 1330 * @irq: irq number 1331 * @_ndev: net_device pointer 1332 * 1333 * Return: IRQ_HANDLED if device generated a TX interrupt, IRQ_NONE otherwise. 1334 * 1335 * This is the Axi DMA Tx done Isr. It invokes NAPI polling to complete the 1336 * TX BD processing. 1337 */ 1338static irqreturn_t axienet_tx_irq(int irq, void *_ndev) 1339{ 1340 unsigned int status; 1341 struct net_device *ndev = _ndev; 1342 struct axienet_local *lp = netdev_priv(ndev); 1343 1344 status = axienet_dma_in32(lp, XAXIDMA_TX_SR_OFFSET); 1345 1346 if (!(status & XAXIDMA_IRQ_ALL_MASK)) 1347 return IRQ_NONE; 1348 1349 axienet_dma_out32(lp, XAXIDMA_TX_SR_OFFSET, status); 1350 1351 if (unlikely(status & XAXIDMA_IRQ_ERROR_MASK)) { 1352 netdev_err(ndev, "DMA Tx error 0x%x\n", status); 1353 netdev_err(ndev, "Current BD is at: 0x%x%08x\n", 1354 (lp->tx_bd_v[lp->tx_bd_ci]).phys_msb, 1355 (lp->tx_bd_v[lp->tx_bd_ci]).phys); 1356 schedule_work(&lp->dma_err_task); 1357 } else { 1358 /* Disable further TX completion interrupts and schedule 1359 * NAPI to handle the completions. 1360 */ 1361 if (napi_schedule_prep(&lp->napi_tx)) { 1362 u32 cr; 1363 1364 spin_lock(&lp->tx_cr_lock); 1365 cr = lp->tx_dma_cr; 1366 cr &= ~(XAXIDMA_IRQ_IOC_MASK | XAXIDMA_IRQ_DELAY_MASK); 1367 axienet_dma_out32(lp, XAXIDMA_TX_CR_OFFSET, cr); 1368 spin_unlock(&lp->tx_cr_lock); 1369 __napi_schedule(&lp->napi_tx); 1370 } 1371 } 1372 1373 return IRQ_HANDLED; 1374} 1375 1376/** 1377 * axienet_rx_irq - Rx Isr. 1378 * @irq: irq number 1379 * @_ndev: net_device pointer 1380 * 1381 * Return: IRQ_HANDLED if device generated a RX interrupt, IRQ_NONE otherwise. 1382 * 1383 * This is the Axi DMA Rx Isr. It invokes NAPI polling to complete the RX BD 1384 * processing. 1385 */ 1386static irqreturn_t axienet_rx_irq(int irq, void *_ndev) 1387{ 1388 unsigned int status; 1389 struct net_device *ndev = _ndev; 1390 struct axienet_local *lp = netdev_priv(ndev); 1391 1392 status = axienet_dma_in32(lp, XAXIDMA_RX_SR_OFFSET); 1393 1394 if (!(status & XAXIDMA_IRQ_ALL_MASK)) 1395 return IRQ_NONE; 1396 1397 axienet_dma_out32(lp, XAXIDMA_RX_SR_OFFSET, status); 1398 1399 if (unlikely(status & XAXIDMA_IRQ_ERROR_MASK)) { 1400 netdev_err(ndev, "DMA Rx error 0x%x\n", status); 1401 netdev_err(ndev, "Current BD is at: 0x%x%08x\n", 1402 (lp->rx_bd_v[lp->rx_bd_ci]).phys_msb, 1403 (lp->rx_bd_v[lp->rx_bd_ci]).phys); 1404 schedule_work(&lp->dma_err_task); 1405 } else { 1406 /* Disable further RX completion interrupts and schedule 1407 * NAPI receive. 1408 */ 1409 WRITE_ONCE(lp->rx_irqs, READ_ONCE(lp->rx_irqs) + 1); 1410 if (napi_schedule_prep(&lp->napi_rx)) { 1411 u32 cr; 1412 1413 spin_lock(&lp->rx_cr_lock); 1414 cr = lp->rx_dma_cr; 1415 cr &= ~(XAXIDMA_IRQ_IOC_MASK | XAXIDMA_IRQ_DELAY_MASK); 1416 axienet_dma_out32(lp, XAXIDMA_RX_CR_OFFSET, cr); 1417 spin_unlock(&lp->rx_cr_lock); 1418 1419 __napi_schedule(&lp->napi_rx); 1420 } 1421 } 1422 1423 return IRQ_HANDLED; 1424} 1425 1426/** 1427 * axienet_eth_irq - Ethernet core Isr. 1428 * @irq: irq number 1429 * @_ndev: net_device pointer 1430 * 1431 * Return: IRQ_HANDLED if device generated a core interrupt, IRQ_NONE otherwise. 1432 * 1433 * Handle miscellaneous conditions indicated by Ethernet core IRQ. 1434 */ 1435static irqreturn_t axienet_eth_irq(int irq, void *_ndev) 1436{ 1437 struct net_device *ndev = _ndev; 1438 struct axienet_local *lp = netdev_priv(ndev); 1439 unsigned int pending; 1440 1441 pending = axienet_ior(lp, XAE_IP_OFFSET); 1442 if (!pending) 1443 return IRQ_NONE; 1444 1445 if (pending & XAE_INT_RXFIFOOVR_MASK) 1446 ndev->stats.rx_missed_errors++; 1447 1448 if (pending & XAE_INT_RXRJECT_MASK) 1449 ndev->stats.rx_dropped++; 1450 1451 axienet_iow(lp, XAE_IS_OFFSET, pending); 1452 return IRQ_HANDLED; 1453} 1454 1455static void axienet_dma_err_handler(struct work_struct *work); 1456 1457/** 1458 * axienet_rx_submit_desc - Submit the rx descriptors to dmaengine. 1459 * allocate skbuff, map the scatterlist and obtain a descriptor 1460 * and then add the callback information and submit descriptor. 1461 * 1462 * @ndev: net_device pointer 1463 * 1464 */ 1465static void axienet_rx_submit_desc(struct net_device *ndev) 1466{ 1467 struct dma_async_tx_descriptor *dma_rx_desc = NULL; 1468 struct axienet_local *lp = netdev_priv(ndev); 1469 struct skbuf_dma_descriptor *skbuf_dma; 1470 struct sk_buff *skb; 1471 dma_addr_t addr; 1472 1473 skbuf_dma = axienet_get_rx_desc(lp, lp->rx_ring_head); 1474 if (!skbuf_dma) 1475 return; 1476 1477 skb = netdev_alloc_skb(ndev, lp->max_frm_size); 1478 if (!skb) 1479 return; 1480 1481 sg_init_table(skbuf_dma->sgl, 1); 1482 addr = dma_map_single(lp->dev, skb->data, lp->max_frm_size, DMA_FROM_DEVICE); 1483 if (unlikely(dma_mapping_error(lp->dev, addr))) { 1484 if (net_ratelimit()) 1485 netdev_err(ndev, "DMA mapping error\n"); 1486 goto rx_submit_err_free_skb; 1487 } 1488 sg_dma_address(skbuf_dma->sgl) = addr; 1489 sg_dma_len(skbuf_dma->sgl) = lp->max_frm_size; 1490 dma_rx_desc = dmaengine_prep_slave_sg(lp->rx_chan, skbuf_dma->sgl, 1491 1, DMA_DEV_TO_MEM, 1492 DMA_PREP_INTERRUPT); 1493 if (!dma_rx_desc) 1494 goto rx_submit_err_unmap_skb; 1495 1496 skbuf_dma->skb = skb; 1497 skbuf_dma->dma_address = sg_dma_address(skbuf_dma->sgl); 1498 skbuf_dma->desc = dma_rx_desc; 1499 dma_rx_desc->callback_param = lp; 1500 dma_rx_desc->callback_result = axienet_dma_rx_cb; 1501 lp->rx_ring_head++; 1502 dmaengine_submit(dma_rx_desc); 1503 1504 return; 1505 1506rx_submit_err_unmap_skb: 1507 dma_unmap_single(lp->dev, addr, lp->max_frm_size, DMA_FROM_DEVICE); 1508rx_submit_err_free_skb: 1509 dev_kfree_skb(skb); 1510} 1511 1512/** 1513 * axienet_init_dmaengine - init the dmaengine code. 1514 * @ndev: Pointer to net_device structure 1515 * 1516 * Return: 0, on success. 1517 * non-zero error value on failure 1518 * 1519 * This is the dmaengine initialization code. 1520 */ 1521static int axienet_init_dmaengine(struct net_device *ndev) 1522{ 1523 struct axienet_local *lp = netdev_priv(ndev); 1524 struct skbuf_dma_descriptor *skbuf_dma; 1525 int i, ret; 1526 1527 lp->tx_chan = dma_request_chan(lp->dev, "tx_chan0"); 1528 if (IS_ERR(lp->tx_chan)) { 1529 dev_err(lp->dev, "No Ethernet DMA (TX) channel found\n"); 1530 return PTR_ERR(lp->tx_chan); 1531 } 1532 1533 lp->rx_chan = dma_request_chan(lp->dev, "rx_chan0"); 1534 if (IS_ERR(lp->rx_chan)) { 1535 ret = PTR_ERR(lp->rx_chan); 1536 dev_err(lp->dev, "No Ethernet DMA (RX) channel found\n"); 1537 goto err_dma_release_tx; 1538 } 1539 1540 lp->tx_ring_tail = 0; 1541 lp->tx_ring_head = 0; 1542 lp->rx_ring_tail = 0; 1543 lp->rx_ring_head = 0; 1544 lp->tx_skb_ring = kcalloc(TX_BD_NUM_MAX, sizeof(*lp->tx_skb_ring), 1545 GFP_KERNEL); 1546 if (!lp->tx_skb_ring) { 1547 ret = -ENOMEM; 1548 goto err_dma_release_rx; 1549 } 1550 for (i = 0; i < TX_BD_NUM_MAX; i++) { 1551 skbuf_dma = kzalloc(sizeof(*skbuf_dma), GFP_KERNEL); 1552 if (!skbuf_dma) { 1553 ret = -ENOMEM; 1554 goto err_free_tx_skb_ring; 1555 } 1556 lp->tx_skb_ring[i] = skbuf_dma; 1557 } 1558 1559 lp->rx_skb_ring = kcalloc(RX_BUF_NUM_DEFAULT, sizeof(*lp->rx_skb_ring), 1560 GFP_KERNEL); 1561 if (!lp->rx_skb_ring) { 1562 ret = -ENOMEM; 1563 goto err_free_tx_skb_ring; 1564 } 1565 for (i = 0; i < RX_BUF_NUM_DEFAULT; i++) { 1566 skbuf_dma = kzalloc(sizeof(*skbuf_dma), GFP_KERNEL); 1567 if (!skbuf_dma) { 1568 ret = -ENOMEM; 1569 goto err_free_rx_skb_ring; 1570 } 1571 lp->rx_skb_ring[i] = skbuf_dma; 1572 } 1573 /* TODO: Instead of BD_NUM_DEFAULT use runtime support */ 1574 for (i = 0; i < RX_BUF_NUM_DEFAULT; i++) 1575 axienet_rx_submit_desc(ndev); 1576 dma_async_issue_pending(lp->rx_chan); 1577 1578 return 0; 1579 1580err_free_rx_skb_ring: 1581 for (i = 0; i < RX_BUF_NUM_DEFAULT; i++) 1582 kfree(lp->rx_skb_ring[i]); 1583 kfree(lp->rx_skb_ring); 1584err_free_tx_skb_ring: 1585 for (i = 0; i < TX_BD_NUM_MAX; i++) 1586 kfree(lp->tx_skb_ring[i]); 1587 kfree(lp->tx_skb_ring); 1588err_dma_release_rx: 1589 dma_release_channel(lp->rx_chan); 1590err_dma_release_tx: 1591 dma_release_channel(lp->tx_chan); 1592 return ret; 1593} 1594 1595/** 1596 * axienet_init_legacy_dma - init the dma legacy code. 1597 * @ndev: Pointer to net_device structure 1598 * 1599 * Return: 0, on success. 1600 * non-zero error value on failure 1601 * 1602 * This is the dma initialization code. It also allocates interrupt 1603 * service routines, enables the interrupt lines and ISR handling. 1604 * 1605 */ 1606static int axienet_init_legacy_dma(struct net_device *ndev) 1607{ 1608 int ret; 1609 struct axienet_local *lp = netdev_priv(ndev); 1610 1611 /* Enable worker thread for Axi DMA error handling */ 1612 lp->stopping = false; 1613 INIT_WORK(&lp->dma_err_task, axienet_dma_err_handler); 1614 1615 napi_enable(&lp->napi_rx); 1616 napi_enable(&lp->napi_tx); 1617 1618 /* Enable interrupts for Axi DMA Tx */ 1619 ret = request_irq(lp->tx_irq, axienet_tx_irq, IRQF_SHARED, 1620 ndev->name, ndev); 1621 if (ret) 1622 goto err_tx_irq; 1623 /* Enable interrupts for Axi DMA Rx */ 1624 ret = request_irq(lp->rx_irq, axienet_rx_irq, IRQF_SHARED, 1625 ndev->name, ndev); 1626 if (ret) 1627 goto err_rx_irq; 1628 /* Enable interrupts for Axi Ethernet core (if defined) */ 1629 if (lp->eth_irq > 0) { 1630 ret = request_irq(lp->eth_irq, axienet_eth_irq, IRQF_SHARED, 1631 ndev->name, ndev); 1632 if (ret) 1633 goto err_eth_irq; 1634 } 1635 1636 return 0; 1637 1638err_eth_irq: 1639 free_irq(lp->rx_irq, ndev); 1640err_rx_irq: 1641 free_irq(lp->tx_irq, ndev); 1642err_tx_irq: 1643 napi_disable(&lp->napi_tx); 1644 napi_disable(&lp->napi_rx); 1645 cancel_work_sync(&lp->dma_err_task); 1646 dev_err(lp->dev, "request_irq() failed\n"); 1647 return ret; 1648} 1649 1650/** 1651 * axienet_open - Driver open routine. 1652 * @ndev: Pointer to net_device structure 1653 * 1654 * Return: 0, on success. 1655 * non-zero error value on failure 1656 * 1657 * This is the driver open routine. It calls phylink_start to start the 1658 * PHY device. 1659 * It also allocates interrupt service routines, enables the interrupt lines 1660 * and ISR handling. Axi Ethernet core is reset through Axi DMA core. Buffer 1661 * descriptors are initialized. 1662 */ 1663static int axienet_open(struct net_device *ndev) 1664{ 1665 int ret; 1666 struct axienet_local *lp = netdev_priv(ndev); 1667 1668 /* When we do an Axi Ethernet reset, it resets the complete core 1669 * including the MDIO. MDIO must be disabled before resetting. 1670 * Hold MDIO bus lock to avoid MDIO accesses during the reset. 1671 */ 1672 axienet_lock_mii(lp); 1673 ret = axienet_device_reset(ndev); 1674 axienet_unlock_mii(lp); 1675 1676 ret = phylink_of_phy_connect(lp->phylink, lp->dev->of_node, 0); 1677 if (ret) { 1678 dev_err(lp->dev, "phylink_of_phy_connect() failed: %d\n", ret); 1679 return ret; 1680 } 1681 1682 phylink_start(lp->phylink); 1683 1684 /* Start the statistics refresh work */ 1685 schedule_delayed_work(&lp->stats_work, 0); 1686 1687 if (lp->use_dmaengine) { 1688 /* Enable interrupts for Axi Ethernet core (if defined) */ 1689 if (lp->eth_irq > 0) { 1690 ret = request_irq(lp->eth_irq, axienet_eth_irq, IRQF_SHARED, 1691 ndev->name, ndev); 1692 if (ret) 1693 goto err_phy; 1694 } 1695 1696 ret = axienet_init_dmaengine(ndev); 1697 if (ret < 0) 1698 goto err_free_eth_irq; 1699 } else { 1700 ret = axienet_init_legacy_dma(ndev); 1701 if (ret) 1702 goto err_phy; 1703 } 1704 1705 return 0; 1706 1707err_free_eth_irq: 1708 if (lp->eth_irq > 0) 1709 free_irq(lp->eth_irq, ndev); 1710err_phy: 1711 cancel_work_sync(&lp->rx_dim.work); 1712 cancel_delayed_work_sync(&lp->stats_work); 1713 phylink_stop(lp->phylink); 1714 phylink_disconnect_phy(lp->phylink); 1715 return ret; 1716} 1717 1718/** 1719 * axienet_stop - Driver stop routine. 1720 * @ndev: Pointer to net_device structure 1721 * 1722 * Return: 0, on success. 1723 * 1724 * This is the driver stop routine. It calls phylink_disconnect to stop the PHY 1725 * device. It also removes the interrupt handlers and disables the interrupts. 1726 * The Axi DMA Tx/Rx BDs are released. 1727 */ 1728static int axienet_stop(struct net_device *ndev) 1729{ 1730 struct axienet_local *lp = netdev_priv(ndev); 1731 int i; 1732 1733 if (!lp->use_dmaengine) { 1734 WRITE_ONCE(lp->stopping, true); 1735 flush_work(&lp->dma_err_task); 1736 1737 napi_disable(&lp->napi_tx); 1738 napi_disable(&lp->napi_rx); 1739 } 1740 1741 cancel_work_sync(&lp->rx_dim.work); 1742 cancel_delayed_work_sync(&lp->stats_work); 1743 1744 phylink_stop(lp->phylink); 1745 phylink_disconnect_phy(lp->phylink); 1746 1747 axienet_setoptions(ndev, lp->options & 1748 ~(XAE_OPTION_TXEN | XAE_OPTION_RXEN)); 1749 1750 if (!lp->use_dmaengine) { 1751 axienet_dma_stop(lp); 1752 cancel_work_sync(&lp->dma_err_task); 1753 free_irq(lp->tx_irq, ndev); 1754 free_irq(lp->rx_irq, ndev); 1755 axienet_dma_bd_release(ndev); 1756 } else { 1757 dmaengine_terminate_sync(lp->tx_chan); 1758 dmaengine_synchronize(lp->tx_chan); 1759 dmaengine_terminate_sync(lp->rx_chan); 1760 dmaengine_synchronize(lp->rx_chan); 1761 1762 for (i = 0; i < TX_BD_NUM_MAX; i++) 1763 kfree(lp->tx_skb_ring[i]); 1764 kfree(lp->tx_skb_ring); 1765 for (i = 0; i < RX_BUF_NUM_DEFAULT; i++) 1766 kfree(lp->rx_skb_ring[i]); 1767 kfree(lp->rx_skb_ring); 1768 1769 dma_release_channel(lp->rx_chan); 1770 dma_release_channel(lp->tx_chan); 1771 } 1772 1773 netdev_reset_queue(ndev); 1774 axienet_iow(lp, XAE_IE_OFFSET, 0); 1775 1776 if (lp->eth_irq > 0) 1777 free_irq(lp->eth_irq, ndev); 1778 return 0; 1779} 1780 1781/** 1782 * axienet_change_mtu - Driver change mtu routine. 1783 * @ndev: Pointer to net_device structure 1784 * @new_mtu: New mtu value to be applied 1785 * 1786 * Return: Always returns 0 (success). 1787 * 1788 * This is the change mtu driver routine. It checks if the Axi Ethernet 1789 * hardware supports jumbo frames before changing the mtu. This can be 1790 * called only when the device is not up. 1791 */ 1792static int axienet_change_mtu(struct net_device *ndev, int new_mtu) 1793{ 1794 struct axienet_local *lp = netdev_priv(ndev); 1795 1796 if (netif_running(ndev)) 1797 return -EBUSY; 1798 1799 if ((new_mtu + VLAN_ETH_HLEN + 1800 XAE_TRL_SIZE) > lp->rxmem) 1801 return -EINVAL; 1802 1803 WRITE_ONCE(ndev->mtu, new_mtu); 1804 1805 return 0; 1806} 1807 1808#ifdef CONFIG_NET_POLL_CONTROLLER 1809/** 1810 * axienet_poll_controller - Axi Ethernet poll mechanism. 1811 * @ndev: Pointer to net_device structure 1812 * 1813 * This implements Rx/Tx ISR poll mechanisms. The interrupts are disabled prior 1814 * to polling the ISRs and are enabled back after the polling is done. 1815 */ 1816static void axienet_poll_controller(struct net_device *ndev) 1817{ 1818 struct axienet_local *lp = netdev_priv(ndev); 1819 1820 disable_irq(lp->tx_irq); 1821 disable_irq(lp->rx_irq); 1822 axienet_rx_irq(lp->tx_irq, ndev); 1823 axienet_tx_irq(lp->rx_irq, ndev); 1824 enable_irq(lp->tx_irq); 1825 enable_irq(lp->rx_irq); 1826} 1827#endif 1828 1829static int axienet_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) 1830{ 1831 struct axienet_local *lp = netdev_priv(dev); 1832 1833 if (!netif_running(dev)) 1834 return -EINVAL; 1835 1836 return phylink_mii_ioctl(lp->phylink, rq, cmd); 1837} 1838 1839static void 1840axienet_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats) 1841{ 1842 struct axienet_local *lp = netdev_priv(dev); 1843 unsigned int start; 1844 1845 netdev_stats_to_stats64(stats, &dev->stats); 1846 1847 do { 1848 start = u64_stats_fetch_begin(&lp->rx_stat_sync); 1849 stats->rx_packets = u64_stats_read(&lp->rx_packets); 1850 stats->rx_bytes = u64_stats_read(&lp->rx_bytes); 1851 } while (u64_stats_fetch_retry(&lp->rx_stat_sync, start)); 1852 1853 do { 1854 start = u64_stats_fetch_begin(&lp->tx_stat_sync); 1855 stats->tx_packets = u64_stats_read(&lp->tx_packets); 1856 stats->tx_bytes = u64_stats_read(&lp->tx_bytes); 1857 } while (u64_stats_fetch_retry(&lp->tx_stat_sync, start)); 1858 1859 if (!(lp->features & XAE_FEATURE_STATS)) 1860 return; 1861 1862 do { 1863 start = read_seqcount_begin(&lp->hw_stats_seqcount); 1864 stats->rx_length_errors = 1865 axienet_stat(lp, STAT_RX_LENGTH_ERRORS); 1866 stats->rx_crc_errors = axienet_stat(lp, STAT_RX_FCS_ERRORS); 1867 stats->rx_frame_errors = 1868 axienet_stat(lp, STAT_RX_ALIGNMENT_ERRORS); 1869 stats->rx_errors = axienet_stat(lp, STAT_UNDERSIZE_FRAMES) + 1870 axienet_stat(lp, STAT_FRAGMENT_FRAMES) + 1871 stats->rx_length_errors + 1872 stats->rx_crc_errors + 1873 stats->rx_frame_errors; 1874 stats->multicast = axienet_stat(lp, STAT_RX_MULTICAST_FRAMES); 1875 1876 stats->tx_aborted_errors = 1877 axienet_stat(lp, STAT_TX_EXCESS_COLLISIONS); 1878 stats->tx_fifo_errors = 1879 axienet_stat(lp, STAT_TX_UNDERRUN_ERRORS); 1880 stats->tx_window_errors = 1881 axienet_stat(lp, STAT_TX_LATE_COLLISIONS); 1882 stats->tx_errors = axienet_stat(lp, STAT_TX_EXCESS_DEFERRAL) + 1883 stats->tx_aborted_errors + 1884 stats->tx_fifo_errors + 1885 stats->tx_window_errors; 1886 } while (read_seqcount_retry(&lp->hw_stats_seqcount, start)); 1887} 1888 1889static const struct net_device_ops axienet_netdev_ops = { 1890 .ndo_open = axienet_open, 1891 .ndo_stop = axienet_stop, 1892 .ndo_start_xmit = axienet_start_xmit, 1893 .ndo_get_stats64 = axienet_get_stats64, 1894 .ndo_change_mtu = axienet_change_mtu, 1895 .ndo_set_mac_address = netdev_set_mac_address, 1896 .ndo_validate_addr = eth_validate_addr, 1897 .ndo_eth_ioctl = axienet_ioctl, 1898 .ndo_set_rx_mode = axienet_set_multicast_list, 1899#ifdef CONFIG_NET_POLL_CONTROLLER 1900 .ndo_poll_controller = axienet_poll_controller, 1901#endif 1902}; 1903 1904static const struct net_device_ops axienet_netdev_dmaengine_ops = { 1905 .ndo_open = axienet_open, 1906 .ndo_stop = axienet_stop, 1907 .ndo_start_xmit = axienet_start_xmit_dmaengine, 1908 .ndo_get_stats64 = axienet_get_stats64, 1909 .ndo_change_mtu = axienet_change_mtu, 1910 .ndo_set_mac_address = netdev_set_mac_address, 1911 .ndo_validate_addr = eth_validate_addr, 1912 .ndo_eth_ioctl = axienet_ioctl, 1913 .ndo_set_rx_mode = axienet_set_multicast_list, 1914}; 1915 1916/** 1917 * axienet_ethtools_get_drvinfo - Get various Axi Ethernet driver information. 1918 * @ndev: Pointer to net_device structure 1919 * @ed: Pointer to ethtool_drvinfo structure 1920 * 1921 * This implements ethtool command for getting the driver information. 1922 * Issue "ethtool -i ethX" under linux prompt to execute this function. 1923 */ 1924static void axienet_ethtools_get_drvinfo(struct net_device *ndev, 1925 struct ethtool_drvinfo *ed) 1926{ 1927 strscpy(ed->driver, DRIVER_NAME, sizeof(ed->driver)); 1928 strscpy(ed->version, DRIVER_VERSION, sizeof(ed->version)); 1929} 1930 1931/** 1932 * axienet_ethtools_get_regs_len - Get the total regs length present in the 1933 * AxiEthernet core. 1934 * @ndev: Pointer to net_device structure 1935 * 1936 * This implements ethtool command for getting the total register length 1937 * information. 1938 * 1939 * Return: the total regs length 1940 */ 1941static int axienet_ethtools_get_regs_len(struct net_device *ndev) 1942{ 1943 return sizeof(u32) * AXIENET_REGS_N; 1944} 1945 1946/** 1947 * axienet_ethtools_get_regs - Dump the contents of all registers present 1948 * in AxiEthernet core. 1949 * @ndev: Pointer to net_device structure 1950 * @regs: Pointer to ethtool_regs structure 1951 * @ret: Void pointer used to return the contents of the registers. 1952 * 1953 * This implements ethtool command for getting the Axi Ethernet register dump. 1954 * Issue "ethtool -d ethX" to execute this function. 1955 */ 1956static void axienet_ethtools_get_regs(struct net_device *ndev, 1957 struct ethtool_regs *regs, void *ret) 1958{ 1959 u32 *data = (u32 *)ret; 1960 size_t len = sizeof(u32) * AXIENET_REGS_N; 1961 struct axienet_local *lp = netdev_priv(ndev); 1962 1963 regs->version = 0; 1964 regs->len = len; 1965 1966 memset(data, 0, len); 1967 data[0] = axienet_ior(lp, XAE_RAF_OFFSET); 1968 data[1] = axienet_ior(lp, XAE_TPF_OFFSET); 1969 data[2] = axienet_ior(lp, XAE_IFGP_OFFSET); 1970 data[3] = axienet_ior(lp, XAE_IS_OFFSET); 1971 data[4] = axienet_ior(lp, XAE_IP_OFFSET); 1972 data[5] = axienet_ior(lp, XAE_IE_OFFSET); 1973 data[6] = axienet_ior(lp, XAE_TTAG_OFFSET); 1974 data[7] = axienet_ior(lp, XAE_RTAG_OFFSET); 1975 data[8] = axienet_ior(lp, XAE_UAWL_OFFSET); 1976 data[9] = axienet_ior(lp, XAE_UAWU_OFFSET); 1977 data[10] = axienet_ior(lp, XAE_TPID0_OFFSET); 1978 data[11] = axienet_ior(lp, XAE_TPID1_OFFSET); 1979 data[12] = axienet_ior(lp, XAE_PPST_OFFSET); 1980 data[13] = axienet_ior(lp, XAE_RCW0_OFFSET); 1981 data[14] = axienet_ior(lp, XAE_RCW1_OFFSET); 1982 data[15] = axienet_ior(lp, XAE_TC_OFFSET); 1983 data[16] = axienet_ior(lp, XAE_FCC_OFFSET); 1984 data[17] = axienet_ior(lp, XAE_EMMC_OFFSET); 1985 data[18] = axienet_ior(lp, XAE_PHYC_OFFSET); 1986 data[19] = axienet_ior(lp, XAE_MDIO_MC_OFFSET); 1987 data[20] = axienet_ior(lp, XAE_MDIO_MCR_OFFSET); 1988 data[21] = axienet_ior(lp, XAE_MDIO_MWD_OFFSET); 1989 data[22] = axienet_ior(lp, XAE_MDIO_MRD_OFFSET); 1990 data[27] = axienet_ior(lp, XAE_UAW0_OFFSET); 1991 data[28] = axienet_ior(lp, XAE_UAW1_OFFSET); 1992 data[29] = axienet_ior(lp, XAE_FMI_OFFSET); 1993 data[30] = axienet_ior(lp, XAE_AF0_OFFSET); 1994 data[31] = axienet_ior(lp, XAE_AF1_OFFSET); 1995 if (!lp->use_dmaengine) { 1996 data[32] = axienet_dma_in32(lp, XAXIDMA_TX_CR_OFFSET); 1997 data[33] = axienet_dma_in32(lp, XAXIDMA_TX_SR_OFFSET); 1998 data[34] = axienet_dma_in32(lp, XAXIDMA_TX_CDESC_OFFSET); 1999 data[35] = axienet_dma_in32(lp, XAXIDMA_TX_TDESC_OFFSET); 2000 data[36] = axienet_dma_in32(lp, XAXIDMA_RX_CR_OFFSET); 2001 data[37] = axienet_dma_in32(lp, XAXIDMA_RX_SR_OFFSET); 2002 data[38] = axienet_dma_in32(lp, XAXIDMA_RX_CDESC_OFFSET); 2003 data[39] = axienet_dma_in32(lp, XAXIDMA_RX_TDESC_OFFSET); 2004 } 2005} 2006 2007static void 2008axienet_ethtools_get_ringparam(struct net_device *ndev, 2009 struct ethtool_ringparam *ering, 2010 struct kernel_ethtool_ringparam *kernel_ering, 2011 struct netlink_ext_ack *extack) 2012{ 2013 struct axienet_local *lp = netdev_priv(ndev); 2014 2015 ering->rx_max_pending = RX_BD_NUM_MAX; 2016 ering->rx_mini_max_pending = 0; 2017 ering->rx_jumbo_max_pending = 0; 2018 ering->tx_max_pending = TX_BD_NUM_MAX; 2019 ering->rx_pending = lp->rx_bd_num; 2020 ering->rx_mini_pending = 0; 2021 ering->rx_jumbo_pending = 0; 2022 ering->tx_pending = lp->tx_bd_num; 2023} 2024 2025static int 2026axienet_ethtools_set_ringparam(struct net_device *ndev, 2027 struct ethtool_ringparam *ering, 2028 struct kernel_ethtool_ringparam *kernel_ering, 2029 struct netlink_ext_ack *extack) 2030{ 2031 struct axienet_local *lp = netdev_priv(ndev); 2032 2033 if (ering->rx_pending > RX_BD_NUM_MAX || 2034 ering->rx_mini_pending || 2035 ering->rx_jumbo_pending || 2036 ering->tx_pending < TX_BD_NUM_MIN || 2037 ering->tx_pending > TX_BD_NUM_MAX) 2038 return -EINVAL; 2039 2040 if (netif_running(ndev)) 2041 return -EBUSY; 2042 2043 lp->rx_bd_num = ering->rx_pending; 2044 lp->tx_bd_num = ering->tx_pending; 2045 return 0; 2046} 2047 2048/** 2049 * axienet_ethtools_get_pauseparam - Get the pause parameter setting for 2050 * Tx and Rx paths. 2051 * @ndev: Pointer to net_device structure 2052 * @epauseparm: Pointer to ethtool_pauseparam structure. 2053 * 2054 * This implements ethtool command for getting axi ethernet pause frame 2055 * setting. Issue "ethtool -a ethX" to execute this function. 2056 */ 2057static void 2058axienet_ethtools_get_pauseparam(struct net_device *ndev, 2059 struct ethtool_pauseparam *epauseparm) 2060{ 2061 struct axienet_local *lp = netdev_priv(ndev); 2062 2063 phylink_ethtool_get_pauseparam(lp->phylink, epauseparm); 2064} 2065 2066/** 2067 * axienet_ethtools_set_pauseparam - Set device pause parameter(flow control) 2068 * settings. 2069 * @ndev: Pointer to net_device structure 2070 * @epauseparm:Pointer to ethtool_pauseparam structure 2071 * 2072 * This implements ethtool command for enabling flow control on Rx and Tx 2073 * paths. Issue "ethtool -A ethX tx on|off" under linux prompt to execute this 2074 * function. 2075 * 2076 * Return: 0 on success, -EFAULT if device is running 2077 */ 2078static int 2079axienet_ethtools_set_pauseparam(struct net_device *ndev, 2080 struct ethtool_pauseparam *epauseparm) 2081{ 2082 struct axienet_local *lp = netdev_priv(ndev); 2083 2084 return phylink_ethtool_set_pauseparam(lp->phylink, epauseparm); 2085} 2086 2087/** 2088 * axienet_update_coalesce_rx() - Set RX CR 2089 * @lp: Device private data 2090 * @cr: Value to write to the RX CR 2091 * @mask: Bits to set from @cr 2092 */ 2093static void axienet_update_coalesce_rx(struct axienet_local *lp, u32 cr, 2094 u32 mask) 2095{ 2096 spin_lock_irq(&lp->rx_cr_lock); 2097 lp->rx_dma_cr &= ~mask; 2098 lp->rx_dma_cr |= cr; 2099 /* If DMA isn't started, then the settings will be applied the next 2100 * time dma_start() is called. 2101 */ 2102 if (lp->rx_dma_started) { 2103 u32 reg = axienet_dma_in32(lp, XAXIDMA_RX_CR_OFFSET); 2104 2105 /* Don't enable IRQs if they are disabled by NAPI */ 2106 if (reg & XAXIDMA_IRQ_ALL_MASK) 2107 cr = lp->rx_dma_cr; 2108 else 2109 cr = lp->rx_dma_cr & ~XAXIDMA_IRQ_ALL_MASK; 2110 axienet_dma_out32(lp, XAXIDMA_RX_CR_OFFSET, cr); 2111 } 2112 spin_unlock_irq(&lp->rx_cr_lock); 2113} 2114 2115/** 2116 * axienet_dim_coalesce_count_rx() - RX coalesce count for DIM 2117 * @lp: Device private data 2118 * 2119 * Return: RX coalescing frame count value for DIM. 2120 */ 2121static u32 axienet_dim_coalesce_count_rx(struct axienet_local *lp) 2122{ 2123 return min(1 << (lp->rx_dim.profile_ix << 1), 255); 2124} 2125 2126/** 2127 * axienet_rx_dim_work() - Adjust RX DIM settings 2128 * @work: The work struct 2129 */ 2130static void axienet_rx_dim_work(struct work_struct *work) 2131{ 2132 struct axienet_local *lp = 2133 container_of(work, struct axienet_local, rx_dim.work); 2134 u32 cr = axienet_calc_cr(lp, axienet_dim_coalesce_count_rx(lp), 0); 2135 u32 mask = XAXIDMA_COALESCE_MASK | XAXIDMA_IRQ_IOC_MASK | 2136 XAXIDMA_IRQ_ERROR_MASK; 2137 2138 axienet_update_coalesce_rx(lp, cr, mask); 2139 lp->rx_dim.state = DIM_START_MEASURE; 2140} 2141 2142/** 2143 * axienet_update_coalesce_tx() - Set TX CR 2144 * @lp: Device private data 2145 * @cr: Value to write to the TX CR 2146 * @mask: Bits to set from @cr 2147 */ 2148static void axienet_update_coalesce_tx(struct axienet_local *lp, u32 cr, 2149 u32 mask) 2150{ 2151 spin_lock_irq(&lp->tx_cr_lock); 2152 lp->tx_dma_cr &= ~mask; 2153 lp->tx_dma_cr |= cr; 2154 /* If DMA isn't started, then the settings will be applied the next 2155 * time dma_start() is called. 2156 */ 2157 if (lp->tx_dma_started) { 2158 u32 reg = axienet_dma_in32(lp, XAXIDMA_TX_CR_OFFSET); 2159 2160 /* Don't enable IRQs if they are disabled by NAPI */ 2161 if (reg & XAXIDMA_IRQ_ALL_MASK) 2162 cr = lp->tx_dma_cr; 2163 else 2164 cr = lp->tx_dma_cr & ~XAXIDMA_IRQ_ALL_MASK; 2165 axienet_dma_out32(lp, XAXIDMA_TX_CR_OFFSET, cr); 2166 } 2167 spin_unlock_irq(&lp->tx_cr_lock); 2168} 2169 2170/** 2171 * axienet_ethtools_get_coalesce - Get DMA interrupt coalescing count. 2172 * @ndev: Pointer to net_device structure 2173 * @ecoalesce: Pointer to ethtool_coalesce structure 2174 * @kernel_coal: ethtool CQE mode setting structure 2175 * @extack: extack for reporting error messages 2176 * 2177 * This implements ethtool command for getting the DMA interrupt coalescing 2178 * count on Tx and Rx paths. Issue "ethtool -c ethX" under linux prompt to 2179 * execute this function. 2180 * 2181 * Return: 0 always 2182 */ 2183static int 2184axienet_ethtools_get_coalesce(struct net_device *ndev, 2185 struct ethtool_coalesce *ecoalesce, 2186 struct kernel_ethtool_coalesce *kernel_coal, 2187 struct netlink_ext_ack *extack) 2188{ 2189 struct axienet_local *lp = netdev_priv(ndev); 2190 u32 cr; 2191 2192 ecoalesce->use_adaptive_rx_coalesce = lp->rx_dim_enabled; 2193 2194 spin_lock_irq(&lp->rx_cr_lock); 2195 cr = lp->rx_dma_cr; 2196 spin_unlock_irq(&lp->rx_cr_lock); 2197 axienet_coalesce_params(lp, cr, 2198 &ecoalesce->rx_max_coalesced_frames, 2199 &ecoalesce->rx_coalesce_usecs); 2200 2201 spin_lock_irq(&lp->tx_cr_lock); 2202 cr = lp->tx_dma_cr; 2203 spin_unlock_irq(&lp->tx_cr_lock); 2204 axienet_coalesce_params(lp, cr, 2205 &ecoalesce->tx_max_coalesced_frames, 2206 &ecoalesce->tx_coalesce_usecs); 2207 return 0; 2208} 2209 2210/** 2211 * axienet_ethtools_set_coalesce - Set DMA interrupt coalescing count. 2212 * @ndev: Pointer to net_device structure 2213 * @ecoalesce: Pointer to ethtool_coalesce structure 2214 * @kernel_coal: ethtool CQE mode setting structure 2215 * @extack: extack for reporting error messages 2216 * 2217 * This implements ethtool command for setting the DMA interrupt coalescing 2218 * count on Tx and Rx paths. Issue "ethtool -C ethX rx-frames 5" under linux 2219 * prompt to execute this function. 2220 * 2221 * Return: 0, on success, Non-zero error value on failure. 2222 */ 2223static int 2224axienet_ethtools_set_coalesce(struct net_device *ndev, 2225 struct ethtool_coalesce *ecoalesce, 2226 struct kernel_ethtool_coalesce *kernel_coal, 2227 struct netlink_ext_ack *extack) 2228{ 2229 struct axienet_local *lp = netdev_priv(ndev); 2230 bool new_dim = ecoalesce->use_adaptive_rx_coalesce; 2231 bool old_dim = lp->rx_dim_enabled; 2232 u32 cr, mask = ~XAXIDMA_CR_RUNSTOP_MASK; 2233 2234 if (ecoalesce->rx_max_coalesced_frames > 255 || 2235 ecoalesce->tx_max_coalesced_frames > 255) { 2236 NL_SET_ERR_MSG(extack, "frames must be less than 256"); 2237 return -EINVAL; 2238 } 2239 2240 if (!ecoalesce->rx_max_coalesced_frames || 2241 !ecoalesce->tx_max_coalesced_frames) { 2242 NL_SET_ERR_MSG(extack, "frames must be non-zero"); 2243 return -EINVAL; 2244 } 2245 2246 if (((ecoalesce->rx_max_coalesced_frames > 1 || new_dim) && 2247 !ecoalesce->rx_coalesce_usecs) || 2248 (ecoalesce->tx_max_coalesced_frames > 1 && 2249 !ecoalesce->tx_coalesce_usecs)) { 2250 NL_SET_ERR_MSG(extack, 2251 "usecs must be non-zero when frames is greater than one"); 2252 return -EINVAL; 2253 } 2254 2255 if (new_dim && !old_dim) { 2256 cr = axienet_calc_cr(lp, axienet_dim_coalesce_count_rx(lp), 2257 ecoalesce->rx_coalesce_usecs); 2258 } else if (!new_dim) { 2259 if (old_dim) { 2260 WRITE_ONCE(lp->rx_dim_enabled, false); 2261 napi_synchronize(&lp->napi_rx); 2262 flush_work(&lp->rx_dim.work); 2263 } 2264 2265 cr = axienet_calc_cr(lp, ecoalesce->rx_max_coalesced_frames, 2266 ecoalesce->rx_coalesce_usecs); 2267 } else { 2268 /* Dummy value for count just to calculate timer */ 2269 cr = axienet_calc_cr(lp, 2, ecoalesce->rx_coalesce_usecs); 2270 mask = XAXIDMA_DELAY_MASK | XAXIDMA_IRQ_DELAY_MASK; 2271 } 2272 2273 axienet_update_coalesce_rx(lp, cr, mask); 2274 if (new_dim && !old_dim) 2275 WRITE_ONCE(lp->rx_dim_enabled, true); 2276 2277 cr = axienet_calc_cr(lp, ecoalesce->tx_max_coalesced_frames, 2278 ecoalesce->tx_coalesce_usecs); 2279 axienet_update_coalesce_tx(lp, cr, ~XAXIDMA_CR_RUNSTOP_MASK); 2280 return 0; 2281} 2282 2283static int 2284axienet_ethtools_get_link_ksettings(struct net_device *ndev, 2285 struct ethtool_link_ksettings *cmd) 2286{ 2287 struct axienet_local *lp = netdev_priv(ndev); 2288 2289 return phylink_ethtool_ksettings_get(lp->phylink, cmd); 2290} 2291 2292static int 2293axienet_ethtools_set_link_ksettings(struct net_device *ndev, 2294 const struct ethtool_link_ksettings *cmd) 2295{ 2296 struct axienet_local *lp = netdev_priv(ndev); 2297 2298 return phylink_ethtool_ksettings_set(lp->phylink, cmd); 2299} 2300 2301static int axienet_ethtools_nway_reset(struct net_device *dev) 2302{ 2303 struct axienet_local *lp = netdev_priv(dev); 2304 2305 return phylink_ethtool_nway_reset(lp->phylink); 2306} 2307 2308static void axienet_ethtools_get_ethtool_stats(struct net_device *dev, 2309 struct ethtool_stats *stats, 2310 u64 *data) 2311{ 2312 struct axienet_local *lp = netdev_priv(dev); 2313 unsigned int start; 2314 2315 do { 2316 start = read_seqcount_begin(&lp->hw_stats_seqcount); 2317 data[0] = axienet_stat(lp, STAT_RX_BYTES); 2318 data[1] = axienet_stat(lp, STAT_TX_BYTES); 2319 data[2] = axienet_stat(lp, STAT_RX_VLAN_FRAMES); 2320 data[3] = axienet_stat(lp, STAT_TX_VLAN_FRAMES); 2321 data[6] = axienet_stat(lp, STAT_TX_PFC_FRAMES); 2322 data[7] = axienet_stat(lp, STAT_RX_PFC_FRAMES); 2323 data[8] = axienet_stat(lp, STAT_USER_DEFINED0); 2324 data[9] = axienet_stat(lp, STAT_USER_DEFINED1); 2325 data[10] = axienet_stat(lp, STAT_USER_DEFINED2); 2326 } while (read_seqcount_retry(&lp->hw_stats_seqcount, start)); 2327} 2328 2329static const char axienet_ethtool_stats_strings[][ETH_GSTRING_LEN] = { 2330 "Received bytes", 2331 "Transmitted bytes", 2332 "RX Good VLAN Tagged Frames", 2333 "TX Good VLAN Tagged Frames", 2334 "TX Good PFC Frames", 2335 "RX Good PFC Frames", 2336 "User Defined Counter 0", 2337 "User Defined Counter 1", 2338 "User Defined Counter 2", 2339}; 2340 2341static void axienet_ethtools_get_strings(struct net_device *dev, u32 stringset, u8 *data) 2342{ 2343 switch (stringset) { 2344 case ETH_SS_STATS: 2345 memcpy(data, axienet_ethtool_stats_strings, 2346 sizeof(axienet_ethtool_stats_strings)); 2347 break; 2348 } 2349} 2350 2351static int axienet_ethtools_get_sset_count(struct net_device *dev, int sset) 2352{ 2353 struct axienet_local *lp = netdev_priv(dev); 2354 2355 switch (sset) { 2356 case ETH_SS_STATS: 2357 if (lp->features & XAE_FEATURE_STATS) 2358 return ARRAY_SIZE(axienet_ethtool_stats_strings); 2359 fallthrough; 2360 default: 2361 return -EOPNOTSUPP; 2362 } 2363} 2364 2365static void 2366axienet_ethtools_get_pause_stats(struct net_device *dev, 2367 struct ethtool_pause_stats *pause_stats) 2368{ 2369 struct axienet_local *lp = netdev_priv(dev); 2370 unsigned int start; 2371 2372 if (!(lp->features & XAE_FEATURE_STATS)) 2373 return; 2374 2375 do { 2376 start = read_seqcount_begin(&lp->hw_stats_seqcount); 2377 pause_stats->tx_pause_frames = 2378 axienet_stat(lp, STAT_TX_PAUSE_FRAMES); 2379 pause_stats->rx_pause_frames = 2380 axienet_stat(lp, STAT_RX_PAUSE_FRAMES); 2381 } while (read_seqcount_retry(&lp->hw_stats_seqcount, start)); 2382} 2383 2384static void 2385axienet_ethtool_get_eth_mac_stats(struct net_device *dev, 2386 struct ethtool_eth_mac_stats *mac_stats) 2387{ 2388 struct axienet_local *lp = netdev_priv(dev); 2389 unsigned int start; 2390 2391 if (!(lp->features & XAE_FEATURE_STATS)) 2392 return; 2393 2394 do { 2395 start = read_seqcount_begin(&lp->hw_stats_seqcount); 2396 mac_stats->FramesTransmittedOK = 2397 axienet_stat(lp, STAT_TX_GOOD_FRAMES); 2398 mac_stats->SingleCollisionFrames = 2399 axienet_stat(lp, STAT_TX_SINGLE_COLLISION_FRAMES); 2400 mac_stats->MultipleCollisionFrames = 2401 axienet_stat(lp, STAT_TX_MULTIPLE_COLLISION_FRAMES); 2402 mac_stats->FramesReceivedOK = 2403 axienet_stat(lp, STAT_RX_GOOD_FRAMES); 2404 mac_stats->FrameCheckSequenceErrors = 2405 axienet_stat(lp, STAT_RX_FCS_ERRORS); 2406 mac_stats->AlignmentErrors = 2407 axienet_stat(lp, STAT_RX_ALIGNMENT_ERRORS); 2408 mac_stats->FramesWithDeferredXmissions = 2409 axienet_stat(lp, STAT_TX_DEFERRED_FRAMES); 2410 mac_stats->LateCollisions = 2411 axienet_stat(lp, STAT_TX_LATE_COLLISIONS); 2412 mac_stats->FramesAbortedDueToXSColls = 2413 axienet_stat(lp, STAT_TX_EXCESS_COLLISIONS); 2414 mac_stats->MulticastFramesXmittedOK = 2415 axienet_stat(lp, STAT_TX_MULTICAST_FRAMES); 2416 mac_stats->BroadcastFramesXmittedOK = 2417 axienet_stat(lp, STAT_TX_BROADCAST_FRAMES); 2418 mac_stats->FramesWithExcessiveDeferral = 2419 axienet_stat(lp, STAT_TX_EXCESS_DEFERRAL); 2420 mac_stats->MulticastFramesReceivedOK = 2421 axienet_stat(lp, STAT_RX_MULTICAST_FRAMES); 2422 mac_stats->BroadcastFramesReceivedOK = 2423 axienet_stat(lp, STAT_RX_BROADCAST_FRAMES); 2424 mac_stats->InRangeLengthErrors = 2425 axienet_stat(lp, STAT_RX_LENGTH_ERRORS); 2426 } while (read_seqcount_retry(&lp->hw_stats_seqcount, start)); 2427} 2428 2429static void 2430axienet_ethtool_get_eth_ctrl_stats(struct net_device *dev, 2431 struct ethtool_eth_ctrl_stats *ctrl_stats) 2432{ 2433 struct axienet_local *lp = netdev_priv(dev); 2434 unsigned int start; 2435 2436 if (!(lp->features & XAE_FEATURE_STATS)) 2437 return; 2438 2439 do { 2440 start = read_seqcount_begin(&lp->hw_stats_seqcount); 2441 ctrl_stats->MACControlFramesTransmitted = 2442 axienet_stat(lp, STAT_TX_CONTROL_FRAMES); 2443 ctrl_stats->MACControlFramesReceived = 2444 axienet_stat(lp, STAT_RX_CONTROL_FRAMES); 2445 ctrl_stats->UnsupportedOpcodesReceived = 2446 axienet_stat(lp, STAT_RX_CONTROL_OPCODE_ERRORS); 2447 } while (read_seqcount_retry(&lp->hw_stats_seqcount, start)); 2448} 2449 2450static const struct ethtool_rmon_hist_range axienet_rmon_ranges[] = { 2451 { 64, 64 }, 2452 { 65, 127 }, 2453 { 128, 255 }, 2454 { 256, 511 }, 2455 { 512, 1023 }, 2456 { 1024, 1518 }, 2457 { 1519, 16384 }, 2458 { }, 2459}; 2460 2461static void 2462axienet_ethtool_get_rmon_stats(struct net_device *dev, 2463 struct ethtool_rmon_stats *rmon_stats, 2464 const struct ethtool_rmon_hist_range **ranges) 2465{ 2466 struct axienet_local *lp = netdev_priv(dev); 2467 unsigned int start; 2468 2469 if (!(lp->features & XAE_FEATURE_STATS)) 2470 return; 2471 2472 do { 2473 start = read_seqcount_begin(&lp->hw_stats_seqcount); 2474 rmon_stats->undersize_pkts = 2475 axienet_stat(lp, STAT_UNDERSIZE_FRAMES); 2476 rmon_stats->oversize_pkts = 2477 axienet_stat(lp, STAT_RX_OVERSIZE_FRAMES); 2478 rmon_stats->fragments = 2479 axienet_stat(lp, STAT_FRAGMENT_FRAMES); 2480 2481 rmon_stats->hist[0] = 2482 axienet_stat(lp, STAT_RX_64_BYTE_FRAMES); 2483 rmon_stats->hist[1] = 2484 axienet_stat(lp, STAT_RX_65_127_BYTE_FRAMES); 2485 rmon_stats->hist[2] = 2486 axienet_stat(lp, STAT_RX_128_255_BYTE_FRAMES); 2487 rmon_stats->hist[3] = 2488 axienet_stat(lp, STAT_RX_256_511_BYTE_FRAMES); 2489 rmon_stats->hist[4] = 2490 axienet_stat(lp, STAT_RX_512_1023_BYTE_FRAMES); 2491 rmon_stats->hist[5] = 2492 axienet_stat(lp, STAT_RX_1024_MAX_BYTE_FRAMES); 2493 rmon_stats->hist[6] = 2494 rmon_stats->oversize_pkts; 2495 2496 rmon_stats->hist_tx[0] = 2497 axienet_stat(lp, STAT_TX_64_BYTE_FRAMES); 2498 rmon_stats->hist_tx[1] = 2499 axienet_stat(lp, STAT_TX_65_127_BYTE_FRAMES); 2500 rmon_stats->hist_tx[2] = 2501 axienet_stat(lp, STAT_TX_128_255_BYTE_FRAMES); 2502 rmon_stats->hist_tx[3] = 2503 axienet_stat(lp, STAT_TX_256_511_BYTE_FRAMES); 2504 rmon_stats->hist_tx[4] = 2505 axienet_stat(lp, STAT_TX_512_1023_BYTE_FRAMES); 2506 rmon_stats->hist_tx[5] = 2507 axienet_stat(lp, STAT_TX_1024_MAX_BYTE_FRAMES); 2508 rmon_stats->hist_tx[6] = 2509 axienet_stat(lp, STAT_TX_OVERSIZE_FRAMES); 2510 } while (read_seqcount_retry(&lp->hw_stats_seqcount, start)); 2511 2512 *ranges = axienet_rmon_ranges; 2513} 2514 2515static const struct ethtool_ops axienet_ethtool_ops = { 2516 .supported_coalesce_params = ETHTOOL_COALESCE_MAX_FRAMES | 2517 ETHTOOL_COALESCE_USECS | 2518 ETHTOOL_COALESCE_USE_ADAPTIVE_RX, 2519 .get_drvinfo = axienet_ethtools_get_drvinfo, 2520 .get_regs_len = axienet_ethtools_get_regs_len, 2521 .get_regs = axienet_ethtools_get_regs, 2522 .get_link = ethtool_op_get_link, 2523 .get_ringparam = axienet_ethtools_get_ringparam, 2524 .set_ringparam = axienet_ethtools_set_ringparam, 2525 .get_pauseparam = axienet_ethtools_get_pauseparam, 2526 .set_pauseparam = axienet_ethtools_set_pauseparam, 2527 .get_coalesce = axienet_ethtools_get_coalesce, 2528 .set_coalesce = axienet_ethtools_set_coalesce, 2529 .get_link_ksettings = axienet_ethtools_get_link_ksettings, 2530 .set_link_ksettings = axienet_ethtools_set_link_ksettings, 2531 .nway_reset = axienet_ethtools_nway_reset, 2532 .get_ethtool_stats = axienet_ethtools_get_ethtool_stats, 2533 .get_strings = axienet_ethtools_get_strings, 2534 .get_sset_count = axienet_ethtools_get_sset_count, 2535 .get_pause_stats = axienet_ethtools_get_pause_stats, 2536 .get_eth_mac_stats = axienet_ethtool_get_eth_mac_stats, 2537 .get_eth_ctrl_stats = axienet_ethtool_get_eth_ctrl_stats, 2538 .get_rmon_stats = axienet_ethtool_get_rmon_stats, 2539}; 2540 2541static struct axienet_local *pcs_to_axienet_local(struct phylink_pcs *pcs) 2542{ 2543 return container_of(pcs, struct axienet_local, pcs); 2544} 2545 2546static void axienet_pcs_get_state(struct phylink_pcs *pcs, 2547 unsigned int neg_mode, 2548 struct phylink_link_state *state) 2549{ 2550 struct mdio_device *pcs_phy = pcs_to_axienet_local(pcs)->pcs_phy; 2551 2552 phylink_mii_c22_pcs_get_state(pcs_phy, neg_mode, state); 2553} 2554 2555static void axienet_pcs_an_restart(struct phylink_pcs *pcs) 2556{ 2557 struct mdio_device *pcs_phy = pcs_to_axienet_local(pcs)->pcs_phy; 2558 2559 phylink_mii_c22_pcs_an_restart(pcs_phy); 2560} 2561 2562static int axienet_pcs_config(struct phylink_pcs *pcs, unsigned int neg_mode, 2563 phy_interface_t interface, 2564 const unsigned long *advertising, 2565 bool permit_pause_to_mac) 2566{ 2567 struct mdio_device *pcs_phy = pcs_to_axienet_local(pcs)->pcs_phy; 2568 struct net_device *ndev = pcs_to_axienet_local(pcs)->ndev; 2569 struct axienet_local *lp = netdev_priv(ndev); 2570 int ret; 2571 2572 if (lp->switch_x_sgmii) { 2573 ret = mdiodev_write(pcs_phy, XLNX_MII_STD_SELECT_REG, 2574 interface == PHY_INTERFACE_MODE_SGMII ? 2575 XLNX_MII_STD_SELECT_SGMII : 0); 2576 if (ret < 0) { 2577 netdev_warn(ndev, 2578 "Failed to switch PHY interface: %d\n", 2579 ret); 2580 return ret; 2581 } 2582 } 2583 2584 ret = phylink_mii_c22_pcs_config(pcs_phy, interface, advertising, 2585 neg_mode); 2586 if (ret < 0) 2587 netdev_warn(ndev, "Failed to configure PCS: %d\n", ret); 2588 2589 return ret; 2590} 2591 2592static const struct phylink_pcs_ops axienet_pcs_ops = { 2593 .pcs_get_state = axienet_pcs_get_state, 2594 .pcs_config = axienet_pcs_config, 2595 .pcs_an_restart = axienet_pcs_an_restart, 2596}; 2597 2598static struct phylink_pcs *axienet_mac_select_pcs(struct phylink_config *config, 2599 phy_interface_t interface) 2600{ 2601 struct net_device *ndev = to_net_dev(config->dev); 2602 struct axienet_local *lp = netdev_priv(ndev); 2603 2604 if (interface == PHY_INTERFACE_MODE_1000BASEX || 2605 interface == PHY_INTERFACE_MODE_SGMII) 2606 return &lp->pcs; 2607 2608 return NULL; 2609} 2610 2611static void axienet_mac_config(struct phylink_config *config, unsigned int mode, 2612 const struct phylink_link_state *state) 2613{ 2614 /* nothing meaningful to do */ 2615} 2616 2617static void axienet_mac_link_down(struct phylink_config *config, 2618 unsigned int mode, 2619 phy_interface_t interface) 2620{ 2621 /* nothing meaningful to do */ 2622} 2623 2624static void axienet_mac_link_up(struct phylink_config *config, 2625 struct phy_device *phy, 2626 unsigned int mode, phy_interface_t interface, 2627 int speed, int duplex, 2628 bool tx_pause, bool rx_pause) 2629{ 2630 struct net_device *ndev = to_net_dev(config->dev); 2631 struct axienet_local *lp = netdev_priv(ndev); 2632 u32 emmc_reg, fcc_reg; 2633 2634 emmc_reg = axienet_ior(lp, XAE_EMMC_OFFSET); 2635 emmc_reg &= ~XAE_EMMC_LINKSPEED_MASK; 2636 2637 switch (speed) { 2638 case SPEED_1000: 2639 emmc_reg |= XAE_EMMC_LINKSPD_1000; 2640 break; 2641 case SPEED_100: 2642 emmc_reg |= XAE_EMMC_LINKSPD_100; 2643 break; 2644 case SPEED_10: 2645 emmc_reg |= XAE_EMMC_LINKSPD_10; 2646 break; 2647 default: 2648 dev_err(&ndev->dev, 2649 "Speed other than 10, 100 or 1Gbps is not supported\n"); 2650 break; 2651 } 2652 2653 axienet_iow(lp, XAE_EMMC_OFFSET, emmc_reg); 2654 2655 fcc_reg = axienet_ior(lp, XAE_FCC_OFFSET); 2656 if (tx_pause) 2657 fcc_reg |= XAE_FCC_FCTX_MASK; 2658 else 2659 fcc_reg &= ~XAE_FCC_FCTX_MASK; 2660 if (rx_pause) 2661 fcc_reg |= XAE_FCC_FCRX_MASK; 2662 else 2663 fcc_reg &= ~XAE_FCC_FCRX_MASK; 2664 axienet_iow(lp, XAE_FCC_OFFSET, fcc_reg); 2665} 2666 2667static const struct phylink_mac_ops axienet_phylink_ops = { 2668 .mac_select_pcs = axienet_mac_select_pcs, 2669 .mac_config = axienet_mac_config, 2670 .mac_link_down = axienet_mac_link_down, 2671 .mac_link_up = axienet_mac_link_up, 2672}; 2673 2674/** 2675 * axienet_dma_err_handler - Work queue task for Axi DMA Error 2676 * @work: pointer to work_struct 2677 * 2678 * Resets the Axi DMA and Axi Ethernet devices, and reconfigures the 2679 * Tx/Rx BDs. 2680 */ 2681static void axienet_dma_err_handler(struct work_struct *work) 2682{ 2683 u32 i; 2684 u32 axienet_status; 2685 struct axidma_bd *cur_p; 2686 struct axienet_local *lp = container_of(work, struct axienet_local, 2687 dma_err_task); 2688 struct net_device *ndev = lp->ndev; 2689 2690 /* Don't bother if we are going to stop anyway */ 2691 if (READ_ONCE(lp->stopping)) 2692 return; 2693 2694 napi_disable(&lp->napi_tx); 2695 napi_disable(&lp->napi_rx); 2696 2697 axienet_setoptions(ndev, lp->options & 2698 ~(XAE_OPTION_TXEN | XAE_OPTION_RXEN)); 2699 2700 axienet_dma_stop(lp); 2701 netdev_reset_queue(ndev); 2702 2703 for (i = 0; i < lp->tx_bd_num; i++) { 2704 cur_p = &lp->tx_bd_v[i]; 2705 if (cur_p->cntrl) { 2706 dma_addr_t addr = desc_get_phys_addr(lp, cur_p); 2707 2708 dma_unmap_single(lp->dev, addr, 2709 (cur_p->cntrl & 2710 XAXIDMA_BD_CTRL_LENGTH_MASK), 2711 DMA_TO_DEVICE); 2712 } 2713 if (cur_p->skb) 2714 dev_kfree_skb_irq(cur_p->skb); 2715 cur_p->phys = 0; 2716 cur_p->phys_msb = 0; 2717 cur_p->cntrl = 0; 2718 cur_p->status = 0; 2719 cur_p->app0 = 0; 2720 cur_p->app1 = 0; 2721 cur_p->app2 = 0; 2722 cur_p->app3 = 0; 2723 cur_p->app4 = 0; 2724 cur_p->skb = NULL; 2725 } 2726 2727 for (i = 0; i < lp->rx_bd_num; i++) { 2728 cur_p = &lp->rx_bd_v[i]; 2729 cur_p->status = 0; 2730 cur_p->app0 = 0; 2731 cur_p->app1 = 0; 2732 cur_p->app2 = 0; 2733 cur_p->app3 = 0; 2734 cur_p->app4 = 0; 2735 } 2736 2737 lp->tx_bd_ci = 0; 2738 lp->tx_bd_tail = 0; 2739 lp->rx_bd_ci = 0; 2740 2741 axienet_dma_start(lp); 2742 2743 axienet_status = axienet_ior(lp, XAE_RCW1_OFFSET); 2744 axienet_status &= ~XAE_RCW1_RX_MASK; 2745 axienet_iow(lp, XAE_RCW1_OFFSET, axienet_status); 2746 2747 axienet_status = axienet_ior(lp, XAE_IP_OFFSET); 2748 if (axienet_status & XAE_INT_RXRJECT_MASK) 2749 axienet_iow(lp, XAE_IS_OFFSET, XAE_INT_RXRJECT_MASK); 2750 axienet_iow(lp, XAE_IE_OFFSET, lp->eth_irq > 0 ? 2751 XAE_INT_RECV_ERROR_MASK : 0); 2752 axienet_iow(lp, XAE_FCC_OFFSET, XAE_FCC_FCRX_MASK); 2753 2754 /* Sync default options with HW but leave receiver and 2755 * transmitter disabled. 2756 */ 2757 axienet_setoptions(ndev, lp->options & 2758 ~(XAE_OPTION_TXEN | XAE_OPTION_RXEN)); 2759 axienet_set_mac_address(ndev, NULL); 2760 axienet_set_multicast_list(ndev); 2761 napi_enable(&lp->napi_rx); 2762 napi_enable(&lp->napi_tx); 2763 axienet_setoptions(ndev, lp->options); 2764} 2765 2766/** 2767 * axienet_probe - Axi Ethernet probe function. 2768 * @pdev: Pointer to platform device structure. 2769 * 2770 * Return: 0, on success 2771 * Non-zero error value on failure. 2772 * 2773 * This is the probe routine for Axi Ethernet driver. This is called before 2774 * any other driver routines are invoked. It allocates and sets up the Ethernet 2775 * device. Parses through device tree and populates fields of 2776 * axienet_local. It registers the Ethernet device. 2777 */ 2778static int axienet_probe(struct platform_device *pdev) 2779{ 2780 int ret; 2781 struct device_node *np; 2782 struct axienet_local *lp; 2783 struct net_device *ndev; 2784 struct resource *ethres; 2785 u8 mac_addr[ETH_ALEN]; 2786 int addr_width = 32; 2787 u32 value; 2788 2789 ndev = alloc_etherdev(sizeof(*lp)); 2790 if (!ndev) 2791 return -ENOMEM; 2792 2793 platform_set_drvdata(pdev, ndev); 2794 2795 SET_NETDEV_DEV(ndev, &pdev->dev); 2796 ndev->features = NETIF_F_SG; 2797 ndev->ethtool_ops = &axienet_ethtool_ops; 2798 2799 /* MTU range: 64 - 9000 */ 2800 ndev->min_mtu = 64; 2801 ndev->max_mtu = XAE_JUMBO_MTU; 2802 2803 lp = netdev_priv(ndev); 2804 lp->ndev = ndev; 2805 lp->dev = &pdev->dev; 2806 lp->options = XAE_OPTION_DEFAULTS; 2807 lp->rx_bd_num = RX_BD_NUM_DEFAULT; 2808 lp->tx_bd_num = TX_BD_NUM_DEFAULT; 2809 2810 u64_stats_init(&lp->rx_stat_sync); 2811 u64_stats_init(&lp->tx_stat_sync); 2812 2813 mutex_init(&lp->stats_lock); 2814 seqcount_mutex_init(&lp->hw_stats_seqcount, &lp->stats_lock); 2815 INIT_DEFERRABLE_WORK(&lp->stats_work, axienet_refresh_stats); 2816 2817 lp->axi_clk = devm_clk_get_optional(&pdev->dev, "s_axi_lite_clk"); 2818 if (!lp->axi_clk) { 2819 /* For backward compatibility, if named AXI clock is not present, 2820 * treat the first clock specified as the AXI clock. 2821 */ 2822 lp->axi_clk = devm_clk_get_optional(&pdev->dev, NULL); 2823 } 2824 if (IS_ERR(lp->axi_clk)) { 2825 ret = PTR_ERR(lp->axi_clk); 2826 goto free_netdev; 2827 } 2828 ret = clk_prepare_enable(lp->axi_clk); 2829 if (ret) { 2830 dev_err(&pdev->dev, "Unable to enable AXI clock: %d\n", ret); 2831 goto free_netdev; 2832 } 2833 2834 lp->misc_clks[0].id = "axis_clk"; 2835 lp->misc_clks[1].id = "ref_clk"; 2836 lp->misc_clks[2].id = "mgt_clk"; 2837 2838 ret = devm_clk_bulk_get_optional(&pdev->dev, XAE_NUM_MISC_CLOCKS, lp->misc_clks); 2839 if (ret) 2840 goto cleanup_clk; 2841 2842 ret = clk_bulk_prepare_enable(XAE_NUM_MISC_CLOCKS, lp->misc_clks); 2843 if (ret) 2844 goto cleanup_clk; 2845 2846 /* Map device registers */ 2847 lp->regs = devm_platform_get_and_ioremap_resource(pdev, 0, ðres); 2848 if (IS_ERR(lp->regs)) { 2849 ret = PTR_ERR(lp->regs); 2850 goto cleanup_clk; 2851 } 2852 lp->regs_start = ethres->start; 2853 2854 /* Setup checksum offload, but default to off if not specified */ 2855 lp->features = 0; 2856 2857 if (axienet_ior(lp, XAE_ABILITY_OFFSET) & XAE_ABILITY_STATS) 2858 lp->features |= XAE_FEATURE_STATS; 2859 2860 ret = of_property_read_u32(pdev->dev.of_node, "xlnx,txcsum", &value); 2861 if (!ret) { 2862 switch (value) { 2863 case 1: 2864 lp->features |= XAE_FEATURE_PARTIAL_TX_CSUM; 2865 /* Can checksum any contiguous range */ 2866 ndev->features |= NETIF_F_HW_CSUM; 2867 break; 2868 case 2: 2869 lp->features |= XAE_FEATURE_FULL_TX_CSUM; 2870 /* Can checksum TCP/UDP over IPv4. */ 2871 ndev->features |= NETIF_F_IP_CSUM; 2872 break; 2873 } 2874 } 2875 ret = of_property_read_u32(pdev->dev.of_node, "xlnx,rxcsum", &value); 2876 if (!ret) { 2877 switch (value) { 2878 case 1: 2879 lp->features |= XAE_FEATURE_PARTIAL_RX_CSUM; 2880 ndev->features |= NETIF_F_RXCSUM; 2881 break; 2882 case 2: 2883 lp->features |= XAE_FEATURE_FULL_RX_CSUM; 2884 ndev->features |= NETIF_F_RXCSUM; 2885 break; 2886 } 2887 } 2888 /* For supporting jumbo frames, the Axi Ethernet hardware must have 2889 * a larger Rx/Tx Memory. Typically, the size must be large so that 2890 * we can enable jumbo option and start supporting jumbo frames. 2891 * Here we check for memory allocated for Rx/Tx in the hardware from 2892 * the device-tree and accordingly set flags. 2893 */ 2894 of_property_read_u32(pdev->dev.of_node, "xlnx,rxmem", &lp->rxmem); 2895 2896 lp->switch_x_sgmii = of_property_read_bool(pdev->dev.of_node, 2897 "xlnx,switch-x-sgmii"); 2898 2899 /* Start with the proprietary, and broken phy_type */ 2900 ret = of_property_read_u32(pdev->dev.of_node, "xlnx,phy-type", &value); 2901 if (!ret) { 2902 netdev_warn(ndev, "Please upgrade your device tree binary blob to use phy-mode"); 2903 switch (value) { 2904 case XAE_PHY_TYPE_MII: 2905 lp->phy_mode = PHY_INTERFACE_MODE_MII; 2906 break; 2907 case XAE_PHY_TYPE_GMII: 2908 lp->phy_mode = PHY_INTERFACE_MODE_GMII; 2909 break; 2910 case XAE_PHY_TYPE_RGMII_2_0: 2911 lp->phy_mode = PHY_INTERFACE_MODE_RGMII_ID; 2912 break; 2913 case XAE_PHY_TYPE_SGMII: 2914 lp->phy_mode = PHY_INTERFACE_MODE_SGMII; 2915 break; 2916 case XAE_PHY_TYPE_1000BASE_X: 2917 lp->phy_mode = PHY_INTERFACE_MODE_1000BASEX; 2918 break; 2919 default: 2920 ret = -EINVAL; 2921 goto cleanup_clk; 2922 } 2923 } else { 2924 ret = of_get_phy_mode(pdev->dev.of_node, &lp->phy_mode); 2925 if (ret) 2926 goto cleanup_clk; 2927 } 2928 if (lp->switch_x_sgmii && lp->phy_mode != PHY_INTERFACE_MODE_SGMII && 2929 lp->phy_mode != PHY_INTERFACE_MODE_1000BASEX) { 2930 dev_err(&pdev->dev, "xlnx,switch-x-sgmii only supported with SGMII or 1000BaseX\n"); 2931 ret = -EINVAL; 2932 goto cleanup_clk; 2933 } 2934 2935 if (!of_property_present(pdev->dev.of_node, "dmas")) { 2936 /* Find the DMA node, map the DMA registers, and decode the DMA IRQs */ 2937 np = of_parse_phandle(pdev->dev.of_node, "axistream-connected", 0); 2938 2939 if (np) { 2940 struct resource dmares; 2941 2942 ret = of_address_to_resource(np, 0, &dmares); 2943 if (ret) { 2944 dev_err(&pdev->dev, 2945 "unable to get DMA resource\n"); 2946 of_node_put(np); 2947 goto cleanup_clk; 2948 } 2949 lp->dma_regs = devm_ioremap_resource(&pdev->dev, 2950 &dmares); 2951 lp->rx_irq = irq_of_parse_and_map(np, 1); 2952 lp->tx_irq = irq_of_parse_and_map(np, 0); 2953 of_node_put(np); 2954 lp->eth_irq = platform_get_irq_optional(pdev, 0); 2955 } else { 2956 /* Check for these resources directly on the Ethernet node. */ 2957 lp->dma_regs = devm_platform_get_and_ioremap_resource(pdev, 1, NULL); 2958 lp->rx_irq = platform_get_irq(pdev, 1); 2959 lp->tx_irq = platform_get_irq(pdev, 0); 2960 lp->eth_irq = platform_get_irq_optional(pdev, 2); 2961 } 2962 if (IS_ERR(lp->dma_regs)) { 2963 dev_err(&pdev->dev, "could not map DMA regs\n"); 2964 ret = PTR_ERR(lp->dma_regs); 2965 goto cleanup_clk; 2966 } 2967 if (lp->rx_irq <= 0 || lp->tx_irq <= 0) { 2968 dev_err(&pdev->dev, "could not determine irqs\n"); 2969 ret = -ENOMEM; 2970 goto cleanup_clk; 2971 } 2972 2973 /* Reset core now that clocks are enabled, prior to accessing MDIO */ 2974 ret = __axienet_device_reset(lp); 2975 if (ret) 2976 goto cleanup_clk; 2977 2978 /* Autodetect the need for 64-bit DMA pointers. 2979 * When the IP is configured for a bus width bigger than 32 bits, 2980 * writing the MSB registers is mandatory, even if they are all 0. 2981 * We can detect this case by writing all 1's to one such register 2982 * and see if that sticks: when the IP is configured for 32 bits 2983 * only, those registers are RES0. 2984 * Those MSB registers were introduced in IP v7.1, which we check first. 2985 */ 2986 if ((axienet_ior(lp, XAE_ID_OFFSET) >> 24) >= 0x9) { 2987 void __iomem *desc = lp->dma_regs + XAXIDMA_TX_CDESC_OFFSET + 4; 2988 2989 iowrite32(0x0, desc); 2990 if (ioread32(desc) == 0) { /* sanity check */ 2991 iowrite32(0xffffffff, desc); 2992 if (ioread32(desc) > 0) { 2993 lp->features |= XAE_FEATURE_DMA_64BIT; 2994 addr_width = 64; 2995 dev_info(&pdev->dev, 2996 "autodetected 64-bit DMA range\n"); 2997 } 2998 iowrite32(0x0, desc); 2999 } 3000 } 3001 if (!IS_ENABLED(CONFIG_64BIT) && lp->features & XAE_FEATURE_DMA_64BIT) { 3002 dev_err(&pdev->dev, "64-bit addressable DMA is not compatible with 32-bit architecture\n"); 3003 ret = -EINVAL; 3004 goto cleanup_clk; 3005 } 3006 3007 ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(addr_width)); 3008 if (ret) { 3009 dev_err(&pdev->dev, "No suitable DMA available\n"); 3010 goto cleanup_clk; 3011 } 3012 netif_napi_add(ndev, &lp->napi_rx, axienet_rx_poll); 3013 netif_napi_add(ndev, &lp->napi_tx, axienet_tx_poll); 3014 } else { 3015 struct xilinx_vdma_config cfg; 3016 struct dma_chan *tx_chan; 3017 3018 lp->eth_irq = platform_get_irq_optional(pdev, 0); 3019 if (lp->eth_irq < 0 && lp->eth_irq != -ENXIO) { 3020 ret = lp->eth_irq; 3021 goto cleanup_clk; 3022 } 3023 tx_chan = dma_request_chan(lp->dev, "tx_chan0"); 3024 if (IS_ERR(tx_chan)) { 3025 ret = PTR_ERR(tx_chan); 3026 dev_err_probe(lp->dev, ret, "No Ethernet DMA (TX) channel found\n"); 3027 goto cleanup_clk; 3028 } 3029 3030 cfg.reset = 1; 3031 /* As name says VDMA but it has support for DMA channel reset */ 3032 ret = xilinx_vdma_channel_set_config(tx_chan, &cfg); 3033 if (ret < 0) { 3034 dev_err(&pdev->dev, "Reset channel failed\n"); 3035 dma_release_channel(tx_chan); 3036 goto cleanup_clk; 3037 } 3038 3039 dma_release_channel(tx_chan); 3040 lp->use_dmaengine = 1; 3041 } 3042 3043 if (lp->use_dmaengine) 3044 ndev->netdev_ops = &axienet_netdev_dmaengine_ops; 3045 else 3046 ndev->netdev_ops = &axienet_netdev_ops; 3047 /* Check for Ethernet core IRQ (optional) */ 3048 if (lp->eth_irq <= 0) 3049 dev_info(&pdev->dev, "Ethernet core IRQ not defined\n"); 3050 3051 /* Retrieve the MAC address */ 3052 ret = of_get_mac_address(pdev->dev.of_node, mac_addr); 3053 if (!ret) { 3054 axienet_set_mac_address(ndev, mac_addr); 3055 } else { 3056 dev_warn(&pdev->dev, "could not find MAC address property: %d\n", 3057 ret); 3058 axienet_set_mac_address(ndev, NULL); 3059 } 3060 3061 spin_lock_init(&lp->rx_cr_lock); 3062 spin_lock_init(&lp->tx_cr_lock); 3063 INIT_WORK(&lp->rx_dim.work, axienet_rx_dim_work); 3064 lp->rx_dim_enabled = true; 3065 lp->rx_dim.profile_ix = 1; 3066 lp->rx_dma_cr = axienet_calc_cr(lp, axienet_dim_coalesce_count_rx(lp), 3067 XAXIDMA_DFT_RX_USEC); 3068 lp->tx_dma_cr = axienet_calc_cr(lp, XAXIDMA_DFT_TX_THRESHOLD, 3069 XAXIDMA_DFT_TX_USEC); 3070 3071 ret = axienet_mdio_setup(lp); 3072 if (ret) 3073 dev_warn(&pdev->dev, 3074 "error registering MDIO bus: %d\n", ret); 3075 3076 if (lp->phy_mode == PHY_INTERFACE_MODE_SGMII || 3077 lp->phy_mode == PHY_INTERFACE_MODE_1000BASEX) { 3078 np = of_parse_phandle(pdev->dev.of_node, "pcs-handle", 0); 3079 if (!np) { 3080 /* Deprecated: Always use "pcs-handle" for pcs_phy. 3081 * Falling back to "phy-handle" here is only for 3082 * backward compatibility with old device trees. 3083 */ 3084 np = of_parse_phandle(pdev->dev.of_node, "phy-handle", 0); 3085 } 3086 if (!np) { 3087 dev_err(&pdev->dev, "pcs-handle (preferred) or phy-handle required for 1000BaseX/SGMII\n"); 3088 ret = -EINVAL; 3089 goto cleanup_mdio; 3090 } 3091 lp->pcs_phy = of_mdio_find_device(np); 3092 if (!lp->pcs_phy) { 3093 ret = -EPROBE_DEFER; 3094 of_node_put(np); 3095 goto cleanup_mdio; 3096 } 3097 of_node_put(np); 3098 lp->pcs.ops = &axienet_pcs_ops; 3099 lp->pcs.poll = true; 3100 } 3101 3102 lp->phylink_config.dev = &ndev->dev; 3103 lp->phylink_config.type = PHYLINK_NETDEV; 3104 lp->phylink_config.mac_managed_pm = true; 3105 lp->phylink_config.mac_capabilities = MAC_SYM_PAUSE | MAC_ASYM_PAUSE | 3106 MAC_10FD | MAC_100FD | MAC_1000FD; 3107 3108 __set_bit(lp->phy_mode, lp->phylink_config.supported_interfaces); 3109 if (lp->switch_x_sgmii) { 3110 __set_bit(PHY_INTERFACE_MODE_1000BASEX, 3111 lp->phylink_config.supported_interfaces); 3112 __set_bit(PHY_INTERFACE_MODE_SGMII, 3113 lp->phylink_config.supported_interfaces); 3114 } 3115 3116 lp->phylink = phylink_create(&lp->phylink_config, pdev->dev.fwnode, 3117 lp->phy_mode, 3118 &axienet_phylink_ops); 3119 if (IS_ERR(lp->phylink)) { 3120 ret = PTR_ERR(lp->phylink); 3121 dev_err(&pdev->dev, "phylink_create error (%i)\n", ret); 3122 goto cleanup_mdio; 3123 } 3124 3125 ret = register_netdev(lp->ndev); 3126 if (ret) { 3127 dev_err(lp->dev, "register_netdev() error (%i)\n", ret); 3128 goto cleanup_phylink; 3129 } 3130 3131 return 0; 3132 3133cleanup_phylink: 3134 phylink_destroy(lp->phylink); 3135 3136cleanup_mdio: 3137 if (lp->pcs_phy) 3138 put_device(&lp->pcs_phy->dev); 3139 if (lp->mii_bus) 3140 axienet_mdio_teardown(lp); 3141cleanup_clk: 3142 clk_bulk_disable_unprepare(XAE_NUM_MISC_CLOCKS, lp->misc_clks); 3143 clk_disable_unprepare(lp->axi_clk); 3144 3145free_netdev: 3146 free_netdev(ndev); 3147 3148 return ret; 3149} 3150 3151static void axienet_remove(struct platform_device *pdev) 3152{ 3153 struct net_device *ndev = platform_get_drvdata(pdev); 3154 struct axienet_local *lp = netdev_priv(ndev); 3155 3156 unregister_netdev(ndev); 3157 3158 if (lp->phylink) 3159 phylink_destroy(lp->phylink); 3160 3161 if (lp->pcs_phy) 3162 put_device(&lp->pcs_phy->dev); 3163 3164 axienet_mdio_teardown(lp); 3165 3166 clk_bulk_disable_unprepare(XAE_NUM_MISC_CLOCKS, lp->misc_clks); 3167 clk_disable_unprepare(lp->axi_clk); 3168 3169 free_netdev(ndev); 3170} 3171 3172static void axienet_shutdown(struct platform_device *pdev) 3173{ 3174 struct net_device *ndev = platform_get_drvdata(pdev); 3175 3176 rtnl_lock(); 3177 netif_device_detach(ndev); 3178 3179 if (netif_running(ndev)) 3180 dev_close(ndev); 3181 3182 rtnl_unlock(); 3183} 3184 3185static int axienet_suspend(struct device *dev) 3186{ 3187 struct net_device *ndev = dev_get_drvdata(dev); 3188 3189 if (!netif_running(ndev)) 3190 return 0; 3191 3192 netif_device_detach(ndev); 3193 3194 rtnl_lock(); 3195 axienet_stop(ndev); 3196 rtnl_unlock(); 3197 3198 return 0; 3199} 3200 3201static int axienet_resume(struct device *dev) 3202{ 3203 struct net_device *ndev = dev_get_drvdata(dev); 3204 3205 if (!netif_running(ndev)) 3206 return 0; 3207 3208 rtnl_lock(); 3209 axienet_open(ndev); 3210 rtnl_unlock(); 3211 3212 netif_device_attach(ndev); 3213 3214 return 0; 3215} 3216 3217static DEFINE_SIMPLE_DEV_PM_OPS(axienet_pm_ops, 3218 axienet_suspend, axienet_resume); 3219 3220static struct platform_driver axienet_driver = { 3221 .probe = axienet_probe, 3222 .remove = axienet_remove, 3223 .shutdown = axienet_shutdown, 3224 .driver = { 3225 .name = "xilinx_axienet", 3226 .pm = &axienet_pm_ops, 3227 .of_match_table = axienet_of_match, 3228 }, 3229}; 3230 3231module_platform_driver(axienet_driver); 3232 3233MODULE_DESCRIPTION("Xilinx Axi Ethernet driver"); 3234MODULE_AUTHOR("Xilinx"); 3235MODULE_LICENSE("GPL");
~/
Read-only file preview.