aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/usb/smsc95xx.c
diff options
context:
space:
mode:
authorSteve Glendinning <steve.glendinning@shawell.net>2012-11-30 00:55:52 -0500
committerDavid S. Miller <davem@davemloft.net>2012-11-30 12:27:21 -0500
commitb052e0737593c2a9c9b5f984e19e99f45435ef75 (patch)
tree046275e1af95af10ab1ae47233e48aa68f69c625 /drivers/net/usb/smsc95xx.c
parent068bb1a75a94eacfaaacf3b0ecf4feb349fa8e13 (diff)
smsc95xx: expand check_ macros
These macros, while reducing the amount of code, hide flow control and make the code more confusing to follow and review. This patch expands them. It should have no functional effect on the driver. Signed-off-by: Steve Glendinning <steve.glendinning@shawell.net> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/usb/smsc95xx.c')
-rw-r--r--drivers/net/usb/smsc95xx.c512
1 files changed, 391 insertions, 121 deletions
diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
index b9eb490afa45..f7e1e189fa4a 100644
--- a/drivers/net/usb/smsc95xx.c
+++ b/drivers/net/usb/smsc95xx.c
@@ -55,15 +55,6 @@
55#define FEATURE_PHY_NLP_CROSSOVER (0x02) 55#define FEATURE_PHY_NLP_CROSSOVER (0x02)
56#define FEATURE_AUTOSUSPEND (0x04) 56#define FEATURE_AUTOSUSPEND (0x04)
57 57
58#define check_warn(ret, fmt, args...) \
59 ({ if (ret < 0) netdev_warn(dev->net, fmt, ##args); })
60
61#define check_warn_return(ret, fmt, args...) \
62 ({ if (ret < 0) { netdev_warn(dev->net, fmt, ##args); return ret; } })
63
64#define check_warn_goto_done(ret, fmt, args...) \
65 ({ if (ret < 0) { netdev_warn(dev->net, fmt, ##args); goto done; } })
66
67struct smsc95xx_priv { 58struct smsc95xx_priv {
68 u32 mac_cr; 59 u32 mac_cr;
69 u32 hash_hi; 60 u32 hash_hi;
@@ -166,7 +157,11 @@ static int __must_check __smsc95xx_phy_wait_not_busy(struct usbnet *dev,
166 157
167 do { 158 do {
168 ret = __smsc95xx_read_reg(dev, MII_ADDR, &val, in_pm); 159 ret = __smsc95xx_read_reg(dev, MII_ADDR, &val, in_pm);
169 check_warn_return(ret, "Error reading MII_ACCESS\n"); 160 if (ret < 0) {
161 netdev_warn(dev->net, "Error reading MII_ACCESS\n");
162 return ret;
163 }
164
170 if (!(val & MII_BUSY_)) 165 if (!(val & MII_BUSY_))
171 return 0; 166 return 0;
172 } while (!time_after(jiffies, start_time + HZ)); 167 } while (!time_after(jiffies, start_time + HZ));
@@ -185,20 +180,32 @@ static int __smsc95xx_mdio_read(struct net_device *netdev, int phy_id, int idx,
185 180
186 /* confirm MII not busy */ 181 /* confirm MII not busy */
187 ret = __smsc95xx_phy_wait_not_busy(dev, in_pm); 182 ret = __smsc95xx_phy_wait_not_busy(dev, in_pm);
188 check_warn_goto_done(ret, "MII is busy in smsc95xx_mdio_read\n"); 183 if (ret < 0) {
184 netdev_warn(dev->net, "MII is busy in smsc95xx_mdio_read\n");
185 goto done;
186 }
189 187
190 /* set the address, index & direction (read from PHY) */ 188 /* set the address, index & direction (read from PHY) */
191 phy_id &= dev->mii.phy_id_mask; 189 phy_id &= dev->mii.phy_id_mask;
192 idx &= dev->mii.reg_num_mask; 190 idx &= dev->mii.reg_num_mask;
193 addr = (phy_id << 11) | (idx << 6) | MII_READ_ | MII_BUSY_; 191 addr = (phy_id << 11) | (idx << 6) | MII_READ_ | MII_BUSY_;
194 ret = __smsc95xx_write_reg(dev, MII_ADDR, addr, in_pm); 192 ret = __smsc95xx_write_reg(dev, MII_ADDR, addr, in_pm);
195 check_warn_goto_done(ret, "Error writing MII_ADDR\n"); 193 if (ret < 0) {
194 netdev_warn(dev->net, "Error writing MII_ADDR\n");
195 goto done;
196 }
196 197
197 ret = __smsc95xx_phy_wait_not_busy(dev, in_pm); 198 ret = __smsc95xx_phy_wait_not_busy(dev, in_pm);
198 check_warn_goto_done(ret, "Timed out reading MII reg %02X\n", idx); 199 if (ret < 0) {
200 netdev_warn(dev->net, "Timed out reading MII reg %02X\n", idx);
201 goto done;
202 }
199 203
200 ret = __smsc95xx_read_reg(dev, MII_DATA, &val, in_pm); 204 ret = __smsc95xx_read_reg(dev, MII_DATA, &val, in_pm);
201 check_warn_goto_done(ret, "Error reading MII_DATA\n"); 205 if (ret < 0) {
206 netdev_warn(dev->net, "Error reading MII_DATA\n");
207 goto done;
208 }
202 209
203 ret = (u16)(val & 0xFFFF); 210 ret = (u16)(val & 0xFFFF);
204 211
@@ -218,21 +225,33 @@ static void __smsc95xx_mdio_write(struct net_device *netdev, int phy_id,
218 225
219 /* confirm MII not busy */ 226 /* confirm MII not busy */
220 ret = __smsc95xx_phy_wait_not_busy(dev, in_pm); 227 ret = __smsc95xx_phy_wait_not_busy(dev, in_pm);
221 check_warn_goto_done(ret, "MII is busy in smsc95xx_mdio_write\n"); 228 if (ret < 0) {
229 netdev_warn(dev->net, "MII is busy in smsc95xx_mdio_write\n");
230 goto done;
231 }
222 232
223 val = regval; 233 val = regval;
224 ret = __smsc95xx_write_reg(dev, MII_DATA, val, in_pm); 234 ret = __smsc95xx_write_reg(dev, MII_DATA, val, in_pm);
225 check_warn_goto_done(ret, "Error writing MII_DATA\n"); 235 if (ret < 0) {
236 netdev_warn(dev->net, "Error writing MII_DATA\n");
237 goto done;
238 }
226 239
227 /* set the address, index & direction (write to PHY) */ 240 /* set the address, index & direction (write to PHY) */
228 phy_id &= dev->mii.phy_id_mask; 241 phy_id &= dev->mii.phy_id_mask;
229 idx &= dev->mii.reg_num_mask; 242 idx &= dev->mii.reg_num_mask;
230 addr = (phy_id << 11) | (idx << 6) | MII_WRITE_ | MII_BUSY_; 243 addr = (phy_id << 11) | (idx << 6) | MII_WRITE_ | MII_BUSY_;
231 ret = __smsc95xx_write_reg(dev, MII_ADDR, addr, in_pm); 244 ret = __smsc95xx_write_reg(dev, MII_ADDR, addr, in_pm);
232 check_warn_goto_done(ret, "Error writing MII_ADDR\n"); 245 if (ret < 0) {
246 netdev_warn(dev->net, "Error writing MII_ADDR\n");
247 goto done;
248 }
233 249
234 ret = __smsc95xx_phy_wait_not_busy(dev, in_pm); 250 ret = __smsc95xx_phy_wait_not_busy(dev, in_pm);
235 check_warn_goto_done(ret, "Timed out writing MII reg %02X\n", idx); 251 if (ret < 0) {
252 netdev_warn(dev->net, "Timed out writing MII reg %02X\n", idx);
253 goto done;
254 }
236 255
237done: 256done:
238 mutex_unlock(&dev->phy_mutex); 257 mutex_unlock(&dev->phy_mutex);
@@ -269,7 +288,11 @@ static int __must_check smsc95xx_wait_eeprom(struct usbnet *dev)
269 288
270 do { 289 do {
271 ret = smsc95xx_read_reg(dev, E2P_CMD, &val); 290 ret = smsc95xx_read_reg(dev, E2P_CMD, &val);
272 check_warn_return(ret, "Error reading E2P_CMD\n"); 291 if (ret < 0) {
292 netdev_warn(dev->net, "Error reading E2P_CMD\n");
293 return ret;
294 }
295
273 if (!(val & E2P_CMD_BUSY_) || (val & E2P_CMD_TIMEOUT_)) 296 if (!(val & E2P_CMD_BUSY_) || (val & E2P_CMD_TIMEOUT_))
274 break; 297 break;
275 udelay(40); 298 udelay(40);
@@ -291,7 +314,10 @@ static int __must_check smsc95xx_eeprom_confirm_not_busy(struct usbnet *dev)
291 314
292 do { 315 do {
293 ret = smsc95xx_read_reg(dev, E2P_CMD, &val); 316 ret = smsc95xx_read_reg(dev, E2P_CMD, &val);
294 check_warn_return(ret, "Error reading E2P_CMD\n"); 317 if (ret < 0) {
318 netdev_warn(dev->net, "Error reading E2P_CMD\n");
319 return ret;
320 }
295 321
296 if (!(val & E2P_CMD_BUSY_)) 322 if (!(val & E2P_CMD_BUSY_))
297 return 0; 323 return 0;
@@ -319,14 +345,20 @@ static int smsc95xx_read_eeprom(struct usbnet *dev, u32 offset, u32 length,
319 for (i = 0; i < length; i++) { 345 for (i = 0; i < length; i++) {
320 val = E2P_CMD_BUSY_ | E2P_CMD_READ_ | (offset & E2P_CMD_ADDR_); 346 val = E2P_CMD_BUSY_ | E2P_CMD_READ_ | (offset & E2P_CMD_ADDR_);
321 ret = smsc95xx_write_reg(dev, E2P_CMD, val); 347 ret = smsc95xx_write_reg(dev, E2P_CMD, val);
322 check_warn_return(ret, "Error writing E2P_CMD\n"); 348 if (ret < 0) {
349 netdev_warn(dev->net, "Error writing E2P_CMD\n");
350 return ret;
351 }
323 352
324 ret = smsc95xx_wait_eeprom(dev); 353 ret = smsc95xx_wait_eeprom(dev);
325 if (ret < 0) 354 if (ret < 0)
326 return ret; 355 return ret;
327 356
328 ret = smsc95xx_read_reg(dev, E2P_DATA, &val); 357 ret = smsc95xx_read_reg(dev, E2P_DATA, &val);
329 check_warn_return(ret, "Error reading E2P_DATA\n"); 358 if (ret < 0) {
359 netdev_warn(dev->net, "Error reading E2P_DATA\n");
360 return ret;
361 }
330 362
331 data[i] = val & 0xFF; 363 data[i] = val & 0xFF;
332 offset++; 364 offset++;
@@ -351,7 +383,10 @@ static int smsc95xx_write_eeprom(struct usbnet *dev, u32 offset, u32 length,
351 /* Issue write/erase enable command */ 383 /* Issue write/erase enable command */
352 val = E2P_CMD_BUSY_ | E2P_CMD_EWEN_; 384 val = E2P_CMD_BUSY_ | E2P_CMD_EWEN_;
353 ret = smsc95xx_write_reg(dev, E2P_CMD, val); 385 ret = smsc95xx_write_reg(dev, E2P_CMD, val);
354 check_warn_return(ret, "Error writing E2P_DATA\n"); 386 if (ret < 0) {
387 netdev_warn(dev->net, "Error writing E2P_DATA\n");
388 return ret;
389 }
355 390
356 ret = smsc95xx_wait_eeprom(dev); 391 ret = smsc95xx_wait_eeprom(dev);
357 if (ret < 0) 392 if (ret < 0)
@@ -362,12 +397,18 @@ static int smsc95xx_write_eeprom(struct usbnet *dev, u32 offset, u32 length,
362 /* Fill data register */ 397 /* Fill data register */
363 val = data[i]; 398 val = data[i];
364 ret = smsc95xx_write_reg(dev, E2P_DATA, val); 399 ret = smsc95xx_write_reg(dev, E2P_DATA, val);
365 check_warn_return(ret, "Error writing E2P_DATA\n"); 400 if (ret < 0) {
401 netdev_warn(dev->net, "Error writing E2P_DATA\n");
402 return ret;
403 }
366 404
367 /* Send "write" command */ 405 /* Send "write" command */
368 val = E2P_CMD_BUSY_ | E2P_CMD_WRITE_ | (offset & E2P_CMD_ADDR_); 406 val = E2P_CMD_BUSY_ | E2P_CMD_WRITE_ | (offset & E2P_CMD_ADDR_);
369 ret = smsc95xx_write_reg(dev, E2P_CMD, val); 407 ret = smsc95xx_write_reg(dev, E2P_CMD, val);
370 check_warn_return(ret, "Error writing E2P_CMD\n"); 408 if (ret < 0) {
409 netdev_warn(dev->net, "Error writing E2P_CMD\n");
410 return ret;
411 }
371 412
372 ret = smsc95xx_wait_eeprom(dev); 413 ret = smsc95xx_wait_eeprom(dev);
373 if (ret < 0) 414 if (ret < 0)
@@ -450,13 +491,16 @@ static void smsc95xx_set_multicast(struct net_device *netdev)
450 491
451 /* Initiate async writes, as we can't wait for completion here */ 492 /* Initiate async writes, as we can't wait for completion here */
452 ret = smsc95xx_write_reg_async(dev, HASHH, &pdata->hash_hi); 493 ret = smsc95xx_write_reg_async(dev, HASHH, &pdata->hash_hi);
453 check_warn(ret, "failed to initiate async write to HASHH\n"); 494 if (ret < 0)
495 netdev_warn(dev->net, "failed to initiate async write to HASHH\n");
454 496
455 ret = smsc95xx_write_reg_async(dev, HASHL, &pdata->hash_lo); 497 ret = smsc95xx_write_reg_async(dev, HASHL, &pdata->hash_lo);
456 check_warn(ret, "failed to initiate async write to HASHL\n"); 498 if (ret < 0)
499 netdev_warn(dev->net, "failed to initiate async write to HASHL\n");
457 500
458 ret = smsc95xx_write_reg_async(dev, MAC_CR, &pdata->mac_cr); 501 ret = smsc95xx_write_reg_async(dev, MAC_CR, &pdata->mac_cr);
459 check_warn(ret, "failed to initiate async write to MAC_CR\n"); 502 if (ret < 0)
503 netdev_warn(dev->net, "failed to initiate async write to MAC_CR\n");
460} 504}
461 505
462static int smsc95xx_phy_update_flowcontrol(struct usbnet *dev, u8 duplex, 506static int smsc95xx_phy_update_flowcontrol(struct usbnet *dev, u8 duplex,
@@ -465,7 +509,10 @@ static int smsc95xx_phy_update_flowcontrol(struct usbnet *dev, u8 duplex,
465 u32 flow, afc_cfg = 0; 509 u32 flow, afc_cfg = 0;
466 510
467 int ret = smsc95xx_read_reg(dev, AFC_CFG, &afc_cfg); 511 int ret = smsc95xx_read_reg(dev, AFC_CFG, &afc_cfg);
468 check_warn_return(ret, "Error reading AFC_CFG\n"); 512 if (ret < 0) {
513 netdev_warn(dev->net, "Error reading AFC_CFG\n");
514 return ret;
515 }
469 516
470 if (duplex == DUPLEX_FULL) { 517 if (duplex == DUPLEX_FULL) {
471 u8 cap = mii_resolve_flowctrl_fdx(lcladv, rmtadv); 518 u8 cap = mii_resolve_flowctrl_fdx(lcladv, rmtadv);
@@ -490,12 +537,16 @@ static int smsc95xx_phy_update_flowcontrol(struct usbnet *dev, u8 duplex,
490 } 537 }
491 538
492 ret = smsc95xx_write_reg(dev, FLOW, flow); 539 ret = smsc95xx_write_reg(dev, FLOW, flow);
493 check_warn_return(ret, "Error writing FLOW\n"); 540 if (ret < 0) {
541 netdev_warn(dev->net, "Error writing FLOW\n");
542 return ret;
543 }
494 544
495 ret = smsc95xx_write_reg(dev, AFC_CFG, afc_cfg); 545 ret = smsc95xx_write_reg(dev, AFC_CFG, afc_cfg);
496 check_warn_return(ret, "Error writing AFC_CFG\n"); 546 if (ret < 0)
547 netdev_warn(dev->net, "Error writing AFC_CFG\n");
497 548
498 return 0; 549 return ret;
499} 550}
500 551
501static int smsc95xx_link_reset(struct usbnet *dev) 552static int smsc95xx_link_reset(struct usbnet *dev)
@@ -509,10 +560,16 @@ static int smsc95xx_link_reset(struct usbnet *dev)
509 560
510 /* clear interrupt status */ 561 /* clear interrupt status */
511 ret = smsc95xx_mdio_read(dev->net, mii->phy_id, PHY_INT_SRC); 562 ret = smsc95xx_mdio_read(dev->net, mii->phy_id, PHY_INT_SRC);
512 check_warn_return(ret, "Error reading PHY_INT_SRC\n"); 563 if (ret < 0) {
564 netdev_warn(dev->net, "Error reading PHY_INT_SRC\n");
565 return ret;
566 }
513 567
514 ret = smsc95xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL_); 568 ret = smsc95xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL_);
515 check_warn_return(ret, "Error writing INT_STS\n"); 569 if (ret < 0) {
570 netdev_warn(dev->net, "Error writing INT_STS\n");
571 return ret;
572 }
516 573
517 mii_check_media(mii, 1, 1); 574 mii_check_media(mii, 1, 1);
518 mii_ethtool_gset(&dev->mii, &ecmd); 575 mii_ethtool_gset(&dev->mii, &ecmd);
@@ -534,12 +591,16 @@ static int smsc95xx_link_reset(struct usbnet *dev)
534 spin_unlock_irqrestore(&pdata->mac_cr_lock, flags); 591 spin_unlock_irqrestore(&pdata->mac_cr_lock, flags);
535 592
536 ret = smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr); 593 ret = smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr);
537 check_warn_return(ret, "Error writing MAC_CR\n"); 594 if (ret < 0) {
595 netdev_warn(dev->net, "Error writing MAC_CR\n");
596 return ret;
597 }
538 598
539 ret = smsc95xx_phy_update_flowcontrol(dev, ecmd.duplex, lcladv, rmtadv); 599 ret = smsc95xx_phy_update_flowcontrol(dev, ecmd.duplex, lcladv, rmtadv);
540 check_warn_return(ret, "Error updating PHY flow control\n"); 600 if (ret < 0)
601 netdev_warn(dev->net, "Error updating PHY flow control\n");
541 602
542 return 0; 603 return ret;
543} 604}
544 605
545static void smsc95xx_status(struct usbnet *dev, struct urb *urb) 606static void smsc95xx_status(struct usbnet *dev, struct urb *urb)
@@ -573,7 +634,10 @@ static int smsc95xx_set_features(struct net_device *netdev,
573 int ret; 634 int ret;
574 635
575 ret = smsc95xx_read_reg(dev, COE_CR, &read_buf); 636 ret = smsc95xx_read_reg(dev, COE_CR, &read_buf);
576 check_warn_return(ret, "Failed to read COE_CR: %d\n", ret); 637 if (ret < 0) {
638 netdev_warn(dev->net, "Failed to read COE_CR: %d\n", ret);
639 return ret;
640 }
577 641
578 if (features & NETIF_F_HW_CSUM) 642 if (features & NETIF_F_HW_CSUM)
579 read_buf |= Tx_COE_EN_; 643 read_buf |= Tx_COE_EN_;
@@ -586,7 +650,10 @@ static int smsc95xx_set_features(struct net_device *netdev,
586 read_buf &= ~Rx_COE_EN_; 650 read_buf &= ~Rx_COE_EN_;
587 651
588 ret = smsc95xx_write_reg(dev, COE_CR, read_buf); 652 ret = smsc95xx_write_reg(dev, COE_CR, read_buf);
589 check_warn_return(ret, "Failed to write COE_CR: %d\n", ret); 653 if (ret < 0) {
654 netdev_warn(dev->net, "Failed to write COE_CR: %d\n", ret);
655 return ret;
656 }
590 657
591 netif_dbg(dev, hw, dev->net, "COE_CR = 0x%08x\n", read_buf); 658 netif_dbg(dev, hw, dev->net, "COE_CR = 0x%08x\n", read_buf);
592 return 0; 659 return 0;
@@ -671,9 +738,10 @@ static int smsc95xx_ethtool_set_wol(struct net_device *net,
671 pdata->wolopts = wolinfo->wolopts & SUPPORTED_WAKE; 738 pdata->wolopts = wolinfo->wolopts & SUPPORTED_WAKE;
672 739
673 ret = device_set_wakeup_enable(&dev->udev->dev, pdata->wolopts); 740 ret = device_set_wakeup_enable(&dev->udev->dev, pdata->wolopts);
674 check_warn_return(ret, "device_set_wakeup_enable error %d\n", ret); 741 if (ret < 0)
742 netdev_warn(dev->net, "device_set_wakeup_enable error %d\n", ret);
675 743
676 return 0; 744 return ret;
677} 745}
678 746
679static const struct ethtool_ops smsc95xx_ethtool_ops = { 747static const struct ethtool_ops smsc95xx_ethtool_ops = {
@@ -728,12 +796,16 @@ static int smsc95xx_set_mac_address(struct usbnet *dev)
728 int ret; 796 int ret;
729 797
730 ret = smsc95xx_write_reg(dev, ADDRL, addr_lo); 798 ret = smsc95xx_write_reg(dev, ADDRL, addr_lo);
731 check_warn_return(ret, "Failed to write ADDRL: %d\n", ret); 799 if (ret < 0) {
800 netdev_warn(dev->net, "Failed to write ADDRL: %d\n", ret);
801 return ret;
802 }
732 803
733 ret = smsc95xx_write_reg(dev, ADDRH, addr_hi); 804 ret = smsc95xx_write_reg(dev, ADDRH, addr_hi);
734 check_warn_return(ret, "Failed to write ADDRH: %d\n", ret); 805 if (ret < 0)
806 netdev_warn(dev->net, "Failed to write ADDRH: %d\n", ret);
735 807
736 return 0; 808 return ret;
737} 809}
738 810
739/* starts the TX path */ 811/* starts the TX path */
@@ -749,13 +821,17 @@ static int smsc95xx_start_tx_path(struct usbnet *dev)
749 spin_unlock_irqrestore(&pdata->mac_cr_lock, flags); 821 spin_unlock_irqrestore(&pdata->mac_cr_lock, flags);
750 822
751 ret = smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr); 823 ret = smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr);
752 check_warn_return(ret, "Failed to write MAC_CR: %d\n", ret); 824 if (ret < 0) {
825 netdev_warn(dev->net, "Failed to write MAC_CR: %d\n", ret);
826 return ret;
827 }
753 828
754 /* Enable Tx at SCSRs */ 829 /* Enable Tx at SCSRs */
755 ret = smsc95xx_write_reg(dev, TX_CFG, TX_CFG_ON_); 830 ret = smsc95xx_write_reg(dev, TX_CFG, TX_CFG_ON_);
756 check_warn_return(ret, "Failed to write TX_CFG: %d\n", ret); 831 if (ret < 0)
832 netdev_warn(dev->net, "Failed to write TX_CFG: %d\n", ret);
757 833
758 return 0; 834 return ret;
759} 835}
760 836
761/* Starts the Receive path */ 837/* Starts the Receive path */
@@ -770,9 +846,10 @@ static int smsc95xx_start_rx_path(struct usbnet *dev, int in_pm)
770 spin_unlock_irqrestore(&pdata->mac_cr_lock, flags); 846 spin_unlock_irqrestore(&pdata->mac_cr_lock, flags);
771 847
772 ret = __smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr, in_pm); 848 ret = __smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr, in_pm);
773 check_warn_return(ret, "Failed to write MAC_CR: %d\n", ret); 849 if (ret < 0)
850 netdev_warn(dev->net, "Failed to write MAC_CR: %d\n", ret);
774 851
775 return 0; 852 return ret;
776} 853}
777 854
778static int smsc95xx_phy_initialize(struct usbnet *dev) 855static int smsc95xx_phy_initialize(struct usbnet *dev)
@@ -807,7 +884,10 @@ static int smsc95xx_phy_initialize(struct usbnet *dev)
807 884
808 /* read to clear */ 885 /* read to clear */
809 ret = smsc95xx_mdio_read(dev->net, dev->mii.phy_id, PHY_INT_SRC); 886 ret = smsc95xx_mdio_read(dev->net, dev->mii.phy_id, PHY_INT_SRC);
810 check_warn_return(ret, "Failed to read PHY_INT_SRC during init\n"); 887 if (ret < 0) {
888 netdev_warn(dev->net, "Failed to read PHY_INT_SRC during init\n");
889 return ret;
890 }
811 891
812 smsc95xx_mdio_write(dev->net, dev->mii.phy_id, PHY_INT_MASK, 892 smsc95xx_mdio_write(dev->net, dev->mii.phy_id, PHY_INT_MASK,
813 PHY_INT_MASK_DEFAULT_); 893 PHY_INT_MASK_DEFAULT_);
@@ -826,13 +906,19 @@ static int smsc95xx_reset(struct usbnet *dev)
826 netif_dbg(dev, ifup, dev->net, "entering smsc95xx_reset\n"); 906 netif_dbg(dev, ifup, dev->net, "entering smsc95xx_reset\n");
827 907
828 ret = smsc95xx_write_reg(dev, HW_CFG, HW_CFG_LRST_); 908 ret = smsc95xx_write_reg(dev, HW_CFG, HW_CFG_LRST_);
829 check_warn_return(ret, "Failed to write HW_CFG_LRST_ bit in HW_CFG\n"); 909 if (ret < 0) {
910 netdev_warn(dev->net, "Failed to write HW_CFG_LRST_ bit in HW_CFG\n");
911 return ret;
912 }
830 913
831 timeout = 0; 914 timeout = 0;
832 do { 915 do {
833 msleep(10); 916 msleep(10);
834 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); 917 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf);
835 check_warn_return(ret, "Failed to read HW_CFG: %d\n", ret); 918 if (ret < 0) {
919 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret);
920 return ret;
921 }
836 timeout++; 922 timeout++;
837 } while ((read_buf & HW_CFG_LRST_) && (timeout < 100)); 923 } while ((read_buf & HW_CFG_LRST_) && (timeout < 100));
838 924
@@ -842,13 +928,19 @@ static int smsc95xx_reset(struct usbnet *dev)
842 } 928 }
843 929
844 ret = smsc95xx_write_reg(dev, PM_CTRL, PM_CTL_PHY_RST_); 930 ret = smsc95xx_write_reg(dev, PM_CTRL, PM_CTL_PHY_RST_);
845 check_warn_return(ret, "Failed to write PM_CTRL: %d\n", ret); 931 if (ret < 0) {
932 netdev_warn(dev->net, "Failed to write PM_CTRL: %d\n", ret);
933 return ret;
934 }
846 935
847 timeout = 0; 936 timeout = 0;
848 do { 937 do {
849 msleep(10); 938 msleep(10);
850 ret = smsc95xx_read_reg(dev, PM_CTRL, &read_buf); 939 ret = smsc95xx_read_reg(dev, PM_CTRL, &read_buf);
851 check_warn_return(ret, "Failed to read PM_CTRL: %d\n", ret); 940 if (ret < 0) {
941 netdev_warn(dev->net, "Failed to read PM_CTRL: %d\n", ret);
942 return ret;
943 }
852 timeout++; 944 timeout++;
853 } while ((read_buf & PM_CTL_PHY_RST_) && (timeout < 100)); 945 } while ((read_buf & PM_CTL_PHY_RST_) && (timeout < 100));
854 946
@@ -865,7 +957,10 @@ static int smsc95xx_reset(struct usbnet *dev)
865 dev->net->dev_addr); 957 dev->net->dev_addr);
866 958
867 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); 959 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf);
868 check_warn_return(ret, "Failed to read HW_CFG: %d\n", ret); 960 if (ret < 0) {
961 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret);
962 return ret;
963 }
869 964
870 netif_dbg(dev, ifup, dev->net, "Read Value from HW_CFG : 0x%08x\n", 965 netif_dbg(dev, ifup, dev->net, "Read Value from HW_CFG : 0x%08x\n",
871 read_buf); 966 read_buf);
@@ -873,10 +968,17 @@ static int smsc95xx_reset(struct usbnet *dev)
873 read_buf |= HW_CFG_BIR_; 968 read_buf |= HW_CFG_BIR_;
874 969
875 ret = smsc95xx_write_reg(dev, HW_CFG, read_buf); 970 ret = smsc95xx_write_reg(dev, HW_CFG, read_buf);
876 check_warn_return(ret, "Failed to write HW_CFG_BIR_ bit in HW_CFG\n"); 971 if (ret < 0) {
972 netdev_warn(dev->net, "Failed to write HW_CFG_BIR_ bit in HW_CFG\n");
973 return ret;
974 }
877 975
878 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); 976 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf);
879 check_warn_return(ret, "Failed to read HW_CFG: %d\n", ret); 977 if (ret < 0) {
978 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret);
979 return ret;
980 }
981
880 netif_dbg(dev, ifup, dev->net, 982 netif_dbg(dev, ifup, dev->net,
881 "Read Value from HW_CFG after writing HW_CFG_BIR_: 0x%08x\n", 983 "Read Value from HW_CFG after writing HW_CFG_BIR_: 0x%08x\n",
882 read_buf); 984 read_buf);
@@ -896,27 +998,42 @@ static int smsc95xx_reset(struct usbnet *dev)
896 (ulong)dev->rx_urb_size); 998 (ulong)dev->rx_urb_size);
897 999
898 ret = smsc95xx_write_reg(dev, BURST_CAP, burst_cap); 1000 ret = smsc95xx_write_reg(dev, BURST_CAP, burst_cap);
899 check_warn_return(ret, "Failed to write BURST_CAP: %d\n", ret); 1001 if (ret < 0) {
1002 netdev_warn(dev->net, "Failed to write BURST_CAP: %d\n", ret);
1003 return ret;
1004 }
900 1005
901 ret = smsc95xx_read_reg(dev, BURST_CAP, &read_buf); 1006 ret = smsc95xx_read_reg(dev, BURST_CAP, &read_buf);
902 check_warn_return(ret, "Failed to read BURST_CAP: %d\n", ret); 1007 if (ret < 0) {
1008 netdev_warn(dev->net, "Failed to read BURST_CAP: %d\n", ret);
1009 return ret;
1010 }
903 1011
904 netif_dbg(dev, ifup, dev->net, 1012 netif_dbg(dev, ifup, dev->net,
905 "Read Value from BURST_CAP after writing: 0x%08x\n", 1013 "Read Value from BURST_CAP after writing: 0x%08x\n",
906 read_buf); 1014 read_buf);
907 1015
908 ret = smsc95xx_write_reg(dev, BULK_IN_DLY, DEFAULT_BULK_IN_DELAY); 1016 ret = smsc95xx_write_reg(dev, BULK_IN_DLY, DEFAULT_BULK_IN_DELAY);
909 check_warn_return(ret, "Failed to write BULK_IN_DLY: %d\n", ret); 1017 if (ret < 0) {
1018 netdev_warn(dev->net, "Failed to write BULK_IN_DLY: %d\n", ret);
1019 return ret;
1020 }
910 1021
911 ret = smsc95xx_read_reg(dev, BULK_IN_DLY, &read_buf); 1022 ret = smsc95xx_read_reg(dev, BULK_IN_DLY, &read_buf);
912 check_warn_return(ret, "Failed to read BULK_IN_DLY: %d\n", ret); 1023 if (ret < 0) {
1024 netdev_warn(dev->net, "Failed to read BULK_IN_DLY: %d\n", ret);
1025 return ret;
1026 }
913 1027
914 netif_dbg(dev, ifup, dev->net, 1028 netif_dbg(dev, ifup, dev->net,
915 "Read Value from BULK_IN_DLY after writing: 0x%08x\n", 1029 "Read Value from BULK_IN_DLY after writing: 0x%08x\n",
916 read_buf); 1030 read_buf);
917 1031
918 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); 1032 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf);
919 check_warn_return(ret, "Failed to read HW_CFG: %d\n", ret); 1033 if (ret < 0) {
1034 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret);
1035 return ret;
1036 }
920 1037
921 netif_dbg(dev, ifup, dev->net, "Read Value from HW_CFG: 0x%08x\n", 1038 netif_dbg(dev, ifup, dev->net, "Read Value from HW_CFG: 0x%08x\n",
922 read_buf); 1039 read_buf);
@@ -930,66 +1047,111 @@ static int smsc95xx_reset(struct usbnet *dev)
930 read_buf |= NET_IP_ALIGN << 9; 1047 read_buf |= NET_IP_ALIGN << 9;
931 1048
932 ret = smsc95xx_write_reg(dev, HW_CFG, read_buf); 1049 ret = smsc95xx_write_reg(dev, HW_CFG, read_buf);
933 check_warn_return(ret, "Failed to write HW_CFG: %d\n", ret); 1050 if (ret < 0) {
1051 netdev_warn(dev->net, "Failed to write HW_CFG: %d\n", ret);
1052 return ret;
1053 }
934 1054
935 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); 1055 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf);
936 check_warn_return(ret, "Failed to read HW_CFG: %d\n", ret); 1056 if (ret < 0) {
1057 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret);
1058 return ret;
1059 }
937 1060
938 netif_dbg(dev, ifup, dev->net, 1061 netif_dbg(dev, ifup, dev->net,
939 "Read Value from HW_CFG after writing: 0x%08x\n", read_buf); 1062 "Read Value from HW_CFG after writing: 0x%08x\n", read_buf);
940 1063
941 ret = smsc95xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL_); 1064 ret = smsc95xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL_);
942 check_warn_return(ret, "Failed to write INT_STS: %d\n", ret); 1065 if (ret < 0) {
1066 netdev_warn(dev->net, "Failed to write INT_STS: %d\n", ret);
1067 return ret;
1068 }
943 1069
944 ret = smsc95xx_read_reg(dev, ID_REV, &read_buf); 1070 ret = smsc95xx_read_reg(dev, ID_REV, &read_buf);
945 check_warn_return(ret, "Failed to read ID_REV: %d\n", ret); 1071 if (ret < 0) {
1072 netdev_warn(dev->net, "Failed to read ID_REV: %d\n", ret);
1073 return ret;
1074 }
946 netif_dbg(dev, ifup, dev->net, "ID_REV = 0x%08x\n", read_buf); 1075 netif_dbg(dev, ifup, dev->net, "ID_REV = 0x%08x\n", read_buf);
947 1076
948 /* Configure GPIO pins as LED outputs */ 1077 /* Configure GPIO pins as LED outputs */
949 write_buf = LED_GPIO_CFG_SPD_LED | LED_GPIO_CFG_LNK_LED | 1078 write_buf = LED_GPIO_CFG_SPD_LED | LED_GPIO_CFG_LNK_LED |
950 LED_GPIO_CFG_FDX_LED; 1079 LED_GPIO_CFG_FDX_LED;
951 ret = smsc95xx_write_reg(dev, LED_GPIO_CFG, write_buf); 1080 ret = smsc95xx_write_reg(dev, LED_GPIO_CFG, write_buf);
952 check_warn_return(ret, "Failed to write LED_GPIO_CFG: %d\n", ret); 1081 if (ret < 0) {
1082 netdev_warn(dev->net, "Failed to write LED_GPIO_CFG: %d\n", ret);
1083 return ret;
1084 }
953 1085
954 /* Init Tx */ 1086 /* Init Tx */
955 ret = smsc95xx_write_reg(dev, FLOW, 0); 1087 ret = smsc95xx_write_reg(dev, FLOW, 0);
956 check_warn_return(ret, "Failed to write FLOW: %d\n", ret); 1088 if (ret < 0) {
1089 netdev_warn(dev->net, "Failed to write FLOW: %d\n", ret);
1090 return ret;
1091 }
957 1092
958 ret = smsc95xx_write_reg(dev, AFC_CFG, AFC_CFG_DEFAULT); 1093 ret = smsc95xx_write_reg(dev, AFC_CFG, AFC_CFG_DEFAULT);
959 check_warn_return(ret, "Failed to write AFC_CFG: %d\n", ret); 1094 if (ret < 0) {
1095 netdev_warn(dev->net, "Failed to write AFC_CFG: %d\n", ret);
1096 return ret;
1097 }
960 1098
961 /* Don't need mac_cr_lock during initialisation */ 1099 /* Don't need mac_cr_lock during initialisation */
962 ret = smsc95xx_read_reg(dev, MAC_CR, &pdata->mac_cr); 1100 ret = smsc95xx_read_reg(dev, MAC_CR, &pdata->mac_cr);
963 check_warn_return(ret, "Failed to read MAC_CR: %d\n", ret); 1101 if (ret < 0) {
1102 netdev_warn(dev->net, "Failed to read MAC_CR: %d\n", ret);
1103 return ret;
1104 }
964 1105
965 /* Init Rx */ 1106 /* Init Rx */
966 /* Set Vlan */ 1107 /* Set Vlan */
967 ret = smsc95xx_write_reg(dev, VLAN1, (u32)ETH_P_8021Q); 1108 ret = smsc95xx_write_reg(dev, VLAN1, (u32)ETH_P_8021Q);
968 check_warn_return(ret, "Failed to write VLAN1: %d\n", ret); 1109 if (ret < 0) {
1110 netdev_warn(dev->net, "Failed to write VLAN1: %d\n", ret);
1111 return ret;
1112 }
969 1113
970 /* Enable or disable checksum offload engines */ 1114 /* Enable or disable checksum offload engines */
971 ret = smsc95xx_set_features(dev->net, dev->net->features); 1115 ret = smsc95xx_set_features(dev->net, dev->net->features);
972 check_warn_return(ret, "Failed to set checksum offload features\n"); 1116 if (ret < 0) {
1117 netdev_warn(dev->net, "Failed to set checksum offload features\n");
1118 return ret;
1119 }
973 1120
974 smsc95xx_set_multicast(dev->net); 1121 smsc95xx_set_multicast(dev->net);
975 1122
976 ret = smsc95xx_phy_initialize(dev); 1123 ret = smsc95xx_phy_initialize(dev);
977 check_warn_return(ret, "Failed to init PHY\n"); 1124 if (ret < 0) {
1125 netdev_warn(dev->net, "Failed to init PHY\n");
1126 return ret;
1127 }
978 1128
979 ret = smsc95xx_read_reg(dev, INT_EP_CTL, &read_buf); 1129 ret = smsc95xx_read_reg(dev, INT_EP_CTL, &read_buf);
980 check_warn_return(ret, "Failed to read INT_EP_CTL: %d\n", ret); 1130 if (ret < 0) {
1131 netdev_warn(dev->net, "Failed to read INT_EP_CTL: %d\n", ret);
1132 return ret;
1133 }
981 1134
982 /* enable PHY interrupts */ 1135 /* enable PHY interrupts */
983 read_buf |= INT_EP_CTL_PHY_INT_; 1136 read_buf |= INT_EP_CTL_PHY_INT_;
984 1137
985 ret = smsc95xx_write_reg(dev, INT_EP_CTL, read_buf); 1138 ret = smsc95xx_write_reg(dev, INT_EP_CTL, read_buf);
986 check_warn_return(ret, "Failed to write INT_EP_CTL: %d\n", ret); 1139 if (ret < 0) {
1140 netdev_warn(dev->net, "Failed to write INT_EP_CTL: %d\n", ret);
1141 return ret;
1142 }
987 1143
988 ret = smsc95xx_start_tx_path(dev); 1144 ret = smsc95xx_start_tx_path(dev);
989 check_warn_return(ret, "Failed to start TX path\n"); 1145 if (ret < 0) {
1146 netdev_warn(dev->net, "Failed to start TX path\n");
1147 return ret;
1148 }
990 1149
991 ret = smsc95xx_start_rx_path(dev, 0); 1150 ret = smsc95xx_start_rx_path(dev, 0);
992 check_warn_return(ret, "Failed to start RX path\n"); 1151 if (ret < 0) {
1152 netdev_warn(dev->net, "Failed to start RX path\n");
1153 return ret;
1154 }
993 1155
994 netif_dbg(dev, ifup, dev->net, "smsc95xx_reset, return 0\n"); 1156 netif_dbg(dev, ifup, dev->net, "smsc95xx_reset, return 0\n");
995 return 0; 1157 return 0;
@@ -1017,7 +1179,10 @@ static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf)
1017 printk(KERN_INFO SMSC_CHIPNAME " v" SMSC_DRIVER_VERSION "\n"); 1179 printk(KERN_INFO SMSC_CHIPNAME " v" SMSC_DRIVER_VERSION "\n");
1018 1180
1019 ret = usbnet_get_endpoints(dev, intf); 1181 ret = usbnet_get_endpoints(dev, intf);
1020 check_warn_return(ret, "usbnet_get_endpoints failed: %d\n", ret); 1182 if (ret < 0) {
1183 netdev_warn(dev->net, "usbnet_get_endpoints failed: %d\n", ret);
1184 return ret;
1185 }
1021 1186
1022 dev->data[0] = (unsigned long)kzalloc(sizeof(struct smsc95xx_priv), 1187 dev->data[0] = (unsigned long)kzalloc(sizeof(struct smsc95xx_priv),
1023 GFP_KERNEL); 1188 GFP_KERNEL);
@@ -1044,7 +1209,10 @@ static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf)
1044 1209
1045 /* detect device revision as different features may be available */ 1210 /* detect device revision as different features may be available */
1046 ret = smsc95xx_read_reg(dev, ID_REV, &val); 1211 ret = smsc95xx_read_reg(dev, ID_REV, &val);
1047 check_warn_return(ret, "Failed to read ID_REV: %d\n", ret); 1212 if (ret < 0) {
1213 netdev_warn(dev->net, "Failed to read ID_REV: %d\n", ret);
1214 return ret;
1215 }
1048 val >>= 16; 1216 val >>= 16;
1049 1217
1050 if ((val == ID_REV_CHIP_ID_9500A_) || (val == ID_REV_CHIP_ID_9530_) || 1218 if ((val == ID_REV_CHIP_ID_9500A_) || (val == ID_REV_CHIP_ID_9530_) ||
@@ -1089,11 +1257,17 @@ static int smsc95xx_enable_phy_wakeup_interrupts(struct usbnet *dev, u16 mask)
1089 1257
1090 /* read to clear */ 1258 /* read to clear */
1091 ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, PHY_INT_SRC); 1259 ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, PHY_INT_SRC);
1092 check_warn_return(ret, "Error reading PHY_INT_SRC\n"); 1260 if (ret < 0) {
1261 netdev_warn(dev->net, "Error reading PHY_INT_SRC\n");
1262 return ret;
1263 }
1093 1264
1094 /* enable interrupt source */ 1265 /* enable interrupt source */
1095 ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, PHY_INT_MASK); 1266 ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, PHY_INT_MASK);
1096 check_warn_return(ret, "Error reading PHY_INT_MASK\n"); 1267 if (ret < 0) {
1268 netdev_warn(dev->net, "Error reading PHY_INT_MASK\n");
1269 return ret;
1270 }
1097 1271
1098 ret |= mask; 1272 ret |= mask;
1099 1273
@@ -1109,10 +1283,16 @@ static int smsc95xx_link_ok_nopm(struct usbnet *dev)
1109 1283
1110 /* first, a dummy read, needed to latch some MII phys */ 1284 /* first, a dummy read, needed to latch some MII phys */
1111 ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, MII_BMSR); 1285 ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, MII_BMSR);
1112 check_warn_return(ret, "Error reading MII_BMSR\n"); 1286 if (ret < 0) {
1287 netdev_warn(dev->net, "Error reading MII_BMSR\n");
1288 return ret;
1289 }
1113 1290
1114 ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, MII_BMSR); 1291 ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, MII_BMSR);
1115 check_warn_return(ret, "Error reading MII_BMSR\n"); 1292 if (ret < 0) {
1293 netdev_warn(dev->net, "Error reading MII_BMSR\n");
1294 return ret;
1295 }
1116 1296
1117 return !!(ret & BMSR_LSTATUS); 1297 return !!(ret & BMSR_LSTATUS);
1118} 1298}
@@ -1124,13 +1304,19 @@ static int smsc95xx_enter_suspend0(struct usbnet *dev)
1124 int ret; 1304 int ret;
1125 1305
1126 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); 1306 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val);
1127 check_warn_return(ret, "Error reading PM_CTRL\n"); 1307 if (ret < 0) {
1308 netdev_warn(dev->net, "Error reading PM_CTRL\n");
1309 return ret;
1310 }
1128 1311
1129 val &= (~(PM_CTL_SUS_MODE_ | PM_CTL_WUPS_ | PM_CTL_PHY_RST_)); 1312 val &= (~(PM_CTL_SUS_MODE_ | PM_CTL_WUPS_ | PM_CTL_PHY_RST_));
1130 val |= PM_CTL_SUS_MODE_0; 1313 val |= PM_CTL_SUS_MODE_0;
1131 1314
1132 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); 1315 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
1133 check_warn_return(ret, "Error writing PM_CTRL\n"); 1316 if (ret < 0) {
1317 netdev_warn(dev->net, "Error writing PM_CTRL\n");
1318 return ret;
1319 }
1134 1320
1135 /* clear wol status */ 1321 /* clear wol status */
1136 val &= ~PM_CTL_WUPS_; 1322 val &= ~PM_CTL_WUPS_;
@@ -1141,13 +1327,17 @@ static int smsc95xx_enter_suspend0(struct usbnet *dev)
1141 val |= PM_CTL_WUPS_ED_; 1327 val |= PM_CTL_WUPS_ED_;
1142 1328
1143 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); 1329 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
1144 check_warn_return(ret, "Error writing PM_CTRL\n"); 1330 if (ret < 0) {
1331 netdev_warn(dev->net, "Error writing PM_CTRL\n");
1332 return ret;
1333 }
1145 1334
1146 /* read back PM_CTRL */ 1335 /* read back PM_CTRL */
1147 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); 1336 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val);
1148 check_warn_return(ret, "Error reading PM_CTRL\n"); 1337 if (ret < 0)
1338 netdev_warn(dev->net, "Error reading PM_CTRL\n");
1149 1339
1150 return 0; 1340 return ret;
1151} 1341}
1152 1342
1153static int smsc95xx_enter_suspend1(struct usbnet *dev) 1343static int smsc95xx_enter_suspend1(struct usbnet *dev)
@@ -1166,7 +1356,10 @@ static int smsc95xx_enter_suspend1(struct usbnet *dev)
1166 1356
1167 /* enable energy detect power-down mode */ 1357 /* enable energy detect power-down mode */
1168 ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, PHY_MODE_CTRL_STS); 1358 ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, PHY_MODE_CTRL_STS);
1169 check_warn_return(ret, "Error reading PHY_MODE_CTRL_STS\n"); 1359 if (ret < 0) {
1360 netdev_warn(dev->net, "Error reading PHY_MODE_CTRL_STS\n");
1361 return ret;
1362 }
1170 1363
1171 ret |= MODE_CTRL_STS_EDPWRDOWN_; 1364 ret |= MODE_CTRL_STS_EDPWRDOWN_;
1172 1365
@@ -1174,22 +1367,29 @@ static int smsc95xx_enter_suspend1(struct usbnet *dev)
1174 1367
1175 /* enter SUSPEND1 mode */ 1368 /* enter SUSPEND1 mode */
1176 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); 1369 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val);
1177 check_warn_return(ret, "Error reading PM_CTRL\n"); 1370 if (ret < 0) {
1371 netdev_warn(dev->net, "Error reading PM_CTRL\n");
1372 return ret;
1373 }
1178 1374
1179 val &= ~(PM_CTL_SUS_MODE_ | PM_CTL_WUPS_ | PM_CTL_PHY_RST_); 1375 val &= ~(PM_CTL_SUS_MODE_ | PM_CTL_WUPS_ | PM_CTL_PHY_RST_);
1180 val |= PM_CTL_SUS_MODE_1; 1376 val |= PM_CTL_SUS_MODE_1;
1181 1377
1182 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); 1378 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
1183 check_warn_return(ret, "Error writing PM_CTRL\n"); 1379 if (ret < 0) {
1380 netdev_warn(dev->net, "Error writing PM_CTRL\n");
1381 return ret;
1382 }
1184 1383
1185 /* clear wol status, enable energy detection */ 1384 /* clear wol status, enable energy detection */
1186 val &= ~PM_CTL_WUPS_; 1385 val &= ~PM_CTL_WUPS_;
1187 val |= (PM_CTL_WUPS_ED_ | PM_CTL_ED_EN_); 1386 val |= (PM_CTL_WUPS_ED_ | PM_CTL_ED_EN_);
1188 1387
1189 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); 1388 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
1190 check_warn_return(ret, "Error writing PM_CTRL\n"); 1389 if (ret < 0)
1390 netdev_warn(dev->net, "Error writing PM_CTRL\n");
1191 1391
1192 return 0; 1392 return ret;
1193} 1393}
1194 1394
1195static int smsc95xx_enter_suspend2(struct usbnet *dev) 1395static int smsc95xx_enter_suspend2(struct usbnet *dev)
@@ -1198,15 +1398,19 @@ static int smsc95xx_enter_suspend2(struct usbnet *dev)
1198 int ret; 1398 int ret;
1199 1399
1200 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); 1400 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val);
1201 check_warn_return(ret, "Error reading PM_CTRL\n"); 1401 if (ret < 0) {
1402 netdev_warn(dev->net, "Error reading PM_CTRL\n");
1403 return ret;
1404 }
1202 1405
1203 val &= ~(PM_CTL_SUS_MODE_ | PM_CTL_WUPS_ | PM_CTL_PHY_RST_); 1406 val &= ~(PM_CTL_SUS_MODE_ | PM_CTL_WUPS_ | PM_CTL_PHY_RST_);
1204 val |= PM_CTL_SUS_MODE_2; 1407 val |= PM_CTL_SUS_MODE_2;
1205 1408
1206 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); 1409 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
1207 check_warn_return(ret, "Error writing PM_CTRL\n"); 1410 if (ret < 0)
1411 netdev_warn(dev->net, "Error writing PM_CTRL\n");
1208 1412
1209 return 0; 1413 return ret;
1210} 1414}
1211 1415
1212static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message) 1416static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message)
@@ -1217,7 +1421,10 @@ static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message)
1217 int ret; 1421 int ret;
1218 1422
1219 ret = usbnet_suspend(intf, message); 1423 ret = usbnet_suspend(intf, message);
1220 check_warn_return(ret, "usbnet_suspend error\n"); 1424 if (ret < 0) {
1425 netdev_warn(dev->net, "usbnet_suspend error\n");
1426 return ret;
1427 }
1221 1428
1222 /* determine if link is up using only _nopm functions */ 1429 /* determine if link is up using only _nopm functions */
1223 link_up = smsc95xx_link_ok_nopm(dev); 1430 link_up = smsc95xx_link_ok_nopm(dev);
@@ -1231,20 +1438,32 @@ static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message)
1231 1438
1232 /* disable energy detect (link up) & wake up events */ 1439 /* disable energy detect (link up) & wake up events */
1233 ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val); 1440 ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val);
1234 check_warn_goto_done(ret, "Error reading WUCSR\n"); 1441 if (ret < 0) {
1442 netdev_warn(dev->net, "Error reading WUCSR\n");
1443 goto done;
1444 }
1235 1445
1236 val &= ~(WUCSR_MPEN_ | WUCSR_WAKE_EN_); 1446 val &= ~(WUCSR_MPEN_ | WUCSR_WAKE_EN_);
1237 1447
1238 ret = smsc95xx_write_reg_nopm(dev, WUCSR, val); 1448 ret = smsc95xx_write_reg_nopm(dev, WUCSR, val);
1239 check_warn_goto_done(ret, "Error writing WUCSR\n"); 1449 if (ret < 0) {
1450 netdev_warn(dev->net, "Error writing WUCSR\n");
1451 goto done;
1452 }
1240 1453
1241 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); 1454 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val);
1242 check_warn_goto_done(ret, "Error reading PM_CTRL\n"); 1455 if (ret < 0) {
1456 netdev_warn(dev->net, "Error reading PM_CTRL\n");
1457 goto done;
1458 }
1243 1459
1244 val &= ~(PM_CTL_ED_EN_ | PM_CTL_WOL_EN_); 1460 val &= ~(PM_CTL_ED_EN_ | PM_CTL_WOL_EN_);
1245 1461
1246 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); 1462 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
1247 check_warn_goto_done(ret, "Error writing PM_CTRL\n"); 1463 if (ret < 0) {
1464 netdev_warn(dev->net, "Error writing PM_CTRL\n");
1465 goto done;
1466 }
1248 1467
1249 ret = smsc95xx_enter_suspend2(dev); 1468 ret = smsc95xx_enter_suspend2(dev);
1250 goto done; 1469 goto done;
@@ -1253,7 +1472,10 @@ static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message)
1253 if (pdata->wolopts & WAKE_PHY) { 1472 if (pdata->wolopts & WAKE_PHY) {
1254 ret = smsc95xx_enable_phy_wakeup_interrupts(dev, 1473 ret = smsc95xx_enable_phy_wakeup_interrupts(dev,
1255 (PHY_INT_MASK_ANEG_COMP_ | PHY_INT_MASK_LINK_DOWN_)); 1474 (PHY_INT_MASK_ANEG_COMP_ | PHY_INT_MASK_LINK_DOWN_));
1256 check_warn_goto_done(ret, "error enabling PHY wakeup ints\n"); 1475 if (ret < 0) {
1476 netdev_warn(dev->net, "error enabling PHY wakeup ints\n");
1477 goto done;
1478 }
1257 1479
1258 /* if link is down then configure EDPD and enter SUSPEND1, 1480 /* if link is down then configure EDPD and enter SUSPEND1,
1259 * otherwise enter SUSPEND0 below 1481 * otherwise enter SUSPEND0 below
@@ -1338,51 +1560,77 @@ static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message)
1338 1560
1339 for (i = 0; i < (wuff_filter_count * 4); i++) { 1561 for (i = 0; i < (wuff_filter_count * 4); i++) {
1340 ret = smsc95xx_write_reg_nopm(dev, WUFF, filter_mask[i]); 1562 ret = smsc95xx_write_reg_nopm(dev, WUFF, filter_mask[i]);
1341 if (ret < 0) 1563 if (ret < 0) {
1564 netdev_warn(dev->net, "Error writing WUFF\n");
1342 kfree(filter_mask); 1565 kfree(filter_mask);
1343 check_warn_goto_done(ret, "Error writing WUFF\n"); 1566 goto done;
1567 }
1344 } 1568 }
1345 kfree(filter_mask); 1569 kfree(filter_mask);
1346 1570
1347 for (i = 0; i < (wuff_filter_count / 4); i++) { 1571 for (i = 0; i < (wuff_filter_count / 4); i++) {
1348 ret = smsc95xx_write_reg_nopm(dev, WUFF, command[i]); 1572 ret = smsc95xx_write_reg_nopm(dev, WUFF, command[i]);
1349 check_warn_goto_done(ret, "Error writing WUFF\n"); 1573 if (ret < 0) {
1574 netdev_warn(dev->net, "Error writing WUFF\n");
1575 goto done;
1576 }
1350 } 1577 }
1351 1578
1352 for (i = 0; i < (wuff_filter_count / 4); i++) { 1579 for (i = 0; i < (wuff_filter_count / 4); i++) {
1353 ret = smsc95xx_write_reg_nopm(dev, WUFF, offset[i]); 1580 ret = smsc95xx_write_reg_nopm(dev, WUFF, offset[i]);
1354 check_warn_goto_done(ret, "Error writing WUFF\n"); 1581 if (ret < 0) {
1582 netdev_warn(dev->net, "Error writing WUFF\n");
1583 goto done;
1584 }
1355 } 1585 }
1356 1586
1357 for (i = 0; i < (wuff_filter_count / 2); i++) { 1587 for (i = 0; i < (wuff_filter_count / 2); i++) {
1358 ret = smsc95xx_write_reg_nopm(dev, WUFF, crc[i]); 1588 ret = smsc95xx_write_reg_nopm(dev, WUFF, crc[i]);
1359 check_warn_goto_done(ret, "Error writing WUFF\n"); 1589 if (ret < 0) {
1590 netdev_warn(dev->net, "Error writing WUFF\n");
1591 goto done;
1592 }
1360 } 1593 }
1361 1594
1362 /* clear any pending pattern match packet status */ 1595 /* clear any pending pattern match packet status */
1363 ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val); 1596 ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val);
1364 check_warn_goto_done(ret, "Error reading WUCSR\n"); 1597 if (ret < 0) {
1598 netdev_warn(dev->net, "Error reading WUCSR\n");
1599 goto done;
1600 }
1365 1601
1366 val |= WUCSR_WUFR_; 1602 val |= WUCSR_WUFR_;
1367 1603
1368 ret = smsc95xx_write_reg_nopm(dev, WUCSR, val); 1604 ret = smsc95xx_write_reg_nopm(dev, WUCSR, val);
1369 check_warn_goto_done(ret, "Error writing WUCSR\n"); 1605 if (ret < 0) {
1606 netdev_warn(dev->net, "Error writing WUCSR\n");
1607 goto done;
1608 }
1370 } 1609 }
1371 1610
1372 if (pdata->wolopts & WAKE_MAGIC) { 1611 if (pdata->wolopts & WAKE_MAGIC) {
1373 /* clear any pending magic packet status */ 1612 /* clear any pending magic packet status */
1374 ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val); 1613 ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val);
1375 check_warn_goto_done(ret, "Error reading WUCSR\n"); 1614 if (ret < 0) {
1615 netdev_warn(dev->net, "Error reading WUCSR\n");
1616 goto done;
1617 }
1376 1618
1377 val |= WUCSR_MPR_; 1619 val |= WUCSR_MPR_;
1378 1620
1379 ret = smsc95xx_write_reg_nopm(dev, WUCSR, val); 1621 ret = smsc95xx_write_reg_nopm(dev, WUCSR, val);
1380 check_warn_goto_done(ret, "Error writing WUCSR\n"); 1622 if (ret < 0) {
1623 netdev_warn(dev->net, "Error writing WUCSR\n");
1624 goto done;
1625 }
1381 } 1626 }
1382 1627
1383 /* enable/disable wakeup sources */ 1628 /* enable/disable wakeup sources */
1384 ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val); 1629 ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val);
1385 check_warn_goto_done(ret, "Error reading WUCSR\n"); 1630 if (ret < 0) {
1631 netdev_warn(dev->net, "Error reading WUCSR\n");
1632 goto done;
1633 }
1386 1634
1387 if (pdata->wolopts & (WAKE_BCAST | WAKE_MCAST | WAKE_ARP | WAKE_UCAST)) { 1635 if (pdata->wolopts & (WAKE_BCAST | WAKE_MCAST | WAKE_ARP | WAKE_UCAST)) {
1388 netdev_info(dev->net, "enabling pattern match wakeup\n"); 1636 netdev_info(dev->net, "enabling pattern match wakeup\n");
@@ -1401,11 +1649,17 @@ static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message)
1401 } 1649 }
1402 1650
1403 ret = smsc95xx_write_reg_nopm(dev, WUCSR, val); 1651 ret = smsc95xx_write_reg_nopm(dev, WUCSR, val);
1404 check_warn_goto_done(ret, "Error writing WUCSR\n"); 1652 if (ret < 0) {
1653 netdev_warn(dev->net, "Error writing WUCSR\n");
1654 goto done;
1655 }
1405 1656
1406 /* enable wol wakeup source */ 1657 /* enable wol wakeup source */
1407 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); 1658 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val);
1408 check_warn_goto_done(ret, "Error reading PM_CTRL\n"); 1659 if (ret < 0) {
1660 netdev_warn(dev->net, "Error reading PM_CTRL\n");
1661 goto done;
1662 }
1409 1663
1410 val |= PM_CTL_WOL_EN_; 1664 val |= PM_CTL_WOL_EN_;
1411 1665
@@ -1414,7 +1668,10 @@ static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message)
1414 val |= PM_CTL_ED_EN_; 1668 val |= PM_CTL_ED_EN_;
1415 1669
1416 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); 1670 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
1417 check_warn_goto_done(ret, "Error writing PM_CTRL\n"); 1671 if (ret < 0) {
1672 netdev_warn(dev->net, "Error writing PM_CTRL\n");
1673 goto done;
1674 }
1418 1675
1419 /* enable receiver to enable frame reception */ 1676 /* enable receiver to enable frame reception */
1420 smsc95xx_start_rx_path(dev, 1); 1677 smsc95xx_start_rx_path(dev, 1);
@@ -1441,28 +1698,41 @@ static int smsc95xx_resume(struct usb_interface *intf)
1441 if (pdata->wolopts) { 1698 if (pdata->wolopts) {
1442 /* clear wake-up sources */ 1699 /* clear wake-up sources */
1443 ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val); 1700 ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val);
1444 check_warn_return(ret, "Error reading WUCSR\n"); 1701 if (ret < 0) {
1702 netdev_warn(dev->net, "Error reading WUCSR\n");
1703 return ret;
1704 }
1445 1705
1446 val &= ~(WUCSR_WAKE_EN_ | WUCSR_MPEN_); 1706 val &= ~(WUCSR_WAKE_EN_ | WUCSR_MPEN_);
1447 1707
1448 ret = smsc95xx_write_reg_nopm(dev, WUCSR, val); 1708 ret = smsc95xx_write_reg_nopm(dev, WUCSR, val);
1449 check_warn_return(ret, "Error writing WUCSR\n"); 1709 if (ret < 0) {
1710 netdev_warn(dev->net, "Error writing WUCSR\n");
1711 return ret;
1712 }
1450 1713
1451 /* clear wake-up status */ 1714 /* clear wake-up status */
1452 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); 1715 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val);
1453 check_warn_return(ret, "Error reading PM_CTRL\n"); 1716 if (ret < 0) {
1717 netdev_warn(dev->net, "Error reading PM_CTRL\n");
1718 return ret;
1719 }
1454 1720
1455 val &= ~PM_CTL_WOL_EN_; 1721 val &= ~PM_CTL_WOL_EN_;
1456 val |= PM_CTL_WUPS_; 1722 val |= PM_CTL_WUPS_;
1457 1723
1458 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); 1724 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
1459 check_warn_return(ret, "Error writing PM_CTRL\n"); 1725 if (ret < 0) {
1726 netdev_warn(dev->net, "Error writing PM_CTRL\n");
1727 return ret;
1728 }
1460 } 1729 }
1461 1730
1462 ret = usbnet_resume(intf); 1731 ret = usbnet_resume(intf);
1463 check_warn_return(ret, "usbnet_resume error\n"); 1732 if (ret < 0)
1733 netdev_warn(dev->net, "usbnet_resume error\n");
1464 1734
1465 return 0; 1735 return ret;
1466} 1736}
1467 1737
1468static void smsc95xx_rx_csum_offload(struct sk_buff *skb) 1738static void smsc95xx_rx_csum_offload(struct sk_buff *skb)