diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-06-12 17:27:40 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-06-12 17:27:40 -0400 |
commit | f9da455b93f6ba076935b4ef4589f61e529ae046 (patch) | |
tree | 3c4e69ce1ba1d6bf65915b97a76ca2172105b278 /drivers/net/ethernet/renesas/sh_eth.c | |
parent | 0e04c641b199435f3779454055f6a7de258ecdfc (diff) | |
parent | e5eca6d41f53db48edd8cf88a3f59d2c30227f8e (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
Pull networking updates from David Miller:
1) Seccomp BPF filters can now be JIT'd, from Alexei Starovoitov.
2) Multiqueue support in xen-netback and xen-netfront, from Andrew J
Benniston.
3) Allow tweaking of aggregation settings in cdc_ncm driver, from Bjørn
Mork.
4) BPF now has a "random" opcode, from Chema Gonzalez.
5) Add more BPF documentation and improve test framework, from Daniel
Borkmann.
6) Support TCP fastopen over ipv6, from Daniel Lee.
7) Add software TSO helper functions and use them to support software
TSO in mvneta and mv643xx_eth drivers. From Ezequiel Garcia.
8) Support software TSO in fec driver too, from Nimrod Andy.
9) Add Broadcom SYSTEMPORT driver, from Florian Fainelli.
10) Handle broadcasts more gracefully over macvlan when there are large
numbers of interfaces configured, from Herbert Xu.
11) Allow more control over fwmark used for non-socket based responses,
from Lorenzo Colitti.
12) Do TCP congestion window limiting based upon measurements, from Neal
Cardwell.
13) Support busy polling in SCTP, from Neal Horman.
14) Allow RSS key to be configured via ethtool, from Venkata Duvvuru.
15) Bridge promisc mode handling improvements from Vlad Yasevich.
16) Don't use inetpeer entries to implement ID generation any more, it
performs poorly, from Eric Dumazet.
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next: (1522 commits)
rtnetlink: fix userspace API breakage for iproute2 < v3.9.0
tcp: fixing TLP's FIN recovery
net: fec: Add software TSO support
net: fec: Add Scatter/gather support
net: fec: Increase buffer descriptor entry number
net: fec: Factorize feature setting
net: fec: Enable IP header hardware checksum
net: fec: Factorize the .xmit transmit function
bridge: fix compile error when compiling without IPv6 support
bridge: fix smatch warning / potential null pointer dereference
via-rhine: fix full-duplex with autoneg disable
bnx2x: Enlarge the dorq threshold for VFs
bnx2x: Check for UNDI in uncommon branch
bnx2x: Fix 1G-baseT link
bnx2x: Fix link for KR with swapped polarity lane
sctp: Fix sk_ack_backlog wrap-around problem
net/core: Add VF link state control policy
net/fsl: xgmac_mdio is dependent on OF_MDIO
net/fsl: Make xgmac_mdio read error message useful
net_sched: drr: warn when qdisc is not work conserving
...
Diffstat (limited to 'drivers/net/ethernet/renesas/sh_eth.c')
-rw-r--r-- | drivers/net/ethernet/renesas/sh_eth.c | 47 |
1 files changed, 29 insertions, 18 deletions
diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c index 6a9509ccd33b..7622213beef1 100644 --- a/drivers/net/ethernet/renesas/sh_eth.c +++ b/drivers/net/ethernet/renesas/sh_eth.c | |||
@@ -307,6 +307,27 @@ static const u16 sh_eth_offset_fast_sh4[SH_ETH_MAX_REGISTER_OFFSET] = { | |||
307 | }; | 307 | }; |
308 | 308 | ||
309 | static const u16 sh_eth_offset_fast_sh3_sh2[SH_ETH_MAX_REGISTER_OFFSET] = { | 309 | static const u16 sh_eth_offset_fast_sh3_sh2[SH_ETH_MAX_REGISTER_OFFSET] = { |
310 | [EDMR] = 0x0000, | ||
311 | [EDTRR] = 0x0004, | ||
312 | [EDRRR] = 0x0008, | ||
313 | [TDLAR] = 0x000c, | ||
314 | [RDLAR] = 0x0010, | ||
315 | [EESR] = 0x0014, | ||
316 | [EESIPR] = 0x0018, | ||
317 | [TRSCER] = 0x001c, | ||
318 | [RMFCR] = 0x0020, | ||
319 | [TFTR] = 0x0024, | ||
320 | [FDR] = 0x0028, | ||
321 | [RMCR] = 0x002c, | ||
322 | [EDOCR] = 0x0030, | ||
323 | [FCFTR] = 0x0034, | ||
324 | [RPADIR] = 0x0038, | ||
325 | [TRIMD] = 0x003c, | ||
326 | [RBWAR] = 0x0040, | ||
327 | [RDFAR] = 0x0044, | ||
328 | [TBRAR] = 0x004c, | ||
329 | [TDFAR] = 0x0050, | ||
330 | |||
310 | [ECMR] = 0x0160, | 331 | [ECMR] = 0x0160, |
311 | [ECSR] = 0x0164, | 332 | [ECSR] = 0x0164, |
312 | [ECSIPR] = 0x0168, | 333 | [ECSIPR] = 0x0168, |
@@ -546,7 +567,6 @@ static struct sh_eth_cpu_data sh7757_data = { | |||
546 | .register_type = SH_ETH_REG_FAST_SH4, | 567 | .register_type = SH_ETH_REG_FAST_SH4, |
547 | 568 | ||
548 | .eesipr_value = DMAC_M_RFRMER | DMAC_M_ECI | 0x003fffff, | 569 | .eesipr_value = DMAC_M_RFRMER | DMAC_M_ECI | 0x003fffff, |
549 | .rmcr_value = RMCR_RNC, | ||
550 | 570 | ||
551 | .tx_check = EESR_FTC | EESR_CND | EESR_DLC | EESR_CD | EESR_RTO, | 571 | .tx_check = EESR_FTC | EESR_CND | EESR_DLC | EESR_CD | EESR_RTO, |
552 | .eesr_err_check = EESR_TWB | EESR_TABT | EESR_RABT | EESR_RFE | | 572 | .eesr_err_check = EESR_TWB | EESR_TABT | EESR_RABT | EESR_RFE | |
@@ -624,7 +644,6 @@ static struct sh_eth_cpu_data sh7757_data_giga = { | |||
624 | EESR_RFE | EESR_RDE | EESR_RFRMER | EESR_TFE | | 644 | EESR_RFE | EESR_RDE | EESR_RFRMER | EESR_TFE | |
625 | EESR_TDE | EESR_ECI, | 645 | EESR_TDE | EESR_ECI, |
626 | .fdr_value = 0x0000072f, | 646 | .fdr_value = 0x0000072f, |
627 | .rmcr_value = RMCR_RNC, | ||
628 | 647 | ||
629 | .irq_flags = IRQF_SHARED, | 648 | .irq_flags = IRQF_SHARED, |
630 | .apr = 1, | 649 | .apr = 1, |
@@ -752,7 +771,6 @@ static struct sh_eth_cpu_data r8a7740_data = { | |||
752 | EESR_RFE | EESR_RDE | EESR_RFRMER | EESR_TFE | | 771 | EESR_RFE | EESR_RDE | EESR_RFRMER | EESR_TFE | |
753 | EESR_TDE | EESR_ECI, | 772 | EESR_TDE | EESR_ECI, |
754 | .fdr_value = 0x0000070f, | 773 | .fdr_value = 0x0000070f, |
755 | .rmcr_value = RMCR_RNC, | ||
756 | 774 | ||
757 | .apr = 1, | 775 | .apr = 1, |
758 | .mpr = 1, | 776 | .mpr = 1, |
@@ -784,7 +802,6 @@ static struct sh_eth_cpu_data r7s72100_data = { | |||
784 | EESR_RFE | EESR_RDE | EESR_RFRMER | EESR_TFE | | 802 | EESR_RFE | EESR_RDE | EESR_RFRMER | EESR_TFE | |
785 | EESR_TDE | EESR_ECI, | 803 | EESR_TDE | EESR_ECI, |
786 | .fdr_value = 0x0000070f, | 804 | .fdr_value = 0x0000070f, |
787 | .rmcr_value = RMCR_RNC, | ||
788 | 805 | ||
789 | .no_psr = 1, | 806 | .no_psr = 1, |
790 | .apr = 1, | 807 | .apr = 1, |
@@ -833,9 +850,6 @@ static void sh_eth_set_default_cpu_data(struct sh_eth_cpu_data *cd) | |||
833 | if (!cd->fdr_value) | 850 | if (!cd->fdr_value) |
834 | cd->fdr_value = DEFAULT_FDR_INIT; | 851 | cd->fdr_value = DEFAULT_FDR_INIT; |
835 | 852 | ||
836 | if (!cd->rmcr_value) | ||
837 | cd->rmcr_value = DEFAULT_RMCR_VALUE; | ||
838 | |||
839 | if (!cd->tx_check) | 853 | if (!cd->tx_check) |
840 | cd->tx_check = DEFAULT_TX_CHECK; | 854 | cd->tx_check = DEFAULT_TX_CHECK; |
841 | 855 | ||
@@ -1287,8 +1301,8 @@ static int sh_eth_dev_init(struct net_device *ndev, bool start) | |||
1287 | sh_eth_write(ndev, mdp->cd->fdr_value, FDR); | 1301 | sh_eth_write(ndev, mdp->cd->fdr_value, FDR); |
1288 | sh_eth_write(ndev, 0, TFTR); | 1302 | sh_eth_write(ndev, 0, TFTR); |
1289 | 1303 | ||
1290 | /* Frame recv control */ | 1304 | /* Frame recv control (enable multiple-packets per rx irq) */ |
1291 | sh_eth_write(ndev, mdp->cd->rmcr_value, RMCR); | 1305 | sh_eth_write(ndev, RMCR_RNC, RMCR); |
1292 | 1306 | ||
1293 | sh_eth_write(ndev, DESC_I_RINT8 | DESC_I_RINT5 | DESC_I_TINT2, TRSCER); | 1307 | sh_eth_write(ndev, DESC_I_RINT8 | DESC_I_RINT5 | DESC_I_TINT2, TRSCER); |
1294 | 1308 | ||
@@ -1385,7 +1399,6 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota) | |||
1385 | int entry = mdp->cur_rx % mdp->num_rx_ring; | 1399 | int entry = mdp->cur_rx % mdp->num_rx_ring; |
1386 | int boguscnt = (mdp->dirty_rx + mdp->num_rx_ring) - mdp->cur_rx; | 1400 | int boguscnt = (mdp->dirty_rx + mdp->num_rx_ring) - mdp->cur_rx; |
1387 | struct sk_buff *skb; | 1401 | struct sk_buff *skb; |
1388 | int exceeded = 0; | ||
1389 | u16 pkt_len = 0; | 1402 | u16 pkt_len = 0; |
1390 | u32 desc_status; | 1403 | u32 desc_status; |
1391 | 1404 | ||
@@ -1397,10 +1410,9 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota) | |||
1397 | if (--boguscnt < 0) | 1410 | if (--boguscnt < 0) |
1398 | break; | 1411 | break; |
1399 | 1412 | ||
1400 | if (*quota <= 0) { | 1413 | if (*quota <= 0) |
1401 | exceeded = 1; | ||
1402 | break; | 1414 | break; |
1403 | } | 1415 | |
1404 | (*quota)--; | 1416 | (*quota)--; |
1405 | 1417 | ||
1406 | if (!(desc_status & RDFEND)) | 1418 | if (!(desc_status & RDFEND)) |
@@ -1448,7 +1460,6 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota) | |||
1448 | ndev->stats.rx_packets++; | 1460 | ndev->stats.rx_packets++; |
1449 | ndev->stats.rx_bytes += pkt_len; | 1461 | ndev->stats.rx_bytes += pkt_len; |
1450 | } | 1462 | } |
1451 | rxdesc->status |= cpu_to_edmac(mdp, RD_RACT); | ||
1452 | entry = (++mdp->cur_rx) % mdp->num_rx_ring; | 1463 | entry = (++mdp->cur_rx) % mdp->num_rx_ring; |
1453 | rxdesc = &mdp->rx_ring[entry]; | 1464 | rxdesc = &mdp->rx_ring[entry]; |
1454 | } | 1465 | } |
@@ -1494,7 +1505,7 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota) | |||
1494 | sh_eth_write(ndev, EDRRR_R, EDRRR); | 1505 | sh_eth_write(ndev, EDRRR_R, EDRRR); |
1495 | } | 1506 | } |
1496 | 1507 | ||
1497 | return exceeded; | 1508 | return *quota <= 0; |
1498 | } | 1509 | } |
1499 | 1510 | ||
1500 | static void sh_eth_rcv_snd_disable(struct net_device *ndev) | 1511 | static void sh_eth_rcv_snd_disable(struct net_device *ndev) |
@@ -2627,8 +2638,8 @@ static int sh_mdio_init(struct sh_eth_private *mdp, | |||
2627 | pdev->name, pdev->id); | 2638 | pdev->name, pdev->id); |
2628 | 2639 | ||
2629 | /* PHY IRQ */ | 2640 | /* PHY IRQ */ |
2630 | mdp->mii_bus->irq = devm_kzalloc(dev, sizeof(int) * PHY_MAX_ADDR, | 2641 | mdp->mii_bus->irq = devm_kmalloc_array(dev, PHY_MAX_ADDR, sizeof(int), |
2631 | GFP_KERNEL); | 2642 | GFP_KERNEL); |
2632 | if (!mdp->mii_bus->irq) { | 2643 | if (!mdp->mii_bus->irq) { |
2633 | ret = -ENOMEM; | 2644 | ret = -ENOMEM; |
2634 | goto out_free_bus; | 2645 | goto out_free_bus; |
@@ -2843,7 +2854,7 @@ static int sh_eth_drv_probe(struct platform_device *pdev) | |||
2843 | ndev->netdev_ops = &sh_eth_netdev_ops_tsu; | 2854 | ndev->netdev_ops = &sh_eth_netdev_ops_tsu; |
2844 | else | 2855 | else |
2845 | ndev->netdev_ops = &sh_eth_netdev_ops; | 2856 | ndev->netdev_ops = &sh_eth_netdev_ops; |
2846 | SET_ETHTOOL_OPS(ndev, &sh_eth_ethtool_ops); | 2857 | ndev->ethtool_ops = &sh_eth_ethtool_ops; |
2847 | ndev->watchdog_timeo = TX_TIMEOUT; | 2858 | ndev->watchdog_timeo = TX_TIMEOUT; |
2848 | 2859 | ||
2849 | /* debug message level */ | 2860 | /* debug message level */ |