aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/usb/smsc95xx.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/usb/smsc95xx.c')
-rw-r--r--drivers/net/usb/smsc95xx.c279
1 files changed, 142 insertions, 137 deletions
diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
index c6c922247d05..3135af63d378 100644
--- a/drivers/net/usb/smsc95xx.c
+++ b/drivers/net/usb/smsc95xx.c
@@ -28,6 +28,7 @@
28#include <linux/usb.h> 28#include <linux/usb.h>
29#include <linux/crc32.h> 29#include <linux/crc32.h>
30#include <linux/usb/usbnet.h> 30#include <linux/usb/usbnet.h>
31#include <linux/slab.h>
31#include "smsc95xx.h" 32#include "smsc95xx.h"
32 33
33#define SMSC_CHIPNAME "smsc95xx" 34#define SMSC_CHIPNAME "smsc95xx"
@@ -78,7 +79,7 @@ static int smsc95xx_read_reg(struct usbnet *dev, u32 index, u32 *data)
78 00, index, buf, 4, USB_CTRL_GET_TIMEOUT); 79 00, index, buf, 4, USB_CTRL_GET_TIMEOUT);
79 80
80 if (unlikely(ret < 0)) 81 if (unlikely(ret < 0))
81 devwarn(dev, "Failed to read register index 0x%08x", index); 82 netdev_warn(dev->net, "Failed to read register index 0x%08x\n", index);
82 83
83 le32_to_cpus(buf); 84 le32_to_cpus(buf);
84 *data = *buf; 85 *data = *buf;
@@ -106,7 +107,7 @@ static int smsc95xx_write_reg(struct usbnet *dev, u32 index, u32 data)
106 00, index, buf, 4, USB_CTRL_SET_TIMEOUT); 107 00, index, buf, 4, USB_CTRL_SET_TIMEOUT);
107 108
108 if (unlikely(ret < 0)) 109 if (unlikely(ret < 0))
109 devwarn(dev, "Failed to write register index 0x%08x", index); 110 netdev_warn(dev->net, "Failed to write register index 0x%08x\n", index);
110 111
111 kfree(buf); 112 kfree(buf);
112 113
@@ -138,7 +139,7 @@ static int smsc95xx_mdio_read(struct net_device *netdev, int phy_id, int idx)
138 139
139 /* confirm MII not busy */ 140 /* confirm MII not busy */
140 if (smsc95xx_phy_wait_not_busy(dev)) { 141 if (smsc95xx_phy_wait_not_busy(dev)) {
141 devwarn(dev, "MII is busy in smsc95xx_mdio_read"); 142 netdev_warn(dev->net, "MII is busy in smsc95xx_mdio_read\n");
142 mutex_unlock(&dev->phy_mutex); 143 mutex_unlock(&dev->phy_mutex);
143 return -EIO; 144 return -EIO;
144 } 145 }
@@ -150,7 +151,7 @@ static int smsc95xx_mdio_read(struct net_device *netdev, int phy_id, int idx)
150 smsc95xx_write_reg(dev, MII_ADDR, addr); 151 smsc95xx_write_reg(dev, MII_ADDR, addr);
151 152
152 if (smsc95xx_phy_wait_not_busy(dev)) { 153 if (smsc95xx_phy_wait_not_busy(dev)) {
153 devwarn(dev, "Timed out reading MII reg %02X", idx); 154 netdev_warn(dev->net, "Timed out reading MII reg %02X\n", idx);
154 mutex_unlock(&dev->phy_mutex); 155 mutex_unlock(&dev->phy_mutex);
155 return -EIO; 156 return -EIO;
156 } 157 }
@@ -172,7 +173,7 @@ static void smsc95xx_mdio_write(struct net_device *netdev, int phy_id, int idx,
172 173
173 /* confirm MII not busy */ 174 /* confirm MII not busy */
174 if (smsc95xx_phy_wait_not_busy(dev)) { 175 if (smsc95xx_phy_wait_not_busy(dev)) {
175 devwarn(dev, "MII is busy in smsc95xx_mdio_write"); 176 netdev_warn(dev->net, "MII is busy in smsc95xx_mdio_write\n");
176 mutex_unlock(&dev->phy_mutex); 177 mutex_unlock(&dev->phy_mutex);
177 return; 178 return;
178 } 179 }
@@ -187,7 +188,7 @@ static void smsc95xx_mdio_write(struct net_device *netdev, int phy_id, int idx,
187 smsc95xx_write_reg(dev, MII_ADDR, addr); 188 smsc95xx_write_reg(dev, MII_ADDR, addr);
188 189
189 if (smsc95xx_phy_wait_not_busy(dev)) 190 if (smsc95xx_phy_wait_not_busy(dev))
190 devwarn(dev, "Timed out writing MII reg %02X", idx); 191 netdev_warn(dev->net, "Timed out writing MII reg %02X\n", idx);
191 192
192 mutex_unlock(&dev->phy_mutex); 193 mutex_unlock(&dev->phy_mutex);
193} 194}
@@ -205,7 +206,7 @@ static int smsc95xx_wait_eeprom(struct usbnet *dev)
205 } while (!time_after(jiffies, start_time + HZ)); 206 } while (!time_after(jiffies, start_time + HZ));
206 207
207 if (val & (E2P_CMD_TIMEOUT_ | E2P_CMD_BUSY_)) { 208 if (val & (E2P_CMD_TIMEOUT_ | E2P_CMD_BUSY_)) {
208 devwarn(dev, "EEPROM read operation timeout"); 209 netdev_warn(dev->net, "EEPROM read operation timeout\n");
209 return -EIO; 210 return -EIO;
210 } 211 }
211 212
@@ -226,7 +227,7 @@ static int smsc95xx_eeprom_confirm_not_busy(struct usbnet *dev)
226 udelay(40); 227 udelay(40);
227 } while (!time_after(jiffies, start_time + HZ)); 228 } while (!time_after(jiffies, start_time + HZ));
228 229
229 devwarn(dev, "EEPROM is busy"); 230 netdev_warn(dev->net, "EEPROM is busy\n");
230 return -EIO; 231 return -EIO;
231} 232}
232 233
@@ -308,7 +309,7 @@ static void smsc95xx_async_cmd_callback(struct urb *urb)
308 int status = urb->status; 309 int status = urb->status;
309 310
310 if (status < 0) 311 if (status < 0)
311 devwarn(dev, "async callback failed with %d", status); 312 netdev_warn(dev->net, "async callback failed with %d\n", status);
312 313
313 kfree(usb_context); 314 kfree(usb_context);
314 usb_free_urb(urb); 315 usb_free_urb(urb);
@@ -323,13 +324,13 @@ static int smsc95xx_write_reg_async(struct usbnet *dev, u16 index, u32 *data)
323 324
324 urb = usb_alloc_urb(0, GFP_ATOMIC); 325 urb = usb_alloc_urb(0, GFP_ATOMIC);
325 if (!urb) { 326 if (!urb) {
326 devwarn(dev, "Error allocating URB"); 327 netdev_warn(dev->net, "Error allocating URB\n");
327 return -ENOMEM; 328 return -ENOMEM;
328 } 329 }
329 330
330 usb_context = kmalloc(sizeof(struct usb_context), GFP_ATOMIC); 331 usb_context = kmalloc(sizeof(struct usb_context), GFP_ATOMIC);
331 if (usb_context == NULL) { 332 if (usb_context == NULL) {
332 devwarn(dev, "Error allocating control msg"); 333 netdev_warn(dev->net, "Error allocating control msg\n");
333 usb_free_urb(urb); 334 usb_free_urb(urb);
334 return -ENOMEM; 335 return -ENOMEM;
335 } 336 }
@@ -348,7 +349,8 @@ static int smsc95xx_write_reg_async(struct usbnet *dev, u16 index, u32 *data)
348 349
349 status = usb_submit_urb(urb, GFP_ATOMIC); 350 status = usb_submit_urb(urb, GFP_ATOMIC);
350 if (status < 0) { 351 if (status < 0) {
351 devwarn(dev, "Error submitting control msg, sts=%d", status); 352 netdev_warn(dev->net, "Error submitting control msg, sts=%d\n",
353 status);
352 kfree(usb_context); 354 kfree(usb_context);
353 usb_free_urb(urb); 355 usb_free_urb(urb);
354 } 356 }
@@ -375,46 +377,32 @@ static void smsc95xx_set_multicast(struct net_device *netdev)
375 spin_lock_irqsave(&pdata->mac_cr_lock, flags); 377 spin_lock_irqsave(&pdata->mac_cr_lock, flags);
376 378
377 if (dev->net->flags & IFF_PROMISC) { 379 if (dev->net->flags & IFF_PROMISC) {
378 if (netif_msg_drv(dev)) 380 netif_dbg(dev, drv, dev->net, "promiscuous mode enabled\n");
379 devdbg(dev, "promiscuous mode enabled");
380 pdata->mac_cr |= MAC_CR_PRMS_; 381 pdata->mac_cr |= MAC_CR_PRMS_;
381 pdata->mac_cr &= ~(MAC_CR_MCPAS_ | MAC_CR_HPFILT_); 382 pdata->mac_cr &= ~(MAC_CR_MCPAS_ | MAC_CR_HPFILT_);
382 } else if (dev->net->flags & IFF_ALLMULTI) { 383 } else if (dev->net->flags & IFF_ALLMULTI) {
383 if (netif_msg_drv(dev)) 384 netif_dbg(dev, drv, dev->net, "receive all multicast enabled\n");
384 devdbg(dev, "receive all multicast enabled");
385 pdata->mac_cr |= MAC_CR_MCPAS_; 385 pdata->mac_cr |= MAC_CR_MCPAS_;
386 pdata->mac_cr &= ~(MAC_CR_PRMS_ | MAC_CR_HPFILT_); 386 pdata->mac_cr &= ~(MAC_CR_PRMS_ | MAC_CR_HPFILT_);
387 } else if (dev->net->mc_count > 0) { 387 } else if (!netdev_mc_empty(dev->net)) {
388 struct dev_mc_list *mc_list = dev->net->mc_list; 388 struct dev_mc_list *mc_list;
389 int count = 0;
390 389
391 pdata->mac_cr |= MAC_CR_HPFILT_; 390 pdata->mac_cr |= MAC_CR_HPFILT_;
392 pdata->mac_cr &= ~(MAC_CR_PRMS_ | MAC_CR_MCPAS_); 391 pdata->mac_cr &= ~(MAC_CR_PRMS_ | MAC_CR_MCPAS_);
393 392
394 while (mc_list) { 393 netdev_for_each_mc_addr(mc_list, netdev) {
395 count++; 394 u32 bitnum = smsc95xx_hash(mc_list->dmi_addr);
396 if (mc_list->dmi_addrlen == ETH_ALEN) { 395 u32 mask = 0x01 << (bitnum & 0x1F);
397 u32 bitnum = smsc95xx_hash(mc_list->dmi_addr); 396 if (bitnum & 0x20)
398 u32 mask = 0x01 << (bitnum & 0x1F); 397 hash_hi |= mask;
399 if (bitnum & 0x20) 398 else
400 hash_hi |= mask; 399 hash_lo |= mask;
401 else
402 hash_lo |= mask;
403 } else {
404 devwarn(dev, "dmi_addrlen != 6");
405 }
406 mc_list = mc_list->next;
407 } 400 }
408 401
409 if (count != ((u32)dev->net->mc_count)) 402 netif_dbg(dev, drv, dev->net, "HASHH=0x%08X, HASHL=0x%08X\n",
410 devwarn(dev, "mc_count != dev->mc_count"); 403 hash_hi, hash_lo);
411
412 if (netif_msg_drv(dev))
413 devdbg(dev, "HASHH=0x%08X, HASHL=0x%08X", hash_hi,
414 hash_lo);
415 } else { 404 } else {
416 if (netif_msg_drv(dev)) 405 netif_dbg(dev, drv, dev->net, "receive own packets only\n");
417 devdbg(dev, "receive own packets only");
418 pdata->mac_cr &= 406 pdata->mac_cr &=
419 ~(MAC_CR_PRMS_ | MAC_CR_MCPAS_ | MAC_CR_HPFILT_); 407 ~(MAC_CR_PRMS_ | MAC_CR_MCPAS_ | MAC_CR_HPFILT_);
420 } 408 }
@@ -434,7 +422,7 @@ static void smsc95xx_phy_update_flowcontrol(struct usbnet *dev, u8 duplex,
434 422
435 int ret = smsc95xx_read_reg(dev, AFC_CFG, &afc_cfg); 423 int ret = smsc95xx_read_reg(dev, AFC_CFG, &afc_cfg);
436 if (ret < 0) { 424 if (ret < 0) {
437 devwarn(dev, "error reading AFC_CFG"); 425 netdev_warn(dev->net, "error reading AFC_CFG\n");
438 return; 426 return;
439 } 427 }
440 428
@@ -451,13 +439,11 @@ static void smsc95xx_phy_update_flowcontrol(struct usbnet *dev, u8 duplex,
451 else 439 else
452 afc_cfg &= ~0xF; 440 afc_cfg &= ~0xF;
453 441
454 if (netif_msg_link(dev)) 442 netif_dbg(dev, link, dev->net, "rx pause %s, tx pause %s\n",
455 devdbg(dev, "rx pause %s, tx pause %s", 443 cap & FLOW_CTRL_RX ? "enabled" : "disabled",
456 (cap & FLOW_CTRL_RX ? "enabled" : "disabled"), 444 cap & FLOW_CTRL_TX ? "enabled" : "disabled");
457 (cap & FLOW_CTRL_TX ? "enabled" : "disabled"));
458 } else { 445 } else {
459 if (netif_msg_link(dev)) 446 netif_dbg(dev, link, dev->net, "half duplex\n");
460 devdbg(dev, "half duplex");
461 flow = 0; 447 flow = 0;
462 afc_cfg |= 0xF; 448 afc_cfg |= 0xF;
463 } 449 }
@@ -485,9 +471,8 @@ static int smsc95xx_link_reset(struct usbnet *dev)
485 lcladv = smsc95xx_mdio_read(dev->net, mii->phy_id, MII_ADVERTISE); 471 lcladv = smsc95xx_mdio_read(dev->net, mii->phy_id, MII_ADVERTISE);
486 rmtadv = smsc95xx_mdio_read(dev->net, mii->phy_id, MII_LPA); 472 rmtadv = smsc95xx_mdio_read(dev->net, mii->phy_id, MII_LPA);
487 473
488 if (netif_msg_link(dev)) 474 netif_dbg(dev, link, dev->net, "speed: %d duplex: %d lcladv: %04x rmtadv: %04x\n",
489 devdbg(dev, "speed: %d duplex: %d lcladv: %04x rmtadv: %04x", 475 ecmd.speed, ecmd.duplex, lcladv, rmtadv);
490 ecmd.speed, ecmd.duplex, lcladv, rmtadv);
491 476
492 spin_lock_irqsave(&pdata->mac_cr_lock, flags); 477 spin_lock_irqsave(&pdata->mac_cr_lock, flags);
493 if (ecmd.duplex != DUPLEX_FULL) { 478 if (ecmd.duplex != DUPLEX_FULL) {
@@ -511,20 +496,21 @@ static void smsc95xx_status(struct usbnet *dev, struct urb *urb)
511 u32 intdata; 496 u32 intdata;
512 497
513 if (urb->actual_length != 4) { 498 if (urb->actual_length != 4) {
514 devwarn(dev, "unexpected urb length %d", urb->actual_length); 499 netdev_warn(dev->net, "unexpected urb length %d\n",
500 urb->actual_length);
515 return; 501 return;
516 } 502 }
517 503
518 memcpy(&intdata, urb->transfer_buffer, 4); 504 memcpy(&intdata, urb->transfer_buffer, 4);
519 le32_to_cpus(&intdata); 505 le32_to_cpus(&intdata);
520 506
521 if (netif_msg_link(dev)) 507 netif_dbg(dev, link, dev->net, "intdata: 0x%08X\n", intdata);
522 devdbg(dev, "intdata: 0x%08X", intdata);
523 508
524 if (intdata & INT_ENP_PHY_INT_) 509 if (intdata & INT_ENP_PHY_INT_)
525 usbnet_defer_kevent(dev, EVENT_LINK_RESET); 510 usbnet_defer_kevent(dev, EVENT_LINK_RESET);
526 else 511 else
527 devwarn(dev, "unexpected interrupt, intdata=0x%08X", intdata); 512 netdev_warn(dev->net, "unexpected interrupt, intdata=0x%08X\n",
513 intdata);
528} 514}
529 515
530/* Enable or disable Tx & Rx checksum offload engines */ 516/* Enable or disable Tx & Rx checksum offload engines */
@@ -534,7 +520,7 @@ static int smsc95xx_set_csums(struct usbnet *dev)
534 u32 read_buf; 520 u32 read_buf;
535 int ret = smsc95xx_read_reg(dev, COE_CR, &read_buf); 521 int ret = smsc95xx_read_reg(dev, COE_CR, &read_buf);
536 if (ret < 0) { 522 if (ret < 0) {
537 devwarn(dev, "Failed to read COE_CR: %d", ret); 523 netdev_warn(dev->net, "Failed to read COE_CR: %d\n", ret);
538 return ret; 524 return ret;
539 } 525 }
540 526
@@ -550,12 +536,11 @@ static int smsc95xx_set_csums(struct usbnet *dev)
550 536
551 ret = smsc95xx_write_reg(dev, COE_CR, read_buf); 537 ret = smsc95xx_write_reg(dev, COE_CR, read_buf);
552 if (ret < 0) { 538 if (ret < 0) {
553 devwarn(dev, "Failed to write COE_CR: %d", ret); 539 netdev_warn(dev->net, "Failed to write COE_CR: %d\n", ret);
554 return ret; 540 return ret;
555 } 541 }
556 542
557 if (netif_msg_hw(dev)) 543 netif_dbg(dev, hw, dev->net, "COE_CR = 0x%08x\n", read_buf);
558 devdbg(dev, "COE_CR = 0x%08x", read_buf);
559 return 0; 544 return 0;
560} 545}
561 546
@@ -580,8 +565,8 @@ static int smsc95xx_ethtool_set_eeprom(struct net_device *netdev,
580 struct usbnet *dev = netdev_priv(netdev); 565 struct usbnet *dev = netdev_priv(netdev);
581 566
582 if (ee->magic != LAN95XX_EEPROM_MAGIC) { 567 if (ee->magic != LAN95XX_EEPROM_MAGIC) {
583 devwarn(dev, "EEPROM: magic value mismatch, magic = 0x%x", 568 netdev_warn(dev->net, "EEPROM: magic value mismatch, magic = 0x%x\n",
584 ee->magic); 569 ee->magic);
585 return -EINVAL; 570 return -EINVAL;
586 } 571 }
587 572
@@ -659,16 +644,14 @@ static void smsc95xx_init_mac_address(struct usbnet *dev)
659 dev->net->dev_addr) == 0) { 644 dev->net->dev_addr) == 0) {
660 if (is_valid_ether_addr(dev->net->dev_addr)) { 645 if (is_valid_ether_addr(dev->net->dev_addr)) {
661 /* eeprom values are valid so use them */ 646 /* eeprom values are valid so use them */
662 if (netif_msg_ifup(dev)) 647 netif_dbg(dev, ifup, dev->net, "MAC address read from EEPROM\n");
663 devdbg(dev, "MAC address read from EEPROM");
664 return; 648 return;
665 } 649 }
666 } 650 }
667 651
668 /* no eeprom, or eeprom values are invalid. generate random MAC */ 652 /* no eeprom, or eeprom values are invalid. generate random MAC */
669 random_ether_addr(dev->net->dev_addr); 653 random_ether_addr(dev->net->dev_addr);
670 if (netif_msg_ifup(dev)) 654 netif_dbg(dev, ifup, dev->net, "MAC address set to random_ether_addr\n");
671 devdbg(dev, "MAC address set to random_ether_addr");
672} 655}
673 656
674static int smsc95xx_set_mac_address(struct usbnet *dev) 657static int smsc95xx_set_mac_address(struct usbnet *dev)
@@ -680,13 +663,13 @@ static int smsc95xx_set_mac_address(struct usbnet *dev)
680 663
681 ret = smsc95xx_write_reg(dev, ADDRL, addr_lo); 664 ret = smsc95xx_write_reg(dev, ADDRL, addr_lo);
682 if (ret < 0) { 665 if (ret < 0) {
683 devwarn(dev, "Failed to write ADDRL: %d", ret); 666 netdev_warn(dev->net, "Failed to write ADDRL: %d\n", ret);
684 return ret; 667 return ret;
685 } 668 }
686 669
687 ret = smsc95xx_write_reg(dev, ADDRH, addr_hi); 670 ret = smsc95xx_write_reg(dev, ADDRH, addr_hi);
688 if (ret < 0) { 671 if (ret < 0) {
689 devwarn(dev, "Failed to write ADDRH: %d", ret); 672 netdev_warn(dev->net, "Failed to write ADDRH: %d\n", ret);
690 return ret; 673 return ret;
691 } 674 }
692 675
@@ -727,6 +710,8 @@ static void smsc95xx_start_rx_path(struct usbnet *dev)
727 710
728static int smsc95xx_phy_initialize(struct usbnet *dev) 711static int smsc95xx_phy_initialize(struct usbnet *dev)
729{ 712{
713 int bmcr, timeout = 0;
714
730 /* Initialize MII structure */ 715 /* Initialize MII structure */
731 dev->mii.dev = dev->net; 716 dev->mii.dev = dev->net;
732 dev->mii.mdio_read = smsc95xx_mdio_read; 717 dev->mii.mdio_read = smsc95xx_mdio_read;
@@ -735,7 +720,20 @@ static int smsc95xx_phy_initialize(struct usbnet *dev)
735 dev->mii.reg_num_mask = 0x1f; 720 dev->mii.reg_num_mask = 0x1f;
736 dev->mii.phy_id = SMSC95XX_INTERNAL_PHY_ID; 721 dev->mii.phy_id = SMSC95XX_INTERNAL_PHY_ID;
737 722
723 /* reset phy and wait for reset to complete */
738 smsc95xx_mdio_write(dev->net, dev->mii.phy_id, MII_BMCR, BMCR_RESET); 724 smsc95xx_mdio_write(dev->net, dev->mii.phy_id, MII_BMCR, BMCR_RESET);
725
726 do {
727 msleep(10);
728 bmcr = smsc95xx_mdio_read(dev->net, dev->mii.phy_id, MII_BMCR);
729 timeout++;
730 } while ((bmcr & MII_BMCR) && (timeout < 100));
731
732 if (timeout >= 100) {
733 netdev_warn(dev->net, "timeout on PHY Reset");
734 return -EIO;
735 }
736
739 smsc95xx_mdio_write(dev->net, dev->mii.phy_id, MII_ADVERTISE, 737 smsc95xx_mdio_write(dev->net, dev->mii.phy_id, MII_ADVERTISE,
740 ADVERTISE_ALL | ADVERTISE_CSMA | ADVERTISE_PAUSE_CAP | 738 ADVERTISE_ALL | ADVERTISE_CSMA | ADVERTISE_PAUSE_CAP |
741 ADVERTISE_PAUSE_ASYM); 739 ADVERTISE_PAUSE_ASYM);
@@ -747,8 +745,7 @@ static int smsc95xx_phy_initialize(struct usbnet *dev)
747 PHY_INT_MASK_DEFAULT_); 745 PHY_INT_MASK_DEFAULT_);
748 mii_nway_restart(&dev->mii); 746 mii_nway_restart(&dev->mii);
749 747
750 if (netif_msg_ifup(dev)) 748 netif_dbg(dev, ifup, dev->net, "phy initialised successfully\n");
751 devdbg(dev, "phy initialised succesfully");
752 return 0; 749 return 0;
753} 750}
754 751
@@ -759,14 +756,13 @@ static int smsc95xx_reset(struct usbnet *dev)
759 u32 read_buf, write_buf, burst_cap; 756 u32 read_buf, write_buf, burst_cap;
760 int ret = 0, timeout; 757 int ret = 0, timeout;
761 758
762 if (netif_msg_ifup(dev)) 759 netif_dbg(dev, ifup, dev->net, "entering smsc95xx_reset\n");
763 devdbg(dev, "entering smsc95xx_reset");
764 760
765 write_buf = HW_CFG_LRST_; 761 write_buf = HW_CFG_LRST_;
766 ret = smsc95xx_write_reg(dev, HW_CFG, write_buf); 762 ret = smsc95xx_write_reg(dev, HW_CFG, write_buf);
767 if (ret < 0) { 763 if (ret < 0) {
768 devwarn(dev, "Failed to write HW_CFG_LRST_ bit in HW_CFG " 764 netdev_warn(dev->net, "Failed to write HW_CFG_LRST_ bit in HW_CFG register, ret = %d\n",
769 "register, ret = %d", ret); 765 ret);
770 return ret; 766 return ret;
771 } 767 }
772 768
@@ -774,7 +770,7 @@ static int smsc95xx_reset(struct usbnet *dev)
774 do { 770 do {
775 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); 771 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf);
776 if (ret < 0) { 772 if (ret < 0) {
777 devwarn(dev, "Failed to read HW_CFG: %d", ret); 773 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret);
778 return ret; 774 return ret;
779 } 775 }
780 msleep(10); 776 msleep(10);
@@ -782,14 +778,14 @@ static int smsc95xx_reset(struct usbnet *dev)
782 } while ((read_buf & HW_CFG_LRST_) && (timeout < 100)); 778 } while ((read_buf & HW_CFG_LRST_) && (timeout < 100));
783 779
784 if (timeout >= 100) { 780 if (timeout >= 100) {
785 devwarn(dev, "timeout waiting for completion of Lite Reset"); 781 netdev_warn(dev->net, "timeout waiting for completion of Lite Reset\n");
786 return ret; 782 return ret;
787 } 783 }
788 784
789 write_buf = PM_CTL_PHY_RST_; 785 write_buf = PM_CTL_PHY_RST_;
790 ret = smsc95xx_write_reg(dev, PM_CTRL, write_buf); 786 ret = smsc95xx_write_reg(dev, PM_CTRL, write_buf);
791 if (ret < 0) { 787 if (ret < 0) {
792 devwarn(dev, "Failed to write PM_CTRL: %d", ret); 788 netdev_warn(dev->net, "Failed to write PM_CTRL: %d\n", ret);
793 return ret; 789 return ret;
794 } 790 }
795 791
@@ -797,7 +793,7 @@ static int smsc95xx_reset(struct usbnet *dev)
797 do { 793 do {
798 ret = smsc95xx_read_reg(dev, PM_CTRL, &read_buf); 794 ret = smsc95xx_read_reg(dev, PM_CTRL, &read_buf);
799 if (ret < 0) { 795 if (ret < 0) {
800 devwarn(dev, "Failed to read PM_CTRL: %d", ret); 796 netdev_warn(dev->net, "Failed to read PM_CTRL: %d\n", ret);
801 return ret; 797 return ret;
802 } 798 }
803 msleep(10); 799 msleep(10);
@@ -805,7 +801,7 @@ static int smsc95xx_reset(struct usbnet *dev)
805 } while ((read_buf & PM_CTL_PHY_RST_) && (timeout < 100)); 801 } while ((read_buf & PM_CTL_PHY_RST_) && (timeout < 100));
806 802
807 if (timeout >= 100) { 803 if (timeout >= 100) {
808 devwarn(dev, "timeout waiting for PHY Reset"); 804 netdev_warn(dev->net, "timeout waiting for PHY Reset\n");
809 return ret; 805 return ret;
810 } 806 }
811 807
@@ -815,35 +811,35 @@ static int smsc95xx_reset(struct usbnet *dev)
815 if (ret < 0) 811 if (ret < 0)
816 return ret; 812 return ret;
817 813
818 if (netif_msg_ifup(dev)) 814 netif_dbg(dev, ifup, dev->net,
819 devdbg(dev, "MAC Address: %pM", dev->net->dev_addr); 815 "MAC Address: %pM\n", dev->net->dev_addr);
820 816
821 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); 817 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf);
822 if (ret < 0) { 818 if (ret < 0) {
823 devwarn(dev, "Failed to read HW_CFG: %d", ret); 819 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret);
824 return ret; 820 return ret;
825 } 821 }
826 822
827 if (netif_msg_ifup(dev)) 823 netif_dbg(dev, ifup, dev->net,
828 devdbg(dev, "Read Value from HW_CFG : 0x%08x", read_buf); 824 "Read Value from HW_CFG : 0x%08x\n", read_buf);
829 825
830 read_buf |= HW_CFG_BIR_; 826 read_buf |= HW_CFG_BIR_;
831 827
832 ret = smsc95xx_write_reg(dev, HW_CFG, read_buf); 828 ret = smsc95xx_write_reg(dev, HW_CFG, read_buf);
833 if (ret < 0) { 829 if (ret < 0) {
834 devwarn(dev, "Failed to write HW_CFG_BIR_ bit in HW_CFG " 830 netdev_warn(dev->net, "Failed to write HW_CFG_BIR_ bit in HW_CFG register, ret = %d\n",
835 "register, ret = %d", ret); 831 ret);
836 return ret; 832 return ret;
837 } 833 }
838 834
839 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); 835 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf);
840 if (ret < 0) { 836 if (ret < 0) {
841 devwarn(dev, "Failed to read HW_CFG: %d", ret); 837 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret);
842 return ret; 838 return ret;
843 } 839 }
844 if (netif_msg_ifup(dev)) 840 netif_dbg(dev, ifup, dev->net,
845 devdbg(dev, "Read Value from HW_CFG after writing " 841 "Read Value from HW_CFG after writing HW_CFG_BIR_: 0x%08x\n",
846 "HW_CFG_BIR_: 0x%08x", read_buf); 842 read_buf);
847 843
848 if (!turbo_mode) { 844 if (!turbo_mode) {
849 burst_cap = 0; 845 burst_cap = 0;
@@ -856,47 +852,47 @@ static int smsc95xx_reset(struct usbnet *dev)
856 dev->rx_urb_size = DEFAULT_FS_BURST_CAP_SIZE; 852 dev->rx_urb_size = DEFAULT_FS_BURST_CAP_SIZE;
857 } 853 }
858 854
859 if (netif_msg_ifup(dev)) 855 netif_dbg(dev, ifup, dev->net,
860 devdbg(dev, "rx_urb_size=%ld", (ulong)dev->rx_urb_size); 856 "rx_urb_size=%ld\n", (ulong)dev->rx_urb_size);
861 857
862 ret = smsc95xx_write_reg(dev, BURST_CAP, burst_cap); 858 ret = smsc95xx_write_reg(dev, BURST_CAP, burst_cap);
863 if (ret < 0) { 859 if (ret < 0) {
864 devwarn(dev, "Failed to write BURST_CAP: %d", ret); 860 netdev_warn(dev->net, "Failed to write BURST_CAP: %d\n", ret);
865 return ret; 861 return ret;
866 } 862 }
867 863
868 ret = smsc95xx_read_reg(dev, BURST_CAP, &read_buf); 864 ret = smsc95xx_read_reg(dev, BURST_CAP, &read_buf);
869 if (ret < 0) { 865 if (ret < 0) {
870 devwarn(dev, "Failed to read BURST_CAP: %d", ret); 866 netdev_warn(dev->net, "Failed to read BURST_CAP: %d\n", ret);
871 return ret; 867 return ret;
872 } 868 }
873 if (netif_msg_ifup(dev)) 869 netif_dbg(dev, ifup, dev->net,
874 devdbg(dev, "Read Value from BURST_CAP after writing: 0x%08x", 870 "Read Value from BURST_CAP after writing: 0x%08x\n",
875 read_buf); 871 read_buf);
876 872
877 read_buf = DEFAULT_BULK_IN_DELAY; 873 read_buf = DEFAULT_BULK_IN_DELAY;
878 ret = smsc95xx_write_reg(dev, BULK_IN_DLY, read_buf); 874 ret = smsc95xx_write_reg(dev, BULK_IN_DLY, read_buf);
879 if (ret < 0) { 875 if (ret < 0) {
880 devwarn(dev, "ret = %d", ret); 876 netdev_warn(dev->net, "ret = %d\n", ret);
881 return ret; 877 return ret;
882 } 878 }
883 879
884 ret = smsc95xx_read_reg(dev, BULK_IN_DLY, &read_buf); 880 ret = smsc95xx_read_reg(dev, BULK_IN_DLY, &read_buf);
885 if (ret < 0) { 881 if (ret < 0) {
886 devwarn(dev, "Failed to read BULK_IN_DLY: %d", ret); 882 netdev_warn(dev->net, "Failed to read BULK_IN_DLY: %d\n", ret);
887 return ret; 883 return ret;
888 } 884 }
889 if (netif_msg_ifup(dev)) 885 netif_dbg(dev, ifup, dev->net,
890 devdbg(dev, "Read Value from BULK_IN_DLY after writing: " 886 "Read Value from BULK_IN_DLY after writing: 0x%08x\n",
891 "0x%08x", read_buf); 887 read_buf);
892 888
893 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); 889 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf);
894 if (ret < 0) { 890 if (ret < 0) {
895 devwarn(dev, "Failed to read HW_CFG: %d", ret); 891 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret);
896 return ret; 892 return ret;
897 } 893 }
898 if (netif_msg_ifup(dev)) 894 netif_dbg(dev, ifup, dev->net,
899 devdbg(dev, "Read Value from HW_CFG: 0x%08x", read_buf); 895 "Read Value from HW_CFG: 0x%08x\n", read_buf);
900 896
901 if (turbo_mode) 897 if (turbo_mode)
902 read_buf |= (HW_CFG_MEF_ | HW_CFG_BCE_); 898 read_buf |= (HW_CFG_MEF_ | HW_CFG_BCE_);
@@ -908,41 +904,41 @@ static int smsc95xx_reset(struct usbnet *dev)
908 904
909 ret = smsc95xx_write_reg(dev, HW_CFG, read_buf); 905 ret = smsc95xx_write_reg(dev, HW_CFG, read_buf);
910 if (ret < 0) { 906 if (ret < 0) {
911 devwarn(dev, "Failed to write HW_CFG register, ret=%d", ret); 907 netdev_warn(dev->net, "Failed to write HW_CFG register, ret=%d\n",
908 ret);
912 return ret; 909 return ret;
913 } 910 }
914 911
915 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); 912 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf);
916 if (ret < 0) { 913 if (ret < 0) {
917 devwarn(dev, "Failed to read HW_CFG: %d", ret); 914 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret);
918 return ret; 915 return ret;
919 } 916 }
920 if (netif_msg_ifup(dev)) 917 netif_dbg(dev, ifup, dev->net,
921 devdbg(dev, "Read Value from HW_CFG after writing: 0x%08x", 918 "Read Value from HW_CFG after writing: 0x%08x\n", read_buf);
922 read_buf);
923 919
924 write_buf = 0xFFFFFFFF; 920 write_buf = 0xFFFFFFFF;
925 ret = smsc95xx_write_reg(dev, INT_STS, write_buf); 921 ret = smsc95xx_write_reg(dev, INT_STS, write_buf);
926 if (ret < 0) { 922 if (ret < 0) {
927 devwarn(dev, "Failed to write INT_STS register, ret=%d", ret); 923 netdev_warn(dev->net, "Failed to write INT_STS register, ret=%d\n",
924 ret);
928 return ret; 925 return ret;
929 } 926 }
930 927
931 ret = smsc95xx_read_reg(dev, ID_REV, &read_buf); 928 ret = smsc95xx_read_reg(dev, ID_REV, &read_buf);
932 if (ret < 0) { 929 if (ret < 0) {
933 devwarn(dev, "Failed to read ID_REV: %d", ret); 930 netdev_warn(dev->net, "Failed to read ID_REV: %d\n", ret);
934 return ret; 931 return ret;
935 } 932 }
936 if (netif_msg_ifup(dev)) 933 netif_dbg(dev, ifup, dev->net, "ID_REV = 0x%08x\n", read_buf);
937 devdbg(dev, "ID_REV = 0x%08x", read_buf);
938 934
939 /* Configure GPIO pins as LED outputs */ 935 /* Configure GPIO pins as LED outputs */
940 write_buf = LED_GPIO_CFG_SPD_LED | LED_GPIO_CFG_LNK_LED | 936 write_buf = LED_GPIO_CFG_SPD_LED | LED_GPIO_CFG_LNK_LED |
941 LED_GPIO_CFG_FDX_LED; 937 LED_GPIO_CFG_FDX_LED;
942 ret = smsc95xx_write_reg(dev, LED_GPIO_CFG, write_buf); 938 ret = smsc95xx_write_reg(dev, LED_GPIO_CFG, write_buf);
943 if (ret < 0) { 939 if (ret < 0) {
944 devwarn(dev, "Failed to write LED_GPIO_CFG register, ret=%d", 940 netdev_warn(dev->net, "Failed to write LED_GPIO_CFG register, ret=%d\n",
945 ret); 941 ret);
946 return ret; 942 return ret;
947 } 943 }
948 944
@@ -950,21 +946,21 @@ static int smsc95xx_reset(struct usbnet *dev)
950 write_buf = 0; 946 write_buf = 0;
951 ret = smsc95xx_write_reg(dev, FLOW, write_buf); 947 ret = smsc95xx_write_reg(dev, FLOW, write_buf);
952 if (ret < 0) { 948 if (ret < 0) {
953 devwarn(dev, "Failed to write FLOW: %d", ret); 949 netdev_warn(dev->net, "Failed to write FLOW: %d\n", ret);
954 return ret; 950 return ret;
955 } 951 }
956 952
957 read_buf = AFC_CFG_DEFAULT; 953 read_buf = AFC_CFG_DEFAULT;
958 ret = smsc95xx_write_reg(dev, AFC_CFG, read_buf); 954 ret = smsc95xx_write_reg(dev, AFC_CFG, read_buf);
959 if (ret < 0) { 955 if (ret < 0) {
960 devwarn(dev, "Failed to write AFC_CFG: %d", ret); 956 netdev_warn(dev->net, "Failed to write AFC_CFG: %d\n", ret);
961 return ret; 957 return ret;
962 } 958 }
963 959
964 /* Don't need mac_cr_lock during initialisation */ 960 /* Don't need mac_cr_lock during initialisation */
965 ret = smsc95xx_read_reg(dev, MAC_CR, &pdata->mac_cr); 961 ret = smsc95xx_read_reg(dev, MAC_CR, &pdata->mac_cr);
966 if (ret < 0) { 962 if (ret < 0) {
967 devwarn(dev, "Failed to read MAC_CR: %d", ret); 963 netdev_warn(dev->net, "Failed to read MAC_CR: %d\n", ret);
968 return ret; 964 return ret;
969 } 965 }
970 966
@@ -973,7 +969,7 @@ static int smsc95xx_reset(struct usbnet *dev)
973 write_buf = (u32)ETH_P_8021Q; 969 write_buf = (u32)ETH_P_8021Q;
974 ret = smsc95xx_write_reg(dev, VLAN1, write_buf); 970 ret = smsc95xx_write_reg(dev, VLAN1, write_buf);
975 if (ret < 0) { 971 if (ret < 0) {
976 devwarn(dev, "Failed to write VAN1: %d", ret); 972 netdev_warn(dev->net, "Failed to write VAN1: %d\n", ret);
977 return ret; 973 return ret;
978 } 974 }
979 975
@@ -981,7 +977,7 @@ static int smsc95xx_reset(struct usbnet *dev)
981 ethtool_op_set_tx_hw_csum(netdev, pdata->use_tx_csum); 977 ethtool_op_set_tx_hw_csum(netdev, pdata->use_tx_csum);
982 ret = smsc95xx_set_csums(dev); 978 ret = smsc95xx_set_csums(dev);
983 if (ret < 0) { 979 if (ret < 0) {
984 devwarn(dev, "Failed to set csum offload: %d", ret); 980 netdev_warn(dev->net, "Failed to set csum offload: %d\n", ret);
985 return ret; 981 return ret;
986 } 982 }
987 983
@@ -992,7 +988,7 @@ static int smsc95xx_reset(struct usbnet *dev)
992 988
993 ret = smsc95xx_read_reg(dev, INT_EP_CTL, &read_buf); 989 ret = smsc95xx_read_reg(dev, INT_EP_CTL, &read_buf);
994 if (ret < 0) { 990 if (ret < 0) {
995 devwarn(dev, "Failed to read INT_EP_CTL: %d", ret); 991 netdev_warn(dev->net, "Failed to read INT_EP_CTL: %d\n", ret);
996 return ret; 992 return ret;
997 } 993 }
998 994
@@ -1001,15 +997,14 @@ static int smsc95xx_reset(struct usbnet *dev)
1001 997
1002 ret = smsc95xx_write_reg(dev, INT_EP_CTL, read_buf); 998 ret = smsc95xx_write_reg(dev, INT_EP_CTL, read_buf);
1003 if (ret < 0) { 999 if (ret < 0) {
1004 devwarn(dev, "Failed to write INT_EP_CTL: %d", ret); 1000 netdev_warn(dev->net, "Failed to write INT_EP_CTL: %d\n", ret);
1005 return ret; 1001 return ret;
1006 } 1002 }
1007 1003
1008 smsc95xx_start_tx_path(dev); 1004 smsc95xx_start_tx_path(dev);
1009 smsc95xx_start_rx_path(dev); 1005 smsc95xx_start_rx_path(dev);
1010 1006
1011 if (netif_msg_ifup(dev)) 1007 netif_dbg(dev, ifup, dev->net, "smsc95xx_reset, return 0\n");
1012 devdbg(dev, "smsc95xx_reset, return 0");
1013 return 0; 1008 return 0;
1014} 1009}
1015 1010
@@ -1034,7 +1029,7 @@ static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf)
1034 1029
1035 ret = usbnet_get_endpoints(dev, intf); 1030 ret = usbnet_get_endpoints(dev, intf);
1036 if (ret < 0) { 1031 if (ret < 0) {
1037 devwarn(dev, "usbnet_get_endpoints failed: %d", ret); 1032 netdev_warn(dev->net, "usbnet_get_endpoints failed: %d\n", ret);
1038 return ret; 1033 return ret;
1039 } 1034 }
1040 1035
@@ -1043,7 +1038,7 @@ static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf)
1043 1038
1044 pdata = (struct smsc95xx_priv *)(dev->data[0]); 1039 pdata = (struct smsc95xx_priv *)(dev->data[0]);
1045 if (!pdata) { 1040 if (!pdata) {
1046 devwarn(dev, "Unable to allocate struct smsc95xx_priv"); 1041 netdev_warn(dev->net, "Unable to allocate struct smsc95xx_priv\n");
1047 return -ENOMEM; 1042 return -ENOMEM;
1048 } 1043 }
1049 1044
@@ -1066,8 +1061,7 @@ static void smsc95xx_unbind(struct usbnet *dev, struct usb_interface *intf)
1066{ 1061{
1067 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); 1062 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);
1068 if (pdata) { 1063 if (pdata) {
1069 if (netif_msg_ifdown(dev)) 1064 netif_dbg(dev, ifdown, dev->net, "free pdata\n");
1070 devdbg(dev, "free pdata");
1071 kfree(pdata); 1065 kfree(pdata);
1072 pdata = NULL; 1066 pdata = NULL;
1073 dev->data[0] = 0; 1067 dev->data[0] = 0;
@@ -1101,8 +1095,8 @@ static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
1101 align_count = (4 - ((size + NET_IP_ALIGN) % 4)) % 4; 1095 align_count = (4 - ((size + NET_IP_ALIGN) % 4)) % 4;
1102 1096
1103 if (unlikely(header & RX_STS_ES_)) { 1097 if (unlikely(header & RX_STS_ES_)) {
1104 if (netif_msg_rx_err(dev)) 1098 netif_dbg(dev, rx_err, dev->net,
1105 devdbg(dev, "Error header=0x%08x", header); 1099 "Error header=0x%08x\n", header);
1106 dev->net->stats.rx_errors++; 1100 dev->net->stats.rx_errors++;
1107 dev->net->stats.rx_dropped++; 1101 dev->net->stats.rx_dropped++;
1108 1102
@@ -1119,9 +1113,8 @@ static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
1119 } else { 1113 } else {
1120 /* ETH_FRAME_LEN + 4(CRC) + 2(COE) + 4(Vlan) */ 1114 /* ETH_FRAME_LEN + 4(CRC) + 2(COE) + 4(Vlan) */
1121 if (unlikely(size > (ETH_FRAME_LEN + 12))) { 1115 if (unlikely(size > (ETH_FRAME_LEN + 12))) {
1122 if (netif_msg_rx_err(dev)) 1116 netif_dbg(dev, rx_err, dev->net,
1123 devdbg(dev, "size err header=0x%08x", 1117 "size err header=0x%08x\n", header);
1124 header);
1125 return 0; 1118 return 0;
1126 } 1119 }
1127 1120
@@ -1137,7 +1130,7 @@ static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
1137 1130
1138 ax_skb = skb_clone(skb, GFP_ATOMIC); 1131 ax_skb = skb_clone(skb, GFP_ATOMIC);
1139 if (unlikely(!ax_skb)) { 1132 if (unlikely(!ax_skb)) {
1140 devwarn(dev, "Error allocating skb"); 1133 netdev_warn(dev->net, "Error allocating skb\n");
1141 return 0; 1134 return 0;
1142 } 1135 }
1143 1136
@@ -1161,7 +1154,7 @@ static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
1161 } 1154 }
1162 1155
1163 if (unlikely(skb->len < 0)) { 1156 if (unlikely(skb->len < 0)) {
1164 devwarn(dev, "invalid rx length<0 %d", skb->len); 1157 netdev_warn(dev->net, "invalid rx length<0 %d\n", skb->len);
1165 return 0; 1158 return 0;
1166 } 1159 }
1167 1160
@@ -1197,9 +1190,21 @@ static struct sk_buff *smsc95xx_tx_fixup(struct usbnet *dev,
1197 } 1190 }
1198 1191
1199 if (csum) { 1192 if (csum) {
1200 u32 csum_preamble = smsc95xx_calc_csum_preamble(skb); 1193 if (skb->len <= 45) {
1201 skb_push(skb, 4); 1194 /* workaround - hardware tx checksum does not work
1202 memcpy(skb->data, &csum_preamble, 4); 1195 * properly with extremely small packets */
1196 long csstart = skb->csum_start - skb_headroom(skb);
1197 __wsum calc = csum_partial(skb->data + csstart,
1198 skb->len - csstart, 0);
1199 *((__sum16 *)(skb->data + csstart
1200 + skb->csum_offset)) = csum_fold(calc);
1201
1202 csum = false;
1203 } else {
1204 u32 csum_preamble = smsc95xx_calc_csum_preamble(skb);
1205 skb_push(skb, 4);
1206 memcpy(skb->data, &csum_preamble, 4);
1207 }
1203 } 1208 }
1204 1209
1205 skb_push(skb, 4); 1210 skb_push(skb, 4);