1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 3 * Copyright (C) 2015 Microchip Technology 4 */ 5 #include <linux/module.h> 6 #include <linux/netdevice.h> 7 #include <linux/etherdevice.h> 8 #include <linux/ethtool.h> 9 #include <linux/phylink.h> 10 #include <linux/usb.h> 11 #include <linux/crc32.h> 12 #include <linux/signal.h> 13 #include <linux/slab.h> 14 #include <linux/if_vlan.h> 15 #include <linux/uaccess.h> 16 #include <linux/linkmode.h> 17 #include <linux/list.h> 18 #include <linux/ip.h> 19 #include <linux/ipv6.h> 20 #include <linux/mdio.h> 21 #include <linux/phy.h> 22 #include <net/ip6_checksum.h> 23 #include <net/selftests.h> 24 #include <net/vxlan.h> 25 #include <linux/interrupt.h> 26 #include <linux/irqdomain.h> 27 #include <linux/irq.h> 28 #include <linux/irqchip/chained_irq.h> 29 #include <linux/microchipphy.h> 30 #include <linux/of_mdio.h> 31 #include <linux/of_net.h> 32 #include "lan78xx.h" 33 34 #define DRIVER_AUTHOR "WOOJUNG HUH <woojung.huh@microchip.com>" 35 #define DRIVER_DESC "LAN78XX USB 3.0 Gigabit Ethernet Devices" 36 #define DRIVER_NAME "lan78xx" 37 38 #define TX_TIMEOUT_JIFFIES (5 * HZ) 39 #define THROTTLE_JIFFIES (HZ / 8) 40 #define UNLINK_TIMEOUT_MS 3 41 42 #define RX_MAX_QUEUE_MEMORY (60 * 1518) 43 44 #define SS_USB_PKT_SIZE (1024) 45 #define HS_USB_PKT_SIZE (512) 46 #define FS_USB_PKT_SIZE (64) 47 48 #define MAX_RX_FIFO_SIZE (12 * 1024) 49 #define MAX_TX_FIFO_SIZE (12 * 1024) 50 51 #define FLOW_THRESHOLD(n) ((((n) + 511) / 512) & 0x7F) 52 #define FLOW_CTRL_THRESHOLD(on, off) ((FLOW_THRESHOLD(on) << 0) | \ 53 (FLOW_THRESHOLD(off) << 8)) 54 55 /* Flow control turned on when Rx FIFO level rises above this level (bytes) */ 56 #define FLOW_ON_SS 9216 57 #define FLOW_ON_HS 8704 58 59 /* Flow control turned off when Rx FIFO level falls below this level (bytes) */ 60 #define FLOW_OFF_SS 4096 61 #define FLOW_OFF_HS 1024 62 63 #define DEFAULT_BURST_CAP_SIZE (MAX_TX_FIFO_SIZE) 64 #define DEFAULT_BULK_IN_DELAY (0x0800) 65 #define MAX_SINGLE_PACKET_SIZE (9000) 66 #define DEFAULT_TX_CSUM_ENABLE (true) 67 #define DEFAULT_RX_CSUM_ENABLE (true) 68 #define DEFAULT_TSO_CSUM_ENABLE (true) 69 #define DEFAULT_VLAN_FILTER_ENABLE (true) 70 #define DEFAULT_VLAN_RX_OFFLOAD (true) 71 #define TX_ALIGNMENT (4) 72 #define RXW_PADDING 2 73 74 #define LAN78XX_USB_VENDOR_ID (0x0424) 75 #define LAN7800_USB_PRODUCT_ID (0x7800) 76 #define LAN7850_USB_PRODUCT_ID (0x7850) 77 #define LAN7801_USB_PRODUCT_ID (0x7801) 78 #define LAN78XX_EEPROM_MAGIC (0x78A5) 79 #define LAN78XX_OTP_MAGIC (0x78F3) 80 #define AT29M2AF_USB_VENDOR_ID (0x07C9) 81 #define AT29M2AF_USB_PRODUCT_ID (0x0012) 82 83 #define MII_READ 1 84 #define MII_WRITE 0 85 86 #define EEPROM_INDICATOR (0xA5) 87 #define EEPROM_MAC_OFFSET (0x01) 88 #define MAX_EEPROM_SIZE 512 89 #define OTP_INDICATOR_1 (0xF3) 90 #define OTP_INDICATOR_2 (0xF7) 91 92 #define WAKE_ALL (WAKE_PHY | WAKE_UCAST | \ 93 WAKE_MCAST | WAKE_BCAST | \ 94 WAKE_ARP | WAKE_MAGIC) 95 96 #define TX_URB_NUM 10 97 #define TX_SS_URB_NUM TX_URB_NUM 98 #define TX_HS_URB_NUM TX_URB_NUM 99 #define TX_FS_URB_NUM TX_URB_NUM 100 101 /* A single URB buffer must be large enough to hold a complete jumbo packet 102 */ 103 #define TX_SS_URB_SIZE (32 * 1024) 104 #define TX_HS_URB_SIZE (16 * 1024) 105 #define TX_FS_URB_SIZE (10 * 1024) 106 107 #define RX_SS_URB_NUM 30 108 #define RX_HS_URB_NUM 10 109 #define RX_FS_URB_NUM 10 110 #define RX_SS_URB_SIZE TX_SS_URB_SIZE 111 #define RX_HS_URB_SIZE TX_HS_URB_SIZE 112 #define RX_FS_URB_SIZE TX_FS_URB_SIZE 113 114 #define SS_BURST_CAP_SIZE RX_SS_URB_SIZE 115 #define SS_BULK_IN_DELAY 0x2000 116 #define HS_BURST_CAP_SIZE RX_HS_URB_SIZE 117 #define HS_BULK_IN_DELAY 0x2000 118 #define FS_BURST_CAP_SIZE RX_FS_URB_SIZE 119 #define FS_BULK_IN_DELAY 0x2000 120 121 #define TX_CMD_LEN 8 122 #define TX_SKB_MIN_LEN (TX_CMD_LEN + ETH_HLEN) 123 #define LAN78XX_TSO_SIZE(dev) ((dev)->tx_urb_size - TX_SKB_MIN_LEN) 124 125 #define RX_CMD_LEN 10 126 #define RX_SKB_MIN_LEN (RX_CMD_LEN + ETH_HLEN) 127 #define RX_MAX_FRAME_LEN(mtu) ((mtu) + ETH_HLEN + VLAN_HLEN) 128 129 /* USB related defines */ 130 #define BULK_IN_PIPE 1 131 #define BULK_OUT_PIPE 2 132 133 /* default autosuspend delay (mSec)*/ 134 #define DEFAULT_AUTOSUSPEND_DELAY (10 * 1000) 135 136 /* statistic update interval (mSec) */ 137 #define STAT_UPDATE_TIMER (1 * 1000) 138 139 /* time to wait for MAC or FCT to stop (jiffies) */ 140 #define HW_DISABLE_TIMEOUT (HZ / 10) 141 142 /* time to wait between polling MAC or FCT state (ms) */ 143 #define HW_DISABLE_DELAY_MS 1 144 145 /* defines interrupts from interrupt EP */ 146 #define MAX_INT_EP (32) 147 #define INT_EP_INTEP (31) 148 #define INT_EP_OTP_WR_DONE (28) 149 #define INT_EP_EEE_TX_LPI_START (26) 150 #define INT_EP_EEE_TX_LPI_STOP (25) 151 #define INT_EP_EEE_RX_LPI (24) 152 #define INT_EP_MAC_RESET_TIMEOUT (23) 153 #define INT_EP_RDFO (22) 154 #define INT_EP_TXE (21) 155 #define INT_EP_USB_STATUS (20) 156 #define INT_EP_TX_DIS (19) 157 #define INT_EP_RX_DIS (18) 158 #define INT_EP_PHY (17) 159 #define INT_EP_DP (16) 160 #define INT_EP_MAC_ERR (15) 161 #define INT_EP_TDFU (14) 162 #define INT_EP_TDFO (13) 163 #define INT_EP_UTX (12) 164 #define INT_EP_GPIO_11 (11) 165 #define INT_EP_GPIO_10 (10) 166 #define INT_EP_GPIO_9 (9) 167 #define INT_EP_GPIO_8 (8) 168 #define INT_EP_GPIO_7 (7) 169 #define INT_EP_GPIO_6 (6) 170 #define INT_EP_GPIO_5 (5) 171 #define INT_EP_GPIO_4 (4) 172 #define INT_EP_GPIO_3 (3) 173 #define INT_EP_GPIO_2 (2) 174 #define INT_EP_GPIO_1 (1) 175 #define INT_EP_GPIO_0 (0) 176 177 static const char lan78xx_gstrings[][ETH_GSTRING_LEN] = { 178 "RX FCS Errors", 179 "RX Alignment Errors", 180 "Rx Fragment Errors", 181 "RX Jabber Errors", 182 "RX Undersize Frame Errors", 183 "RX Oversize Frame Errors", 184 "RX Dropped Frames", 185 "RX Unicast Byte Count", 186 "RX Broadcast Byte Count", 187 "RX Multicast Byte Count", 188 "RX Unicast Frames", 189 "RX Broadcast Frames", 190 "RX Multicast Frames", 191 "RX Pause Frames", 192 "RX 64 Byte Frames", 193 "RX 65 - 127 Byte Frames", 194 "RX 128 - 255 Byte Frames", 195 "RX 256 - 511 Bytes Frames", 196 "RX 512 - 1023 Byte Frames", 197 "RX 1024 - 1518 Byte Frames", 198 "RX Greater 1518 Byte Frames", 199 "EEE RX LPI Transitions", 200 "EEE RX LPI Time", 201 "TX FCS Errors", 202 "TX Excess Deferral Errors", 203 "TX Carrier Errors", 204 "TX Bad Byte Count", 205 "TX Single Collisions", 206 "TX Multiple Collisions", 207 "TX Excessive Collision", 208 "TX Late Collisions", 209 "TX Unicast Byte Count", 210 "TX Broadcast Byte Count", 211 "TX Multicast Byte Count", 212 "TX Unicast Frames", 213 "TX Broadcast Frames", 214 "TX Multicast Frames", 215 "TX Pause Frames", 216 "TX 64 Byte Frames", 217 "TX 65 - 127 Byte Frames", 218 "TX 128 - 255 Byte Frames", 219 "TX 256 - 511 Bytes Frames", 220 "TX 512 - 1023 Byte Frames", 221 "TX 1024 - 1518 Byte Frames", 222 "TX Greater 1518 Byte Frames", 223 "EEE TX LPI Transitions", 224 "EEE TX LPI Time", 225 }; 226 227 struct lan78xx_statstage { 228 u32 rx_fcs_errors; 229 u32 rx_alignment_errors; 230 u32 rx_fragment_errors; 231 u32 rx_jabber_errors; 232 u32 rx_undersize_frame_errors; 233 u32 rx_oversize_frame_errors; 234 u32 rx_dropped_frames; 235 u32 rx_unicast_byte_count; 236 u32 rx_broadcast_byte_count; 237 u32 rx_multicast_byte_count; 238 u32 rx_unicast_frames; 239 u32 rx_broadcast_frames; 240 u32 rx_multicast_frames; 241 u32 rx_pause_frames; 242 u32 rx_64_byte_frames; 243 u32 rx_65_127_byte_frames; 244 u32 rx_128_255_byte_frames; 245 u32 rx_256_511_bytes_frames; 246 u32 rx_512_1023_byte_frames; 247 u32 rx_1024_1518_byte_frames; 248 u32 rx_greater_1518_byte_frames; 249 u32 eee_rx_lpi_transitions; 250 u32 eee_rx_lpi_time; 251 u32 tx_fcs_errors; 252 u32 tx_excess_deferral_errors; 253 u32 tx_carrier_errors; 254 u32 tx_bad_byte_count; 255 u32 tx_single_collisions; 256 u32 tx_multiple_collisions; 257 u32 tx_excessive_collision; 258 u32 tx_late_collisions; 259 u32 tx_unicast_byte_count; 260 u32 tx_broadcast_byte_count; 261 u32 tx_multicast_byte_count; 262 u32 tx_unicast_frames; 263 u32 tx_broadcast_frames; 264 u32 tx_multicast_frames; 265 u32 tx_pause_frames; 266 u32 tx_64_byte_frames; 267 u32 tx_65_127_byte_frames; 268 u32 tx_128_255_byte_frames; 269 u32 tx_256_511_bytes_frames; 270 u32 tx_512_1023_byte_frames; 271 u32 tx_1024_1518_byte_frames; 272 u32 tx_greater_1518_byte_frames; 273 u32 eee_tx_lpi_transitions; 274 u32 eee_tx_lpi_time; 275 }; 276 277 struct lan78xx_statstage64 { 278 u64 rx_fcs_errors; 279 u64 rx_alignment_errors; 280 u64 rx_fragment_errors; 281 u64 rx_jabber_errors; 282 u64 rx_undersize_frame_errors; 283 u64 rx_oversize_frame_errors; 284 u64 rx_dropped_frames; 285 u64 rx_unicast_byte_count; 286 u64 rx_broadcast_byte_count; 287 u64 rx_multicast_byte_count; 288 u64 rx_unicast_frames; 289 u64 rx_broadcast_frames; 290 u64 rx_multicast_frames; 291 u64 rx_pause_frames; 292 u64 rx_64_byte_frames; 293 u64 rx_65_127_byte_frames; 294 u64 rx_128_255_byte_frames; 295 u64 rx_256_511_bytes_frames; 296 u64 rx_512_1023_byte_frames; 297 u64 rx_1024_1518_byte_frames; 298 u64 rx_greater_1518_byte_frames; 299 u64 eee_rx_lpi_transitions; 300 u64 eee_rx_lpi_time; 301 u64 tx_fcs_errors; 302 u64 tx_excess_deferral_errors; 303 u64 tx_carrier_errors; 304 u64 tx_bad_byte_count; 305 u64 tx_single_collisions; 306 u64 tx_multiple_collisions; 307 u64 tx_excessive_collision; 308 u64 tx_late_collisions; 309 u64 tx_unicast_byte_count; 310 u64 tx_broadcast_byte_count; 311 u64 tx_multicast_byte_count; 312 u64 tx_unicast_frames; 313 u64 tx_broadcast_frames; 314 u64 tx_multicast_frames; 315 u64 tx_pause_frames; 316 u64 tx_64_byte_frames; 317 u64 tx_65_127_byte_frames; 318 u64 tx_128_255_byte_frames; 319 u64 tx_256_511_bytes_frames; 320 u64 tx_512_1023_byte_frames; 321 u64 tx_1024_1518_byte_frames; 322 u64 tx_greater_1518_byte_frames; 323 u64 eee_tx_lpi_transitions; 324 u64 eee_tx_lpi_time; 325 }; 326 327 static u32 lan78xx_regs[] = { 328 ID_REV, 329 INT_STS, 330 HW_CFG, 331 PMT_CTL, 332 E2P_CMD, 333 E2P_DATA, 334 USB_STATUS, 335 VLAN_TYPE, 336 MAC_CR, 337 MAC_RX, 338 MAC_TX, 339 FLOW, 340 ERR_STS, 341 MII_ACC, 342 MII_DATA, 343 EEE_TX_LPI_REQ_DLY, 344 EEE_TW_TX_SYS, 345 EEE_TX_LPI_REM_DLY, 346 WUCSR 347 }; 348 349 #define PHY_REG_SIZE (32 * sizeof(u32)) 350 351 struct lan78xx_net; 352 353 struct lan78xx_priv { 354 struct lan78xx_net *dev; 355 u32 rfe_ctl; 356 u32 mchash_table[DP_SEL_VHF_HASH_LEN]; /* multicast hash table */ 357 u32 pfilter_table[NUM_OF_MAF][2]; /* perfect filter table */ 358 u32 vlan_table[DP_SEL_VHF_VLAN_LEN]; 359 struct mutex dataport_mutex; /* for dataport access */ 360 spinlock_t rfe_ctl_lock; /* for rfe register access */ 361 struct work_struct set_multicast; 362 struct work_struct set_vlan; 363 u32 wol; 364 }; 365 366 enum skb_state { 367 illegal = 0, 368 tx_start, 369 tx_done, 370 rx_start, 371 rx_done, 372 rx_cleanup, 373 unlink_start 374 }; 375 376 struct skb_data { /* skb->cb is one of these */ 377 struct urb *urb; 378 struct lan78xx_net *dev; 379 enum skb_state state; 380 size_t length; 381 int num_of_packet; 382 }; 383 384 #define EVENT_TX_HALT 0 385 #define EVENT_RX_HALT 1 386 #define EVENT_RX_MEMORY 2 387 #define EVENT_STS_SPLIT 3 388 #define EVENT_PHY_INT_ACK 4 389 #define EVENT_RX_PAUSED 5 390 #define EVENT_DEV_WAKING 6 391 #define EVENT_DEV_ASLEEP 7 392 #define EVENT_DEV_OPEN 8 393 #define EVENT_STAT_UPDATE 9 394 #define EVENT_DEV_DISCONNECT 10 395 396 struct statstage { 397 struct mutex access_lock; /* for stats access */ 398 struct lan78xx_statstage saved; 399 struct lan78xx_statstage rollover_count; 400 struct lan78xx_statstage rollover_max; 401 struct lan78xx_statstage64 curr_stat; 402 }; 403 404 struct irq_domain_data { 405 struct irq_domain *irqdomain; 406 unsigned int phyirq; 407 struct irq_chip *irqchip; 408 irq_flow_handler_t irq_handler; 409 u32 irqenable; 410 struct mutex irq_lock; /* for irq bus access */ 411 }; 412 413 struct lan78xx_net { 414 struct net_device *net; 415 struct usb_device *udev; 416 struct usb_interface *intf; 417 418 unsigned int tx_pend_data_len; 419 size_t n_tx_urbs; 420 size_t n_rx_urbs; 421 size_t tx_urb_size; 422 size_t rx_urb_size; 423 424 struct sk_buff_head rxq_free; 425 struct sk_buff_head rxq; 426 struct sk_buff_head rxq_done; 427 struct sk_buff_head rxq_overflow; 428 struct sk_buff_head txq_free; 429 struct sk_buff_head txq; 430 struct sk_buff_head txq_pend; 431 432 struct napi_struct napi; 433 434 struct delayed_work wq; 435 436 int msg_enable; 437 438 struct urb *urb_intr; 439 struct usb_anchor deferred; 440 441 struct mutex dev_mutex; /* serialise open/stop wrt suspend/resume */ 442 struct mutex mdiobus_mutex; /* for MDIO bus access */ 443 unsigned int pipe_in, pipe_out, pipe_intr; 444 445 unsigned int bulk_in_delay; 446 unsigned int burst_cap; 447 448 unsigned long flags; 449 450 wait_queue_head_t *wait; 451 452 unsigned int maxpacket; 453 struct timer_list stat_monitor; 454 455 unsigned long data[5]; 456 457 u32 chipid; 458 u32 chiprev; 459 struct mii_bus *mdiobus; 460 phy_interface_t interface; 461 462 int delta; 463 struct statstage stats; 464 465 struct irq_domain_data domain_data; 466 467 struct phylink *phylink; 468 struct phylink_config phylink_config; 469 }; 470 471 /* use ethtool to change the level for any given device */ 472 static int msg_level = -1; 473 module_param(msg_level, int, 0); 474 MODULE_PARM_DESC(msg_level, "Override default message level"); 475 476 static struct sk_buff *lan78xx_get_buf(struct sk_buff_head *buf_pool) 477 { 478 if (skb_queue_empty(buf_pool)) 479 return NULL; 480 481 return skb_dequeue(buf_pool); 482 } 483 484 static void lan78xx_release_buf(struct sk_buff_head *buf_pool, 485 struct sk_buff *buf) 486 { 487 buf->data = buf->head; 488 skb_reset_tail_pointer(buf); 489 490 buf->len = 0; 491 buf->data_len = 0; 492 493 skb_queue_tail(buf_pool, buf); 494 } 495 496 static void lan78xx_free_buf_pool(struct sk_buff_head *buf_pool) 497 { 498 struct skb_data *entry; 499 struct sk_buff *buf; 500 501 while (!skb_queue_empty(buf_pool)) { 502 buf = skb_dequeue(buf_pool); 503 if (buf) { 504 entry = (struct skb_data *)buf->cb; 505 usb_free_urb(entry->urb); 506 dev_kfree_skb_any(buf); 507 } 508 } 509 } 510 511 static int lan78xx_alloc_buf_pool(struct sk_buff_head *buf_pool, 512 size_t n_urbs, size_t urb_size, 513 struct lan78xx_net *dev) 514 { 515 struct skb_data *entry; 516 struct sk_buff *buf; 517 struct urb *urb; 518 int i; 519 520 skb_queue_head_init(buf_pool); 521 522 for (i = 0; i < n_urbs; i++) { 523 buf = alloc_skb(urb_size, GFP_ATOMIC); 524 if (!buf) 525 goto error; 526 527 if (skb_linearize(buf) != 0) { 528 dev_kfree_skb_any(buf); 529 goto error; 530 } 531 532 urb = usb_alloc_urb(0, GFP_ATOMIC); 533 if (!urb) { 534 dev_kfree_skb_any(buf); 535 goto error; 536 } 537 538 entry = (struct skb_data *)buf->cb; 539 entry->urb = urb; 540 entry->dev = dev; 541 entry->length = 0; 542 entry->num_of_packet = 0; 543 544 skb_queue_tail(buf_pool, buf); 545 } 546 547 return 0; 548 549 error: 550 lan78xx_free_buf_pool(buf_pool); 551 552 return -ENOMEM; 553 } 554 555 static struct sk_buff *lan78xx_get_rx_buf(struct lan78xx_net *dev) 556 { 557 return lan78xx_get_buf(&dev->rxq_free); 558 } 559 560 static void lan78xx_release_rx_buf(struct lan78xx_net *dev, 561 struct sk_buff *rx_buf) 562 { 563 lan78xx_release_buf(&dev->rxq_free, rx_buf); 564 } 565 566 static void lan78xx_free_rx_resources(struct lan78xx_net *dev) 567 { 568 lan78xx_free_buf_pool(&dev->rxq_free); 569 } 570 571 static int lan78xx_alloc_rx_resources(struct lan78xx_net *dev) 572 { 573 return lan78xx_alloc_buf_pool(&dev->rxq_free, 574 dev->n_rx_urbs, dev->rx_urb_size, dev); 575 } 576 577 static struct sk_buff *lan78xx_get_tx_buf(struct lan78xx_net *dev) 578 { 579 return lan78xx_get_buf(&dev->txq_free); 580 } 581 582 static void lan78xx_release_tx_buf(struct lan78xx_net *dev, 583 struct sk_buff *tx_buf) 584 { 585 lan78xx_release_buf(&dev->txq_free, tx_buf); 586 } 587 588 static void lan78xx_free_tx_resources(struct lan78xx_net *dev) 589 { 590 lan78xx_free_buf_pool(&dev->txq_free); 591 } 592 593 static int lan78xx_alloc_tx_resources(struct lan78xx_net *dev) 594 { 595 return lan78xx_alloc_buf_pool(&dev->txq_free, 596 dev->n_tx_urbs, dev->tx_urb_size, dev); 597 } 598 599 static int lan78xx_read_reg(struct lan78xx_net *dev, u32 index, u32 *data) 600 { 601 u32 *buf; 602 int ret; 603 604 if (test_bit(EVENT_DEV_DISCONNECT, &dev->flags)) 605 return -ENODEV; 606 607 buf = kmalloc(sizeof(u32), GFP_KERNEL); 608 if (!buf) 609 return -ENOMEM; 610 611 ret = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), 612 USB_VENDOR_REQUEST_READ_REGISTER, 613 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, 614 0, index, buf, 4, USB_CTRL_GET_TIMEOUT); 615 if (likely(ret >= 0)) { 616 le32_to_cpus(buf); 617 *data = *buf; 618 } else if (net_ratelimit()) { 619 netdev_warn(dev->net, 620 "Failed to read register index 0x%08x. ret = %pe", 621 index, ERR_PTR(ret)); 622 } 623 624 kfree(buf); 625 626 return ret < 0 ? ret : 0; 627 } 628 629 static int lan78xx_write_reg(struct lan78xx_net *dev, u32 index, u32 data) 630 { 631 u32 *buf; 632 int ret; 633 634 if (test_bit(EVENT_DEV_DISCONNECT, &dev->flags)) 635 return -ENODEV; 636 637 buf = kmalloc(sizeof(u32), GFP_KERNEL); 638 if (!buf) 639 return -ENOMEM; 640 641 *buf = data; 642 cpu_to_le32s(buf); 643 644 ret = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), 645 USB_VENDOR_REQUEST_WRITE_REGISTER, 646 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, 647 0, index, buf, 4, USB_CTRL_SET_TIMEOUT); 648 if (unlikely(ret < 0) && 649 net_ratelimit()) { 650 netdev_warn(dev->net, 651 "Failed to write register index 0x%08x. ret = %pe", 652 index, ERR_PTR(ret)); 653 } 654 655 kfree(buf); 656 657 return ret < 0 ? ret : 0; 658 } 659 660 static int lan78xx_update_reg(struct lan78xx_net *dev, u32 reg, u32 mask, 661 u32 data) 662 { 663 int ret; 664 u32 buf; 665 666 ret = lan78xx_read_reg(dev, reg, &buf); 667 if (ret < 0) 668 return ret; 669 670 buf &= ~mask; 671 buf |= (mask & data); 672 673 return lan78xx_write_reg(dev, reg, buf); 674 } 675 676 static int lan78xx_read_stats(struct lan78xx_net *dev, 677 struct lan78xx_statstage *data) 678 { 679 int ret = 0; 680 int i; 681 struct lan78xx_statstage *stats; 682 u32 *src; 683 u32 *dst; 684 685 stats = kmalloc_obj(*stats); 686 if (!stats) 687 return -ENOMEM; 688 689 ret = usb_control_msg(dev->udev, 690 usb_rcvctrlpipe(dev->udev, 0), 691 USB_VENDOR_REQUEST_GET_STATS, 692 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, 693 0, 694 0, 695 (void *)stats, 696 sizeof(*stats), 697 USB_CTRL_SET_TIMEOUT); 698 if (likely(ret >= 0)) { 699 src = (u32 *)stats; 700 dst = (u32 *)data; 701 for (i = 0; i < sizeof(*stats) / sizeof(u32); i++) { 702 le32_to_cpus(&src[i]); 703 dst[i] = src[i]; 704 } 705 } else { 706 netdev_warn(dev->net, 707 "Failed to read stat ret = %d", ret); 708 } 709 710 kfree(stats); 711 712 return ret; 713 } 714 715 #define check_counter_rollover(struct1, dev_stats, member) \ 716 do { \ 717 if ((struct1)->member < (dev_stats).saved.member) \ 718 (dev_stats).rollover_count.member++; \ 719 } while (0) 720 721 static void lan78xx_check_stat_rollover(struct lan78xx_net *dev, 722 struct lan78xx_statstage *stats) 723 { 724 check_counter_rollover(stats, dev->stats, rx_fcs_errors); 725 check_counter_rollover(stats, dev->stats, rx_alignment_errors); 726 check_counter_rollover(stats, dev->stats, rx_fragment_errors); 727 check_counter_rollover(stats, dev->stats, rx_jabber_errors); 728 check_counter_rollover(stats, dev->stats, rx_undersize_frame_errors); 729 check_counter_rollover(stats, dev->stats, rx_oversize_frame_errors); 730 check_counter_rollover(stats, dev->stats, rx_dropped_frames); 731 check_counter_rollover(stats, dev->stats, rx_unicast_byte_count); 732 check_counter_rollover(stats, dev->stats, rx_broadcast_byte_count); 733 check_counter_rollover(stats, dev->stats, rx_multicast_byte_count); 734 check_counter_rollover(stats, dev->stats, rx_unicast_frames); 735 check_counter_rollover(stats, dev->stats, rx_broadcast_frames); 736 check_counter_rollover(stats, dev->stats, rx_multicast_frames); 737 check_counter_rollover(stats, dev->stats, rx_pause_frames); 738 check_counter_rollover(stats, dev->stats, rx_64_byte_frames); 739 check_counter_rollover(stats, dev->stats, rx_65_127_byte_frames); 740 check_counter_rollover(stats, dev->stats, rx_128_255_byte_frames); 741 check_counter_rollover(stats, dev->stats, rx_256_511_bytes_frames); 742 check_counter_rollover(stats, dev->stats, rx_512_1023_byte_frames); 743 check_counter_rollover(stats, dev->stats, rx_1024_1518_byte_frames); 744 check_counter_rollover(stats, dev->stats, rx_greater_1518_byte_frames); 745 check_counter_rollover(stats, dev->stats, eee_rx_lpi_transitions); 746 check_counter_rollover(stats, dev->stats, eee_rx_lpi_time); 747 check_counter_rollover(stats, dev->stats, tx_fcs_errors); 748 check_counter_rollover(stats, dev->stats, tx_excess_deferral_errors); 749 check_counter_rollover(stats, dev->stats, tx_carrier_errors); 750 check_counter_rollover(stats, dev->stats, tx_bad_byte_count); 751 check_counter_rollover(stats, dev->stats, tx_single_collisions); 752 check_counter_rollover(stats, dev->stats, tx_multiple_collisions); 753 check_counter_rollover(stats, dev->stats, tx_excessive_collision); 754 check_counter_rollover(stats, dev->stats, tx_late_collisions); 755 check_counter_rollover(stats, dev->stats, tx_unicast_byte_count); 756 check_counter_rollover(stats, dev->stats, tx_broadcast_byte_count); 757 check_counter_rollover(stats, dev->stats, tx_multicast_byte_count); 758 check_counter_rollover(stats, dev->stats, tx_unicast_frames); 759 check_counter_rollover(stats, dev->stats, tx_broadcast_frames); 760 check_counter_rollover(stats, dev->stats, tx_multicast_frames); 761 check_counter_rollover(stats, dev->stats, tx_pause_frames); 762 check_counter_rollover(stats, dev->stats, tx_64_byte_frames); 763 check_counter_rollover(stats, dev->stats, tx_65_127_byte_frames); 764 check_counter_rollover(stats, dev->stats, tx_128_255_byte_frames); 765 check_counter_rollover(stats, dev->stats, tx_256_511_bytes_frames); 766 check_counter_rollover(stats, dev->stats, tx_512_1023_byte_frames); 767 check_counter_rollover(stats, dev->stats, tx_1024_1518_byte_frames); 768 check_counter_rollover(stats, dev->stats, tx_greater_1518_byte_frames); 769 check_counter_rollover(stats, dev->stats, eee_tx_lpi_transitions); 770 check_counter_rollover(stats, dev->stats, eee_tx_lpi_time); 771 772 memcpy(&dev->stats.saved, stats, sizeof(struct lan78xx_statstage)); 773 } 774 775 static void lan78xx_update_stats(struct lan78xx_net *dev) 776 { 777 u32 *p, *count, *max; 778 u64 *data; 779 int i; 780 struct lan78xx_statstage lan78xx_stats; 781 782 if (usb_autopm_get_interface(dev->intf) < 0) 783 return; 784 785 p = (u32 *)&lan78xx_stats; 786 count = (u32 *)&dev->stats.rollover_count; 787 max = (u32 *)&dev->stats.rollover_max; 788 data = (u64 *)&dev->stats.curr_stat; 789 790 mutex_lock(&dev->stats.access_lock); 791 792 if (lan78xx_read_stats(dev, &lan78xx_stats) > 0) 793 lan78xx_check_stat_rollover(dev, &lan78xx_stats); 794 795 for (i = 0; i < (sizeof(lan78xx_stats) / (sizeof(u32))); i++) 796 data[i] = (u64)p[i] + ((u64)count[i] * ((u64)max[i] + 1)); 797 798 mutex_unlock(&dev->stats.access_lock); 799 800 usb_autopm_put_interface(dev->intf); 801 } 802 803 static int lan78xx_start_hw(struct lan78xx_net *dev, u32 reg, u32 hw_enable) 804 { 805 return lan78xx_update_reg(dev, reg, hw_enable, hw_enable); 806 } 807 808 static int lan78xx_stop_hw(struct lan78xx_net *dev, u32 reg, u32 hw_enabled, 809 u32 hw_disabled) 810 { 811 unsigned long timeout; 812 bool stopped = true; 813 int ret; 814 u32 buf; 815 816 /* Stop the h/w block (if not already stopped) */ 817 818 ret = lan78xx_read_reg(dev, reg, &buf); 819 if (ret < 0) 820 return ret; 821 822 if (buf & hw_enabled) { 823 buf &= ~hw_enabled; 824 825 ret = lan78xx_write_reg(dev, reg, buf); 826 if (ret < 0) 827 return ret; 828 829 stopped = false; 830 timeout = jiffies + HW_DISABLE_TIMEOUT; 831 do { 832 ret = lan78xx_read_reg(dev, reg, &buf); 833 if (ret < 0) 834 return ret; 835 836 if (buf & hw_disabled) 837 stopped = true; 838 else 839 msleep(HW_DISABLE_DELAY_MS); 840 } while (!stopped && !time_after(jiffies, timeout)); 841 } 842 843 return stopped ? 0 : -ETIMEDOUT; 844 } 845 846 static int lan78xx_flush_fifo(struct lan78xx_net *dev, u32 reg, u32 fifo_flush) 847 { 848 return lan78xx_update_reg(dev, reg, fifo_flush, fifo_flush); 849 } 850 851 static int lan78xx_start_tx_path(struct lan78xx_net *dev) 852 { 853 int ret; 854 855 netif_dbg(dev, drv, dev->net, "start tx path"); 856 857 /* Start the MAC transmitter */ 858 859 ret = lan78xx_start_hw(dev, MAC_TX, MAC_TX_TXEN_); 860 if (ret < 0) 861 return ret; 862 863 /* Start the Tx FIFO */ 864 865 ret = lan78xx_start_hw(dev, FCT_TX_CTL, FCT_TX_CTL_EN_); 866 if (ret < 0) 867 return ret; 868 869 return 0; 870 } 871 872 static int lan78xx_stop_tx_path(struct lan78xx_net *dev) 873 { 874 int ret; 875 876 netif_dbg(dev, drv, dev->net, "stop tx path"); 877 878 /* Stop the Tx FIFO */ 879 880 ret = lan78xx_stop_hw(dev, FCT_TX_CTL, FCT_TX_CTL_EN_, FCT_TX_CTL_DIS_); 881 if (ret < 0) 882 return ret; 883 884 /* Stop the MAC transmitter */ 885 886 ret = lan78xx_stop_hw(dev, MAC_TX, MAC_TX_TXEN_, MAC_TX_TXD_); 887 if (ret < 0) 888 return ret; 889 890 return 0; 891 } 892 893 /* The caller must ensure the Tx path is stopped before calling 894 * lan78xx_flush_tx_fifo(). 895 */ 896 static int lan78xx_flush_tx_fifo(struct lan78xx_net *dev) 897 { 898 return lan78xx_flush_fifo(dev, FCT_TX_CTL, FCT_TX_CTL_RST_); 899 } 900 901 static int lan78xx_start_rx_path(struct lan78xx_net *dev) 902 { 903 int ret; 904 905 netif_dbg(dev, drv, dev->net, "start rx path"); 906 907 /* Start the Rx FIFO */ 908 909 ret = lan78xx_start_hw(dev, FCT_RX_CTL, FCT_RX_CTL_EN_); 910 if (ret < 0) 911 return ret; 912 913 /* Start the MAC receiver*/ 914 915 ret = lan78xx_start_hw(dev, MAC_RX, MAC_RX_RXEN_); 916 if (ret < 0) 917 return ret; 918 919 return 0; 920 } 921 922 static int lan78xx_stop_rx_path(struct lan78xx_net *dev) 923 { 924 int ret; 925 926 netif_dbg(dev, drv, dev->net, "stop rx path"); 927 928 /* Stop the MAC receiver */ 929 930 ret = lan78xx_stop_hw(dev, MAC_RX, MAC_RX_RXEN_, MAC_RX_RXD_); 931 if (ret < 0) 932 return ret; 933 934 /* Stop the Rx FIFO */ 935 936 ret = lan78xx_stop_hw(dev, FCT_RX_CTL, FCT_RX_CTL_EN_, FCT_RX_CTL_DIS_); 937 if (ret < 0) 938 return ret; 939 940 return 0; 941 } 942 943 /* The caller must ensure the Rx path is stopped before calling 944 * lan78xx_flush_rx_fifo(). 945 */ 946 static int lan78xx_flush_rx_fifo(struct lan78xx_net *dev) 947 { 948 return lan78xx_flush_fifo(dev, FCT_RX_CTL, FCT_RX_CTL_RST_); 949 } 950 951 /* Loop until the read is completed with timeout called with mdiobus_mutex held */ 952 static int lan78xx_mdiobus_wait_not_busy(struct lan78xx_net *dev) 953 { 954 unsigned long start_time = jiffies; 955 u32 val; 956 int ret; 957 958 do { 959 ret = lan78xx_read_reg(dev, MII_ACC, &val); 960 if (ret < 0) 961 return ret; 962 963 if (!(val & MII_ACC_MII_BUSY_)) 964 return 0; 965 } while (!time_after(jiffies, start_time + HZ)); 966 967 return -ETIMEDOUT; 968 } 969 970 static inline u32 mii_access(int id, int index, int read) 971 { 972 u32 ret; 973 974 ret = ((u32)id << MII_ACC_PHY_ADDR_SHIFT_) & MII_ACC_PHY_ADDR_MASK_; 975 ret |= ((u32)index << MII_ACC_MIIRINDA_SHIFT_) & MII_ACC_MIIRINDA_MASK_; 976 if (read) 977 ret |= MII_ACC_MII_READ_; 978 else 979 ret |= MII_ACC_MII_WRITE_; 980 ret |= MII_ACC_MII_BUSY_; 981 982 return ret; 983 } 984 985 static int lan78xx_wait_eeprom(struct lan78xx_net *dev) 986 { 987 unsigned long start_time = jiffies; 988 u32 val; 989 int ret; 990 991 do { 992 ret = lan78xx_read_reg(dev, E2P_CMD, &val); 993 if (ret < 0) 994 return ret; 995 996 if (!(val & E2P_CMD_EPC_BUSY_) || 997 (val & E2P_CMD_EPC_TIMEOUT_)) 998 break; 999 usleep_range(40, 100); 1000 } while (!time_after(jiffies, start_time + HZ)); 1001 1002 if (val & (E2P_CMD_EPC_TIMEOUT_ | E2P_CMD_EPC_BUSY_)) { 1003 netdev_warn(dev->net, "EEPROM read operation timeout"); 1004 return -ETIMEDOUT; 1005 } 1006 1007 return 0; 1008 } 1009 1010 static int lan78xx_eeprom_confirm_not_busy(struct lan78xx_net *dev) 1011 { 1012 unsigned long start_time = jiffies; 1013 u32 val; 1014 int ret; 1015 1016 do { 1017 ret = lan78xx_read_reg(dev, E2P_CMD, &val); 1018 if (ret < 0) 1019 return ret; 1020 1021 if (!(val & E2P_CMD_EPC_BUSY_)) 1022 return 0; 1023 1024 usleep_range(40, 100); 1025 } while (!time_after(jiffies, start_time + HZ)); 1026 1027 netdev_warn(dev->net, "EEPROM is busy"); 1028 return -ETIMEDOUT; 1029 } 1030 1031 static int lan78xx_read_raw_eeprom(struct lan78xx_net *dev, u32 offset, 1032 u32 length, u8 *data) 1033 { 1034 u32 val, saved; 1035 int i, ret; 1036 1037 /* depends on chip, some EEPROM pins are muxed with LED function. 1038 * disable & restore LED function to access EEPROM. 1039 */ 1040 ret = lan78xx_read_reg(dev, HW_CFG, &val); 1041 if (ret < 0) 1042 return ret; 1043 1044 saved = val; 1045 if (dev->chipid == ID_REV_CHIP_ID_7800_) { 1046 val &= ~(HW_CFG_LED1_EN_ | HW_CFG_LED0_EN_); 1047 ret = lan78xx_write_reg(dev, HW_CFG, val); 1048 if (ret < 0) 1049 return ret; 1050 } 1051 1052 ret = lan78xx_eeprom_confirm_not_busy(dev); 1053 if (ret == -ETIMEDOUT) 1054 goto read_raw_eeprom_done; 1055 /* If USB fails, there is nothing to do */ 1056 if (ret < 0) 1057 return ret; 1058 1059 for (i = 0; i < length; i++) { 1060 val = E2P_CMD_EPC_BUSY_ | E2P_CMD_EPC_CMD_READ_; 1061 val |= (offset & E2P_CMD_EPC_ADDR_MASK_); 1062 ret = lan78xx_write_reg(dev, E2P_CMD, val); 1063 if (ret < 0) 1064 return ret; 1065 1066 ret = lan78xx_wait_eeprom(dev); 1067 /* Looks like not USB specific error, try to recover */ 1068 if (ret == -ETIMEDOUT) 1069 goto read_raw_eeprom_done; 1070 /* If USB fails, there is nothing to do */ 1071 if (ret < 0) 1072 return ret; 1073 1074 ret = lan78xx_read_reg(dev, E2P_DATA, &val); 1075 if (ret < 0) 1076 return ret; 1077 1078 data[i] = val & 0xFF; 1079 offset++; 1080 } 1081 1082 read_raw_eeprom_done: 1083 if (dev->chipid == ID_REV_CHIP_ID_7800_) { 1084 int rc = lan78xx_write_reg(dev, HW_CFG, saved); 1085 /* If USB fails, there is nothing to do */ 1086 if (rc < 0) 1087 return rc; 1088 } 1089 return ret; 1090 } 1091 1092 static int lan78xx_read_eeprom(struct lan78xx_net *dev, u32 offset, 1093 u32 length, u8 *data) 1094 { 1095 int ret; 1096 u8 sig; 1097 1098 ret = lan78xx_read_raw_eeprom(dev, 0, 1, &sig); 1099 if (ret < 0) 1100 return ret; 1101 1102 if (sig != EEPROM_INDICATOR) 1103 return -ENODATA; 1104 1105 return lan78xx_read_raw_eeprom(dev, offset, length, data); 1106 } 1107 1108 static int lan78xx_write_raw_eeprom(struct lan78xx_net *dev, u32 offset, 1109 u32 length, u8 *data) 1110 { 1111 u32 val; 1112 u32 saved; 1113 int i, ret; 1114 1115 /* depends on chip, some EEPROM pins are muxed with LED function. 1116 * disable & restore LED function to access EEPROM. 1117 */ 1118 ret = lan78xx_read_reg(dev, HW_CFG, &val); 1119 if (ret < 0) 1120 return ret; 1121 1122 saved = val; 1123 if (dev->chipid == ID_REV_CHIP_ID_7800_) { 1124 val &= ~(HW_CFG_LED1_EN_ | HW_CFG_LED0_EN_); 1125 ret = lan78xx_write_reg(dev, HW_CFG, val); 1126 if (ret < 0) 1127 return ret; 1128 } 1129 1130 ret = lan78xx_eeprom_confirm_not_busy(dev); 1131 /* Looks like not USB specific error, try to recover */ 1132 if (ret == -ETIMEDOUT) 1133 goto write_raw_eeprom_done; 1134 /* If USB fails, there is nothing to do */ 1135 if (ret < 0) 1136 return ret; 1137 1138 /* Issue write/erase enable command */ 1139 val = E2P_CMD_EPC_BUSY_ | E2P_CMD_EPC_CMD_EWEN_; 1140 ret = lan78xx_write_reg(dev, E2P_CMD, val); 1141 if (ret < 0) 1142 return ret; 1143 1144 ret = lan78xx_wait_eeprom(dev); 1145 /* Looks like not USB specific error, try to recover */ 1146 if (ret == -ETIMEDOUT) 1147 goto write_raw_eeprom_done; 1148 /* If USB fails, there is nothing to do */ 1149 if (ret < 0) 1150 return ret; 1151 1152 for (i = 0; i < length; i++) { 1153 /* Fill data register */ 1154 val = data[i]; 1155 ret = lan78xx_write_reg(dev, E2P_DATA, val); 1156 if (ret < 0) 1157 return ret; 1158 1159 /* Send "write" command */ 1160 val = E2P_CMD_EPC_BUSY_ | E2P_CMD_EPC_CMD_WRITE_; 1161 val |= (offset & E2P_CMD_EPC_ADDR_MASK_); 1162 ret = lan78xx_write_reg(dev, E2P_CMD, val); 1163 if (ret < 0) 1164 return ret; 1165 1166 ret = lan78xx_wait_eeprom(dev); 1167 /* Looks like not USB specific error, try to recover */ 1168 if (ret == -ETIMEDOUT) 1169 goto write_raw_eeprom_done; 1170 /* If USB fails, there is nothing to do */ 1171 if (ret < 0) 1172 return ret; 1173 1174 offset++; 1175 } 1176 1177 write_raw_eeprom_done: 1178 if (dev->chipid == ID_REV_CHIP_ID_7800_) { 1179 int rc = lan78xx_write_reg(dev, HW_CFG, saved); 1180 /* If USB fails, there is nothing to do */ 1181 if (rc < 0) 1182 return rc; 1183 } 1184 return ret; 1185 } 1186 1187 static int lan78xx_read_raw_otp(struct lan78xx_net *dev, u32 offset, 1188 u32 length, u8 *data) 1189 { 1190 unsigned long timeout; 1191 int ret, i; 1192 u32 buf; 1193 1194 ret = lan78xx_read_reg(dev, OTP_PWR_DN, &buf); 1195 if (ret < 0) 1196 return ret; 1197 1198 if (buf & OTP_PWR_DN_PWRDN_N_) { 1199 /* clear it and wait to be cleared */ 1200 ret = lan78xx_write_reg(dev, OTP_PWR_DN, 0); 1201 if (ret < 0) 1202 return ret; 1203 1204 timeout = jiffies + HZ; 1205 do { 1206 usleep_range(1, 10); 1207 ret = lan78xx_read_reg(dev, OTP_PWR_DN, &buf); 1208 if (ret < 0) 1209 return ret; 1210 1211 if (time_after(jiffies, timeout)) { 1212 netdev_warn(dev->net, 1213 "timeout on OTP_PWR_DN"); 1214 return -ETIMEDOUT; 1215 } 1216 } while (buf & OTP_PWR_DN_PWRDN_N_); 1217 } 1218 1219 for (i = 0; i < length; i++) { 1220 ret = lan78xx_write_reg(dev, OTP_ADDR1, 1221 ((offset + i) >> 8) & OTP_ADDR1_15_11); 1222 if (ret < 0) 1223 return ret; 1224 1225 ret = lan78xx_write_reg(dev, OTP_ADDR2, 1226 ((offset + i) & OTP_ADDR2_10_3)); 1227 if (ret < 0) 1228 return ret; 1229 1230 ret = lan78xx_write_reg(dev, OTP_FUNC_CMD, OTP_FUNC_CMD_READ_); 1231 if (ret < 0) 1232 return ret; 1233 1234 ret = lan78xx_write_reg(dev, OTP_CMD_GO, OTP_CMD_GO_GO_); 1235 if (ret < 0) 1236 return ret; 1237 1238 timeout = jiffies + HZ; 1239 do { 1240 udelay(1); 1241 ret = lan78xx_read_reg(dev, OTP_STATUS, &buf); 1242 if (ret < 0) 1243 return ret; 1244 1245 if (time_after(jiffies, timeout)) { 1246 netdev_warn(dev->net, 1247 "timeout on OTP_STATUS"); 1248 return -ETIMEDOUT; 1249 } 1250 } while (buf & OTP_STATUS_BUSY_); 1251 1252 ret = lan78xx_read_reg(dev, OTP_RD_DATA, &buf); 1253 if (ret < 0) 1254 return ret; 1255 1256 data[i] = (u8)(buf & 0xFF); 1257 } 1258 1259 return 0; 1260 } 1261 1262 static int lan78xx_write_raw_otp(struct lan78xx_net *dev, u32 offset, 1263 u32 length, u8 *data) 1264 { 1265 int i; 1266 u32 buf; 1267 unsigned long timeout; 1268 int ret; 1269 1270 ret = lan78xx_read_reg(dev, OTP_PWR_DN, &buf); 1271 if (ret < 0) 1272 return ret; 1273 1274 if (buf & OTP_PWR_DN_PWRDN_N_) { 1275 /* clear it and wait to be cleared */ 1276 ret = lan78xx_write_reg(dev, OTP_PWR_DN, 0); 1277 if (ret < 0) 1278 return ret; 1279 1280 timeout = jiffies + HZ; 1281 do { 1282 udelay(1); 1283 ret = lan78xx_read_reg(dev, OTP_PWR_DN, &buf); 1284 if (ret < 0) 1285 return ret; 1286 1287 if (time_after(jiffies, timeout)) { 1288 netdev_warn(dev->net, 1289 "timeout on OTP_PWR_DN completion"); 1290 return -ETIMEDOUT; 1291 } 1292 } while (buf & OTP_PWR_DN_PWRDN_N_); 1293 } 1294 1295 /* set to BYTE program mode */ 1296 ret = lan78xx_write_reg(dev, OTP_PRGM_MODE, OTP_PRGM_MODE_BYTE_); 1297 if (ret < 0) 1298 return ret; 1299 1300 for (i = 0; i < length; i++) { 1301 ret = lan78xx_write_reg(dev, OTP_ADDR1, 1302 ((offset + i) >> 8) & OTP_ADDR1_15_11); 1303 if (ret < 0) 1304 return ret; 1305 1306 ret = lan78xx_write_reg(dev, OTP_ADDR2, 1307 ((offset + i) & OTP_ADDR2_10_3)); 1308 if (ret < 0) 1309 return ret; 1310 1311 ret = lan78xx_write_reg(dev, OTP_PRGM_DATA, data[i]); 1312 if (ret < 0) 1313 return ret; 1314 1315 ret = lan78xx_write_reg(dev, OTP_TST_CMD, OTP_TST_CMD_PRGVRFY_); 1316 if (ret < 0) 1317 return ret; 1318 1319 ret = lan78xx_write_reg(dev, OTP_CMD_GO, OTP_CMD_GO_GO_); 1320 if (ret < 0) 1321 return ret; 1322 1323 timeout = jiffies + HZ; 1324 do { 1325 udelay(1); 1326 ret = lan78xx_read_reg(dev, OTP_STATUS, &buf); 1327 if (ret < 0) 1328 return ret; 1329 1330 if (time_after(jiffies, timeout)) { 1331 netdev_warn(dev->net, 1332 "Timeout on OTP_STATUS completion"); 1333 return -ETIMEDOUT; 1334 } 1335 } while (buf & OTP_STATUS_BUSY_); 1336 } 1337 1338 return 0; 1339 } 1340 1341 static int lan78xx_read_otp(struct lan78xx_net *dev, u32 offset, 1342 u32 length, u8 *data) 1343 { 1344 u8 sig; 1345 int ret; 1346 1347 ret = lan78xx_read_raw_otp(dev, 0, 1, &sig); 1348 1349 if (ret == 0) { 1350 if (sig == OTP_INDICATOR_2) 1351 offset += 0x100; 1352 else if (sig != OTP_INDICATOR_1) 1353 ret = -EINVAL; 1354 if (!ret) 1355 ret = lan78xx_read_raw_otp(dev, offset, length, data); 1356 } 1357 1358 return ret; 1359 } 1360 1361 static int lan78xx_dataport_wait_not_busy(struct lan78xx_net *dev) 1362 { 1363 int i, ret; 1364 1365 for (i = 0; i < 100; i++) { 1366 u32 dp_sel; 1367 1368 ret = lan78xx_read_reg(dev, DP_SEL, &dp_sel); 1369 if (unlikely(ret < 0)) 1370 return ret; 1371 1372 if (dp_sel & DP_SEL_DPRDY_) 1373 return 0; 1374 1375 usleep_range(40, 100); 1376 } 1377 1378 netdev_warn(dev->net, "%s timed out", __func__); 1379 1380 return -ETIMEDOUT; 1381 } 1382 1383 static int lan78xx_dataport_write(struct lan78xx_net *dev, u32 ram_select, 1384 u32 addr, u32 length, u32 *buf) 1385 { 1386 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); 1387 int i, ret; 1388 1389 ret = usb_autopm_get_interface(dev->intf); 1390 if (ret < 0) 1391 return ret; 1392 1393 mutex_lock(&pdata->dataport_mutex); 1394 1395 ret = lan78xx_dataport_wait_not_busy(dev); 1396 if (ret < 0) 1397 goto dataport_write; 1398 1399 ret = lan78xx_update_reg(dev, DP_SEL, DP_SEL_RSEL_MASK_, ram_select); 1400 if (ret < 0) 1401 goto dataport_write; 1402 1403 for (i = 0; i < length; i++) { 1404 ret = lan78xx_write_reg(dev, DP_ADDR, addr + i); 1405 if (ret < 0) 1406 goto dataport_write; 1407 1408 ret = lan78xx_write_reg(dev, DP_DATA, buf[i]); 1409 if (ret < 0) 1410 goto dataport_write; 1411 1412 ret = lan78xx_write_reg(dev, DP_CMD, DP_CMD_WRITE_); 1413 if (ret < 0) 1414 goto dataport_write; 1415 1416 ret = lan78xx_dataport_wait_not_busy(dev); 1417 if (ret < 0) 1418 goto dataport_write; 1419 } 1420 1421 dataport_write: 1422 if (ret < 0) 1423 netdev_warn(dev->net, "dataport write failed %pe", ERR_PTR(ret)); 1424 1425 mutex_unlock(&pdata->dataport_mutex); 1426 usb_autopm_put_interface(dev->intf); 1427 1428 return ret; 1429 } 1430 1431 static void lan78xx_set_addr_filter(struct lan78xx_priv *pdata, 1432 int index, u8 addr[ETH_ALEN]) 1433 { 1434 u32 temp; 1435 1436 if ((pdata) && (index > 0) && (index < NUM_OF_MAF)) { 1437 temp = addr[3]; 1438 temp = addr[2] | (temp << 8); 1439 temp = addr[1] | (temp << 8); 1440 temp = addr[0] | (temp << 8); 1441 pdata->pfilter_table[index][1] = temp; 1442 temp = addr[5]; 1443 temp = addr[4] | (temp << 8); 1444 temp |= MAF_HI_VALID_ | MAF_HI_TYPE_DST_; 1445 pdata->pfilter_table[index][0] = temp; 1446 } 1447 } 1448 1449 /* returns hash bit number for given MAC address */ 1450 static inline u32 lan78xx_hash(char addr[ETH_ALEN]) 1451 { 1452 return (ether_crc(ETH_ALEN, addr) >> 23) & 0x1ff; 1453 } 1454 1455 static int lan78xx_write_mchash_table(struct lan78xx_net *dev) 1456 { 1457 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); 1458 1459 return lan78xx_dataport_write(dev, DP_SEL_RSEL_VLAN_DA_, 1460 DP_SEL_VHF_VLAN_LEN, 1461 DP_SEL_VHF_HASH_LEN, pdata->mchash_table); 1462 } 1463 1464 static void lan78xx_deferred_multicast_write(struct work_struct *param) 1465 { 1466 struct lan78xx_priv *pdata = 1467 container_of(param, struct lan78xx_priv, set_multicast); 1468 struct lan78xx_net *dev = pdata->dev; 1469 int i, ret; 1470 1471 netif_dbg(dev, drv, dev->net, "deferred multicast write 0x%08x\n", 1472 pdata->rfe_ctl); 1473 1474 ret = lan78xx_write_mchash_table(dev); 1475 if (ret < 0) 1476 goto multicast_write_done; 1477 1478 for (i = 1; i < NUM_OF_MAF; i++) { 1479 ret = lan78xx_write_reg(dev, MAF_HI(i), 0); 1480 if (ret < 0) 1481 goto multicast_write_done; 1482 1483 ret = lan78xx_write_reg(dev, MAF_LO(i), 1484 pdata->pfilter_table[i][1]); 1485 if (ret < 0) 1486 goto multicast_write_done; 1487 1488 ret = lan78xx_write_reg(dev, MAF_HI(i), 1489 pdata->pfilter_table[i][0]); 1490 if (ret < 0) 1491 goto multicast_write_done; 1492 } 1493 1494 ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); 1495 1496 multicast_write_done: 1497 if (ret < 0) 1498 netdev_warn(dev->net, "multicast write failed %pe", ERR_PTR(ret)); 1499 return; 1500 } 1501 1502 static void lan78xx_update_vlan_filter(struct lan78xx_priv *pdata, 1503 struct net_device *netdev, 1504 netdev_features_t features) 1505 { 1506 if ((features & NETIF_F_HW_VLAN_CTAG_FILTER) && 1507 !(netdev->flags & IFF_PROMISC)) 1508 pdata->rfe_ctl |= RFE_CTL_VLAN_FILTER_; 1509 else 1510 pdata->rfe_ctl &= ~RFE_CTL_VLAN_FILTER_; 1511 } 1512 1513 static void lan78xx_set_multicast(struct net_device *netdev) 1514 { 1515 struct lan78xx_net *dev = netdev_priv(netdev); 1516 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); 1517 unsigned long flags; 1518 int i; 1519 1520 spin_lock_irqsave(&pdata->rfe_ctl_lock, flags); 1521 1522 pdata->rfe_ctl &= ~(RFE_CTL_UCAST_EN_ | RFE_CTL_MCAST_EN_ | 1523 RFE_CTL_DA_PERFECT_ | RFE_CTL_MCAST_HASH_); 1524 1525 for (i = 0; i < DP_SEL_VHF_HASH_LEN; i++) 1526 pdata->mchash_table[i] = 0; 1527 1528 /* pfilter_table[0] has own HW address */ 1529 for (i = 1; i < NUM_OF_MAF; i++) { 1530 pdata->pfilter_table[i][0] = 0; 1531 pdata->pfilter_table[i][1] = 0; 1532 } 1533 1534 pdata->rfe_ctl |= RFE_CTL_BCAST_EN_; 1535 1536 if (dev->net->flags & IFF_PROMISC) { 1537 netif_dbg(dev, drv, dev->net, "promiscuous mode enabled"); 1538 pdata->rfe_ctl |= RFE_CTL_MCAST_EN_ | RFE_CTL_UCAST_EN_; 1539 } else { 1540 if (dev->net->flags & IFF_ALLMULTI) { 1541 netif_dbg(dev, drv, dev->net, 1542 "receive all multicast enabled"); 1543 pdata->rfe_ctl |= RFE_CTL_MCAST_EN_; 1544 } 1545 } 1546 1547 lan78xx_update_vlan_filter(pdata, dev->net, dev->net->features); 1548 1549 if (netdev_mc_count(dev->net)) { 1550 struct netdev_hw_addr *ha; 1551 int i; 1552 1553 netif_dbg(dev, drv, dev->net, "receive multicast hash filter"); 1554 1555 pdata->rfe_ctl |= RFE_CTL_DA_PERFECT_; 1556 1557 i = 1; 1558 netdev_for_each_mc_addr(ha, netdev) { 1559 /* set first 32 into Perfect Filter */ 1560 if (i < 33) { 1561 lan78xx_set_addr_filter(pdata, i, ha->addr); 1562 } else { 1563 u32 bitnum = lan78xx_hash(ha->addr); 1564 1565 pdata->mchash_table[bitnum / 32] |= 1566 (1 << (bitnum % 32)); 1567 pdata->rfe_ctl |= RFE_CTL_MCAST_HASH_; 1568 } 1569 i++; 1570 } 1571 } 1572 1573 spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags); 1574 1575 /* defer register writes to a sleepable context */ 1576 schedule_work(&pdata->set_multicast); 1577 } 1578 1579 static void lan78xx_rx_urb_submit_all(struct lan78xx_net *dev); 1580 static int lan78xx_write_vlan_table(struct lan78xx_net *dev); 1581 1582 static int lan78xx_mac_reset(struct lan78xx_net *dev) 1583 { 1584 unsigned long start_time = jiffies; 1585 u32 val; 1586 int ret; 1587 1588 mutex_lock(&dev->mdiobus_mutex); 1589 1590 /* Resetting the device while there is activity on the MDIO 1591 * bus can result in the MAC interface locking up and not 1592 * completing register access transactions. 1593 */ 1594 ret = lan78xx_mdiobus_wait_not_busy(dev); 1595 if (ret < 0) 1596 goto exit_unlock; 1597 1598 ret = lan78xx_read_reg(dev, MAC_CR, &val); 1599 if (ret < 0) 1600 goto exit_unlock; 1601 1602 val |= MAC_CR_RST_; 1603 ret = lan78xx_write_reg(dev, MAC_CR, val); 1604 if (ret < 0) 1605 goto exit_unlock; 1606 1607 /* Wait for the reset to complete before allowing any further 1608 * MAC register accesses otherwise the MAC may lock up. 1609 */ 1610 do { 1611 ret = lan78xx_read_reg(dev, MAC_CR, &val); 1612 if (ret < 0) 1613 goto exit_unlock; 1614 1615 if (!(val & MAC_CR_RST_)) { 1616 ret = 0; 1617 goto exit_unlock; 1618 } 1619 } while (!time_after(jiffies, start_time + HZ)); 1620 1621 ret = -ETIMEDOUT; 1622 exit_unlock: 1623 mutex_unlock(&dev->mdiobus_mutex); 1624 1625 return ret; 1626 } 1627 1628 /** 1629 * lan78xx_phy_int_ack - Acknowledge PHY interrupt 1630 * @dev: pointer to the LAN78xx device structure 1631 * 1632 * This function acknowledges the PHY interrupt by setting the 1633 * INT_STS_PHY_INT_ bit in the interrupt status register (INT_STS). 1634 * 1635 * Return: 0 on success or a negative error code on failure. 1636 */ 1637 static int lan78xx_phy_int_ack(struct lan78xx_net *dev) 1638 { 1639 return lan78xx_write_reg(dev, INT_STS, INT_STS_PHY_INT_); 1640 } 1641 1642 /* some work can't be done in tasklets, so we use keventd 1643 * 1644 * NOTE: annoying asymmetry: if it's active, schedule_work() fails, 1645 * but tasklet_schedule() doesn't. hope the failure is rare. 1646 */ 1647 static void lan78xx_defer_kevent(struct lan78xx_net *dev, int work) 1648 { 1649 set_bit(work, &dev->flags); 1650 if (!schedule_delayed_work(&dev->wq, 0)) 1651 netdev_err(dev->net, "kevent %d may have been dropped\n", work); 1652 } 1653 1654 static void lan78xx_status(struct lan78xx_net *dev, struct urb *urb) 1655 { 1656 u32 intdata; 1657 1658 if (urb->actual_length != 4) { 1659 netdev_warn(dev->net, 1660 "unexpected urb length %d", urb->actual_length); 1661 return; 1662 } 1663 1664 intdata = get_unaligned_le32(urb->transfer_buffer); 1665 1666 if (intdata & INT_ENP_PHY_INT) { 1667 netif_dbg(dev, link, dev->net, "PHY INTR: 0x%08x\n", intdata); 1668 lan78xx_defer_kevent(dev, EVENT_PHY_INT_ACK); 1669 1670 if (dev->domain_data.phyirq > 0) 1671 generic_handle_irq_safe(dev->domain_data.phyirq); 1672 } else { 1673 netdev_warn(dev->net, 1674 "unexpected interrupt: 0x%08x\n", intdata); 1675 } 1676 } 1677 1678 static int lan78xx_ethtool_get_eeprom_len(struct net_device *netdev) 1679 { 1680 return MAX_EEPROM_SIZE; 1681 } 1682 1683 static int lan78xx_ethtool_get_eeprom(struct net_device *netdev, 1684 struct ethtool_eeprom *ee, u8 *data) 1685 { 1686 struct lan78xx_net *dev = netdev_priv(netdev); 1687 int ret; 1688 1689 ret = usb_autopm_get_interface(dev->intf); 1690 if (ret) 1691 return ret; 1692 1693 ee->magic = LAN78XX_EEPROM_MAGIC; 1694 1695 ret = lan78xx_read_raw_eeprom(dev, ee->offset, ee->len, data); 1696 1697 usb_autopm_put_interface(dev->intf); 1698 1699 return ret; 1700 } 1701 1702 static int lan78xx_ethtool_set_eeprom(struct net_device *netdev, 1703 struct ethtool_eeprom *ee, u8 *data) 1704 { 1705 struct lan78xx_net *dev = netdev_priv(netdev); 1706 int ret; 1707 1708 ret = usb_autopm_get_interface(dev->intf); 1709 if (ret) 1710 return ret; 1711 1712 /* Invalid EEPROM_INDICATOR at offset zero will result in a failure 1713 * to load data from EEPROM 1714 */ 1715 if (ee->magic == LAN78XX_EEPROM_MAGIC) { 1716 ret = lan78xx_write_raw_eeprom(dev, ee->offset, ee->len, data); 1717 } else if ((ee->magic == LAN78XX_OTP_MAGIC) && 1718 (ee->offset == 0) && 1719 (ee->len == 512) && 1720 (data[0] == OTP_INDICATOR_1)) { 1721 ret = lan78xx_write_raw_otp(dev, ee->offset, ee->len, data); 1722 } else { 1723 ret = -EINVAL; 1724 } 1725 1726 usb_autopm_put_interface(dev->intf); 1727 1728 return ret; 1729 } 1730 1731 static void lan78xx_get_strings(struct net_device *netdev, u32 stringset, 1732 u8 *data) 1733 { 1734 if (stringset == ETH_SS_STATS) 1735 memcpy(data, lan78xx_gstrings, sizeof(lan78xx_gstrings)); 1736 else if (stringset == ETH_SS_TEST) 1737 net_selftest_get_strings(data); 1738 } 1739 1740 static int lan78xx_get_sset_count(struct net_device *netdev, int sset) 1741 { 1742 if (sset == ETH_SS_STATS) 1743 return ARRAY_SIZE(lan78xx_gstrings); 1744 else if (sset == ETH_SS_TEST) 1745 return net_selftest_get_count(); 1746 else 1747 return -EOPNOTSUPP; 1748 } 1749 1750 static void lan78xx_get_stats(struct net_device *netdev, 1751 struct ethtool_stats *stats, u64 *data) 1752 { 1753 struct lan78xx_net *dev = netdev_priv(netdev); 1754 1755 lan78xx_update_stats(dev); 1756 1757 mutex_lock(&dev->stats.access_lock); 1758 memcpy(data, &dev->stats.curr_stat, sizeof(dev->stats.curr_stat)); 1759 mutex_unlock(&dev->stats.access_lock); 1760 } 1761 1762 static void lan78xx_get_wol(struct net_device *netdev, 1763 struct ethtool_wolinfo *wol) 1764 { 1765 struct lan78xx_net *dev = netdev_priv(netdev); 1766 int ret; 1767 u32 buf; 1768 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); 1769 1770 if (!netdev->phydev) { 1771 wol->supported = 0; 1772 wol->wolopts = 0; 1773 return; 1774 } 1775 1776 if (usb_autopm_get_interface(dev->intf) < 0) 1777 return; 1778 1779 ret = lan78xx_read_reg(dev, USB_CFG0, &buf); 1780 if (unlikely(ret < 0)) { 1781 netdev_warn(dev->net, "failed to get WoL %pe", ERR_PTR(ret)); 1782 wol->supported = 0; 1783 wol->wolopts = 0; 1784 } else { 1785 if (buf & USB_CFG_RMT_WKP_) { 1786 wol->supported = WAKE_ALL; 1787 wol->wolopts = pdata->wol; 1788 } else { 1789 wol->supported = 0; 1790 wol->wolopts = 0; 1791 } 1792 } 1793 1794 usb_autopm_put_interface(dev->intf); 1795 } 1796 1797 static int lan78xx_set_wol(struct net_device *netdev, 1798 struct ethtool_wolinfo *wol) 1799 { 1800 struct lan78xx_net *dev = netdev_priv(netdev); 1801 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); 1802 int ret; 1803 1804 if (wol->wolopts & ~WAKE_ALL) 1805 return -EINVAL; 1806 1807 if (!netdev->phydev) 1808 return -EOPNOTSUPP; 1809 1810 ret = usb_autopm_get_interface(dev->intf); 1811 if (ret < 0) 1812 return ret; 1813 1814 pdata->wol = wol->wolopts; 1815 1816 ret = device_set_wakeup_enable(&dev->udev->dev, (bool)wol->wolopts); 1817 if (ret < 0) 1818 goto exit_pm_put; 1819 1820 ret = phy_ethtool_set_wol(netdev->phydev, wol); 1821 1822 exit_pm_put: 1823 usb_autopm_put_interface(dev->intf); 1824 1825 return ret; 1826 } 1827 1828 static int lan78xx_get_eee(struct net_device *net, struct ethtool_keee *edata) 1829 { 1830 struct lan78xx_net *dev = netdev_priv(net); 1831 1832 return phylink_ethtool_get_eee(dev->phylink, edata); 1833 } 1834 1835 static int lan78xx_set_eee(struct net_device *net, struct ethtool_keee *edata) 1836 { 1837 struct lan78xx_net *dev = netdev_priv(net); 1838 1839 return phylink_ethtool_set_eee(dev->phylink, edata); 1840 } 1841 1842 static void lan78xx_get_drvinfo(struct net_device *net, 1843 struct ethtool_drvinfo *info) 1844 { 1845 struct lan78xx_net *dev = netdev_priv(net); 1846 1847 strscpy(info->driver, DRIVER_NAME, sizeof(info->driver)); 1848 usb_make_path(dev->udev, info->bus_info, sizeof(info->bus_info)); 1849 } 1850 1851 static u32 lan78xx_get_msglevel(struct net_device *net) 1852 { 1853 struct lan78xx_net *dev = netdev_priv(net); 1854 1855 return dev->msg_enable; 1856 } 1857 1858 static void lan78xx_set_msglevel(struct net_device *net, u32 level) 1859 { 1860 struct lan78xx_net *dev = netdev_priv(net); 1861 1862 dev->msg_enable = level; 1863 } 1864 1865 static int lan78xx_get_link_ksettings(struct net_device *net, 1866 struct ethtool_link_ksettings *cmd) 1867 { 1868 struct lan78xx_net *dev = netdev_priv(net); 1869 1870 return phylink_ethtool_ksettings_get(dev->phylink, cmd); 1871 } 1872 1873 static int lan78xx_set_link_ksettings(struct net_device *net, 1874 const struct ethtool_link_ksettings *cmd) 1875 { 1876 struct lan78xx_net *dev = netdev_priv(net); 1877 1878 return phylink_ethtool_ksettings_set(dev->phylink, cmd); 1879 } 1880 1881 static void lan78xx_get_pause(struct net_device *net, 1882 struct ethtool_pauseparam *pause) 1883 { 1884 struct lan78xx_net *dev = netdev_priv(net); 1885 1886 phylink_ethtool_get_pauseparam(dev->phylink, pause); 1887 } 1888 1889 static int lan78xx_set_pause(struct net_device *net, 1890 struct ethtool_pauseparam *pause) 1891 { 1892 struct lan78xx_net *dev = netdev_priv(net); 1893 1894 return phylink_ethtool_set_pauseparam(dev->phylink, pause); 1895 } 1896 1897 static int lan78xx_get_regs_len(struct net_device *netdev) 1898 { 1899 return sizeof(lan78xx_regs); 1900 } 1901 1902 static void 1903 lan78xx_get_regs(struct net_device *netdev, struct ethtool_regs *regs, 1904 void *buf) 1905 { 1906 struct lan78xx_net *dev = netdev_priv(netdev); 1907 unsigned int data_count = 0; 1908 u32 *data = buf; 1909 int i, ret; 1910 1911 /* Read Device/MAC registers */ 1912 for (i = 0; i < ARRAY_SIZE(lan78xx_regs); i++) { 1913 ret = lan78xx_read_reg(dev, lan78xx_regs[i], &data[i]); 1914 if (ret < 0) { 1915 netdev_warn(dev->net, 1916 "failed to read register 0x%08x\n", 1917 lan78xx_regs[i]); 1918 goto clean_data; 1919 } 1920 1921 data_count++; 1922 } 1923 1924 return; 1925 1926 clean_data: 1927 memset(data, 0, data_count * sizeof(u32)); 1928 } 1929 1930 static const struct ethtool_ops lan78xx_ethtool_ops = { 1931 .get_link = ethtool_op_get_link, 1932 .nway_reset = phy_ethtool_nway_reset, 1933 .get_drvinfo = lan78xx_get_drvinfo, 1934 .get_msglevel = lan78xx_get_msglevel, 1935 .set_msglevel = lan78xx_set_msglevel, 1936 .get_eeprom_len = lan78xx_ethtool_get_eeprom_len, 1937 .get_eeprom = lan78xx_ethtool_get_eeprom, 1938 .set_eeprom = lan78xx_ethtool_set_eeprom, 1939 .get_ethtool_stats = lan78xx_get_stats, 1940 .get_sset_count = lan78xx_get_sset_count, 1941 .self_test = net_selftest, 1942 .get_strings = lan78xx_get_strings, 1943 .get_wol = lan78xx_get_wol, 1944 .set_wol = lan78xx_set_wol, 1945 .get_ts_info = ethtool_op_get_ts_info, 1946 .get_eee = lan78xx_get_eee, 1947 .set_eee = lan78xx_set_eee, 1948 .get_pauseparam = lan78xx_get_pause, 1949 .set_pauseparam = lan78xx_set_pause, 1950 .get_link_ksettings = lan78xx_get_link_ksettings, 1951 .set_link_ksettings = lan78xx_set_link_ksettings, 1952 .get_regs_len = lan78xx_get_regs_len, 1953 .get_regs = lan78xx_get_regs, 1954 }; 1955 1956 static int lan78xx_init_mac_address(struct lan78xx_net *dev) 1957 { 1958 u32 addr_lo, addr_hi; 1959 u8 addr[6]; 1960 int ret; 1961 1962 ret = lan78xx_read_reg(dev, RX_ADDRL, &addr_lo); 1963 if (ret < 0) 1964 return ret; 1965 1966 ret = lan78xx_read_reg(dev, RX_ADDRH, &addr_hi); 1967 if (ret < 0) 1968 return ret; 1969 1970 addr[0] = addr_lo & 0xFF; 1971 addr[1] = (addr_lo >> 8) & 0xFF; 1972 addr[2] = (addr_lo >> 16) & 0xFF; 1973 addr[3] = (addr_lo >> 24) & 0xFF; 1974 addr[4] = addr_hi & 0xFF; 1975 addr[5] = (addr_hi >> 8) & 0xFF; 1976 1977 if (!is_valid_ether_addr(addr)) { 1978 if (!eth_platform_get_mac_address(&dev->udev->dev, addr)) { 1979 /* valid address present in Device Tree */ 1980 netif_dbg(dev, ifup, dev->net, 1981 "MAC address read from Device Tree"); 1982 } else if (((lan78xx_read_eeprom(dev, EEPROM_MAC_OFFSET, 1983 ETH_ALEN, addr) == 0) || 1984 (lan78xx_read_otp(dev, EEPROM_MAC_OFFSET, 1985 ETH_ALEN, addr) == 0)) && 1986 is_valid_ether_addr(addr)) { 1987 /* eeprom values are valid so use them */ 1988 netif_dbg(dev, ifup, dev->net, 1989 "MAC address read from EEPROM"); 1990 } else { 1991 /* generate random MAC */ 1992 eth_random_addr(addr); 1993 netif_dbg(dev, ifup, dev->net, 1994 "MAC address set to random addr"); 1995 } 1996 1997 addr_lo = addr[0] | (addr[1] << 8) | 1998 (addr[2] << 16) | (addr[3] << 24); 1999 addr_hi = addr[4] | (addr[5] << 8); 2000 2001 ret = lan78xx_write_reg(dev, RX_ADDRL, addr_lo); 2002 if (ret < 0) 2003 return ret; 2004 2005 ret = lan78xx_write_reg(dev, RX_ADDRH, addr_hi); 2006 if (ret < 0) 2007 return ret; 2008 } 2009 2010 ret = lan78xx_write_reg(dev, MAF_LO(0), addr_lo); 2011 if (ret < 0) 2012 return ret; 2013 2014 ret = lan78xx_write_reg(dev, MAF_HI(0), addr_hi | MAF_HI_VALID_); 2015 if (ret < 0) 2016 return ret; 2017 2018 eth_hw_addr_set(dev->net, addr); 2019 2020 return 0; 2021 } 2022 2023 /* MDIO read and write wrappers for phylib */ 2024 static int lan78xx_mdiobus_read(struct mii_bus *bus, int phy_id, int idx) 2025 { 2026 struct lan78xx_net *dev = bus->priv; 2027 u32 val, addr; 2028 int ret; 2029 2030 ret = usb_autopm_get_interface(dev->intf); 2031 if (ret < 0) 2032 return ret; 2033 2034 mutex_lock(&dev->mdiobus_mutex); 2035 2036 /* confirm MII not busy */ 2037 ret = lan78xx_mdiobus_wait_not_busy(dev); 2038 if (ret < 0) 2039 goto done; 2040 2041 /* set the address, index & direction (read from PHY) */ 2042 addr = mii_access(phy_id, idx, MII_READ); 2043 ret = lan78xx_write_reg(dev, MII_ACC, addr); 2044 if (ret < 0) 2045 goto done; 2046 2047 ret = lan78xx_mdiobus_wait_not_busy(dev); 2048 if (ret < 0) 2049 goto done; 2050 2051 ret = lan78xx_read_reg(dev, MII_DATA, &val); 2052 if (ret < 0) 2053 goto done; 2054 2055 ret = (int)(val & 0xFFFF); 2056 2057 done: 2058 mutex_unlock(&dev->mdiobus_mutex); 2059 usb_autopm_put_interface(dev->intf); 2060 2061 return ret; 2062 } 2063 2064 static int lan78xx_mdiobus_write(struct mii_bus *bus, int phy_id, int idx, 2065 u16 regval) 2066 { 2067 struct lan78xx_net *dev = bus->priv; 2068 u32 val, addr; 2069 int ret; 2070 2071 ret = usb_autopm_get_interface(dev->intf); 2072 if (ret < 0) 2073 return ret; 2074 2075 mutex_lock(&dev->mdiobus_mutex); 2076 2077 /* confirm MII not busy */ 2078 ret = lan78xx_mdiobus_wait_not_busy(dev); 2079 if (ret < 0) 2080 goto done; 2081 2082 val = (u32)regval; 2083 ret = lan78xx_write_reg(dev, MII_DATA, val); 2084 if (ret < 0) 2085 goto done; 2086 2087 /* set the address, index & direction (write to PHY) */ 2088 addr = mii_access(phy_id, idx, MII_WRITE); 2089 ret = lan78xx_write_reg(dev, MII_ACC, addr); 2090 if (ret < 0) 2091 goto done; 2092 2093 ret = lan78xx_mdiobus_wait_not_busy(dev); 2094 if (ret < 0) 2095 goto done; 2096 2097 done: 2098 mutex_unlock(&dev->mdiobus_mutex); 2099 usb_autopm_put_interface(dev->intf); 2100 return ret; 2101 } 2102 2103 static int lan78xx_mdio_init(struct lan78xx_net *dev) 2104 { 2105 struct device_node *node; 2106 int ret; 2107 2108 dev->mdiobus = mdiobus_alloc(); 2109 if (!dev->mdiobus) { 2110 netdev_err(dev->net, "can't allocate MDIO bus\n"); 2111 return -ENOMEM; 2112 } 2113 2114 dev->mdiobus->priv = (void *)dev; 2115 dev->mdiobus->read = lan78xx_mdiobus_read; 2116 dev->mdiobus->write = lan78xx_mdiobus_write; 2117 dev->mdiobus->name = "lan78xx-mdiobus"; 2118 dev->mdiobus->parent = &dev->udev->dev; 2119 2120 snprintf(dev->mdiobus->id, MII_BUS_ID_SIZE, "usb-%03d:%03d", 2121 dev->udev->bus->busnum, dev->udev->devnum); 2122 2123 switch (dev->chipid) { 2124 case ID_REV_CHIP_ID_7800_: 2125 case ID_REV_CHIP_ID_7850_: 2126 /* set to internal PHY id */ 2127 dev->mdiobus->phy_mask = ~(1 << 1); 2128 break; 2129 case ID_REV_CHIP_ID_7801_: 2130 break; 2131 } 2132 2133 node = of_get_child_by_name(dev->udev->dev.of_node, "mdio"); 2134 ret = of_mdiobus_register(dev->mdiobus, node); 2135 of_node_put(node); 2136 if (ret) { 2137 netdev_err(dev->net, "can't register MDIO bus\n"); 2138 goto exit1; 2139 } 2140 2141 netdev_dbg(dev->net, "registered mdiobus bus %s\n", dev->mdiobus->id); 2142 return 0; 2143 exit1: 2144 mdiobus_free(dev->mdiobus); 2145 return ret; 2146 } 2147 2148 static void lan78xx_remove_mdio(struct lan78xx_net *dev) 2149 { 2150 mdiobus_unregister(dev->mdiobus); 2151 mdiobus_free(dev->mdiobus); 2152 } 2153 2154 static int irq_map(struct irq_domain *d, unsigned int irq, 2155 irq_hw_number_t hwirq) 2156 { 2157 struct irq_domain_data *data = d->host_data; 2158 2159 irq_set_chip_data(irq, data); 2160 irq_set_chip_and_handler(irq, data->irqchip, data->irq_handler); 2161 irq_set_noprobe(irq); 2162 2163 return 0; 2164 } 2165 2166 static void irq_unmap(struct irq_domain *d, unsigned int irq) 2167 { 2168 irq_set_chip_and_handler(irq, NULL, NULL); 2169 irq_set_chip_data(irq, NULL); 2170 } 2171 2172 static const struct irq_domain_ops chip_domain_ops = { 2173 .map = irq_map, 2174 .unmap = irq_unmap, 2175 }; 2176 2177 static void lan78xx_irq_mask(struct irq_data *irqd) 2178 { 2179 struct irq_domain_data *data = irq_data_get_irq_chip_data(irqd); 2180 2181 data->irqenable &= ~BIT(irqd_to_hwirq(irqd)); 2182 } 2183 2184 static void lan78xx_irq_unmask(struct irq_data *irqd) 2185 { 2186 struct irq_domain_data *data = irq_data_get_irq_chip_data(irqd); 2187 2188 data->irqenable |= BIT(irqd_to_hwirq(irqd)); 2189 } 2190 2191 static void lan78xx_irq_bus_lock(struct irq_data *irqd) 2192 { 2193 struct irq_domain_data *data = irq_data_get_irq_chip_data(irqd); 2194 2195 mutex_lock(&data->irq_lock); 2196 } 2197 2198 static void lan78xx_irq_bus_sync_unlock(struct irq_data *irqd) 2199 { 2200 struct irq_domain_data *data = irq_data_get_irq_chip_data(irqd); 2201 struct lan78xx_net *dev = 2202 container_of(data, struct lan78xx_net, domain_data); 2203 u32 buf; 2204 int ret; 2205 2206 /* call register access here because irq_bus_lock & irq_bus_sync_unlock 2207 * are only two callbacks executed in non-atomic contex. 2208 */ 2209 ret = lan78xx_read_reg(dev, INT_EP_CTL, &buf); 2210 if (ret < 0) 2211 goto irq_bus_sync_unlock; 2212 2213 if (buf != data->irqenable) 2214 ret = lan78xx_write_reg(dev, INT_EP_CTL, data->irqenable); 2215 2216 irq_bus_sync_unlock: 2217 if (ret < 0) 2218 netdev_err(dev->net, "Failed to sync IRQ enable register: %pe\n", 2219 ERR_PTR(ret)); 2220 2221 mutex_unlock(&data->irq_lock); 2222 } 2223 2224 static struct irq_chip lan78xx_irqchip = { 2225 .name = "lan78xx-irqs", 2226 .irq_mask = lan78xx_irq_mask, 2227 .irq_unmask = lan78xx_irq_unmask, 2228 .irq_bus_lock = lan78xx_irq_bus_lock, 2229 .irq_bus_sync_unlock = lan78xx_irq_bus_sync_unlock, 2230 }; 2231 2232 static int lan78xx_setup_irq_domain(struct lan78xx_net *dev) 2233 { 2234 struct irq_domain *irqdomain; 2235 unsigned int irqmap = 0; 2236 u32 buf; 2237 int ret = 0; 2238 2239 mutex_init(&dev->domain_data.irq_lock); 2240 2241 ret = lan78xx_read_reg(dev, INT_EP_CTL, &buf); 2242 if (ret < 0) 2243 return ret; 2244 2245 dev->domain_data.irqenable = buf; 2246 2247 dev->domain_data.irqchip = &lan78xx_irqchip; 2248 dev->domain_data.irq_handler = handle_simple_irq; 2249 2250 irqdomain = irq_domain_create_simple(dev_fwnode(dev->udev->dev.parent), MAX_INT_EP, 0, 2251 &chip_domain_ops, &dev->domain_data); 2252 if (irqdomain) { 2253 /* create mapping for PHY interrupt */ 2254 irqmap = irq_create_mapping(irqdomain, INT_EP_PHY); 2255 if (!irqmap) { 2256 irq_domain_remove(irqdomain); 2257 2258 irqdomain = NULL; 2259 ret = -EINVAL; 2260 } 2261 } else { 2262 ret = -EINVAL; 2263 } 2264 2265 dev->domain_data.irqdomain = irqdomain; 2266 dev->domain_data.phyirq = irqmap; 2267 2268 return ret; 2269 } 2270 2271 static void lan78xx_remove_irq_domain(struct lan78xx_net *dev) 2272 { 2273 if (dev->domain_data.phyirq > 0) { 2274 irq_dispose_mapping(dev->domain_data.phyirq); 2275 2276 if (dev->domain_data.irqdomain) 2277 irq_domain_remove(dev->domain_data.irqdomain); 2278 } 2279 dev->domain_data.phyirq = 0; 2280 dev->domain_data.irqdomain = NULL; 2281 } 2282 2283 static void lan78xx_mac_config(struct phylink_config *config, unsigned int mode, 2284 const struct phylink_link_state *state) 2285 { 2286 struct net_device *net = to_net_dev(config->dev); 2287 struct lan78xx_net *dev = netdev_priv(net); 2288 u32 mac_cr = 0; 2289 int ret; 2290 2291 /* Check if the mode is supported */ 2292 if (mode != MLO_AN_FIXED && mode != MLO_AN_PHY) { 2293 netdev_err(net, "Unsupported negotiation mode: %u\n", mode); 2294 return; 2295 } 2296 2297 switch (state->interface) { 2298 case PHY_INTERFACE_MODE_GMII: 2299 mac_cr |= MAC_CR_GMII_EN_; 2300 break; 2301 case PHY_INTERFACE_MODE_RGMII: 2302 case PHY_INTERFACE_MODE_RGMII_ID: 2303 case PHY_INTERFACE_MODE_RGMII_TXID: 2304 case PHY_INTERFACE_MODE_RGMII_RXID: 2305 break; 2306 default: 2307 netdev_warn(net, "Unsupported interface mode: %d\n", 2308 state->interface); 2309 return; 2310 } 2311 2312 ret = lan78xx_update_reg(dev, MAC_CR, MAC_CR_GMII_EN_, mac_cr); 2313 if (ret < 0) 2314 netdev_err(net, "Failed to config MAC with error %pe\n", 2315 ERR_PTR(ret)); 2316 } 2317 2318 static void lan78xx_mac_link_down(struct phylink_config *config, 2319 unsigned int mode, phy_interface_t interface) 2320 { 2321 struct net_device *net = to_net_dev(config->dev); 2322 struct lan78xx_net *dev = netdev_priv(net); 2323 int ret; 2324 2325 netif_stop_queue(net); 2326 2327 /* MAC reset will not de-assert TXEN/RXEN, we need to stop them 2328 * manually before reset. TX and RX should be disabled before running 2329 * link_up sequence. 2330 */ 2331 ret = lan78xx_stop_tx_path(dev); 2332 if (ret < 0) 2333 goto link_down_fail; 2334 2335 ret = lan78xx_stop_rx_path(dev); 2336 if (ret < 0) 2337 goto link_down_fail; 2338 2339 /* MAC reset seems to not affect MAC configuration, no idea if it is 2340 * really needed, but it was done in previous driver version. So, leave 2341 * it here. 2342 */ 2343 ret = lan78xx_mac_reset(dev); 2344 if (ret < 0) 2345 goto link_down_fail; 2346 2347 return; 2348 2349 link_down_fail: 2350 netdev_err(dev->net, "Failed to set MAC down with error %pe\n", 2351 ERR_PTR(ret)); 2352 } 2353 2354 /** 2355 * lan78xx_configure_usb - Configure USB link power settings 2356 * @dev: pointer to the LAN78xx device structure 2357 * @speed: negotiated Ethernet link speed (in Mbps) 2358 * 2359 * This function configures U1/U2 link power management for SuperSpeed 2360 * USB devices based on the current Ethernet link speed. It uses the 2361 * USB_CFG1 register to enable or disable U1 and U2 low-power states. 2362 * 2363 * Note: Only LAN7800 and LAN7801 support SuperSpeed (USB 3.x). 2364 * LAN7850 is a High-Speed-only (USB 2.0) device and is skipped. 2365 * 2366 * Return: 0 on success or a negative error code on failure. 2367 */ 2368 static int lan78xx_configure_usb(struct lan78xx_net *dev, int speed) 2369 { 2370 u32 mask, val; 2371 int ret; 2372 2373 /* Only configure USB settings for SuperSpeed devices */ 2374 if (dev->udev->speed != USB_SPEED_SUPER) 2375 return 0; 2376 2377 /* LAN7850 does not support USB 3.x */ 2378 if (dev->chipid == ID_REV_CHIP_ID_7850_) { 2379 netdev_warn_once(dev->net, "Unexpected SuperSpeed for LAN7850 (USB 2.0 only)\n"); 2380 return 0; 2381 } 2382 2383 switch (speed) { 2384 case SPEED_1000: 2385 /* Disable U2, enable U1 */ 2386 ret = lan78xx_update_reg(dev, USB_CFG1, 2387 USB_CFG1_DEV_U2_INIT_EN_, 0); 2388 if (ret < 0) 2389 return ret; 2390 2391 return lan78xx_update_reg(dev, USB_CFG1, 2392 USB_CFG1_DEV_U1_INIT_EN_, 2393 USB_CFG1_DEV_U1_INIT_EN_); 2394 2395 case SPEED_100: 2396 case SPEED_10: 2397 /* Enable both U1 and U2 */ 2398 mask = USB_CFG1_DEV_U1_INIT_EN_ | USB_CFG1_DEV_U2_INIT_EN_; 2399 val = mask; 2400 return lan78xx_update_reg(dev, USB_CFG1, mask, val); 2401 2402 default: 2403 netdev_warn(dev->net, "Unsupported link speed: %d\n", speed); 2404 return -EINVAL; 2405 } 2406 } 2407 2408 /** 2409 * lan78xx_configure_flowcontrol - Set MAC and FIFO flow control configuration 2410 * @dev: pointer to the LAN78xx device structure 2411 * @tx_pause: enable transmission of pause frames 2412 * @rx_pause: enable reception of pause frames 2413 * 2414 * This function configures the LAN78xx flow control settings by writing 2415 * to the FLOW and FCT_FLOW registers. The pause time is set to the 2416 * maximum allowed value (65535 quanta). FIFO thresholds are selected 2417 * based on USB speed. 2418 * 2419 * The Pause Time field is measured in units of 512-bit times (quanta): 2420 * - At 1 Gbps: 1 quanta = 512 ns → max ~33.6 ms pause 2421 * - At 100 Mbps: 1 quanta = 5.12 µs → max ~335 ms pause 2422 * - At 10 Mbps: 1 quanta = 51.2 µs → max ~3.3 s pause 2423 * 2424 * Flow control thresholds (FCT_FLOW) are used to trigger pause/resume: 2425 * - RXUSED is the number of bytes used in the RX FIFO 2426 * - Flow is turned ON when RXUSED ≥ FLOW_ON threshold 2427 * - Flow is turned OFF when RXUSED ≤ FLOW_OFF threshold 2428 * - Both thresholds are encoded in units of 512 bytes (rounded up) 2429 * 2430 * Thresholds differ by USB speed because available USB bandwidth 2431 * affects how fast packets can be drained from the RX FIFO: 2432 * - USB 3.x (SuperSpeed): 2433 * FLOW_ON = 9216 bytes → 18 units 2434 * FLOW_OFF = 4096 bytes → 8 units 2435 * - USB 2.0 (High-Speed): 2436 * FLOW_ON = 8704 bytes → 17 units 2437 * FLOW_OFF = 1024 bytes → 2 units 2438 * 2439 * Note: The FCT_FLOW register must be configured before enabling TX pause 2440 * (i.e., before setting FLOW_CR_TX_FCEN_), as required by the hardware. 2441 * 2442 * Return: 0 on success or a negative error code on failure. 2443 */ 2444 static int lan78xx_configure_flowcontrol(struct lan78xx_net *dev, 2445 bool tx_pause, bool rx_pause) 2446 { 2447 /* Use maximum pause time: 65535 quanta (512-bit times) */ 2448 const u32 pause_time_quanta = 65535; 2449 u32 fct_flow = 0; 2450 u32 flow = 0; 2451 int ret; 2452 2453 /* Prepare MAC flow control bits */ 2454 if (tx_pause) 2455 flow |= FLOW_CR_TX_FCEN_ | pause_time_quanta; 2456 2457 if (rx_pause) 2458 flow |= FLOW_CR_RX_FCEN_; 2459 2460 /* Select RX FIFO thresholds based on USB speed 2461 * 2462 * FCT_FLOW layout: 2463 * bits [6:0] FLOW_ON threshold (RXUSED ≥ ON → assert pause) 2464 * bits [14:8] FLOW_OFF threshold (RXUSED ≤ OFF → deassert pause) 2465 * thresholds are expressed in units of 512 bytes 2466 */ 2467 switch (dev->udev->speed) { 2468 case USB_SPEED_SUPER: 2469 fct_flow = FLOW_CTRL_THRESHOLD(FLOW_ON_SS, FLOW_OFF_SS); 2470 break; 2471 case USB_SPEED_HIGH: 2472 fct_flow = FLOW_CTRL_THRESHOLD(FLOW_ON_HS, FLOW_OFF_HS); 2473 break; 2474 default: 2475 netdev_warn(dev->net, "Unsupported USB speed: %d\n", 2476 dev->udev->speed); 2477 return -EINVAL; 2478 } 2479 2480 /* Step 1: Write FIFO thresholds before enabling pause frames */ 2481 ret = lan78xx_write_reg(dev, FCT_FLOW, fct_flow); 2482 if (ret < 0) 2483 return ret; 2484 2485 /* Step 2: Enable MAC pause functionality */ 2486 return lan78xx_write_reg(dev, FLOW, flow); 2487 } 2488 2489 static void lan78xx_mac_link_up(struct phylink_config *config, 2490 struct phy_device *phy, 2491 unsigned int mode, phy_interface_t interface, 2492 int speed, int duplex, 2493 bool tx_pause, bool rx_pause) 2494 { 2495 struct net_device *net = to_net_dev(config->dev); 2496 struct lan78xx_net *dev = netdev_priv(net); 2497 u32 mac_cr = 0; 2498 int ret; 2499 2500 switch (speed) { 2501 case SPEED_1000: 2502 mac_cr |= MAC_CR_SPEED_1000_; 2503 break; 2504 case SPEED_100: 2505 mac_cr |= MAC_CR_SPEED_100_; 2506 break; 2507 case SPEED_10: 2508 mac_cr |= MAC_CR_SPEED_10_; 2509 break; 2510 default: 2511 netdev_err(dev->net, "Unsupported speed %d\n", speed); 2512 return; 2513 } 2514 2515 if (duplex == DUPLEX_FULL) 2516 mac_cr |= MAC_CR_FULL_DUPLEX_; 2517 2518 /* make sure TXEN and RXEN are disabled before reconfiguring MAC */ 2519 ret = lan78xx_update_reg(dev, MAC_CR, MAC_CR_SPEED_MASK_ | 2520 MAC_CR_FULL_DUPLEX_ | MAC_CR_EEE_EN_, mac_cr); 2521 if (ret < 0) 2522 goto link_up_fail; 2523 2524 ret = lan78xx_configure_flowcontrol(dev, tx_pause, rx_pause); 2525 if (ret < 0) 2526 goto link_up_fail; 2527 2528 ret = lan78xx_configure_usb(dev, speed); 2529 if (ret < 0) 2530 goto link_up_fail; 2531 2532 lan78xx_rx_urb_submit_all(dev); 2533 2534 ret = lan78xx_flush_rx_fifo(dev); 2535 if (ret < 0) 2536 goto link_up_fail; 2537 2538 ret = lan78xx_flush_tx_fifo(dev); 2539 if (ret < 0) 2540 goto link_up_fail; 2541 2542 ret = lan78xx_start_tx_path(dev); 2543 if (ret < 0) 2544 goto link_up_fail; 2545 2546 ret = lan78xx_start_rx_path(dev); 2547 if (ret < 0) 2548 goto link_up_fail; 2549 2550 /* The RFE clears the VLAN/DA hash filter (VHF) on a link down/up 2551 * cycle, so reprogram both tables from their shadow copies. 2552 */ 2553 ret = lan78xx_write_vlan_table(dev); 2554 if (ret < 0) 2555 goto link_up_fail; 2556 2557 ret = lan78xx_write_mchash_table(dev); 2558 if (ret < 0) 2559 goto link_up_fail; 2560 2561 netif_start_queue(net); 2562 2563 return; 2564 2565 link_up_fail: 2566 netdev_err(dev->net, "Failed to set MAC up with error %pe\n", 2567 ERR_PTR(ret)); 2568 } 2569 2570 /** 2571 * lan78xx_mac_eee_enable - Enable or disable MAC-side EEE support 2572 * @dev: LAN78xx device 2573 * @enable: true to enable EEE, false to disable 2574 * 2575 * This function sets or clears the MAC_CR_EEE_EN_ bit to control Energy 2576 * Efficient Ethernet (EEE) operation. According to current understanding 2577 * of the LAN7800 documentation, this bit can be modified while TX and RX 2578 * are enabled. No explicit requirement was found to disable data paths 2579 * before changing this bit. 2580 * 2581 * Return: 0 on success or a negative error code 2582 */ 2583 static int lan78xx_mac_eee_enable(struct lan78xx_net *dev, bool enable) 2584 { 2585 u32 mac_cr = 0; 2586 2587 if (enable) 2588 mac_cr |= MAC_CR_EEE_EN_; 2589 2590 return lan78xx_update_reg(dev, MAC_CR, MAC_CR_EEE_EN_, mac_cr); 2591 } 2592 2593 static void lan78xx_mac_disable_tx_lpi(struct phylink_config *config) 2594 { 2595 struct net_device *net = to_net_dev(config->dev); 2596 struct lan78xx_net *dev = netdev_priv(net); 2597 2598 lan78xx_mac_eee_enable(dev, false); 2599 } 2600 2601 static int lan78xx_mac_enable_tx_lpi(struct phylink_config *config, u32 timer, 2602 bool tx_clk_stop) 2603 { 2604 struct net_device *net = to_net_dev(config->dev); 2605 struct lan78xx_net *dev = netdev_priv(net); 2606 int ret; 2607 2608 /* Software should only change this field when Energy Efficient 2609 * Ethernet Enable (EEEEN) is cleared. We ensure that by clearing 2610 * EEEEN during probe, and phylink itself guarantees that 2611 * mac_disable_tx_lpi() will have been previously called. 2612 */ 2613 ret = lan78xx_write_reg(dev, EEE_TX_LPI_REQ_DLY, timer); 2614 if (ret < 0) 2615 return ret; 2616 2617 return lan78xx_mac_eee_enable(dev, true); 2618 } 2619 2620 static const struct phylink_mac_ops lan78xx_phylink_mac_ops = { 2621 .mac_config = lan78xx_mac_config, 2622 .mac_link_down = lan78xx_mac_link_down, 2623 .mac_link_up = lan78xx_mac_link_up, 2624 .mac_disable_tx_lpi = lan78xx_mac_disable_tx_lpi, 2625 .mac_enable_tx_lpi = lan78xx_mac_enable_tx_lpi, 2626 }; 2627 2628 /** 2629 * lan78xx_set_fixed_link() - Set fixed link configuration for LAN7801 2630 * @dev: LAN78xx device 2631 * 2632 * Use fixed link configuration with 1 Gbps full duplex. This is used in special 2633 * cases like EVB-KSZ9897-1, where LAN7801 acts as a USB-to-Ethernet interface 2634 * to a switch without a visible PHY. 2635 * 2636 * Return: pointer to the registered fixed PHY, or ERR_PTR() on error. 2637 */ 2638 static int lan78xx_set_fixed_link(struct lan78xx_net *dev) 2639 { 2640 static const struct phylink_link_state state = { 2641 .speed = SPEED_1000, 2642 .duplex = DUPLEX_FULL, 2643 }; 2644 2645 netdev_info(dev->net, 2646 "No PHY found on LAN7801 – using fixed link instead (e.g. EVB-KSZ9897-1)\n"); 2647 2648 return phylink_set_fixed_link(dev->phylink, &state); 2649 } 2650 2651 /** 2652 * lan78xx_get_phy() - Probe or register PHY device and set interface mode 2653 * @dev: LAN78xx device structure 2654 * 2655 * This function attempts to find a PHY on the MDIO bus. If no PHY is found 2656 * and the chip is LAN7801, it registers a fixed PHY as fallback. It also 2657 * sets dev->interface based on chip ID and detected PHY type. 2658 * 2659 * Return: a valid PHY device pointer, or ERR_PTR() on failure. 2660 */ 2661 static struct phy_device *lan78xx_get_phy(struct lan78xx_net *dev) 2662 { 2663 struct phy_device *phydev; 2664 2665 /* Attempt to locate a PHY on the MDIO bus */ 2666 phydev = phy_find_first(dev->mdiobus); 2667 2668 switch (dev->chipid) { 2669 case ID_REV_CHIP_ID_7801_: 2670 if (phydev) { 2671 /* External RGMII PHY detected */ 2672 dev->interface = PHY_INTERFACE_MODE_RGMII_ID; 2673 phydev->is_internal = false; 2674 2675 if (!phydev->drv) 2676 netdev_warn(dev->net, 2677 "PHY driver not found – assuming RGMII delays are on PCB or strapped for the PHY\n"); 2678 2679 return phydev; 2680 } 2681 2682 dev->interface = PHY_INTERFACE_MODE_RGMII; 2683 /* No PHY found – fallback to fixed PHY (e.g. KSZ switch board) */ 2684 return NULL; 2685 2686 case ID_REV_CHIP_ID_7800_: 2687 case ID_REV_CHIP_ID_7850_: 2688 if (!phydev) 2689 return ERR_PTR(-ENODEV); 2690 2691 /* These use internal GMII-connected PHY */ 2692 dev->interface = PHY_INTERFACE_MODE_GMII; 2693 phydev->is_internal = true; 2694 return phydev; 2695 2696 default: 2697 netdev_err(dev->net, "Unknown CHIP ID: 0x%08x\n", dev->chipid); 2698 return ERR_PTR(-ENODEV); 2699 } 2700 } 2701 2702 /** 2703 * lan78xx_mac_prepare_for_phy() - Preconfigure MAC-side interface settings 2704 * @dev: LAN78xx device 2705 * 2706 * Configure MAC-side registers according to dev->interface, which should be 2707 * set by lan78xx_get_phy(). 2708 * 2709 * - For PHY_INTERFACE_MODE_RGMII: 2710 * Enable MAC-side TXC delay. This mode seems to be used in a special setup 2711 * without a real PHY, likely on EVB-KSZ9897-1. In that design, LAN7801 is 2712 * connected to the KSZ9897 switch, and the link timing is expected to be 2713 * hardwired (e.g. via strapping or board layout). No devicetree support is 2714 * assumed here. 2715 * 2716 * - For PHY_INTERFACE_MODE_RGMII_ID: 2717 * Disable MAC-side delay and rely on the PHY driver to provide delay. 2718 * 2719 * - For GMII, no MAC-specific config is needed. 2720 * 2721 * Return: 0 on success or a negative error code. 2722 */ 2723 static int lan78xx_mac_prepare_for_phy(struct lan78xx_net *dev) 2724 { 2725 int ret; 2726 2727 switch (dev->interface) { 2728 case PHY_INTERFACE_MODE_RGMII: 2729 /* Enable MAC-side TX clock delay */ 2730 ret = lan78xx_write_reg(dev, MAC_RGMII_ID, 2731 MAC_RGMII_ID_TXC_DELAY_EN_); 2732 if (ret < 0) 2733 return ret; 2734 2735 ret = lan78xx_write_reg(dev, RGMII_TX_BYP_DLL, 0x3D00); 2736 if (ret < 0) 2737 return ret; 2738 2739 ret = lan78xx_update_reg(dev, HW_CFG, 2740 HW_CFG_CLK125_EN_ | HW_CFG_REFCLK25_EN_, 2741 HW_CFG_CLK125_EN_ | HW_CFG_REFCLK25_EN_); 2742 if (ret < 0) 2743 return ret; 2744 2745 break; 2746 2747 case PHY_INTERFACE_MODE_RGMII_ID: 2748 /* Disable MAC-side TXC delay, PHY provides it */ 2749 ret = lan78xx_write_reg(dev, MAC_RGMII_ID, 0); 2750 if (ret < 0) 2751 return ret; 2752 2753 break; 2754 2755 case PHY_INTERFACE_MODE_GMII: 2756 /* No MAC-specific configuration required */ 2757 break; 2758 2759 default: 2760 netdev_warn(dev->net, "Unsupported interface mode: %d\n", 2761 dev->interface); 2762 break; 2763 } 2764 2765 return 0; 2766 } 2767 2768 /** 2769 * lan78xx_configure_leds_from_dt() - Configure LED enables based on DT 2770 * @dev: LAN78xx device 2771 * @phydev: PHY device (must be valid) 2772 * 2773 * Reads "microchip,led-modes" property from the PHY's DT node and enables 2774 * the corresponding number of LEDs by writing to HW_CFG. 2775 * 2776 * This helper preserves the original logic, enabling up to 4 LEDs. 2777 * If the property is not present, this function does nothing. 2778 * 2779 * Return: 0 on success or a negative error code. 2780 */ 2781 static int lan78xx_configure_leds_from_dt(struct lan78xx_net *dev, 2782 struct phy_device *phydev) 2783 { 2784 struct device_node *np = phydev->mdio.dev.of_node; 2785 u32 reg; 2786 int len, ret; 2787 2788 if (!np) 2789 return 0; 2790 2791 len = of_property_count_elems_of_size(np, "microchip,led-modes", 2792 sizeof(u32)); 2793 if (len < 0) 2794 return 0; 2795 2796 ret = lan78xx_read_reg(dev, HW_CFG, ®); 2797 if (ret < 0) 2798 return ret; 2799 2800 reg &= ~(HW_CFG_LED0_EN_ | HW_CFG_LED1_EN_ | 2801 HW_CFG_LED2_EN_ | HW_CFG_LED3_EN_); 2802 2803 reg |= (len > 0) * HW_CFG_LED0_EN_ | 2804 (len > 1) * HW_CFG_LED1_EN_ | 2805 (len > 2) * HW_CFG_LED2_EN_ | 2806 (len > 3) * HW_CFG_LED3_EN_; 2807 2808 return lan78xx_write_reg(dev, HW_CFG, reg); 2809 } 2810 2811 static int lan78xx_phylink_setup(struct lan78xx_net *dev) 2812 { 2813 struct phylink_config *pc = &dev->phylink_config; 2814 struct phylink *phylink; 2815 2816 pc->dev = &dev->net->dev; 2817 pc->type = PHYLINK_NETDEV; 2818 pc->mac_capabilities = MAC_SYM_PAUSE | MAC_ASYM_PAUSE | MAC_10 | 2819 MAC_100 | MAC_1000FD; 2820 pc->mac_managed_pm = true; 2821 pc->lpi_capabilities = MAC_100FD | MAC_1000FD; 2822 /* 2823 * Default TX LPI (Low Power Idle) request delay count is set to 50us. 2824 * 2825 * Source: LAN7800 Documentation, DS00001992H, Section 15.1.57, Page 204. 2826 * 2827 * Reasoning: 2828 * According to the application note in the LAN7800 documentation, a 2829 * zero delay may negatively impact the TX data path’s ability to 2830 * support Gigabit operation. A value of 50us is recommended as a 2831 * reasonable default when the part operates at Gigabit speeds, 2832 * balancing stability and power efficiency in EEE mode. This delay can 2833 * be increased based on performance testing, as EEE is designed for 2834 * scenarios with mostly idle links and occasional bursts of full 2835 * bandwidth transmission. The goal is to ensure reliable Gigabit 2836 * performance without overly aggressive power optimization during 2837 * inactive periods. 2838 */ 2839 pc->lpi_timer_default = 50; 2840 pc->eee_enabled_default = true; 2841 2842 if (dev->chipid == ID_REV_CHIP_ID_7801_) 2843 phy_interface_set_rgmii(pc->supported_interfaces); 2844 else 2845 __set_bit(PHY_INTERFACE_MODE_GMII, pc->supported_interfaces); 2846 2847 memcpy(dev->phylink_config.lpi_interfaces, 2848 dev->phylink_config.supported_interfaces, 2849 sizeof(dev->phylink_config.lpi_interfaces)); 2850 2851 phylink = phylink_create(pc, dev->net->dev.fwnode, 2852 dev->interface, &lan78xx_phylink_mac_ops); 2853 if (IS_ERR(phylink)) 2854 return PTR_ERR(phylink); 2855 2856 dev->phylink = phylink; 2857 2858 return 0; 2859 } 2860 2861 static void lan78xx_phy_uninit(struct lan78xx_net *dev) 2862 { 2863 if (dev->phylink) { 2864 phylink_disconnect_phy(dev->phylink); 2865 phylink_destroy(dev->phylink); 2866 dev->phylink = NULL; 2867 } 2868 } 2869 2870 static int lan78xx_phy_init(struct lan78xx_net *dev) 2871 { 2872 struct phy_device *phydev; 2873 int ret; 2874 2875 phydev = lan78xx_get_phy(dev); 2876 /* phydev can be NULL if no PHY is found and the chip is LAN7801, 2877 * which will use a fixed link later. 2878 * If an error occurs, return the error code immediately. 2879 */ 2880 if (IS_ERR(phydev)) 2881 return PTR_ERR(phydev); 2882 2883 ret = lan78xx_phylink_setup(dev); 2884 if (ret < 0) 2885 return ret; 2886 2887 ret = lan78xx_mac_prepare_for_phy(dev); 2888 if (ret < 0) 2889 goto phylink_uninit; 2890 2891 /* If no PHY is found, set up a fixed link. It is very specific to 2892 * the LAN7801 and is used in special cases like EVB-KSZ9897-1 where 2893 * LAN7801 acts as a USB-to-Ethernet interface to a switch without 2894 * a visible PHY. 2895 */ 2896 if (!phydev) { 2897 ret = lan78xx_set_fixed_link(dev); 2898 if (ret < 0) 2899 goto phylink_uninit; 2900 2901 /* No PHY found, so set up a fixed link and return early. 2902 * No need to configure PHY IRQ or attach to phylink. 2903 */ 2904 return 0; 2905 } 2906 2907 /* if phyirq is not set, use polling mode in phylib */ 2908 if (dev->domain_data.phyirq > 0) 2909 phydev->irq = dev->domain_data.phyirq; 2910 else 2911 phydev->irq = PHY_POLL; 2912 dev->mdiobus->irq[phydev->mdio.addr] = phydev->irq; 2913 netdev_dbg(dev->net, "phydev->irq = %d\n", phydev->irq); 2914 2915 ret = phylink_connect_phy(dev->phylink, phydev); 2916 if (ret) { 2917 netdev_err(dev->net, "can't attach PHY to %s, error %pe\n", 2918 dev->mdiobus->id, ERR_PTR(ret)); 2919 goto phylink_uninit; 2920 } 2921 2922 ret = lan78xx_configure_leds_from_dt(dev, phydev); 2923 if (ret < 0) 2924 goto phylink_uninit; 2925 2926 return 0; 2927 2928 phylink_uninit: 2929 lan78xx_phy_uninit(dev); 2930 2931 return ret; 2932 } 2933 2934 static int lan78xx_set_rx_max_frame_length(struct lan78xx_net *dev, int size) 2935 { 2936 bool rxenabled; 2937 u32 buf; 2938 int ret; 2939 2940 ret = lan78xx_read_reg(dev, MAC_RX, &buf); 2941 if (ret < 0) 2942 return ret; 2943 2944 rxenabled = ((buf & MAC_RX_RXEN_) != 0); 2945 2946 if (rxenabled) { 2947 buf &= ~MAC_RX_RXEN_; 2948 ret = lan78xx_write_reg(dev, MAC_RX, buf); 2949 if (ret < 0) 2950 return ret; 2951 } 2952 2953 /* add 4 to size for FCS */ 2954 buf &= ~MAC_RX_MAX_SIZE_MASK_; 2955 buf |= (((size + 4) << MAC_RX_MAX_SIZE_SHIFT_) & MAC_RX_MAX_SIZE_MASK_); 2956 2957 ret = lan78xx_write_reg(dev, MAC_RX, buf); 2958 if (ret < 0) 2959 return ret; 2960 2961 if (rxenabled) { 2962 buf |= MAC_RX_RXEN_; 2963 ret = lan78xx_write_reg(dev, MAC_RX, buf); 2964 if (ret < 0) 2965 return ret; 2966 } 2967 2968 return 0; 2969 } 2970 2971 static int unlink_urbs(struct lan78xx_net *dev, struct sk_buff_head *q) 2972 { 2973 struct sk_buff *skb; 2974 unsigned long flags; 2975 int count = 0; 2976 2977 spin_lock_irqsave(&q->lock, flags); 2978 while (!skb_queue_empty(q)) { 2979 struct skb_data *entry; 2980 struct urb *urb; 2981 int ret; 2982 2983 skb_queue_walk(q, skb) { 2984 entry = (struct skb_data *)skb->cb; 2985 if (entry->state != unlink_start) 2986 goto found; 2987 } 2988 break; 2989 found: 2990 entry->state = unlink_start; 2991 urb = entry->urb; 2992 2993 /* Get reference count of the URB to avoid it to be 2994 * freed during usb_unlink_urb, which may trigger 2995 * use-after-free problem inside usb_unlink_urb since 2996 * usb_unlink_urb is always racing with .complete 2997 * handler(include defer_bh). 2998 */ 2999 usb_get_urb(urb); 3000 spin_unlock_irqrestore(&q->lock, flags); 3001 /* during some PM-driven resume scenarios, 3002 * these (async) unlinks complete immediately 3003 */ 3004 ret = usb_unlink_urb(urb); 3005 if (ret != -EINPROGRESS && ret != 0) 3006 netdev_dbg(dev->net, "unlink urb err, %d\n", ret); 3007 else 3008 count++; 3009 usb_put_urb(urb); 3010 spin_lock_irqsave(&q->lock, flags); 3011 } 3012 spin_unlock_irqrestore(&q->lock, flags); 3013 return count; 3014 } 3015 3016 static int lan78xx_change_mtu(struct net_device *netdev, int new_mtu) 3017 { 3018 struct lan78xx_net *dev = netdev_priv(netdev); 3019 int max_frame_len = RX_MAX_FRAME_LEN(new_mtu); 3020 int ret; 3021 3022 /* no second zero-length packet read wanted after mtu-sized packets */ 3023 if ((max_frame_len % dev->maxpacket) == 0) 3024 return -EDOM; 3025 3026 ret = usb_autopm_get_interface(dev->intf); 3027 if (ret < 0) 3028 return ret; 3029 3030 ret = lan78xx_set_rx_max_frame_length(dev, max_frame_len); 3031 if (ret < 0) 3032 netdev_err(dev->net, "MTU changed to %d from %d failed with %pe\n", 3033 new_mtu, netdev->mtu, ERR_PTR(ret)); 3034 else 3035 WRITE_ONCE(netdev->mtu, new_mtu); 3036 3037 usb_autopm_put_interface(dev->intf); 3038 3039 return ret; 3040 } 3041 3042 static int lan78xx_set_mac_addr(struct net_device *netdev, void *p) 3043 { 3044 struct lan78xx_net *dev = netdev_priv(netdev); 3045 struct sockaddr *addr = p; 3046 u32 addr_lo, addr_hi; 3047 int ret; 3048 3049 if (netif_running(netdev)) 3050 return -EBUSY; 3051 3052 if (!is_valid_ether_addr(addr->sa_data)) 3053 return -EADDRNOTAVAIL; 3054 3055 eth_hw_addr_set(netdev, addr->sa_data); 3056 3057 addr_lo = netdev->dev_addr[0] | 3058 netdev->dev_addr[1] << 8 | 3059 netdev->dev_addr[2] << 16 | 3060 netdev->dev_addr[3] << 24; 3061 addr_hi = netdev->dev_addr[4] | 3062 netdev->dev_addr[5] << 8; 3063 3064 ret = lan78xx_write_reg(dev, RX_ADDRL, addr_lo); 3065 if (ret < 0) 3066 return ret; 3067 3068 ret = lan78xx_write_reg(dev, RX_ADDRH, addr_hi); 3069 if (ret < 0) 3070 return ret; 3071 3072 /* Added to support MAC address changes */ 3073 ret = lan78xx_write_reg(dev, MAF_LO(0), addr_lo); 3074 if (ret < 0) 3075 return ret; 3076 3077 return lan78xx_write_reg(dev, MAF_HI(0), addr_hi | MAF_HI_VALID_); 3078 } 3079 3080 /* Enable or disable Rx checksum offload engine */ 3081 static int lan78xx_set_features(struct net_device *netdev, 3082 netdev_features_t features) 3083 { 3084 struct lan78xx_net *dev = netdev_priv(netdev); 3085 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); 3086 unsigned long flags; 3087 3088 spin_lock_irqsave(&pdata->rfe_ctl_lock, flags); 3089 3090 if (features & NETIF_F_RXCSUM) { 3091 pdata->rfe_ctl |= RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_; 3092 pdata->rfe_ctl |= RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_; 3093 } else { 3094 pdata->rfe_ctl &= ~(RFE_CTL_TCPUDP_COE_ | RFE_CTL_IP_COE_); 3095 pdata->rfe_ctl &= ~(RFE_CTL_ICMP_COE_ | RFE_CTL_IGMP_COE_); 3096 } 3097 3098 if (features & NETIF_F_HW_VLAN_CTAG_RX) 3099 pdata->rfe_ctl |= RFE_CTL_VLAN_STRIP_; 3100 else 3101 pdata->rfe_ctl &= ~RFE_CTL_VLAN_STRIP_; 3102 3103 lan78xx_update_vlan_filter(pdata, netdev, features); 3104 3105 spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags); 3106 3107 return lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); 3108 } 3109 3110 static int lan78xx_write_vlan_table(struct lan78xx_net *dev) 3111 { 3112 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); 3113 3114 return lan78xx_dataport_write(dev, DP_SEL_RSEL_VLAN_DA_, 0, 3115 DP_SEL_VHF_VLAN_LEN, pdata->vlan_table); 3116 } 3117 3118 static void lan78xx_deferred_vlan_write(struct work_struct *param) 3119 { 3120 struct lan78xx_priv *pdata = 3121 container_of(param, struct lan78xx_priv, set_vlan); 3122 3123 lan78xx_write_vlan_table(pdata->dev); 3124 } 3125 3126 static int lan78xx_vlan_rx_add_vid(struct net_device *netdev, 3127 __be16 proto, u16 vid) 3128 { 3129 struct lan78xx_net *dev = netdev_priv(netdev); 3130 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); 3131 u16 vid_bit_index; 3132 u16 vid_dword_index; 3133 3134 vid_dword_index = (vid >> 5) & 0x7F; 3135 vid_bit_index = vid & 0x1F; 3136 3137 pdata->vlan_table[vid_dword_index] |= (1 << vid_bit_index); 3138 3139 /* defer register writes to a sleepable context */ 3140 schedule_work(&pdata->set_vlan); 3141 3142 return 0; 3143 } 3144 3145 static int lan78xx_vlan_rx_kill_vid(struct net_device *netdev, 3146 __be16 proto, u16 vid) 3147 { 3148 struct lan78xx_net *dev = netdev_priv(netdev); 3149 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); 3150 u16 vid_bit_index; 3151 u16 vid_dword_index; 3152 3153 vid_dword_index = (vid >> 5) & 0x7F; 3154 vid_bit_index = vid & 0x1F; 3155 3156 pdata->vlan_table[vid_dword_index] &= ~(1 << vid_bit_index); 3157 3158 /* defer register writes to a sleepable context */ 3159 schedule_work(&pdata->set_vlan); 3160 3161 return 0; 3162 } 3163 3164 static int lan78xx_init_ltm(struct lan78xx_net *dev) 3165 { 3166 u32 regs[6] = { 0 }; 3167 int ret; 3168 u32 buf; 3169 3170 /* LAN7850 is USB 2.0 and does not support LTM */ 3171 if (dev->chipid == ID_REV_CHIP_ID_7850_) 3172 return 0; 3173 3174 ret = lan78xx_read_reg(dev, USB_CFG1, &buf); 3175 if (ret < 0) 3176 goto init_ltm_failed; 3177 3178 if (buf & USB_CFG1_LTM_ENABLE_) { 3179 u8 temp[2]; 3180 /* Get values from EEPROM first */ 3181 if (lan78xx_read_eeprom(dev, 0x3F, 2, temp) == 0) { 3182 if (temp[0] == 24) { 3183 ret = lan78xx_read_raw_eeprom(dev, 3184 temp[1] * 2, 3185 24, 3186 (u8 *)regs); 3187 if (ret < 0) 3188 return ret; 3189 } 3190 } else if (lan78xx_read_otp(dev, 0x3F, 2, temp) == 0) { 3191 if (temp[0] == 24) { 3192 ret = lan78xx_read_raw_otp(dev, 3193 temp[1] * 2, 3194 24, 3195 (u8 *)regs); 3196 if (ret < 0) 3197 return ret; 3198 } 3199 } 3200 } 3201 3202 ret = lan78xx_write_reg(dev, LTM_BELT_IDLE0, regs[0]); 3203 if (ret < 0) 3204 goto init_ltm_failed; 3205 3206 ret = lan78xx_write_reg(dev, LTM_BELT_IDLE1, regs[1]); 3207 if (ret < 0) 3208 goto init_ltm_failed; 3209 3210 ret = lan78xx_write_reg(dev, LTM_BELT_ACT0, regs[2]); 3211 if (ret < 0) 3212 goto init_ltm_failed; 3213 3214 ret = lan78xx_write_reg(dev, LTM_BELT_ACT1, regs[3]); 3215 if (ret < 0) 3216 goto init_ltm_failed; 3217 3218 ret = lan78xx_write_reg(dev, LTM_INACTIVE0, regs[4]); 3219 if (ret < 0) 3220 goto init_ltm_failed; 3221 3222 ret = lan78xx_write_reg(dev, LTM_INACTIVE1, regs[5]); 3223 if (ret < 0) 3224 goto init_ltm_failed; 3225 3226 return 0; 3227 3228 init_ltm_failed: 3229 netdev_err(dev->net, "Failed to init LTM with error %pe\n", ERR_PTR(ret)); 3230 return ret; 3231 } 3232 3233 static int lan78xx_urb_config_init(struct lan78xx_net *dev) 3234 { 3235 int result = 0; 3236 3237 switch (dev->udev->speed) { 3238 case USB_SPEED_SUPER: 3239 dev->rx_urb_size = RX_SS_URB_SIZE; 3240 dev->tx_urb_size = TX_SS_URB_SIZE; 3241 dev->n_rx_urbs = RX_SS_URB_NUM; 3242 dev->n_tx_urbs = TX_SS_URB_NUM; 3243 dev->bulk_in_delay = SS_BULK_IN_DELAY; 3244 dev->burst_cap = SS_BURST_CAP_SIZE / SS_USB_PKT_SIZE; 3245 break; 3246 case USB_SPEED_HIGH: 3247 dev->rx_urb_size = RX_HS_URB_SIZE; 3248 dev->tx_urb_size = TX_HS_URB_SIZE; 3249 dev->n_rx_urbs = RX_HS_URB_NUM; 3250 dev->n_tx_urbs = TX_HS_URB_NUM; 3251 dev->bulk_in_delay = HS_BULK_IN_DELAY; 3252 dev->burst_cap = HS_BURST_CAP_SIZE / HS_USB_PKT_SIZE; 3253 break; 3254 case USB_SPEED_FULL: 3255 dev->rx_urb_size = RX_FS_URB_SIZE; 3256 dev->tx_urb_size = TX_FS_URB_SIZE; 3257 dev->n_rx_urbs = RX_FS_URB_NUM; 3258 dev->n_tx_urbs = TX_FS_URB_NUM; 3259 dev->bulk_in_delay = FS_BULK_IN_DELAY; 3260 dev->burst_cap = FS_BURST_CAP_SIZE / FS_USB_PKT_SIZE; 3261 break; 3262 default: 3263 netdev_warn(dev->net, "USB bus speed not supported\n"); 3264 result = -EIO; 3265 break; 3266 } 3267 3268 return result; 3269 } 3270 3271 static int lan78xx_reset(struct lan78xx_net *dev) 3272 { 3273 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); 3274 unsigned long timeout; 3275 int ret; 3276 u32 buf; 3277 3278 ret = lan78xx_read_reg(dev, HW_CFG, &buf); 3279 if (ret < 0) 3280 return ret; 3281 3282 buf |= HW_CFG_LRST_; 3283 3284 ret = lan78xx_write_reg(dev, HW_CFG, buf); 3285 if (ret < 0) 3286 return ret; 3287 3288 timeout = jiffies + HZ; 3289 do { 3290 mdelay(1); 3291 ret = lan78xx_read_reg(dev, HW_CFG, &buf); 3292 if (ret < 0) 3293 return ret; 3294 3295 if (time_after(jiffies, timeout)) { 3296 netdev_warn(dev->net, 3297 "timeout on completion of LiteReset"); 3298 ret = -ETIMEDOUT; 3299 return ret; 3300 } 3301 } while (buf & HW_CFG_LRST_); 3302 3303 /* save DEVID for later usage */ 3304 ret = lan78xx_read_reg(dev, ID_REV, &buf); 3305 if (ret < 0) 3306 return ret; 3307 3308 dev->chipid = (buf & ID_REV_CHIP_ID_MASK_) >> 16; 3309 dev->chiprev = buf & ID_REV_CHIP_REV_MASK_; 3310 3311 ret = lan78xx_init_mac_address(dev); 3312 if (ret < 0) 3313 return ret; 3314 3315 /* Respond to the IN token with a NAK */ 3316 ret = lan78xx_read_reg(dev, USB_CFG0, &buf); 3317 if (ret < 0) 3318 return ret; 3319 3320 buf |= USB_CFG_BIR_; 3321 3322 ret = lan78xx_write_reg(dev, USB_CFG0, buf); 3323 if (ret < 0) 3324 return ret; 3325 3326 /* Init LTM */ 3327 ret = lan78xx_init_ltm(dev); 3328 if (ret < 0) 3329 return ret; 3330 3331 ret = lan78xx_write_reg(dev, BURST_CAP, dev->burst_cap); 3332 if (ret < 0) 3333 return ret; 3334 3335 ret = lan78xx_write_reg(dev, BULK_IN_DLY, dev->bulk_in_delay); 3336 if (ret < 0) 3337 return ret; 3338 3339 ret = lan78xx_read_reg(dev, HW_CFG, &buf); 3340 if (ret < 0) 3341 return ret; 3342 3343 buf |= HW_CFG_MEF_; 3344 buf |= HW_CFG_CLK125_EN_; 3345 buf |= HW_CFG_REFCLK25_EN_; 3346 3347 ret = lan78xx_write_reg(dev, HW_CFG, buf); 3348 if (ret < 0) 3349 return ret; 3350 3351 ret = lan78xx_read_reg(dev, USB_CFG0, &buf); 3352 if (ret < 0) 3353 return ret; 3354 3355 buf |= USB_CFG_BCE_; 3356 3357 ret = lan78xx_write_reg(dev, USB_CFG0, buf); 3358 if (ret < 0) 3359 return ret; 3360 3361 /* set FIFO sizes */ 3362 buf = (MAX_RX_FIFO_SIZE - 512) / 512; 3363 3364 ret = lan78xx_write_reg(dev, FCT_RX_FIFO_END, buf); 3365 if (ret < 0) 3366 return ret; 3367 3368 buf = (MAX_TX_FIFO_SIZE - 512) / 512; 3369 3370 ret = lan78xx_write_reg(dev, FCT_TX_FIFO_END, buf); 3371 if (ret < 0) 3372 return ret; 3373 3374 ret = lan78xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL_); 3375 if (ret < 0) 3376 return ret; 3377 3378 ret = lan78xx_write_reg(dev, FLOW, 0); 3379 if (ret < 0) 3380 return ret; 3381 3382 ret = lan78xx_write_reg(dev, FCT_FLOW, 0); 3383 if (ret < 0) 3384 return ret; 3385 3386 /* Don't need rfe_ctl_lock during initialisation */ 3387 ret = lan78xx_read_reg(dev, RFE_CTL, &pdata->rfe_ctl); 3388 if (ret < 0) 3389 return ret; 3390 3391 pdata->rfe_ctl |= RFE_CTL_BCAST_EN_ | RFE_CTL_DA_PERFECT_; 3392 3393 ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); 3394 if (ret < 0) 3395 return ret; 3396 3397 /* Enable or disable checksum offload engines */ 3398 ret = lan78xx_set_features(dev->net, dev->net->features); 3399 if (ret < 0) 3400 return ret; 3401 3402 lan78xx_set_multicast(dev->net); 3403 3404 /* reset PHY */ 3405 ret = lan78xx_read_reg(dev, PMT_CTL, &buf); 3406 if (ret < 0) 3407 return ret; 3408 3409 buf |= PMT_CTL_PHY_RST_; 3410 3411 ret = lan78xx_write_reg(dev, PMT_CTL, buf); 3412 if (ret < 0) 3413 return ret; 3414 3415 timeout = jiffies + HZ; 3416 do { 3417 mdelay(1); 3418 ret = lan78xx_read_reg(dev, PMT_CTL, &buf); 3419 if (ret < 0) 3420 return ret; 3421 3422 if (time_after(jiffies, timeout)) { 3423 netdev_warn(dev->net, "timeout waiting for PHY Reset"); 3424 ret = -ETIMEDOUT; 3425 return ret; 3426 } 3427 } while ((buf & PMT_CTL_PHY_RST_) || !(buf & PMT_CTL_READY_)); 3428 3429 ret = lan78xx_read_reg(dev, MAC_CR, &buf); 3430 if (ret < 0) 3431 return ret; 3432 3433 buf &= ~(MAC_CR_AUTO_DUPLEX_ | MAC_CR_AUTO_SPEED_ | MAC_CR_EEE_EN_); 3434 3435 /* LAN7801 only has RGMII mode */ 3436 if (dev->chipid == ID_REV_CHIP_ID_7801_) 3437 buf &= ~MAC_CR_GMII_EN_; 3438 3439 ret = lan78xx_write_reg(dev, MAC_CR, buf); 3440 if (ret < 0) 3441 return ret; 3442 3443 ret = lan78xx_set_rx_max_frame_length(dev, 3444 RX_MAX_FRAME_LEN(dev->net->mtu)); 3445 3446 return ret; 3447 } 3448 3449 static void lan78xx_init_stats(struct lan78xx_net *dev) 3450 { 3451 u32 *p; 3452 int i; 3453 3454 /* initialize for stats update 3455 * some counters are 20bits and some are 32bits 3456 */ 3457 p = (u32 *)&dev->stats.rollover_max; 3458 for (i = 0; i < (sizeof(dev->stats.rollover_max) / (sizeof(u32))); i++) 3459 p[i] = 0xFFFFF; 3460 3461 dev->stats.rollover_max.rx_unicast_byte_count = 0xFFFFFFFF; 3462 dev->stats.rollover_max.rx_broadcast_byte_count = 0xFFFFFFFF; 3463 dev->stats.rollover_max.rx_multicast_byte_count = 0xFFFFFFFF; 3464 dev->stats.rollover_max.eee_rx_lpi_transitions = 0xFFFFFFFF; 3465 dev->stats.rollover_max.eee_rx_lpi_time = 0xFFFFFFFF; 3466 dev->stats.rollover_max.tx_unicast_byte_count = 0xFFFFFFFF; 3467 dev->stats.rollover_max.tx_broadcast_byte_count = 0xFFFFFFFF; 3468 dev->stats.rollover_max.tx_multicast_byte_count = 0xFFFFFFFF; 3469 dev->stats.rollover_max.eee_tx_lpi_transitions = 0xFFFFFFFF; 3470 dev->stats.rollover_max.eee_tx_lpi_time = 0xFFFFFFFF; 3471 3472 set_bit(EVENT_STAT_UPDATE, &dev->flags); 3473 } 3474 3475 static int lan78xx_open(struct net_device *net) 3476 { 3477 struct lan78xx_net *dev = netdev_priv(net); 3478 int ret; 3479 3480 netif_dbg(dev, ifup, dev->net, "open device"); 3481 3482 ret = usb_autopm_get_interface(dev->intf); 3483 if (ret < 0) 3484 return ret; 3485 3486 mutex_lock(&dev->dev_mutex); 3487 3488 lan78xx_init_stats(dev); 3489 3490 napi_enable(&dev->napi); 3491 3492 set_bit(EVENT_DEV_OPEN, &dev->flags); 3493 3494 /* for Link Check */ 3495 if (dev->urb_intr) { 3496 ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL); 3497 if (ret < 0) { 3498 netif_err(dev, ifup, dev->net, 3499 "intr submit %d\n", ret); 3500 goto done; 3501 } 3502 } 3503 3504 phylink_start(dev->phylink); 3505 3506 done: 3507 mutex_unlock(&dev->dev_mutex); 3508 3509 if (ret < 0) 3510 usb_autopm_put_interface(dev->intf); 3511 3512 return ret; 3513 } 3514 3515 static void lan78xx_terminate_urbs(struct lan78xx_net *dev) 3516 { 3517 DECLARE_WAIT_QUEUE_HEAD_ONSTACK(unlink_wakeup); 3518 DECLARE_WAITQUEUE(wait, current); 3519 int temp; 3520 3521 /* ensure there are no more active urbs */ 3522 add_wait_queue(&unlink_wakeup, &wait); 3523 set_current_state(TASK_UNINTERRUPTIBLE); 3524 dev->wait = &unlink_wakeup; 3525 temp = unlink_urbs(dev, &dev->txq) + unlink_urbs(dev, &dev->rxq); 3526 3527 /* maybe wait for deletions to finish. */ 3528 while (!skb_queue_empty(&dev->rxq) || 3529 !skb_queue_empty(&dev->txq)) { 3530 schedule_timeout(msecs_to_jiffies(UNLINK_TIMEOUT_MS)); 3531 set_current_state(TASK_UNINTERRUPTIBLE); 3532 netif_dbg(dev, ifdown, dev->net, 3533 "waited for %d urb completions", temp); 3534 } 3535 set_current_state(TASK_RUNNING); 3536 dev->wait = NULL; 3537 remove_wait_queue(&unlink_wakeup, &wait); 3538 3539 /* empty Rx done, Rx overflow and Tx pend queues 3540 */ 3541 while (!skb_queue_empty(&dev->rxq_done)) { 3542 struct sk_buff *skb = skb_dequeue(&dev->rxq_done); 3543 3544 lan78xx_release_rx_buf(dev, skb); 3545 } 3546 3547 skb_queue_purge(&dev->rxq_overflow); 3548 skb_queue_purge(&dev->txq_pend); 3549 } 3550 3551 static int lan78xx_stop(struct net_device *net) 3552 { 3553 struct lan78xx_net *dev = netdev_priv(net); 3554 3555 netif_dbg(dev, ifup, dev->net, "stop device"); 3556 3557 mutex_lock(&dev->dev_mutex); 3558 3559 if (timer_pending(&dev->stat_monitor)) 3560 timer_delete_sync(&dev->stat_monitor); 3561 3562 clear_bit(EVENT_DEV_OPEN, &dev->flags); 3563 napi_disable(&dev->napi); 3564 3565 lan78xx_terminate_urbs(dev); 3566 3567 netif_info(dev, ifdown, dev->net, 3568 "stop stats: rx/tx %lu/%lu, errs %lu/%lu\n", 3569 net->stats.rx_packets, net->stats.tx_packets, 3570 net->stats.rx_errors, net->stats.tx_errors); 3571 3572 phylink_stop(dev->phylink); 3573 3574 usb_kill_urb(dev->urb_intr); 3575 3576 /* deferred work (task, timer, softirq) must also stop. 3577 * can't flush_scheduled_work() until we drop rtnl (later), 3578 * else workers could deadlock; so make workers a NOP. 3579 */ 3580 clear_bit(EVENT_TX_HALT, &dev->flags); 3581 clear_bit(EVENT_RX_HALT, &dev->flags); 3582 clear_bit(EVENT_PHY_INT_ACK, &dev->flags); 3583 clear_bit(EVENT_STAT_UPDATE, &dev->flags); 3584 3585 cancel_delayed_work_sync(&dev->wq); 3586 3587 usb_autopm_put_interface(dev->intf); 3588 3589 mutex_unlock(&dev->dev_mutex); 3590 3591 return 0; 3592 } 3593 3594 static enum skb_state defer_bh(struct lan78xx_net *dev, struct sk_buff *skb, 3595 struct sk_buff_head *list, enum skb_state state) 3596 { 3597 unsigned long flags; 3598 enum skb_state old_state; 3599 struct skb_data *entry = (struct skb_data *)skb->cb; 3600 3601 spin_lock_irqsave(&list->lock, flags); 3602 old_state = entry->state; 3603 entry->state = state; 3604 3605 __skb_unlink(skb, list); 3606 spin_unlock(&list->lock); 3607 spin_lock(&dev->rxq_done.lock); 3608 3609 __skb_queue_tail(&dev->rxq_done, skb); 3610 if (skb_queue_len(&dev->rxq_done) == 1) 3611 napi_schedule(&dev->napi); 3612 3613 spin_unlock_irqrestore(&dev->rxq_done.lock, flags); 3614 3615 return old_state; 3616 } 3617 3618 static void tx_complete(struct urb *urb) 3619 { 3620 struct sk_buff *skb = (struct sk_buff *)urb->context; 3621 struct skb_data *entry = (struct skb_data *)skb->cb; 3622 struct lan78xx_net *dev = entry->dev; 3623 3624 if (urb->status == 0) { 3625 dev->net->stats.tx_packets += entry->num_of_packet; 3626 dev->net->stats.tx_bytes += entry->length; 3627 } else { 3628 dev->net->stats.tx_errors += entry->num_of_packet; 3629 3630 switch (urb->status) { 3631 case -EPIPE: 3632 lan78xx_defer_kevent(dev, EVENT_TX_HALT); 3633 break; 3634 3635 /* software-driven interface shutdown */ 3636 case -ECONNRESET: 3637 case -ESHUTDOWN: 3638 netif_dbg(dev, tx_err, dev->net, 3639 "tx err interface gone %d\n", 3640 entry->urb->status); 3641 break; 3642 3643 case -EPROTO: 3644 case -ETIME: 3645 case -EILSEQ: 3646 netif_stop_queue(dev->net); 3647 netif_dbg(dev, tx_err, dev->net, 3648 "tx err queue stopped %d\n", 3649 entry->urb->status); 3650 break; 3651 default: 3652 netif_dbg(dev, tx_err, dev->net, 3653 "unknown tx err %d\n", 3654 entry->urb->status); 3655 break; 3656 } 3657 } 3658 3659 usb_autopm_put_interface_async(dev->intf); 3660 3661 skb_unlink(skb, &dev->txq); 3662 3663 lan78xx_release_tx_buf(dev, skb); 3664 3665 /* Re-schedule NAPI if Tx data pending but no URBs in progress. 3666 */ 3667 if (skb_queue_empty(&dev->txq) && 3668 !skb_queue_empty(&dev->txq_pend)) 3669 napi_schedule(&dev->napi); 3670 } 3671 3672 static void lan78xx_queue_skb(struct sk_buff_head *list, 3673 struct sk_buff *newsk, enum skb_state state) 3674 { 3675 struct skb_data *entry = (struct skb_data *)newsk->cb; 3676 3677 __skb_queue_tail(list, newsk); 3678 entry->state = state; 3679 } 3680 3681 static unsigned int lan78xx_tx_urb_space(struct lan78xx_net *dev) 3682 { 3683 return skb_queue_len(&dev->txq_free) * dev->tx_urb_size; 3684 } 3685 3686 static unsigned int lan78xx_tx_pend_data_len(struct lan78xx_net *dev) 3687 { 3688 return dev->tx_pend_data_len; 3689 } 3690 3691 static void lan78xx_tx_pend_skb_add(struct lan78xx_net *dev, 3692 struct sk_buff *skb, 3693 unsigned int *tx_pend_data_len) 3694 { 3695 unsigned long flags; 3696 3697 spin_lock_irqsave(&dev->txq_pend.lock, flags); 3698 3699 __skb_queue_tail(&dev->txq_pend, skb); 3700 3701 dev->tx_pend_data_len += skb->len; 3702 *tx_pend_data_len = dev->tx_pend_data_len; 3703 3704 spin_unlock_irqrestore(&dev->txq_pend.lock, flags); 3705 } 3706 3707 static void lan78xx_tx_pend_skb_head_add(struct lan78xx_net *dev, 3708 struct sk_buff *skb, 3709 unsigned int *tx_pend_data_len) 3710 { 3711 unsigned long flags; 3712 3713 spin_lock_irqsave(&dev->txq_pend.lock, flags); 3714 3715 __skb_queue_head(&dev->txq_pend, skb); 3716 3717 dev->tx_pend_data_len += skb->len; 3718 *tx_pend_data_len = dev->tx_pend_data_len; 3719 3720 spin_unlock_irqrestore(&dev->txq_pend.lock, flags); 3721 } 3722 3723 static void lan78xx_tx_pend_skb_get(struct lan78xx_net *dev, 3724 struct sk_buff **skb, 3725 unsigned int *tx_pend_data_len) 3726 { 3727 unsigned long flags; 3728 3729 spin_lock_irqsave(&dev->txq_pend.lock, flags); 3730 3731 *skb = __skb_dequeue(&dev->txq_pend); 3732 if (*skb) 3733 dev->tx_pend_data_len -= (*skb)->len; 3734 *tx_pend_data_len = dev->tx_pend_data_len; 3735 3736 spin_unlock_irqrestore(&dev->txq_pend.lock, flags); 3737 } 3738 3739 static netdev_tx_t 3740 lan78xx_start_xmit(struct sk_buff *skb, struct net_device *net) 3741 { 3742 struct lan78xx_net *dev = netdev_priv(net); 3743 unsigned int tx_pend_data_len; 3744 3745 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) 3746 schedule_delayed_work(&dev->wq, 0); 3747 3748 skb_tx_timestamp(skb); 3749 3750 lan78xx_tx_pend_skb_add(dev, skb, &tx_pend_data_len); 3751 3752 /* Set up a Tx URB if none is in progress */ 3753 3754 if (skb_queue_empty(&dev->txq)) 3755 napi_schedule(&dev->napi); 3756 3757 /* Stop stack Tx queue if we have enough data to fill 3758 * all the free Tx URBs. 3759 */ 3760 if (tx_pend_data_len > lan78xx_tx_urb_space(dev)) { 3761 netif_stop_queue(net); 3762 3763 netif_dbg(dev, hw, dev->net, "tx data len: %u, urb space %u", 3764 tx_pend_data_len, lan78xx_tx_urb_space(dev)); 3765 3766 /* Kick off transmission of pending data */ 3767 3768 if (!skb_queue_empty(&dev->txq_free)) 3769 napi_schedule(&dev->napi); 3770 } 3771 3772 return NETDEV_TX_OK; 3773 } 3774 3775 static int lan78xx_bind(struct lan78xx_net *dev, struct usb_interface *intf) 3776 { 3777 struct lan78xx_priv *pdata = NULL; 3778 int ret; 3779 int i; 3780 3781 dev->data[0] = (unsigned long) kzalloc_obj(*pdata); 3782 3783 pdata = (struct lan78xx_priv *)(dev->data[0]); 3784 if (!pdata) { 3785 netdev_warn(dev->net, "Unable to allocate lan78xx_priv"); 3786 return -ENOMEM; 3787 } 3788 3789 pdata->dev = dev; 3790 3791 spin_lock_init(&pdata->rfe_ctl_lock); 3792 mutex_init(&pdata->dataport_mutex); 3793 3794 INIT_WORK(&pdata->set_multicast, lan78xx_deferred_multicast_write); 3795 3796 for (i = 0; i < DP_SEL_VHF_VLAN_LEN; i++) 3797 pdata->vlan_table[i] = 0; 3798 3799 INIT_WORK(&pdata->set_vlan, lan78xx_deferred_vlan_write); 3800 3801 dev->net->features = 0; 3802 3803 if (DEFAULT_TX_CSUM_ENABLE) 3804 dev->net->features |= NETIF_F_HW_CSUM; 3805 3806 if (DEFAULT_RX_CSUM_ENABLE) 3807 dev->net->features |= NETIF_F_RXCSUM; 3808 3809 if (DEFAULT_TSO_CSUM_ENABLE) 3810 dev->net->features |= NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_SG; 3811 3812 if (DEFAULT_VLAN_RX_OFFLOAD) 3813 dev->net->features |= NETIF_F_HW_VLAN_CTAG_RX; 3814 3815 if (DEFAULT_VLAN_FILTER_ENABLE) 3816 dev->net->features |= NETIF_F_HW_VLAN_CTAG_FILTER; 3817 3818 dev->net->hw_features = dev->net->features; 3819 3820 ret = lan78xx_setup_irq_domain(dev); 3821 if (ret < 0) { 3822 netdev_warn(dev->net, 3823 "lan78xx_setup_irq_domain() failed : %d", ret); 3824 goto out1; 3825 } 3826 3827 /* Init all registers */ 3828 ret = lan78xx_reset(dev); 3829 if (ret) { 3830 netdev_warn(dev->net, "Registers INIT FAILED...."); 3831 goto out2; 3832 } 3833 3834 ret = lan78xx_mdio_init(dev); 3835 if (ret) { 3836 netdev_warn(dev->net, "MDIO INIT FAILED....."); 3837 goto out2; 3838 } 3839 3840 dev->net->flags |= IFF_MULTICAST; 3841 3842 pdata->wol = WAKE_MAGIC; 3843 3844 return ret; 3845 3846 out2: 3847 lan78xx_remove_irq_domain(dev); 3848 3849 out1: 3850 netdev_warn(dev->net, "Bind routine FAILED"); 3851 cancel_work_sync(&pdata->set_multicast); 3852 cancel_work_sync(&pdata->set_vlan); 3853 kfree(pdata); 3854 return ret; 3855 } 3856 3857 static void lan78xx_unbind(struct lan78xx_net *dev, struct usb_interface *intf) 3858 { 3859 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); 3860 3861 lan78xx_remove_irq_domain(dev); 3862 3863 lan78xx_remove_mdio(dev); 3864 3865 if (pdata) { 3866 cancel_work_sync(&pdata->set_multicast); 3867 cancel_work_sync(&pdata->set_vlan); 3868 netif_dbg(dev, ifdown, dev->net, "free pdata"); 3869 kfree(pdata); 3870 pdata = NULL; 3871 dev->data[0] = 0; 3872 } 3873 } 3874 3875 static void lan78xx_rx_csum_offload(struct lan78xx_net *dev, 3876 struct sk_buff *skb, 3877 u32 rx_cmd_a, u32 rx_cmd_b) 3878 { 3879 /* HW Checksum offload appears to be flawed if used when not stripping 3880 * VLAN headers. Drop back to S/W checksums under these conditions. 3881 */ 3882 if (!(dev->net->features & NETIF_F_RXCSUM) || 3883 unlikely(rx_cmd_a & RX_CMD_A_ICSM_) || 3884 unlikely(rx_cmd_a & RX_CMD_A_CSE_MASK_) || 3885 ((rx_cmd_a & RX_CMD_A_FVTG_) && 3886 !(dev->net->features & NETIF_F_HW_VLAN_CTAG_RX))) { 3887 skb->ip_summed = CHECKSUM_NONE; 3888 } else { 3889 skb->csum = ntohs((u16)(rx_cmd_b >> RX_CMD_B_CSUM_SHIFT_)); 3890 skb->ip_summed = CHECKSUM_COMPLETE; 3891 } 3892 } 3893 3894 static void lan78xx_rx_vlan_offload(struct lan78xx_net *dev, 3895 struct sk_buff *skb, 3896 u32 rx_cmd_a, u32 rx_cmd_b) 3897 { 3898 if ((dev->net->features & NETIF_F_HW_VLAN_CTAG_RX) && 3899 (rx_cmd_a & RX_CMD_A_FVTG_)) 3900 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), 3901 (rx_cmd_b & 0xffff)); 3902 } 3903 3904 static void lan78xx_skb_return(struct lan78xx_net *dev, struct sk_buff *skb) 3905 { 3906 dev->net->stats.rx_packets++; 3907 dev->net->stats.rx_bytes += skb->len; 3908 3909 skb->protocol = eth_type_trans(skb, dev->net); 3910 3911 netif_dbg(dev, rx_status, dev->net, "< rx, len %zu, type 0x%x\n", 3912 skb->len + sizeof(struct ethhdr), skb->protocol); 3913 memset(skb->cb, 0, sizeof(struct skb_data)); 3914 3915 if (skb_defer_rx_timestamp(skb)) 3916 return; 3917 3918 napi_gro_receive(&dev->napi, skb); 3919 } 3920 3921 static int lan78xx_rx(struct lan78xx_net *dev, struct sk_buff *skb, 3922 int budget, int *work_done) 3923 { 3924 if (skb->len < RX_SKB_MIN_LEN) 3925 return 0; 3926 3927 /* Extract frames from the URB buffer and pass each one to 3928 * the stack in a new NAPI SKB. 3929 */ 3930 while (skb->len > 0) { 3931 u32 rx_cmd_a, rx_cmd_b, align_count, size; 3932 u16 rx_cmd_c; 3933 unsigned char *packet; 3934 3935 rx_cmd_a = get_unaligned_le32(skb->data); 3936 skb_pull(skb, sizeof(rx_cmd_a)); 3937 3938 rx_cmd_b = get_unaligned_le32(skb->data); 3939 skb_pull(skb, sizeof(rx_cmd_b)); 3940 3941 rx_cmd_c = get_unaligned_le16(skb->data); 3942 skb_pull(skb, sizeof(rx_cmd_c)); 3943 3944 packet = skb->data; 3945 3946 /* get the packet length */ 3947 size = (rx_cmd_a & RX_CMD_A_LEN_MASK_); 3948 align_count = (4 - ((size + RXW_PADDING) % 4)) % 4; 3949 3950 if (unlikely(size > skb->len)) { 3951 netif_dbg(dev, rx_err, dev->net, 3952 "size err rx_cmd_a=0x%08x\n", 3953 rx_cmd_a); 3954 return 0; 3955 } 3956 3957 if (unlikely(rx_cmd_a & RX_CMD_A_RED_) && 3958 (rx_cmd_a & RX_CMD_A_RX_HARD_ERRS_MASK_)) { 3959 netif_dbg(dev, rx_err, dev->net, 3960 "Error rx_cmd_a=0x%08x", rx_cmd_a); 3961 } else { 3962 u32 frame_len; 3963 struct sk_buff *skb2; 3964 3965 if (unlikely(size < ETH_FCS_LEN)) { 3966 netif_dbg(dev, rx_err, dev->net, 3967 "size err rx_cmd_a=0x%08x\n", 3968 rx_cmd_a); 3969 return 0; 3970 } 3971 3972 frame_len = size - ETH_FCS_LEN; 3973 3974 skb2 = napi_alloc_skb(&dev->napi, frame_len); 3975 if (!skb2) 3976 return 0; 3977 3978 memcpy(skb2->data, packet, frame_len); 3979 3980 skb_put(skb2, frame_len); 3981 3982 lan78xx_rx_csum_offload(dev, skb2, rx_cmd_a, rx_cmd_b); 3983 lan78xx_rx_vlan_offload(dev, skb2, rx_cmd_a, rx_cmd_b); 3984 3985 /* Processing of the URB buffer must complete once 3986 * it has started. If the NAPI work budget is exhausted 3987 * while frames remain they are added to the overflow 3988 * queue for delivery in the next NAPI polling cycle. 3989 */ 3990 if (*work_done < budget) { 3991 lan78xx_skb_return(dev, skb2); 3992 ++(*work_done); 3993 } else { 3994 skb_queue_tail(&dev->rxq_overflow, skb2); 3995 } 3996 } 3997 3998 skb_pull(skb, size); 3999 4000 /* skip padding bytes before the next frame starts */ 4001 if (skb->len) 4002 skb_pull(skb, align_count); 4003 } 4004 4005 return 1; 4006 } 4007 4008 static inline void rx_process(struct lan78xx_net *dev, struct sk_buff *skb, 4009 int budget, int *work_done) 4010 { 4011 if (!lan78xx_rx(dev, skb, budget, work_done)) { 4012 netif_dbg(dev, rx_err, dev->net, "drop\n"); 4013 dev->net->stats.rx_errors++; 4014 } 4015 } 4016 4017 static void rx_complete(struct urb *urb) 4018 { 4019 struct sk_buff *skb = (struct sk_buff *)urb->context; 4020 struct skb_data *entry = (struct skb_data *)skb->cb; 4021 struct lan78xx_net *dev = entry->dev; 4022 int urb_status = urb->status; 4023 enum skb_state state; 4024 4025 netif_dbg(dev, rx_status, dev->net, 4026 "rx done: status %d", urb->status); 4027 4028 skb_put(skb, urb->actual_length); 4029 state = rx_done; 4030 4031 if (urb != entry->urb) 4032 netif_warn(dev, rx_err, dev->net, "URB pointer mismatch"); 4033 4034 switch (urb_status) { 4035 case 0: 4036 if (skb->len < RX_SKB_MIN_LEN) { 4037 state = rx_cleanup; 4038 dev->net->stats.rx_errors++; 4039 dev->net->stats.rx_length_errors++; 4040 netif_dbg(dev, rx_err, dev->net, 4041 "rx length %d\n", skb->len); 4042 } 4043 usb_mark_last_busy(dev->udev); 4044 break; 4045 case -EPIPE: 4046 dev->net->stats.rx_errors++; 4047 lan78xx_defer_kevent(dev, EVENT_RX_HALT); 4048 fallthrough; 4049 case -ECONNRESET: /* async unlink */ 4050 case -ESHUTDOWN: /* hardware gone */ 4051 netif_dbg(dev, ifdown, dev->net, 4052 "rx shutdown, code %d\n", urb_status); 4053 state = rx_cleanup; 4054 break; 4055 case -EPROTO: 4056 case -ETIME: 4057 case -EILSEQ: 4058 dev->net->stats.rx_errors++; 4059 state = rx_cleanup; 4060 break; 4061 4062 /* data overrun ... flush fifo? */ 4063 case -EOVERFLOW: 4064 dev->net->stats.rx_over_errors++; 4065 fallthrough; 4066 4067 default: 4068 state = rx_cleanup; 4069 dev->net->stats.rx_errors++; 4070 netif_dbg(dev, rx_err, dev->net, "rx status %d\n", urb_status); 4071 break; 4072 } 4073 4074 state = defer_bh(dev, skb, &dev->rxq, state); 4075 } 4076 4077 static int rx_submit(struct lan78xx_net *dev, struct sk_buff *skb, gfp_t flags) 4078 { 4079 struct skb_data *entry = (struct skb_data *)skb->cb; 4080 size_t size = dev->rx_urb_size; 4081 struct urb *urb = entry->urb; 4082 unsigned long lockflags; 4083 int ret = 0; 4084 4085 usb_fill_bulk_urb(urb, dev->udev, dev->pipe_in, 4086 skb->data, size, rx_complete, skb); 4087 4088 spin_lock_irqsave(&dev->rxq.lock, lockflags); 4089 4090 if (netif_device_present(dev->net) && 4091 netif_running(dev->net) && 4092 !test_bit(EVENT_RX_HALT, &dev->flags) && 4093 !test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { 4094 ret = usb_submit_urb(urb, flags); 4095 switch (ret) { 4096 case 0: 4097 lan78xx_queue_skb(&dev->rxq, skb, rx_start); 4098 break; 4099 case -EPIPE: 4100 lan78xx_defer_kevent(dev, EVENT_RX_HALT); 4101 break; 4102 case -ENODEV: 4103 case -ENOENT: 4104 netif_dbg(dev, ifdown, dev->net, "device gone\n"); 4105 netif_device_detach(dev->net); 4106 break; 4107 case -EHOSTUNREACH: 4108 ret = -ENOLINK; 4109 napi_schedule(&dev->napi); 4110 break; 4111 default: 4112 netif_dbg(dev, rx_err, dev->net, 4113 "rx submit, %d\n", ret); 4114 napi_schedule(&dev->napi); 4115 break; 4116 } 4117 } else { 4118 netif_dbg(dev, ifdown, dev->net, "rx: stopped\n"); 4119 ret = -ENOLINK; 4120 } 4121 spin_unlock_irqrestore(&dev->rxq.lock, lockflags); 4122 4123 if (ret) 4124 lan78xx_release_rx_buf(dev, skb); 4125 4126 return ret; 4127 } 4128 4129 static void lan78xx_rx_urb_submit_all(struct lan78xx_net *dev) 4130 { 4131 struct sk_buff *rx_buf; 4132 4133 /* Ensure the maximum number of Rx URBs is submitted 4134 */ 4135 while ((rx_buf = lan78xx_get_rx_buf(dev)) != NULL) { 4136 if (rx_submit(dev, rx_buf, GFP_ATOMIC) != 0) 4137 break; 4138 } 4139 } 4140 4141 static void lan78xx_rx_urb_resubmit(struct lan78xx_net *dev, 4142 struct sk_buff *rx_buf) 4143 { 4144 /* reset SKB data pointers */ 4145 4146 rx_buf->data = rx_buf->head; 4147 skb_reset_tail_pointer(rx_buf); 4148 rx_buf->len = 0; 4149 rx_buf->data_len = 0; 4150 4151 rx_submit(dev, rx_buf, GFP_ATOMIC); 4152 } 4153 4154 static void lan78xx_fill_tx_cmd_words(struct sk_buff *skb, u8 *buffer) 4155 { 4156 u32 tx_cmd_a; 4157 u32 tx_cmd_b; 4158 4159 tx_cmd_a = (u32)(skb->len & TX_CMD_A_LEN_MASK_) | TX_CMD_A_FCS_; 4160 4161 if (skb->ip_summed == CHECKSUM_PARTIAL) 4162 tx_cmd_a |= TX_CMD_A_IPE_ | TX_CMD_A_TPE_; 4163 4164 tx_cmd_b = 0; 4165 if (skb_is_gso(skb)) { 4166 u16 mss = max(skb_shinfo(skb)->gso_size, TX_CMD_B_MSS_MIN_); 4167 4168 tx_cmd_b = (mss << TX_CMD_B_MSS_SHIFT_) & TX_CMD_B_MSS_MASK_; 4169 4170 tx_cmd_a |= TX_CMD_A_LSO_; 4171 } 4172 4173 if (skb_vlan_tag_present(skb)) { 4174 tx_cmd_a |= TX_CMD_A_IVTG_; 4175 tx_cmd_b |= skb_vlan_tag_get(skb) & TX_CMD_B_VTAG_MASK_; 4176 } 4177 4178 put_unaligned_le32(tx_cmd_a, buffer); 4179 put_unaligned_le32(tx_cmd_b, buffer + 4); 4180 } 4181 4182 static struct skb_data *lan78xx_tx_buf_fill(struct lan78xx_net *dev, 4183 struct sk_buff *tx_buf) 4184 { 4185 struct skb_data *entry = (struct skb_data *)tx_buf->cb; 4186 int remain = dev->tx_urb_size; 4187 u8 *tx_data = tx_buf->data; 4188 u32 urb_len = 0; 4189 4190 entry->num_of_packet = 0; 4191 entry->length = 0; 4192 4193 /* Work through the pending SKBs and copy the data of each SKB into 4194 * the URB buffer if there room for all the SKB data. 4195 * 4196 * There must be at least DST+SRC+TYPE in the SKB (with padding enabled) 4197 */ 4198 while (remain >= TX_SKB_MIN_LEN) { 4199 unsigned int pending_bytes; 4200 unsigned int align_bytes; 4201 struct sk_buff *skb; 4202 unsigned int len; 4203 4204 lan78xx_tx_pend_skb_get(dev, &skb, &pending_bytes); 4205 4206 if (!skb) 4207 break; 4208 4209 align_bytes = (TX_ALIGNMENT - (urb_len % TX_ALIGNMENT)) % 4210 TX_ALIGNMENT; 4211 len = align_bytes + TX_CMD_LEN + skb->len; 4212 if (len > remain) { 4213 lan78xx_tx_pend_skb_head_add(dev, skb, &pending_bytes); 4214 break; 4215 } 4216 4217 tx_data += align_bytes; 4218 4219 lan78xx_fill_tx_cmd_words(skb, tx_data); 4220 tx_data += TX_CMD_LEN; 4221 4222 len = skb->len; 4223 if (skb_copy_bits(skb, 0, tx_data, len) < 0) { 4224 struct net_device_stats *stats = &dev->net->stats; 4225 4226 stats->tx_dropped++; 4227 dev_kfree_skb_any(skb); 4228 tx_data -= TX_CMD_LEN; 4229 continue; 4230 } 4231 4232 tx_data += len; 4233 entry->length += max_t(unsigned int, len, ETH_ZLEN); 4234 entry->num_of_packet += skb_shinfo(skb)->gso_segs ?: 1; 4235 4236 dev_kfree_skb_any(skb); 4237 4238 urb_len = (u32)(tx_data - (u8 *)tx_buf->data); 4239 4240 remain = dev->tx_urb_size - urb_len; 4241 } 4242 4243 skb_put(tx_buf, urb_len); 4244 4245 return entry; 4246 } 4247 4248 static void lan78xx_tx_bh(struct lan78xx_net *dev) 4249 { 4250 int ret; 4251 4252 /* Start the stack Tx queue if it was stopped 4253 */ 4254 netif_tx_lock(dev->net); 4255 if (netif_queue_stopped(dev->net)) { 4256 if (lan78xx_tx_pend_data_len(dev) < lan78xx_tx_urb_space(dev)) 4257 netif_wake_queue(dev->net); 4258 } 4259 netif_tx_unlock(dev->net); 4260 4261 /* Go through the Tx pending queue and set up URBs to transfer 4262 * the data to the device. Stop if no more pending data or URBs, 4263 * or if an error occurs when a URB is submitted. 4264 */ 4265 do { 4266 struct skb_data *entry; 4267 struct sk_buff *tx_buf; 4268 unsigned long flags; 4269 4270 if (skb_queue_empty(&dev->txq_pend)) 4271 break; 4272 4273 tx_buf = lan78xx_get_tx_buf(dev); 4274 if (!tx_buf) 4275 break; 4276 4277 entry = lan78xx_tx_buf_fill(dev, tx_buf); 4278 4279 spin_lock_irqsave(&dev->txq.lock, flags); 4280 ret = usb_autopm_get_interface_async(dev->intf); 4281 if (ret < 0) { 4282 spin_unlock_irqrestore(&dev->txq.lock, flags); 4283 goto out; 4284 } 4285 4286 usb_fill_bulk_urb(entry->urb, dev->udev, dev->pipe_out, 4287 tx_buf->data, tx_buf->len, tx_complete, 4288 tx_buf); 4289 4290 if (tx_buf->len % dev->maxpacket == 0) { 4291 /* send USB_ZERO_PACKET */ 4292 entry->urb->transfer_flags |= URB_ZERO_PACKET; 4293 } 4294 4295 #ifdef CONFIG_PM 4296 /* if device is asleep stop outgoing packet processing */ 4297 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { 4298 usb_anchor_urb(entry->urb, &dev->deferred); 4299 netif_stop_queue(dev->net); 4300 spin_unlock_irqrestore(&dev->txq.lock, flags); 4301 netdev_dbg(dev->net, 4302 "Delaying transmission for resumption\n"); 4303 return; 4304 } 4305 #endif 4306 ret = usb_submit_urb(entry->urb, GFP_ATOMIC); 4307 switch (ret) { 4308 case 0: 4309 netif_trans_update(dev->net); 4310 lan78xx_queue_skb(&dev->txq, tx_buf, tx_start); 4311 break; 4312 case -EPIPE: 4313 netif_stop_queue(dev->net); 4314 lan78xx_defer_kevent(dev, EVENT_TX_HALT); 4315 usb_autopm_put_interface_async(dev->intf); 4316 break; 4317 case -ENODEV: 4318 case -ENOENT: 4319 netif_dbg(dev, tx_err, dev->net, 4320 "tx submit urb err %d (disconnected?)", ret); 4321 netif_device_detach(dev->net); 4322 break; 4323 default: 4324 usb_autopm_put_interface_async(dev->intf); 4325 netif_dbg(dev, tx_err, dev->net, 4326 "tx submit urb err %d\n", ret); 4327 break; 4328 } 4329 4330 spin_unlock_irqrestore(&dev->txq.lock, flags); 4331 4332 if (ret) { 4333 netdev_warn(dev->net, "failed to tx urb %d\n", ret); 4334 out: 4335 dev->net->stats.tx_dropped += entry->num_of_packet; 4336 lan78xx_release_tx_buf(dev, tx_buf); 4337 } 4338 } while (ret == 0); 4339 } 4340 4341 static int lan78xx_bh(struct lan78xx_net *dev, int budget) 4342 { 4343 struct sk_buff_head done; 4344 struct sk_buff *rx_buf; 4345 struct skb_data *entry; 4346 unsigned long flags; 4347 int work_done = 0; 4348 4349 /* Pass frames received in the last NAPI cycle before 4350 * working on newly completed URBs. 4351 */ 4352 while (!skb_queue_empty(&dev->rxq_overflow)) { 4353 lan78xx_skb_return(dev, skb_dequeue(&dev->rxq_overflow)); 4354 ++work_done; 4355 } 4356 4357 /* Take a snapshot of the done queue and move items to a 4358 * temporary queue. Rx URB completions will continue to add 4359 * to the done queue. 4360 */ 4361 __skb_queue_head_init(&done); 4362 4363 spin_lock_irqsave(&dev->rxq_done.lock, flags); 4364 skb_queue_splice_init(&dev->rxq_done, &done); 4365 spin_unlock_irqrestore(&dev->rxq_done.lock, flags); 4366 4367 /* Extract receive frames from completed URBs and 4368 * pass them to the stack. Re-submit each completed URB. 4369 */ 4370 while ((work_done < budget) && 4371 (rx_buf = __skb_dequeue(&done))) { 4372 entry = (struct skb_data *)(rx_buf->cb); 4373 switch (entry->state) { 4374 case rx_done: 4375 rx_process(dev, rx_buf, budget, &work_done); 4376 break; 4377 case rx_cleanup: 4378 break; 4379 default: 4380 netdev_dbg(dev->net, "rx buf state %d\n", 4381 entry->state); 4382 break; 4383 } 4384 4385 lan78xx_rx_urb_resubmit(dev, rx_buf); 4386 } 4387 4388 /* If budget was consumed before processing all the URBs put them 4389 * back on the front of the done queue. They will be first to be 4390 * processed in the next NAPI cycle. 4391 */ 4392 spin_lock_irqsave(&dev->rxq_done.lock, flags); 4393 skb_queue_splice(&done, &dev->rxq_done); 4394 spin_unlock_irqrestore(&dev->rxq_done.lock, flags); 4395 4396 if (netif_device_present(dev->net) && netif_running(dev->net)) { 4397 /* reset update timer delta */ 4398 if (timer_pending(&dev->stat_monitor) && (dev->delta != 1)) { 4399 dev->delta = 1; 4400 mod_timer(&dev->stat_monitor, 4401 jiffies + STAT_UPDATE_TIMER); 4402 } 4403 4404 /* Submit all free Rx URBs */ 4405 4406 if (!test_bit(EVENT_RX_HALT, &dev->flags)) 4407 lan78xx_rx_urb_submit_all(dev); 4408 4409 /* Submit new Tx URBs */ 4410 4411 lan78xx_tx_bh(dev); 4412 } 4413 4414 return work_done; 4415 } 4416 4417 static int lan78xx_poll(struct napi_struct *napi, int budget) 4418 { 4419 struct lan78xx_net *dev = container_of(napi, struct lan78xx_net, napi); 4420 int result = budget; 4421 int work_done; 4422 4423 /* Don't do any work if the device is suspended */ 4424 4425 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { 4426 napi_complete_done(napi, 0); 4427 return 0; 4428 } 4429 4430 /* Process completed URBs and submit new URBs */ 4431 4432 work_done = lan78xx_bh(dev, budget); 4433 4434 if (work_done < budget) { 4435 napi_complete_done(napi, work_done); 4436 4437 /* Start a new polling cycle if data was received or 4438 * data is waiting to be transmitted. 4439 */ 4440 if (!skb_queue_empty(&dev->rxq_done)) { 4441 napi_schedule(napi); 4442 } else if (netif_carrier_ok(dev->net)) { 4443 if (skb_queue_empty(&dev->txq) && 4444 !skb_queue_empty(&dev->txq_pend)) { 4445 napi_schedule(napi); 4446 } else { 4447 netif_tx_lock(dev->net); 4448 if (netif_queue_stopped(dev->net)) { 4449 netif_wake_queue(dev->net); 4450 napi_schedule(napi); 4451 } 4452 netif_tx_unlock(dev->net); 4453 } 4454 } 4455 result = work_done; 4456 } 4457 4458 return result; 4459 } 4460 4461 static void lan78xx_delayedwork(struct work_struct *work) 4462 { 4463 int status; 4464 struct lan78xx_net *dev; 4465 4466 dev = container_of(work, struct lan78xx_net, wq.work); 4467 4468 if (test_bit(EVENT_DEV_DISCONNECT, &dev->flags)) 4469 return; 4470 4471 if (usb_autopm_get_interface(dev->intf) < 0) 4472 return; 4473 4474 if (test_bit(EVENT_TX_HALT, &dev->flags)) { 4475 unlink_urbs(dev, &dev->txq); 4476 4477 status = usb_clear_halt(dev->udev, dev->pipe_out); 4478 if (status < 0 && 4479 status != -EPIPE && 4480 status != -ESHUTDOWN) { 4481 if (netif_msg_tx_err(dev)) 4482 netdev_err(dev->net, 4483 "can't clear tx halt, status %d\n", 4484 status); 4485 } else { 4486 clear_bit(EVENT_TX_HALT, &dev->flags); 4487 if (status != -ESHUTDOWN) 4488 netif_wake_queue(dev->net); 4489 } 4490 } 4491 4492 if (test_bit(EVENT_RX_HALT, &dev->flags)) { 4493 unlink_urbs(dev, &dev->rxq); 4494 status = usb_clear_halt(dev->udev, dev->pipe_in); 4495 if (status < 0 && 4496 status != -EPIPE && 4497 status != -ESHUTDOWN) { 4498 if (netif_msg_rx_err(dev)) 4499 netdev_err(dev->net, 4500 "can't clear rx halt, status %d\n", 4501 status); 4502 } else { 4503 clear_bit(EVENT_RX_HALT, &dev->flags); 4504 napi_schedule(&dev->napi); 4505 } 4506 } 4507 4508 if (test_bit(EVENT_PHY_INT_ACK, &dev->flags)) { 4509 int ret = 0; 4510 4511 clear_bit(EVENT_PHY_INT_ACK, &dev->flags); 4512 ret = lan78xx_phy_int_ack(dev); 4513 if (ret) 4514 netdev_info(dev->net, "PHY INT ack failed (%pe)\n", 4515 ERR_PTR(ret)); 4516 } 4517 4518 if (test_bit(EVENT_STAT_UPDATE, &dev->flags)) { 4519 lan78xx_update_stats(dev); 4520 4521 clear_bit(EVENT_STAT_UPDATE, &dev->flags); 4522 4523 mod_timer(&dev->stat_monitor, 4524 jiffies + (STAT_UPDATE_TIMER * dev->delta)); 4525 4526 dev->delta = min((dev->delta * 2), 50); 4527 } 4528 4529 usb_autopm_put_interface(dev->intf); 4530 } 4531 4532 static void intr_complete(struct urb *urb) 4533 { 4534 struct lan78xx_net *dev = urb->context; 4535 int status = urb->status; 4536 4537 switch (status) { 4538 /* success */ 4539 case 0: 4540 lan78xx_status(dev, urb); 4541 break; 4542 4543 /* software-driven interface shutdown */ 4544 case -ENOENT: /* urb killed */ 4545 case -ENODEV: /* hardware gone */ 4546 case -ESHUTDOWN: /* hardware gone */ 4547 netif_dbg(dev, ifdown, dev->net, 4548 "intr shutdown, code %d\n", status); 4549 return; 4550 4551 /* NOTE: not throttling like RX/TX, since this endpoint 4552 * already polls infrequently 4553 */ 4554 default: 4555 netdev_dbg(dev->net, "intr status %d\n", status); 4556 break; 4557 } 4558 4559 if (!netif_device_present(dev->net) || 4560 !netif_running(dev->net)) { 4561 netdev_warn(dev->net, "not submitting new status URB"); 4562 return; 4563 } 4564 4565 memset(urb->transfer_buffer, 0, urb->transfer_buffer_length); 4566 status = usb_submit_urb(urb, GFP_ATOMIC); 4567 4568 switch (status) { 4569 case 0: 4570 break; 4571 case -ENODEV: 4572 case -ENOENT: 4573 netif_dbg(dev, timer, dev->net, 4574 "intr resubmit %d (disconnect?)", status); 4575 netif_device_detach(dev->net); 4576 break; 4577 default: 4578 netif_err(dev, timer, dev->net, 4579 "intr resubmit --> %d\n", status); 4580 break; 4581 } 4582 } 4583 4584 static void lan78xx_disconnect(struct usb_interface *intf) 4585 { 4586 struct lan78xx_net *dev; 4587 struct net_device *net; 4588 4589 dev = usb_get_intfdata(intf); 4590 usb_set_intfdata(intf, NULL); 4591 if (!dev) 4592 return; 4593 4594 net = dev->net; 4595 4596 rtnl_lock(); 4597 phylink_stop(dev->phylink); 4598 phylink_disconnect_phy(dev->phylink); 4599 rtnl_unlock(); 4600 4601 unregister_netdev(net); 4602 4603 timer_shutdown_sync(&dev->stat_monitor); 4604 set_bit(EVENT_DEV_DISCONNECT, &dev->flags); 4605 cancel_delayed_work_sync(&dev->wq); 4606 4607 phylink_destroy(dev->phylink); 4608 4609 usb_scuttle_anchored_urbs(&dev->deferred); 4610 4611 lan78xx_unbind(dev, intf); 4612 4613 lan78xx_free_tx_resources(dev); 4614 lan78xx_free_rx_resources(dev); 4615 4616 usb_kill_urb(dev->urb_intr); 4617 usb_free_urb(dev->urb_intr); 4618 4619 free_netdev(net); 4620 } 4621 4622 static void lan78xx_tx_timeout(struct net_device *net, unsigned int txqueue) 4623 { 4624 struct lan78xx_net *dev = netdev_priv(net); 4625 4626 unlink_urbs(dev, &dev->txq); 4627 napi_schedule(&dev->napi); 4628 } 4629 4630 static netdev_features_t lan78xx_features_check(struct sk_buff *skb, 4631 struct net_device *netdev, 4632 netdev_features_t features) 4633 { 4634 struct lan78xx_net *dev = netdev_priv(netdev); 4635 4636 if (skb->len > LAN78XX_TSO_SIZE(dev)) 4637 features &= ~NETIF_F_GSO_MASK; 4638 4639 features = vlan_features_check(skb, features); 4640 features = vxlan_features_check(skb, features); 4641 4642 return features; 4643 } 4644 4645 static const struct net_device_ops lan78xx_netdev_ops = { 4646 .ndo_open = lan78xx_open, 4647 .ndo_stop = lan78xx_stop, 4648 .ndo_start_xmit = lan78xx_start_xmit, 4649 .ndo_tx_timeout = lan78xx_tx_timeout, 4650 .ndo_change_mtu = lan78xx_change_mtu, 4651 .ndo_set_mac_address = lan78xx_set_mac_addr, 4652 .ndo_validate_addr = eth_validate_addr, 4653 .ndo_eth_ioctl = phy_do_ioctl_running, 4654 .ndo_set_rx_mode = lan78xx_set_multicast, 4655 .ndo_set_features = lan78xx_set_features, 4656 .ndo_vlan_rx_add_vid = lan78xx_vlan_rx_add_vid, 4657 .ndo_vlan_rx_kill_vid = lan78xx_vlan_rx_kill_vid, 4658 .ndo_features_check = lan78xx_features_check, 4659 }; 4660 4661 static void lan78xx_stat_monitor(struct timer_list *t) 4662 { 4663 struct lan78xx_net *dev = timer_container_of(dev, t, stat_monitor); 4664 4665 lan78xx_defer_kevent(dev, EVENT_STAT_UPDATE); 4666 } 4667 4668 static int lan78xx_probe(struct usb_interface *intf, 4669 const struct usb_device_id *id) 4670 { 4671 struct usb_host_endpoint *ep_blkin, *ep_blkout, *ep_intr; 4672 struct lan78xx_net *dev; 4673 struct net_device *netdev; 4674 struct usb_device *udev; 4675 int ret; 4676 unsigned int maxp; 4677 unsigned int period; 4678 u8 *buf = NULL; 4679 4680 udev = interface_to_usbdev(intf); 4681 4682 netdev = alloc_etherdev(sizeof(struct lan78xx_net)); 4683 if (!netdev) { 4684 dev_err(&intf->dev, "Error: OOM\n"); 4685 return -ENOMEM; 4686 } 4687 4688 SET_NETDEV_DEV(netdev, &intf->dev); 4689 4690 dev = netdev_priv(netdev); 4691 dev->udev = udev; 4692 dev->intf = intf; 4693 dev->net = netdev; 4694 dev->msg_enable = netif_msg_init(msg_level, NETIF_MSG_DRV 4695 | NETIF_MSG_PROBE | NETIF_MSG_LINK); 4696 4697 skb_queue_head_init(&dev->rxq); 4698 skb_queue_head_init(&dev->txq); 4699 skb_queue_head_init(&dev->rxq_done); 4700 skb_queue_head_init(&dev->txq_pend); 4701 skb_queue_head_init(&dev->rxq_overflow); 4702 mutex_init(&dev->mdiobus_mutex); 4703 mutex_init(&dev->dev_mutex); 4704 4705 ret = lan78xx_urb_config_init(dev); 4706 if (ret < 0) 4707 goto out2; 4708 4709 ret = lan78xx_alloc_tx_resources(dev); 4710 if (ret < 0) 4711 goto out2; 4712 4713 ret = lan78xx_alloc_rx_resources(dev); 4714 if (ret < 0) 4715 goto out3; 4716 4717 /* MTU range: 68 - 9000 */ 4718 netdev->max_mtu = MAX_SINGLE_PACKET_SIZE; 4719 4720 netif_set_tso_max_size(netdev, LAN78XX_TSO_SIZE(dev)); 4721 4722 netif_napi_add(netdev, &dev->napi, lan78xx_poll); 4723 4724 INIT_DELAYED_WORK(&dev->wq, lan78xx_delayedwork); 4725 init_usb_anchor(&dev->deferred); 4726 4727 netdev->netdev_ops = &lan78xx_netdev_ops; 4728 netdev->watchdog_timeo = TX_TIMEOUT_JIFFIES; 4729 netdev->ethtool_ops = &lan78xx_ethtool_ops; 4730 4731 dev->delta = 1; 4732 timer_setup(&dev->stat_monitor, lan78xx_stat_monitor, 0); 4733 4734 mutex_init(&dev->stats.access_lock); 4735 4736 if (intf->cur_altsetting->desc.bNumEndpoints < 3) { 4737 ret = -ENODEV; 4738 goto out4; 4739 } 4740 4741 dev->pipe_in = usb_rcvbulkpipe(udev, BULK_IN_PIPE); 4742 ep_blkin = usb_pipe_endpoint(udev, dev->pipe_in); 4743 if (!ep_blkin || !usb_endpoint_is_bulk_in(&ep_blkin->desc)) { 4744 ret = -ENODEV; 4745 goto out4; 4746 } 4747 4748 dev->pipe_out = usb_sndbulkpipe(udev, BULK_OUT_PIPE); 4749 ep_blkout = usb_pipe_endpoint(udev, dev->pipe_out); 4750 if (!ep_blkout || !usb_endpoint_is_bulk_out(&ep_blkout->desc)) { 4751 ret = -ENODEV; 4752 goto out4; 4753 } 4754 4755 ep_intr = &intf->cur_altsetting->endpoint[2]; 4756 if (!usb_endpoint_is_int_in(&ep_intr->desc)) { 4757 ret = -ENODEV; 4758 goto out4; 4759 } 4760 4761 dev->pipe_intr = usb_rcvintpipe(dev->udev, 4762 usb_endpoint_num(&ep_intr->desc)); 4763 4764 ret = lan78xx_bind(dev, intf); 4765 if (ret < 0) 4766 goto out4; 4767 4768 period = ep_intr->desc.bInterval; 4769 maxp = usb_maxpacket(dev->udev, dev->pipe_intr); 4770 4771 dev->urb_intr = usb_alloc_urb(0, GFP_KERNEL); 4772 if (!dev->urb_intr) { 4773 ret = -ENOMEM; 4774 goto out5; 4775 } 4776 4777 buf = kmalloc(maxp, GFP_KERNEL); 4778 if (!buf) { 4779 ret = -ENOMEM; 4780 goto free_urbs; 4781 } 4782 4783 usb_fill_int_urb(dev->urb_intr, dev->udev, 4784 dev->pipe_intr, buf, maxp, 4785 intr_complete, dev, period); 4786 dev->urb_intr->transfer_flags |= URB_FREE_BUFFER; 4787 4788 dev->maxpacket = usb_maxpacket(dev->udev, dev->pipe_out); 4789 4790 /* Reject broken descriptors. */ 4791 if (dev->maxpacket == 0) { 4792 ret = -ENODEV; 4793 goto free_urbs; 4794 } 4795 4796 /* driver requires remote-wakeup capability during autosuspend. */ 4797 intf->needs_remote_wakeup = 1; 4798 4799 ret = lan78xx_phy_init(dev); 4800 if (ret < 0) 4801 goto free_urbs; 4802 4803 ret = register_netdev(netdev); 4804 if (ret != 0) { 4805 netif_err(dev, probe, netdev, "couldn't register the device\n"); 4806 goto phy_uninit; 4807 } 4808 4809 usb_set_intfdata(intf, dev); 4810 4811 ret = device_set_wakeup_enable(&udev->dev, true); 4812 4813 /* Default delay of 2sec has more overhead than advantage. 4814 * Set to 10sec as default. 4815 */ 4816 pm_runtime_set_autosuspend_delay(&udev->dev, 4817 DEFAULT_AUTOSUSPEND_DELAY); 4818 4819 return 0; 4820 4821 phy_uninit: 4822 lan78xx_phy_uninit(dev); 4823 free_urbs: 4824 usb_free_urb(dev->urb_intr); 4825 out5: 4826 lan78xx_unbind(dev, intf); 4827 out4: 4828 netif_napi_del(&dev->napi); 4829 lan78xx_free_rx_resources(dev); 4830 out3: 4831 lan78xx_free_tx_resources(dev); 4832 out2: 4833 free_netdev(netdev); 4834 4835 return ret; 4836 } 4837 4838 static u16 lan78xx_wakeframe_crc16(const u8 *buf, int len) 4839 { 4840 const u16 crc16poly = 0x8005; 4841 int i; 4842 u16 bit, crc, msb; 4843 u8 data; 4844 4845 crc = 0xFFFF; 4846 for (i = 0; i < len; i++) { 4847 data = *buf++; 4848 for (bit = 0; bit < 8; bit++) { 4849 msb = crc >> 15; 4850 crc <<= 1; 4851 4852 if (msb ^ (u16)(data & 1)) { 4853 crc ^= crc16poly; 4854 crc |= (u16)0x0001U; 4855 } 4856 data >>= 1; 4857 } 4858 } 4859 4860 return crc; 4861 } 4862 4863 static int lan78xx_set_auto_suspend(struct lan78xx_net *dev) 4864 { 4865 u32 buf; 4866 int ret; 4867 4868 ret = lan78xx_stop_tx_path(dev); 4869 if (ret < 0) 4870 return ret; 4871 4872 ret = lan78xx_stop_rx_path(dev); 4873 if (ret < 0) 4874 return ret; 4875 4876 /* auto suspend (selective suspend) */ 4877 4878 ret = lan78xx_write_reg(dev, WUCSR, 0); 4879 if (ret < 0) 4880 return ret; 4881 ret = lan78xx_write_reg(dev, WUCSR2, 0); 4882 if (ret < 0) 4883 return ret; 4884 ret = lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL); 4885 if (ret < 0) 4886 return ret; 4887 4888 /* set goodframe wakeup */ 4889 4890 ret = lan78xx_read_reg(dev, WUCSR, &buf); 4891 if (ret < 0) 4892 return ret; 4893 4894 buf |= WUCSR_RFE_WAKE_EN_; 4895 buf |= WUCSR_STORE_WAKE_; 4896 4897 ret = lan78xx_write_reg(dev, WUCSR, buf); 4898 if (ret < 0) 4899 return ret; 4900 4901 ret = lan78xx_read_reg(dev, PMT_CTL, &buf); 4902 if (ret < 0) 4903 return ret; 4904 4905 buf &= ~PMT_CTL_RES_CLR_WKP_EN_; 4906 buf |= PMT_CTL_RES_CLR_WKP_STS_; 4907 buf |= PMT_CTL_PHY_WAKE_EN_; 4908 buf |= PMT_CTL_WOL_EN_; 4909 buf &= ~PMT_CTL_SUS_MODE_MASK_; 4910 buf |= PMT_CTL_SUS_MODE_3_; 4911 4912 ret = lan78xx_write_reg(dev, PMT_CTL, buf); 4913 if (ret < 0) 4914 return ret; 4915 4916 ret = lan78xx_read_reg(dev, PMT_CTL, &buf); 4917 if (ret < 0) 4918 return ret; 4919 4920 buf |= PMT_CTL_WUPS_MASK_; 4921 4922 ret = lan78xx_write_reg(dev, PMT_CTL, buf); 4923 if (ret < 0) 4924 return ret; 4925 4926 ret = lan78xx_start_rx_path(dev); 4927 4928 return ret; 4929 } 4930 4931 static int lan78xx_set_suspend(struct lan78xx_net *dev, u32 wol) 4932 { 4933 const u8 ipv4_multicast[3] = { 0x01, 0x00, 0x5E }; 4934 const u8 ipv6_multicast[3] = { 0x33, 0x33 }; 4935 const u8 arp_type[2] = { 0x08, 0x06 }; 4936 u32 temp_pmt_ctl; 4937 int mask_index; 4938 u32 temp_wucsr; 4939 u32 buf; 4940 u16 crc; 4941 int ret; 4942 4943 ret = lan78xx_stop_tx_path(dev); 4944 if (ret < 0) 4945 return ret; 4946 ret = lan78xx_stop_rx_path(dev); 4947 if (ret < 0) 4948 return ret; 4949 4950 ret = lan78xx_write_reg(dev, WUCSR, 0); 4951 if (ret < 0) 4952 return ret; 4953 ret = lan78xx_write_reg(dev, WUCSR2, 0); 4954 if (ret < 0) 4955 return ret; 4956 ret = lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL); 4957 if (ret < 0) 4958 return ret; 4959 4960 temp_wucsr = 0; 4961 4962 temp_pmt_ctl = 0; 4963 4964 ret = lan78xx_read_reg(dev, PMT_CTL, &temp_pmt_ctl); 4965 if (ret < 0) 4966 return ret; 4967 4968 temp_pmt_ctl &= ~PMT_CTL_RES_CLR_WKP_EN_; 4969 temp_pmt_ctl |= PMT_CTL_RES_CLR_WKP_STS_; 4970 4971 for (mask_index = 0; mask_index < NUM_OF_WUF_CFG; mask_index++) { 4972 ret = lan78xx_write_reg(dev, WUF_CFG(mask_index), 0); 4973 if (ret < 0) 4974 return ret; 4975 } 4976 4977 mask_index = 0; 4978 if (wol & WAKE_PHY) { 4979 temp_pmt_ctl |= PMT_CTL_PHY_WAKE_EN_; 4980 4981 temp_pmt_ctl |= PMT_CTL_WOL_EN_; 4982 temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_; 4983 temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_; 4984 } 4985 if (wol & WAKE_MAGIC) { 4986 temp_wucsr |= WUCSR_MPEN_; 4987 4988 temp_pmt_ctl |= PMT_CTL_WOL_EN_; 4989 temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_; 4990 temp_pmt_ctl |= PMT_CTL_SUS_MODE_3_; 4991 } 4992 if (wol & WAKE_BCAST) { 4993 temp_wucsr |= WUCSR_BCST_EN_; 4994 4995 temp_pmt_ctl |= PMT_CTL_WOL_EN_; 4996 temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_; 4997 temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_; 4998 } 4999 if (wol & WAKE_MCAST) { 5000 temp_wucsr |= WUCSR_WAKE_EN_; 5001 5002 /* set WUF_CFG & WUF_MASK for IPv4 Multicast */ 5003 crc = lan78xx_wakeframe_crc16(ipv4_multicast, 3); 5004 ret = lan78xx_write_reg(dev, WUF_CFG(mask_index), 5005 WUF_CFGX_EN_ | 5006 WUF_CFGX_TYPE_MCAST_ | 5007 (0 << WUF_CFGX_OFFSET_SHIFT_) | 5008 (crc & WUF_CFGX_CRC16_MASK_)); 5009 if (ret < 0) 5010 return ret; 5011 5012 ret = lan78xx_write_reg(dev, WUF_MASK0(mask_index), 7); 5013 if (ret < 0) 5014 return ret; 5015 ret = lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0); 5016 if (ret < 0) 5017 return ret; 5018 ret = lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0); 5019 if (ret < 0) 5020 return ret; 5021 ret = lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0); 5022 if (ret < 0) 5023 return ret; 5024 5025 mask_index++; 5026 5027 /* for IPv6 Multicast */ 5028 crc = lan78xx_wakeframe_crc16(ipv6_multicast, 2); 5029 ret = lan78xx_write_reg(dev, WUF_CFG(mask_index), 5030 WUF_CFGX_EN_ | 5031 WUF_CFGX_TYPE_MCAST_ | 5032 (0 << WUF_CFGX_OFFSET_SHIFT_) | 5033 (crc & WUF_CFGX_CRC16_MASK_)); 5034 if (ret < 0) 5035 return ret; 5036 5037 ret = lan78xx_write_reg(dev, WUF_MASK0(mask_index), 3); 5038 if (ret < 0) 5039 return ret; 5040 ret = lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0); 5041 if (ret < 0) 5042 return ret; 5043 ret = lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0); 5044 if (ret < 0) 5045 return ret; 5046 ret = lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0); 5047 if (ret < 0) 5048 return ret; 5049 5050 mask_index++; 5051 5052 temp_pmt_ctl |= PMT_CTL_WOL_EN_; 5053 temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_; 5054 temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_; 5055 } 5056 if (wol & WAKE_UCAST) { 5057 temp_wucsr |= WUCSR_PFDA_EN_; 5058 5059 temp_pmt_ctl |= PMT_CTL_WOL_EN_; 5060 temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_; 5061 temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_; 5062 } 5063 if (wol & WAKE_ARP) { 5064 temp_wucsr |= WUCSR_WAKE_EN_; 5065 5066 /* set WUF_CFG & WUF_MASK 5067 * for packettype (offset 12,13) = ARP (0x0806) 5068 */ 5069 crc = lan78xx_wakeframe_crc16(arp_type, 2); 5070 ret = lan78xx_write_reg(dev, WUF_CFG(mask_index), 5071 WUF_CFGX_EN_ | 5072 WUF_CFGX_TYPE_ALL_ | 5073 (0 << WUF_CFGX_OFFSET_SHIFT_) | 5074 (crc & WUF_CFGX_CRC16_MASK_)); 5075 if (ret < 0) 5076 return ret; 5077 5078 ret = lan78xx_write_reg(dev, WUF_MASK0(mask_index), 0x3000); 5079 if (ret < 0) 5080 return ret; 5081 ret = lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0); 5082 if (ret < 0) 5083 return ret; 5084 ret = lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0); 5085 if (ret < 0) 5086 return ret; 5087 ret = lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0); 5088 if (ret < 0) 5089 return ret; 5090 5091 mask_index++; 5092 5093 temp_pmt_ctl |= PMT_CTL_WOL_EN_; 5094 temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_; 5095 temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_; 5096 } 5097 5098 ret = lan78xx_write_reg(dev, WUCSR, temp_wucsr); 5099 if (ret < 0) 5100 return ret; 5101 5102 /* when multiple WOL bits are set */ 5103 if (hweight_long((unsigned long)wol) > 1) { 5104 temp_pmt_ctl |= PMT_CTL_WOL_EN_; 5105 temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_; 5106 temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_; 5107 } 5108 ret = lan78xx_write_reg(dev, PMT_CTL, temp_pmt_ctl); 5109 if (ret < 0) 5110 return ret; 5111 5112 /* clear WUPS */ 5113 ret = lan78xx_read_reg(dev, PMT_CTL, &buf); 5114 if (ret < 0) 5115 return ret; 5116 5117 buf |= PMT_CTL_WUPS_MASK_; 5118 5119 ret = lan78xx_write_reg(dev, PMT_CTL, buf); 5120 if (ret < 0) 5121 return ret; 5122 5123 ret = lan78xx_start_rx_path(dev); 5124 5125 return ret; 5126 } 5127 5128 static int lan78xx_suspend(struct usb_interface *intf, pm_message_t message) 5129 { 5130 struct lan78xx_net *dev = usb_get_intfdata(intf); 5131 bool dev_open; 5132 int ret; 5133 5134 mutex_lock(&dev->dev_mutex); 5135 5136 netif_dbg(dev, ifdown, dev->net, 5137 "suspending: pm event %#x", message.event); 5138 5139 dev_open = test_bit(EVENT_DEV_OPEN, &dev->flags); 5140 5141 if (dev_open) { 5142 spin_lock_irq(&dev->txq.lock); 5143 /* don't autosuspend while transmitting */ 5144 if ((skb_queue_len(&dev->txq) || 5145 skb_queue_len(&dev->txq_pend)) && 5146 PMSG_IS_AUTO(message)) { 5147 spin_unlock_irq(&dev->txq.lock); 5148 ret = -EBUSY; 5149 goto out; 5150 } else { 5151 set_bit(EVENT_DEV_ASLEEP, &dev->flags); 5152 spin_unlock_irq(&dev->txq.lock); 5153 } 5154 5155 rtnl_lock(); 5156 phylink_suspend(dev->phylink, false); 5157 rtnl_unlock(); 5158 5159 /* stop RX */ 5160 ret = lan78xx_stop_rx_path(dev); 5161 if (ret < 0) 5162 goto out; 5163 5164 ret = lan78xx_flush_rx_fifo(dev); 5165 if (ret < 0) 5166 goto out; 5167 5168 /* stop Tx */ 5169 ret = lan78xx_stop_tx_path(dev); 5170 if (ret < 0) 5171 goto out; 5172 5173 /* empty out the Rx and Tx queues */ 5174 netif_device_detach(dev->net); 5175 lan78xx_terminate_urbs(dev); 5176 usb_kill_urb(dev->urb_intr); 5177 5178 /* reattach */ 5179 netif_device_attach(dev->net); 5180 5181 timer_delete(&dev->stat_monitor); 5182 5183 if (PMSG_IS_AUTO(message)) { 5184 ret = lan78xx_set_auto_suspend(dev); 5185 if (ret < 0) 5186 goto out; 5187 } else { 5188 struct lan78xx_priv *pdata; 5189 5190 pdata = (struct lan78xx_priv *)(dev->data[0]); 5191 netif_carrier_off(dev->net); 5192 ret = lan78xx_set_suspend(dev, pdata->wol); 5193 if (ret < 0) 5194 goto out; 5195 } 5196 } else { 5197 /* Interface is down; don't allow WOL and PHY 5198 * events to wake up the host 5199 */ 5200 u32 buf; 5201 5202 set_bit(EVENT_DEV_ASLEEP, &dev->flags); 5203 5204 ret = lan78xx_write_reg(dev, WUCSR, 0); 5205 if (ret < 0) 5206 goto out; 5207 ret = lan78xx_write_reg(dev, WUCSR2, 0); 5208 if (ret < 0) 5209 goto out; 5210 5211 ret = lan78xx_read_reg(dev, PMT_CTL, &buf); 5212 if (ret < 0) 5213 goto out; 5214 5215 buf &= ~PMT_CTL_RES_CLR_WKP_EN_; 5216 buf |= PMT_CTL_RES_CLR_WKP_STS_; 5217 buf &= ~PMT_CTL_SUS_MODE_MASK_; 5218 buf |= PMT_CTL_SUS_MODE_3_; 5219 5220 ret = lan78xx_write_reg(dev, PMT_CTL, buf); 5221 if (ret < 0) 5222 goto out; 5223 5224 ret = lan78xx_read_reg(dev, PMT_CTL, &buf); 5225 if (ret < 0) 5226 goto out; 5227 5228 buf |= PMT_CTL_WUPS_MASK_; 5229 5230 ret = lan78xx_write_reg(dev, PMT_CTL, buf); 5231 if (ret < 0) 5232 goto out; 5233 } 5234 5235 ret = 0; 5236 out: 5237 mutex_unlock(&dev->dev_mutex); 5238 5239 return ret; 5240 } 5241 5242 static bool lan78xx_submit_deferred_urbs(struct lan78xx_net *dev) 5243 { 5244 bool pipe_halted = false; 5245 struct urb *urb; 5246 5247 while ((urb = usb_get_from_anchor(&dev->deferred))) { 5248 struct sk_buff *skb = urb->context; 5249 int ret; 5250 5251 if (!netif_device_present(dev->net) || 5252 !netif_carrier_ok(dev->net) || 5253 pipe_halted) { 5254 lan78xx_release_tx_buf(dev, skb); 5255 usb_put_urb(urb); 5256 continue; 5257 } 5258 5259 ret = usb_submit_urb(urb, GFP_ATOMIC); 5260 usb_put_urb(urb); 5261 5262 if (ret == 0) { 5263 netif_trans_update(dev->net); 5264 lan78xx_queue_skb(&dev->txq, skb, tx_start); 5265 } else { 5266 if (ret == -EPIPE) { 5267 netif_stop_queue(dev->net); 5268 pipe_halted = true; 5269 } else if (ret == -ENODEV) { 5270 netif_device_detach(dev->net); 5271 } 5272 5273 lan78xx_release_tx_buf(dev, skb); 5274 } 5275 } 5276 5277 return pipe_halted; 5278 } 5279 5280 static int lan78xx_resume(struct usb_interface *intf) 5281 { 5282 struct lan78xx_net *dev = usb_get_intfdata(intf); 5283 bool dev_open; 5284 int ret; 5285 5286 mutex_lock(&dev->dev_mutex); 5287 5288 netif_dbg(dev, ifup, dev->net, "resuming device"); 5289 5290 dev_open = test_bit(EVENT_DEV_OPEN, &dev->flags); 5291 5292 if (dev_open) { 5293 bool pipe_halted = false; 5294 5295 ret = lan78xx_flush_tx_fifo(dev); 5296 if (ret < 0) 5297 goto out; 5298 5299 if (dev->urb_intr) { 5300 int ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL); 5301 5302 if (ret < 0) { 5303 if (ret == -ENODEV) 5304 netif_device_detach(dev->net); 5305 netdev_warn(dev->net, "Failed to submit intr URB"); 5306 } 5307 } 5308 5309 spin_lock_irq(&dev->txq.lock); 5310 5311 if (netif_device_present(dev->net)) { 5312 pipe_halted = lan78xx_submit_deferred_urbs(dev); 5313 5314 if (pipe_halted) 5315 lan78xx_defer_kevent(dev, EVENT_TX_HALT); 5316 } 5317 5318 clear_bit(EVENT_DEV_ASLEEP, &dev->flags); 5319 5320 spin_unlock_irq(&dev->txq.lock); 5321 5322 if (!pipe_halted && 5323 netif_device_present(dev->net) && 5324 (lan78xx_tx_pend_data_len(dev) < lan78xx_tx_urb_space(dev))) 5325 netif_start_queue(dev->net); 5326 5327 ret = lan78xx_start_tx_path(dev); 5328 if (ret < 0) 5329 goto out; 5330 5331 napi_schedule(&dev->napi); 5332 5333 if (!timer_pending(&dev->stat_monitor)) { 5334 dev->delta = 1; 5335 mod_timer(&dev->stat_monitor, 5336 jiffies + STAT_UPDATE_TIMER); 5337 } 5338 5339 } else { 5340 clear_bit(EVENT_DEV_ASLEEP, &dev->flags); 5341 } 5342 5343 ret = lan78xx_write_reg(dev, WUCSR2, 0); 5344 if (ret < 0) 5345 goto out; 5346 ret = lan78xx_write_reg(dev, WUCSR, 0); 5347 if (ret < 0) 5348 goto out; 5349 ret = lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL); 5350 if (ret < 0) 5351 goto out; 5352 5353 ret = lan78xx_write_reg(dev, WUCSR2, WUCSR2_NS_RCD_ | 5354 WUCSR2_ARP_RCD_ | 5355 WUCSR2_IPV6_TCPSYN_RCD_ | 5356 WUCSR2_IPV4_TCPSYN_RCD_); 5357 if (ret < 0) 5358 goto out; 5359 5360 ret = lan78xx_write_reg(dev, WUCSR, WUCSR_EEE_TX_WAKE_ | 5361 WUCSR_EEE_RX_WAKE_ | 5362 WUCSR_PFDA_FR_ | 5363 WUCSR_RFE_WAKE_FR_ | 5364 WUCSR_WUFR_ | 5365 WUCSR_MPR_ | 5366 WUCSR_BCST_FR_); 5367 if (ret < 0) 5368 goto out; 5369 5370 ret = 0; 5371 out: 5372 mutex_unlock(&dev->dev_mutex); 5373 5374 return ret; 5375 } 5376 5377 static int lan78xx_reset_resume(struct usb_interface *intf) 5378 { 5379 struct lan78xx_net *dev = usb_get_intfdata(intf); 5380 int ret; 5381 5382 netif_dbg(dev, ifup, dev->net, "(reset) resuming device"); 5383 5384 ret = lan78xx_reset(dev); 5385 if (ret < 0) 5386 return ret; 5387 5388 ret = lan78xx_resume(intf); 5389 if (ret < 0) 5390 return ret; 5391 5392 rtnl_lock(); 5393 phylink_resume(dev->phylink); 5394 rtnl_unlock(); 5395 5396 return 0; 5397 } 5398 5399 static const struct usb_device_id products[] = { 5400 { 5401 /* LAN7800 USB Gigabit Ethernet Device */ 5402 USB_DEVICE(LAN78XX_USB_VENDOR_ID, LAN7800_USB_PRODUCT_ID), 5403 }, 5404 { 5405 /* LAN7850 USB Gigabit Ethernet Device */ 5406 USB_DEVICE(LAN78XX_USB_VENDOR_ID, LAN7850_USB_PRODUCT_ID), 5407 }, 5408 { 5409 /* LAN7801 USB Gigabit Ethernet Device */ 5410 USB_DEVICE(LAN78XX_USB_VENDOR_ID, LAN7801_USB_PRODUCT_ID), 5411 }, 5412 { 5413 /* ATM2-AF USB Gigabit Ethernet Device */ 5414 USB_DEVICE(AT29M2AF_USB_VENDOR_ID, AT29M2AF_USB_PRODUCT_ID), 5415 }, 5416 {}, 5417 }; 5418 MODULE_DEVICE_TABLE(usb, products); 5419 5420 static struct usb_driver lan78xx_driver = { 5421 .name = DRIVER_NAME, 5422 .id_table = products, 5423 .probe = lan78xx_probe, 5424 .disconnect = lan78xx_disconnect, 5425 .suspend = lan78xx_suspend, 5426 .resume = lan78xx_resume, 5427 .reset_resume = lan78xx_reset_resume, 5428 .supports_autosuspend = 1, 5429 .disable_hub_initiated_lpm = 1, 5430 }; 5431 5432 module_usb_driver(lan78xx_driver); 5433 5434 MODULE_AUTHOR(DRIVER_AUTHOR); 5435 MODULE_DESCRIPTION(DRIVER_DESC); 5436 MODULE_LICENSE("GPL"); 5437