mvebu: Migrate uci config to new PCIe path
[openwrt/staging/wigyori.git] / target / linux / mvebu / patches-4.9 / 419-net-mvneta-convert-to-phylink.patch
index dca4fa2992e7058e843fccdac6e9efda0c326823..b62dadd2f37a887b6e2733dcf64cb8fb8e716184 100644 (file)
@@ -21,15 +21,15 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
          Marvell ARMADA XP, ARMADA 370 and ARMADA 38x SoC family.
 --- a/drivers/net/ethernet/marvell/mvneta.c
 +++ b/drivers/net/ethernet/marvell/mvneta.c
-@@ -28,6 +28,7 @@
- #include <linux/of_mdio.h>
+@@ -29,6 +29,7 @@
  #include <linux/of_net.h>
  #include <linux/phy.h>
+ #include <linux/phy_fixed.h>
 +#include <linux/phylink.h>
  #include <linux/platform_device.h>
  #include <linux/skbuff.h>
  #include <net/hwbm.h>
-@@ -188,6 +189,7 @@
+@@ -189,6 +190,7 @@
  #define MVNETA_GMAC_CTRL_0                       0x2c00
  #define      MVNETA_GMAC_MAX_RX_SIZE_SHIFT       2
  #define      MVNETA_GMAC_MAX_RX_SIZE_MASK        0x7ffc
@@ -37,7 +37,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  #define      MVNETA_GMAC0_PORT_ENABLE            BIT(0)
  #define MVNETA_GMAC_CTRL_2                       0x2c08
  #define      MVNETA_GMAC2_INBAND_AN_ENABLE       BIT(0)
-@@ -203,13 +205,19 @@
+@@ -204,13 +206,19 @@
  #define      MVNETA_GMAC_TX_FLOW_CTRL_ENABLE     BIT(5)
  #define      MVNETA_GMAC_RX_FLOW_CTRL_ACTIVE     BIT(6)
  #define      MVNETA_GMAC_TX_FLOW_CTRL_ACTIVE     BIT(7)
@@ -57,7 +57,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  #define      MVNETA_GMAC_AN_FLOW_CTRL_EN         BIT(11)
  #define      MVNETA_GMAC_CONFIG_FULL_DUPLEX      BIT(12)
  #define      MVNETA_GMAC_AN_DUPLEX_EN            BIT(13)
-@@ -399,14 +407,9 @@ struct mvneta_port {
+@@ -400,14 +408,9 @@ struct mvneta_port {
        u16 tx_ring_size;
        u16 rx_ring_size;
  
@@ -74,7 +74,18 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  
        struct mvneta_bm *bm_priv;
        struct mvneta_bm_pool *pool_long;
-@@ -1240,44 +1243,6 @@ static void mvneta_set_other_mcast_table
+@@ -1182,10 +1185,6 @@ static void mvneta_port_disable(struct m
+       val &= ~MVNETA_GMAC0_PORT_ENABLE;
+       mvreg_write(pp, MVNETA_GMAC_CTRL_0, val);
+-      pp->link = 0;
+-      pp->duplex = -1;
+-      pp->speed = 0;
+-
+       udelay(200);
+ }
+@@ -1245,44 +1244,6 @@ static void mvneta_set_other_mcast_table
                mvreg_write(pp, MVNETA_DA_FILT_OTH_MCAST + offset, val);
  }
  
@@ -119,7 +130,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  static void mvneta_percpu_unmask_interrupt(void *arg)
  {
        struct mvneta_port *pp = arg;
-@@ -1425,7 +1390,6 @@ static void mvneta_defaults_set(struct m
+@@ -1430,7 +1391,6 @@ static void mvneta_defaults_set(struct m
        val &= ~MVNETA_PHY_POLLING_ENABLE;
        mvreg_write(pp, MVNETA_UNIT_CONTROL, val);
  
@@ -127,7 +138,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
        mvneta_set_ucast_table(pp, -1);
        mvneta_set_special_mcast_table(pp, -1);
        mvneta_set_other_mcast_table(pp, -1);
-@@ -2630,26 +2594,11 @@ static irqreturn_t mvneta_isr(int irq, v
+@@ -2635,26 +2595,11 @@ static irqreturn_t mvneta_isr(int irq, v
        return IRQ_HANDLED;
  }
  
@@ -156,7 +167,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  }
  
  /* NAPI handler
-@@ -2665,7 +2614,6 @@ static int mvneta_poll(struct napi_struc
+@@ -2670,7 +2615,6 @@ static int mvneta_poll(struct napi_struc
        u32 cause_rx_tx;
        int rx_queue;
        struct mvneta_port *pp = netdev_priv(napi->dev);
@@ -164,7 +175,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
        struct mvneta_pcpu_port *port = this_cpu_ptr(pp->ports);
  
        if (!netif_running(pp->dev)) {
-@@ -2679,12 +2627,11 @@ static int mvneta_poll(struct napi_struc
+@@ -2684,12 +2628,11 @@ static int mvneta_poll(struct napi_struc
                u32 cause_misc = mvreg_read(pp, MVNETA_INTR_MISC_CAUSE);
  
                mvreg_write(pp, MVNETA_INTR_MISC_CAUSE, 0);
@@ -182,7 +193,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
        }
  
        /* Release Tx descriptors */
-@@ -2982,7 +2929,6 @@ static int mvneta_setup_txqs(struct mvne
+@@ -2985,7 +2928,6 @@ static int mvneta_setup_txqs(struct mvne
  static void mvneta_start_dev(struct mvneta_port *pp)
  {
        int cpu;
@@ -190,7 +201,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  
        mvneta_max_rx_size_set(pp, pp->pkt_size);
        mvneta_txq_max_tx_size_set(pp, pp->pkt_size);
-@@ -3005,16 +2951,15 @@ static void mvneta_start_dev(struct mvne
+@@ -3008,16 +2950,15 @@ static void mvneta_start_dev(struct mvne
                    MVNETA_CAUSE_LINK_CHANGE |
                    MVNETA_CAUSE_PSC_SYNC_CHANGE);
  
@@ -209,7 +220,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  
        for_each_online_cpu(cpu) {
                struct mvneta_pcpu_port *port = per_cpu_ptr(pp->ports, cpu);
-@@ -3184,99 +3129,210 @@ static int mvneta_set_mac_addr(struct ne
+@@ -3187,99 +3128,210 @@ static int mvneta_set_mac_addr(struct ne
        return 0;
  }
  
@@ -252,15 +263,6 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
 -      struct phy_device *phydev = ndev->phydev;
 -      int status_change = 0;
 +      u32 gmac_stat;
-+
-+      gmac_stat = mvreg_read(pp, MVNETA_GMAC_STATUS);
-+
-+      if (gmac_stat & MVNETA_GMAC_SPEED_1000)
-+              state->speed = SPEED_1000;
-+      else if (gmac_stat & MVNETA_GMAC_SPEED_100)
-+              state->speed = SPEED_100;
-+      else
-+              state->speed = SPEED_10;
  
 -      if (phydev->link) {
 -              if ((pp->speed != phydev->speed) ||
@@ -279,17 +281,26 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
 -                              val |= MVNETA_GMAC_CONFIG_GMII_SPEED;
 -                      else if (phydev->speed == SPEED_100)
 -                              val |= MVNETA_GMAC_CONFIG_MII_SPEED;
-+      state->an_complete = !!(gmac_stat & MVNETA_GMAC_AN_COMPLETE);
-+      state->link = !!(gmac_stat & MVNETA_GMAC_LINK_UP);
-+      state->duplex = !!(gmac_stat & MVNETA_GMAC_FULL_DUPLEX);
++      gmac_stat = mvreg_read(pp, MVNETA_GMAC_STATUS);
  
 -                      mvreg_write(pp, MVNETA_GMAC_AUTONEG_CONFIG, val);
-+      return 1;
-+}
++      if (gmac_stat & MVNETA_GMAC_SPEED_1000)
++              state->speed = SPEED_1000;
++      else if (gmac_stat & MVNETA_GMAC_SPEED_100)
++              state->speed = SPEED_100;
++      else
++              state->speed = SPEED_10;
  
 -                      pp->duplex = phydev->duplex;
 -                      pp->speed  = phydev->speed;
 -              }
++      state->an_complete = !!(gmac_stat & MVNETA_GMAC_AN_COMPLETE);
++      state->link = !!(gmac_stat & MVNETA_GMAC_LINK_UP);
++      state->duplex = !!(gmac_stat & MVNETA_GMAC_FULL_DUPLEX);
++
++      return 1;
++}
++
 +static void mvneta_mac_an_restart(struct net_device *ndev, unsigned int mode)
 +{
 +      struct mvneta_port *pp = netdev_priv(ndev);
@@ -490,7 +501,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  }
  
  /* Electing a CPU must be done in an atomic way: it should be done
-@@ -3534,10 +3590,9 @@ static int mvneta_stop(struct net_device
+@@ -3537,10 +3589,9 @@ static int mvneta_stop(struct net_device
  
  static int mvneta_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
  {
@@ -503,7 +514,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  }
  
  /* Ethtool methods */
-@@ -3548,44 +3603,18 @@ mvneta_ethtool_set_link_ksettings(struct
+@@ -3551,44 +3602,18 @@ mvneta_ethtool_set_link_ksettings(struct
                                  const struct ethtool_link_ksettings *cmd)
  {
        struct mvneta_port *pp = netdev_priv(ndev);
@@ -557,7 +568,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  }
  
  /* Set interrupt coalescing for ethtools */
-@@ -3693,26 +3722,28 @@ static void mvneta_ethtool_update_stats(
+@@ -3696,26 +3721,28 @@ static void mvneta_ethtool_update_stats(
  {
        const struct mvneta_statistic *s;
        void __iomem *base = pp->base;
@@ -591,7 +602,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
        }
  }
  
-@@ -3872,7 +3903,7 @@ const struct ethtool_ops mvneta_eth_tool
+@@ -3875,7 +3902,7 @@ const struct ethtool_ops mvneta_eth_tool
        .get_rxnfc      = mvneta_ethtool_get_rxnfc,
        .get_rxfh       = mvneta_ethtool_get_rxfh,
        .set_rxfh       = mvneta_ethtool_set_rxfh,
@@ -600,7 +611,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
        .set_link_ksettings = mvneta_ethtool_set_link_ksettings,
  };
  
-@@ -3999,14 +4030,13 @@ static int mvneta_probe(struct platform_
+@@ -4002,14 +4029,13 @@ static int mvneta_probe(struct platform_
        const struct mbus_dram_target_info *dram_target_info;
        struct resource *res;
        struct device_node *dn = pdev->dev.of_node;
@@ -616,7 +627,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
        int tx_csum_limit;
        int phy_mode;
        int err;
-@@ -4022,31 +4052,11 @@ static int mvneta_probe(struct platform_
+@@ -4025,31 +4051,11 @@ static int mvneta_probe(struct platform_
                goto err_free_netdev;
        }
  
@@ -649,7 +660,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
        }
  
        dev->tx_queue_len = MVNETA_MAX_TXD;
-@@ -4057,12 +4067,7 @@ static int mvneta_probe(struct platform_
+@@ -4060,12 +4066,7 @@ static int mvneta_probe(struct platform_
  
        pp = netdev_priv(dev);
        spin_lock_init(&pp->lock);
@@ -663,7 +674,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  
        pp->rxq_def = rxq_def;
  
-@@ -4073,7 +4078,7 @@ static int mvneta_probe(struct platform_
+@@ -4076,7 +4077,7 @@ static int mvneta_probe(struct platform_
                pp->clk = devm_clk_get(&pdev->dev, NULL);
        if (IS_ERR(pp->clk)) {
                err = PTR_ERR(pp->clk);
@@ -672,7 +683,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
        }
  
        clk_prepare_enable(pp->clk);
-@@ -4181,6 +4186,14 @@ static int mvneta_probe(struct platform_
+@@ -4184,6 +4185,14 @@ static int mvneta_probe(struct platform_
        dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
        dev->gso_max_segs = MVNETA_MAX_TSO_SEGS;
  
@@ -687,7 +698,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
        err = register_netdev(dev);
        if (err < 0) {
                dev_err(&pdev->dev, "failed to register\n");
-@@ -4192,14 +4205,6 @@ static int mvneta_probe(struct platform_
+@@ -4195,14 +4204,6 @@ static int mvneta_probe(struct platform_
  
        platform_set_drvdata(pdev, pp->dev);
  
@@ -702,7 +713,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
        return 0;
  
  err_netdev:
-@@ -4210,16 +4215,14 @@ err_netdev:
+@@ -4213,16 +4214,14 @@ err_netdev:
                                       1 << pp->id);
        }
  err_free_stats:
@@ -721,7 +732,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  err_free_irq:
        irq_dispose_mapping(dev->irq);
  err_free_netdev:
-@@ -4231,7 +4234,6 @@ err_free_netdev:
+@@ -4234,7 +4233,6 @@ err_free_netdev:
  static int mvneta_remove(struct platform_device *pdev)
  {
        struct net_device  *dev = platform_get_drvdata(pdev);
@@ -729,7 +740,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
        struct mvneta_port *pp = netdev_priv(dev);
  
        unregister_netdev(dev);
-@@ -4239,10 +4241,8 @@ static int mvneta_remove(struct platform
+@@ -4242,10 +4240,8 @@ static int mvneta_remove(struct platform
        clk_disable_unprepare(pp->clk);
        free_percpu(pp->ports);
        free_percpu(pp->stats);