Changeset 37058


Ignore:
Timestamp:
2013-06-28T13:22:11+02:00 (5 years ago)
Author:
blogic
Message:

ramips: fix ethernet driver

make sure the driver does not crash under load

Signed-off-by: John Crispin <blogic@…>

Location:
trunk/target/linux/ramips/patches-3.9
Files:
1 deleted
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ramips/patches-3.9/0159-NET-MIPS-add-ralink-SoC-ethernet-driver.patch

    r37043 r37058  
    1 From 12ea1efe1496e936d1cecc4de97ee55321aceee9 Mon Sep 17 00:00:00 2001 
     1From 1efe3ce91ab951090ac8db1872f0de32e0a88de8 Mon Sep 17 00:00:00 2001 
    22From: John Crispin <blogic@openwrt.org> 
    33Date: Mon, 22 Apr 2013 23:20:03 +0200 
    4 Subject: [PATCH 159/164] NET: MIPS: add ralink SoC ethernet driver 
     4Subject: [PATCH] NET: MIPS: add ralink SoC ethernet driver 
    55 
    66Add support for Ralink FE and ESW. 
     
    2020 drivers/net/ethernet/ralink/mdio.c                 |  245 ++++ 
    2121 drivers/net/ethernet/ralink/mdio.h                 |   29 + 
    22  drivers/net/ethernet/ralink/mdio_rt2880.c          |  163 +++ 
    23  drivers/net/ethernet/ralink/mdio_rt2880.h          |   25 + 
    24  drivers/net/ethernet/ralink/ralink_soc_eth.c       |  759 ++++++++++ 
    25  drivers/net/ethernet/ralink/ralink_soc_eth.h       |  372 +++++ 
     22 drivers/net/ethernet/ralink/mdio_rt2880.c          |  232 ++++ 
     23 drivers/net/ethernet/ralink/mdio_rt2880.h          |   26 + 
     24 drivers/net/ethernet/ralink/ralink_soc_eth.c       |  746 ++++++++++ 
     25 drivers/net/ethernet/ralink/ralink_soc_eth.h       |  374 +++++ 
    2626 drivers/net/ethernet/ralink/soc_mt7620.c           |  111 ++ 
    2727 drivers/net/ethernet/ralink/soc_rt2880.c           |   51 + 
    28  drivers/net/ethernet/ralink/soc_rt305x.c           |  102 ++ 
    29  drivers/net/ethernet/ralink/soc_rt3883.c           |   59 + 
    30  20 files changed, 4546 insertions(+) 
     28 drivers/net/ethernet/ralink/soc_rt305x.c           |  113 ++ 
     29 drivers/net/ethernet/ralink/soc_rt3883.c           |   60 + 
     30 drivers/watchdog/rt2880_wdt.c                      |    9 +- 
     31 21 files changed, 4622 insertions(+), 4 deletions(-) 
    3132 create mode 100644 arch/mips/include/asm/mach-ralink/rt305x_esw_platform.h 
    3233 create mode 100644 drivers/net/ethernet/ralink/Kconfig 
     
    4748 create mode 100644 drivers/net/ethernet/ralink/soc_rt3883.c 
    4849 
    49 Index: linux-3.9.6/arch/mips/include/asm/mach-ralink/rt305x_esw_platform.h 
    50 =================================================================== 
    51 --- /dev/null   1970-01-01 00:00:00.000000000 +0000 
    52 +++ linux-3.9.6/arch/mips/include/asm/mach-ralink/rt305x_esw_platform.h 2013-06-27 18:26:34.965452647 +0200 
     50diff --git a/arch/mips/include/asm/mach-ralink/rt305x_esw_platform.h b/arch/mips/include/asm/mach-ralink/rt305x_esw_platform.h 
     51new file mode 100644 
     52index 0000000..2098c5c 
     53--- /dev/null 
     54+++ b/arch/mips/include/asm/mach-ralink/rt305x_esw_platform.h 
    5355@@ -0,0 +1,27 @@ 
    5456+/* 
     
    7981+ 
    8082+#endif /* _RT305X_ESW_PLATFORM_H */ 
    81 Index: linux-3.9.6/arch/mips/ralink/rt305x.c 
    82 =================================================================== 
    83 --- linux-3.9.6.orig/arch/mips/ralink/rt305x.c  2013-06-27 18:26:34.177452613 +0200 
    84 +++ linux-3.9.6/arch/mips/ralink/rt305x.c       2013-06-27 18:26:34.965452647 +0200 
    85 @@ -221,6 +221,7 @@ 
     83diff --git a/arch/mips/ralink/rt305x.c b/arch/mips/ralink/rt305x.c 
     84index ca7ee3a..1a6b458 100644 
     85--- a/arch/mips/ralink/rt305x.c 
     86+++ b/arch/mips/ralink/rt305x.c 
     87@@ -221,6 +221,7 @@ void __init ralink_clk_init(void) 
    8688        } 
    8789  
     
    9193        ralink_clk_add("10000100.timer", wdt_rate); 
    9294        ralink_clk_add("10000120.watchdog", wdt_rate); 
    93 Index: linux-3.9.6/drivers/net/ethernet/Kconfig 
    94 =================================================================== 
    95 --- linux-3.9.6.orig/drivers/net/ethernet/Kconfig       2013-06-13 19:52:08.000000000 +0200 
    96 +++ linux-3.9.6/drivers/net/ethernet/Kconfig    2013-06-27 18:26:34.965452647 +0200 
    97 @@ -135,6 +135,7 @@ 
     95diff --git a/drivers/net/ethernet/Kconfig b/drivers/net/ethernet/Kconfig 
     96index ed956e0..0b3caa1 100644 
     97--- a/drivers/net/ethernet/Kconfig 
     98+++ b/drivers/net/ethernet/Kconfig 
     99@@ -135,6 +135,7 @@ config ETHOC 
    98100 source "drivers/net/ethernet/packetengines/Kconfig" 
    99101 source "drivers/net/ethernet/pasemi/Kconfig" 
     
    103105 source "drivers/net/ethernet/renesas/Kconfig" 
    104106 source "drivers/net/ethernet/rdc/Kconfig" 
    105 Index: linux-3.9.6/drivers/net/ethernet/Makefile 
    106 =================================================================== 
    107 --- linux-3.9.6.orig/drivers/net/ethernet/Makefile      2013-06-13 19:52:08.000000000 +0200 
    108 +++ linux-3.9.6/drivers/net/ethernet/Makefile   2013-06-27 18:26:34.969452647 +0200 
    109 @@ -53,6 +53,7 @@ 
     107diff --git a/drivers/net/ethernet/Makefile b/drivers/net/ethernet/Makefile 
     108index 8268d85..508c494 100644 
     109--- a/drivers/net/ethernet/Makefile 
     110+++ b/drivers/net/ethernet/Makefile 
     111@@ -53,6 +53,7 @@ obj-$(CONFIG_ETHOC) += ethoc.o 
    110112 obj-$(CONFIG_NET_PACKET_ENGINE) += packetengines/ 
    111113 obj-$(CONFIG_NET_VENDOR_PASEMI) += pasemi/ 
     
    115117 obj-$(CONFIG_SH_ETH) += renesas/ 
    116118 obj-$(CONFIG_NET_VENDOR_RDC) += rdc/ 
    117 Index: linux-3.9.6/drivers/net/ethernet/ralink/Kconfig 
    118 =================================================================== 
    119 --- /dev/null   1970-01-01 00:00:00.000000000 +0000 
    120 +++ linux-3.9.6/drivers/net/ethernet/ralink/Kconfig     2013-06-27 18:26:34.969452647 +0200 
     119diff --git a/drivers/net/ethernet/ralink/Kconfig b/drivers/net/ethernet/ralink/Kconfig 
     120new file mode 100644 
     121index 0000000..ca2c9ad 
     122--- /dev/null 
     123+++ b/drivers/net/ethernet/ralink/Kconfig 
    121124@@ -0,0 +1,31 @@ 
    122125+config NET_RALINK 
     
    151154+       select SWCONFIG 
    152155+endif 
    153 Index: linux-3.9.6/drivers/net/ethernet/ralink/Makefile 
    154 =================================================================== 
    155 --- /dev/null   1970-01-01 00:00:00.000000000 +0000 
    156 +++ linux-3.9.6/drivers/net/ethernet/ralink/Makefile    2013-06-27 18:26:34.969452647 +0200 
     156diff --git a/drivers/net/ethernet/ralink/Makefile b/drivers/net/ethernet/ralink/Makefile 
     157new file mode 100644 
     158index 0000000..a38fa21 
     159--- /dev/null 
     160+++ b/drivers/net/ethernet/ralink/Makefile 
    157161@@ -0,0 +1,18 @@ 
    158162+# 
     
    174178+ 
    175179+obj-$(CONFIG_NET_RALINK)                       += ralink-eth.o 
    176 Index: linux-3.9.6/drivers/net/ethernet/ralink/esw_rt3052.c 
    177 =================================================================== 
    178 --- /dev/null   1970-01-01 00:00:00.000000000 +0000 
    179 +++ linux-3.9.6/drivers/net/ethernet/ralink/esw_rt3052.c        2013-06-27 18:26:34.969452647 +0200 
     180diff --git a/drivers/net/ethernet/ralink/esw_rt3052.c b/drivers/net/ethernet/ralink/esw_rt3052.c 
     181new file mode 100644 
     182index 0000000..b937062 
     183--- /dev/null 
     184+++ b/drivers/net/ethernet/ralink/esw_rt3052.c 
    180185@@ -0,0 +1,1463 @@ 
    181186+/* 
     
    16421647+       platform_driver_unregister(&esw_driver); 
    16431648+} 
    1644 Index: linux-3.9.6/drivers/net/ethernet/ralink/esw_rt3052.h 
    1645 =================================================================== 
    1646 --- /dev/null   1970-01-01 00:00:00.000000000 +0000 
    1647 +++ linux-3.9.6/drivers/net/ethernet/ralink/esw_rt3052.h        2013-06-27 18:26:34.969452647 +0200 
     1649diff --git a/drivers/net/ethernet/ralink/esw_rt3052.h b/drivers/net/ethernet/ralink/esw_rt3052.h 
     1650new file mode 100644 
     1651index 0000000..2ced3dff 
     1652--- /dev/null 
     1653+++ b/drivers/net/ethernet/ralink/esw_rt3052.h 
    16481654@@ -0,0 +1,32 @@ 
    16491655+/* 
     
    16791685+#endif 
    16801686+#endif 
    1681 Index: linux-3.9.6/drivers/net/ethernet/ralink/gsw_mt7620a.c 
    1682 =================================================================== 
    1683 --- /dev/null   1970-01-01 00:00:00.000000000 +0000 
    1684 +++ linux-3.9.6/drivers/net/ethernet/ralink/gsw_mt7620a.c       2013-06-27 18:26:34.973452648 +0200 
     1687diff --git a/drivers/net/ethernet/ralink/gsw_mt7620a.c b/drivers/net/ethernet/ralink/gsw_mt7620a.c 
     1688new file mode 100644 
     1689index 0000000..9fa6a54 
     1690--- /dev/null 
     1691+++ b/drivers/net/ethernet/ralink/gsw_mt7620a.c 
    16851692@@ -0,0 +1,1027 @@ 
    16861693+/* 
     
    27112718+       return 0; 
    27122719+} 
    2713 Index: linux-3.9.6/drivers/net/ethernet/ralink/gsw_mt7620a.h 
    2714 =================================================================== 
    2715 --- /dev/null   1970-01-01 00:00:00.000000000 +0000 
    2716 +++ linux-3.9.6/drivers/net/ethernet/ralink/gsw_mt7620a.h       2013-06-27 18:26:34.973452648 +0200 
     2720diff --git a/drivers/net/ethernet/ralink/gsw_mt7620a.h b/drivers/net/ethernet/ralink/gsw_mt7620a.h 
     2721new file mode 100644 
     2722index 0000000..fd4add5 
     2723--- /dev/null 
     2724+++ b/drivers/net/ethernet/ralink/gsw_mt7620a.h 
    27172725@@ -0,0 +1,29 @@ 
    27182726+/* 
     
    27452753+ 
    27462754+#endif 
    2747 Index: linux-3.9.6/drivers/net/ethernet/ralink/mdio.c 
    2748 =================================================================== 
    2749 --- /dev/null   1970-01-01 00:00:00.000000000 +0000 
    2750 +++ linux-3.9.6/drivers/net/ethernet/ralink/mdio.c      2013-06-27 18:26:34.973452648 +0200 
     2755diff --git a/drivers/net/ethernet/ralink/mdio.c b/drivers/net/ethernet/ralink/mdio.c 
     2756new file mode 100644 
     2757index 0000000..b265c75 
     2758--- /dev/null 
     2759+++ b/drivers/net/ethernet/ralink/mdio.c 
    27512760@@ -0,0 +1,245 @@ 
    27522761+/* 
     
    29953004+       kfree(priv->mii_bus); 
    29963005+} 
    2997 Index: linux-3.9.6/drivers/net/ethernet/ralink/mdio.h 
    2998 =================================================================== 
    2999 --- /dev/null   1970-01-01 00:00:00.000000000 +0000 
    3000 +++ linux-3.9.6/drivers/net/ethernet/ralink/mdio.h      2013-06-27 18:26:34.973452648 +0200 
     3006diff --git a/drivers/net/ethernet/ralink/mdio.h b/drivers/net/ethernet/ralink/mdio.h 
     3007new file mode 100644 
     3008index 0000000..c3910a0 
     3009--- /dev/null 
     3010+++ b/drivers/net/ethernet/ralink/mdio.h 
    30013011@@ -0,0 +1,29 @@ 
    30023012+/* 
     
    30293039+#endif 
    30303040+#endif 
    3031 Index: linux-3.9.6/drivers/net/ethernet/ralink/mdio_rt2880.c 
    3032 =================================================================== 
    3033 --- /dev/null   1970-01-01 00:00:00.000000000 +0000 
    3034 +++ linux-3.9.6/drivers/net/ethernet/ralink/mdio_rt2880.c       2013-06-27 18:39:42.817486817 +0200 
    3035 @@ -0,0 +1,163 @@ 
     3041diff --git a/drivers/net/ethernet/ralink/mdio_rt2880.c b/drivers/net/ethernet/ralink/mdio_rt2880.c 
     3042new file mode 100644 
     3043index 0000000..701c7b6 
     3044--- /dev/null 
     3045+++ b/drivers/net/ethernet/ralink/mdio_rt2880.c 
     3046@@ -0,0 +1,232 @@ 
    30363047+/* 
    30373048+ *   This program is free software; you can redistribute it and/or modify 
     
    30683079+#include "ralink_soc_eth.h" 
    30693080+#include "mdio_rt2880.h" 
     3081+#include "mdio.h" 
    30703082+ 
    30713083+#define FE_MDIO_RETRY  1000 
     
    30853097+} 
    30863098+ 
    3087 +void rt2880_mdio_link_adjust(struct fe_priv *priv) 
     3099+void rt2880_mdio_link_adjust(struct fe_priv *priv, int port) 
    30883100+{ 
    30893101+       u32 mdio_cfg; 
     
    31023114+               mdio_cfg |= FE_MDIO_CFG_GP1_DUPLEX; 
    31033115+ 
    3104 +       if (priv->phy->tx_fc) 
     3116+       if (priv->phy->tx_fc[0]) 
    31053117+               mdio_cfg |= FE_MDIO_CFG_GP1_FC_TX; 
    31063118+ 
    3107 +       if (priv->phy->rx_fc) 
     3119+       if (priv->phy->rx_fc[0]) 
    31083120+               mdio_cfg |= FE_MDIO_CFG_GP1_FC_RX; 
    31093121+ 
     
    31973209+       return rt2880_mdio_wait_ready(priv); 
    31983210+} 
    3199 Index: linux-3.9.6/drivers/net/ethernet/ralink/mdio_rt2880.h 
    3200 =================================================================== 
    3201 --- /dev/null   1970-01-01 00:00:00.000000000 +0000 
    3202 +++ linux-3.9.6/drivers/net/ethernet/ralink/mdio_rt2880.h       2013-06-27 18:39:42.817486817 +0200 
    3203 @@ -0,0 +1,25 @@ 
     3211+ 
     3212+void rt2880_port_init(struct fe_priv *priv, struct device_node *np) 
     3213+{ 
     3214+       const __be32 *id = of_get_property(np, "reg", NULL); 
     3215+       const __be32 *link; 
     3216+       int size; 
     3217+       int phy_mode; 
     3218+ 
     3219+       if (!id || (be32_to_cpu(*id) != 0)) { 
     3220+               pr_err("%s: invalid port id\n", np->name); 
     3221+               return; 
     3222+       } 
     3223+ 
     3224+       priv->phy->phy_fixed[0] = of_get_property(np, "ralink,fixed-link", &size); 
     3225+       if (priv->phy->phy_fixed[0] && (size != (4 * sizeof(*priv->phy->phy_fixed[0])))) { 
     3226+               pr_err("%s: invalid fixed link property\n", np->name); 
     3227+               priv->phy->phy_fixed[0] = NULL; 
     3228+               return; 
     3229+       } 
     3230+ 
     3231+       phy_mode = of_get_phy_mode(np); 
     3232+       switch (phy_mode) { 
     3233+       case PHY_INTERFACE_MODE_RGMII: 
     3234+               break; 
     3235+       case PHY_INTERFACE_MODE_MII: 
     3236+               break; 
     3237+       case PHY_INTERFACE_MODE_RMII: 
     3238+               break; 
     3239+       default: 
     3240+               if (!priv->phy->phy_fixed[0]) 
     3241+                       dev_err(priv->device, "port %d - invalid phy mode\n", priv->phy->speed[0]); 
     3242+               break; 
     3243+       } 
     3244+ 
     3245+       priv->phy->phy_node[0] = of_parse_phandle(np, "phy-handle", 0); 
     3246+       if (!priv->phy->phy_node[0] && !priv->phy->phy_fixed[0]) 
     3247+               return; 
     3248+ 
     3249+       if (priv->phy->phy_fixed[0]) { 
     3250+               link = priv->phy->phy_fixed[0]; 
     3251+               priv->phy->speed[0] = be32_to_cpup(link++); 
     3252+               priv->phy->duplex[0] = be32_to_cpup(link++); 
     3253+               priv->phy->tx_fc[0] = be32_to_cpup(link++); 
     3254+               priv->phy->rx_fc[0] = be32_to_cpup(link++); 
     3255+ 
     3256+               priv->link[0] = 1; 
     3257+               switch (priv->phy->speed[0]) { 
     3258+               case SPEED_10: 
     3259+                       break; 
     3260+               case SPEED_100: 
     3261+                       break; 
     3262+               case SPEED_1000: 
     3263+                       break; 
     3264+               default: 
     3265+                       dev_err(priv->device, "invalid link speed: %d\n", priv->phy->speed[0]); 
     3266+                       priv->phy->phy_fixed[0] = 0; 
     3267+                       return; 
     3268+               } 
     3269+               dev_info(priv->device, "using fixed link parameters\n"); 
     3270+               rt2880_mdio_link_adjust(priv, 0); 
     3271+               return; 
     3272+       } 
     3273+       if (priv->phy->phy_node[0] && priv->mii_bus->phy_map[0]) { 
     3274+               fe_connect_phy_node(priv, priv->phy->phy_node[0]); 
     3275+       } 
     3276+ 
     3277+       return; 
     3278+} 
     3279diff --git a/drivers/net/ethernet/ralink/mdio_rt2880.h b/drivers/net/ethernet/ralink/mdio_rt2880.h 
     3280new file mode 100644 
     3281index 0000000..51e3633 
     3282--- /dev/null 
     3283+++ b/drivers/net/ethernet/ralink/mdio_rt2880.h 
     3284@@ -0,0 +1,26 @@ 
    32043285+/* 
    32053286+ *   This program is free software; you can redistribute it and/or modify 
     
    32223303+#define _RALINK_MDIO_RT2880_H__ 
    32233304+ 
    3224 +void rt2880_mdio_link_adjust(struct fe_priv *priv); 
     3305+void rt2880_mdio_link_adjust(struct fe_priv *priv, int port); 
    32253306+int rt2880_mdio_read(struct mii_bus *bus, int phy_addr, int phy_reg); 
    32263307+int rt2880_mdio_write(struct mii_bus *bus, int phy_addr, int phy_reg, u16 val); 
     3308+void rt2880_port_init(struct fe_priv *priv, struct device_node *np); 
    32273309+ 
    32283310+#endif 
    3229 Index: linux-3.9.6/drivers/net/ethernet/ralink/ralink_soc_eth.c 
    3230 =================================================================== 
    3231 --- /dev/null   1970-01-01 00:00:00.000000000 +0000 
    3232 +++ linux-3.9.6/drivers/net/ethernet/ralink/ralink_soc_eth.c    2013-06-27 18:26:34.977452648 +0200 
    3233 @@ -0,0 +1,762 @@ 
     3311diff --git a/drivers/net/ethernet/ralink/ralink_soc_eth.c b/drivers/net/ethernet/ralink/ralink_soc_eth.c 
     3312new file mode 100644 
     3313index 0000000..d75c669 
     3314--- /dev/null 
     3315+++ b/drivers/net/ethernet/ralink/ralink_soc_eth.c 
     3316@@ -0,0 +1,746 @@ 
    32343317+/* 
    32353318+ *   This program is free software; you can redistribute it and/or modify 
     
    35453628+       struct fe_priv *priv = container_of(napi, struct fe_priv, rx_napi); 
    35463629+       int idx = fe_reg_r32(FE_REG_RX_CALC_IDX0); 
    3547 +       unsigned long flags; 
    35483630+       int complete = 0; 
    35493631+       int rx = 0; 
    35503632+ 
    35513633+       while ((rx < budget) && !complete) { 
    3552 + 
    35533634+               idx = (idx + 1) % NUM_DMA_DESC; 
    35543635+ 
     
    35723653+                               priv->netdev->stats.rx_packets++; 
    35733654+                               priv->netdev->stats.rx_bytes += pktlen; 
    3574 +                               netif_rx(priv->rx_skb[idx]); 
     3655+                               netif_receive_skb(priv->rx_skb[idx]); 
    35753656+ 
    35763657+                               priv->rx_skb[idx] = new_skb; 
     
    35863667+                       } 
    35873668+ 
    3588 +                       spin_lock_irqsave(&priv->page_lock, flags); 
    35893669+                       if (priv->soc->rx_dma) 
    35903670+                               priv->soc->rx_dma(priv, idx, MAX_RX_LENGTH); 
     
    35923672+                               priv->rx_dma[idx].rxd2 = RX_DMA_LSO; 
    35933673+                       fe_reg_w32(idx, FE_REG_RX_CALC_IDX0); 
    3594 +                       spin_unlock_irqrestore(&priv->page_lock, flags); 
    35953674+ 
    35963675+                       rx++; 
     
    36003679+       } 
    36013680+ 
    3602 +       if (complete || !rx) { 
     3681+       if (complete) { 
    36033682+               napi_complete(&priv->rx_napi); 
    3604 +               spin_lock_irqsave(&priv->page_lock, flags); 
    36053683+               fe_int_enable(priv->soc->rx_dly_int); 
    3606 +               spin_unlock_irqrestore(&priv->page_lock, flags); 
    36073684+       } 
    36083685+ 
     
    36103687+} 
    36113688+ 
    3612 +static int fe_poll_tx(struct napi_struct *napi, int budget) 
    3613 +{ 
    3614 +       struct fe_priv *priv = container_of(napi, struct fe_priv, tx_napi); 
     3689+static void fe_tx_housekeeping(unsigned long ptr) 
     3690+{ 
     3691+       struct net_device *dev = (struct net_device*)ptr; 
     3692+       struct fe_priv *priv = netdev_priv(dev); 
    36153693+       unsigned int bytes_compl = 0; 
    36163694+       unsigned int pkts_compl = 0; 
    3617 +       struct netdev_queue *txq; 
    3618 +       unsigned long flags; 
    3619 + 
    3620 +       spin_lock_irqsave(&priv->page_lock, flags); 
    3621 +       while (pkts_compl < budget) { 
     3695+ 
     3696+       spin_lock(&priv->page_lock); 
     3697+       while (1) { 
    36223698+               struct fe_tx_dma *txd; 
    36233699+ 
     
    36363712+                       priv->tx_free_idx = 0; 
    36373713+       } 
    3638 +       spin_unlock_irqrestore(&priv->page_lock, flags); 
    3639 + 
    3640 +       txq = netdev_get_tx_queue(priv->netdev, 0); 
    3641 +       if (netif_tx_queue_stopped(txq)) 
    3642 +               netif_tx_start_queue(txq); 
    3643 + 
    3644 +       napi_complete(napi); 
     3714+ 
    36453715+       netdev_completed_queue(priv->netdev, pkts_compl, bytes_compl); 
    3646 + 
    3647 +       spin_lock_irqsave(&priv->page_lock, flags); 
     3716+        spin_unlock(&priv->page_lock); 
     3717+ 
    36483718+       fe_int_enable(priv->soc->tx_dly_int); 
    3649 +       spin_unlock_irqrestore(&priv->page_lock, flags); 
    3650 + 
    3651 +       return pkts_compl; 
    36523719+} 
    36533720+ 
     
    36563723+       struct fe_priv *priv = netdev_priv(dev); 
    36573724+ 
     3725+        tasklet_schedule(&priv->tx_tasklet); 
    36583726+       priv->netdev->stats.tx_errors++; 
    36593727+       netdev_err(dev, "transmit timed out, waking up the queue\n"); 
     
    36803748+       if (status & priv->soc->tx_dly_int) { 
    36813749+               fe_int_disable(priv->soc->tx_dly_int); 
    3682 +               napi_schedule(&priv->tx_napi); 
     3750+               tasklet_schedule(&priv->tx_tasklet); 
    36833751+       } 
    36843752+ 
     
    37173785+               for (i = 0; i < 16; i += 2) 
    37183786+                       fe_w32((i + 1) << 16 | i, fe_reg_table[FE_REG_FE_DMA_VID_BASE] + (i * 4)); 
     3787+ 
     3788+       tasklet_init(&priv->tx_tasklet, fe_tx_housekeeping, (unsigned long)dev); 
    37193789+ 
    37203790+       if (priv->soc->fwd_config) { 
     
    37573827+       spin_lock_irqsave(&priv->page_lock, flags); 
    37583828+       napi_enable(&priv->rx_napi); 
    3759 +       napi_enable(&priv->tx_napi); 
    37603829+ 
    37613830+       val = FE_TX_WB_DDONE | FE_RX_DMA_EN | FE_TX_DMA_EN; 
     
    37913860+       spin_lock_irqsave(&priv->page_lock, flags); 
    37923861+       napi_disable(&priv->rx_napi); 
    3793 +       napi_disable(&priv->tx_napi); 
    37943862+ 
    37953863+       fe_reg_w32(fe_reg_r32(FE_REG_PDMA_GLO_CFG) & 
     
    38503918+{ 
    38513919+       struct fe_priv *priv = netdev_priv(dev); 
     3920+ 
     3921+       tasklet_kill(&priv->tx_tasklet); 
    38523922+ 
    38533923+       if (priv->phy) 
     
    39314001+               return err; 
    39324002+       } 
    3933 + 
    39344003+       netif_napi_add(netdev, &priv->rx_napi, fe_poll_rx, 32); 
    3935 +       netif_napi_add(netdev, &priv->tx_napi, fe_poll_tx, 8); 
    3936 + 
    3937 +        platform_set_drvdata(pdev, netdev); 
     4004+ 
     4005+       platform_set_drvdata(pdev, netdev); 
    39384006+ 
    39394007+       netdev_info(netdev, "done loading\n"); 
     
    39494017+       netif_stop_queue(dev); 
    39504018+       netif_napi_del(&priv->rx_napi); 
    3951 +       netif_napi_del(&priv->tx_napi); 
    39524019+ 
    39534020+       unregister_netdev(dev); 
     
    39944061+MODULE_AUTHOR("John Crispin <blogic@openwrt.org>"); 
    39954062+MODULE_DESCRIPTION("Ethernet driver for Ralink SoC"); 
    3996 Index: linux-3.9.6/drivers/net/ethernet/ralink/ralink_soc_eth.h 
    3997 =================================================================== 
    3998 --- /dev/null   1970-01-01 00:00:00.000000000 +0000 
    3999 +++ linux-3.9.6/drivers/net/ethernet/ralink/ralink_soc_eth.h    2013-06-27 18:39:42.817486817 +0200 
    4000 @@ -0,0 +1,372 @@ 
     4063diff --git a/drivers/net/ethernet/ralink/ralink_soc_eth.h b/drivers/net/ethernet/ralink/ralink_soc_eth.h 
     4064new file mode 100644 
     4065index 0000000..85bc881 
     4066--- /dev/null 
     4067+++ b/drivers/net/ethernet/ralink/ralink_soc_eth.h 
     4068@@ -0,0 +1,374 @@ 
    40014069+/* 
    40024070+ *   This program is free software; you can redistribute it and/or modify 
     
    43024370+       int                     duplex[8]; 
    43034371+       int                     speed[8]; 
     4372+       int                     tx_fc[8]; 
     4373+       int                     rx_fc[8]; 
    43044374+       spinlock_t              lock; 
    43054375+ 
     
    43484418+ 
    43494419+       struct fe_rx_dma                *rx_dma; 
     4420+        struct napi_struct             rx_napi; 
    43504421+       struct sk_buff                  *rx_skb[NUM_DMA_DESC]; 
    4351 +        struct napi_struct             rx_napi; 
    43524422+       dma_addr_t                      rx_phys; 
    43534423+ 
    43544424+       struct fe_tx_dma                *tx_dma; 
     4425+       struct tasklet_struct           tx_tasklet; 
    43554426+       struct sk_buff                  *tx_skb[NUM_DMA_DESC]; 
    4356 +        struct napi_struct             tx_napi; 
    43574427+       dma_addr_t                      tx_phys; 
    43584428+       unsigned int                    tx_free_idx; 
     
    43714441+ 
    43724442+#endif /* FE_ETH_H */ 
    4373 Index: linux-3.9.6/drivers/net/ethernet/ralink/soc_mt7620.c 
    4374 =================================================================== 
    4375 --- /dev/null   1970-01-01 00:00:00.000000000 +0000 
    4376 +++ linux-3.9.6/drivers/net/ethernet/ralink/soc_mt7620.c        2013-06-27 18:26:34.977452648 +0200 
     4443diff --git a/drivers/net/ethernet/ralink/soc_mt7620.c b/drivers/net/ethernet/ralink/soc_mt7620.c 
     4444new file mode 100644 
     4445index 0000000..55e303f 
     4446--- /dev/null 
     4447+++ b/drivers/net/ethernet/ralink/soc_mt7620.c 
    43774448@@ -0,0 +1,111 @@ 
    43784449+/* 
     
    44874558+ 
    44884559+MODULE_DEVICE_TABLE(of, of_fe_match); 
    4489 Index: linux-3.9.6/drivers/net/ethernet/ralink/soc_rt2880.c 
    4490 =================================================================== 
    4491 --- /dev/null   1970-01-01 00:00:00.000000000 +0000 
    4492 +++ linux-3.9.6/drivers/net/ethernet/ralink/soc_rt2880.c        2013-06-27 18:36:41.649478961 +0200 
     4560diff --git a/drivers/net/ethernet/ralink/soc_rt2880.c b/drivers/net/ethernet/ralink/soc_rt2880.c 
     4561new file mode 100644 
     4562index 0000000..1110947 
     4563--- /dev/null 
     4564+++ b/drivers/net/ethernet/ralink/soc_rt2880.c 
    44934565@@ -0,0 +1,51 @@ 
    44944566+/* 
     
    45434615+ 
    45444616+MODULE_DEVICE_TABLE(of, of_fe_match); 
    4545 Index: linux-3.9.6/drivers/net/ethernet/ralink/soc_rt305x.c 
    4546 =================================================================== 
    4547 --- /dev/null   1970-01-01 00:00:00.000000000 +0000 
    4548 +++ linux-3.9.6/drivers/net/ethernet/ralink/soc_rt305x.c        2013-06-27 18:26:34.977452648 +0200 
     4617diff --git a/drivers/net/ethernet/ralink/soc_rt305x.c b/drivers/net/ethernet/ralink/soc_rt305x.c 
     4618new file mode 100644 
     4619index 0000000..482ca1f 
     4620--- /dev/null 
     4621+++ b/drivers/net/ethernet/ralink/soc_rt305x.c 
    45494622@@ -0,0 +1,113 @@ 
    45504623+/* 
     
    46614734+ 
    46624735+MODULE_DEVICE_TABLE(of, of_fe_match); 
    4663 Index: linux-3.9.6/drivers/net/ethernet/ralink/soc_rt3883.c 
    4664 =================================================================== 
    4665 --- /dev/null   1970-01-01 00:00:00.000000000 +0000 
    4666 +++ linux-3.9.6/drivers/net/ethernet/ralink/soc_rt3883.c        2013-06-27 18:39:42.817486817 +0200 
    4667 @@ -0,0 +1,59 @@ 
     4736diff --git a/drivers/net/ethernet/ralink/soc_rt3883.c b/drivers/net/ethernet/ralink/soc_rt3883.c 
     4737new file mode 100644 
     4738index 0000000..c660529 
     4739--- /dev/null 
     4740+++ b/drivers/net/ethernet/ralink/soc_rt3883.c 
     4741@@ -0,0 +1,60 @@ 
    46684742+/* 
    46694743+ *   This program is free software; you can redistribute it and/or modify 
     
    47154789+       .mdio_read = rt2880_mdio_read, 
    47164790+       .mdio_write = rt2880_mdio_write, 
    4717 +       .mdio_link_adjust = rt2880_mdio_link_adjust, 
     4791+       .mdio_adjust_link = rt2880_mdio_link_adjust, 
     4792+       .port_init = rt2880_port_init, 
    47184793+}; 
    47194794+ 
     
    47254800+MODULE_DEVICE_TABLE(of, of_fe_match); 
    47264801+ 
     4802--  
     48031.7.10.4 
     4804 
Note: See TracChangeset for help on using the changeset viewer.