Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'r6040-next'

Florian Fainelli says:

====================
net: r6040: Misc updates

Here are some various updates for the r6040 driver, mostly to make it more
modern and catch up with the latest API improvements.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>

+28 -33
+1 -1
MAINTAINERS
··· 9559 9559 S: Maintained 9560 9560 9561 9561 RDC R6040 FAST ETHERNET DRIVER 9562 - M: Florian Fainelli <florian@openwrt.org> 9562 + M: Florian Fainelli <f.fainelli@gmail.com> 9563 9563 L: netdev@vger.kernel.org 9564 9564 S: Maintained 9565 9565 F: drivers/net/ethernet/rdc/r6040.c
+27 -32
drivers/net/ethernet/rdc/r6040.c
··· 4 4 * Copyright (C) 2004 Sten Wang <sten.wang@rdc.com.tw> 5 5 * Copyright (C) 2007 6 6 * Daniel Gimpelevich <daniel@gimpelevich.san-francisco.ca.us> 7 - * Copyright (C) 2007-2012 Florian Fainelli <florian@openwrt.org> 7 + * Copyright (C) 2007-2012 Florian Fainelli <f.fainelli@gmail.com> 8 8 * 9 9 * This program is free software; you can redistribute it and/or 10 10 * modify it under the terms of the GNU General Public License ··· 48 48 #include <asm/processor.h> 49 49 50 50 #define DRV_NAME "r6040" 51 - #define DRV_VERSION "0.28" 52 - #define DRV_RELDATE "07Oct2011" 51 + #define DRV_VERSION "0.29" 52 + #define DRV_RELDATE "04Jul2016" 53 53 54 54 /* Time in jiffies before concluding the transmitter is hung. */ 55 55 #define TX_TIMEOUT (6000 * HZ / 1000) ··· 162 162 163 163 MODULE_AUTHOR("Sten Wang <sten.wang@rdc.com.tw>," 164 164 "Daniel Gimpelevich <daniel@gimpelevich.san-francisco.ca.us>," 165 - "Florian Fainelli <florian@openwrt.org>"); 165 + "Florian Fainelli <f.fainelli@gmail.com>"); 166 166 MODULE_LICENSE("GPL"); 167 167 MODULE_DESCRIPTION("RDC R6040 NAPI PCI FastEthernet driver"); 168 168 MODULE_VERSION(DRV_VERSION " " DRV_RELDATE); ··· 614 614 if (descptr->status & DSC_OWNER_MAC) 615 615 break; /* Not complete */ 616 616 skb_ptr = descptr->skb_ptr; 617 + 618 + /* Statistic Counter */ 619 + dev->stats.tx_packets++; 620 + dev->stats.tx_bytes += skb_ptr->len; 621 + 617 622 pci_unmap_single(priv->pdev, le32_to_cpu(descptr->buf), 618 623 skb_ptr->len, PCI_DMA_TODEVICE); 619 624 /* Free buffer */ 620 - dev_kfree_skb_irq(skb_ptr); 625 + dev_kfree_skb(skb_ptr); 621 626 descptr->skb_ptr = NULL; 622 627 /* To next descriptor */ 623 628 descptr = descptr->vndescp; ··· 643 638 void __iomem *ioaddr = priv->base; 644 639 int work_done; 645 640 641 + r6040_tx(dev); 642 + 646 643 work_done = r6040_rx(dev, budget); 647 644 648 645 if (work_done < budget) { 649 - napi_complete(napi); 650 - /* Enable RX interrupt */ 651 - iowrite16(ioread16(ioaddr + MIER) | RX_INTS, ioaddr + MIER); 646 + napi_complete_done(napi, work_done); 647 + /* Enable RX/TX interrupt */ 648 + iowrite16(ioread16(ioaddr + MIER) | RX_INTS | TX_INTS, 649 + ioaddr + MIER); 652 650 } 653 651 return work_done; 654 652 } ··· 678 670 } 679 671 680 672 /* RX interrupt request */ 681 - if (status & RX_INTS) { 673 + if (status & (RX_INTS | TX_INTS)) { 682 674 if (status & RX_NO_DESC) { 683 675 /* RX descriptor unavailable */ 684 676 dev->stats.rx_dropped++; ··· 689 681 690 682 if (likely(napi_schedule_prep(&lp->napi))) { 691 683 /* Mask off RX interrupt */ 692 - misr &= ~RX_INTS; 693 - __napi_schedule(&lp->napi); 684 + misr &= ~(RX_INTS | TX_INTS); 685 + __napi_schedule_irqoff(&lp->napi); 694 686 } 695 687 } 696 - 697 - /* TX interrupt request */ 698 - if (status & TX_INTS) 699 - r6040_tx(dev); 700 688 701 689 /* Restore RDC MAC interrupt */ 702 690 iowrite16(misr, ioaddr + MIER); ··· 814 810 void __iomem *ioaddr = lp->base; 815 811 unsigned long flags; 816 812 813 + if (skb_put_padto(skb, ETH_ZLEN) < 0) 814 + return NETDEV_TX_OK; 815 + 817 816 /* Critical Section */ 818 817 spin_lock_irqsave(&lp->lock, flags); 819 818 ··· 828 821 return NETDEV_TX_BUSY; 829 822 } 830 823 831 - /* Statistic Counter */ 832 - dev->stats.tx_packets++; 833 - dev->stats.tx_bytes += skb->len; 834 824 /* Set TX descriptor & Transmit it */ 835 825 lp->tx_free_desc--; 836 826 descptr = lp->tx_insert_ptr; 837 - if (skb->len < ETH_ZLEN) 838 - descptr->len = ETH_ZLEN; 839 - else 840 - descptr->len = skb->len; 841 - 827 + descptr->len = skb->len; 842 828 descptr->skb_ptr = skb; 843 829 descptr->buf = cpu_to_le32(pci_map_single(lp->pdev, 844 830 skb->data, skb->len, PCI_DMA_TODEVICE)); ··· 840 840 skb_tx_timestamp(skb); 841 841 842 842 /* Trigger the MAC to check the TX descriptor */ 843 - iowrite16(TM2TX, ioaddr + MTPR); 843 + if (!skb->xmit_more || netif_queue_stopped(dev)) 844 + iowrite16(TM2TX, ioaddr + MTPR); 844 845 lp->tx_insert_ptr = descptr->vndescp; 845 846 846 847 /* If no tx resource, stop */ ··· 1002 1001 lp->old_duplex = phydev->duplex; 1003 1002 } 1004 1003 1005 - if (status_changed) { 1006 - pr_info("%s: link %s", dev->name, phydev->link ? 1007 - "UP" : "DOWN"); 1008 - if (phydev->link) 1009 - pr_cont(" - %d/%s", phydev->speed, 1010 - DUPLEX_FULL == phydev->duplex ? "full" : "half"); 1011 - pr_cont("\n"); 1012 - } 1004 + if (status_changed) 1005 + phy_print_status(phydev); 1013 1006 } 1014 1007 1015 1008 static int r6040_mii_probe(struct net_device *dev)